Skip to content

GKD Pixel2 - Alpha 1.3

Latest

Choose a tag to compare

Alpha 1.3. Follows up on Alpha 1.2 ahead of merging into ROCKNIX#2993 - see that PR for full history and discussion.

Update (2026-07-16): screen timing regression fixed, and we need help from the community.

  • Fixed a regression in the panel init sequence introduced when this board's display was switched from a dedicated ST7703 C driver over to the generic rocknix,generic-dsi driver - a small bug in the DTS init sequence (an extra stray byte on the exit-sleep command, plus an overly-ambiguous set of candidate display modes) was causing inconsistent panel init on some boots. Display should now come up correctly and consistently.
  • We could use community help finding the right CPU/GPU voltages for this board's OPP table. The system is currently prone to crashing after the CPU clock/voltage ramps up too quickly (fast governor transitions, especially combined with the overclock/turbo toggle, and especially after resuming from deep suspend) - this looks like real memory corruption, not a simple software bug, and extensive investigation this cycle (regulator refcounting, DDR PHY clock topology, BL31/firmware-level DVFS behavior) hasn't found a definitive fix. If you're comfortable testing custom voltage tables on your own hardware and reporting back what is/isn't stable, that would help a lot - see the PR for the technical details gathered so far.

Since Alpha 1.2:

  • Found and fixed a GPU clock double-management bug between genpd's automatic clock tracking and the mali_kbase driver's own direct clock management, confirmed via live dmesg to cause "Enabling unprepared clk_gpu" / -ESHUTDOWN during real resume.
  • Found and fixed incorrect CPU/GPU OPP table voltages - this board's real vendor firmware uses the generic PX30 voltage tables, not the lower-voltage PX30S-suffixed ones an earlier port assumed, which was also silently undervolting the CPU/GPU at their higher operating points.
  • Deep suspend (mem) itself now enters and wakes reliably (the GPU clock crash above is fixed).

Correction to an earlier claim in this release: a previous version of these notes said deep suspend/resume was "fully fixed" and that the freeze-as-default-suspend-mode workaround had been removed. That was wrong. Further testing found a separate, still-unresolved bug: if a dynamic CPU governor (schedutil/ondemand) is active after waking from deep suspend, the system reliably crashes within seconds - confirmed to be real memory corruption (a kernel oops in unmap_page_range, a genuine page-table translation fault), requiring both a CPU frequency/voltage transition and concurrent memory-management activity (e.g. launching an app) to trigger. Static governors (performance/powersave) never trigger it, and a fresh boot survives arbitrarily many/fast CPU transitions under identical load - only after a suspend/resume cycle is it affected.

Extensive investigation (kernel-side regulator/clock/OPP-table theories, BL31 firmware reverse engineering, and direct hardware tests of PX30S's DDR PHY calibration path) found real, PX30S-specific firmware behavior but no fix - two attempts at deliberately triggering that DDR calibration path (once with placeholder parameters, once with real vendor-sourced electrical values) each caused a full device reset rather than fixing anything. Until a real root cause is found, the freeze (s2idle) default-suspend-mode workaround has been restored as a mitigation: CPU cores stay mostly on and idle instead of powering off and later resuming dynamic frequency scaling, which avoids the crash entirely rather than fixing it. Deep suspend can still be selected manually in Settings if you want to test it; just be aware of the above if you enable a dynamic CPU governor afterward.

Remaining known issues (out of scope for this PR):

  • The CPU-DVFS-post-resume memory corruption described above - community help testing custom OPP voltages is very welcome here.
  • USB-OTG state transitions aren't fully robust - the port can get stuck in either a "Host" or "Peripheral" configuration depending on what was plugged in most recently, requiring a device reset to recover.

How to update:

  • Existing ROCKNIX install: drop ROCKNIX-RK3326.aarch64-20260716.tar into /storage/.update/ and reboot - no reflash needed.
  • Fresh install / prefer a clean flash: flash ROCKNIX-RK3326.aarch64-20260716-b.img.gz directly to your SD card.

SHA256 checksums are attached alongside each file.