ACPI Thermal Management

This page captures an investigation into ACPI thermal management support with active and passive cooling.

Status

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

https://linaro.atlassian.net/wiki/spaces/CLIENTPC/pages/28821979154

ACPI Processor Clock Throttling

https://linaro.atlassian.net/wiki/spaces/CLIENTPC/pages/28855173127