On 10/25/2016 07:10 PM, Yuan Yao wrote: > From: Yuan Yao <yao.y...@nxp.com> > > The default configuration for QSPI AHB bus can't support 16MB+. > But some flash on NXP layerscape board are more than 16MB.
So what do you do? Is this an erratum workaround? If yes, please refer the erratum number. > > Signed-off-by: Yuan Yao <yao.y...@nxp.com> > --- > arch/arm/cpu/armv8/fsl-layerscape/soc.c | 37 > ++++++++++++++++++++++ > .../include/asm/arch-fsl-layerscape/immap_lsch2.h | 1 + > .../include/asm/arch-fsl-layerscape/immap_lsch3.h | 1 + > include/configs/ls1012a_common.h | 1 + > include/configs/ls1046ardb.h | 1 + > 5 files changed, 41 insertions(+) > > diff --git a/arch/arm/cpu/armv8/fsl-layerscape/soc.c > b/arch/arm/cpu/armv8/fsl-layerscape/soc.c > index d68eeba..18d753e 100644 > --- a/arch/arm/cpu/armv8/fsl-layerscape/soc.c > +++ b/arch/arm/cpu/armv8/fsl-layerscape/soc.c > @@ -370,6 +370,40 @@ void fsl_lsch2_early_init_f(void) > } > #endif > > +#ifdef CONFIG_QSPI_AHB_INIT > +/* Enable 4bytes address support and fast read */ > +int qspi_ahb_init(void) > +{ > + u32 *qspi_lut, lut_key, *qspi_key; > + > + qspi_key = (void *)CONFIG_SYS_QSPI_ADDR + 0x300; > + qspi_lut = (void *)CONFIG_SYS_QSPI_ADDR + 0x310; > + > + lut_key = in_be32(qspi_key); > + > + if (lut_key == 0x5af05af0) { > + /* That means the register is BE */ > + out_be32(qspi_key, 0x5af05af0); > + out_be32(qspi_key + 1, 0x00000002); > + out_be32(qspi_lut, 0x0820040c); > + out_be32(qspi_lut + 1, 0x1c080c08); > + out_be32(qspi_lut + 2, 0x00002400); > + out_be32(qspi_key, 0x5af05af0); > + out_be32(qspi_key + 1, 0x00000001); > + } else { > + /* That means the register is LE */ > + out_le32(qspi_key, 0x5af05af0); > + out_le32(qspi_key + 1, 0x00000002); > + out_le32(qspi_lut, 0x0820040c); > + out_le32(qspi_lut + 1, 0x1c080c08); > + out_le32(qspi_lut + 2, 0x00002400); > + out_le32(qspi_key, 0x5af05af0); > + out_le32(qspi_key + 1, 0x00000001); > + } What do these sequences do? Put a blank line before return. > + return 0; > +} > +#endif > + > #ifdef CONFIG_BOARD_LATE_INIT > int board_late_init(void) > { > @@ -379,6 +413,9 @@ int board_late_init(void) > #ifdef CONFIG_CHAIN_OF_TRUST > fsl_setenv_chain_of_trust(); > #endif > +#ifdef CONFIG_QSPI_AHB_INIT > + qspi_ahb_init(); > +#endif > > return 0; > } > diff --git a/arch/arm/include/asm/arch-fsl-layerscape/immap_lsch2.h > b/arch/arm/include/asm/arch-fsl-layerscape/immap_lsch2.h > index d88543d..a28b1fd 100644 > --- a/arch/arm/include/asm/arch-fsl-layerscape/immap_lsch2.h > +++ b/arch/arm/include/asm/arch-fsl-layerscape/immap_lsch2.h > @@ -18,6 +18,7 @@ > #define CONFIG_SYS_CCI400_ADDR (CONFIG_SYS_IMMR + > 0x00180000) > #define CONFIG_SYS_GIC400_ADDR (CONFIG_SYS_IMMR + > 0x00400000) > #define CONFIG_SYS_IFC_ADDR (CONFIG_SYS_IMMR + 0x00530000) > +#define CONFIG_SYS_QSPI_ADDR (CONFIG_SYS_IMMR + 0x00550000) > #define CONFIG_SYS_FSL_ESDHC_ADDR (CONFIG_SYS_IMMR + 0x00560000) > #define CONFIG_SYS_FSL_CSU_ADDR (CONFIG_SYS_IMMR + > 0x00510000) > #define CONFIG_SYS_FSL_GUTS_ADDR (CONFIG_SYS_IMMR + 0x00ee0000) > diff --git a/arch/arm/include/asm/arch-fsl-layerscape/immap_lsch3.h > b/arch/arm/include/asm/arch-fsl-layerscape/immap_lsch3.h > index 7acba27..8aefc76 100644 > --- a/arch/arm/include/asm/arch-fsl-layerscape/immap_lsch3.h > +++ b/arch/arm/include/asm/arch-fsl-layerscape/immap_lsch3.h > @@ -19,6 +19,7 @@ > #define CONFIG_SYS_FSL_CH3_CLK_GRPA_ADDR (CONFIG_SYS_IMMR + 0x00300000) > #define CONFIG_SYS_FSL_CH3_CLK_GRPB_ADDR (CONFIG_SYS_IMMR + 0x00310000) > #define CONFIG_SYS_FSL_CH3_CLK_CTRL_ADDR (CONFIG_SYS_IMMR + 0x00370000) > +#define CONFIG_SYS_QSPI_ADDR (CONFIG_SYS_IMMR + 0x010c0000) > #define CONFIG_SYS_FSL_ESDHC_ADDR (CONFIG_SYS_IMMR + 0x01140000) > #define CONFIG_SYS_IFC_ADDR (CONFIG_SYS_IMMR + 0x01240000) > #define CONFIG_SYS_NS16550_COM1 (CONFIG_SYS_IMMR + > 0x011C0500) > diff --git a/include/configs/ls1012a_common.h > b/include/configs/ls1012a_common.h > index 80603c9..c1e1102 100644 > --- a/include/configs/ls1012a_common.h > +++ b/include/configs/ls1012a_common.h > @@ -61,6 +61,7 @@ > > #define FSL_QSPI_FLASH_SIZE (1 << 24) > #define FSL_QSPI_FLASH_NUM 2 > +#define CONFIG_QSPI_AHB_INIT > > /* > * Environment > diff --git a/include/configs/ls1046ardb.h b/include/configs/ls1046ardb.h > index 2fe8fc1..662ecb1 100644 > --- a/include/configs/ls1046ardb.h > +++ b/include/configs/ls1046ardb.h > @@ -209,6 +209,7 @@ > #define FSL_QSPI_FLASH_SIZE (1 << 26) > #define FSL_QSPI_FLASH_NUM 2 > #define CONFIG_SPI_FLASH_BAR > +#define CONFIG_QSPI_AHB_INIT Is it really a config option? Is it really board-dependent? Does it compile on the latest master branch? York _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot