Skip to content

Limit GPU frequency on Radxa A7A down to 600MHz by default - #28

Draft
ziyao233 wants to merge 2 commits into
tina-devfrom
a733/gpu-limit-600mhz
Draft

ziyao233 wants to merge 2 commits into
tina-devfrom
a733/gpu-limit-600mhz

Conversation

@ziyao233

Copy link
Copy Markdown

The mainline PowerVR driver doesn't currently support DVFS, and at least on Radxa A7A, the GPU is clocked to 800MHz, which is too high at the default 800mV voltage supplied by AXP318W through DCDC4.

Limit GPU frequency to avoid stability issues.

Propagate GPU core rate changes up to the GPU PLL, so the PLL could be
correctly re-clocked on DVFS to achieve a precise rate.

Signed-off-by: Yao Zi <[email protected]>
Mainline PowerVR drivers don't currently support DVFS, and the default
GPU frequency, 800MHz, is too high for the default VDD-GPU voltage,
800mV. Assign 600MHz to the GPU core clock to avoid stability issues.

Signed-off-by: Yao Zi <[email protected]>
@shiptux

shiptux commented Oct 29, 2026

Copy link
Copy Markdown

Tested on Radxa A7A with both commits (on top of tina-dev + #24 HDMI + a local Radxa display-enable patch, 6.18.14-g59a5ea0fc2bb). CPU pinned at 1014 MHz throughout (the build#25 signature-1 workaround), so only the GPU-side hang is exercised.

Works as intended

  • clk_summary: pll-gpu 600 MHz, gpu0 600 MHz (on this board the default reads 840 MHz, not 800). powervr firmware loads, kiosk renders.
  • Yocto HMI card: opentina-hmi-check ×12 clean on zink/PowerVR (glmark2 76–97 vs 117–152 at 840 MHz), then 40 rounds of openssl speed -multi 8 concurrent with zink glmark2 + gst scenarios, 63 min, no RCU stall / oops / job timeout.

Does not fix the build#25 "signature 2" hang

  • The same Yocto loads also pass at 840 MHz, so Yocto does not discriminate.
  • Debian desktop (weston + Chromium kiosk running), glxgears via XWayland: two images with identical rootfs, only the kernel differs.
    • 840 MHz (gab4f6bc1359a): hangs within seconds of starting glxgears, serial goes silent.
    • 600 MHz (this PR): same, [ 172.755] ------------[ cut here ]------------ (trace never makes it out), [ 193.659] rcu: INFO: rcu_preempt detected stalls on CPUs/tasks:, then silent. Reproduced on the first round both times; power cycle needed.
  • With the kiosk (Chromium) stopped, glxgears alone ran 60 s at 600 MHz fine (single run). The trigger looks like two GL clients on the PowerVR at once (Chromium + glxgears), consistent with the 10-23 "second Chromium" hang on Ubuntu, rather than GPU voltage/frequency.

Note on applying the series: with only the dts commit and without CLK_SET_RATE_PARENT, gpu0 lands at 420 MHz (840/2) and powervr logs Job timeout every 0.5 s from the first job with pvr_queue_run_job warnings; the two commits need to go in together.

Happy to run other variants (different rate, pll-gpu kept at 840 with divider, extra logging) if useful.

@shiptux

shiptux commented Oct 29, 2026

Copy link
Copy Markdown

Follow-up: the same single-client check on the 840 MHz kernel (kiosk stopped, glxgears via XWayland alone, CPU pinned 1014 MHz) also runs the full 60 s at 30 FPS with the board alive. So at both 840 and 600 MHz one GL client is fine and Chromium + glxgears together hang the board; the trigger is two clients on the PowerVR, not the GPU clock.

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.

2 participants