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.21237.1598541699985463564 for ; Thu, 27 Aug 2020 08:21:40 -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 D2ABA101E; Thu, 27 Aug 2020 08:21:38 -0700 (PDT) Received: from [192.168.122.166] (unknown [10.119.48.12]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 7EBCB3F66B; Thu, 27 Aug 2020 08:21:38 -0700 (PDT) Subject: Re: [PATCH v2 1/4] Platform/RaspberryPi4: Add a basic thermal zone To: Ard Biesheuvel , 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> <6f61bcb3-db9f-4da0-6643-b6365fee677d@arm.com> <5ddba0df-11db-7bed-47d5-54614bf1ac30@arm.com> <38dc13c9-0578-8905-e113-82c6cec5c7a8@arm.com> From: "Jeremy Linton" Message-ID: Date: Thu, 27 Aug 2020 10:21:37 -0500 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.10.0 MIME-Version: 1.0 In-Reply-To: <38dc13c9-0578-8905-e113-82c6cec5c7a8@arm.com> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: quoted-printable On 8/27/20 3:06 AM, Ard Biesheuvel wrote: > On 8/20/20 4:41 PM, Jeremy Linton wrote: >> Hi, >> >> On 8/20/20 2:59 AM, Ard Biesheuvel wrote: >>> 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 lette= r. >> >> I appear to have only CCed the groups.io ML on the cover letter and=20 >> 4th patch (which is just whitespace). >> >> Can you find them them there? If not I will just resend the whole=20 >> series as v3. >> >=20 > Mind resending them? Grabbing and applying patches from the web UI is=20 > not really feasible with the groups.io interface. Sure, let me apply Andrei's suggestion. I was planning on fleshing out a=20 more generic AML update mechanism but no sense in holding this up for tha= t. >=20 >=20 >> >>> >>>> --- >>>> =C2=A0 Platform/RaspberryPi/AcpiTables/Dsdt.asl=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 | 31=20 >>>> ++++++++++++++++++++++ >>>> =C2=A0 .../Bcm27xx/Include/IndustryStandard/Bcm2711.h=C2=A0=C2=A0=C2= =A0=C2=A0 |=C2=A0 2 ++ >>>> =C2=A0 2 files changed, 33 insertions(+) >>>> >>>> diff --git a/Platform/RaspberryPi/AcpiTables/Dsdt.asl=20 >>>> 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,=20 >>>> "RPIFDN", "RPI", 2) >>>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 } >>>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 }) >>>> =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 } >>>> + >>>> +=C2=A0=C2=A0=C2=A0 // Define a simple thermal zone. The idea here i= s we compute=20 >>>> the SOC temp >>>> +=C2=A0=C2=A0=C2=A0 // via a register we can read, and give it to th= e OS. This=20 >>>> enables basic >>>> +=C2=A0=C2=A0=C2=A0 // reports from the "sensors" utility, and the O= S can then poll=20 >>>> and take >>>> +=C2=A0=C2=A0=C2=A0 // actions if that temp exceeds any of the given= thresholds. >>>> +=C2=A0=C2=A0=C2=A0 Device (EC0) >>>> +=C2=A0=C2=A0=C2=A0 { >>>> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Name (_HID, EISAID ("PNP0C06")) >>>> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Name (_CCA, 0x0) >>>> + >>>> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // all temps in are tenths of K (aka= 2732 is the min temps in=20 >>>> Linux (aka 0C)) >>>> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ThermalZone (TZ0) { >>>> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Method (_TMP, 0, Seriali= zed) { >>>> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 OperationReg= ion (TEMS, SystemMemory, THERM_SENSOR, 0x8) >>>> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Field (TEMS,= DWordAcc, NoLock, Preserve) { >>>> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 = TMPS, 32 >>>> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 } >>>> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 return (((41= 9949 - ((TMPS & 0x3ff) * 487)) / 100) + 2732); >>>> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 } >>>> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Method (_SCP, 3) { }=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0 // receive cooling=20 >>>> policy from OS >>>> + >>>> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Method (_CRT) { Return (= 3632) }=C2=A0=C2=A0=C2=A0 // (90C) Critical temp=20 >>>> point (immediate power-off) >>>> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Method (_HOT) { Return (= 3582) }=C2=A0=C2=A0=C2=A0 // (85C) HOT state where=20 >>>> OS should hibernate >>>> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Method (_PSV) { Return (= 3532) }=C2=A0=C2=A0=C2=A0 // (80C) Passive cooling=20 >>>> (CPU throttling) trip point >>>> + >>>> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 // SSDT inserts _AC0/_AL= 0 @60C here, if a FAN is configured >>>> + >>>> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Name (_TZP, 10)=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0 //The OSPM must poll this=20 >>>> device every 1 seconds >>>> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Name (_PSL, Package () {= \_SB_.CPU0, \_SB_.CPU1,=20 >>>> \_SB_.CPU2, \_SB_.CPU3 }) >>>> +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 } >>>> +=C2=A0=C2=A0=C2=A0 } >>>> =C2=A0 #endif >>>> =C2=A0=C2=A0=C2=A0 } >>>> diff --git=20 >>>> a/Silicon/Broadcom/Bcm27xx/Include/IndustryStandard/Bcm2711.h=20 >>>> 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 @@ >>>> =C2=A0 #define GENET_BASE_ADDRESS=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0 FixedPcdGet64=20 >>>> (PcdBcmGenetRegistersAddress) >>>> =C2=A0 #define GENET_LENGTH=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0x00010000 >>>> +#define THERM_SENSOR=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0xfd5d2200 >>>> + >>>> =C2=A0 #endif /* BCM2711_H__ */ >>>> >>> >> >=20