i.MX8M Mini GPU Frequency 500MHz. How to increase?

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

i.MX8M Mini GPU Frequency 500MHz. How to increase?

3,361 Views
mharg
Contributor I

We are working with the iMX8m-mini using the latest IMX BSP release: imx-5.15.32-2.0.0, and trying to increase GPU performance.

We have found that the GPU is running @ 500MHz.
How do we increase the GPU frequency to 800MHz as stated in the datasheet?

Even under high GPU loads, the reported frequency is always ~500MHz :

root@imx8mm-ddr4-evk:~# cat /sys/kernel/debug/gc/clk
gpu0 mc clock: 499999491 HZ.
gpu0 sh clock: 499999491 HZ.
gpu8 mc clock: 500001018 HZ.

Is there some other configuration that needs to be modified to support the higher frequency operation?

0 Kudos
Reply
4 Replies

1,082 Views
Krakert
Contributor I

This patch sets the GPU3D/GPU2D cores to 800MHz (noting that GPU3D_CLK_ROOT maxes out at 1000MHz).

From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Stefan de Kraker
Date: Mon, 24 Mar 2026 00:00:00 +0000
Subject: [PATCH] arm64: dts: imx8mm: set GPU clock to 800MHz

Set GPU3D/GPU2D cores to 800MHz (GPU3D_CLK_ROOT max = 1000MHz).

The CCM clock slice for GPU3D_SRC is configured before GPU_PLL_OUT in
the assigned-clocks list, so the /2 post-divider gets locked in while
the PLL is still at the bootloader value. Setting GPU_PLL_OUT to 1600MHz
ensures the slice output (1600/2) is 800MHz after the PLL update.

---
 arch/arm64/boot/dts/freescale/imx8mm.dtsi | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

--- a/arch/arm64/boot/dts/freescale/imx8mm.dtsi
+++ b/arch/arm64/boot/dts/freescale/imx8mm.dtsi
@@ -1566,7 +1566,7 @@
 		assigned-clock-parents = <&clk IMX8MM_GPU_PLL_OUT>,
 				<&clk IMX8MM_GPU_PLL_OUT>,
 				<&clk IMX8MM_SYS_PLL1_800M>,
 				<&clk IMX8MM_SYS_PLL1_800M>;
-		assigned-clock-rates = <0>, <0>, <0>,<400000000>,<1000000000>;
+		assigned-clock-rates = <800000000>, <800000000>, <0>,<400000000>,<1600000000>;
 
 		power-domains = <&pgc_gpu>;
 

Kernel output:

$ cat /sys/kernel/debug/gc/clk
gpu0 mc clock: 800038786 HZ.
gpu0 sh clock: 800038786 HZ.
gpu16 mc clock: 800038245 HZ.

 

0 Kudos
Reply

3,341 Views
joanxie
NXP TechSupport
NXP TechSupport

you can refer to the dts file, the gpu frequency is set to 1G as default, the 500M you find is divided half by 500M, so this is the max frequency you can get from GPU, if you mean 800Mhz GPU frequency, you can use "$ echo "nominal" > /sys/bus/platform/drivers/galcore/gpu_govern" but you use cat /sys/kernel/debug/gc/clk to check, maybe you only can get 400Mhz value

0 Kudos
Reply

3,334 Views
mharg
Contributor I

Hi @joanxie ,

The gpu_govern file doesn't exist in the dir:

# ls -l /sys/bus/platform/drivers/galcore/
lrwxrwxrwx 1 root root 0 Sep 2 06:05 38000000.gpu -> ../../../../devices/platform/38000000.gpu
--w------- 1 root root 4096 Sep 2 06:05 bind
-rw-r--r-- 1 root root 4096 Sep 2 06:05 gpu3DClockScale
-rw-r--r-- 1 root root 4096 Sep 2 06:05 gpu3DMinClock
--w------- 1 root root 4096 Mar 11 13:37 uevent
--w------- 1 root root 4096 Sep 2 06:05 unbind

 

Is there a missing device-tree configuration to enables the gpu govern support?

Are you using the NXP imx-5.15.32-2.0.0 release?

 

0 Kudos
Reply

3,311 Views
joanxie
NXP TechSupport
NXP TechSupport

sorry for my mistake, this gpu_govern is only available for imx8qm, for imx8mm you need change it in the dtsi file directly, the default frequency is 1000M

"https://source.codeaurora.org/external/imx/linux-imx/tree/arch/arm64/boot/dts/freescale/imx8mm.dtsi?..."

0 Kudos
Reply