> -----Original Message----- > From: York Sun [mailto:york....@nxp.com] > Sent: Thursday, March 24, 2016 1:43 AM > To: U-Boot Mailing List <u-boot@lists.denx.de> > Cc: Stuart Yoder <stuart.yo...@nxp.com>; Scott Wood <o...@buserror.net>; > Huan Wang <alison.w...@nxp.com>; york sun <york....@nxp.com>; > Prabhakar Kushwaha <prabhakar.kushw...@nxp.com>; Ramneek Mehresh > <ramneek.mehr...@freescale.com>; Pratiyush Mohan Srivastava > <pratiyush.srivast...@freescale.com>; Li Yang <le...@freescale.com>; Hou > Zhiqiang <b48...@freescale.com>; Shaohui Xie > <shaohui....@freescale.com>; Aneesh Bansal <aneesh.ban...@nxp.com>; > Jaiprakash Singh <b44...@freescale.com>; Mingkai Hu > <mingkai...@freescale.com>; Haiying Wang > <haiying.w...@freescale.com>; Albert Aribaud > <albert.u.b...@aribaud.net>; Minghuan Lian > <minghuan.l...@freescale.com>; Alexander Graf <ag...@suse.de>; Lijun > Pan <lijun....@freescale.com>; Scott Wood <scottw...@freescale.com>; > Gong Qianyu <qianyu.g...@freescale.com>; Joe Hershberger > <joe.hershber...@ni.com>; Prabhakar Kushwaha > <prabha...@freescale.com>; Simon Glass <s...@chromium.org>; Shengzhou > Liu <shengzhou....@nxp.com>; Bin Meng <bmeng...@gmail.com>; Bhupesh > Sharma <bhupesh.sha...@freescale.com>; Qianyu Gong > <qianyu.g...@nxp.com>; Ashish Kumar <ashish.ku...@nxp.com>; Thomas > Chou <tho...@wytron.com.tw>; Tang Yuantian > <yuantian.t...@freescale.com>; Alison Wang <b18...@freescale.com> > Subject: [RFC PATCH v1] armv8: LS2080A: Consolidate LS2080A and LS2085A > > LS2080A is the primary SoC, and LS2085A is a personality with AIOP > and DPAA DDR. The RDB and QDS boards support both personality. By > detecting the SVR at runtime, a single image per board can support > both SoCs. It gives users flexibility to swtich SoC without the need > to reprogram the board. > > Signed-off-by: York Sun <york....@nxp.com> > CC: Prabhakar Kushwaha <prabhakar.kushw...@nxp.com> > > --- > > arch/arm/cpu/armv8/fsl-layerscape/Makefile | 4 --- > arch/arm/cpu/armv8/fsl-layerscape/cpu.c | 9 ++++--- > .../arm/cpu/armv8/fsl-layerscape/fsl_lsch3_speed.c | 6 ++++- > arch/arm/cpu/armv8/fsl-layerscape/lowlevel.S | 2 +- > arch/arm/cpu/armv8/fsl-layerscape/soc.c | 14 +++++++++- > arch/arm/cpu/armv8/fsl-layerscape/spl.c | 4 +-- > arch/arm/include/asm/arch-fsl-layerscape/config.h | 9 ++----- > arch/arm/include/asm/arch-fsl-layerscape/cpu.h | 2 +- > .../include/asm/arch-fsl-layerscape/fsl_serdes.h | 2 +- > arch/arm/include/asm/arch-fsl-layerscape/soc.h | 2 ++ > board/freescale/ls2080a/ddr.c | 27 > +++++++++++--------- > board/freescale/ls2080a/ls2080a.c | 2 +- > board/freescale/ls2080aqds/MAINTAINERS | 2 -- > board/freescale/ls2080aqds/ddr.c | 27 > +++++++++++--------- > board/freescale/ls2080aqds/ls2080aqds.c | 2 +- > board/freescale/ls2080ardb/MAINTAINERS | 2 -- > board/freescale/ls2080ardb/ddr.c | 27 > +++++++++++--------- > board/freescale/ls2080ardb/ls2080ardb.c | 2 +- > configs/ls2085aqds_defconfig | 19 -------------- > configs/ls2085aqds_nand_defconfig | 14 ---------- > configs/ls2085ardb_defconfig | 19 -------------- > configs/ls2085ardb_nand_defconfig | 14 ---------- > drivers/net/ldpaa_eth/Makefile | 1 - > include/configs/ls2080a_common.h | 7 +---- > include/configs/ls2080a_emu.h | 7 ----- > include/configs/ls2080a_simu.h | 7 ----- > include/linux/usb/xhci-fsl.h | 2 +- > 27 files changed, 83 insertions(+), 152 deletions(-) > delete mode 100644 configs/ls2085aqds_defconfig > delete mode 100644 configs/ls2085aqds_nand_defconfig > delete mode 100644 configs/ls2085ardb_defconfig > delete mode 100644 configs/ls2085ardb_nand_defconfig > > diff --git a/arch/arm/cpu/armv8/fsl-layerscape/Makefile > b/arch/arm/cpu/armv8/fsl-layerscape/Makefile > index cce7405..5f86ef9 100644 > --- a/arch/arm/cpu/armv8/fsl-layerscape/Makefile > +++ b/arch/arm/cpu/armv8/fsl-layerscape/Makefile > @@ -25,10 +25,6 @@ ifneq ($(CONFIG_LS2080A),) > obj-$(CONFIG_SYS_HAS_SERDES) += ls2080a_serdes.o > endif > > -ifneq ($(CONFIG_LS2085A),) > -obj-$(CONFIG_SYS_HAS_SERDES) += ls2080a_serdes.o > -endif > - > ifneq ($(CONFIG_LS1043A),) > obj-$(CONFIG_SYS_HAS_SERDES) += ls1043a_serdes.o > endif > diff --git a/arch/arm/cpu/armv8/fsl-layerscape/cpu.c > b/arch/arm/cpu/armv8/fsl-layerscape/cpu.c > index 4b9e209..d939900 100644 > --- a/arch/arm/cpu/armv8/fsl-layerscape/cpu.c > +++ b/arch/arm/cpu/armv8/fsl-layerscape/cpu.c > @@ -538,12 +538,12 @@ int print_cpuinfo(void) > struct sys_info sysinfo; > char buf[32]; > unsigned int i, core; > - u32 type, rcw; > + u32 type, rcw, svr = gur_in32(&gur->svr); > > puts("SoC: "); > > cpu_name(buf); > - printf(" %s (0x%x)\n", buf, gur_in32(&gur->svr)); > + printf(" %s (0x%x)\n", buf, svr); > memset((u8 *)buf, 0x00, ARRAY_SIZE(buf)); > get_sys_info(&sysinfo); > puts("Clock Configuration:"); > @@ -564,7 +564,10 @@ int print_cpuinfo(void) > printf(" FMAN: %-4s MHz", strmhz(buf, sysinfo.freq_fman[0])); > #endif > #ifdef CONFIG_SYS_FSL_HAS_DP_DDR > - printf(" DP-DDR: %-4s MT/s", strmhz(buf, sysinfo.freq_ddrbus2)); > + if (soc_has_dp_ddr()) {
If new function soc_has_dp_ddr() is being used then CONFIG_SYS_FSL_HAS_DP_DDR should be removed. > + printf(" DP-DDR: %-4s MT/s", > + strmhz(buf, sysinfo.freq_ddrbus2)); > + } > #endif > puts("\n"); > > diff --git a/arch/arm/cpu/armv8/fsl-layerscape/fsl_lsch3_speed.c > b/arch/arm/cpu/armv8/fsl-layerscape/fsl_lsch3_speed.c > index 81cf470..d580a43 100644 > --- a/arch/arm/cpu/armv8/fsl-layerscape/fsl_lsch3_speed.c > +++ b/arch/arm/cpu/armv8/fsl-layerscape/fsl_lsch3_speed.c > @@ -97,9 +97,13 @@ void get_sys_info(struct sys_info *sys_info) > FSL_CHASSIS3_RCWSR0_MEM_PLL_RAT_SHIFT) & > FSL_CHASSIS3_RCWSR0_MEM_PLL_RAT_MASK; > #ifdef CONFIG_SYS_FSL_HAS_DP_DDR > - sys_info->freq_ddrbus2 *= (gur_in32(&gur->rcwsr[0]) >> > + if (soc_has_dp_ddr()) { If new function soc_has_dp_ddr() is being used then CONFIG_SYS_FSL_HAS_DP_DDR should be removed. > + sys_info->freq_ddrbus2 *= (gur_in32(&gur->rcwsr[0]) >> > FSL_CHASSIS3_RCWSR0_MEM2_PLL_RAT_SHIFT) & > FSL_CHASSIS3_RCWSR0_MEM2_PLL_RAT_MASK; > + } else { > + sys_info->freq_ddrbus2 = 0; > + } > #endif > > for (i = 0; i < CONFIG_SYS_FSL_NUM_CC_PLLS; i++) { > diff --git a/arch/arm/cpu/armv8/fsl-layerscape/lowlevel.S > b/arch/arm/cpu/armv8/fsl-layerscape/lowlevel.S > index 9c69ed1..04831ca 100644 > --- a/arch/arm/cpu/armv8/fsl-layerscape/lowlevel.S > +++ b/arch/arm/cpu/armv8/fsl-layerscape/lowlevel.S > @@ -20,7 +20,7 @@ ENTRY(lowlevel_init) > #ifdef CONFIG_FSL_LSCH3 > > /* Set Wuo bit for RN-I 20 */ > -#if defined(CONFIG_LS2085A) || defined (CONFIG_LS2080A) > +#ifdef CONFIG_LS2080A > ldr x0, =CCI_AUX_CONTROL_BASE(20) > ldr x1, =0x00000010 > bl ccn504_set_aux > diff --git a/arch/arm/cpu/armv8/fsl-layerscape/soc.c > b/arch/arm/cpu/armv8/fsl-layerscape/soc.c > index 213ce3a..d609d81 100644 > --- a/arch/arm/cpu/armv8/fsl-layerscape/soc.c > +++ b/arch/arm/cpu/armv8/fsl-layerscape/soc.c > @@ -18,7 +18,19 @@ > > DECLARE_GLOBAL_DATA_PTR; > > -#if defined(CONFIG_LS2080A) || defined(CONFIG_LS2085A) > +bool soc_has_dp_ddr(void) > +{ > + struct ccsr_gur __iomem *gur = (void > *)(CONFIG_SYS_FSL_GUTS_ADDR); > + u32 svr = gur_in32(&gur->svr); > + > + /* LS2085A has DP_DDR */ > + if (SVR_SOC_VER(svr) == SVR_LS2085) > + return true; > + > + return false; > +} > + > +#ifdef CONFIG_LS2080A > /* > * This erratum requires setting a value to eddrtqcr1 to > * optimal the DDR performance. > diff --git a/arch/arm/cpu/armv8/fsl-layerscape/spl.c > b/arch/arm/cpu/armv8/fsl-layerscape/spl.c > index f434c44..c1229c8 100644 > --- a/arch/arm/cpu/armv8/fsl-layerscape/spl.c > +++ b/arch/arm/cpu/armv8/fsl-layerscape/spl.c > @@ -46,7 +46,7 @@ void board_init_f(ulong dummy) > { > /* Clear global data */ > memset((void *)gd, 0, sizeof(gd_t)); > -#if defined(CONFIG_LS2080A) || defined(CONFIG_LS2085A) > +#ifdef CONFIG_LS2080A Why cannot this config be removed? It looks to be part of generic flow and can be used in future Layerscape SoCs. > arch_cpu_init(); > #endif > #ifdef CONFIG_FSL_IFC > @@ -54,7 +54,7 @@ void board_init_f(ulong dummy) > #endif > board_early_init_f(); > timer_init(); > -#if defined(CONFIG_LS2080A) || defined(CONFIG_LS2085A) > +#ifdef CONFIG_LS2080A Same as above > env_init(); > #endif > get_clocks(); > diff --git a/arch/arm/include/asm/arch-fsl-layerscape/config.h > b/arch/arm/include/asm/arch-fsl-layerscape/config.h > index bfaece2..6ca4bc2 100644 > --- a/arch/arm/include/asm/arch-fsl-layerscape/config.h > +++ b/arch/arm/include/asm/arch-fsl-layerscape/config.h > @@ -23,16 +23,11 @@ > */ > #define CONFIG_SYS_MEM_RESERVE_SECURE (2048 * 1024) /* > 2MB */ > > -#if defined(CONFIG_LS2080A) || defined(CONFIG_LS2085A) > +#ifdef CONFIG_LS2080A > #define CONFIG_MAX_CPUS 16 > #define CONFIG_SYS_FSL_IFC_BANK_COUNT 8 > -#ifdef CONFIG_LS2080A > -#define CONFIG_NUM_DDR_CONTROLLERS 2 > -#endif > -#ifdef CONFIG_LS2085A > #define CONFIG_NUM_DDR_CONTROLLERS 3 > -#define CONFIG_SYS_FSL_HAS_DP_DDR > -#endif > +#define CONFIG_SYS_FSL_HAS_DP_DDR /* Runtime check to > confirm */ > #define CONFIG_SYS_FSL_CLUSTER_CLOCKS { 1, 1, 4, 4 } > #define SRDS_MAX_LANES 8 > #define CONFIG_SYS_FSL_SRDS_1 > diff --git a/arch/arm/include/asm/arch-fsl-layerscape/cpu.h > b/arch/arm/include/asm/arch-fsl-layerscape/cpu.h > index 93bbda3..71c428f 100644 > --- a/arch/arm/include/asm/arch-fsl-layerscape/cpu.h > +++ b/arch/arm/include/asm/arch-fsl-layerscape/cpu.h > @@ -203,7 +203,7 @@ static const struct sys_mmu_table final_mmu_table[] > = { > { CONFIG_SYS_PCIE3_PHYS_ADDR, > CONFIG_SYS_PCIE3_PHYS_ADDR, > CONFIG_SYS_PCIE3_PHYS_SIZE, MT_DEVICE_NGNRNE, > PTE_BLOCK_NON_SHARE | PTE_BLOCK_PXN | PTE_BLOCK_UXN }, > -#if defined(CONFIG_LS2080A) || defined(CONFIG_LS2085A) > +#ifdef CONFIG_LS2080A I will propose to use #ifdef CONFIG_SYS_PCIE4_PHYS_ADDR > { CONFIG_SYS_PCIE4_PHYS_ADDR, > CONFIG_SYS_PCIE4_PHYS_ADDR, > CONFIG_SYS_PCIE4_PHYS_SIZE, MT_DEVICE_NGNRNE, > PTE_BLOCK_NON_SHARE | PTE_BLOCK_PXN | PTE_BLOCK_UXN }, > diff --git a/arch/arm/include/asm/arch-fsl-layerscape/fsl_serdes.h > b/arch/arm/include/asm/arch-fsl-layerscape/fsl_serdes.h > index d1fbde7..f71c2c1 100644 > --- a/arch/arm/include/asm/arch-fsl-layerscape/fsl_serdes.h > +++ b/arch/arm/include/asm/arch-fsl-layerscape/fsl_serdes.h > @@ -9,7 +9,7 @@ > > #include <config.h> > > -#if defined(CONFIG_LS2080A) || defined(CONFIG_LS2085A) > +#ifdef CONFIG_LS2080A Use CONFIG_FSL_LSCH3, as it will be used future SOCs also. > enum srds_prtcl { > NONE = 0, > PCIE1, > diff --git a/arch/arm/include/asm/arch-fsl-layerscape/soc.h > b/arch/arm/include/asm/arch-fsl-layerscape/soc.h > index ea78e15..0916897 100644 > --- a/arch/arm/include/asm/arch-fsl-layerscape/soc.h > +++ b/arch/arm/include/asm/arch-fsl-layerscape/soc.h > @@ -93,4 +93,6 @@ void cpu_name(char *name); > #ifdef CONFIG_SYS_FSL_ERRATUM_A009635 > void erratum_a009635(void); > #endif <snip> > @@ -7,4 +7,3 @@ > obj-y += ldpaa_wriop.o > obj-y += ldpaa_eth.o > obj-$(CONFIG_LS2080A) += ls2080a.o > -obj-$(CONFIG_LS2085A) += ls2080a.o > diff --git a/include/configs/ls2080a_common.h > b/include/configs/ls2080a_common.h > index 13ce349..57e2a29 100644 > --- a/include/configs/ls2080a_common.h > +++ b/include/configs/ls2080a_common.h > @@ -171,10 +171,9 @@ unsigned long long get_qixis_addr(void); > #define CONFIG_SYS_LS_MC_DRAM_DPC_OFFSET 0x00F00000 > #define CONFIG_SYS_LS_MC_DPL_MAX_LENGTH 0x20000 > #define CONFIG_SYS_LS_MC_DRAM_DPL_OFFSET 0x00F20000 > -#ifdef CONFIG_LS2085A > +/* For LS2085A */ > #define CONFIG_SYS_LS_MC_AIOP_IMG_MAX_LENGTH 0x200000 > #define CONFIG_SYS_LS_MC_DRAM_AIOP_IMG_OFFSET 0x07000000 > -#endif CONFIG_SYS_LS_MC_DRAM_AIOP_IMG_OFFSET --> permanent enabled. LS2080A (NON-AIOP) personality may execute AIOP code code in driver/net/fsl-mc/mc.c. Need to put under svr check. --prabhakar _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot