<p>Arthur Heymans has uploaded this change for <strong>review</strong>.</p><p><a href="https://review.coreboot.org/c/coreboot/+/30397">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">[WIP] mb/lenovo/dock.asl: Add proper dock support<br><br>Todo:<br>- Add parallel port and serial port ACPI code<br>- Clean up. A lot of code is slightly modified vendor code which isn't<br>  that well written. Also lots of unneeded regs presented here.<br><br>Working:<br>- Dock LED<br>- Docking and undocking events<br><br>Change-Id: Ifa4a5a0272c6d3ec0b65871e5c1448d395bc74a8<br>Signed-off-by: Arthur Heymans <arthur@aheymans.xyz><br>---<br>M src/mainboard/lenovo/t400/acpi/dock.asl<br>1 file changed, 308 insertions(+), 30 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://review.coreboot.org:29418/coreboot refs/changes/97/30397/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/src/mainboard/lenovo/t400/acpi/dock.asl b/src/mainboard/lenovo/t400/acpi/dock.asl</span><br><span>index 4a0ccf3..b71e4e3 100644</span><br><span>--- a/src/mainboard/lenovo/t400/acpi/dock.asl</span><br><span>+++ b/src/mainboard/lenovo/t400/acpi/dock.asl</span><br><span>@@ -14,60 +14,338 @@</span><br><span>  * GNU General Public License for more details.</span><br><span>  */</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-Scope (\_SB)</span><br><span style="color: hsl(120, 100%, 40%);">+#include "dock.h"</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+Scope(\_SB.PCI0.LPCB)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-  Device(DOCK)</span><br><span style="color: hsl(120, 100%, 40%);">+  OperationRegion (NCFG, SystemIO, 0x2E, 0x02)</span><br><span style="color: hsl(120, 100%, 40%);">+  Field (NCFG, ByteAcc, NoLock, Preserve)</span><br><span>      {</span><br><span style="color: hsl(0, 100%, 40%);">-               Name(_HID, "ACPI0003")</span><br><span style="color: hsl(0, 100%, 40%);">-                Name(_UID, 0x00)</span><br><span style="color: hsl(0, 100%, 40%);">-                Name(_PCL, Package() { \_SB } )</span><br><span style="color: hsl(120, 100%, 40%);">+               INDX,   8,</span><br><span style="color: hsl(120, 100%, 40%);">+            DATA,   8</span><br><span style="color: hsl(120, 100%, 40%);">+     }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-           Method(_DCK, 1, NotSerialized)</span><br><span style="color: hsl(120, 100%, 40%);">+        IndexField (INDX, DATA, ByteAcc, NoLock, Preserve)</span><br><span style="color: hsl(120, 100%, 40%);">+    {</span><br><span style="color: hsl(120, 100%, 40%);">+             Offset (0x07),</span><br><span style="color: hsl(120, 100%, 40%);">+                LDN,    8,</span><br><span style="color: hsl(120, 100%, 40%);">+            Offset (0x20),</span><br><span style="color: hsl(120, 100%, 40%);">+                SIOD,   8,</span><br><span style="color: hsl(120, 100%, 40%);">+            Offset (0x22),</span><br><span style="color: hsl(120, 100%, 40%);">+                SCF2,   8,</span><br><span style="color: hsl(120, 100%, 40%);">+            Offset (0x24),</span><br><span style="color: hsl(120, 100%, 40%);">+                SCF4,   8,</span><br><span style="color: hsl(120, 100%, 40%);">+                    ,   2,</span><br><span style="color: hsl(120, 100%, 40%);">+                PPSE,   1,</span><br><span style="color: hsl(120, 100%, 40%);">+                    ,   4,</span><br><span style="color: hsl(120, 100%, 40%);">+                PNF,    1,</span><br><span style="color: hsl(120, 100%, 40%);">+            FDCD,   1,</span><br><span style="color: hsl(120, 100%, 40%);">+            PPD,    1,</span><br><span style="color: hsl(120, 100%, 40%);">+            SP2D,   1,</span><br><span style="color: hsl(120, 100%, 40%);">+            SP1D,   1,</span><br><span style="color: hsl(120, 100%, 40%);">+            ,   1,</span><br><span style="color: hsl(120, 100%, 40%);">+                GPSR,   2,</span><br><span style="color: hsl(120, 100%, 40%);">+            Offset (0x27),</span><br><span style="color: hsl(120, 100%, 40%);">+                SRID,   8,</span><br><span style="color: hsl(120, 100%, 40%);">+            Offset (0x29),</span><br><span style="color: hsl(120, 100%, 40%);">+                SCF9,   8,</span><br><span style="color: hsl(120, 100%, 40%);">+            Offset (0x2B),</span><br><span style="color: hsl(120, 100%, 40%);">+                Offset (0x30),</span><br><span style="color: hsl(120, 100%, 40%);">+                LDA,    1,</span><br><span style="color: hsl(120, 100%, 40%);">+            Offset (0x31),</span><br><span style="color: hsl(120, 100%, 40%);">+                Offset (0x60),</span><br><span style="color: hsl(120, 100%, 40%);">+                IOHI,   8,</span><br><span style="color: hsl(120, 100%, 40%);">+            IOLW,   8,</span><br><span style="color: hsl(120, 100%, 40%);">+            Offset (0x70),</span><br><span style="color: hsl(120, 100%, 40%);">+                IRQN,   4,</span><br><span style="color: hsl(120, 100%, 40%);">+            IRQW,   1,</span><br><span style="color: hsl(120, 100%, 40%);">+            Offset (0x71),</span><br><span style="color: hsl(120, 100%, 40%);">+                IRQT,   1,</span><br><span style="color: hsl(120, 100%, 40%);">+            IRQL,   1,</span><br><span style="color: hsl(120, 100%, 40%);">+            Offset (0x72),</span><br><span style="color: hsl(120, 100%, 40%);">+                Offset (0x74),</span><br><span style="color: hsl(120, 100%, 40%);">+                DMA0,   3,</span><br><span style="color: hsl(120, 100%, 40%);">+            Offset (0x75),</span><br><span style="color: hsl(120, 100%, 40%);">+                DMA1,   3,</span><br><span style="color: hsl(120, 100%, 40%);">+            Offset (0x76)</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   IndexField (INDX, DATA, ByteAcc, NoLock, Preserve)</span><br><span style="color: hsl(120, 100%, 40%);">+    {</span><br><span style="color: hsl(120, 100%, 40%);">+             Offset (0xF0),</span><br><span style="color: hsl(120, 100%, 40%);">+                GPPS,   8,</span><br><span style="color: hsl(120, 100%, 40%);">+            GPPC,   8,</span><br><span style="color: hsl(120, 100%, 40%);">+            GPER,   8</span><br><span style="color: hsl(120, 100%, 40%);">+     }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   Method(LCON, 1, NotSerialized)</span><br><span style="color: hsl(120, 100%, 40%);">+        {</span><br><span style="color: hsl(120, 100%, 40%);">+             if (Arg0)</span><br><span>            {</span><br><span style="color: hsl(0, 100%, 40%);">-                       if (Arg0) {</span><br><span style="color: hsl(0, 100%, 40%);">-                        /* connect dock */</span><br><span style="color: hsl(0, 100%, 40%);">-                      Store (1, \GP28)</span><br><span style="color: hsl(0, 100%, 40%);">-                        Store (1, \_SB.PCI0.LPCB.EC.DKR1)</span><br><span style="color: hsl(0, 100%, 40%);">-                    } else {</span><br><span style="color: hsl(0, 100%, 40%);">-                           /* disconnect dock */</span><br><span style="color: hsl(0, 100%, 40%);">-                           Store (0, \GP28)</span><br><span style="color: hsl(0, 100%, 40%);">-                        Store (0, \_SB.PCI0.LPCB.EC.DKR1)</span><br><span style="color: hsl(120, 100%, 40%);">+                  if (\_SB.PCI0.LPCB.EC.DPWR)</span><br><span style="color: hsl(120, 100%, 40%);">+                   {</span><br><span style="color: hsl(120, 100%, 40%);">+                             \_SB.DOCK.DLPD = 0x01</span><br><span style="color: hsl(120, 100%, 40%);">+                         \_SB.DOCK.DLPC = 0x07</span><br><span style="color: hsl(120, 100%, 40%);">+                         While (!(0x08 & \_SB.DOCK.DLPC))</span><br><span style="color: hsl(120, 100%, 40%);">+                          {</span><br><span style="color: hsl(120, 100%, 40%);">+                                     Sleep(0x01)</span><br><span style="color: hsl(120, 100%, 40%);">+                           }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+                           \_SB.DOCK.DRST = 0x01</span><br><span style="color: hsl(120, 100%, 40%);">+                         if ((SIOD != 0xff))</span><br><span style="color: hsl(120, 100%, 40%);">+                           {</span><br><span style="color: hsl(120, 100%, 40%);">+                                     /* Enable 14.318MHz CLK on CLKIN */</span><br><span style="color: hsl(120, 100%, 40%);">+                                   SCF9 |= 0xa0</span><br><span style="color: hsl(120, 100%, 40%);">+                                  While (!(0x10 & SCF9))</span><br><span style="color: hsl(120, 100%, 40%);">+                                    {</span><br><span style="color: hsl(120, 100%, 40%);">+                                             Sleep (0x01)</span><br><span style="color: hsl(120, 100%, 40%);">+                                  }</span><br><span style="color: hsl(120, 100%, 40%);">+                                     /* set GPIO pins to Serial/Parallel Port functions  */</span><br><span style="color: hsl(120, 100%, 40%);">+                                        SCF2 |= 0xeb</span><br><span style="color: hsl(120, 100%, 40%);">+                                  LDN = 0x07 /* r_gpio */</span><br><span style="color: hsl(120, 100%, 40%);">+                                       Local0 = (0x1620 & 0xff)</span><br><span style="color: hsl(120, 100%, 40%);">+                                  IOLW = Local0</span><br><span style="color: hsl(120, 100%, 40%);">+                                 Local0 = (0x1620 >> 0x8)</span><br><span style="color: hsl(120, 100%, 40%);">+                                        IOHI = (Local0 & 0xff)</span><br><span style="color: hsl(120, 100%, 40%);">+                                    GPPS = 0x01</span><br><span style="color: hsl(120, 100%, 40%);">+                                   GPPC = 0x03</span><br><span style="color: hsl(120, 100%, 40%);">+                                   GPPS = 0x02</span><br><span style="color: hsl(120, 100%, 40%);">+                                   GPPC = 0x03</span><br><span style="color: hsl(120, 100%, 40%);">+                                   \_SB.DOCK.DUSB = 0</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+                          }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>                  }</span><br><span style="color: hsl(0, 100%, 40%);">-                       Xor(Arg0, \_SB.PCI0.LPCB.EC.DKR1, Local0)</span><br><span style="color: hsl(0, 100%, 40%);">-                       Return (Local0)</span><br><span>              }</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-               Method(_STA, 0, NotSerialized)</span><br><span style="color: hsl(120, 100%, 40%);">+                else</span><br><span>                 {</span><br><span style="color: hsl(0, 100%, 40%);">-                       Return (\_SB.PCI0.LPCB.EC.DKR1)</span><br><span style="color: hsl(120, 100%, 40%);">+                       \_SB.DOCK.DUSB = 1</span><br><span style="color: hsl(120, 100%, 40%);">+                    \_SB.DOCK.DRST = 0</span><br><span style="color: hsl(120, 100%, 40%);">+                    \_SB.DOCK.DLPD = 0</span><br><span style="color: hsl(120, 100%, 40%);">+                    \_SB.DOCK.DLPC = 0</span><br><span>           }</span><br><span>    }</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-Scope(\_SB.PCI0.LPCB.EC)</span><br><span style="color: hsl(120, 100%, 40%);">+Scope (\_SB)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-   Method(_Q18, 0, NotSerialized)</span><br><span style="color: hsl(120, 100%, 40%);">+        Device(DOCK)</span><br><span>         {</span><br><span style="color: hsl(0, 100%, 40%);">-               Notify(\_SB.DOCK, 3)</span><br><span style="color: hsl(120, 100%, 40%);">+          OperationRegion (NSDL, SystemIO, DLPC_CONTROL, 0x01)</span><br><span style="color: hsl(120, 100%, 40%);">+          Field (NSDL, ByteAcc, NoLock, Preserve)</span><br><span style="color: hsl(120, 100%, 40%);">+               {</span><br><span style="color: hsl(120, 100%, 40%);">+                     DLPC,   8</span><br><span style="color: hsl(120, 100%, 40%);">+             }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+           OperationRegion (NSIO, SystemIO, DLPC_GPIO_BASE, 0x0C)</span><br><span style="color: hsl(120, 100%, 40%);">+                Field (NSIO, ByteAcc, NoLock, Preserve)</span><br><span style="color: hsl(120, 100%, 40%);">+               {</span><br><span style="color: hsl(120, 100%, 40%);">+                     DRST,   1,</span><br><span style="color: hsl(120, 100%, 40%);">+                    DLPD,   1,</span><br><span style="color: hsl(120, 100%, 40%);">+                    ULRT,   1,</span><br><span style="color: hsl(120, 100%, 40%);">+                    ULPD,   1,</span><br><span style="color: hsl(120, 100%, 40%);">+                    Offset (0x01),</span><br><span style="color: hsl(120, 100%, 40%);">+                        ,   4,</span><br><span style="color: hsl(120, 100%, 40%);">+                        DKI0,   1,</span><br><span style="color: hsl(120, 100%, 40%);">+                    Offset (0x02),</span><br><span style="color: hsl(120, 100%, 40%);">+                        Offset (0x09),</span><br><span style="color: hsl(120, 100%, 40%);">+                        DKI1,   1,</span><br><span style="color: hsl(120, 100%, 40%);">+                    DKI2,   1</span><br><span style="color: hsl(120, 100%, 40%);">+             }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+           OperationRegion (DSIO, SystemIO, DOCK_GPIO_BASE, 0x0C)</span><br><span style="color: hsl(120, 100%, 40%);">+                Field (DSIO, ByteAcc, NoLock, Preserve)</span><br><span style="color: hsl(120, 100%, 40%);">+               {</span><br><span style="color: hsl(120, 100%, 40%);">+                     ,   1,</span><br><span style="color: hsl(120, 100%, 40%);">+                        DUSB,   1,</span><br><span style="color: hsl(120, 100%, 40%);">+                    Offset (0x01)</span><br><span style="color: hsl(120, 100%, 40%);">+         }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+           Name(_HID, "ACPI0003")</span><br><span style="color: hsl(120, 100%, 40%);">+              Name(_UID, 0x00)</span><br><span style="color: hsl(120, 100%, 40%);">+              Name(_PCL, Package() { \_SB } )</span><br><span style="color: hsl(120, 100%, 40%);">+               Name (G_ID, 0xffffffff)</span><br><span style="color: hsl(120, 100%, 40%);">+               Name (DOID, 0xffffffff)</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+             Method (GDID, 0, NotSerialized)</span><br><span style="color: hsl(120, 100%, 40%);">+               {</span><br><span style="color: hsl(120, 100%, 40%);">+                     If ((DOID == 0xFFFFFFFF))</span><br><span style="color: hsl(120, 100%, 40%);">+                     {</span><br><span style="color: hsl(120, 100%, 40%);">+                             \_SB.DOCK.G_ID = 0xFFFFFFFF</span><br><span style="color: hsl(120, 100%, 40%);">+                           DOID = RDID ()</span><br><span style="color: hsl(120, 100%, 40%);">+                        }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+                   Return (DOID) /* \_SB_.DOCK.DOID */</span><br><span style="color: hsl(120, 100%, 40%);">+           }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+           Method (RDID, 0, NotSerialized)</span><br><span style="color: hsl(120, 100%, 40%);">+               {</span><br><span style="color: hsl(120, 100%, 40%);">+                     Local0 = 0x00</span><br><span style="color: hsl(120, 100%, 40%);">+                 If (\_SB.PCI0.LPCB.EC.DPWR)</span><br><span style="color: hsl(120, 100%, 40%);">+                   {</span><br><span style="color: hsl(120, 100%, 40%);">+                             If ((\_SB.DOCK.GGID () == 0x00))</span><br><span style="color: hsl(120, 100%, 40%);">+                              {</span><br><span style="color: hsl(120, 100%, 40%);">+                                     Local0 = 0x4C004D24</span><br><span style="color: hsl(120, 100%, 40%);">+                           }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+                           If ((\_SB.DOCK.GGID () == 0x01))</span><br><span style="color: hsl(120, 100%, 40%);">+                              {</span><br><span style="color: hsl(120, 100%, 40%);">+                                     Local0 = 0x44004D24</span><br><span style="color: hsl(120, 100%, 40%);">+                           }</span><br><span style="color: hsl(120, 100%, 40%);">+                     }</span><br><span style="color: hsl(120, 100%, 40%);">+                     Return (Local0)</span><br><span style="color: hsl(120, 100%, 40%);">+               }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+           Method (GGID, 0, NotSerialized)</span><br><span style="color: hsl(120, 100%, 40%);">+               {</span><br><span style="color: hsl(120, 100%, 40%);">+                     Local0 = G_ID</span><br><span style="color: hsl(120, 100%, 40%);">+                 If ((Local0 == 0xFFFFFFFF))</span><br><span style="color: hsl(120, 100%, 40%);">+                   {</span><br><span style="color: hsl(120, 100%, 40%);">+                             Local0 = DKI0</span><br><span style="color: hsl(120, 100%, 40%);">+                         Local1 = DKI1</span><br><span style="color: hsl(120, 100%, 40%);">+                         Local2 = DKI2</span><br><span style="color: hsl(120, 100%, 40%);">+                         Local0 |= (Local1 << 0x01)</span><br><span style="color: hsl(120, 100%, 40%);">+                              Local0 |= (Local2 << 0x02)</span><br><span style="color: hsl(120, 100%, 40%);">+                              G_ID = Local0</span><br><span style="color: hsl(120, 100%, 40%);">+                 }</span><br><span style="color: hsl(120, 100%, 40%);">+                     return (Local0)</span><br><span style="color: hsl(120, 100%, 40%);">+               }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+           Method (_STA, 0, NotSerialized)</span><br><span style="color: hsl(120, 100%, 40%);">+               {</span><br><span style="color: hsl(120, 100%, 40%);">+                     Debug = "Dock Status"</span><br><span style="color: hsl(120, 100%, 40%);">+                       Local0 = GGID ()</span><br><span style="color: hsl(120, 100%, 40%);">+                      Local1 = 0x00</span><br><span style="color: hsl(120, 100%, 40%);">+                 if ((Local0 == 0) || (Local0 == 1))</span><br><span style="color: hsl(120, 100%, 40%);">+                   {</span><br><span style="color: hsl(120, 100%, 40%);">+                             if ((GDID () == 0x4C004D24) || (GDID () == 0x44004D24))</span><br><span style="color: hsl(120, 100%, 40%);">+                               {</span><br><span style="color: hsl(120, 100%, 40%);">+                                     Local1 = 0x0f</span><br><span style="color: hsl(120, 100%, 40%);">+                         }</span><br><span style="color: hsl(120, 100%, 40%);">+                     }</span><br><span style="color: hsl(120, 100%, 40%);">+                     Debug = Local1</span><br><span style="color: hsl(120, 100%, 40%);">+                        return (Local1)</span><br><span style="color: hsl(120, 100%, 40%);">+               }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+           Method (DDCK, 1, NotSerialized)</span><br><span style="color: hsl(120, 100%, 40%);">+               {</span><br><span style="color: hsl(120, 100%, 40%);">+                     If (Arg0)</span><br><span style="color: hsl(120, 100%, 40%);">+                     {</span><br><span style="color: hsl(120, 100%, 40%);">+                             \_SB.PCI0.LPCB.EC.LEDS = 0x08</span><br><span style="color: hsl(120, 100%, 40%);">+                         \_SB.PCI0.LPCB.EC.LEDS = 0x89</span><br><span style="color: hsl(120, 100%, 40%);">+                         \_SB.PCI0.LPCB.LCON (0x01)</span><br><span style="color: hsl(120, 100%, 40%);">+                    }</span><br><span style="color: hsl(120, 100%, 40%);">+                     Else</span><br><span style="color: hsl(120, 100%, 40%);">+                  {</span><br><span style="color: hsl(120, 100%, 40%);">+                             \_SB.PCI0.LPCB.EC.LEDS = 0x88</span><br><span style="color: hsl(120, 100%, 40%);">+                         \_SB.PCI0.LPCB.EC.LEDS = 0xc9</span><br><span style="color: hsl(120, 100%, 40%);">+                         \_SB.PCI0.LPCB.LCON (0x00)</span><br><span style="color: hsl(120, 100%, 40%);">+                    }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+                   Return (0x01)</span><br><span style="color: hsl(120, 100%, 40%);">+         }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+           Method (_DCK, 1, NotSerialized)</span><br><span style="color: hsl(120, 100%, 40%);">+               {</span><br><span style="color: hsl(120, 100%, 40%);">+                     Debug = "_DCK"</span><br><span style="color: hsl(120, 100%, 40%);">+                      Debug = Arg0</span><br><span style="color: hsl(120, 100%, 40%);">+                  Local0 = 0x0</span><br><span style="color: hsl(120, 100%, 40%);">+                  If ((GGID () == 0x0) || (GGID () == 1))</span><br><span style="color: hsl(120, 100%, 40%);">+                       {</span><br><span style="color: hsl(120, 100%, 40%);">+                             Local0 = DDCK(Arg0)</span><br><span style="color: hsl(120, 100%, 40%);">+                   }</span><br><span style="color: hsl(120, 100%, 40%);">+                     Return (Local0)</span><br><span style="color: hsl(120, 100%, 40%);">+               }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+           Method (_EJ0, 1, NotSerialized)</span><br><span style="color: hsl(120, 100%, 40%);">+               {</span><br><span style="color: hsl(120, 100%, 40%);">+                     Local0 = GGID ()</span><br><span style="color: hsl(120, 100%, 40%);">+                      If ((Local0 == 0) || (Local0 == 1))</span><br><span style="color: hsl(120, 100%, 40%);">+                   {</span><br><span style="color: hsl(120, 100%, 40%);">+                             if (Arg0)</span><br><span style="color: hsl(120, 100%, 40%);">+                             {</span><br><span style="color: hsl(120, 100%, 40%);">+                                     DOID = 0</span><br><span style="color: hsl(120, 100%, 40%);">+                              }</span><br><span style="color: hsl(120, 100%, 40%);">+                             \_SB.PCI0.LPCB.EC.LEDS = 0x08</span><br><span style="color: hsl(120, 100%, 40%);">+                         \_SB.PCI0.LPCB.EC.LEDS = 0x09</span><br><span style="color: hsl(120, 100%, 40%);">+                 }</span><br><span style="color: hsl(120, 100%, 40%);">+             }</span><br><span style="color: hsl(120, 100%, 40%);">+     }</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+        Scope(\_SB.PCI0.LPCB.EC)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+   OperationRegion(PMH7, SystemIO, 0x15e0, 0x10)</span><br><span style="color: hsl(120, 100%, 40%);">+ Field(PMH7, ByteAcc, NoLock, Preserve)</span><br><span style="color: hsl(120, 100%, 40%);">+        {</span><br><span style="color: hsl(120, 100%, 40%);">+             Offset(0x0c),</span><br><span style="color: hsl(120, 100%, 40%);">+                 PIDX, 8,</span><br><span style="color: hsl(120, 100%, 40%);">+              Offset(0x0e),</span><br><span style="color: hsl(120, 100%, 40%);">+                 PDAT, 8,</span><br><span>     }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   Method(_Q45, 0, NotSerialized)</span><br><span style="color: hsl(120, 100%, 40%);">+        IndexField(PIDX, PDAT, ByteAcc, NoLock, Preserve)</span><br><span>    {</span><br><span style="color: hsl(0, 100%, 40%);">-               Notify(\_SB.DOCK, 3)</span><br><span style="color: hsl(120, 100%, 40%);">+          Offset (0x61),</span><br><span style="color: hsl(120, 100%, 40%);">+                        DPWR, 1,</span><br><span>     }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   Method(_Q50, 0, NotSerialized)</span><br><span style="color: hsl(120, 100%, 40%);">+        Method(_Q18, 0, NotSerialized) /* FN + F9 */</span><br><span>         {</span><br><span style="color: hsl(120, 100%, 40%);">+             Debug = "_Q18"</span><br><span>             Notify(\_SB.DOCK, 3)</span><br><span>         }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   Method(_Q58, 0, NotSerialized)</span><br><span style="color: hsl(0, 100%, 40%);">-  {</span><br><span style="color: hsl(0, 100%, 40%);">-               Notify(\_SB.DOCK, 0)</span><br><span style="color: hsl(0, 100%, 40%);">-    }</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span>    Method(_Q37, 0, NotSerialized)</span><br><span>       {</span><br><span style="color: hsl(120, 100%, 40%);">+             Debug = "_Q37"</span><br><span style="color: hsl(120, 100%, 40%);">+              Debug = "DPWR: "</span><br><span style="color: hsl(120, 100%, 40%);">+            Debug = DPWR</span><br><span style="color: hsl(120, 100%, 40%);">+          if (DPWR) {</span><br><span style="color: hsl(120, 100%, 40%);">+                   Local0 = 2000</span><br><span style="color: hsl(120, 100%, 40%);">+                 Sleep (100)</span><br><span style="color: hsl(120, 100%, 40%);">+                   \_SB.DOCK.G_ID = 0xffffffff</span><br><span style="color: hsl(120, 100%, 40%);">+                   While((\_SB.DOCK.GGID () == 0x07) && Local0)</span><br><span style="color: hsl(120, 100%, 40%);">+                  {</span><br><span style="color: hsl(120, 100%, 40%);">+                             Sleep(1)</span><br><span style="color: hsl(120, 100%, 40%);">+                              \_SB.DOCK.G_ID = 0xffffffff</span><br><span style="color: hsl(120, 100%, 40%);">+                           Local0--</span><br><span style="color: hsl(120, 100%, 40%);">+                      }</span><br><span style="color: hsl(120, 100%, 40%);">+                     Debug = "GGID: "</span><br><span style="color: hsl(120, 100%, 40%);">+                    Debug = \_SB.DOCK.GGID ()</span><br><span style="color: hsl(120, 100%, 40%);">+                     \_SB.DOCK.DOID = 0xFFFFFFFF</span><br><span style="color: hsl(120, 100%, 40%);">+                   If (((\_SB.DOCK.GDID () == 0x4C004D24) || (\_SB.DOCK.GDID () == 0x44004D24)))</span><br><span style="color: hsl(120, 100%, 40%);">+                 {</span><br><span style="color: hsl(120, 100%, 40%);">+                             Debug = "Notifying Dock 0"</span><br><span style="color: hsl(120, 100%, 40%);">+                          \_SB.DOCK.DRST = 0</span><br><span style="color: hsl(120, 100%, 40%);">+                            Notify(\_SB.DOCK, 0)</span><br><span style="color: hsl(120, 100%, 40%);">+                  }</span><br><span style="color: hsl(120, 100%, 40%);">+                     Debug = "GDID: "</span><br><span style="color: hsl(120, 100%, 40%);">+                    Debug = \_SB.DOCK.GDID ()</span><br><span style="color: hsl(120, 100%, 40%);">+             }</span><br><span style="color: hsl(120, 100%, 40%);">+     }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   Method(_Q45, 0, NotSerialized)</span><br><span style="color: hsl(120, 100%, 40%);">+        {</span><br><span style="color: hsl(120, 100%, 40%);">+             Debug = "_Q45"</span><br><span style="color: hsl(120, 100%, 40%);">+              Notify(\_SB.DOCK, 3)</span><br><span style="color: hsl(120, 100%, 40%);">+  }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   Method(_Q50, 0, NotSerialized) /* Undock Button */</span><br><span style="color: hsl(120, 100%, 40%);">+            {</span><br><span style="color: hsl(120, 100%, 40%);">+             Debug = "_Q50"</span><br><span style="color: hsl(120, 100%, 40%);">+              Local0 = \_SB.DOCK.GGID ()</span><br><span style="color: hsl(120, 100%, 40%);">+            If (((Local0 == 0x00) || (Local0 == 0x01)))</span><br><span style="color: hsl(120, 100%, 40%);">+           {</span><br><span style="color: hsl(120, 100%, 40%);">+                     \_SB.PCI0.LPCB.EC.LEDS = 0x88</span><br><span style="color: hsl(120, 100%, 40%);">+                 \_SB.PCI0.LPCB.EC.LEDS = 0xc9</span><br><span style="color: hsl(120, 100%, 40%);">+                 Notify (\_SB.DOCK, 0x03) // Eject Request</span><br><span style="color: hsl(120, 100%, 40%);">+             }</span><br><span style="color: hsl(120, 100%, 40%);">+     }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   Method(_Q58, 0, NotSerialized)</span><br><span style="color: hsl(120, 100%, 40%);">+        {</span><br><span style="color: hsl(120, 100%, 40%);">+             Debug = "_Q58"</span><br><span>             Notify(\_SB.DOCK, 0)</span><br><span>         }</span><br><span> }</span><br><span></span><br></pre><p>To view, visit <a href="https://review.coreboot.org/c/coreboot/+/30397">change 30397</a>. To unsubscribe, or for help writing mail filters, visit <a href="https://review.coreboot.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://review.coreboot.org/c/coreboot/+/30397"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: coreboot </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: Ifa4a5a0272c6d3ec0b65871e5c1448d395bc74a8 </div>
<div style="display:none"> Gerrit-Change-Number: 30397 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: Arthur Heymans <arthur@aheymans.xyz> </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>