mb/google/beltino: Fix thermal configuration issues

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 <matt.devillier@gmail.com>
Reviewed-on: https://review.coreboot.org/c/coreboot/+/89845
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Sean Rhodes <sean@starlabs.systems>
Reviewed-by: Paul Menzel <paulepanter@mailbox.org>
This commit is contained in:
Matt DeVillier 2025-10-30 16:02:02 -05:00
commit 9fa2d55987
6 changed files with 49 additions and 63 deletions

View file

@ -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 })

View file

@ -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 */

View file

@ -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

View file

@ -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

View file

@ -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 */

View file

@ -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