mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-31 12:10:52 -04:00
Merge branch 'linus' into irq/numa
Conflicts: arch/mips/sibyte/bcm1480/irq.c arch/mips/sibyte/sb1250/irq.c Merge reason: we gathered a few conflicts plus update to latest upstream fixes. Signed-off-by: Ingo Molnar <[email protected]>
This commit is contained in:
commit
3d58f48ba0
758 changed files with 19610 additions and 5324 deletions
|
|
@ -5,40 +5,43 @@
|
|||
ccflags-y := -Os
|
||||
ccflags-$(CONFIG_ACPI_DEBUG) += -DACPI_DEBUG_OUTPUT
|
||||
|
||||
obj-y := dsfield.o dsmthdat.o dsopcode.o dswexec.o dswscope.o \
|
||||
# use acpi.o to put all files here into acpi.o modparam namespace
|
||||
obj-y += acpi.o
|
||||
|
||||
acpi-y := dsfield.o dsmthdat.o dsopcode.o dswexec.o dswscope.o \
|
||||
dsmethod.o dsobject.o dsutils.o dswload.o dswstate.o \
|
||||
dsinit.o
|
||||
|
||||
obj-y += evevent.o evregion.o evsci.o evxfevnt.o \
|
||||
acpi-y += evevent.o evregion.o evsci.o evxfevnt.o \
|
||||
evmisc.o evrgnini.o evxface.o evxfregn.o \
|
||||
evgpe.o evgpeblk.o
|
||||
|
||||
obj-y += exconfig.o exfield.o exnames.o exoparg6.o exresolv.o exstorob.o\
|
||||
acpi-y += exconfig.o exfield.o exnames.o exoparg6.o exresolv.o exstorob.o\
|
||||
exconvrt.o exfldio.o exoparg1.o exprep.o exresop.o exsystem.o\
|
||||
excreate.o exmisc.o exoparg2.o exregion.o exstore.o exutils.o \
|
||||
exdump.o exmutex.o exoparg3.o exresnte.o exstoren.o
|
||||
|
||||
obj-y += hwacpi.o hwgpe.o hwregs.o hwsleep.o hwxface.o hwvalid.o
|
||||
acpi-y += hwacpi.o hwgpe.o hwregs.o hwsleep.o hwxface.o hwvalid.o
|
||||
|
||||
obj-$(ACPI_FUTURE_USAGE) += hwtimer.o
|
||||
acpi-$(ACPI_FUTURE_USAGE) += hwtimer.o
|
||||
|
||||
obj-y += nsaccess.o nsload.o nssearch.o nsxfeval.o \
|
||||
acpi-y += nsaccess.o nsload.o nssearch.o nsxfeval.o \
|
||||
nsalloc.o nseval.o nsnames.o nsutils.o nsxfname.o \
|
||||
nsdump.o nsinit.o nsobject.o nswalk.o nsxfobj.o \
|
||||
nsparse.o nspredef.o
|
||||
|
||||
obj-$(ACPI_FUTURE_USAGE) += nsdumpdv.o
|
||||
acpi-$(ACPI_FUTURE_USAGE) += nsdumpdv.o
|
||||
|
||||
obj-y += psargs.o psparse.o psloop.o pstree.o pswalk.o \
|
||||
acpi-y += psargs.o psparse.o psloop.o pstree.o pswalk.o \
|
||||
psopcode.o psscope.o psutils.o psxface.o
|
||||
|
||||
obj-y += rsaddr.o rscreate.o rsinfo.o rsio.o rslist.o rsmisc.o rsxface.o \
|
||||
acpi-y += rsaddr.o rscreate.o rsinfo.o rsio.o rslist.o rsmisc.o rsxface.o \
|
||||
rscalc.o rsirq.o rsmemory.o rsutils.o
|
||||
|
||||
obj-$(ACPI_FUTURE_USAGE) += rsdump.o
|
||||
acpi-$(ACPI_FUTURE_USAGE) += rsdump.o
|
||||
|
||||
obj-y += tbxface.o tbinstal.o tbutils.o tbfind.o tbfadt.o tbxfroot.o
|
||||
acpi-y += tbxface.o tbinstal.o tbutils.o tbfind.o tbfadt.o tbxfroot.o
|
||||
|
||||
obj-y += utalloc.o utdebug.o uteval.o utinit.o utmisc.o utxface.o \
|
||||
acpi-y += utalloc.o utdebug.o uteval.o utinit.o utmisc.o utxface.o \
|
||||
utcopy.o utdelete.o utglobal.o utmath.o utobject.o \
|
||||
utstate.o utmutex.o utobject.o utresrc.o utlock.o
|
||||
|
|
|
|||
|
|
@ -787,7 +787,12 @@ struct acpi_bit_register_info {
|
|||
|
||||
/* For control registers, both ignored and reserved bits must be preserved */
|
||||
|
||||
#define ACPI_PM1_CONTROL_IGNORED_BITS 0x0201 /* Bits 9, 0(SCI_EN) */
|
||||
/*
|
||||
* The ACPI spec says to ignore PM1_CTL.SCI_EN (bit 0)
|
||||
* but we need to be able to write ACPI_BITREG_SCI_ENABLE directly
|
||||
* as a BIOS workaround on some machines.
|
||||
*/
|
||||
#define ACPI_PM1_CONTROL_IGNORED_BITS 0x0200 /* Bits 9 */
|
||||
#define ACPI_PM1_CONTROL_RESERVED_BITS 0xC1F8 /* Bits 14-15, 3-8 */
|
||||
#define ACPI_PM1_CONTROL_PRESERVED_BITS \
|
||||
(ACPI_PM1_CONTROL_IGNORED_BITS | ACPI_PM1_CONTROL_RESERVED_BITS)
|
||||
|
|
|
|||
|
|
@ -312,7 +312,7 @@ int acpi_bus_set_power(acpi_handle handle, int state)
|
|||
end:
|
||||
if (result)
|
||||
printk(KERN_WARNING PREFIX
|
||||
"Transitioning device [%s] to D%d\n",
|
||||
"Device [%s] failed to transition to D%d\n",
|
||||
device->pnp.bus_id, state);
|
||||
else {
|
||||
device->power.state = state;
|
||||
|
|
|
|||
|
|
@ -116,9 +116,6 @@ int acpi_pci_bind(struct acpi_device *device)
|
|||
struct acpi_pci_data *pdata;
|
||||
struct acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER, NULL };
|
||||
acpi_handle handle;
|
||||
struct pci_dev *dev;
|
||||
struct pci_bus *bus;
|
||||
|
||||
|
||||
if (!device || !device->parent)
|
||||
return -EINVAL;
|
||||
|
|
@ -176,20 +173,9 @@ int acpi_pci_bind(struct acpi_device *device)
|
|||
* Locate matching device in PCI namespace. If it doesn't exist
|
||||
* this typically means that the device isn't currently inserted
|
||||
* (e.g. docking station, port replicator, etc.).
|
||||
* We cannot simply search the global pci device list, since
|
||||
* PCI devices are added to the global pci list when the root
|
||||
* bridge start ops are run, which may not have happened yet.
|
||||
*/
|
||||
bus = pci_find_bus(data->id.segment, data->id.bus);
|
||||
if (bus) {
|
||||
list_for_each_entry(dev, &bus->devices, bus_list) {
|
||||
if (dev->devfn == PCI_DEVFN(data->id.device,
|
||||
data->id.function)) {
|
||||
data->dev = dev;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
data->dev = pci_get_slot(pdata->bus,
|
||||
PCI_DEVFN(data->id.device, data->id.function));
|
||||
if (!data->dev) {
|
||||
ACPI_DEBUG_PRINT((ACPI_DB_INFO,
|
||||
"Device %04x:%02x:%02x.%d not present in PCI namespace\n",
|
||||
|
|
@ -259,9 +245,10 @@ int acpi_pci_bind(struct acpi_device *device)
|
|||
|
||||
end:
|
||||
kfree(buffer.pointer);
|
||||
if (result)
|
||||
if (result) {
|
||||
pci_dev_put(data->dev);
|
||||
kfree(data);
|
||||
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
|
|
@ -303,6 +290,7 @@ static int acpi_pci_unbind(struct acpi_device *device)
|
|||
if (data->dev->subordinate) {
|
||||
acpi_pci_irq_del_prt(data->id.segment, data->bus->number);
|
||||
}
|
||||
pci_dev_put(data->dev);
|
||||
kfree(data);
|
||||
|
||||
end:
|
||||
|
|
|
|||
|
|
@ -148,6 +148,9 @@ static void acpi_timer_check_state(int state, struct acpi_processor *pr,
|
|||
if (cpu_has(&cpu_data(pr->id), X86_FEATURE_ARAT))
|
||||
return;
|
||||
|
||||
if (boot_cpu_has(X86_FEATURE_AMDC1E))
|
||||
type = ACPI_STATE_C1;
|
||||
|
||||
/*
|
||||
* Check, if one of the previous states already marked the lapic
|
||||
* unstable
|
||||
|
|
@ -202,21 +205,44 @@ static void acpi_state_timer_broadcast(struct acpi_processor *pr,
|
|||
* Suspend / resume control
|
||||
*/
|
||||
static int acpi_idle_suspend;
|
||||
static u32 saved_bm_rld;
|
||||
|
||||
static void acpi_idle_bm_rld_save(void)
|
||||
{
|
||||
acpi_read_bit_register(ACPI_BITREG_BUS_MASTER_RLD, &saved_bm_rld);
|
||||
}
|
||||
static void acpi_idle_bm_rld_restore(void)
|
||||
{
|
||||
u32 resumed_bm_rld;
|
||||
|
||||
acpi_read_bit_register(ACPI_BITREG_BUS_MASTER_RLD, &resumed_bm_rld);
|
||||
|
||||
if (resumed_bm_rld != saved_bm_rld)
|
||||
acpi_write_bit_register(ACPI_BITREG_BUS_MASTER_RLD, saved_bm_rld);
|
||||
}
|
||||
|
||||
int acpi_processor_suspend(struct acpi_device * device, pm_message_t state)
|
||||
{
|
||||
if (acpi_idle_suspend == 1)
|
||||
return 0;
|
||||
|
||||
acpi_idle_bm_rld_save();
|
||||
acpi_idle_suspend = 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int acpi_processor_resume(struct acpi_device * device)
|
||||
{
|
||||
if (acpi_idle_suspend == 0)
|
||||
return 0;
|
||||
|
||||
acpi_idle_bm_rld_restore();
|
||||
acpi_idle_suspend = 0;
|
||||
return 0;
|
||||
}
|
||||
|
||||
#if defined (CONFIG_GENERIC_TIME) && defined (CONFIG_X86)
|
||||
static int tsc_halts_in_c(int state)
|
||||
static void tsc_check_state(int state)
|
||||
{
|
||||
switch (boot_cpu_data.x86_vendor) {
|
||||
case X86_VENDOR_AMD:
|
||||
|
|
@ -226,13 +252,17 @@ static int tsc_halts_in_c(int state)
|
|||
* C/P/S0/S1 states when this bit is set.
|
||||
*/
|
||||
if (boot_cpu_has(X86_FEATURE_NONSTOP_TSC))
|
||||
return 0;
|
||||
return;
|
||||
|
||||
/*FALL THROUGH*/
|
||||
default:
|
||||
return state > ACPI_STATE_C1;
|
||||
/* TSC could halt in idle, so notify users */
|
||||
if (state > ACPI_STATE_C1)
|
||||
mark_tsc_unstable("TSC halts in idle");
|
||||
}
|
||||
}
|
||||
#else
|
||||
static void tsc_check_state(int state) { return; }
|
||||
#endif
|
||||
|
||||
static int acpi_processor_get_power_info_fadt(struct acpi_processor *pr)
|
||||
|
|
@ -578,17 +608,13 @@ static int acpi_processor_power_verify(struct acpi_processor *pr)
|
|||
|
||||
pr->power.timer_broadcast_on_state = INT_MAX;
|
||||
|
||||
for (i = 1; i < ACPI_PROCESSOR_MAX_POWER; i++) {
|
||||
for (i = 1; i < ACPI_PROCESSOR_MAX_POWER && i <= max_cstate; i++) {
|
||||
struct acpi_processor_cx *cx = &pr->power.states[i];
|
||||
|
||||
#if defined (CONFIG_GENERIC_TIME) && defined (CONFIG_X86)
|
||||
/* TSC could halt in idle, so notify users */
|
||||
if (tsc_halts_in_c(cx->type))
|
||||
mark_tsc_unstable("TSC halts in idle");;
|
||||
#endif
|
||||
switch (cx->type) {
|
||||
case ACPI_STATE_C1:
|
||||
cx->valid = 1;
|
||||
acpi_timer_check_state(i, pr, cx);
|
||||
break;
|
||||
|
||||
case ACPI_STATE_C2:
|
||||
|
|
@ -603,6 +629,8 @@ static int acpi_processor_power_verify(struct acpi_processor *pr)
|
|||
acpi_timer_check_state(i, pr, cx);
|
||||
break;
|
||||
}
|
||||
if (cx->valid)
|
||||
tsc_check_state(cx->type);
|
||||
|
||||
if (cx->valid)
|
||||
working++;
|
||||
|
|
@ -806,11 +834,12 @@ static int acpi_idle_enter_c1(struct cpuidle_device *dev,
|
|||
|
||||
/* Do not access any ACPI IO ports in suspend path */
|
||||
if (acpi_idle_suspend) {
|
||||
acpi_safe_halt();
|
||||
local_irq_enable();
|
||||
cpu_relax();
|
||||
return 0;
|
||||
}
|
||||
|
||||
acpi_state_timer_broadcast(pr, cx, 1);
|
||||
kt1 = ktime_get_real();
|
||||
acpi_idle_do_entry(cx);
|
||||
kt2 = ktime_get_real();
|
||||
|
|
@ -818,6 +847,7 @@ static int acpi_idle_enter_c1(struct cpuidle_device *dev,
|
|||
|
||||
local_irq_enable();
|
||||
cx->usage++;
|
||||
acpi_state_timer_broadcast(pr, cx, 0);
|
||||
|
||||
return idle_time;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -309,9 +309,15 @@ static int acpi_processor_get_performance_states(struct acpi_processor *pr)
|
|||
(u32) px->bus_master_latency,
|
||||
(u32) px->control, (u32) px->status));
|
||||
|
||||
if (!px->core_frequency) {
|
||||
printk(KERN_ERR PREFIX
|
||||
"Invalid _PSS data: freq is zero\n");
|
||||
/*
|
||||
* Check that ACPI's u64 MHz will be valid as u32 KHz in cpufreq
|
||||
*/
|
||||
if (!px->core_frequency ||
|
||||
((u32)(px->core_frequency * 1000) !=
|
||||
(px->core_frequency * 1000))) {
|
||||
printk(KERN_ERR FW_BUG PREFIX
|
||||
"Invalid BIOS _PSS frequency: 0x%llx MHz\n",
|
||||
px->core_frequency);
|
||||
result = -EFAULT;
|
||||
kfree(pr->performance->states);
|
||||
goto end;
|
||||
|
|
|
|||
|
|
@ -45,6 +45,14 @@
|
|||
#define _COMPONENT ACPI_PROCESSOR_COMPONENT
|
||||
ACPI_MODULE_NAME("processor_throttling");
|
||||
|
||||
/* ignore_tpc:
|
||||
* 0 -> acpi processor driver doesn't ignore _TPC values
|
||||
* 1 -> acpi processor driver ignores _TPC values
|
||||
*/
|
||||
static int ignore_tpc;
|
||||
module_param(ignore_tpc, int, 0644);
|
||||
MODULE_PARM_DESC(ignore_tpc, "Disable broken BIOS _TPC throttling support");
|
||||
|
||||
struct throttling_tstate {
|
||||
unsigned int cpu; /* cpu nr */
|
||||
int target_state; /* target T-state */
|
||||
|
|
@ -283,6 +291,10 @@ static int acpi_processor_get_platform_limit(struct acpi_processor *pr)
|
|||
|
||||
if (!pr)
|
||||
return -EINVAL;
|
||||
|
||||
if (ignore_tpc)
|
||||
goto end;
|
||||
|
||||
status = acpi_evaluate_integer(pr->handle, "_TPC", NULL, &tpc);
|
||||
if (ACPI_FAILURE(status)) {
|
||||
if (status != AE_NOT_FOUND) {
|
||||
|
|
@ -290,6 +302,8 @@ static int acpi_processor_get_platform_limit(struct acpi_processor *pr)
|
|||
}
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
end:
|
||||
pr->throttling_platform_limit = (int)tpc;
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -302,6 +316,9 @@ int acpi_processor_tstate_has_changed(struct acpi_processor *pr)
|
|||
struct acpi_processor_limit *limit;
|
||||
int target_state;
|
||||
|
||||
if (ignore_tpc)
|
||||
return 0;
|
||||
|
||||
result = acpi_processor_get_platform_limit(pr);
|
||||
if (result) {
|
||||
/* Throttling Limit is unsupported */
|
||||
|
|
@ -821,6 +838,14 @@ static int acpi_processor_get_throttling_ptc(struct acpi_processor *pr)
|
|||
ret = acpi_read_throttling_status(pr, &value);
|
||||
if (ret >= 0) {
|
||||
state = acpi_get_throttling_state(pr, value);
|
||||
if (state == -1) {
|
||||
ACPI_WARNING((AE_INFO,
|
||||
"Invalid throttling state, reset"));
|
||||
state = 0;
|
||||
ret = acpi_processor_set_throttling(pr, state);
|
||||
if (ret)
|
||||
return ret;
|
||||
}
|
||||
pr->throttling.state = state;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -538,6 +538,57 @@ acpi_video_device_lcd_set_level(struct acpi_video_device *device, int level)
|
|||
return -EINVAL;
|
||||
}
|
||||
|
||||
/*
|
||||
* For some buggy _BQC methods, we need to add a constant value to
|
||||
* the _BQC return value to get the actual current brightness level
|
||||
*/
|
||||
|
||||
static int bqc_offset_aml_bug_workaround;
|
||||
static int __init video_set_bqc_offset(const struct dmi_system_id *d)
|
||||
{
|
||||
bqc_offset_aml_bug_workaround = 9;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct dmi_system_id video_dmi_table[] __initdata = {
|
||||
/*
|
||||
* Broken _BQC workaround http://bugzilla.kernel.org/show_bug.cgi?id=13121
|
||||
*/
|
||||
{
|
||||
.callback = video_set_bqc_offset,
|
||||
.ident = "Acer Aspire 5720",
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_BOARD_VENDOR, "Acer"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "Aspire 5720"),
|
||||
},
|
||||
},
|
||||
{
|
||||
.callback = video_set_bqc_offset,
|
||||
.ident = "Acer Aspire 5710Z",
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_BOARD_VENDOR, "Acer"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "Aspire 5710Z"),
|
||||
},
|
||||
},
|
||||
{
|
||||
.callback = video_set_bqc_offset,
|
||||
.ident = "eMachines E510",
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_BOARD_VENDOR, "EMACHINES"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "eMachines E510"),
|
||||
},
|
||||
},
|
||||
{
|
||||
.callback = video_set_bqc_offset,
|
||||
.ident = "Acer Aspire 5315",
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_BOARD_VENDOR, "Acer"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "Aspire 5315"),
|
||||
},
|
||||
},
|
||||
{}
|
||||
};
|
||||
|
||||
static int
|
||||
acpi_video_device_lcd_get_level_current(struct acpi_video_device *device,
|
||||
unsigned long long *level)
|
||||
|
|
@ -557,6 +608,7 @@ acpi_video_device_lcd_get_level_current(struct acpi_video_device *device,
|
|||
*level = device->brightness->levels[*level + 2];
|
||||
|
||||
}
|
||||
*level += bqc_offset_aml_bug_workaround;
|
||||
device->brightness->curr = *level;
|
||||
return 0;
|
||||
} else {
|
||||
|
|
@ -2290,13 +2342,15 @@ EXPORT_SYMBOL(acpi_video_register);
|
|||
|
||||
static int __init acpi_video_init(void)
|
||||
{
|
||||
dmi_check_system(video_dmi_table);
|
||||
|
||||
if (intel_opregion_present())
|
||||
return 0;
|
||||
|
||||
return acpi_video_register();
|
||||
}
|
||||
|
||||
void __exit acpi_video_exit(void)
|
||||
void acpi_video_exit(void)
|
||||
{
|
||||
|
||||
acpi_bus_unregister_driver(&acpi_video_bus);
|
||||
|
|
|
|||
Loading…
Reference in a new issue