|
|
|
@ -252,6 +252,33 @@ static int sdram_adjust_866(void) |
|
|
|
|
return 0; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Adjust sdram refresh rate to actual CPU clock |
|
|
|
|
* and set timebase source according to actual CPU clock |
|
|
|
|
*/ |
|
|
|
|
static int adjust_sdram_tbs_8xx(void) |
|
|
|
|
{ |
|
|
|
|
#if defined(CONFIG_TQM8xxL) && !defined(CONFIG_TQM866M) && \ |
|
|
|
|
!defined(CONFIG_TQM885D) |
|
|
|
|
volatile immap_t *immr = (immap_t *)CONFIG_SYS_IMMR; |
|
|
|
|
long mamr; |
|
|
|
|
long sccr; |
|
|
|
|
|
|
|
|
|
mamr = immr->im_memctl.memc_mamr; |
|
|
|
|
mamr &= ~MAMR_PTA_MSK; |
|
|
|
|
mamr |= ((gd->cpu_clk / CONFIG_SYS_PTA_PER_CLK) << MAMR_PTA_SHIFT); |
|
|
|
|
immr->im_memctl.memc_mamr = mamr; |
|
|
|
|
|
|
|
|
|
if (gd->cpu_clk < 67000000) { |
|
|
|
|
sccr = immr->im_clkrst.car_sccr; |
|
|
|
|
sccr |= SCCR_TBS; |
|
|
|
|
immr->im_clkrst.car_sccr = sccr; |
|
|
|
|
} |
|
|
|
|
#endif /* CONFIG_TQM8xxL/M, !TQM866M, !TQM885D */ |
|
|
|
|
|
|
|
|
|
return 0; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/* This function sets up PLL (init_pll_866() is called) and
|
|
|
|
|
* fills gd->cpu_clk and gd->bus_clk according to the environment |
|
|
|
|
* variable 'cpuclk' or to CONFIG_8xx_CPUCLK_DEFAULT (if 'cpuclk' |
|
|
|
@ -264,6 +291,7 @@ int get_clocks(void) |
|
|
|
|
char tmp[64]; |
|
|
|
|
long cpuclk = 0; |
|
|
|
|
long sccr_reg; |
|
|
|
|
int ret; |
|
|
|
|
|
|
|
|
|
if (getenv_f("cpuclk", tmp, sizeof (tmp)) > 0) |
|
|
|
|
cpuclk = simple_strtoul (tmp, NULL, 10) * 1000000; |
|
|
|
@ -293,7 +321,11 @@ int get_clocks(void) |
|
|
|
|
} |
|
|
|
|
immr->im_clkrst.car_sccr = sccr_reg; |
|
|
|
|
|
|
|
|
|
return sdram_adjust_866(); |
|
|
|
|
ret = sdram_adjust_866(); |
|
|
|
|
if (ret) |
|
|
|
|
return ret; |
|
|
|
|
|
|
|
|
|
return adjust_sdram_tbs_8xx(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/* Configure PLL for MPC866/859/885 CPU series
|
|
|
|
@ -369,32 +401,3 @@ static long init_pll_866 (long clk) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
#endif /* CONFIG_8xx_CPUCLK_DEFAULT */ |
|
|
|
|
|
|
|
|
|
#if defined(CONFIG_TQM8xxL) && !defined(CONFIG_TQM866M) \ |
|
|
|
|
&& !defined(CONFIG_TQM885D) |
|
|
|
|
/*
|
|
|
|
|
* Adjust sdram refresh rate to actual CPU clock |
|
|
|
|
* and set timebase source according to actual CPU clock |
|
|
|
|
*/ |
|
|
|
|
int adjust_sdram_tbs_8xx (void) |
|
|
|
|
{ |
|
|
|
|
volatile immap_t *immr = (immap_t *) CONFIG_SYS_IMMR; |
|
|
|
|
long mamr; |
|
|
|
|
long sccr; |
|
|
|
|
|
|
|
|
|
mamr = immr->im_memctl.memc_mamr; |
|
|
|
|
mamr &= ~MAMR_PTA_MSK; |
|
|
|
|
mamr |= ((gd->cpu_clk / CONFIG_SYS_PTA_PER_CLK) << MAMR_PTA_SHIFT); |
|
|
|
|
immr->im_memctl.memc_mamr = mamr; |
|
|
|
|
|
|
|
|
|
if (gd->cpu_clk < 67000000) { |
|
|
|
|
sccr = immr->im_clkrst.car_sccr; |
|
|
|
|
sccr |= SCCR_TBS; |
|
|
|
|
immr->im_clkrst.car_sccr = sccr; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return (0); |
|
|
|
|
} |
|
|
|
|
#endif /* CONFIG_TQM8xxL/M, !TQM866M, !TQM885D */ |
|
|
|
|
|
|
|
|
|
/* ------------------------------------------------------------------------- */ |
|
|
|
|