Commit d0302bc6 authored by Len Brown's avatar Len Brown

Merge branch 'misc' into release

Conflicts:
	include/acpi/acpixf.h
Signed-off-by: default avatarLen Brown <len.brown@intel.com>
parents 106ad8d6 237889bf
...@@ -139,6 +139,7 @@ and is between 256 and 4096 characters. It is defined in the file ...@@ -139,6 +139,7 @@ and is between 256 and 4096 characters. It is defined in the file
ht -- run only enough ACPI to enable Hyper Threading ht -- run only enough ACPI to enable Hyper Threading
strict -- Be less tolerant of platforms that are not strict -- Be less tolerant of platforms that are not
strictly ACPI specification compliant. strictly ACPI specification compliant.
rsdt -- prefer RSDT over (default) XSDT
See also Documentation/power/pm.txt, pci=noacpi See also Documentation/power/pm.txt, pci=noacpi
......
...@@ -65,6 +65,7 @@ EXPORT_SYMBOL(pm_idle); ...@@ -65,6 +65,7 @@ EXPORT_SYMBOL(pm_idle);
void (*pm_power_off) (void); void (*pm_power_off) (void);
EXPORT_SYMBOL(pm_power_off); EXPORT_SYMBOL(pm_power_off);
u32 acpi_rsdt_forced;
unsigned int acpi_cpei_override; unsigned int acpi_cpei_override;
unsigned int acpi_cpei_phys_cpuid; unsigned int acpi_cpei_phys_cpuid;
......
...@@ -47,7 +47,7 @@ ...@@ -47,7 +47,7 @@
#endif #endif
static int __initdata acpi_force = 0; static int __initdata acpi_force = 0;
u32 acpi_rsdt_forced;
#ifdef CONFIG_ACPI #ifdef CONFIG_ACPI
int acpi_disabled = 0; int acpi_disabled = 0;
#else #else
...@@ -1794,6 +1794,10 @@ static int __init parse_acpi(char *arg) ...@@ -1794,6 +1794,10 @@ static int __init parse_acpi(char *arg)
disable_acpi(); disable_acpi();
acpi_ht = 1; acpi_ht = 1;
} }
/* acpi=rsdt use RSDT instead of XSDT */
else if (strcmp(arg, "rsdt") == 0) {
acpi_rsdt_forced = 1;
}
/* "acpi=noirq" disables ACPI interrupt routing */ /* "acpi=noirq" disables ACPI interrupt routing */
else if (strcmp(arg, "noirq") == 0) { else if (strcmp(arg, "noirq") == 0) {
acpi_noirq_set(); acpi_noirq_set();
......
...@@ -56,6 +56,7 @@ static struct cstate_entry *cpu_cstate_entry; /* per CPU ptr */ ...@@ -56,6 +56,7 @@ static struct cstate_entry *cpu_cstate_entry; /* per CPU ptr */
static short mwait_supported[ACPI_PROCESSOR_MAX_POWER]; static short mwait_supported[ACPI_PROCESSOR_MAX_POWER];
#define MWAIT_SUBSTATE_MASK (0xf) #define MWAIT_SUBSTATE_MASK (0xf)
#define MWAIT_CSTATE_MASK (0xf)
#define MWAIT_SUBSTATE_SIZE (4) #define MWAIT_SUBSTATE_SIZE (4)
#define CPUID_MWAIT_LEAF (5) #define CPUID_MWAIT_LEAF (5)
...@@ -98,7 +99,8 @@ int acpi_processor_ffh_cstate_probe(unsigned int cpu, ...@@ -98,7 +99,8 @@ int acpi_processor_ffh_cstate_probe(unsigned int cpu,
cpuid(CPUID_MWAIT_LEAF, &eax, &ebx, &ecx, &edx); cpuid(CPUID_MWAIT_LEAF, &eax, &ebx, &ecx, &edx);
/* Check whether this particular cx_type (in CST) is supported or not */ /* Check whether this particular cx_type (in CST) is supported or not */
cstate_type = (cx->address >> MWAIT_SUBSTATE_SIZE) + 1; cstate_type = ((cx->address >> MWAIT_SUBSTATE_SIZE) &
MWAIT_CSTATE_MASK) + 1;
edx_part = edx >> (cstate_type * MWAIT_SUBSTATE_SIZE); edx_part = edx >> (cstate_type * MWAIT_SUBSTATE_SIZE);
num_cstate_subtype = edx_part & MWAIT_SUBSTATE_MASK; num_cstate_subtype = edx_part & MWAIT_SUBSTATE_MASK;
......
...@@ -445,7 +445,8 @@ acpi_tb_parse_root_table(acpi_physical_address rsdp_address, u8 flags) ...@@ -445,7 +445,8 @@ acpi_tb_parse_root_table(acpi_physical_address rsdp_address, u8 flags)
/* Differentiate between RSDT and XSDT root tables */ /* Differentiate between RSDT and XSDT root tables */
if (rsdp->revision > 1 && rsdp->xsdt_physical_address) { if (rsdp->revision > 1 && rsdp->xsdt_physical_address
&& !acpi_rsdt_forced) {
/* /*
* Root table is an XSDT (64-bit physical addresses). We must use the * Root table is an XSDT (64-bit physical addresses). We must use the
* XSDT if the revision is > 1 and the XSDT pointer is present, as per * XSDT if the revision is > 1 and the XSDT pointer is present, as per
......
...@@ -796,10 +796,6 @@ static int irqrouter_resume(struct sys_device *dev) ...@@ -796,10 +796,6 @@ static int irqrouter_resume(struct sys_device *dev)
struct list_head *node = NULL; struct list_head *node = NULL;
struct acpi_pci_link *link = NULL; struct acpi_pci_link *link = NULL;
/* Make sure SCI is enabled again (Apple firmware bug?) */
acpi_set_register(ACPI_BITREG_SCI_ENABLE, 1);
list_for_each(node, &acpi_link.entries) { list_for_each(node, &acpi_link.entries) {
link = list_entry(node, struct acpi_pci_link, node); link = list_entry(node, struct acpi_pci_link, node);
if (!link) { if (!link) {
......
...@@ -482,6 +482,7 @@ acpi_video_device_lcd_set_level(struct acpi_video_device *device, int level) ...@@ -482,6 +482,7 @@ acpi_video_device_lcd_set_level(struct acpi_video_device *device, int level)
int status = AE_OK; int status = AE_OK;
union acpi_object arg0 = { ACPI_TYPE_INTEGER }; union acpi_object arg0 = { ACPI_TYPE_INTEGER };
struct acpi_object_list args = { 1, &arg0 }; struct acpi_object_list args = { 1, &arg0 };
int state;
arg0.integer.value = level; arg0.integer.value = level;
...@@ -490,6 +491,10 @@ acpi_video_device_lcd_set_level(struct acpi_video_device *device, int level) ...@@ -490,6 +491,10 @@ acpi_video_device_lcd_set_level(struct acpi_video_device *device, int level)
status = acpi_evaluate_object(device->dev->handle, "_BCM", status = acpi_evaluate_object(device->dev->handle, "_BCM",
&args, NULL); &args, NULL);
device->brightness->curr = level; device->brightness->curr = level;
for (state = 2; state < device->brightness->count; state++)
if (level == device->brightness->levels[state])
device->backlight->props.brightness = state - 2;
return status; return status;
} }
......
...@@ -15,12 +15,14 @@ ...@@ -15,12 +15,14 @@
#include <linux/tick.h> #include <linux/tick.h>
#define BREAK_FUZZ 4 /* 4 us */ #define BREAK_FUZZ 4 /* 4 us */
#define PRED_HISTORY_PCT 50
struct menu_device { struct menu_device {
int last_state_idx; int last_state_idx;
unsigned int expected_us; unsigned int expected_us;
unsigned int predicted_us; unsigned int predicted_us;
unsigned int current_predicted_us;
unsigned int last_measured_us; unsigned int last_measured_us;
unsigned int elapsed_us; unsigned int elapsed_us;
}; };
...@@ -47,6 +49,12 @@ static int menu_select(struct cpuidle_device *dev) ...@@ -47,6 +49,12 @@ static int menu_select(struct cpuidle_device *dev)
data->expected_us = data->expected_us =
(u32) ktime_to_ns(tick_nohz_get_sleep_length()) / 1000; (u32) ktime_to_ns(tick_nohz_get_sleep_length()) / 1000;
/* Recalculate predicted_us based on prediction_history_pct */
data->predicted_us *= PRED_HISTORY_PCT;
data->predicted_us += (100 - PRED_HISTORY_PCT) *
data->current_predicted_us;
data->predicted_us /= 100;
/* find the deepest idle state that satisfies our constraints */ /* find the deepest idle state that satisfies our constraints */
for (i = CPUIDLE_DRIVER_STATE_START + 1; i < dev->state_count; i++) { for (i = CPUIDLE_DRIVER_STATE_START + 1; i < dev->state_count; i++) {
struct cpuidle_state *s = &dev->states[i]; struct cpuidle_state *s = &dev->states[i];
...@@ -97,7 +105,7 @@ static void menu_reflect(struct cpuidle_device *dev) ...@@ -97,7 +105,7 @@ static void menu_reflect(struct cpuidle_device *dev)
measured_us = -1; measured_us = -1;
/* Predict time until next break event */ /* Predict time until next break event */
data->predicted_us = max(measured_us, data->last_measured_us); data->current_predicted_us = max(measured_us, data->last_measured_us);
if (last_idle_us + BREAK_FUZZ < if (last_idle_us + BREAK_FUZZ <
data->expected_us - target->exit_latency) { data->expected_us - target->exit_latency) {
......
...@@ -70,6 +70,7 @@ extern u32 acpi_gbl_trace_flags; ...@@ -70,6 +70,7 @@ extern u32 acpi_gbl_trace_flags;
extern u32 acpi_current_gpe_count; extern u32 acpi_current_gpe_count;
extern struct acpi_table_fadt acpi_gbl_FADT; extern struct acpi_table_fadt acpi_gbl_FADT;
extern u32 acpi_rsdt_forced;
/* /*
* Global interfaces * Global interfaces
*/ */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment