This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

Linux/AM3359: Power management on ICEv2

Part Number: AM3359

Tool/software: Linux

Hello,
customer tries to configure cpufreq (DVFS) on am335x-icev2 EVM with Linux RT 04.02.00.09.
http://processors.wiki.ti.com/index.php/Linux_Kernel_Users_Guidehttp://processors.wiki.ti.com/index.php/Linux_Core_Power_Management_User%27s_Guide_(v4.4)

For this he followed the steps in the above wikis to configure the kernel (enable cpufreq as well as cpuidle – please refer to attached kernel config) and rebuilt the kernel + modules + device tree (am335x-icev2.dts). Then he copied zImage and .dtb to the SD card and run modules_install.
After the reboot he executed the following commands from the CLI:
1.
Board comes up with scaling_governor = performance.
Power consumption is ~123mA@24V.

2.
root@am335x-evm:~# echo ondemand > /sys/devices/system/cpu/cpufreq/policy0/scaling_governor
root@am335x-evm:~# cat  /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq
300000
Frequency is toggling when reading scaling_cur_freq multiple times

3.
root@am335x-evm:~# echo userspace > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
root@am335x-evm:~# echo 300000 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_setspeed
root@am335x-evm:~# cat  /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq
300000

Frequency is fixed to 300000 when reading scaling_cur_freq multiple times

Although the frequency is changing there is no power saving at all.
The EVM consumes ~123mA@24V for all scenarios.

Is there something missing in his kernel .config?

Are there further files that need to be updated/copied to SD card?

Regards, Holger

  • Hi Holger,

    I will have a look on your question and come back to you.

    Meanwhile, please go through the below doc:

    www.ti.com/.../sprac74a.pdf

    Regards,
    Pavel
  • Holger,

    CPUFreq (DVFS) and CPUIdle are two different power management techniques.

    CPUFreq - CPU is not loaded evenly during execution. This provides an opportunity to save power by adjusting/scaling voltage and frequency based on the current cpu load.

    CPUIdle - When idle loop is executed, kernel is not doing any useful 'work'. This is an opportunity to save power. The cpuidle framework helps in saving power during the idle state.

    You should not mix these two, use only one of these at a time.

    Let we focus on CPUFreq. What changes exactly you have made in kernel/dts files? CPUFreq should work with the default pre-built binaries. By default, cpufreq, the cpufreq-cpu0 driver, and all of the standard governors are enabled with the ondemand governor selected as the default governor.

    When boot your kernel up, before anything else, provide the output of the below commands:

    $ cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors
    $ cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
    $ cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq
    $ cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_frequencies



    Pavel