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.

am33xx based board: system slow down(freeze)

Hi All,

1. TI full support is required. I'm having tough time, please solve it ASAP.

2. Using TI Sitara SDK 7.0  linux 3.12 for AM33xx

3. After running applications for few seconds system completely slows down.

4. When slowdown happens,

CM_CLKMODE_DPLL_MPU register is set to 5, DPLL is in Idle Bypass Low Power Mode. Found using devmem2. All applications run slowly and idle task does not run as all the applications need CPU.

5. In normal operating mode, the CM_CLKMODE_DPLL_MPU register is set to 7, DPLL in Lock mode

6. It's found that ARM Cortex M3 power management firmware has code to alter CM_CLKMODE_DPLL_MPU.

7. Before and after processor slows down,

root@am335x-evm:~# cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
ondemand
root@am335x-evm:~# cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_cur_freq
300000

8. Also tried changing scaling_governor to performance but the problem was not solved.

9. I also want a patch which solves below problem,

with dpll mpu = 300MHz set in uboot, I get below kernel prints,
cpufreq_cpu0: failed to scale voltage up: -22

with dpll mpu = 800MHz,
cpufreq_cpu0: failed to scale voltage down: -22

Changing the frequency of the CPU clock requires changing the frequency of the PLL that is
supplying the CPU clock. To change the frequency of the PLL, the CPU
clock is temporarily reparented to another parent clock.
The clock frequency of this temporary parent clock could be much
higher than the clock frequency of the PLL at the time of
reparenting. Due to the temporary increase in the CPU clock speed,
the CPU (and any other components in the CPU clock domain such as
dividers, mux, etc.) have to to be operated at a higher voltage
level, called the safe voltage level.

I want a patch that adds optional support to temporarily switch to a safe voltage level during CPU
frequency transitions.


Regards,
Gangadhar

 

  • This will be escalated to the factory team. Feedback will be posted on this thread when available.

  • Gangadhar,
    Biser,

    I know that nearly a year has passed from the last post on this thread, but do you have any follow up about this topic?

    Kind Regards,

    Andrea
  • Andrea, we disabled power management and Cortex M3 power management firmware in kernel configuration. This is the solution we found. This works for us.

    Regards,
    Gangadhar
  • Thanks for you feedback Gangadhar

    I've found, together with TI support, that it's enough to disable C1 idle state:

    diff --git a/arch/arm/mach-omap2/cpuidle33xx.c b/arch/arm/mach-omap2/cpuidle33xx.c
    index 8492c60..d3019ae 100644
    --- a/arch/arm/mach-omap2/cpuidle33xx.c
    +++ b/arch/arm/mach-omap2/cpuidle33xx.c
    @@ -98,15 +98,6 @@ struct cpuidle_state am33xx_ddr3_states[] = {
                    .name = "C0",
                    .desc = "WFI",
            },
    -       {
    -               .exit_latency = 130,
    -               .target_residency = 200,
    -               .power_usage = 497,
    -               .flags = CPUIDLE_FLAG_TIME_VALID | AM33XX_FLAG_MPU_PLL,
    -               .enter = am33xx_enter_idle,
    -               .name = "C1",
    -               .desc = "Bypass MPU PLL",
    -       },
     };
     
     static struct cpuidle_driver am33xx_idle_driver = {
    

    However I'm still investigating this issue, to find a possible better solution