[RFC PATCH v1 00/14] Enable drm/imagination BXM-4-64 Support for LicheePi 4A
Michal Wilczynski
m.wilczynski at samsung.com
Tue Dec 3 05:41:23 PST 2024
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@imgtec.com/
[3] BXS-4-64 GPU Support Patches:
https://lore.kernel.org/all/20241105-sets-bxs-4-64-patch-v1-v1-0-4ed30e865892@imgtec.com/
[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@starfivetech.com/
[13] Pull request kernel 6.13 for mailbox
https://lore.kernel.org/all/CABb+yY33qnivK-PzqpSMgmtbFid4nS8wcNvP7wED9DXrYAyLKg@mail.gmail.com/
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
More information about the linux-riscv
mailing list