부트로더 버젼은 2013.04이며, 커널 버젼은 3.0.35 입니다.
기본 i.MX6Q의 메모리 클럭은 528MHz입니다.

메모리 클럭을 낮추기 위해서 먼저 부트로더를 수정합니다.

[부트로더 수정 파일]
board/freescale/imx/ddr/xxxx.cfg 파일들을 수정해 주면 됩니다.

임의의 하나의 파일을 선택하여 수정하도록 하겠습니다.

board/freescale/imx/ddr/mx6q_4x_mt41j128.cfg

 *      value     value to be stored in the register
 */
DATA 4 0x020c4014 0x00018940
DATA 4 0x020c4018 0x00060324 

DATA 4 0x020e05a8 0x00000030
DATA 4 0x020e05b0 0x00000030
DATA 4 0x020e0524 0x00000030

빨간색 부분을 추가하면 됩니다.

[ 수정한 부트로드에서의 클럭 확인하기 ]

1. DDR 528MHz 클럭일 경우

FALINUX > clocks
    PLL_SYS 792 MHz
    PLL_BUS 528 MHz
    PLL_OTG 480 MHz
    PLL_NET 50 MHz
    
    IPG 66000 kHz
    UART 80000 kHz
    CSPI 60000 kHz
    AHB 132000 kHz
    AXI 264000 kHz
    DDR 528000 kHz
    USDHC1 200000 kHz
    USDHC2 200000 kHz
    USDHC3 200000 kHz
    USDHC4 200000 kHz
    EMI SLOW 29333 kHz
    IPG PERCLK 66000 kHz

2. DDR 400MHz 클럭일 경우

FALINUX > clocks
    PLL_SYS 792 MHz
    PLL_BUS 528 MHz
    PLL_OTG 480 MHz
    PLL_NET 50 MHz
    
    IPG 66666 kHz
    UART 80000 kHz
    CSPI 60000 kHz
    AHB 133333 kHz
    AXI 270000 kHz
    DDR 400000 kHz
    USDHC1 200000 kHz
    USDHC2 200000 kHz
    USDHC3 200000 kHz
    USDHC4 200000 kHz
    EMI SLOW 30000 kHz
    IPG PERCLK 66666 kHz


부트로더를 수정하였다면 반드시 커널도 수정을 해 줘야합니다.

[커널 수정 파일]

1. arch/arm/mach-mx6/bus_freq.c

447 라인 근처를 수정

     /* Currently at low or medium
      * set point, need to set to
      * high setpoint
      */
    set_high_bus_freq(1);
    
    부분을 아래와 같이 수정합니다.
    
    set_high_bus_freq(0);


480 라인 근처를 수정

    else {
        /* Set to either high or
         * medium setpoint.
         */
        set_high_bus_freq(1);

        부분을 아래와 같이 수정합니다.        
        
        set_high_bus_freq(0);


795 라인 근처를 수정

            bus_freq_scaling_is_active = 1;
        #endif
            if (cpu_is_mx6q()) {
                set_high_bus_freq(1);
                
                부분을 아래와 같이 수정합니다.        
                
                set_high_bus_freq(0);


2. arch/arm/mach-mx6/clock.c

    static void clk_tree_init(void)
    {
    //  unsigned int reg;
    //
    //  reg = __raw_readl(MMDC_MDMISC_OFFSET);
    //  if ((reg & MMDC_MDMISC_DDR_TYPE_MASK) ==
    //     (0x1 << MMDC_MDMISC_DDR_TYPE_OFFSET) ||
    //      cpu_is_mx6dl()) {
    //      clk_set_parent(&periph_clk, &pll2_pfd_400M);
    //      printk(KERN_INFO "Set periph_clk's parent to pll2_pfd_400M!\n");
    //  }
    
        clk_set_parent(&periph_clk, &pll2_pfd_400M);
        printk(KERN_INFO "Set periph_clk's parent to pll2_pfd_400!\n");
    }