GPU first light: confirm the RGX core ID, then boot the firmware #59

Open
opened 2026-08-29 15:40:47 +00:00 by tiagoagueda · 0 comments
Owner

Part of #55. First step that touches the board - do not start it until the kernel side
is building and the regulator identity is settled.

Step 1 - the highest-information test in the whole plan

Power and clock the block, then read the RGX core ID register and confirm it reports
1.75.2.30.

That single read proves register access, all four clocks, the GPU_CTRL enable bit and the power
rail at once, before any firmware is involved. If it returns garbage or zero, the problem is
in the device tree, not the driver.

Step 2 - firmware upload

The firmware is embedded in /vendor/lib/libsrv_init.so's .data, not shipped as a file, and
the kernel never loads it - there is no request_firmware anywhere in rogue_km. The chain is:

pvrsrvctl -> libsrv_init.so -> RGXInitLoadFWImage
          -> PVRSRVRGXInitFirmware bridge -> km uploads to GPU

So: install the matching vendor userspace, run pvrsrvctl --start, and watch for the firmware to
boot.

Done when

Firmware boots and the FW heartbeat / KCCB responds.

If the core ID reads correctly but the firmware never starts, suspect memory attributes (uncached
vs write-combine) or the MMU setup rather than the upload path.

WARNING: powering an unfamiliar rail on this board has form - see #53, and the PL02 result in
35-a15-rail-enable.md where driving a rail high took the board down instantly.

Part of #55. **First step that touches the board** - do not start it until the kernel side is building and the regulator identity is settled. ## Step 1 - the highest-information test in the whole plan Power and clock the block, then read the RGX core ID register and confirm it reports **`1.75.2.30`**. That single read proves register access, all four clocks, the `GPU_CTRL` enable bit and the power rail at once, **before any firmware is involved**. If it returns garbage or zero, the problem is in the device tree, not the driver. ## Step 2 - firmware upload The firmware is **embedded in `/vendor/lib/libsrv_init.so`'s `.data`**, not shipped as a file, and the kernel never loads it - there is no `request_firmware` anywhere in `rogue_km`. The chain is: ``` pvrsrvctl -> libsrv_init.so -> RGXInitLoadFWImage -> PVRSRVRGXInitFirmware bridge -> km uploads to GPU ``` So: install the matching vendor userspace, run `pvrsrvctl --start`, and watch for the firmware to boot. ## Done when Firmware boots and the FW heartbeat / KCCB responds. If the core ID reads correctly but the firmware never starts, suspect memory attributes (uncached vs write-combine) or the MMU setup rather than the upload path. WARNING: powering an unfamiliar rail on this board has form - see #53, and the PL02 result in `35-a15-rail-enable.md` where driving a rail high took the board down instantly.
Sign in to join this conversation.
No description provided.