Skip to content

arm64: dts: apple: t6040-j616s: Run the fans on the CPU die like macOS - #579

Closed
jgoyvaerts wants to merge 3 commits into
aurora-silicon:integration/aurorafrom
jgoyvaerts:m4pro/j616s-fan-curve-macos
Closed

jgoyvaerts wants to merge 3 commits into
aurora-silicon:integration/aurorafrom
jgoyvaerts:m4pro/j616s-fan-curve-macos

Conversation

@jgoyvaerts

Copy link
Copy Markdown
Contributor

The J616s CPU die zone (from #560) runs both fans at full speed (5777 rpm) from a 95 C TCMz. Any all-core load gets there within seconds, so a kernel build or a game puts the fans at maximum, louder than this machine ever runs under macOS.

This gives the CPU die zone its own ladder, measured on macOS 26.6.2 on this machine (Mac16,7): 300 s of all-core load at full clocks (P 3852 MHz, E 2592 MHz, thermal_pressure Nominal throughout), SMC fan targets F0Tg/F1Tg sampled every 2 s:

TCMz macOS fans F0/F1 (rpm)
< 100 C off (95 C after 11 s, still off)
~100 C start at their minimum, 1350/1458
~104.5 C targets leave the minimum
110.9 C (42 s, peak) ~2200/2400
106.5 C steady 3450/3730 (60-65% of maximum), never higher

New CPU die ladder:

Trip Hysteresis Fan state rpm
100 C 5 C 1 1350 (SMC below this, as under macOS)
104 C 3 C 2 ~1980
106 C 3 C 4 ~3250 (where macOS settles)
108 C 2 C 5 ~3880
111 C 2 C 8 5777, just under the 113 C passive trip

The passive (113 C) and critical (118 C) trips are unchanged, and the fans still reach full speed before either.

The GPU zones keep their 75-95 C ladder: there is no macOS measurement under GPU load yet. Under CPU load they don't interfere: in the same macOS run the hottest GPU sensor (of Tg05/Tg0S/Tg0Y/Tg0k/Tg0z/Tg1V/Tg1l) peaked at 71.2 C, below their first step.

Testing: DT builds without warnings; the compiled cpu-die-thermal has the trips and fan states above, gpu0-6 unchanged. The J616s boot with this ladder and a sustained all-core load will be reported here before merge.

🤖 Generated with Claude Code

The CPU die zone runs both fans at full speed (5777 rpm) from a 95 C
TCMz. Any all-core load gets there within seconds, so a kernel build
or a game puts the fans at maximum, louder than this machine ever runs
under macOS.

macOS 26.6.2 on this machine (Mac16,7), 300 s of all-core load at full
clocks (P 3852 MHz, E 2592 MHz, thermal pressure Nominal throughout,
SMC fan targets F0Tg/F1Tg sampled every 2 s):

  TCMz            fans F0/F1 (rpm)
  < 100 C         off (95 C after 11 s, still off)
  ~100 C          start at their minimum, 1350/1458
  ~104.5 C        targets leave the minimum
  110.9 C (42 s)  ~2200/2400, the peak
  106.5 C steady  3450/3730 (60-65% of maximum), never higher

Give the CPU die zone its own ladder on those numbers: fans at their
minimum from 100 C (state 1), 104 C state 2, 106 C state 4 (~3250 rpm,
where macOS settles), 108 C state 5, and full speed only at 111 C, just
under the 113 C passive trip. Below 100 C the fans stay with the SMC, as
under macOS. The GPU zones keep their ladder: there is no macOS
measurement under GPU load yet.

Signed-off-by: Jonathan Goyvaerts <jonathan.goyvaerts@gmail.com>
Assisted-by: LLM
…CMz noise

Under all-core load on a J616s with the macOS ladder, TCMz (the hottest
of the die sensors) swings by up to 8 C between 2 s samples (99.5 ->
107.8 C), so with 2-5 C of hysteresis the fans hunted between 1350,
1980 and 3250 rpm 17 times in 110 s: audible pumping. macOS's SMC ramps
its targets slowly instead.

Widen the hysteresis to 10/8/7/5/3 C. Replaying the same 150 s trace
through the trips gives no state change once the die first reaches
106 C: the fans hold ~3250 rpm, near macOS's steady 3450 rpm, and stay
on until the die is clearly cooler, as under macOS.

Signed-off-by: Jonathan Goyvaerts <jonathan.goyvaerts@gmail.com>
Assisted-by: LLM
@jgoyvaerts

Copy link
Copy Markdown
Contributor Author

Tested on a J616s (7.3.0 with this ladder, booted via aura): 150 s all-core load at full clocks (P 4512 / E 2592 MHz max), TCMz and both fan speeds sampled every 2 s.

  • Fans stayed off up to ~100 C, came on at their minimum at 100.4 C, peaked at 3566 rpm (vs 5777 before), die peak 107.8 C, mean over the last 30 s 103.6 C, no throttling, no recoveries.
  • But TCMz swings by up to 8 C between samples under load (e.g. 99.5 -> 107.8 C), and with the original 5/3/3/2/2 C hysteresis the fans hunted between 1350, 1980 and 3250 rpm 17 times in 110 s.

Pushed a second commit that widens the hysteresis to 10/8/7/5/3 C. Replaying the same trace through the trips gives no state change once the die first reaches 106 C (fans hold ~3250 rpm, close to macOS's steady 3450). I'll confirm it with the same load on hardware and report back here.

🤖 Generated with Claude Code

Under all-core load at full clocks (a Mesa build, P 4512 MHz), TCMz
touches 111 C every half minute or so. The last step of the CPU die
ladder then sends both fans from 3880 rpm straight to their 5777 rpm
maximum, and back once the die is under 108 C: a loud surge that macOS
never makes. macOS held this die at 106.5 C with at most 3730 rpm, even
at its 110.9 C peak.

Ask for state 6 (4510 rpm) at 111 C instead, and bind full speed to the
113 C passive trip, where the CPU clusters also start shedding clocks.
The GPU zones keep their ladder.

Signed-off-by: Jonathan Goyvaerts <jonathan.goyvaerts@gmail.com>
Assisted-by: LLM
@jgoyvaerts

Copy link
Copy Markdown
Contributor Author

Third commit, 5c271f4 ("Keep full fan speed for the passive trip").

Sustained all-core load on the J616s with the first two commits (a Mesa build, P cores at 4512 MHz): the fans held state 5 (~3880 rpm) with TCMz at 104-108 C. But each time TCMz touched 111 C, both fans jumped to state 8 (5777 rpm) for a few seconds, then dropped back once the die was under 108 C. That happened about every 30 s. Under the same kind of load, macOS never went above 3730 rpm, even at its 110.9 C peak.

So the 111 C trip now asks for state 6 (~4510 rpm). Full speed is bound to the 113 C passive trip, where the CPU clusters also start shedding clocks. The GPU zones are unchanged. The only difference in the compiled DTB is those two cooling maps.

A hardware report on this commit under sustained load follows.

@jgoyvaerts

Copy link
Copy Markdown
Contributor Author

Superseded by #670, which leaves the fan policy to the SMC firmware.

@jgoyvaerts jgoyvaerts closed this Oct 31, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant