diff options
Diffstat (limited to 'src/ec/google/wilco/acpi/dptf.asl')
-rw-r--r-- | src/ec/google/wilco/acpi/dptf.asl | 134 |
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) +} |