Jetson AGX Thor CPU permanently throttled to 242 MHz after OC3 event at boot (R38.4.0, Forecr DSBOARD-THRMAX)
Environment
- Module: Jetson AGX Thor
- Carrier board: Forecr DSBOARD-THRMAX
- BSP: L4T R38.4.0 (nvidia-l4t-core 38.4.0-20251230160601)
- Power mode: MAXN (mode 0), governor=performance, jetson_clocks applied
Problem
All 14 CPU cores are permanently throttled. The BPMP silently ignores frequency requests from the kernel without returning an error, so scaling_cur_freq reports success while the hardware remains stuck:
Before jetson_clocks (schedutil governor):
$ cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_cur_freq
972000 (most cores)
$ sudo cat /sys/devices/system/cpu/cpu*/cpufreq/cpuinfo_cur_freq
242000 (all cores)
After sudo jetson_clocks (performance governor, min=max=2601 MHz):
$ cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_cur_freq
2601000 (all cores — kernel thinks it succeeded)
$ sudo cat /sys/devices/system/cpu/cpu*/cpufreq/cpuinfo_cur_freq
649000 (all cores — actual hardware, 1/4 of requested)
jetson_clocks partially helps (242 → 649 MHz) but the BPMP still caps at ~25% of the requested frequency.
dmesg shows the cpufreq driver detecting the mismatch on readback, every second, for all cores:
cpufreq: cpu0,cur:649000,set:2601000,delta:1952000,set ndiv:289
cpufreq: cpu6,cur:242000,set:972000,delta:730000,set ndiv:108
cpufreq: cpu4,cur:337000,set:1350000,delta:1013000,set ndiv:150
(repeats every second for all cores, every frequency request fails)
Total system power is ~25W in MAXN mode. The module should be drawing 60-100W+ under load.
Cause
Immediately after every reboot — before any userspace load — OC3 has already fired:
$ sudo su -c 'grep "" /sys/class/hwmon/hwmon*/oc*'
oc1_event_cnt:0
oc1_throt_en:0
oc2_event_cnt:0
oc2_throt_en:1 # enabled despite zero events
oc3_event_cnt:1 # single event at boot
oc3_throt_en:1 # read-only, cannot clear from userspace
Thermals are 36°C — no thermal issue. The OC3 event appears to be an inrush current spike during power-on.
The BPMP confirms maximum throttling is latched:
$ sudo cat /sys/kernel/debug/bpmp/debug/ithrot/cal
sm_pwr_throttle = 0xffffffff
All throttle bits are set to maximum and never release. oc3_throt_en is read-only (-r--r--r--), so there is no userspace workaround.
Questions
- Is the permanent latch to minimum frequency on a single OC3 event the intended BPMP behavior, or is this a firmware bug? Can the OC thresholds be adjusted via the BPMP device tree?
- Why is
oc2_throt_enenabled by default with zero events — could this contribute to the throttle behavior?