The LicheePi 4A board, featuring the T-HEAD TH1520 SoC, includes an Imagination Technologies BXM-4-64 GPU. Initial support for this GPU was provided through a downstream driver [1]. Recently, efforts have been made to upstream support for the Rogue family GPUs, which the BXM-4-64 is part of [2]. While the initial upstream driver focused on the AXE-1-16 GPU, newer patches have introduced support for the BXS-4-64 GPU [3]. The modern upstream drm/imagination driver is expected to support the BXM-4-64 as well [4][5]. As this support is being developed, it's crucial to upstream the necessary glue code including clock and power-domain drivers so they're ready for integration with the drm/imagination driver. Recent Progress: Firmware Improvements: Since August, the vendor has provided updated firmware [6][7] that correctly initiates the firmware for the BXM-4-64. Mesa Driver Testing: The vendor-supplied Mesa driver [8] partially works with Vulkan examples, such as rendering a triangle using Sascha Willems' Vulkan samples [9]. Although the triangle isn't rendered correctly (only the blue background appears), shader job submissions function properly, and IOCTL calls are correctly invoked. For testing, we used the following resources: Kernel Source: Custom kernel with necessary modifications [10]. Mesa Driver: Vendor-provided Mesa implementation [11]. Dependencies: Testing required a functional Display Processing Unit (DPU) and HDMI driver, which are currently not upstreamed. Efforts are underway to upstream the DPU DC8200 driver used in StarFive boards [12], which is the same DPU used on the LicheePi 4A. Once the DPU and HDMI drivers are upstreamed, GPU support can be fully upstream. Testing Status: This series has been tested by performing a probe-only operation, confirming that the firmware begins execution. The probe function initiates firmware execution and waits for the firmware to flip a specific status bit. [ 12.637880] powervr ffef400000.gpu: [drm] loaded firmware powervr/rogue_36.52.104.182_v1.fw [ 12.648979] powervr ffef400000.gpu: [drm] FW version v1.0 (build 6645434 OS) [ 12.678906] [drm] Initialized powervr 1.0.0 for ffef400000.gpu on minor 0 Power Management: Full power management capabilities require implementing the T-HEAD SoC AON protocol messaging via the hardware mailbox. While support for the mailbox was merged in kernel 6.13 [13], the AON protocol implementation is still in development. Therefore, this series focuses on preparing the groundwork without full power management support at this time. References: [1] Downstream Driver Source: https://gitlab.freedesktop.org/frankbinns/powervr/-/blob/cb1929932095649a24f051b9cfdd2cd2ceab35cb/drivers/gpu/drm/img-rogue/Kconfig [2] Initial Upstream Driver Series: https://lore.kernel.org/all/cover.1700668843.git.donald.robson@xxxxxxxxxx/ [3] BXS-4-64 GPU Support Patches: https://lore.kernel.org/all/20241105-sets-bxs-4-64-patch-v1-v1-0-4ed30e865892@xxxxxxxxxx/ [4] Firmware Issue Discussion 1: https://gitlab.freedesktop.org/imagination/linux-firmware/-/issues/1 [5] Firmware Issue Discussion 2: https://gitlab.freedesktop.org/imagination/linux-firmware/-/issues/2 [6] Firmware Update Commit 1: https://gitlab.freedesktop.org/imagination/linux-firmware/-/commit/6ac2247e9a1d1837af495fb6d0fbd6f35547c2d1 [7] Firmware Update Commit 2: https://gitlab.freedesktop.org/imagination/linux-firmware/-/commit/efbebc90f25adb2b2e1499e3cc24ea3f3c3e4f4c [8] Vendor-Provided Mesa Driver: https://gitlab.freedesktop.org/imagination/mesa/-/tree/dev/devinfo [9] Sascha Willems' Vulkan Samples: https://github.com/SaschaWillems/Vulkan [10] Test Kernel Source: https://github.com/mwilczy/linux/tree/2_December_reference_linux_kernel_imagination [11] Test Mesa Driver: https://github.com/mwilczy/mesa-reference [12] DPU DC8200 Driver Upstream Attempt: https://lore.kernel.org/all/20241120061848.196754-1-keith.zhao@xxxxxxxxxxxxxxxx/ [13] Pull request kernel 6.13 for mailbox https://lore.kernel.org/all/CABb+yY33qnivK-PzqpSMgmtbFid4nS8wcNvP7wED9DXrYAyLKg@xxxxxxxxxxxxxx/ Michal Wilczynski (14): clk: thead: Refactor TH1520 clock driver to share common code dt-bindings: clock: thead,th1520: Rename header file clk: thead: Enable clock gates with regmaps clk: thead: Add clock driver for TH1520 Video Output subsystem dt-bindings: clock: thead,th1520: Add support for Video Output subsystem dt-bindings: clock: thead,th1520: Rename YAML schema file soc: thead: power-domain: Add skeleton power-domain driver for TH1520 dt-bindings: power: thead,th1520: Add support for power domains riscv: Enable PM_GENERIC_DOMAINS for T-Head SoCs drm/imagination: Add support for IMG BXM-4-64 GPU drm/imagination: Enable PowerVR driver for RISC-V riscv: dts: Add Video Output clock and syscon regmap nodes riscv: dts: Introduce power domain node with simple-bus compatible riscv: dts: Add GPU node to TH1520 device tree .../bindings/clock/thead,th1520-clk-ap.yaml | 53 --- .../bindings/clock/thead,th1520-clk.yaml | 72 +++++ .../bindings/mailbox/thead,th1520-mbox.yaml | 2 +- .../bindings/power/thead,th1520-power.yaml | 52 +++ MAINTAINERS | 9 +- arch/riscv/Kconfig.socs | 1 + arch/riscv/boot/dts/thead/th1520.dtsi | 37 ++- drivers/clk/thead/Kconfig | 11 + drivers/clk/thead/Makefile | 3 +- drivers/clk/thead/clk-th1520-ap.c | 301 +----------------- drivers/clk/thead/clk-th1520-vo.c | 168 ++++++++++ drivers/clk/thead/clk-th1520.c | 194 +++++++++++ drivers/clk/thead/clk-th1520.h | 149 +++++++++ drivers/gpu/drm/imagination/Kconfig | 2 +- drivers/gpu/drm/imagination/pvr_drv.c | 1 + drivers/pmdomain/Kconfig | 1 + drivers/pmdomain/Makefile | 1 + drivers/pmdomain/thead/Kconfig | 12 + drivers/pmdomain/thead/Makefile | 2 + drivers/pmdomain/thead/th1520-pm-domains.c | 195 ++++++++++++ ...ead,th1520-clk-ap.h => thead,th1520-clk.h} | 34 ++ .../dt-bindings/power/thead,th1520-power.h | 19 ++ 22 files changed, 960 insertions(+), 359 deletions(-) delete mode 100644 Documentation/devicetree/bindings/clock/thead,th1520-clk-ap.yaml create mode 100644 Documentation/devicetree/bindings/clock/thead,th1520-clk.yaml create mode 100644 Documentation/devicetree/bindings/power/thead,th1520-power.yaml create mode 100644 drivers/clk/thead/clk-th1520-vo.c create mode 100644 drivers/clk/thead/clk-th1520.c create mode 100644 drivers/clk/thead/clk-th1520.h create mode 100644 drivers/pmdomain/thead/Kconfig create mode 100644 drivers/pmdomain/thead/Makefile create mode 100644 drivers/pmdomain/thead/th1520-pm-domains.c rename include/dt-bindings/clock/{thead,th1520-clk-ap.h => thead,th1520-clk.h} (71%) create mode 100644 include/dt-bindings/power/thead,th1520-power.h -- 2.34.1