This patch series introduces support for the Imagination IMG BXM-4-64 GPU found on the T-HEAD TH1520 SoC. A key aspect of this support is managing the GPU's complex power-up and power-down sequence, which involves multiple clocks and resets.
The TH1520 GPU requires a specific sequence to be followed for its clocks and resets to ensure correct operation. Initial discussions and an earlier version of this series explored managing this via the generic power domain (genpd) framework. However, following further discussions with kernel maintainers [1], the approach has been reworked to utilize the dedicated power sequencing (pwrseq) framework. This revised series now employs a new pwrseq provider driver (pwrseq-thead-gpu.c) specifically for the TH1520 GPU. This driver encapsulates the SoC specific power sequence details. The Imagination GPU driver (pvr_device.c) is updated to act as a consumer of this power sequencer, requesting the "gpu-power" target. The sequencer driver, during its match phase with the GPU device, acquires the necessary clock and reset handles from the GPU device node to perform the full sequence. This approach aligns with the goal of abstracting SoC specific power management details away from generic device drivers and leverages the pwrseq framework as recommended. The series is structured as follows: Patch 1: Introduces the pwrseq-thead-gpu auxiliary driver to manage the GPU's power-on/off sequence. Patch 2: Adds device tree bindings for the gpu-clkgen reset to the existing thead,th1520-aon binding. Patch 3: Extends the pm-domains driver to detect the gpu-clkgen reset and spawn the pwrseq-thead-gpu auxiliary driver. Patch 4: Updates the Imagination DRM driver to utilize the pwrseq framework for TH1520 GPU power management. Patch 5: Adds the thead,th1520-gpu compatible string to the PowerVR GPU device tree bindings. Patch 6: Adds the gpu-clkgen reset property to the aon node in the TH1520 device tree source. Patch 7: Adds the device tree node for the IMG BXM-4-64 GPU and its required fixed-clock. Patch 8: Enables compilation of the Imagination PowerVR driver on the RISC-V architecture. This patchset finishes the work started in bigger series [2] by adding all remaining GPU power sequencing piece. After this patchset the GPU probes correctly. This series supersedes the previous genpd based approach. Testing on T-HEAD TH1520 SoC indicates the new pwrseq based solution works correctly. Link to v5 of this series - [3]. v6: - check return values from reset_control_assert() and propagate the first error, ensuring all teardown steps are still attempted - the driver now stores a reference to the consumer's device node to ensure it binds to a single, specific device - rename Kconfig option to POWER_SEQUENCING_TH1520_GPU - remove COMPILE_TEST v5: - reworked the pwrseq-thead-gpu driver, now using manual resource management in .match and a .remove callback - refactored the drm/imagination driver to use function pointers for power management instead of a boolean flag - switched the pmdomain driver to use the generic device_property_match_string() helper - added MMU and COMPILE_TEST dependencies to Kconfig to fix RISC-V build warnings. v4: - the pwrseq driver is now an auxiliary driver with a robust match function based on the power-domains property, spawned from the AON node - Imagination DRM driver now uses of_device_id match data to conditionally probe for the pwrseq, solving the cross platform probe deferral issue - add Reviewed-by from Ulf for the entire series v3: - re-worked cover letter completely - complete architectural rework from using extended genpd callbacks to a dedicated pwrseq provider driver - introduced pwrseq-thead-gpu.c and associated DT bindings (thead,th1520-gpu-pwrseq) - the Imagination driver now calls devm_pwrseq_get() and uses pwrseq_power_on() / pwrseq_power_off() for the TH1520 GPU - removed the platform_resources_managed flag from dev_pm_info and associated logic - the new pwrseq driver's match() function now acquires consumer-specific resources (GPU clocks, GPU core reset) directly from the consumer device v2: Extended the series by adding two new commits: - introduced a new platform_resources_managed flag in dev_pm_info along with helper functions, allowing drivers to detect when clocks and resets are managed by the platform - updated the DRM Imagination driver to skip claiming clocks when platform_resources_managed is set Split the original bindings update: - the AON firmware bindings now only add the GPU clkgen reset (the GPU core reset remains handled by the GPU node) Reworked the TH1520 PM domain driver to: - acquire GPU clocks and reset dynamically using attach_dev/detach_dev callbacks - handle clkgen reset internally, while GPU core reset is obtained from the consumer device node - added a check to enforce that only a single device can be attached to the GPU PM domain [1] - https://lore.kernel.org/all/capdykfpi6_cd++a9sbgbvjcubsqs6ycpnttkrqhqmtwy1yy...@mail.gmail.com/ [2] - https://lore.kernel.org/all/20250219140239.1378758-1-m.wilczyn...@samsung.com/ [3] - https://lore.kernel.org/all/20250618-apr_14_for_sending-v5-0-27ed33ea5...@samsung.com/ --- Michal Wilczynski (8): power: sequencing: Add T-HEAD TH1520 GPU power sequencer driver dt-bindings: firmware: thead,th1520: Add resets for GPU clkgen pmdomain: thead: Instantiate GPU power sequencer via auxiliary bus drm/imagination: Use pwrseq for TH1520 GPU power management dt-bindings: gpu: img,powervr-rogue: Add TH1520 GPU compatible riscv: dts: thead: th1520: Add GPU clkgen reset to AON node riscv: dts: thead: th1520: Add IMG BXM-4-64 GPU node drm/imagination: Enable PowerVR driver for RISC-V .../bindings/firmware/thead,th1520-aon.yaml | 7 + .../devicetree/bindings/gpu/img,powervr-rogue.yaml | 9 +- MAINTAINERS | 1 + arch/riscv/boot/dts/thead/th1520.dtsi | 25 +++ drivers/gpu/drm/imagination/Kconfig | 4 +- drivers/gpu/drm/imagination/pvr_device.c | 31 ++- drivers/gpu/drm/imagination/pvr_device.h | 19 ++ drivers/gpu/drm/imagination/pvr_drv.c | 30 ++- drivers/gpu/drm/imagination/pvr_power.c | 112 ++++++---- drivers/gpu/drm/imagination/pvr_power.h | 6 + drivers/pmdomain/thead/Kconfig | 1 + drivers/pmdomain/thead/th1520-pm-domains.c | 51 +++++ drivers/power/sequencing/Kconfig | 8 + drivers/power/sequencing/Makefile | 1 + drivers/power/sequencing/pwrseq-thead-gpu.c | 247 +++++++++++++++++++++ 15 files changed, 503 insertions(+), 49 deletions(-) --- base-commit: 4774cfe3543abb8ee98089f535e28ebfd45b975a change-id: 20250414-apr_14_for_sending-5b3917817acc Best regards, -- Michal Wilczynski <m.wilczyn...@samsung.com>