]> git.proxmox.com Git - mirror_edk2.git/commitdiff
OvmfPkg: _DIS and _SRS methods should have permanent effect
authorjljusten <jljusten@6f19259b-4bc3-4df7-8a09-765794883524>
Mon, 13 Aug 2012 15:40:31 +0000 (15:40 +0000)
committerjljusten <jljusten@6f19259b-4bc3-4df7-8a09-765794883524>
Mon, 13 Aug 2012 15:40:31 +0000 (15:40 +0000)
Kill PDIS and PSRS as they are writing to copies of PIR[A-D], not PIR[A-D]
themselves. Use specialized _DIS and _SRS methods that access PIR[A-D]
directly.

(This should be solvable by passing RefOf (PIRA) etc to PDIS/PSRS, however
the RHEL-6.3 kernel AML parser seems to choke on it. The rules described
in ACPIspec5.0 Table 19-316 "Object Storing and Copying Rules" don't seem
to work:

    ACPI Error: Needed [Integer/String/Buffer], found [Reference]
    ffff88003ee02420 (20090903/exresop-422)

    ACPI Exception: AE_AML_OPERAND_TYPE, While resolving operands for
    [OpcodeName unavailable] (20090903/dswexec-445)

    ACPI Error (psparse-0537): Method parse/execution failed
    [\_SB_.PCI0.LPC_.PDIS] (Node ffff88003f638b50), AE_AML_OPERAND_TYPE

    ACPI Error (psparse-0537): Method parse/execution failed
    [\_SB_.PCI0.LPC_.LNKA._DIS] (Node ffff88003f638a10),
    AE_AML_OPERAND_TYPE

When changing the method too, so that it writes to DerefOf (Arg0) instead
of Arg0, ie. explicitly dereferencing rather than expecting the auto-deref
to work:

    ACPI Error: Needed type [Reference], found [RegionField]
    ffff88003f639858 (20090903/exresop-104)

    ACPI Exception: AE_AML_OPERAND_TYPE, While resolving operands for
    [OpcodeName unavailable] (20090903/dswexec-445)

    ACPI Error (psparse-0537): Method parse/execution failed
    [\_SB_.PCI0.LPC_.PDIS] (Node ffff88003f638b50), AE_AML_OPERAND_TYPE

    ACPI Error (psparse-0537): Method parse/execution failed
    [\_SB_.PCI0.LPC_.LNKA._DIS] (Node ffff88003f638a10),
    AE_AML_OPERAND_TYPE

In short, when passing a RefOf, it is recognized as a reference inside the
method but mistakenly refused. When trying to deref it explicitly with
DerefOf, then it's suddenly not recognized as a reference.)

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Laszlo Ersek <lersek@redhat.com>
Reviewed-by: Jordan Justen <jordan.l.justen@intel.com>
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@13621 6f19259b-4bc3-4df7-8a09-765794883524

OvmfPkg/AcpiTables/Dsdt.asl

index 4c791c143141ea951a1b5b06cae13852878fd510..e12c3e9a07d180a860b341ef1a4027e550f96091 100644 (file)
@@ -239,13 +239,6 @@ DefinitionBlock ("Dsdt.aml", "DSDT", 1, "INTEL ", "OVMF    ", 3) {
           }\r
         }\r
 \r
-        //\r
-        // _DIS method for LNKA, LNKB, LNKC, LNKD\r
-        //\r
-        Method (PDIS, 1, NotSerialized) {\r
-          Or (Arg0, 0x80, Arg0)\r
-        }\r
-\r
         //\r
         // _CRS method for LNKA, LNKB, LNKC, LNKD\r
         //\r
@@ -284,14 +277,6 @@ DefinitionBlock ("Dsdt.aml", "DSDT", 1, "INTEL ", "OVMF    ", 3) {
           }\r
         })\r
 \r
-        //\r
-        // _SRS method for LNKA, LNKB, LNKC, LNKD\r
-        //\r
-        Method (PSRS, 2, NotSerialized) {\r
-          CreateDWordField (Arg1, 0x05, IRQW)\r
-          Store (IRQW, Arg0)\r
-        }\r
-\r
         //\r
         // PCI IRQ Link A\r
         //\r
