<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>