mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-30 03:27:44 -04:00
Linux 4.5-rc6
-----BEGIN PGP SIGNATURE----- Version: GnuPG v1 iQEcBAABAgAGBQJW0yM6AAoJEHm+PkMAQRiGeUwIAJRTHFPJTFpJcJjeZEV4/EL1 7Pl0WSHs/CWBkXIevAg2HgkECSQ9NI9FAUFvoGxCldDpFAnL1U2QV8+Ur2qhiXMG 5v0jILJuiw57qT/NfhEudZolerlRoHILmB3JRTb+DUV4GHZuWpTkJfUSI9j5aTEl w83XUgtK4bKeIyFbHdWQk6xqfzfFBSuEITuSXreOMwkFfMmeScE0WXOPLBZWyhPa v0rARJLYgM+vmRAnJjnG8unH+SgnqiNcn2oOFpevKwmpVcOjcEmeuxh/HdeZf7HM /R8F86OwdmXsO+z8dQxfcucLg+I9YmKfFr8b6hopu1sRztss2+Uk6H1j2J7IFIg= =tvkh -----END PGP SIGNATURE----- Merge tag 'v4.5-rc6' into core/resources, to resolve conflict Signed-off-by: Ingo Molnar <[email protected]>
This commit is contained in:
commit
bc94b99636
1279 changed files with 15332 additions and 62124 deletions
|
|
@ -880,7 +880,7 @@ static int acpi_lpss_platform_notify(struct notifier_block *nb,
|
|||
break;
|
||||
case BUS_NOTIFY_DRIVER_NOT_BOUND:
|
||||
case BUS_NOTIFY_UNBOUND_DRIVER:
|
||||
pdev->dev.pm_domain = NULL;
|
||||
dev_pm_domain_set(&pdev->dev, NULL);
|
||||
break;
|
||||
case BUS_NOTIFY_ADD_DEVICE:
|
||||
dev_pm_domain_set(&pdev->dev, &acpi_lpss_pm_domain);
|
||||
|
|
|
|||
|
|
@ -469,37 +469,16 @@ static void nfit_mem_find_spa_bdw(struct acpi_nfit_desc *acpi_desc,
|
|||
nfit_mem->bdw = NULL;
|
||||
}
|
||||
|
||||
static int nfit_mem_add(struct acpi_nfit_desc *acpi_desc,
|
||||
static void nfit_mem_init_bdw(struct acpi_nfit_desc *acpi_desc,
|
||||
struct nfit_mem *nfit_mem, struct acpi_nfit_system_address *spa)
|
||||
{
|
||||
u16 dcr = __to_nfit_memdev(nfit_mem)->region_index;
|
||||
struct nfit_memdev *nfit_memdev;
|
||||
struct nfit_flush *nfit_flush;
|
||||
struct nfit_dcr *nfit_dcr;
|
||||
struct nfit_bdw *nfit_bdw;
|
||||
struct nfit_idt *nfit_idt;
|
||||
u16 idt_idx, range_index;
|
||||
|
||||
list_for_each_entry(nfit_dcr, &acpi_desc->dcrs, list) {
|
||||
if (nfit_dcr->dcr->region_index != dcr)
|
||||
continue;
|
||||
nfit_mem->dcr = nfit_dcr->dcr;
|
||||
break;
|
||||
}
|
||||
|
||||
if (!nfit_mem->dcr) {
|
||||
dev_dbg(acpi_desc->dev, "SPA %d missing:%s%s\n",
|
||||
spa->range_index, __to_nfit_memdev(nfit_mem)
|
||||
? "" : " MEMDEV", nfit_mem->dcr ? "" : " DCR");
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
/*
|
||||
* We've found enough to create an nvdimm, optionally
|
||||
* find an associated BDW
|
||||
*/
|
||||
list_add(&nfit_mem->list, &acpi_desc->dimms);
|
||||
|
||||
list_for_each_entry(nfit_bdw, &acpi_desc->bdws, list) {
|
||||
if (nfit_bdw->bdw->region_index != dcr)
|
||||
continue;
|
||||
|
|
@ -508,12 +487,12 @@ static int nfit_mem_add(struct acpi_nfit_desc *acpi_desc,
|
|||
}
|
||||
|
||||
if (!nfit_mem->bdw)
|
||||
return 0;
|
||||
return;
|
||||
|
||||
nfit_mem_find_spa_bdw(acpi_desc, nfit_mem);
|
||||
|
||||
if (!nfit_mem->spa_bdw)
|
||||
return 0;
|
||||
return;
|
||||
|
||||
range_index = nfit_mem->spa_bdw->range_index;
|
||||
list_for_each_entry(nfit_memdev, &acpi_desc->memdevs, list) {
|
||||
|
|
@ -538,8 +517,6 @@ static int nfit_mem_add(struct acpi_nfit_desc *acpi_desc,
|
|||
}
|
||||
break;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int nfit_mem_dcr_init(struct acpi_nfit_desc *acpi_desc,
|
||||
|
|
@ -548,7 +525,6 @@ static int nfit_mem_dcr_init(struct acpi_nfit_desc *acpi_desc,
|
|||
struct nfit_mem *nfit_mem, *found;
|
||||
struct nfit_memdev *nfit_memdev;
|
||||
int type = nfit_spa_type(spa);
|
||||
u16 dcr;
|
||||
|
||||
switch (type) {
|
||||
case NFIT_SPA_DCR:
|
||||
|
|
@ -559,14 +535,18 @@ static int nfit_mem_dcr_init(struct acpi_nfit_desc *acpi_desc,
|
|||
}
|
||||
|
||||
list_for_each_entry(nfit_memdev, &acpi_desc->memdevs, list) {
|
||||
int rc;
|
||||
struct nfit_dcr *nfit_dcr;
|
||||
u32 device_handle;
|
||||
u16 dcr;
|
||||
|
||||
if (nfit_memdev->memdev->range_index != spa->range_index)
|
||||
continue;
|
||||
found = NULL;
|
||||
dcr = nfit_memdev->memdev->region_index;
|
||||
device_handle = nfit_memdev->memdev->device_handle;
|
||||
list_for_each_entry(nfit_mem, &acpi_desc->dimms, list)
|
||||
if (__to_nfit_memdev(nfit_mem)->region_index == dcr) {
|
||||
if (__to_nfit_memdev(nfit_mem)->device_handle
|
||||
== device_handle) {
|
||||
found = nfit_mem;
|
||||
break;
|
||||
}
|
||||
|
|
@ -579,6 +559,31 @@ static int nfit_mem_dcr_init(struct acpi_nfit_desc *acpi_desc,
|
|||
if (!nfit_mem)
|
||||
return -ENOMEM;
|
||||
INIT_LIST_HEAD(&nfit_mem->list);
|
||||
list_add(&nfit_mem->list, &acpi_desc->dimms);
|
||||
}
|
||||
|
||||
list_for_each_entry(nfit_dcr, &acpi_desc->dcrs, list) {
|
||||
if (nfit_dcr->dcr->region_index != dcr)
|
||||
continue;
|
||||
/*
|
||||
* Record the control region for the dimm. For
|
||||
* the ACPI 6.1 case, where there are separate
|
||||
* control regions for the pmem vs blk
|
||||
* interfaces, be sure to record the extended
|
||||
* blk details.
|
||||
*/
|
||||
if (!nfit_mem->dcr)
|
||||
nfit_mem->dcr = nfit_dcr->dcr;
|
||||
else if (nfit_mem->dcr->windows == 0
|
||||
&& nfit_dcr->dcr->windows)
|
||||
nfit_mem->dcr = nfit_dcr->dcr;
|
||||
break;
|
||||
}
|
||||
|
||||
if (dcr && !nfit_mem->dcr) {
|
||||
dev_err(acpi_desc->dev, "SPA %d missing DCR %d\n",
|
||||
spa->range_index, dcr);
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
if (type == NFIT_SPA_DCR) {
|
||||
|
|
@ -595,6 +600,7 @@ static int nfit_mem_dcr_init(struct acpi_nfit_desc *acpi_desc,
|
|||
nfit_mem->idt_dcr = nfit_idt->idt;
|
||||
break;
|
||||
}
|
||||
nfit_mem_init_bdw(acpi_desc, nfit_mem, spa);
|
||||
} else {
|
||||
/*
|
||||
* A single dimm may belong to multiple SPA-PM
|
||||
|
|
@ -603,13 +609,6 @@ static int nfit_mem_dcr_init(struct acpi_nfit_desc *acpi_desc,
|
|||
*/
|
||||
nfit_mem->memdev_pmem = nfit_memdev->memdev;
|
||||
}
|
||||
|
||||
if (found)
|
||||
continue;
|
||||
|
||||
rc = nfit_mem_add(acpi_desc, nfit_mem, spa);
|
||||
if (rc)
|
||||
return rc;
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
|
@ -1504,9 +1503,7 @@ static int ars_do_start(struct nvdimm_bus_descriptor *nd_desc,
|
|||
case 1:
|
||||
/* ARS unsupported, but we should never get here */
|
||||
return 0;
|
||||
case 2:
|
||||
return -EINVAL;
|
||||
case 3:
|
||||
case 6:
|
||||
/* ARS is in progress */
|
||||
msleep(1000);
|
||||
break;
|
||||
|
|
@ -1517,13 +1514,13 @@ static int ars_do_start(struct nvdimm_bus_descriptor *nd_desc,
|
|||
}
|
||||
|
||||
static int ars_get_status(struct nvdimm_bus_descriptor *nd_desc,
|
||||
struct nd_cmd_ars_status *cmd)
|
||||
struct nd_cmd_ars_status *cmd, u32 size)
|
||||
{
|
||||
int rc;
|
||||
|
||||
while (1) {
|
||||
rc = nd_desc->ndctl(nd_desc, NULL, ND_CMD_ARS_STATUS, cmd,
|
||||
sizeof(*cmd));
|
||||
size);
|
||||
if (rc || cmd->status & 0xffff)
|
||||
return -ENXIO;
|
||||
|
||||
|
|
@ -1538,6 +1535,8 @@ static int ars_get_status(struct nvdimm_bus_descriptor *nd_desc,
|
|||
case 2:
|
||||
/* No ARS performed for the current boot */
|
||||
return 0;
|
||||
case 3:
|
||||
/* TODO: error list overflow support */
|
||||
default:
|
||||
return -ENXIO;
|
||||
}
|
||||
|
|
@ -1581,6 +1580,7 @@ static int acpi_nfit_find_poison(struct acpi_nfit_desc *acpi_desc,
|
|||
struct nd_cmd_ars_start *ars_start = NULL;
|
||||
struct nd_cmd_ars_cap *ars_cap = NULL;
|
||||
u64 start, len, cur, remaining;
|
||||
u32 ars_status_size;
|
||||
int rc;
|
||||
|
||||
ars_cap = kzalloc(sizeof(*ars_cap), GFP_KERNEL);
|
||||
|
|
@ -1610,14 +1610,14 @@ static int acpi_nfit_find_poison(struct acpi_nfit_desc *acpi_desc,
|
|||
* Check if a full-range ARS has been run. If so, use those results
|
||||
* without having to start a new ARS.
|
||||
*/
|
||||
ars_status = kzalloc(ars_cap->max_ars_out + sizeof(*ars_status),
|
||||
GFP_KERNEL);
|
||||
ars_status_size = ars_cap->max_ars_out;
|
||||
ars_status = kzalloc(ars_status_size, GFP_KERNEL);
|
||||
if (!ars_status) {
|
||||
rc = -ENOMEM;
|
||||
goto out;
|
||||
}
|
||||
|
||||
rc = ars_get_status(nd_desc, ars_status);
|
||||
rc = ars_get_status(nd_desc, ars_status, ars_status_size);
|
||||
if (rc)
|
||||
goto out;
|
||||
|
||||
|
|
@ -1647,7 +1647,7 @@ static int acpi_nfit_find_poison(struct acpi_nfit_desc *acpi_desc,
|
|||
if (rc)
|
||||
goto out;
|
||||
|
||||
rc = ars_get_status(nd_desc, ars_status);
|
||||
rc = ars_get_status(nd_desc, ars_status, ars_status_size);
|
||||
if (rc)
|
||||
goto out;
|
||||
|
||||
|
|
|
|||
|
|
@ -406,7 +406,7 @@ int acpi_pci_irq_enable(struct pci_dev *dev)
|
|||
return 0;
|
||||
}
|
||||
|
||||
if (pci_has_managed_irq(dev))
|
||||
if (dev->irq_managed && dev->irq > 0)
|
||||
return 0;
|
||||
|
||||
entry = acpi_pci_irq_lookup(dev, pin);
|
||||
|
|
@ -451,7 +451,8 @@ int acpi_pci_irq_enable(struct pci_dev *dev)
|
|||
kfree(entry);
|
||||
return rc;
|
||||
}
|
||||
pci_set_managed_irq(dev, rc);
|
||||
dev->irq = rc;
|
||||
dev->irq_managed = 1;
|
||||
|
||||
if (link)
|
||||
snprintf(link_desc, sizeof(link_desc), " -> Link[%s]", link);
|
||||
|
|
@ -474,9 +475,17 @@ void acpi_pci_irq_disable(struct pci_dev *dev)
|
|||
u8 pin;
|
||||
|
||||
pin = dev->pin;
|
||||
if (!pin || !pci_has_managed_irq(dev))
|
||||
if (!pin || !dev->irq_managed || dev->irq <= 0)
|
||||
return;
|
||||
|
||||
/* Keep IOAPIC pin configuration when suspending */
|
||||
if (dev->dev.power.is_prepared)
|
||||
return;
|
||||
#ifdef CONFIG_PM
|
||||
if (dev->dev.power.runtime_status == RPM_SUSPENDING)
|
||||
return;
|
||||
#endif
|
||||
|
||||
entry = acpi_pci_irq_lookup(dev, pin);
|
||||
if (!entry)
|
||||
return;
|
||||
|
|
@ -496,6 +505,6 @@ void acpi_pci_irq_disable(struct pci_dev *dev)
|
|||
dev_dbg(&dev->dev, "PCI INT %c disabled\n", pin_name(pin));
|
||||
if (gsi >= 0) {
|
||||
acpi_unregister_gsi(gsi);
|
||||
pci_reset_managed_irq(dev);
|
||||
dev->irq_managed = 0;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4,7 +4,6 @@
|
|||
* Copyright (C) 2001, 2002 Andy Grover <andrew.grover@intel.com>
|
||||
* Copyright (C) 2001, 2002 Paul Diefenbaugh <paul.s.diefenbaugh@intel.com>
|
||||
* Copyright (C) 2002 Dominik Brodowski <devel@brodo.de>
|
||||
* Copyright (c) 2015, The Linux Foundation. All rights reserved.
|
||||
*
|
||||
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
*
|
||||
|
|
@ -438,6 +437,7 @@ static int acpi_pci_link_set(struct acpi_pci_link *link, int irq)
|
|||
* enabled system.
|
||||
*/
|
||||
|
||||
#define ACPI_MAX_IRQS 256
|
||||
#define ACPI_MAX_ISA_IRQ 16
|
||||
|
||||
#define PIRQ_PENALTY_PCI_AVAILABLE (0)
|
||||
|
|
@ -447,7 +447,7 @@ static int acpi_pci_link_set(struct acpi_pci_link *link, int irq)
|
|||
#define PIRQ_PENALTY_ISA_USED (16*16*16*16*16)
|
||||
#define PIRQ_PENALTY_ISA_ALWAYS (16*16*16*16*16*16)
|
||||
|
||||
static int acpi_irq_isa_penalty[ACPI_MAX_ISA_IRQ] = {
|
||||
static int acpi_irq_penalty[ACPI_MAX_IRQS] = {
|
||||
PIRQ_PENALTY_ISA_ALWAYS, /* IRQ0 timer */
|
||||
PIRQ_PENALTY_ISA_ALWAYS, /* IRQ1 keyboard */
|
||||
PIRQ_PENALTY_ISA_ALWAYS, /* IRQ2 cascade */
|
||||
|
|
@ -464,68 +464,9 @@ static int acpi_irq_isa_penalty[ACPI_MAX_ISA_IRQ] = {
|
|||
PIRQ_PENALTY_ISA_USED, /* IRQ13 fpe, sometimes */
|
||||
PIRQ_PENALTY_ISA_USED, /* IRQ14 ide0 */
|
||||
PIRQ_PENALTY_ISA_USED, /* IRQ15 ide1 */
|
||||
/* >IRQ15 */
|
||||
};
|
||||
|
||||
struct irq_penalty_info {
|
||||
int irq;
|
||||
int penalty;
|
||||
struct list_head node;
|
||||
};
|
||||
|
||||
static LIST_HEAD(acpi_irq_penalty_list);
|
||||
|
||||
static int acpi_irq_get_penalty(int irq)
|
||||
{
|
||||
struct irq_penalty_info *irq_info;
|
||||
|
||||
if (irq < ACPI_MAX_ISA_IRQ)
|
||||
return acpi_irq_isa_penalty[irq];
|
||||
|
||||
list_for_each_entry(irq_info, &acpi_irq_penalty_list, node) {
|
||||
if (irq_info->irq == irq)
|
||||
return irq_info->penalty;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int acpi_irq_set_penalty(int irq, int new_penalty)
|
||||
{
|
||||
struct irq_penalty_info *irq_info;
|
||||
|
||||
/* see if this is a ISA IRQ */
|
||||
if (irq < ACPI_MAX_ISA_IRQ) {
|
||||
acpi_irq_isa_penalty[irq] = new_penalty;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* next, try to locate from the dynamic list */
|
||||
list_for_each_entry(irq_info, &acpi_irq_penalty_list, node) {
|
||||
if (irq_info->irq == irq) {
|
||||
irq_info->penalty = new_penalty;
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
/* nope, let's allocate a slot for this IRQ */
|
||||
irq_info = kzalloc(sizeof(*irq_info), GFP_KERNEL);
|
||||
if (!irq_info)
|
||||
return -ENOMEM;
|
||||
|
||||
irq_info->irq = irq;
|
||||
irq_info->penalty = new_penalty;
|
||||
list_add_tail(&irq_info->node, &acpi_irq_penalty_list);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void acpi_irq_add_penalty(int irq, int penalty)
|
||||
{
|
||||
int curpen = acpi_irq_get_penalty(irq);
|
||||
|
||||
acpi_irq_set_penalty(irq, curpen + penalty);
|
||||
}
|
||||
|
||||
int __init acpi_irq_penalty_init(void)
|
||||
{
|
||||
struct acpi_pci_link *link;
|
||||
|
|
@ -546,16 +487,15 @@ int __init acpi_irq_penalty_init(void)
|
|||
link->irq.possible_count;
|
||||
|
||||
for (i = 0; i < link->irq.possible_count; i++) {
|
||||
if (link->irq.possible[i] < ACPI_MAX_ISA_IRQ) {
|
||||
int irqpos = link->irq.possible[i];
|
||||
|
||||
acpi_irq_add_penalty(irqpos, penalty);
|
||||
}
|
||||
if (link->irq.possible[i] < ACPI_MAX_ISA_IRQ)
|
||||
acpi_irq_penalty[link->irq.
|
||||
possible[i]] +=
|
||||
penalty;
|
||||
}
|
||||
|
||||
} else if (link->irq.active) {
|
||||
acpi_irq_add_penalty(link->irq.active,
|
||||
PIRQ_PENALTY_PCI_POSSIBLE);
|
||||
acpi_irq_penalty[link->irq.active] +=
|
||||
PIRQ_PENALTY_PCI_POSSIBLE;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -607,12 +547,12 @@ static int acpi_pci_link_allocate(struct acpi_pci_link *link)
|
|||
* the use of IRQs 9, 10, 11, and >15.
|
||||
*/
|
||||
for (i = (link->irq.possible_count - 1); i >= 0; i--) {
|
||||
if (acpi_irq_get_penalty(irq) >
|
||||
acpi_irq_get_penalty(link->irq.possible[i]))
|
||||
if (acpi_irq_penalty[irq] >
|
||||
acpi_irq_penalty[link->irq.possible[i]])
|
||||
irq = link->irq.possible[i];
|
||||
}
|
||||
}
|
||||
if (acpi_irq_get_penalty(irq) >= PIRQ_PENALTY_ISA_ALWAYS) {
|
||||
if (acpi_irq_penalty[irq] >= PIRQ_PENALTY_ISA_ALWAYS) {
|
||||
printk(KERN_ERR PREFIX "No IRQ available for %s [%s]. "
|
||||
"Try pci=noacpi or acpi=off\n",
|
||||
acpi_device_name(link->device),
|
||||
|
|
@ -628,8 +568,7 @@ static int acpi_pci_link_allocate(struct acpi_pci_link *link)
|
|||
acpi_device_bid(link->device));
|
||||
return -ENODEV;
|
||||
} else {
|
||||
acpi_irq_add_penalty(link->irq.active, PIRQ_PENALTY_PCI_USING);
|
||||
|
||||
acpi_irq_penalty[link->irq.active] += PIRQ_PENALTY_PCI_USING;
|
||||
printk(KERN_WARNING PREFIX "%s [%s] enabled at IRQ %d\n",
|
||||
acpi_device_name(link->device),
|
||||
acpi_device_bid(link->device), link->irq.active);
|
||||
|
|
@ -839,7 +778,7 @@ static void acpi_pci_link_remove(struct acpi_device *device)
|
|||
}
|
||||
|
||||
/*
|
||||
* modify penalty from cmdline
|
||||
* modify acpi_irq_penalty[] from cmdline
|
||||
*/
|
||||
static int __init acpi_irq_penalty_update(char *str, int used)
|
||||
{
|
||||
|
|
@ -857,10 +796,13 @@ static int __init acpi_irq_penalty_update(char *str, int used)
|
|||
if (irq < 0)
|
||||
continue;
|
||||
|
||||
if (irq >= ARRAY_SIZE(acpi_irq_penalty))
|
||||
continue;
|
||||
|
||||
if (used)
|
||||
acpi_irq_add_penalty(irq, PIRQ_PENALTY_ISA_USED);
|
||||
acpi_irq_penalty[irq] += PIRQ_PENALTY_ISA_USED;
|
||||
else
|
||||
acpi_irq_set_penalty(irq, PIRQ_PENALTY_PCI_AVAILABLE);
|
||||
acpi_irq_penalty[irq] = PIRQ_PENALTY_PCI_AVAILABLE;
|
||||
|
||||
if (retval != 2) /* no next number */
|
||||
break;
|
||||
|
|
@ -877,15 +819,18 @@ static int __init acpi_irq_penalty_update(char *str, int used)
|
|||
*/
|
||||
void acpi_penalize_isa_irq(int irq, int active)
|
||||
{
|
||||
if (irq >= 0)
|
||||
acpi_irq_add_penalty(irq, active ?
|
||||
PIRQ_PENALTY_ISA_USED : PIRQ_PENALTY_PCI_USING);
|
||||
if (irq >= 0 && irq < ARRAY_SIZE(acpi_irq_penalty)) {
|
||||
if (active)
|
||||
acpi_irq_penalty[irq] += PIRQ_PENALTY_ISA_USED;
|
||||
else
|
||||
acpi_irq_penalty[irq] += PIRQ_PENALTY_PCI_USING;
|
||||
}
|
||||
}
|
||||
|
||||
bool acpi_isa_irq_available(int irq)
|
||||
{
|
||||
return irq >= 0 &&
|
||||
(acpi_irq_get_penalty(irq) < PIRQ_PENALTY_ISA_ALWAYS);
|
||||
return irq >= 0 && (irq >= ARRAY_SIZE(acpi_irq_penalty) ||
|
||||
acpi_irq_penalty[irq] < PIRQ_PENALTY_ISA_ALWAYS);
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
@ -895,18 +840,13 @@ bool acpi_isa_irq_available(int irq)
|
|||
*/
|
||||
void acpi_penalize_sci_irq(int irq, int trigger, int polarity)
|
||||
{
|
||||
int penalty;
|
||||
|
||||
if (irq < 0)
|
||||
return;
|
||||
|
||||
if (trigger != ACPI_MADT_TRIGGER_LEVEL ||
|
||||
polarity != ACPI_MADT_POLARITY_ACTIVE_LOW)
|
||||
penalty = PIRQ_PENALTY_ISA_ALWAYS;
|
||||
else
|
||||
penalty = PIRQ_PENALTY_PCI_USING;
|
||||
|
||||
acpi_irq_add_penalty(irq, penalty);
|
||||
if (irq >= 0 && irq < ARRAY_SIZE(acpi_irq_penalty)) {
|
||||
if (trigger != ACPI_MADT_TRIGGER_LEVEL ||
|
||||
polarity != ACPI_MADT_POLARITY_ACTIVE_LOW)
|
||||
acpi_irq_penalty[irq] += PIRQ_PENALTY_ISA_ALWAYS;
|
||||
else
|
||||
acpi_irq_penalty[irq] += PIRQ_PENALTY_PCI_USING;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
|||
Loading…
Reference in a new issue