mirror of
https://github.com/rd-stuffs/msm-4.14.git
synced 2025-02-20 11:45:48 +08:00
Merge branch 'release' of git://git.kernel.org/pub/scm/linux/kernel/git/lenb/linux-acpi-2.6
* 'release' of git://git.kernel.org/pub/scm/linux/kernel/git/lenb/linux-acpi-2.6: ACPI: sleep: init_set_sci_en_on_resume for Dell Studio 155x ACPI: fix acpi_hest_firmware_first_pci() caused oops sbshc: acpi_device_class "smbus_host_controller" too long power_meter: acpi_device_class "power_meter_resource" too long acpi_pad: "processor_aggregator" name too long PNP: don't check for conflicts with bridge windows ACPI: DMI init_set_sci_en_on_resume for multiple Lenovo ThinkPads PNPACPI: compute Address Space length rather than using _LEN ACPI: silence kmemcheck false positive
This commit is contained in:
commit
4a22533136
@ -31,7 +31,7 @@
|
|||||||
#include <acpi/acpi_bus.h>
|
#include <acpi/acpi_bus.h>
|
||||||
#include <acpi/acpi_drivers.h>
|
#include <acpi/acpi_drivers.h>
|
||||||
|
|
||||||
#define ACPI_PROCESSOR_AGGREGATOR_CLASS "processor_aggregator"
|
#define ACPI_PROCESSOR_AGGREGATOR_CLASS "acpi_pad"
|
||||||
#define ACPI_PROCESSOR_AGGREGATOR_DEVICE_NAME "Processor Aggregator"
|
#define ACPI_PROCESSOR_AGGREGATOR_DEVICE_NAME "Processor Aggregator"
|
||||||
#define ACPI_PROCESSOR_AGGREGATOR_NOTIFY 0x80
|
#define ACPI_PROCESSOR_AGGREGATOR_NOTIFY 0x80
|
||||||
static DEFINE_MUTEX(isolated_cpus_lock);
|
static DEFINE_MUTEX(isolated_cpus_lock);
|
||||||
|
@ -527,7 +527,7 @@ int acpi_bus_generate_proc_event4(const char *device_class, const char *bus_id,
|
|||||||
if (!event_is_open)
|
if (!event_is_open)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
event = kmalloc(sizeof(struct acpi_bus_event), GFP_ATOMIC);
|
event = kzalloc(sizeof(struct acpi_bus_event), GFP_ATOMIC);
|
||||||
if (!event)
|
if (!event)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
||||||
|
@ -123,6 +123,10 @@ int acpi_hest_firmware_first_pci(struct pci_dev *pci)
|
|||||||
{
|
{
|
||||||
acpi_status status = AE_NOT_FOUND;
|
acpi_status status = AE_NOT_FOUND;
|
||||||
struct acpi_table_header *hest = NULL;
|
struct acpi_table_header *hest = NULL;
|
||||||
|
|
||||||
|
if (acpi_disabled)
|
||||||
|
return 0;
|
||||||
|
|
||||||
status = acpi_get_table(ACPI_SIG_HEST, 1, &hest);
|
status = acpi_get_table(ACPI_SIG_HEST, 1, &hest);
|
||||||
|
|
||||||
if (ACPI_SUCCESS(status)) {
|
if (ACPI_SUCCESS(status)) {
|
||||||
|
@ -35,7 +35,7 @@
|
|||||||
#define ACPI_POWER_METER_NAME "power_meter"
|
#define ACPI_POWER_METER_NAME "power_meter"
|
||||||
ACPI_MODULE_NAME(ACPI_POWER_METER_NAME);
|
ACPI_MODULE_NAME(ACPI_POWER_METER_NAME);
|
||||||
#define ACPI_POWER_METER_DEVICE_NAME "Power Meter"
|
#define ACPI_POWER_METER_DEVICE_NAME "Power Meter"
|
||||||
#define ACPI_POWER_METER_CLASS "power_meter_resource"
|
#define ACPI_POWER_METER_CLASS "pwr_meter_resource"
|
||||||
|
|
||||||
#define NUM_SENSORS 17
|
#define NUM_SENSORS 17
|
||||||
|
|
||||||
|
@ -18,7 +18,7 @@
|
|||||||
|
|
||||||
#define PREFIX "ACPI: "
|
#define PREFIX "ACPI: "
|
||||||
|
|
||||||
#define ACPI_SMB_HC_CLASS "smbus_host_controller"
|
#define ACPI_SMB_HC_CLASS "smbus_host_ctl"
|
||||||
#define ACPI_SMB_HC_DEVICE_NAME "ACPI SMBus HC"
|
#define ACPI_SMB_HC_DEVICE_NAME "ACPI SMBus HC"
|
||||||
|
|
||||||
struct acpi_smb_hc {
|
struct acpi_smb_hc {
|
||||||
|
@ -450,6 +450,126 @@ static struct dmi_system_id __initdata acpisleep_dmi_table[] = {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
.callback = init_set_sci_en_on_resume,
|
||||||
|
.ident = "Lenovo ThinkPad T410",
|
||||||
|
.matches = {
|
||||||
|
DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
|
||||||
|
DMI_MATCH(DMI_PRODUCT_VERSION, "ThinkPad T410"),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
.callback = init_set_sci_en_on_resume,
|
||||||
|
.ident = "Lenovo ThinkPad T510",
|
||||||
|
.matches = {
|
||||||
|
DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
|
||||||
|
DMI_MATCH(DMI_PRODUCT_VERSION, "ThinkPad T510"),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
.callback = init_set_sci_en_on_resume,
|
||||||
|
.ident = "Lenovo ThinkPad W510",
|
||||||
|
.matches = {
|
||||||
|
DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
|
||||||
|
DMI_MATCH(DMI_PRODUCT_VERSION, "ThinkPad W510"),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
.callback = init_set_sci_en_on_resume,
|
||||||
|
.ident = "Lenovo ThinkPad X201",
|
||||||
|
.matches = {
|
||||||
|
DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
|
||||||
|
DMI_MATCH(DMI_PRODUCT_VERSION, "ThinkPad X201"),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
.callback = init_set_sci_en_on_resume,
|
||||||
|
.ident = "Lenovo ThinkPad X201",
|
||||||
|
.matches = {
|
||||||
|
DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
|
||||||
|
DMI_MATCH(DMI_PRODUCT_VERSION, "ThinkPad X201s"),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
.callback = init_set_sci_en_on_resume,
|
||||||
|
.ident = "Lenovo ThinkPad T410",
|
||||||
|
.matches = {
|
||||||
|
DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
|
||||||
|
DMI_MATCH(DMI_PRODUCT_VERSION, "ThinkPad T410"),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
.callback = init_set_sci_en_on_resume,
|
||||||
|
.ident = "Lenovo ThinkPad T510",
|
||||||
|
.matches = {
|
||||||
|
DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
|
||||||
|
DMI_MATCH(DMI_PRODUCT_VERSION, "ThinkPad T510"),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
.callback = init_set_sci_en_on_resume,
|
||||||
|
.ident = "Lenovo ThinkPad W510",
|
||||||
|
.matches = {
|
||||||
|
DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
|
||||||
|
DMI_MATCH(DMI_PRODUCT_VERSION, "ThinkPad W510"),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
.callback = init_set_sci_en_on_resume,
|
||||||
|
.ident = "Lenovo ThinkPad X201",
|
||||||
|
.matches = {
|
||||||
|
DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
|
||||||
|
DMI_MATCH(DMI_PRODUCT_VERSION, "ThinkPad X201"),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
.callback = init_set_sci_en_on_resume,
|
||||||
|
.ident = "Lenovo ThinkPad X201",
|
||||||
|
.matches = {
|
||||||
|
DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
|
||||||
|
DMI_MATCH(DMI_PRODUCT_VERSION, "ThinkPad X201s"),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
.callback = init_set_sci_en_on_resume,
|
||||||
|
.ident = "Lenovo ThinkPad T410",
|
||||||
|
.matches = {
|
||||||
|
DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
|
||||||
|
DMI_MATCH(DMI_PRODUCT_VERSION, "ThinkPad T410"),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
.callback = init_set_sci_en_on_resume,
|
||||||
|
.ident = "Lenovo ThinkPad T510",
|
||||||
|
.matches = {
|
||||||
|
DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
|
||||||
|
DMI_MATCH(DMI_PRODUCT_VERSION, "ThinkPad T510"),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
.callback = init_set_sci_en_on_resume,
|
||||||
|
.ident = "Lenovo ThinkPad W510",
|
||||||
|
.matches = {
|
||||||
|
DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
|
||||||
|
DMI_MATCH(DMI_PRODUCT_VERSION, "ThinkPad W510"),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
.callback = init_set_sci_en_on_resume,
|
||||||
|
.ident = "Lenovo ThinkPad X201",
|
||||||
|
.matches = {
|
||||||
|
DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
|
||||||
|
DMI_MATCH(DMI_PRODUCT_VERSION, "ThinkPad X201"),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
.callback = init_set_sci_en_on_resume,
|
||||||
|
.ident = "Lenovo ThinkPad X201",
|
||||||
|
.matches = {
|
||||||
|
DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
|
||||||
|
DMI_MATCH(DMI_PRODUCT_VERSION, "ThinkPad X201s"),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
.callback = init_old_suspend_ordering,
|
.callback = init_old_suspend_ordering,
|
||||||
.ident = "Panasonic CF51-2L",
|
.ident = "Panasonic CF51-2L",
|
||||||
.matches = {
|
.matches = {
|
||||||
@ -458,6 +578,30 @@ static struct dmi_system_id __initdata acpisleep_dmi_table[] = {
|
|||||||
DMI_MATCH(DMI_BOARD_NAME, "CF51-2L"),
|
DMI_MATCH(DMI_BOARD_NAME, "CF51-2L"),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
.callback = init_set_sci_en_on_resume,
|
||||||
|
.ident = "Dell Studio 1558",
|
||||||
|
.matches = {
|
||||||
|
DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
|
||||||
|
DMI_MATCH(DMI_PRODUCT_NAME, "Studio 1558"),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
.callback = init_set_sci_en_on_resume,
|
||||||
|
.ident = "Dell Studio 1557",
|
||||||
|
.matches = {
|
||||||
|
DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
|
||||||
|
DMI_MATCH(DMI_PRODUCT_NAME, "Studio 1557"),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
.callback = init_set_sci_en_on_resume,
|
||||||
|
.ident = "Dell Studio 1555",
|
||||||
|
.matches = {
|
||||||
|
DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
|
||||||
|
DMI_MATCH(DMI_PRODUCT_NAME, "Studio 1555"),
|
||||||
|
},
|
||||||
|
},
|
||||||
{},
|
{},
|
||||||
};
|
};
|
||||||
#endif /* CONFIG_SUSPEND */
|
#endif /* CONFIG_SUSPEND */
|
||||||
|
@ -274,26 +274,6 @@ static void pnpacpi_parse_allocated_busresource(struct pnp_dev *dev,
|
|||||||
pnp_add_bus_resource(dev, start, end);
|
pnp_add_bus_resource(dev, start, end);
|
||||||
}
|
}
|
||||||
|
|
||||||
static u64 addr_space_length(struct pnp_dev *dev, u64 min, u64 max, u64 len)
|
|
||||||
{
|
|
||||||
u64 max_len;
|
|
||||||
|
|
||||||
max_len = max - min + 1;
|
|
||||||
if (len <= max_len)
|
|
||||||
return len;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Per 6.4.3.5, _LEN cannot exceed _MAX - _MIN + 1, but some BIOSes
|
|
||||||
* don't do this correctly, e.g.,
|
|
||||||
* https://bugzilla.kernel.org/show_bug.cgi?id=15480
|
|
||||||
*/
|
|
||||||
dev_info(&dev->dev,
|
|
||||||
"resource length %#llx doesn't fit in %#llx-%#llx, trimming\n",
|
|
||||||
(unsigned long long) len, (unsigned long long) min,
|
|
||||||
(unsigned long long) max);
|
|
||||||
return max_len;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void pnpacpi_parse_allocated_address_space(struct pnp_dev *dev,
|
static void pnpacpi_parse_allocated_address_space(struct pnp_dev *dev,
|
||||||
struct acpi_resource *res)
|
struct acpi_resource *res)
|
||||||
{
|
{
|
||||||
@ -309,7 +289,8 @@ static void pnpacpi_parse_allocated_address_space(struct pnp_dev *dev,
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
len = addr_space_length(dev, p->minimum, p->maximum, p->address_length);
|
/* Windows apparently computes length rather than using _LEN */
|
||||||
|
len = p->maximum - p->minimum + 1;
|
||||||
window = (p->producer_consumer == ACPI_PRODUCER) ? 1 : 0;
|
window = (p->producer_consumer == ACPI_PRODUCER) ? 1 : 0;
|
||||||
|
|
||||||
if (p->resource_type == ACPI_MEMORY_RANGE)
|
if (p->resource_type == ACPI_MEMORY_RANGE)
|
||||||
@ -330,7 +311,8 @@ static void pnpacpi_parse_allocated_ext_address_space(struct pnp_dev *dev,
|
|||||||
int window;
|
int window;
|
||||||
u64 len;
|
u64 len;
|
||||||
|
|
||||||
len = addr_space_length(dev, p->minimum, p->maximum, p->address_length);
|
/* Windows apparently computes length rather than using _LEN */
|
||||||
|
len = p->maximum - p->minimum + 1;
|
||||||
window = (p->producer_consumer == ACPI_PRODUCER) ? 1 : 0;
|
window = (p->producer_consumer == ACPI_PRODUCER) ? 1 : 0;
|
||||||
|
|
||||||
if (p->resource_type == ACPI_MEMORY_RANGE)
|
if (p->resource_type == ACPI_MEMORY_RANGE)
|
||||||
|
@ -211,6 +211,8 @@ int pnp_check_port(struct pnp_dev *dev, struct resource *res)
|
|||||||
if (tres->flags & IORESOURCE_IO) {
|
if (tres->flags & IORESOURCE_IO) {
|
||||||
if (cannot_compare(tres->flags))
|
if (cannot_compare(tres->flags))
|
||||||
continue;
|
continue;
|
||||||
|
if (tres->flags & IORESOURCE_WINDOW)
|
||||||
|
continue;
|
||||||
tport = &tres->start;
|
tport = &tres->start;
|
||||||
tend = &tres->end;
|
tend = &tres->end;
|
||||||
if (ranged_conflict(port, end, tport, tend))
|
if (ranged_conflict(port, end, tport, tend))
|
||||||
@ -271,6 +273,8 @@ int pnp_check_mem(struct pnp_dev *dev, struct resource *res)
|
|||||||
if (tres->flags & IORESOURCE_MEM) {
|
if (tres->flags & IORESOURCE_MEM) {
|
||||||
if (cannot_compare(tres->flags))
|
if (cannot_compare(tres->flags))
|
||||||
continue;
|
continue;
|
||||||
|
if (tres->flags & IORESOURCE_WINDOW)
|
||||||
|
continue;
|
||||||
taddr = &tres->start;
|
taddr = &tres->start;
|
||||||
tend = &tres->end;
|
tend = &tres->end;
|
||||||
if (ranged_conflict(addr, end, taddr, tend))
|
if (ranged_conflict(addr, end, taddr, tend))
|
||||||
|
Loading…
x
Reference in New Issue
Block a user