[PATCH v3 0/5] powervr: MT8173 GPU support
From: Chen-Yu Tsai
Date: Mon Jul 27 2026 - 05:16:53 EST
Hi everyone,
This is v3 of my MT8173 PowerVR GPU support series.
I got another inquiry on the status of this patch series, so I thought
I'd dig it out, fix all the issues and send another version.
This time around Mesa was ready for basic testing, using both vulkanmark
and glmark2-es2-drm (with Zink). Details below.
Changes since v2 (all in the clk driver patch):
- Made COMMON_CLK_MT8173_MFGTOP depend on PM
- Needed since the driver implements PM domains using the generic PM
domain library, which also depends on PM
- Fixes build breakage (kernel test robot)
- Fixed "RST_DELAY_CNT" name (Brian)
- Dropped unused mfg_desc (Brian)
- Added check of clk_prepare_enable()'s return value in
clk_mt8173_mfgtop_power_on() (Brian)
- Saved error value for return in IS_ERR(data->clk_26m) branch
(Dan Carpenter / kernel test robot w/ smatch)
Changes since v1:
- Adapted to changed DT bindings
- Dropped driver change
- Use same power domain for "a" and "b" GPU power domains
This series enables the PowerVR GPU found in the MT8173 SoC, found in
some Chromebooks.
This version is different from the initial powervr driver submission [1]
in that it splits out the GPU glue layer support out of the powervr
driver and into a separate clock and power domain driver. The glue code
is otherwise the same, and also the same as found in the ChromeOS
kernels, with some extra comments and macro names added where possible.
Patch 1 adds a binding for the glue layer, called mfgtop. The glue layer
contains clock and power controls for the GPU.
Patch 2 adds a driver for the glue layer, implemented as a clock driver
that also provides power domains.
Patch 3 adds an entry for the MT8173 GPU and 6XT series to the PowerVR
binding.
Patch 4 corrects the clock for the GPU (called MFG) power domain.
Patch 5 adds device nodes for the GPU and glue layer to the MT8173 dtsi
file.
The kernel driver successfully probes the hardware and loads the
"rogue_4.40.2.51_v1.fw" firmware provided by Imagination Technologies [2].
The "exp_hw_support" module parameter needs to be set for the driver to
probe successfully.
This was tested with Mesa 26.1.5 from Debian Forky. With this version
vkmark and glmark2-es2 (over Zink) both run fine. Mesa spits out a bunch
of warnings since the GX6250 core is not officially supported.
# PVR_I_WANT_A_BROKEN_VULKAN_DRIVER=1 vkmark
WARNING: powervr is not a conformant Vulkan implementation, testing use only.
WARNING: powervr is not a conformant Vulkan implementation, testing use only.
MESA: warning: ../src/imagination/vulkan/pvr_arch_job_context.c:73: FINISHME: Missing reset support for brn51764
MESA: warning: ../src/imagination/vulkan/pvr_arch_job_context.c:76: FINISHME: Missing reset support for brn58839
MESA: warning: ../src/imagination/vulkan/pvr_arch_job_context.c:523: FINISHME: Missing support for brn62269
MESA: warning: ../src/imagination/vulkan/pvr_arch_border.c:244: FINISHME: Devices without tpu_border_colour_enhanced require entries for compressed formats to be stored in the table pre-compressed.
WARNING: powervr is not a conformant Vulkan implementation, testing use only.
=======================================================
vkmark 2025.01
=======================================================
Vendor ID: 0x1010
Device ID: 0x6250
Device Name: PowerVR Rogue GX6250
Driver Version: 109056005
Device UUID: d04cd6f3a25fd4900f89c151bccfdfcf
=======================================================
[vertex] device-local=true: FPS: 251 FrameTime: 3.984 ms
[vertex] device-local=false: FPS: 220 FrameTime: 4.545 ms
[texture] anisotropy=0:^C FPS: 223 FrameTime: 4.484 ms
=======================================================
vkmark Score: 231
=======================================================
# PVR_I_WANT_A_BROKEN_VULKAN_DRIVER=1 glmark2-es2-drm
WARNING: powervr is not a conformant Vulkan implementation, testing use only.
MESA: warning: ../src/imagination/vulkan/pvr_arch_job_context.c:73: FINISHME: Missing reset support for brn51764
MESA: warning: ../src/imagination/vulkan/pvr_arch_job_context.c:76: FINISHME: Missing reset support for brn58839
MESA: warning: ../src/imagination/vulkan/pvr_arch_job_context.c:523: FINISHME: Missing support for brn62269
MESA: warning: ../src/imagination/vulkan/pvr_arch_border.c:244: FINISHME: Devices without tpu_border_colour_enhanced require entries for compressed formats to be stored in the table pre-compressed.
Warning: DRM_CAP_ASYNC_PAGE_FLIP not supported, falling back to 'mailbox' mode for SwapInterval(0).
=======================================================
glmark2 2023.01
=======================================================
OpenGL Information
GL_VENDOR: Mesa
GL_RENDERER: zink Vulkan 1.2(PowerVR Rogue GX6250 (IMAGINATION_OPEN_SOURCE_MESA))
GL_VERSION: OpenGL ES 2.0 Mesa 26.1.5-1
Surface Config: buf=32 r=8 g=8 b=8 a=8 depth=24 stencil=0 samples=0
Surface Size: 1366x768 fullscreen
=======================================================
[build] use-vbo=false: FPS: 49 FrameTime: 20.473 ms
[build] use-vbo=true: FPS: 45 FrameTime: 22.660 ms
[texture] texture-filter=nearest: FPS: 45 FrameTime: 22.642 ms
[texture] texture-filter=linear:^C FPS: 50 FrameTime: 20.172 ms
=======================================================
glmark2 Score: 46
=======================================================
Please have a look.
Thanks
ChenYu
[1] https://lore.kernel.org/dri-devel/20220815165156.118212-2-sarah.walker@xxxxxxxxxx/
[2] https://gitlab.freedesktop.org/imagination/linux-firmware/-/tree/powervr
Chen-Yu Tsai (5):
dt-bindings: clock: mediatek: Add mt8173 mfgtop
clk: mediatek: Add mt8173-mfgtop driver
dt-bindings: gpu: powervr-rogue: Add MediaTek MT8173 GPU
arm64: dts: mediatek: mt8173: Fix MFG_ASYNC power domain clock
arm64: dts: mediatek: mt8173: Add GPU device nodes
.../clock/mediatek,mt8173-mfgtop.yaml | 70 +++++
.../bindings/gpu/img,powervr-rogue.yaml | 1 +
arch/arm64/boot/dts/mediatek/mt8173.dtsi | 33 ++-
drivers/clk/mediatek/Kconfig | 10 +
drivers/clk/mediatek/Makefile | 1 +
drivers/clk/mediatek/clk-mt8173-mfgtop.c | 241 ++++++++++++++++++
include/dt-bindings/clock/mt8173-clk.h | 7 +
7 files changed, 362 insertions(+), 1 deletion(-)
create mode 100644 Documentation/devicetree/bindings/clock/mediatek,mt8173-mfgtop.yaml
create mode 100644 drivers/clk/mediatek/clk-mt8173-mfgtop.c
--
2.55.0.229.g6434b31f56-goog