From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by mx.groups.io with SMTP id smtpd.web11.7131.1597359701329256416 for ; Thu, 13 Aug 2020 16:01:41 -0700 Authentication-Results: mx.groups.io; dkim=missing; spf=pass (domain: arm.com, ip: 217.140.110.172, mailfrom: jeremy.linton@arm.com) Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id BDA7331B; Thu, 13 Aug 2020 16:01:40 -0700 (PDT) Received: from u200856.usa.arm.com (unknown [172.31.20.19]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 636F03F22E; Thu, 13 Aug 2020 16:01:40 -0700 (PDT) From: "Jeremy Linton" To: devel@edk2.groups.io Cc: Jeremy Linton , Leif Lindholm , Pete Batard , Andrei Warkentin , Ard Biesheuvel , Samer El-Haj-Mahmoud Subject: [PATCH 1/3] Platform/RaspberryPi4: Add a basic thermal zone Date: Thu, 13 Aug 2020 18:00:54 -0500 Message-Id: <20200813230056.40526-2-jeremy.linton@arm.com> X-Mailer: git-send-email 2.25.4 In-Reply-To: <20200813230056.40526-1-jeremy.linton@arm.com> References: <20200813230056.40526-1-jeremy.linton@arm.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Rather than exporting the temp sensor or mailbox in ACPI land we can wrap them in AML and use the default ACPI drivers provided by the OS. This enables the use of "sensors" in linux to report the SOC temp. This commit also adds a basic passive cooling ACPI thermalzone with trip points for passive cooling (throttling) handled by the vc firmware, hibernate and critical shutdown. The vc apparently kicks in at ~80C, so the hibernate and critical set points are set at +5 and +10 of that. In the future CPPC should be able to monitor the thermal throttling. Cc: Leif Lindholm Cc: Pete Batard Cc: Andrei Warkentin Cc: Ard Biesheuvel Cc: Samer El-Haj-Mahmoud Signed-off-by: Jeremy Linton --- Platform/RaspberryPi/AcpiTables/Dsdt.asl | 31 ++++++++++++++++++++++++++++= +++ 1 file changed, 31 insertions(+) diff --git a/Platform/RaspberryPi/AcpiTables/Dsdt.asl b/Platform/RaspberryP= i/AcpiTables/Dsdt.asl index 353af2d876..a5c9567cdf 100644 --- a/Platform/RaspberryPi/AcpiTables/Dsdt.asl +++ b/Platform/RaspberryPi/AcpiTables/Dsdt.asl @@ -252,6 +252,37 @@ DefinitionBlock ("Dsdt.aml", "DSDT", 5, "RPIFDN", "RPI= ", 2) }=0D })=0D }=0D +=0D + // Define a simple thermal zone. The idea here is we compute the SOC t= emp=0D + // via a register we can read, and give it to the OS. This enables bas= ic=0D + // reports from the "sensors" utility, and the OS can then poll and ta= ke=0D + // actions if that temp exceeds any of the given thresholds.=0D + Device(EC0)=0D + {=0D + Name(_HID, EISAID("PNP0C06"))=0D + Name (_CCA, 0x0)=0D +=0D + // all temps in are tenths of K (aka 2732 is the min temps in linux = (aka 0C))=0D + ThermalZone(TZ0) {=0D + Method(_TMP, 0, Serialized) {=0D + OperationRegion (TEMS, SystemMemory, 0xfd5d2200, 0x8)=0D + Field (TEMS, DWordAcc, NoLock, Preserve) {=0D + TMPS, 32=0D + }=0D + return (((419949 - ((TMPS & 0x3ff) * 487)) / 100) + 2732);=0D + }=0D + Method(_SCP, 3) { } // receive cooling policy from OS= =0D +=0D + Method(_CRT) { return(3632) } // (90K) Critical temp point (imm= ediate power-off)=0D + Method(_HOT) { return(3582) } // (85K) HOT state where OS shoul= d hibernate=0D + Method(_PSV) { return(3532) } // (80K) Passive cooling (CPU thr= ottling) trip point=0D +=0D + // SSDT inserts _AC0/_AL0 @60C here, if a FAN is configured=0D +=0D + Name(_TZP, 10) //The OSPM must poll this device = every 1 seconds=0D + Name(_PSL, Package(){ \_SB_.CPU0, \_SB_.CPU1, \_SB_.CPU2, \_SB_.CP= U3})=0D + }=0D + }=0D #endif=0D =0D }=0D --=20 2.13.7