<p>Duncan Laurie <strong>merged</strong> this change.</p><p><a href="https://review.coreboot.org/c/coreboot/+/29761">View Change</a></p><div style="white-space:pre-wrap">Approvals:
  build bot (Jenkins): Verified
  Furquan Shaikh: Looks good to me, approved

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">ec/google/wilco/acpi: Add DPTF support<br><br>Add the support needed for DPTF.  This includes the methods to<br>write trip point values, read temperatures, and handle events.<br><br>This was tested on a sarien board by inspecting AML debug output<br>with the kernel while monitoring temperatures and trip points in<br>sysfs and controlling temperatures with a fan to ensure that when<br>a trip point is crossed an SCI is generated and the event is<br>handled properly.<br><br>Change-Id: I8d8570d176c0896fa709a6c782b319f58d3c1e52<br>Signed-off-by: Duncan Laurie <dlaurie@google.com><br>Reviewed-on: https://review.coreboot.org/c/29761<br>Reviewed-by: Furquan Shaikh <furquan@google.com><br>Tested-by: build bot (Jenkins) <no-reply@coreboot.org><br>---<br>A src/ec/google/wilco/acpi/dptf.asl<br>M src/ec/google/wilco/acpi/ec.asl<br>M src/ec/google/wilco/acpi/ec_ram.asl<br>M src/ec/google/wilco/acpi/event.asl<br>4 files changed, 159 insertions(+), 0 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/src/ec/google/wilco/acpi/dptf.asl b/src/ec/google/wilco/acpi/dptf.asl</span><br><span>new file mode 100644</span><br><span>index 0000000..f5545d0</span><br><span>--- /dev/null</span><br><span>+++ b/src/ec/google/wilco/acpi/dptf.asl</span><br><span>@@ -0,0 +1,134 @@</span><br><span style="color: hsl(120, 100%, 40%);">+/*</span><br><span style="color: hsl(120, 100%, 40%);">+ * This file is part of the coreboot project.</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * Copyright 2018 Google LLC</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * This program is free software; you can redistribute it and/or</span><br><span style="color: hsl(120, 100%, 40%);">+ * modify it under the terms of the GNU General Public License as</span><br><span style="color: hsl(120, 100%, 40%);">+ * published by the Free Software Foundation; version 2 of</span><br><span style="color: hsl(120, 100%, 40%);">+ * the License.</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * This program is distributed in the hope that it will be useful,</span><br><span style="color: hsl(120, 100%, 40%);">+ * but WITHOUT ANY WARRANTY; without even the implied warranty of</span><br><span style="color: hsl(120, 100%, 40%);">+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span><br><span style="color: hsl(120, 100%, 40%);">+ * GNU General Public License for more details.</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%);">+ * Dynamic Platform Thermal Framework support</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%);">+External (\_SB.DPTF.CTOK, MethodObj)</span><br><span style="color: hsl(120, 100%, 40%);">+External (\_SB.DPTF.KTOC, MethodObj)</span><br><span style="color: hsl(120, 100%, 40%);">+External (\_SB.DPTF.TEVT, MethodObj)</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* Mutex for EC PAT interface */</span><br><span style="color: hsl(120, 100%, 40%);">+Mutex (PATM, 1)</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* Read requested temperature sensor */</span><br><span style="color: hsl(120, 100%, 40%);">+Method (TSRD, 1, Serialized)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+    If (Acquire (^PATM, 1000)) {</span><br><span style="color: hsl(120, 100%, 40%);">+          Return (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%);">+   /* Set sensor ID */</span><br><span style="color: hsl(120, 100%, 40%);">+   W (DWTI, ToInteger (Arg0))</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  Local0 = R (DRTV)</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   Release (^PATM)</span><br><span style="color: hsl(120, 100%, 40%);">+       Return (\_SB.DPTF.CTOK (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%);">+/*</span><br><span style="color: hsl(120, 100%, 40%);">+ * Set Aux Trip Point 0</span><br><span style="color: hsl(120, 100%, 40%);">+ *   Arg0 = Temp Sensor ID</span><br><span style="color: hsl(120, 100%, 40%);">+ *   Arg1 = Value to set</span><br><span style="color: hsl(120, 100%, 40%);">+ */</span><br><span style="color: hsl(120, 100%, 40%);">+Method (PAT0, 2, Serialized)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+        If (Acquire (^PATM, 1000)) {</span><br><span style="color: hsl(120, 100%, 40%);">+          Return (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%);">+   /* Set sensor ID */</span><br><span style="color: hsl(120, 100%, 40%);">+   W (DWTI, ToInteger (Arg0))</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  /* Set LOW trip point for this sensor */</span><br><span style="color: hsl(120, 100%, 40%);">+      W (DWTL, \_SB.DPTF.KTOC (Arg1))</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     Release (^PATM)</span><br><span style="color: hsl(120, 100%, 40%);">+       Return (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%);">+/*</span><br><span style="color: hsl(120, 100%, 40%);">+ * Set Aux Trip Point 1</span><br><span style="color: hsl(120, 100%, 40%);">+ *   Arg0 = Temp Sensor ID</span><br><span style="color: hsl(120, 100%, 40%);">+ *   Arg1 = Value to set</span><br><span style="color: hsl(120, 100%, 40%);">+ */</span><br><span style="color: hsl(120, 100%, 40%);">+Method (PAT1, 2, Serialized)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+      If (Acquire (^PATM, 1000)) {</span><br><span style="color: hsl(120, 100%, 40%);">+          Return (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%);">+   /* Set sensor ID */</span><br><span style="color: hsl(120, 100%, 40%);">+   W (DWTI, ToInteger (Arg0))</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  /* Set HIGH trip point for this sensor */</span><br><span style="color: hsl(120, 100%, 40%);">+     W (DWTH, \_SB.DPTF.KTOC (Arg1))</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     Release (^PATM)</span><br><span style="color: hsl(120, 100%, 40%);">+       Return (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%);">+/*</span><br><span style="color: hsl(120, 100%, 40%);">+ * Disable Aux Trip Points</span><br><span style="color: hsl(120, 100%, 40%);">+ *   Arg0 = Temp Sensor ID</span><br><span style="color: hsl(120, 100%, 40%);">+ */</span><br><span style="color: hsl(120, 100%, 40%);">+Method (PATD, 1, Serialized)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+     If (Acquire (^PATM, 1000)) {</span><br><span style="color: hsl(120, 100%, 40%);">+          Return (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%);">+   /* Set sensor ID */</span><br><span style="color: hsl(120, 100%, 40%);">+   W (DWTI, ToInteger (Arg0))</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  /* Disable LOW and HIGH trip points */</span><br><span style="color: hsl(120, 100%, 40%);">+        W (DWTL, 0xff)</span><br><span style="color: hsl(120, 100%, 40%);">+        W (DWTH, 0xff)</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+      Release (^PATM)</span><br><span style="color: hsl(120, 100%, 40%);">+       Return (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%);">+/*</span><br><span style="color: hsl(120, 100%, 40%);">+ * Handle sensor trip events</span><br><span style="color: hsl(120, 100%, 40%);">+ */</span><br><span style="color: hsl(120, 100%, 40%);">+Method (PATX, 0, Serialized)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+       Local0 = R (DRTQ)</span><br><span style="color: hsl(120, 100%, 40%);">+     Local1 = Local0</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     Printf ("Sensor trip mask: %o", Local0)</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   If (LNot (Acquire (^PATM, 1000))) {</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+         /* Handle bits that are set */</span><br><span style="color: hsl(120, 100%, 40%);">+                While (FindSetRightBit (Local1, Local2))</span><br><span style="color: hsl(120, 100%, 40%);">+              {</span><br><span style="color: hsl(120, 100%, 40%);">+                     /* DPTF will Notify sensor devices */</span><br><span style="color: hsl(120, 100%, 40%);">+                 \_SB.DPTF.TEVT (Local2)</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+                     /* Clear current sensor number */</span><br><span style="color: hsl(120, 100%, 40%);">+                     Local1 &= ~(1 << (Local2 - 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%);">+           Release (^PATM)</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%);">+   /* Clear sensor events */</span><br><span style="color: hsl(120, 100%, 40%);">+     W (DWTQ, Local0)</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span>diff --git a/src/ec/google/wilco/acpi/ec.asl b/src/ec/google/wilco/acpi/ec.asl</span><br><span>index 67a698f..ff8fccc 100644</span><br><span>--- a/src/ec/google/wilco/acpi/ec.asl</span><br><span>+++ b/src/ec/google/wilco/acpi/ec.asl</span><br><span>@@ -49,6 +49,11 @@</span><br><span> </span><br><span>                /* Tell EC to stop emulating PS/2 mouse */</span><br><span>           W (PS2M, Zero)</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+              /* Enable DPTF support if enabled in devicetree */</span><br><span style="color: hsl(120, 100%, 40%);">+            If (\DPTE == One) {</span><br><span style="color: hsl(120, 100%, 40%);">+                   W (DWST, Arg1)</span><br><span style="color: hsl(120, 100%, 40%);">+                }</span><br><span>    }</span><br><span> </span><br><span>        /*</span><br><span>@@ -142,4 +147,5 @@</span><br><span>     #include "event.asl"</span><br><span>       #include "lid.asl"</span><br><span>         #include "platform.asl"</span><br><span style="color: hsl(120, 100%, 40%);">+     #include "dptf.asl"</span><br><span> }</span><br><span>diff --git a/src/ec/google/wilco/acpi/ec_ram.asl b/src/ec/google/wilco/acpi/ec_ram.asl</span><br><span>index 6ea2366..1563a3c 100644</span><br><span>--- a/src/ec/google/wilco/acpi/ec_ram.asl</span><br><span>+++ b/src/ec/google/wilco/acpi/ec_ram.asl</span><br><span>@@ -106,6 +106,14 @@</span><br><span> Name (QSEC, Package () { 0x2b, 0xff, RD })        /* QS Event Count */</span><br><span> Name (QSEB, Package () { 0x2c, 0xff, RD })      /* QS Event Byte */</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+Name (DRST, Package () { 0x32, 0xff, RD })     /* DPTF: Read State */</span><br><span style="color: hsl(120, 100%, 40%);">+Name (DRTI, Package () { 0x33, 0xff, RD })      /* DPTF: Read Thermal Index */</span><br><span style="color: hsl(120, 100%, 40%);">+Name (DRTV, Package () { 0x34, 0xff, RD })      /* DPTF: Read Thermal Value */</span><br><span style="color: hsl(120, 100%, 40%);">+Name (DRTL, Package () { 0x35, 0xff, RD })      /* DPTF: Read Trip Low */</span><br><span style="color: hsl(120, 100%, 40%);">+Name (DRTH, Package () { 0x36, 0xff, RD })   /* DPTF: Read Trip High */</span><br><span style="color: hsl(120, 100%, 40%);">+Name (DRHY, Package () { 0x37, 0xff, RD })  /* DPTF: Read Hysteresis */</span><br><span style="color: hsl(120, 100%, 40%);">+Name (DRTQ, Package () { 0x38, 0xff, RD }) /* DPTF: Read Trip Query */</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> Name (ORST, Package () { 0x39, 0xff, RD })     /* Orientation State */</span><br><span> Name (OREV, Package () { 0x3a, 0xff, RD })   /* Orientation Events */</span><br><span> Name (OECH, Package () { 0x3a, 0x01, RD })  /* Event: Orientation */</span><br><span>@@ -128,3 +136,9 @@</span><br><span> Name (ERDY, Package () { 0x05, 0xff, WR })    /* EC Ready */</span><br><span> Name (FWAK, Package () { 0x06, 0xff, WR })    /* EC _WAK */</span><br><span> Name (PS2M, Package () { 0x20, 0xff, WR })     /* EC PS/2 Mouse Emulation */</span><br><span style="color: hsl(120, 100%, 40%);">+Name (DWST, Package () { 0x32, 0xff, WR })       /* DPTF: Write State */</span><br><span style="color: hsl(120, 100%, 40%);">+Name (DWTI, Package () { 0x33, 0xff, WR })     /* DPTF: Write Thermal Index */</span><br><span style="color: hsl(120, 100%, 40%);">+Name (DWTL, Package () { 0x35, 0xff, WR })     /* DPTF: Write Trip Low */</span><br><span style="color: hsl(120, 100%, 40%);">+Name (DWTH, Package () { 0x36, 0xff, WR })  /* DPTF: Write Trip High */</span><br><span style="color: hsl(120, 100%, 40%);">+Name (DWHY, Package () { 0x37, 0xff, WR }) /* DPTF: Write Hysteresis */</span><br><span style="color: hsl(120, 100%, 40%);">+Name (DWTQ, Package () { 0x38, 0xff, WR })        /* DPTF: Write Trip Query */</span><br><span>diff --git a/src/ec/google/wilco/acpi/event.asl b/src/ec/google/wilco/acpi/event.asl</span><br><span>index 4d796b5..21721f2 100644</span><br><span>--- a/src/ec/google/wilco/acpi/event.asl</span><br><span>+++ b/src/ec/google/wilco/acpi/event.asl</span><br><span>@@ -87,6 +87,11 @@</span><br><span> Method (ECQ3, 1, Serialized)</span><br><span> {</span><br><span>  Printf ("EVT3: %o", Arg0)</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ /* Theraml Events */</span><br><span style="color: hsl(120, 100%, 40%);">+  If (EBIT (E3TH, Arg0)) {</span><br><span style="color: hsl(120, 100%, 40%);">+              ^PATX ()</span><br><span style="color: hsl(120, 100%, 40%);">+      }</span><br><span> }</span><br><span> </span><br><span> /* Handle events in PmEv4 */</span><br><span></span><br></pre><p>To view, visit <a href="https://review.coreboot.org/c/coreboot/+/29761">change 29761</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/+/29761"/><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: I8d8570d176c0896fa709a6c782b319f58d3c1e52 </div>
<div style="display:none"> Gerrit-Change-Number: 29761 </div>
<div style="display:none"> Gerrit-PatchSet: 5 </div>
<div style="display:none"> Gerrit-Owner: Duncan Laurie <dlaurie@chromium.org> </div>
<div style="display:none"> Gerrit-Reviewer: Duncan Laurie <dlaurie@chromium.org> </div>
<div style="display:none"> Gerrit-Reviewer: Furquan Shaikh <furquan@google.com> </div>
<div style="display:none"> Gerrit-Reviewer: build bot (Jenkins) <no-reply@coreboot.org> </div>
<div style="display:none"> Gerrit-MessageType: merged </div>