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.

Slow down L138 to 48MHz and 24MHz

Other Parts Discussed in Thread: OMAP-L138, OMAPL138

Hallo,

I have OMAP-L138 and I use DVSDK 04.03.00.06. (I have LogicPD ZOOM OMAP-L138 EVM as development board)

I want to slow down the clock to 48MHz, and also to 24MHz (possibly with PLL0 bypassed), for consuption purposes.

I have modified the file ~/ti-dvsdk_omapl138-evm_04_03_00_06/psp/linux-2.6.37-psp03.21.00.04.sdk/arch/arm/mach-davinci/da850.c in this way:

static const struct da850_opp da850_opp_96 = {
    .freq        = 96000,
    .prediv        = 1,
    .mult        = 20,
    .postdiv    = 5,
    .cvdd_min    = 1000000,
    .cvdd_max    = 1050000,
};

static const struct da850_opp da850_opp_48 = {
    .freq        = 48000,
    .prediv        = 1,
    .mult        = 20,
    .postdiv    = 10,
    .cvdd_min    = 1000000,
    .cvdd_max    = 1050000,
};

static const struct da850_opp da850_opp_24 = {
    .freq        = 24000,
    .prediv        = 1,
    .mult        = 20,
    .postdiv    = 20,
    .cvdd_min    = 1000000,
    .cvdd_max    = 1050000,
};

#define OPP(freq)         \
    {                \
        .index = (unsigned int) &da850_opp_##freq,    \
        .frequency = freq * 1000, \
    }

static struct cpufreq_frequency_table da850_freq_table[] = {
    OPP(456),
    OPP(408),
    OPP(372),
    OPP(300),
    OPP(200),
    OPP(96),
    OPP(48),
    OPP(24),
    {
        .index        = 0,
        .frequency    = CPUFREQ_TABLE_END,
    },
};

then on the target the new frequencies are correctly listed:

# cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_frequencies
456000 408000 372000 300000 200000 96000 48000 24000

but if I try to change the frequency:

# echo 24000 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_setspeed

it hangs. It happens also trying to set 48000.

I cannot understand where I am wrong.

maybe the voltages are wrong?

best regards

  • Could you elaborate what you have described as a system hang in the post ?

    As far as I know the supported operating points are as mentioned here:

    http://processors.wiki.ti.com/index.php/OMAP-L1_Linux_Drivers_Usage#Power_Management

    While introducing lower operating points are you taking care of the other system clocks going to the UARTs(from which you see the linux console), mDDR( application memory), other peripherals for the rest of the system to be stable.

    Regards,

    Rahul

  • It simply hangs (both serial console and ssh terminal), and even pushing reset button has no effect, I must remove the power.

    DDR is feeded by two clocks: one is for DDR2/mDDR phy and is PLL1_SYSCLK1 so it is unaffected by frequency scaling (is that right?); the other is for DDR2/mDDR bus ports and is PLL0_SYSCLK2. But there is a constrain on PLL0_SYSCLK2: it must be a half of PLL0_SYSCLK1/PLL0_SYSCLK6 that is arm a dsp frequency.

    So according to my mind the DDR is already alright.

    I don't know about UART. I will check it soon. Maybe also EMAC has some problems

    best regards

  • I have some more information for you on this topics. From system testing done by the software teams, it was determined that the Linux side power domain module could support only upto 96Mhz as the operating point on OMAPL138. Below this OPP there were several issues observed with features supported by the linux kernel.

    Regards,

    Rahul

  • Do you know if software teams have done a depth investigation on this issue (eg. trying to change something in kernel configuration or in source code) or have simply found that the kernel doesn't run?

    best regards