powerpc/85xx: Enhance get_sys_info() to check clocking mode
PATCH 1/1 powerpc/85xx: Enhance get_sys_info() to check clocking mode
T1040 and it's variants provide "Single Oscillator Source" Reference Clock Mode.
In this mode, single onboard oscillator(DIFF_SYSCLK) can provide the reference clock (100MHz) to the following PLLs:
? Platform PLL
? Core PLLs
? USB PLL
? DDR PLL, etc
The cfg_eng_use0 of porsr1 register identifies whether the SYSCLK (single-ended) or DIFF_SYSCLK (differential) is selected as the clock input to the chip.
get_sys_info has been enhanced to add the diff_sysclk so that the various drivers can be made aware of ths diff sysclk configuration and act accordingly.
Other changes:
-single_src to ddr_refclk_sel, as it is use for checking ddr reference clock -Removed the print of single_src from get_sys_info as this will be -printed whenever somebody calls get_sys_info which is not appropriate. -Add print of single_src in checkcpu as it is called only once during initialization
--- arch/powerpc/cpu/mpc85xx/cpu.c | 5 +++++ arch/powerpc/cpu/mpc85xx/speed.c | 21 +++++++++++++-------- arch/powerpc/include/asm/immap_85xx.h | 6 ++++++ include/e500.h | 3 +++ 4 files changed, 27 insertions(+), 8 deletions(-)
arch/powerpc/cpu/mpc85xx/cpu.c +5 -0
@@ -129,6 +129,11 @@ int checkcpu (void)get_sys_info (&sysinfo); +#ifdef CONFIG_SYS_FSL_SINGLE_SOURCE_CLK +if (sysinfo.diff_sysclk ==1 ) +puts ("Single Source Clock Configuration\n" ); +#endif +puts ("Clock Configuration:" );for_each_cpu (i, core, nr_cores, mask) {if (!(i &3 ))
arch/powerpc/cpu/mpc85xx/speed.c +13 -8
@@ -74,28 +74,33 @@ void get_sys_info(sys_info_t *sys_info)uint ratio[CONFIG_SYS_FSL_NUM_CC_PLLS ];unsigned long sysclk =CONFIG_SYS_CLK_FREQ ;uint mem_pll_rat; -#ifdef CONFIG_SYS_FSL_SINGLE_SOURCE_CLK -uint single_src; -#endif sys_info->freq_systembus = sysclk;#ifdef CONFIG_SYS_FSL_SINGLE_SOURCE_CLK +uint ddr_refclk_sel; +unsigned int porsr1_sys_clk; + porsr1_sys_clk =in_be32 (&gur->porsr1) >>FSL_DCFG_PORSR1_SYSCLK_SHIFT + &FSL_DCFG_PORSR1_SYSCLK_MASK ; +if (porsr1_sys_clk ==FSL_DCFG_PORSR1_SYSCLK_DIFF ) + sys_info->diff_sysclk =1 ; +else + sys_info->diff_sysclk =0 ; +/* * DDR_REFCLK_SEL rcw bit is used to determine if DDR PLLS * are driven by separate DDR Refclock or single source * differential clock. */ - single_src = (in_be32 (&gur->rcwsr[5 ]) >> + ddr_refclk_sel = (in_be32 (&gur->rcwsr[5 ]) >>FSL_CORENET2_RCWSR5_DDR_REFCLK_SEL_SHIFT ) &FSL_CORENET2_RCWSR5_DDR_REFCLK_SEL_MASK ;/* -* For single source clocking, both ddrclock and syclock +* For single source clocking, both ddrclock and sysclock * are driven by differential sysclock. */ -if (single_src ==FSL_CORENET2_RCWSR5_DDR_REFCLK_SINGLE_CLK ) { -printf ("Single Source Clock Configuration\n" ); +if (ddr_refclk_sel ==FSL_CORENET2_RCWSR5_DDR_REFCLK_SINGLE_CLK ) sys_info->freq_ddrbus =CONFIG_SYS_CLK_FREQ ; - } else + else#endif #ifdef CONFIG_DDR_CLK_FREQ sys_info->freq_ddrbus =CONFIG_DDR_CLK_FREQ ;
arch/powerpc/include/asm/immap_85xx.h +6 -0
@@ -1583,6 +1583,12 @@ typedef struct cpc_corenet { typedef struct ccsr_gur { u32 porsr1; /* POR status 1 */ u32 porsr2; /* POR status 2 */ +#ifdef CONFIG_SYS_FSL_SINGLE_SOURCE_CLK +#define FSL_DCFG_PORSR1_SYSCLK_SHIFT 15 +#define FSL_DCFG_PORSR1_SYSCLK_MASK 0x1 +#define FSL_DCFG_PORSR1_SYSCLK_SINGLE_ENDED 0x1 +#define FSL_DCFG_PORSR1_SYSCLK_DIFF 0x0 +#endif u8 res_008[0x20-0x8]; u32 gpporcr1; /* General-purpose POR configuration */ u32 gpporcr2; /* General-purpose POR configuration 2 */
include/e500.h +3 -0
@@ -24,6 +24,9 @@ typedef struct#ifdef CONFIG_SYS_DPAA_PME unsigned long freq_pme;#endif +#ifdef CONFIG_SYS_FSL_SINGLE_SOURCE_CLK +unsigned char diff_sysclk; +#endif } MPC85xx_SYS_INFO;#endif /* _ASMLANGUAGE */
Signature · 1 line
1.6.5.6
PATCH 1/1 powerpc/85xx: Enhance get_sys_info() to check clocking mode
Quoted 22 lines · Vijay Rai
T1040 and it's variants provide "Single Oscillator Source" Reference Clock Mode.
In this mode, single onboard
oscillator(DIFF_SYSCLK)can provide the reference clock (100MHz) to the following PLLs:
? Platform PLL
? Core PLLs
? USB PLL
? DDR PLL, etcThe
cfg_eng_use0of porsr1 register identifies whether the SYSCLK (single-ended) orDIFF_SYSCLK(differential) is selected as the clock input to the chip.
get_sys_infohas been enhanced to add thediff_sysclkso that the various drivers can be made aware of ths diff sysclk configuration and act accordingly.Other changes:
(quoted diff) +0
-4-single_src to ddr_refclk_sel, as it is use for checking ddr reference clock -Removed the print of single_src from get_sys_info as this will be -printed whenever somebody calls get_sys_info which is not appropriate. -Add print of single_src in checkcpu as it is called only once during initialization
Quoted 4 lines
Signed-off-by Poonam Aggrwal <[email protected]>Signed-off-by Priyanka Jain <[email protected]>Signed-off-by Vijay Rai <[email protected]>---
Applied to u-boot-mpc85xx/master, thanks.
York