Author: wmb Date: 2008-07-30 12:19:38 +0200 (Wed, 30 Jul 2008) New Revision: 863
Modified: cpu/x86/pc/olpc/dsdt.dsl cpu/x86/pc/olpc/versions.fth Log: OLPC - Added retries to ACPI EC commands to prevent blue screens.
Modified: cpu/x86/pc/olpc/dsdt.dsl =================================================================== --- cpu/x86/pc/olpc/dsdt.dsl 2008-07-30 09:51:22 UTC (rev 862) +++ cpu/x86/pc/olpc/dsdt.dsl 2008-07-30 10:19:38 UTC (rev 863) @@ -132,7 +132,7 @@ { if (LEqual (Subtract(Local0, One, Local0), Zero)) { - Fatal(1, 1, 0) + Return (One) } Sleep(1) } @@ -142,10 +142,11 @@ { if (LEqual (Subtract(Local0, One, Local0), Zero)) { - Fatal(1, 1, 1) + Return (2) } Sleep(1) } + Return (Zero) }
Method (ECRB, 0, NotSerialized) // EC Read Byte after command -> byte @@ -153,15 +154,34 @@ Store (200, Local0) While (LNot (And (ECCM, 1))) // Wait for OBF != 0 { - if (LEqual (Subtract(Local0, One, Local0), Zero)) + If (LEqual (Subtract(Local0, One, Local0), Zero)) { - Fatal(1, 1, 2) + Return (0xffffffff) } Sleep(1) } Return (ECDA) }
+ Method (ECC1, 1, NotSerialized) // EC Command returning 1 byte + { + Store (10, Local0) // Ten retries + While (Subtract(Local0, One, Local0)) // While more tries left + { + If (ECCO (Arg0)) + { + Continue // Command timeout + } + Store (ECRB (), Local1) + If (LNotEqual (Local1, 0xffffffff)) + { + Return (Local1) // Success + } + } + Return (Zero) + + } + Scope (_PR) { Processor (CPU0, 0x01, 0x00000000, 0x00) {} // Processor (CPU0, 0x01, 0x00009E00, 0x06) { @@ -267,8 +287,7 @@ Store (One, Local0) While (Local0) { - ECCO(0x84) // Read SCI Queue - Store (ECRB(), Local0) + Store (ECC1(0x84), Local0) // Read SCI Queue // UDOT (Local0) If (And(Local0, 0x40)) {
Modified: cpu/x86/pc/olpc/versions.fth =================================================================== --- cpu/x86/pc/olpc/versions.fth 2008-07-30 09:51:22 UTC (rev 862) +++ cpu/x86/pc/olpc/versions.fth 2008-07-30 10:19:38 UTC (rev 863) @@ -2,7 +2,7 @@
\ The overall firmware revision macro: FW_MAJOR E -macro: FW_MINOR 12b +macro: FW_MINOR 12c
\ The EC microcode macro: EC_VERSION e11