하드웨어
글 수 321
2014.05.16 22:44:16 (*.134.169.166)
13274
부트로더 버젼은 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");
}