Merge branch 'misc' into release
Conflicts: include/acpi/acpixf.h Signed-off-by: Len Brown <len.brown@intel.com>
This commit is contained in:
@@ -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);
|
|||||||
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 @@
|
|||||||
#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)
|
|||||||
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 */
|
|||||||
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,
|
|||||||
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)
|
|||||||
|
|
||||||
/* 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)
|
|||||||
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)
|
|||||||
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)
|
|||||||
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 @@
|
|||||||
#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)
|
|||||||
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)
|
|||||||
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;
|
|||||||
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
|
||||||
*/
|
*/
|
||||||
|
Reference in New Issue
Block a user