How to reduce the CPU frequency on the Colibri iMX8X

Colibri iMX8QXP 2GB WB IT V1.0D
Iris carrier board V1.1B
Linux BSP 5.4

Is there a way to reduce the CPU frequency of the iMX8 down lower than 900MHz to say 200MHz without any hardware changes?

Here is how to change the CPU clock.

1 Like

Thanks but that is for changing the CPU clock in the available range of 900MHz-1.2GHz. What we want to do is run at something much lower like 200MHz to reduce heat as we dont need the CPU performance. I suspect it involves changing the dts files and possibly some kernel code or headers at least

According iMX8QXP datasheet, only 900M and 1.2G are supported.

This table is about PLL clock. But there’s a clock slice divider, /1 /2 /4 /8. There should be a way to control that divider.

Yes, it may be possible to set the divider for a lower clock. But this potentially needs to change SCFW. I am also checking internally. @robple11 , have you try to bring cpu offline? For example, echo 0 > /sys/devices/system/cpu/cpuX/onlin

I think i did the same thing but in uboot with:
#setenv defargs $defargs maxcpus=1

When i checked the status of cpu1,2,3 they were all offline.
I tried adding 650MHz to the dtb file but it caused the kernel to not boot and now I am stuck in uboot. I tried changing the fdtfile setting to another dtb but that did nothing.
Here is the boot output:

U-Boot 2020.04-5.4.0-devel+git.f499632b31f8 (Jul 27 2021 - 15:51:47 +0000)

CPU:   NXP i.MX8QXP RevC A35 at 1200 MHz at 25C

DRAM:  2 GiB
Loading Environment from MMC... OK
In:    serial
Out:   serial
Err:   serial
Model: Toradex Colibri iMX8 QuadXPlus 2GB Wi-Fi / BT IT V1.0D, Serial# 06800805

  - SCFW bc122ee1, SECO-FW 7aeb8423, IMX-MKIMAGE 8947fea3, ATF 835a8f6
  - U-Boot 2020.04-5.4.0-devel+git.f499632b31f8

flash target is MMC:0
Net:   eth0: ethernet@5b040000 [PRIME]
Fastboot: Normal
Normal Boot
Hit any key to stop autoboot:  0
MMC: no card present
switch to partitions #0, OK
mmc0(part 0) is current device
starting USB...
Bus usb@5b0d0000: usb dr_mode not found
Bus usbh3: XHCI-imx8 init hccr 0x000000005b130000 and hcor 0x000000005b130080 hc_length 128
Register 2000820 NbrPorts 2
Starting the controller
scanning bus usb@5b0d0000 for devices... 1 USB Device(s) found
scanning bus usbh3 for devices... 2 USB Device(s) found
       scanning usb for storage devices... 0 Storage Device(s) found

Device 0: unknown device
Unknown command 'pci' - try 'help'
BOOTP broadcast 1
DHCP client bound to address (523 ms)
Using ethernet@5b040000 device
TFTP from server; our IP address is
Filename 'boot.scr'.
Load address: 0x83200000
Loading: *
TFTP error: 'File not found or No Access' (1)
Not retrying...
Colibri iMX8X #

Hi robple11, so using a single core at 900MHz is still a bit much? Do you have some power requirements to understand your needs better?

Accessing the divider or using an “unsupported” CPU clock requires some extra steps and we would need to research a bit.

Running at 900MHz and single core with most peripherals turned off gives us about 60 degrees with no heat sink and slowly gets to 68 degrees after a few hours.
We currently install a our box on aircraft with the Colibri T30 and that runs mostly at 40 degrees, depending on where the box is installed the ambient can reach 50-60 degrees and in the box 90 degrees. We have monitoring that lets us know when the core goes above 90 and it definitely gets above that mulitple times.
With the iMX8 running so hot we are worried about the temperatures of inside the box and the core temperature exceeding 100-120 degrees. The reason we chose the iMX8 is the embedded Wifi and access to more powerful processing if we need it later down the road.

Hi @robple11 , the max operating temperature of Colibri iMX8 QuadXPlus 2GB Wi-Fi / Bluetooth IT is 85 degrees. The 90 degrees is out of the range. The maximum junction temperature for i.MX 8QuadXPlus IT is 125 degrees. Tegra 3 IT is 105 degrees. So iMX8QXP theoretically has more margin than T30 in the high temperature operating range.

Hi @robple11 , here is the comment from our team.

Basically, while one may lower the frequency one can NOT lower the voltage. This means that the gain in terms of power consumption by lowering the frequency will be rather marginal.

Disabling cores and unused peripherals is still a promising and easier way.

1 Like

The other question that I marked as answered was how to set things on/off and did not answer how to reduce heat. I have had some success with turning off devices in the device tree but I cant seem to get anything better than 10 degrees. I saw this question Reduce idle power consumption - #7 by campbell and that someone had success with reducing the cpu frequency that is the only reason why I asked about setting a new frequency to reduce heat.
In the documentation it does say 900MHz and 1.2GHz are the only clock frequencies but gives a range starting at 650MHz, shouldnt it be possible to then set the clock at 650Mhz at least?


650MHz to 1.3GHz is the locking range for PLL. It eventually takes the clock source from SCFW. Now it is set to 900MHz.