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.web10.106781.1597910356503090038 for ; Thu, 20 Aug 2020 00:59:16 -0700 Authentication-Results: mx.groups.io; dkim=missing; spf=pass (domain: arm.com, ip: 217.140.110.172, mailfrom: ard.biesheuvel@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 32B8F1FB; Thu, 20 Aug 2020 00:59:15 -0700 (PDT) Received: from [192.168.2.12] (unknown [172.31.20.19]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 1BA7D3F6CF; Thu, 20 Aug 2020 00:59:13 -0700 (PDT) Subject: Re: [PATCH v2 1/4] Platform/RaspberryPi4: Add a basic thermal zone To: Jeremy Linton , devel@edk2.groups.io Cc: Leif Lindholm , Pete Batard , Andrei Warkentin , Samer El-Haj-Mahmoud References: <20200820044217.39839-1-jeremy.linton@arm.com> <20200820044217.39839-2-jeremy.linton@arm.com> From: "Ard Biesheuvel" Message-ID: <6f61bcb3-db9f-4da0-6643-b6365fee677d@arm.com> Date: Thu, 20 Aug 2020 09:59:12 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.7.0 MIME-Version: 1.0 In-Reply-To: <20200820044217.39839-2-jeremy.linton@arm.com> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit On 8/20/20 6:42 AM, Jeremy Linton wrote: > 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 > Reviewed-by: Pete Batard <@pbatard> This looks ok to me but I did not receive patch #4 or the cover letter. > --- > Platform/RaspberryPi/AcpiTables/Dsdt.asl | 31 ++++++++++++++++++++++ > .../Bcm27xx/Include/IndustryStandard/Bcm2711.h | 2 ++ > 2 files changed, 33 insertions(+) > > diff --git a/Platform/RaspberryPi/AcpiTables/Dsdt.asl b/Platform/RaspberryPi/AcpiTables/Dsdt.asl > index 353af2d876..73067aefd2 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) > } > }) > } > + > + // Define a simple thermal zone. The idea here is we compute the SOC temp > + // via a register we can read, and give it to the OS. This enables basic > + // reports from the "sensors" utility, and the OS can then poll and take > + // actions if that temp exceeds any of the given thresholds. > + Device (EC0) > + { > + Name (_HID, EISAID ("PNP0C06")) > + Name (_CCA, 0x0) > + > + // all temps in are tenths of K (aka 2732 is the min temps in Linux (aka 0C)) > + ThermalZone (TZ0) { > + Method (_TMP, 0, Serialized) { > + OperationRegion (TEMS, SystemMemory, THERM_SENSOR, 0x8) > + Field (TEMS, DWordAcc, NoLock, Preserve) { > + TMPS, 32 > + } > + return (((419949 - ((TMPS & 0x3ff) * 487)) / 100) + 2732); > + } > + Method (_SCP, 3) { } // receive cooling policy from OS > + > + Method (_CRT) { Return (3632) } // (90C) Critical temp point (immediate power-off) > + Method (_HOT) { Return (3582) } // (85C) HOT state where OS should hibernate > + Method (_PSV) { Return (3532) } // (80C) Passive cooling (CPU throttling) trip point > + > + // SSDT inserts _AC0/_AL0 @60C here, if a FAN is configured > + > + Name (_TZP, 10) //The OSPM must poll this device every 1 seconds > + Name (_PSL, Package () { \_SB_.CPU0, \_SB_.CPU1, \_SB_.CPU2, \_SB_.CPU3 }) > + } > + } > #endif > > } > diff --git a/Silicon/Broadcom/Bcm27xx/Include/IndustryStandard/Bcm2711.h b/Silicon/Broadcom/Bcm27xx/Include/IndustryStandard/Bcm2711.h > index e9c81cafa1..86906b2438 100644 > --- a/Silicon/Broadcom/Bcm27xx/Include/IndustryStandard/Bcm2711.h > +++ b/Silicon/Broadcom/Bcm27xx/Include/IndustryStandard/Bcm2711.h > @@ -86,4 +86,6 @@ > #define GENET_BASE_ADDRESS FixedPcdGet64 (PcdBcmGenetRegistersAddress) > #define GENET_LENGTH 0x00010000 > > +#define THERM_SENSOR 0xfd5d2200 > + > #endif /* BCM2711_H__ */ >