Skip to content

fix: clamp overheat throttle to the regulator's minimum voltage (no more false PSU fault)#1790

Open
warioishere wants to merge 1 commit into
bitaxeorg:masterfrom
warioishere:fix/overheat-throttle-voltage-floor
Open

fix: clamp overheat throttle to the regulator's minimum voltage (no more false PSU fault)#1790
warioishere wants to merge 1 commit into
bitaxeorg:masterfrom
warioishere:fix/overheat-throttle-voltage-floor

Conversation

@warioishere

@warioishere warioishere commented Jun 27, 2026

Copy link
Copy Markdown
Contributor

Ran into this the annoying way and figured it's worth fixing for everyone.

I always undervolt my Gammas and run it at 1080mV. Even undervoltet on this hot day today around 40°c here it overheated a few times, and the overheat protection did its job, dropped voltage and frequency by 100 each and saved them. So my 1080mV quietly turned into 980mV in NVS. Actually I didn't check this explicitly because I ran arround changing PSUs and already thought that my little bee died because of high temp because the error message about the PSU didn't go away.

but the hing is, the TPS546's VOUT_MIN is 1.0V. Below that, TPS546_set_vout() rejects the value as out of range, the regulator never comes up clean, and the firmware flags a power fault → the UI shouts "PSU fault, check your PSU". And since 980mV got written to NVS, it sticks across reboots. I swapped the PSU, power-cycled a bunch of times — nothing. The only thing that fixed it was going into settings and bumping the voltage back above 1000mV, at which point the fault vanished instantly.

So it's not the PSU at all. It's the throttle undervolting below what the regulator can actually deliver, and then persisting it.

I've already had several emails about this exact "PSU fault", people convinced their supply died, a couple of them bought a new one, and of course it still didn't help. Hence the fix.

What it does: clamps the throttle's reduced voltage to the regulator's minimum so it can never command something set_vout() will reject. Device-aware (VOUT_MIN / voltage_domains → 1000mV on Gamma, ~834mV on Hex), no magic number. Frequency reduction still happens exactly as before, so cooling behaviour is unchanged — it just won't push the voltage into the invalid range anymore.

On VOUT_MIN=1.0V boards the overheat throttle could drop ASIC voltage to 980mV and persist it to NVS. TPS546_set_vout() rejects anything below VOUT_MIN as out of range, leaving the VR in a stuck power fault that survives reboots and PSU swaps. Floor the reduced voltage at the regulator minimum (device-aware, VOUT_MIN/voltage_domains).
@github-actions

github-actions Bot commented Jun 27, 2026

Copy link
Copy Markdown

Test Results

  2 files  ±0    2 suites  ±0   0s ⏱️ ±0s
103 tests ±0  103 ✅ ±0  0 💤 ±0  0 ❌ ±0 
105 runs  ±0  105 ✅ ±0  0 💤 ±0  0 ❌ ±0 

Results for commit a48c872. ± Comparison against base commit 7d74afb.

♻️ This comment has been updated with latest results.

@warioishere warioishere force-pushed the fix/overheat-throttle-voltage-floor branch from 49e18b3 to a48c872 Compare June 27, 2026 19:31
@0xf0xx0 0xf0xx0 added the bug Something isn't working label Jun 27, 2026

@0xf0xx0 0xf0xx0 left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

code ack

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bug Something isn't working

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants