[PATCH] acpi: LNKS is not needed

LNKS is a bit strange in that it reuses the same PIIX register as LNKA, but has a different interrupt. This means that the _CRS it returns will not be one of the possible resources from _PRS. This shows up in the Linux boot logs as ACPI: PCI Interrupt Link [LNKS] (IRQs 9) *0 Instead of that, we can simply use a hardwired interrupt index. Cc: Gleb Natapov <gnatapov@redhat.com> Cc: Laszlo Ersek <lersek@redhat.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> --- src/acpi-dsdt.dsl | 16 ++++------------ 1 file modificato, 4 inserzioni(+), 12 rimozioni(-) diff --git a/src/acpi-dsdt.dsl b/src/acpi-dsdt.dsl index 083e2be..66ca853 100644 --- a/src/acpi-dsdt.dsl +++ b/src/acpi-dsdt.dsl @@ -86,7 +86,10 @@ DefinitionBlock ( #define prt_slot3(nr) prt_slot(nr, LNKC, LNKD, LNKA, LNKB) prt_slot0(0x0000), /* Device 1 is power mgmt device, and can only use irq 9 */ - prt_slot(0x0001, LNKS, LNKB, LNKC, LNKD), + Package() { 0x1ffff, 0, 0, 9 }, + Package() { 0x1ffff, 1, LNKB, 0 }, + Package() { 0x1ffff, 2, LNKC, 0 }, + Package() { 0x1ffff, 3, LNKD, 0 } prt_slot2(0x0002), prt_slot3(0x0003), prt_slot0(0x0004), @@ -653,17 +656,6 @@ DefinitionBlock ( Method (_CRS, 0, NotSerialized) { Return (IQCR(PRQ3)) } Method (_SRS, 1, NotSerialized) { SETIRQ(PRQ3, Arg0) } } - Device(LNKS) { - Name(_HID, EISAID("PNP0C0F")) // PCI interrupt link - Name(_UID, 5) - Name(_PRS, ResourceTemplate() { - Interrupt (, Level, ActiveHigh, Shared) - { 9 } - }) - Method (_STA, 0, NotSerialized) { Return (IQST(PRQ0)) } - Method (_DIS, 0, NotSerialized) { DISIRQ(PRQ0) } - Method (_CRS, 0, NotSerialized) { Return (IQCR(PRQ0)) } - } } /**************************************************************** -- 1.7.11.2

On 08/07/12 15:01, Paolo Bonzini wrote:
LNKS is a bit strange in that it reuses the same PIIX register as LNKA, but has a different interrupt. This means that the _CRS it returns will not be one of the possible resources from _PRS. This shows up in the Linux boot logs as
ACPI: PCI Interrupt Link [LNKS] (IRQs 9) *0
Instead of that, we can simply use a hardwired interrupt index.
Cc: Gleb Natapov <gnatapov@redhat.com> Cc: Laszlo Ersek <lersek@redhat.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> --- src/acpi-dsdt.dsl | 16 ++++------------ 1 file modificato, 4 inserzioni(+), 12 rimozioni(-)
diff --git a/src/acpi-dsdt.dsl b/src/acpi-dsdt.dsl index 083e2be..66ca853 100644 --- a/src/acpi-dsdt.dsl +++ b/src/acpi-dsdt.dsl @@ -86,7 +86,10 @@ DefinitionBlock ( #define prt_slot3(nr) prt_slot(nr, LNKC, LNKD, LNKA, LNKB) prt_slot0(0x0000), /* Device 1 is power mgmt device, and can only use irq 9 */ - prt_slot(0x0001, LNKS, LNKB, LNKC, LNKD), + Package() { 0x1ffff, 0, 0, 9 }, + Package() { 0x1ffff, 1, LNKB, 0 }, + Package() { 0x1ffff, 2, LNKC, 0 }, + Package() { 0x1ffff, 3, LNKD, 0 } prt_slot2(0x0002), prt_slot3(0x0003), prt_slot0(0x0004), @@ -653,17 +656,6 @@ DefinitionBlock ( Method (_CRS, 0, NotSerialized) { Return (IQCR(PRQ3)) } Method (_SRS, 1, NotSerialized) { SETIRQ(PRQ3, Arg0) } } - Device(LNKS) { - Name(_HID, EISAID("PNP0C0F")) // PCI interrupt link - Name(_UID, 5) - Name(_PRS, ResourceTemplate() { - Interrupt (, Level, ActiveHigh, Shared) - { 9 } - }) - Method (_STA, 0, NotSerialized) { Return (IQST(PRQ0)) } - Method (_DIS, 0, NotSerialized) { DISIRQ(PRQ0) } - Method (_CRS, 0, NotSerialized) { Return (IQCR(PRQ0)) } - } }
/****************************************************************
Reviewed-by: Laszlo Ersek <lersek@redhat.com> Thanks! Laszlo

On Tue, Aug 07, 2012 at 03:01:29PM +0200, Paolo Bonzini wrote:
LNKS is a bit strange in that it reuses the same PIIX register as LNKA, but has a different interrupt. This means that the _CRS it returns will not be one of the possible resources from _PRS. This shows up in the Linux boot logs as
ACPI: PCI Interrupt Link [LNKS] (IRQs 9) *0
Instead of that, we can simply use a hardwired interrupt index.
Cc: Gleb Natapov <gnatapov@redhat.com> Cc: Laszlo Ersek <lersek@redhat.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> Looks good to me.
--- src/acpi-dsdt.dsl | 16 ++++------------ 1 file modificato, 4 inserzioni(+), 12 rimozioni(-)
diff --git a/src/acpi-dsdt.dsl b/src/acpi-dsdt.dsl index 083e2be..66ca853 100644 --- a/src/acpi-dsdt.dsl +++ b/src/acpi-dsdt.dsl @@ -86,7 +86,10 @@ DefinitionBlock ( #define prt_slot3(nr) prt_slot(nr, LNKC, LNKD, LNKA, LNKB) prt_slot0(0x0000), /* Device 1 is power mgmt device, and can only use irq 9 */ - prt_slot(0x0001, LNKS, LNKB, LNKC, LNKD), + Package() { 0x1ffff, 0, 0, 9 }, + Package() { 0x1ffff, 1, LNKB, 0 }, + Package() { 0x1ffff, 2, LNKC, 0 }, + Package() { 0x1ffff, 3, LNKD, 0 } prt_slot2(0x0002), prt_slot3(0x0003), prt_slot0(0x0004), @@ -653,17 +656,6 @@ DefinitionBlock ( Method (_CRS, 0, NotSerialized) { Return (IQCR(PRQ3)) } Method (_SRS, 1, NotSerialized) { SETIRQ(PRQ3, Arg0) } } - Device(LNKS) { - Name(_HID, EISAID("PNP0C0F")) // PCI interrupt link - Name(_UID, 5) - Name(_PRS, ResourceTemplate() { - Interrupt (, Level, ActiveHigh, Shared) - { 9 } - }) - Method (_STA, 0, NotSerialized) { Return (IQST(PRQ0)) } - Method (_DIS, 0, NotSerialized) { DISIRQ(PRQ0) } - Method (_CRS, 0, NotSerialized) { Return (IQCR(PRQ0)) } - } }
/**************************************************************** -- 1.7.11.2
-- Gleb.

On Tue, Aug 07, 2012 at 03:01:29PM +0200, Paolo Bonzini wrote:
LNKS is a bit strange in that it reuses the same PIIX register as LNKA, but has a different interrupt. This means that the _CRS it returns will not be one of the possible resources from _PRS. This shows up in the Linux boot logs as
ACPI: PCI Interrupt Link [LNKS] (IRQs 9) *0
Instead of that, we can simply use a hardwired interrupt index.
Cc: Gleb Natapov <gnatapov@redhat.com> Cc: Laszlo Ersek <lersek@redhat.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> --- src/acpi-dsdt.dsl | 16 ++++------------ 1 file modificato, 4 inserzioni(+), 12 rimozioni(-)
diff --git a/src/acpi-dsdt.dsl b/src/acpi-dsdt.dsl index 083e2be..66ca853 100644 --- a/src/acpi-dsdt.dsl +++ b/src/acpi-dsdt.dsl @@ -86,7 +86,10 @@ DefinitionBlock ( #define prt_slot3(nr) prt_slot(nr, LNKC, LNKD, LNKA, LNKB) prt_slot0(0x0000), /* Device 1 is power mgmt device, and can only use irq 9 */ - prt_slot(0x0001, LNKS, LNKB, LNKC, LNKD), + Package() { 0x1ffff, 0, 0, 9 }, + Package() { 0x1ffff, 1, LNKB, 0 }, + Package() { 0x1ffff, 2, LNKC, 0 }, + Package() { 0x1ffff, 3, LNKD, 0 } prt_slot2(0x0002),
I get an error (missing comma?): out/acpi-dsdt.dsl.i 43: Package() { 0x0002ffff, 0, LNKB, 0 }, Package() { 0x0002ffff, 1, LNKC, 0 }, Package() { 0x0002ffff, 2, LNKD, 0 }, Package() { 0x0002ffff, 3, LNKA, 0 }, ,, PW32, AddressRangeMemory, TypeStatic) Error 4096 - ^ syntax error, unexpected PARSEOP_PACKAGE, expecting ',' or '}' -Kevin

On Tue, Aug 07, 2012 at 03:01:29PM +0200, Paolo Bonzini wrote:
LNKS is a bit strange in that it reuses the same PIIX register as LNKA, but has a different interrupt. This means that the _CRS it returns will not be one of the possible resources from _PRS. This shows up in the Linux boot logs as
ACPI: PCI Interrupt Link [LNKS] (IRQs 9) *0
Instead of that, we can simply use a hardwired interrupt index.
I fixed the missing comma and committed this patch. -Kevin
participants (4)
-
Gleb Natapov
-
Kevin O'Connor
-
Laszlo Ersek
-
Paolo Bonzini