aboutsummaryrefslogtreecommitdiff
path: root/src/ec/google/wilco/acpi/dptf.asl
diff options
context:
space:
mode:
Diffstat (limited to 'src/ec/google/wilco/acpi/dptf.asl')
-rw-r--r--src/ec/google/wilco/acpi/dptf.asl134
1 files changed, 134 insertions, 0 deletions
diff --git a/src/ec/google/wilco/acpi/dptf.asl b/src/ec/google/wilco/acpi/dptf.asl
new file mode 100644
index 0000000000..f5545d0c79
--- /dev/null
+++ b/src/ec/google/wilco/acpi/dptf.asl
@@ -0,0 +1,134 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright 2018 Google LLC
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; version 2 of
+ * the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ */
+
+/*
+ * Dynamic Platform Thermal Framework support
+ */
+
+External (\_SB.DPTF.CTOK, MethodObj)
+External (\_SB.DPTF.KTOC, MethodObj)
+External (\_SB.DPTF.TEVT, MethodObj)
+
+/* Mutex for EC PAT interface */
+Mutex (PATM, 1)
+
+/* Read requested temperature sensor */
+Method (TSRD, 1, Serialized)
+{
+ If (Acquire (^PATM, 1000)) {
+ Return (0)
+ }
+
+ /* Set sensor ID */
+ W (DWTI, ToInteger (Arg0))
+
+ Local0 = R (DRTV)
+
+ Release (^PATM)
+ Return (\_SB.DPTF.CTOK (Local0))
+}
+
+/*
+ * Set Aux Trip Point 0
+ * Arg0 = Temp Sensor ID
+ * Arg1 = Value to set
+ */
+Method (PAT0, 2, Serialized)
+{
+ If (Acquire (^PATM, 1000)) {
+ Return (0)
+ }
+
+ /* Set sensor ID */
+ W (DWTI, ToInteger (Arg0))
+
+ /* Set LOW trip point for this sensor */
+ W (DWTL, \_SB.DPTF.KTOC (Arg1))
+
+ Release (^PATM)
+ Return (1)
+}
+
+/*
+ * Set Aux Trip Point 1
+ * Arg0 = Temp Sensor ID
+ * Arg1 = Value to set
+ */
+Method (PAT1, 2, Serialized)
+{
+ If (Acquire (^PATM, 1000)) {
+ Return (0)
+ }
+
+ /* Set sensor ID */
+ W (DWTI, ToInteger (Arg0))
+
+ /* Set HIGH trip point for this sensor */
+ W (DWTH, \_SB.DPTF.KTOC (Arg1))
+
+ Release (^PATM)
+ Return (1)
+}
+
+/*
+ * Disable Aux Trip Points
+ * Arg0 = Temp Sensor ID
+ */
+Method (PATD, 1, Serialized)
+{
+ If (Acquire (^PATM, 1000)) {
+ Return (0)
+ }
+
+ /* Set sensor ID */
+ W (DWTI, ToInteger (Arg0))
+
+ /* Disable LOW and HIGH trip points */
+ W (DWTL, 0xff)
+ W (DWTH, 0xff)
+
+ Release (^PATM)
+ Return (1)
+}
+
+/*
+ * Handle sensor trip events
+ */
+Method (PATX, 0, Serialized)
+{
+ Local0 = R (DRTQ)
+ Local1 = Local0
+
+ Printf ("Sensor trip mask: %o", Local0)
+
+ If (LNot (Acquire (^PATM, 1000))) {
+
+ /* Handle bits that are set */
+ While (FindSetRightBit (Local1, Local2))
+ {
+ /* DPTF will Notify sensor devices */
+ \_SB.DPTF.TEVT (Local2)
+
+ /* Clear current sensor number */
+ Local1 &= ~(1 << (Local2 - 1))
+ }
+
+ Release (^PATM)
+ }
+
+ /* Clear sensor events */
+ W (DWTQ, Local0)
+}