mirror of
https://github.com/linux-sunxi/u-boot-sunxi.git
synced 2024-02-12 11:16:03 +08:00
ppc/p4080: Fix synchronous frequency calculations
When DDR is in synchronous mode, the existing code assigns sysclk frequency to DDR frequency. It should be synchronous with the platform frequency. CPU frequency is based on platform frequency in synchronous mode. Also fix: * Fixes the bit mask for DDR_SYNC (RCWSR5[184]) * Corrects the detection of synchronous mode. Signed-off-by: Srikanth Srinivasan <srikanth.srinivasan@freescale.com> Signed-off-by: Dave Liu <daveliu@freescale.com> Signed-off-by: Ed Swarthout <Ed.Swarthout@freescale.com> Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
This commit is contained in:

committed by
Kumar Gala

parent
1749c3da8d
commit
ab48ca1a66
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2004,2007-2009 Freescale Semiconductor, Inc.
|
||||
* Copyright 2004,2007-2010 Freescale Semiconductor, Inc.
|
||||
* (C) Copyright 2002, 2003 Motorola Inc.
|
||||
* Xianghua Xiao (X.Xiao@motorola.com)
|
||||
*
|
||||
@ -44,21 +44,17 @@ int checkcpu (void)
|
||||
uint major, minor;
|
||||
struct cpu_type *cpu;
|
||||
char buf1[32], buf2[32];
|
||||
#ifdef CONFIG_DDR_CLK_FREQ
|
||||
volatile ccsr_gur_t *gur = (void *)(CONFIG_SYS_MPC85xx_GUTS_ADDR);
|
||||
#ifdef CONFIG_DDR_CLK_FREQ
|
||||
u32 ddr_ratio = ((gur->porpllsr) & MPC85xx_PORPLLSR_DDR_RATIO)
|
||||
>> MPC85xx_PORPLLSR_DDR_RATIO_SHIFT;
|
||||
#else
|
||||
#ifdef CONFIG_FSL_CORENET
|
||||
u32 ddr_sync = ((gur->rcwsr[5]) & FSL_CORENET_RCWSR5_DDR_SYNC)
|
||||
>> FSL_CORENET_RCWSR5_DDR_SYNC_SHIFT;
|
||||
#else
|
||||
u32 ddr_ratio = ((gur->porpllsr) & MPC85xx_PORPLLSR_DDR_RATIO)
|
||||
>> MPC85xx_PORPLLSR_DDR_RATIO_SHIFT;
|
||||
#endif
|
||||
#else
|
||||
#ifdef CONFIG_FSL_CORENET
|
||||
u32 ddr_sync = 0;
|
||||
#else
|
||||
u32 ddr_ratio = 0;
|
||||
#endif
|
||||
#endif /* CONFIG_FSL_CORENET */
|
||||
#endif /* CONFIG_DDR_CLK_FREQ */
|
||||
int i;
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2004, 2007-2009 Freescale Semiconductor, Inc.
|
||||
* Copyright 2004, 2007-2010 Freescale Semiconductor, Inc.
|
||||
*
|
||||
* (C) Copyright 2003 Motorola Inc.
|
||||
* Xianghua Xiao, (X.Xiao@motorola.com)
|
||||
@ -71,22 +71,30 @@ void get_sys_info (sys_info_t * sysInfo)
|
||||
[14] = 4, /* CC4 PPL / 4 */
|
||||
};
|
||||
uint lcrr_div, i, freqCC_PLL[4], rcw_tmp;
|
||||
uint ratio[4];
|
||||
unsigned long sysclk = CONFIG_SYS_CLK_FREQ;
|
||||
uint mem_pll_rat;
|
||||
|
||||
sysInfo->freqSystemBus = sysclk;
|
||||
sysInfo->freqDDRBus = sysclk;
|
||||
freqCC_PLL[0] = sysclk;
|
||||
freqCC_PLL[1] = sysclk;
|
||||
freqCC_PLL[2] = sysclk;
|
||||
freqCC_PLL[3] = sysclk;
|
||||
|
||||
sysInfo->freqSystemBus *= (in_be32(&gur->rcwsr[0]) >> 25) & 0x1f;
|
||||
sysInfo->freqDDRBus *= ((in_be32(&gur->rcwsr[0]) >> 17) & 0x1f);
|
||||
freqCC_PLL[0] *= (in_be32(&clk->pllc1gsr) >> 1) & 0x3f;
|
||||
freqCC_PLL[1] *= (in_be32(&clk->pllc2gsr) >> 1) & 0x3f;
|
||||
freqCC_PLL[2] *= (in_be32(&clk->pllc3gsr) >> 1) & 0x3f;
|
||||
freqCC_PLL[3] *= (in_be32(&clk->pllc4gsr) >> 1) & 0x3f;
|
||||
mem_pll_rat = (in_be32(&gur->rcwsr[0]) >> 17) & 0x1f;
|
||||
if (mem_pll_rat > 2)
|
||||
sysInfo->freqDDRBus *= mem_pll_rat;
|
||||
else
|
||||
sysInfo->freqDDRBus = sysInfo->freqSystemBus * mem_pll_rat;
|
||||
|
||||
ratio[0] = (in_be32(&clk->pllc1gsr) >> 1) & 0x3f;
|
||||
ratio[1] = (in_be32(&clk->pllc2gsr) >> 1) & 0x3f;
|
||||
ratio[2] = (in_be32(&clk->pllc3gsr) >> 1) & 0x3f;
|
||||
ratio[3] = (in_be32(&clk->pllc4gsr) >> 1) & 0x3f;
|
||||
for (i = 0; i < 4; i++) {
|
||||
if (ratio[i] > 4)
|
||||
freqCC_PLL[i] = sysclk * ratio[i];
|
||||
else
|
||||
freqCC_PLL[i] = sysInfo->freqSystemBus * ratio[i];
|
||||
}
|
||||
rcw_tmp = in_be32(&gur->rcwsr[3]);
|
||||
for (i = 0; i < cpu_numcores(); i++) {
|
||||
u32 c_pll_sel = (in_be32(&clk->clkc0csr + i*8) >> 27) & 0xf;
|
||||
|
Reference in New Issue
Block a user