I am using an EVK 8MMINIPD4-EVK eval kit with a Linux application that’s doesn’t require much CPU computation instructions per second so I would like to turn the clock down as much as possible to save battery power. In looking around for what the CPU supports, the following is reported:
1200000 1600000 1800000
The board is drawing about 210mA, the application uses rs232, I2C, and Ethernet.
Thanks for any help.
The CPU enable "cat /sys/devices/system/cpu/online" seems to work as far as turning cores on or off but with the results I got by turning off unused cores, I think if I could run a lower clock speed than 1200000 I could save even more power.
I didn't see the minimum clock speed in the document section 3.1.3. I did look in that section and around section 3.1.3 for the minimum clock speed but I didn't see a minimum clock speed specified.
You can deviate or go below these operating points if the hardware allows (i.e. either by changing the PLL directly or an output divider). However, the BSP is not guaranteed to work. As the frequencies of the operating points mentioned in the datasheet are the once which are tested by the official BSP. All other downstream clock dependencies would need to be analyzed and changed if needed at our own risk. For further details, you can check the PLL section of this processor in R.M or datasheet.
Also, make sure that only reducing the frequency won't reduce power consumption. You will require to reduce the voltage level as well as frequency both to achieve a reduction in power consumption.
Please find below in-line response.
We are running 1200000 but would the CPU support lower clocks speeds than 1200000?
As per my understanding these are the set of operating frequencies that are supported. You can not go below that. Please refer to the section 3.1.3 "Operating Ranges" from the "Datasheet" for the part number you are using. These operating ranges mentioned in datasheet are written in the "fsl-imx8mm,dtsi" device tree file.
Can 3 of the 4 CPU cores be turned off?
For selecting the number of cores to run, you can pass the "maxcpus=1" in your kernel command line argument. That is, you can pass this argument from u-boot to kernel. By this Linux will use the single core. To verify this you can see the output of "cat /sys/devices/system/cpu/cpuX/online" node. If it is 1 then the respective cpu core is online, else it is offline. Also, to see the core numbers that are in use and online "cat /sys/devices/system/cpu/online" node can be helpful. ("lscpu" command can also be helpful to verify)
Are there other devices on the CPU or eval board that could be disabled in software that would save more power?
I would suggest to refer the section 6 "Power Mangement" from the "i.MX Linux User's Guide" and see if that helps. Also, recommended to narrow down the device tree file for your system. Keep only those things which are useful and disable the rest. It might help.
For your reference I have attached the datasheet and Linux User's Guide. If that is not relevant to your part number and BSP, then please download the relevant documents from i.MX 8M Mini Applications Processor | Arm Cortex A53/M4 | 1080P display | NXP and i.MX Software and Development Tools | NXP.