@@ -300,10 +285,15 @@ DefinitionBlock ("Dsdt.aml", "DSDT", 1, "INTEL ", "OVMF    ", 3) {
           Name (_UID, 1)\r
 \r
           Method (_STA, 0, NotSerialized) { Return (PSTA (PIRA)) }\r
-          Method (_DIS, 0, NotSerialized) { PDIS (PIRA)  }\r
+          Method (_DIS, 0, NotSerialized) {\r
+            Or (PIRA, 0x80, PIRA) // set disable-bit\r
+          }\r
           Method (_CRS, 0, NotSerialized) { Return (PCRS (PIRA)) }\r
           Method (_PRS, 0, NotSerialized) { Return (PPRS) }\r
-          Method (_SRS, 1, NotSerialized) { PSRS (PIRA, Arg0) }\r
+          Method (_SRS, 1, NotSerialized) {\r
+            CreateDWordField (Arg0, 0x05, IRQW)\r
+            Store (IRQW, PIRA)\r
+          }\r
         }\r
 \r
         //\r
@@ -314,10 +304,15 @@ DefinitionBlock ("Dsdt.aml", "DSDT", 1, "INTEL ", "OVMF    ", 3) {
           Name (_UID, 2)\r
 \r
           Method (_STA, 0, NotSerialized) { Return (PSTA (PIRB)) }\r
-          Method (_DIS, 0, NotSerialized) { PDIS (PIRB) }\r
+          Method (_DIS, 0, NotSerialized) {\r
+            Or (PIRB, 0x80, PIRB) // set disable-bit\r
+          }\r
           Method (_CRS, 0, NotSerialized) { Return (PCRS (PIRB)) }\r
           Method (_PRS, 0, NotSerialized) { Return (PPRS) }\r
-          Method (_SRS, 1, NotSerialized) { PSRS (PIRB, Arg0) }\r
+          Method (_SRS, 1, NotSerialized) {\r
+            CreateDWordField (Arg0, 0x05, IRQW)\r
+            Store (IRQW, PIRB)\r
+          }\r
         }\r
 \r
         //\r
@@ -328,10 +323,15 @@ DefinitionBlock ("Dsdt.aml", "DSDT", 1, "INTEL ", "OVMF    ", 3) {
           Name (_UID, 3)\r
 \r
           Method (_STA, 0, NotSerialized) { Return (PSTA (PIRC)) }\r
-          Method (_DIS, 0, NotSerialized) { PDIS (PIRC) }\r
+          Method (_DIS, 0, NotSerialized) {\r
+            Or (PIRC, 0x80, PIRC) // set disable-bit\r
+          }\r
           Method (_CRS, 0, NotSerialized) { Return (PCRS (PIRC)) }\r
           Method (_PRS, 0, NotSerialized) { Return (PPRS) }\r
-          Method (_SRS, 1, NotSerialized) { PSRS (PIRC, Arg0) }\r
+          Method (_SRS, 1, NotSerialized) {\r
+            CreateDWordField (Arg0, 0x05, IRQW)\r
+            Store (IRQW, PIRC)\r
+          }\r
         }\r
 \r
         //\r
@@ -342,10 +342,15 @@ DefinitionBlock ("Dsdt.aml", "DSDT", 1, "INTEL ", "OVMF    ", 3) {
           Name (_UID, 1)\r
 \r
           Method (_STA, 0, NotSerialized) { Return (PSTA (PIRD)) }\r
-          Method (_DIS, 0, NotSerialized) { PDIS (PIRD) }\r
+          Method (_DIS, 0, NotSerialized) {\r
+            Or (PIRD, 0x80, PIRD) // set disable-bit\r
+          }\r
           Method (_CRS, 0, NotSerialized) { Return (PCRS (PIRD)) }\r
           Method (_PRS, 0, NotSerialized) { Return (PPRS) }\r
-          Method (_SRS, 1, NotSerialized) { PSRS (PIRD, Arg0) }\r
+          Method (_SRS, 1, NotSerialized) {\r
+            CreateDWordField (Arg0, 0x05, IRQW)\r
+            Store (IRQW, PIRD)\r
+          }\r
         }\r
 \r
         //\r