On 01/06/2015 10:44 PM, Shaveta Leekha wrote: > The code provides framework for heterogeneous multicore chips based on > StarCore > and Power Architecture which are chasis-2 compliant, like B4860 and B4420 > > It will make u-boot recognize all non-ppc cores and peripherals like > SC3900/DSP CPUs, MAPLE, CPRI and print their configuration in u-boot logs. > Example boot logs of B4420: > Clock Configuration: > CPU0:1600 MHz, CPU1:1600 MHz, > DSP CPU0:1200 MHz, DSP CPU1:1200 MHz, > CCB:666.667 MHz, > DDR:800 MHz (1600 MT/s data rate) (Asynchronous), IFC:166.667 MHz > CPRI:600 MHz > MAPLE:600 MHz, MAPLE-ULB:800 MHz, MAPLE-eTVPE:1000 MHz > FMAN1: 666.667 MHz > QMAN: 333.333 MHz > > Top level changes include: > (1) Top level CONFIG to identify HETEROGENUOUS clusters > (2) CONFIGS for SC3900/DSP components > (3) Global structures like "cpu_type" and "MPC85xx_SYS_INFO" > updated for dsp cores and other components > (3) APIs to get DSP num cores and their Mask like: > cpu_dsp_mask, cpu_num_dspcores etc same as that of PowerPC > (5) Code to fetch and print SC cores and other heterogenous > device's frequencies > (6) README added for the same > > Signed-off-by: Shaveta Leekha <shav...@freescale.com> > --- > arch/powerpc/cpu/mpc85xx/cpu.c | 25 +++++ > arch/powerpc/cpu/mpc85xx/speed.c | 136 > +++++++++++++++++++++++++++++ > arch/powerpc/cpu/mpc8xxx/cpu.c | 89 +++++++++++++++++++- > arch/powerpc/include/asm/config_mpc85xx.h | 14 +++- > arch/powerpc/include/asm/processor.h | 5 + > doc/README.Heterogeneous-SoCs | 105 ++++++++++++++++++++++ > include/common.h | 2 + > include/e500.h | 11 +++ > 8 files changed, 384 insertions(+), 3 deletions(-) > create mode 100644 doc/README.Heterogeneous-SoCs > > diff --git a/arch/powerpc/cpu/mpc85xx/cpu.c b/arch/powerpc/cpu/mpc85xx/cpu.c > index 3d6ec84..69ab14c 100644 > --- a/arch/powerpc/cpu/mpc85xx/cpu.c > +++ b/arch/powerpc/cpu/mpc85xx/cpu.c > @@ -71,7 +71,9 @@ int checkcpu (void) > #endif /* CONFIG_FSL_CORENET */ > > unsigned int i, core, nr_cores = cpu_numcores(); > + unsigned int j, dsp_core, dsp_numcores = cpu_num_dspcores(); > u32 mask = cpu_mask(); > + u32 dsp_mask = cpu_dsp_mask(); > > svr = get_svr(); > major = SVR_MAJ(svr); > @@ -166,6 +168,16 @@ int checkcpu (void) > printf("CPU%d:%-4s MHz, ", core, > strmhz(buf1, sysinfo.freq_processor[core])); > } > + > +#ifdef CONFIG_HETROGENOUS_CLUSTERS > + for_each_cpu(j, dsp_core, dsp_numcores, dsp_mask) { > + if (!(j & 3)) > + printf("\n "); > + printf("DSP CPU%d:%-4s MHz, ", j, > + strmhz(buf1, sysinfo.freq_processor_dsp[dsp_core])); > + } > +#endif > + > printf("\n CCB:%-4s MHz,", strmhz(buf1, sysinfo.freq_systembus)); > printf("\n"); > > @@ -224,6 +236,19 @@ int checkcpu (void) > printf(" QE:%-4s MHz\n", strmhz(buf1, sysinfo.freq_qe)); > #endif > > +#if defined(CONFIG_SYS_CPRI) > + printf(" "); > + printf("CPRI:%-4s MHz", strmhz(buf1, sysinfo.freq_cpri)); > +#endif > + > +#if defined(CONFIG_SYS_MAPLE) > + printf("\n "); > + printf("MAPLE:%-4s MHz, ", strmhz(buf1, sysinfo.freq_maple)); > + printf("MAPLE-ULB:%-4s MHz, ", strmhz(buf1, sysinfo.freq_maple_ulb)); > + printf("MAPLE-eTVPE:%-4s MHz\n", > + strmhz(buf1, sysinfo.freq_maple_etvpe)); > +#endif > + > #ifdef CONFIG_SYS_DPAA_FMAN > for (i = 0; i < CONFIG_SYS_NUM_FMAN; i++) { > printf(" FMAN%d: %s MHz\n", i + 1, > diff --git a/arch/powerpc/cpu/mpc85xx/speed.c > b/arch/powerpc/cpu/mpc85xx/speed.c > index 7e69873..43e23a5 100644 > --- a/arch/powerpc/cpu/mpc85xx/speed.c > +++ b/arch/powerpc/cpu/mpc85xx/speed.c > @@ -35,6 +35,7 @@ void get_sys_info(sys_info_t *sys_info) > volatile ccsr_clk_t *clk = (void *)(CONFIG_SYS_FSL_CORENET_CLK_ADDR); > unsigned int cpu; > #ifdef CONFIG_SYS_FSL_QORIQ_CHASSIS2 > + unsigned int dsp_cpu; > int cc_group[12] = CONFIG_SYS_FSL_CLUSTER_CLOCKS; > #endif > __maybe_unused u32 svr; > @@ -69,6 +70,7 @@ void get_sys_info(sys_info_t *sys_info) > [14] = 4, /* CC4 PPL / 4 */ > }; > uint i, freq_c_pll[CONFIG_SYS_FSL_NUM_CC_PLLS]; > + uint rcw_tmp1, rcw_tmp2; > #if !defined(CONFIG_FM_PLAT_CLK_DIV) || !defined(CONFIG_PME_PLAT_CLK_DIV) > uint rcw_tmp; > #endif > @@ -157,6 +159,7 @@ void get_sys_info(sys_info_t *sys_info) > else > freq_c_pll[i] = sys_info->freq_systembus * ratio[i]; > } > + > #ifdef CONFIG_SYS_FSL_QORIQ_CHASSIS2 > /* > * As per CHASSIS2 architeture total 12 clusters are posible and > @@ -181,6 +184,18 @@ void get_sys_info(sys_info_t *sys_info) > sys_info->freq_processor[cpu] = > freq_c_pll[cplx_pll] / core_cplx_pll_div[c_pll_sel]; > } > + > + for_each_cpu(i, dsp_cpu, cpu_num_dspcores(), cpu_dsp_mask()) { > + int dsp_cluster = fsl_qoriq_dsp_core_to_cluster(dsp_cpu); > + u32 c_pll_sel = (in_be32 > + (&clk->clkcsr[dsp_cluster].clkcncsr) >> 27) > + & 0xf; > + u32 cplx_pll = core_cplx_PLL[c_pll_sel]; > + cplx_pll += cc_group[dsp_cluster] - 1; > + sys_info->freq_processor_dsp[dsp_cpu] = > + freq_c_pll[cplx_pll] / core_cplx_pll_div[c_pll_sel]; > + } > +
Suggest you to add #ifdef for the above change. We don't need to increase the code size for other SoCs. Please test u-boot for at least B4860 and T4240. You will see some compiling errors. York _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot