Reviewed-by: Alison Wang <alison.w...@freescale.com> Best Regards, Alison Wang
> -----Original Message----- > From: Yuan Yao [mailto:yao.y...@freescale.com] > Sent: Wednesday, October 21, 2015 6:15 PM > To: Sun York-R58495; Wang Huan-B18965 > Cc: u-boot@lists.denx.de > Subject: [PATCH 1/5] arm: ls1021a: merge SoC specific code in a separate > file > > Create a soc.c file to put the code for soc special settings. > > Signed-off-by: Yuan Yao <yao.y...@freescale.com> > --- > arch/arm/cpu/armv7/ls102xa/Makefile | 1 + > arch/arm/cpu/armv7/ls102xa/soc.c | 66 > +++++++++++++++++++++++++ > arch/arm/include/asm/arch-ls102xa/ls102xa_soc.h | 12 +++++ > board/freescale/ls1021aqds/ls1021aqds.c | 49 +----------------- > board/freescale/ls1021atwr/ls1021atwr.c | 42 +--------------- > 5 files changed, 83 insertions(+), 87 deletions(-) create mode 100644 > arch/arm/cpu/armv7/ls102xa/soc.c create mode 100644 > arch/arm/include/asm/arch-ls102xa/ls102xa_soc.h > > diff --git a/arch/arm/cpu/armv7/ls102xa/Makefile > b/arch/arm/cpu/armv7/ls102xa/Makefile > index 2d55782..24bbfba 100644 > --- a/arch/arm/cpu/armv7/ls102xa/Makefile > +++ b/arch/arm/cpu/armv7/ls102xa/Makefile > @@ -8,6 +8,7 @@ obj-y += cpu.o > obj-y += clock.o > obj-y += timer.o > obj-y += fsl_epu.o > +obj-y += soc.o > > obj-$(CONFIG_OF_LIBFDT) += fdt.o > obj-$(CONFIG_SYS_HAS_SERDES) += fsl_ls1_serdes.o ls102xa_serdes.o diff > --git a/arch/arm/cpu/armv7/ls102xa/soc.c > b/arch/arm/cpu/armv7/ls102xa/soc.c > new file mode 100644 > index 0000000..0fdd6d4 > --- /dev/null > +++ b/arch/arm/cpu/armv7/ls102xa/soc.c > @@ -0,0 +1,66 @@ > +/* > + * Copyright 2015 Freescale Semiconductor, Inc. > + * > + * SPDX-License-Identifier: GPL-2.0+ > + */ > + > +#include <common.h> > +#include <asm/arch/clock.h> > +#include <asm/io.h> > +#include <asm/arch/immap_ls102xa.h> > +#include <asm/arch/ls102xa_soc.h> > + > +unsigned int get_soc_major_rev(void) > +{ > + struct ccsr_gur __iomem *gur = (void *)(CONFIG_SYS_FSL_GUTS_ADDR); > + unsigned int svr, major; > + > + svr = in_be32(&gur->svr); > + major = SVR_MAJ(svr); > + > + return major; > +} > + > +int arch_soc_init(void) > +{ > + struct ccsr_scfg *scfg = (struct ccsr_scfg > *)CONFIG_SYS_FSL_SCFG_ADDR; > + struct ccsr_cci400 *cci = (struct ccsr_cci400 > *)CONFIG_SYS_CCI400_ADDR; > + unsigned int major; > + > +#ifdef CONFIG_FSL_QSPI > + out_be32(&scfg->qspi_cfg, SCFG_QSPI_CLKSEL); #endif > + > +#ifdef CONFIG_FSL_DCU_FB > + out_be32(&scfg->pixclkcr, SCFG_PIXCLKCR_PXCKEN); #endif > + > + /* Configure Little endian for SAI, ASRC and SPDIF */ > + out_be32(&scfg->endiancr, SCFG_ENDIANCR_LE); > + > + /* > + * Enable snoop requests and DVM message requests for > + * Slave insterface S4 (A7 core cluster) > + */ > + out_le32(&cci->slave[4].snoop_ctrl, > + CCI400_DVM_MESSAGE_REQ_EN | CCI400_SNOOP_REQ_EN); > + > + major = get_soc_major_rev(); > + if (major == SOC_MAJOR_VER_1_0) { > + /* > + * Set CCI-400 Slave interface S1, S2 Shareable Override > + * Register All transactions are treated as non-shareable > + */ > + out_le32(&cci->slave[1].sha_ord, > CCI400_SHAORD_NON_SHAREABLE); > + out_le32(&cci->slave[2].sha_ord, > CCI400_SHAORD_NON_SHAREABLE); > + > + /* Workaround for the issue that DDR could not respond to > + * barrier transaction which is generated by executing > DSB/ISB > + * instruction. Set CCI-400 control override register to > + * terminate the barrier transaction. After DDR is > initialized, > + * allow barrier transaction to DDR again */ > + out_le32(&cci->ctrl_ord, CCI400_CTRLORD_TERM_BARRIER); > + } > + > + return 0; > +} > diff --git a/arch/arm/include/asm/arch-ls102xa/ls102xa_soc.h > b/arch/arm/include/asm/arch-ls102xa/ls102xa_soc.h > new file mode 100644 > index 0000000..f10cb91 > --- /dev/null > +++ b/arch/arm/include/asm/arch-ls102xa/ls102xa_soc.h > @@ -0,0 +1,12 @@ > +/* > + * Copyright 2015 Freescale Semiconductor, Inc. > + * > + * SPDX-License-Identifier: GPL-2.0+ > + */ > + > +#ifndef __FSL_LS102XA_SOC_H > +#define __FSL_LS102XA_SOC_H > + > +unsigned int get_soc_major_rev(void); > +int arch_soc_init(void); > +#endif /* __FSL_LS102XA_SOC_H */ > diff --git a/board/freescale/ls1021aqds/ls1021aqds.c > b/board/freescale/ls1021aqds/ls1021aqds.c > index 655fc64..fd20735 100644 > --- a/board/freescale/ls1021aqds/ls1021aqds.c > +++ b/board/freescale/ls1021aqds/ls1021aqds.c > @@ -12,6 +12,7 @@ > #include <asm/arch/clock.h> > #include <asm/arch/fsl_serdes.h> > #include <asm/arch/ls102xa_stream_id.h> > +#include <asm/arch/ls102xa_soc.h> > #include <asm/arch/ls102xa_devdis.h> > #include <hwconfig.h> > #include <mmc.h> > @@ -225,17 +226,6 @@ unsigned long get_board_ddr_clk(void) > return 66666666; > } > > -unsigned int get_soc_major_rev(void) > -{ > - struct ccsr_gur __iomem *gur = (void *)(CONFIG_SYS_FSL_GUTS_ADDR); > - unsigned int svr, major; > - > - svr = in_be32(&gur->svr); > - major = SVR_MAJ(svr); > - > - return major; > -} > - > int select_i2c_ch_pca9547(u8 ch) > { > int ret; > @@ -278,8 +268,6 @@ int board_mmc_init(bd_t *bis) int > board_early_init_f(void) { > struct ccsr_scfg *scfg = (struct ccsr_scfg > *)CONFIG_SYS_FSL_SCFG_ADDR; > - struct ccsr_cci400 *cci = (struct ccsr_cci400 > *)CONFIG_SYS_CCI400_ADDR; > - unsigned int major; > > #ifdef CONFIG_TSEC_ENET > /* clear BD & FR bits for BE BD's and frame data */ @@ -290,40 > +278,7 @@ int board_early_init_f(void) > init_early_memctl_regs(); > #endif > > -#ifdef CONFIG_FSL_QSPI > - out_be32(&scfg->qspi_cfg, SCFG_QSPI_CLKSEL); > -#endif > - > -#ifdef CONFIG_FSL_DCU_FB > - out_be32(&scfg->pixclkcr, SCFG_PIXCLKCR_PXCKEN); > -#endif > - > - /* Configure Little endian for SAI, ASRC and SPDIF */ > - out_be32(&scfg->endiancr, SCFG_ENDIANCR_LE); > - > - /* > - * Enable snoop requests and DVM message requests for > - * Slave insterface S4 (A7 core cluster) > - */ > - out_le32(&cci->slave[4].snoop_ctrl, > - CCI400_DVM_MESSAGE_REQ_EN | CCI400_SNOOP_REQ_EN); > - > - major = get_soc_major_rev(); > - if (major == SOC_MAJOR_VER_1_0) { > - /* > - * Set CCI-400 Slave interface S1, S2 Shareable Override > - * Register All transactions are treated as non-shareable > - */ > - out_le32(&cci->slave[1].sha_ord, > CCI400_SHAORD_NON_SHAREABLE); > - out_le32(&cci->slave[2].sha_ord, > CCI400_SHAORD_NON_SHAREABLE); > - > - /* Workaround for the issue that DDR could not respond to > - * barrier transaction which is generated by executing > DSB/ISB > - * instruction. Set CCI-400 control override register to > - * terminate the barrier transaction. After DDR is > initialized, > - * allow barrier transaction to DDR again */ > - out_le32(&cci->ctrl_ord, CCI400_CTRLORD_TERM_BARRIER); > - } > + arch_soc_init(); > > #if defined(CONFIG_DEEP_SLEEP) > if (is_warm_boot()) > diff --git a/board/freescale/ls1021atwr/ls1021atwr.c > b/board/freescale/ls1021atwr/ls1021atwr.c > index 228dbf8..14ff575 100644 > --- a/board/freescale/ls1021atwr/ls1021atwr.c > +++ b/board/freescale/ls1021atwr/ls1021atwr.c > @@ -12,6 +12,7 @@ > #include <asm/arch/clock.h> > #include <asm/arch/fsl_serdes.h> > #include <asm/arch/ls102xa_stream_id.h> > +#include <asm/arch/ls102xa_soc.h> > #include <asm/arch/ls102xa_devdis.h> > #include <hwconfig.h> > #include <mmc.h> > @@ -223,17 +224,6 @@ int checkboard(void) > return 0; > } > > -unsigned int get_soc_major_rev(void) > -{ > - struct ccsr_gur __iomem *gur = (void *)(CONFIG_SYS_FSL_GUTS_ADDR); > - unsigned int svr, major; > - > - svr = in_be32(&gur->svr); > - major = SVR_MAJ(svr); > - > - return major; > -} > - > void ddrmc_init(void) > { > struct ccsr_ddr *ddr = (struct ccsr_ddr *)CONFIG_SYS_FSL_DDR_ADDR; > @@ -479,8 +469,6 @@ conflict: > int board_early_init_f(void) > { > struct ccsr_scfg *scfg = (struct ccsr_scfg > *)CONFIG_SYS_FSL_SCFG_ADDR; > - struct ccsr_cci400 *cci = (struct ccsr_cci400 > *)CONFIG_SYS_CCI400_ADDR; > - unsigned int major; > > #ifdef CONFIG_TSEC_ENET > /* clear BD & FR bits for BE BD's and frame data */ @@ -492,33 > +480,7 @@ int board_early_init_f(void) > init_early_memctl_regs(); > #endif > > -#ifdef CONFIG_FSL_DCU_FB > - out_be32(&scfg->pixclkcr, SCFG_PIXCLKCR_PXCKEN); > -#endif > - > -#ifdef CONFIG_FSL_QSPI > - out_be32(&scfg->qspi_cfg, SCFG_QSPI_CLKSEL); > -#endif > - > - /* Configure Little endian for SAI, ASRC and SPDIF */ > - out_be32(&scfg->endiancr, SCFG_ENDIANCR_LE); > - > - /* > - * Enable snoop requests and DVM message requests for > - * Slave insterface S4 (A7 core cluster) > - */ > - out_le32(&cci->slave[4].snoop_ctrl, > - CCI400_DVM_MESSAGE_REQ_EN | CCI400_SNOOP_REQ_EN); > - > - major = get_soc_major_rev(); > - if (major == SOC_MAJOR_VER_1_0) { > - /* > - * Set CCI-400 Slave interface S1, S2 Shareable Override > - * Register All transactions are treated as non-shareable > - */ > - out_le32(&cci->slave[1].sha_ord, > CCI400_SHAORD_NON_SHAREABLE); > - out_le32(&cci->slave[2].sha_ord, > CCI400_SHAORD_NON_SHAREABLE); > - } > + arch_soc_init(); > > #if defined(CONFIG_DEEP_SLEEP) > if (is_warm_boot()) > -- > 2.1.0.27.g96db324 _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot