[PATCH v3 0/5] powervr: MT8173 GPU support
YoungJoon Lee
getfeus at gmail.com
Mon Jul 27 08:48:57 PDT 2026
Hello,
I tested patches 1/5 through 5/5 from the MT8173 PowerVR v3 series on
an Acer Chromebook R13 (Google Elm), which uses an MT8173 SoC and a
PowerVR Rogue GX6250 GPU with BVNC 4.40.2.51.
For clarity, I applied the five actual patches numbered 1/5 through
5/5. The 0/5 cover letter itself was not applied.
Kernel:
Linux 7.1.3-stb-cbm-pvr-v3
Relevant kernel configuration:
CONFIG_DRM_POWERVR=m
CONFIG_COMMON_CLK_MT8173_MFGTOP=y
Kernel command line:
powervr.exp_hw_support=1
Firmware:
powervr/rogue_4.40.2.51_v1.fw
The driver probes successfully, loads the firmware, and initializes the
DRM device:
[ 6.110569] powervr 13000000.gpu:
[drm] Running on unknown hardware; expect issues.
[ 6.117454] powervr 13000000.gpu:
[drm] loaded firmware
powervr/rogue_4.40.2.51_v1.fw
[ 6.118010] powervr 13000000.gpu:
[drm] FW version v1.0 (build 6476056 OS)
[ 6.122992] [drm] Initialized powervr 1.0.0
for 13000000.gpu on minor 1
The following DRM device nodes are created:
/dev/dri/card0
/dev/dri/card1
/dev/dri/renderD128
However, on a clean boot, without manually running vulkaninfo, vkcube,
or another Vulkan application, the driver reports that the GPU has been
lost approximately six seconds after DRM initialization:
[ 12.084078] powervr 13000000.gpu:
[drm] *ERROR* GPU device lost
The relevant boot sequence is therefore:
[ 6.110569] PowerVR probe begins
[ 6.117454] Firmware is loaded
[ 6.118010] Firmware version is reported
[ 6.122992] DRM initialization completes
[ 12.084078] GPU device lost
The unused-regulator shutdown occurs considerably later:
[ 31.712124] vgpu: disabling
Therefore, the later "vgpu: disabling" message does not appear to be
the immediate cause of the device loss. The GPU is reported lost about
20 seconds before that regulator shutdown message.
After the failure, regulator_summary reports:
vgpu 0 0 0 normal 1000mV 0mA 700mV 1350mV
This output was collected after the GPU had already been reported lost,
so I do not know whether the regulator state was different during probe
or immediately before the failure.
The PowerVR-related clocks appear enabled in clk_summary:
mfg_26m 26000000 Hz
mem_mfg_in_sel
rate: 455000000 Hz
enable: 1
prepare: 1
mfg_mem
rate: 455000000 Hz
enable: 1
prepare: 1
consumer: 13000000.gpu
clock name: mem
mfg_sel
rate: 455000000 Hz
enable: 1
prepare: 1
mfg_g3d
rate: 455000000 Hz
enable: 1
prepare: 1
consumer: 13000000.gpu
clock name: core
axi_mfg_in_sel
rate: 208000000 Hz
enable: 2
prepare: 2
consumer: power-domain at 7
mfg_axi
rate: 208000000 Hz
enable: 1
prepare: 1
consumer: 13000000.gpu
clock name: sys
I also installed Mesa 26.1.5 and vulkan-powervr 26.1.5 and tested the
Vulkan ICD with:
PVR_I_WANT_A_BROKEN_VULKAN_DRIVER=1 \
VK_DRIVER_FILES=/usr/share/vulkan/icd.d/powervr_mesa_icd.json \
vulkaninfo --summary
The PowerVR ICD was found and loaded. Before hanging, Mesa printed:
WARNING: powervr is not a conformant Vulkan implementation,
testing use only.
FINISHME: Missing reset support for brn51764
FINISHME: Missing reset support for brn58839
FINISHME: Missing support for brn62269
FINISHME: Devices without tpu_border_colour_enhanced require entries
for compressed formats to be stored in the table
pre-compressed.
The vulkaninfo process then remained in uninterruptible sleep:
PID STAT WCHAN COMMAND
3244 Dl+ synchronize_srcu vulkaninfo --summary
It could not be terminated normally while in that state, and a reboot
was required.
However, the clean-boot log shows that "GPU device lost" occurs even
without starting vulkaninfo manually. The vulkaninfo hang may therefore
be a consequence of the GPU already being in the lost state, rather than
the original cause of the failure.
At this point, the following parts appear to work:
- MT8173 GPU device-tree node probing
- MFGTOP clock registration
- PowerVR kernel module probing
- Firmware loading
- Firmware version reporting
- DRM device initialization
- Creation of card1 and renderD128
The remaining problem is that the GPU becomes lost approximately six
seconds after initialization.
Could this be related to an interrupt not being delivered, firmware
heartbeat handling, reset sequencing, runtime PM, a missing regulator
consumer relationship, or another MT8173-specific power-domain
requirement?
Please let me know which additional kernel debug options, DRM debug
settings, tracepoints, interrupt statistics, register dumps, or test
patches would be useful. I have physical access to the device and can
build and test further kernel changes.
Thank you for working on MT8173 support.
Best regards,
YoungJoon Lee
2026年7月27日(月) 18:16 Chen-Yu Tsai <wenst at chromium.org>:
>
> 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@imgtec.com/
> [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
>
More information about the Linux-mediatek
mailing list