/
ACPI Thermal Management
ACPI Thermal Management
This page captures an investigation into ACPI thermal management support with active and passive cooling.
Status
Implemented thermal zones and properties required for active (FAN) and passive (CPUFreq) cooling in RD-N2 platform.
Investigated Linux kernel support and proposed a patch to fix issues with passive cooling
Example Thermal Zone implementation in RD-N2
//FAN0
Name(FNS0,0)
PowerResource(FN00, 0, 0)
{
Method(_STA, 0, Serialized)
{
Return(FNS0)
}
Method(_ON, 0, Serialized)
{
printf ("Debug: Fan 0 on")
Store(1,FNS0)
}
Method(_OFF, 0, Serialized)
{
printf ("Debug: Fan 0 off")
Store(0,FNS0)
}
}
Device(FAN0)
{
Name(_HID, EISAID("PNP0C0B"))
Name(_UID,0)
Name(_PR0, Package(1){FN00})
}
//FAN1
Name(FNS1,0)
PowerResource(FN01, 0, 0)
{
Method(_STA, 0, Serialized)
{
Return(FNS1)
}
Method(_ON, 0, Serialized)
{
printf ("Debug: Fan 1 on")
Store(1,FNS1)
}
Method(_OFF, 0, Serialized)
{
printf ("Debug: Fan 1 off")
Store(0,FNS1)
}
}
Device(FAN1)
{
Name(_HID, EISAID("PNP0C0B"))
Name(_UID,1)
Name(_PR0, Package(1){FN01})
}
//ThermalZone0
Name(TMP1,3000)
ThermalZone(TZ00){
Method(_CRT) { Return(3880) }//114.85
Name(_TZP, 300)
//
Method(_AC0) { Return (3350)}//51.85
Name(_AL0, Package(){FAN0})
//
Method(_PSV) { Return(3500) }//76.85
Method(_TC1) { Return (4) }
Method(_TC2) { Return (3) }
Method(_TSP) { Return (10) }
Method(_PSL, 0, Serialized){ Return( Package(){\_SB.CL00.CP00, \_SB.CL01.CP01, \_SB.CL02.CP02, \_SB.CL03.CP03, \_SB.CL04.CP04, \_SB.CL05.CP05, \_SB.CL06.CP06} )}
Method(_SCP, 1, Serialized)
{
If(LEqual(Arg0,0)){
printf ("Debug: Active cooling")
}ElseIf(LEqual(Arg0,1)){
printf ("Debug: Passive cooling")
}
}
Method(_TMP, 0, Serialized)
{
If(TMP1 < 3600){
Add(TMP1,20,TMP1)
}Else{
TMP1 = 3000
}
Return(TMP1)
}
}
//ThermalZone1
Name(TMP2,3000)
ThermalZone(TZ01){
Method(_CRT) { Return(3880) }//114.85
Name(_TZP, 300)
//
Method(_AC0) { Return (3350)}//51.85
Name(_AL0, Package(){FAN1})
//
Method(_PSV) { Return(3500) }//76.85
Method(_TC1) { Return (4) }
Method(_TC2) { Return (3) }
Method(_TSP) { Return (10) }
Method(_PSL, 0, Serialized){ Return( Package(){\_SB.CL07.CP07, \_SB.CL08.CP08} )}
Method(_SCP, 1, Serialized)
{
If(LEqual(Arg0,0)){
printf ("Debug: Active cooling")
}ElseIf(LEqual(Arg0,1)){
printf ("Debug: Passive cooling")
}
}
Method(_TMP, 0, Serialized)
{
If(TMP2 < 3600){
Add(TMP2,20,TMP2)
}Else{
TMP2 = 3000
}
Return(TMP2)
}
}
Required properties for passive cooling
ThermalZones need to be defined
_CRT, _HOT, _PSV, _TZP, _PSL needs to be defined
_TC1, _TC2, and _TSP needs to be defined
_PTC, _TSS and _TPC are not required
ACPI Thermal Management Demo with active and passive cooling
ACPI Thermal Management Implementation Demo
ACPI Processor Clock Throttling
, multiple selections available,
Related content
ACPI Thermal Management Implementation Demo
ACPI Thermal Management Implementation Demo
More like this
Timer enablement with ACPI
Timer enablement with ACPI
Read with this
ARM client PC (CLIENTPC)
ARM client PC (CLIENTPC)
More like this
ACPI Clock Input Resources
ACPI Clock Input Resources
Read with this
ACPI Processor Clock Throttling
ACPI Processor Clock Throttling
More like this
ACPI Pinctrl
ACPI Pinctrl
Read with this