nb/amd/agesa/family14: Improve HTC threshold handling

According to BKDGs HTC temperature limit field indicates the threshold
where HTC becomes active. HTC active state means that processor is
limiting its power consumption and maximum P-State. Using this threshold
as _CRT is incorrect, since HTC active is designed to prevent
overheating, not causing immediate shutdown.

Change the behavior of temperature limit to act as a passive cooling
threshold. Make the passive cooling threshold a reference value for
critical and hot temperature with 5 degrees step.

TEST=boot FreeBSD on PC Engines apu2 and check the thermal zone
temperature using sysctl

Signed-off-by: Michał Żygowski <michal.zygowski@3mdeb.com>
Change-Id: Ife64c3aab76f8e125493ecc8183a6e87fb012e3b
Reviewed-on: https://review.coreboot.org/c/coreboot/+/39697
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Nico Huber <nico.h@gmx.de>
Reviewed-by: Angel Pons <th3fanbus@gmail.com>
This commit is contained in:
Michał Żygowski 2020-03-20 12:07:45 +01:00
parent 143309fad4
commit ece6b2fc8a
1 changed files with 11 additions and 3 deletions

View File

@ -35,7 +35,7 @@
*/ */
#ifndef K10TEMP_HOT_OFFSET #ifndef K10TEMP_HOT_OFFSET
# define K10TEMP_HOT_OFFSET 100 # define K10TEMP_HOT_OFFSET 50
#endif #endif
#define K10TEMP_KELVIN_OFFSET 2732 #define K10TEMP_KELVIN_OFFSET 2732
@ -71,7 +71,11 @@ ThermalZone (TZ00) {
Return (Add (Local0, K10TEMP_KELVIN_OFFSET)) Return (Add (Local0, K10TEMP_KELVIN_OFFSET))
} }
Method (_CRT) { /* Critical temp in tenths degree Kelvin. */ /*
* TLMT indicates threshold where HTC become active. That is the processor will limit
* P-State and power consumption in order to cool down.
*/
Method (_PSV) { /* Passive temp in tenths degree Kelvin. */
Multiply (TLMT, 10, Local0) Multiply (TLMT, 10, Local0)
ShiftRight (Local0, 1, Local0) ShiftRight (Local0, 1, Local0)
Add (Local0, K10TEMP_TLIMIT_OFFSET, Local0) Add (Local0, K10TEMP_TLIMIT_OFFSET, Local0)
@ -79,6 +83,10 @@ ThermalZone (TZ00) {
} }
Method (_HOT) { /* Hot temp in tenths degree Kelvin. */ Method (_HOT) { /* Hot temp in tenths degree Kelvin. */
Return (Subtract (_CRT, K10TEMP_HOT_OFFSET)) Return (Add (_PSV, K10TEMP_HOT_OFFSET))
}
Method (_CRT) { /* Critical temp in tenths degree Kelvin. */
Return (Add (_HOT, K10TEMP_HOT_OFFSET))
} }
} }