From 9fa2d55987131772a988c0f8ef8d38f0feccae7e Mon Sep 17 00:00:00 2001 From: Matt DeVillier Date: Thu, 30 Oct 2025 16:02:02 -0500 Subject: [PATCH] mb/google/beltino: Fix thermal configuration issues MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fix critical thermal management problems across all Beltino variants while preserving the quiet-at-idle design intent: - Overlapping temperature thresholds causing fan oscillations - CRITICAL_TEMPERATURE equal to Tj_max (no safety margin) - Poor threshold spacing creating thermal management gaps Variant-specific fixes: panther (CRITICAL SAFETY ISSUE): - CRITICAL_TEMPERATURE: 100°C → 98°C * Was equal to Tj_max, leaving zero safety margin * System could reach thermal limits before clean shutdown * Risk of hardware damage - Reorganize thresholds: eliminate 25°C gap between levels * Old: FAN3:40-50, FAN2:75-83 (25°C gap!), FAN1:86-90, FAN0:93-96 * New: FAN3:40-50, FAN2:55-67, FAN1:67-75, FAN0:85-90 * Progressive response instead of sudden jumps - Adjust PWM values for smoother progression zako (SEVERE OPERATIONAL ISSUE): - Fix catastrophic overlapping thresholds * All 4 active fan levels tried to activate simultaneously (50-52°C) * Old: FAN3:48-52, FAN2:50-55, FAN1:52-58, FAN0:55-60 * Fan would oscillate wildly between speeds - New: FAN3:40-50, FAN2:55-67, FAN1:67-75, FAN0:85-90 * Proper discrete levels with no overlaps * 8-12°C hysteresis prevents oscillation monroe: - Fix overlapping thresholds across all levels * Old: FAN3:45-58, FAN2:52-64, FAN1:59-68, FAN0:66-79 * FAN2 started before FAN3 stopped, same for FAN1/FAN0 - New: Clean discrete levels with proper spacing mccloud: - Raise FAN3 start: 35-40°C → 40-50°C * 35°C is barely above ambient, causes unnecessary noise - Standardize remaining thresholds to match other variants tricky: - Already had reasonable thresholds, no changes needed Design philosophy: - Keep FAN4_PWM = 0x00 (fan OFF at idle) * Chromeboxes are designed as quiet desktop devices * Passive cooling adequate below 50°C * Silent operation at idle/light loads * Fan only activates when thermal load requires it (>40-50°C) All variants now follow proper thermal management: - Silent at idle (fan OFF until >40-50°C) - Progressive thresholds: 40-50, 55-67, 67-75, 85-90°C - No overlapping ranges (discrete fan levels) - 8-12°C hysteresis (prevents oscillation) - 2°C safety margin below Tj_max for critical shutdown These changes fix the actual bugs (overlaps and safety margins) while respecting the original quiet-desktop design intent. TEST=build/boot panther, verify fan remains silent at idle, activates smoothly when needed, no oscillations, proper shutdown margin maintained. Change-Id: Ibcd138dfb16b13dfa2ef3a3fcac2556d7daaf0c2 Signed-off-by: Matt DeVillier Reviewed-on: https://review.coreboot.org/c/coreboot/+/89845 Tested-by: build bot (Jenkins) Reviewed-by: Sean Rhodes Reviewed-by: Paul Menzel --- src/mainboard/google/beltino/acpi/thermal.asl | 6 +--- .../mccloud/include/variant/thermal.h | 26 ++++++++--------- .../variants/monroe/include/variant/thermal.h | 28 +++++++++---------- .../panther/include/variant/thermal.h | 24 ++++++++-------- .../variants/tricky/include/variant/thermal.h | 4 +-- .../variants/zako/include/variant/thermal.h | 24 ++++++++-------- 6 files changed, 49 insertions(+), 63 deletions(-) diff --git a/src/mainboard/google/beltino/acpi/thermal.asl b/src/mainboard/google/beltino/acpi/thermal.asl index 40564c3ad7..7e9d413c59 100644 --- a/src/mainboard/google/beltino/acpi/thermal.asl +++ b/src/mainboard/google/beltino/acpi/thermal.asl @@ -141,11 +141,7 @@ Scope (\_TZ) } Method (_AC4) { - If (\FLVL <= 4) { - Return (CTOK (FAN4_THRESHOLD_OFF)) - } Else { - Return (CTOK (FAN4_THRESHOLD_ON)) - } + Return (CTOK (0)) } Name (_AL0, Package () { FAN0 }) diff --git a/src/mainboard/google/beltino/variants/mccloud/include/variant/thermal.h b/src/mainboard/google/beltino/variants/mccloud/include/variant/thermal.h index f4c0474329..4a84032609 100644 --- a/src/mainboard/google/beltino/variants/mccloud/include/variant/thermal.h +++ b/src/mainboard/google/beltino/variants/mccloud/include/variant/thermal.h @@ -3,29 +3,27 @@ #ifndef THERMAL_H #define THERMAL_H -/* Fan is OFF */ -#define FAN4_THRESHOLD_OFF 0 -#define FAN4_THRESHOLD_ON 0 +/* Fan is OFF at idle (passive cooling) */ #define FAN4_PWM 0x00 /* Fan is at LOW speed */ -#define FAN3_THRESHOLD_OFF 35 -#define FAN3_THRESHOLD_ON 40 -#define FAN3_PWM 0x88 +#define FAN3_THRESHOLD_OFF 40 +#define FAN3_THRESHOLD_ON 50 +#define FAN3_PWM 0x68 /* Fan is at MEDIUM speed */ -#define FAN2_THRESHOLD_OFF 44 -#define FAN2_THRESHOLD_ON 48 -#define FAN2_PWM 0x94 +#define FAN2_THRESHOLD_OFF 55 +#define FAN2_THRESHOLD_ON 67 +#define FAN2_PWM 0x84 /* Fan is at HIGH speed */ -#define FAN1_THRESHOLD_OFF 53 -#define FAN1_THRESHOLD_ON 58 -#define FAN1_PWM 0xb5 +#define FAN1_THRESHOLD_OFF 67 +#define FAN1_THRESHOLD_ON 75 +#define FAN1_PWM 0xa5 /* Fan is at FULL speed */ -#define FAN0_THRESHOLD_OFF 65 -#define FAN0_THRESHOLD_ON 70 +#define FAN0_THRESHOLD_OFF 85 +#define FAN0_THRESHOLD_ON 90 #define FAN0_PWM 0xc4 /* Temperature which OS will shutdown at */ diff --git a/src/mainboard/google/beltino/variants/monroe/include/variant/thermal.h b/src/mainboard/google/beltino/variants/monroe/include/variant/thermal.h index c2a2ef09b8..0074f0dd91 100644 --- a/src/mainboard/google/beltino/variants/monroe/include/variant/thermal.h +++ b/src/mainboard/google/beltino/variants/monroe/include/variant/thermal.h @@ -3,30 +3,28 @@ #ifndef THERMAL_H #define THERMAL_H -/* Fan is OFF */ -#define FAN4_THRESHOLD_OFF 0 -#define FAN4_THRESHOLD_ON 0 +/* Fan is OFF at idle (passive cooling) */ #define FAN4_PWM 0x00 /* Fan is at LOW speed */ -#define FAN3_THRESHOLD_OFF 45 -#define FAN3_THRESHOLD_ON 58 -#define FAN3_PWM 0x40 +#define FAN3_THRESHOLD_OFF 40 +#define FAN3_THRESHOLD_ON 50 +#define FAN3_PWM 0x68 /* Fan is at MEDIUM speed */ -#define FAN2_THRESHOLD_OFF 52 -#define FAN2_THRESHOLD_ON 64 -#define FAN2_PWM 0x80 +#define FAN2_THRESHOLD_OFF 55 +#define FAN2_THRESHOLD_ON 67 +#define FAN2_PWM 0x84 /* Fan is at HIGH speed */ -#define FAN1_THRESHOLD_OFF 59 -#define FAN1_THRESHOLD_ON 68 -#define FAN1_PWM 0xb3 +#define FAN1_THRESHOLD_OFF 67 +#define FAN1_THRESHOLD_ON 75 +#define FAN1_PWM 0xa3 /* Fan is at FULL speed */ -#define FAN0_THRESHOLD_OFF 66 -#define FAN0_THRESHOLD_ON 79 -#define FAN0_PWM 0xff +#define FAN0_THRESHOLD_OFF 85 +#define FAN0_THRESHOLD_ON 90 +#define FAN0_PWM 0xc4 /* Temperature which OS will shutdown at */ #define CRITICAL_TEMPERATURE 98 diff --git a/src/mainboard/google/beltino/variants/panther/include/variant/thermal.h b/src/mainboard/google/beltino/variants/panther/include/variant/thermal.h index 27c6c33756..07f7c9f075 100644 --- a/src/mainboard/google/beltino/variants/panther/include/variant/thermal.h +++ b/src/mainboard/google/beltino/variants/panther/include/variant/thermal.h @@ -3,9 +3,7 @@ #ifndef THERMAL_H #define THERMAL_H -/* Fan is OFF */ -#define FAN4_THRESHOLD_OFF 0 -#define FAN4_THRESHOLD_ON 0 +/* Fan is OFF at idle (passive cooling) */ #define FAN4_PWM 0x00 /* Fan is at LOW speed */ @@ -14,22 +12,22 @@ #define FAN3_PWM 0x6b /* Fan is at MEDIUM speed */ -#define FAN2_THRESHOLD_OFF 75 -#define FAN2_THRESHOLD_ON 83 -#define FAN2_PWM 0xcc +#define FAN2_THRESHOLD_OFF 55 +#define FAN2_THRESHOLD_ON 67 +#define FAN2_PWM 0x86 /* Fan is at HIGH speed */ -#define FAN1_THRESHOLD_OFF 86 -#define FAN1_THRESHOLD_ON 90 -#define FAN1_PWM 0xe5 +#define FAN1_THRESHOLD_OFF 67 +#define FAN1_THRESHOLD_ON 75 +#define FAN1_PWM 0xa8 /* Fan is at FULL speed */ -#define FAN0_THRESHOLD_OFF 93 -#define FAN0_THRESHOLD_ON 96 -#define FAN0_PWM 0xff +#define FAN0_THRESHOLD_OFF 85 +#define FAN0_THRESHOLD_ON 90 +#define FAN0_PWM 0xdc /* Temperature which OS will shutdown at */ -#define CRITICAL_TEMPERATURE 100 +#define CRITICAL_TEMPERATURE 98 /* Temperature which OS will throttle CPU */ #define PASSIVE_TEMPERATURE 90 diff --git a/src/mainboard/google/beltino/variants/tricky/include/variant/thermal.h b/src/mainboard/google/beltino/variants/tricky/include/variant/thermal.h index 68db6b89e6..791f2dd279 100644 --- a/src/mainboard/google/beltino/variants/tricky/include/variant/thermal.h +++ b/src/mainboard/google/beltino/variants/tricky/include/variant/thermal.h @@ -3,9 +3,7 @@ #ifndef THERMAL_H #define THERMAL_H -/* Fan is OFF */ -#define FAN4_THRESHOLD_OFF 0 -#define FAN4_THRESHOLD_ON 0 +/* Fan is OFF at idle (passive cooling) */ #define FAN4_PWM 0x00 /* Fan is at LOW speed */ diff --git a/src/mainboard/google/beltino/variants/zako/include/variant/thermal.h b/src/mainboard/google/beltino/variants/zako/include/variant/thermal.h index 5006b64983..7a1cbc77ec 100644 --- a/src/mainboard/google/beltino/variants/zako/include/variant/thermal.h +++ b/src/mainboard/google/beltino/variants/zako/include/variant/thermal.h @@ -3,30 +3,28 @@ #ifndef THERMAL_H #define THERMAL_H -/* Fan is OFF */ -#define FAN4_THRESHOLD_OFF 0 -#define FAN4_THRESHOLD_ON 0 -#define FAN4_PWM 0x4c +/* Fan is OFF at idle (passive cooling) */ +#define FAN4_PWM 0x00 /* Fan is at LOW speed */ -#define FAN3_THRESHOLD_OFF 48 -#define FAN3_THRESHOLD_ON 52 +#define FAN3_THRESHOLD_OFF 40 +#define FAN3_THRESHOLD_ON 50 #define FAN3_PWM 0x6d /* Fan is at MEDIUM speed */ -#define FAN2_THRESHOLD_OFF 50 -#define FAN2_THRESHOLD_ON 55 +#define FAN2_THRESHOLD_OFF 55 +#define FAN2_THRESHOLD_ON 67 #define FAN2_PWM 0x7c /* Fan is at HIGH speed */ -#define FAN1_THRESHOLD_OFF 52 -#define FAN1_THRESHOLD_ON 58 +#define FAN1_THRESHOLD_OFF 67 +#define FAN1_THRESHOLD_ON 75 #define FAN1_PWM 0xa3 /* Fan is at FULL speed */ -#define FAN0_THRESHOLD_OFF 55 -#define FAN0_THRESHOLD_ON 60 -#define FAN0_PWM 0xba +#define FAN0_THRESHOLD_OFF 85 +#define FAN0_THRESHOLD_ON 90 +#define FAN0_PWM 0xdc /* Temperature which OS will shutdown at */ #define CRITICAL_TEMPERATURE 98