[U-Boot] [PATCH] fsl-lsch3: soc: Enable AHB support flexspi controller

Ashish Kumar Ashish.Kumar at nxp.com
Tue Sep 25 08:43:00 UTC 2018


Enable AHB support for flexspi controller interface meaning
memory can be accessed via md command using absolute addresses

Signed-off-by: Yogesh Gaur <yogeshnarayan.gaur at nxp.com>
Signed-off-by: Rajat Srivastava <rajat.srivastava at nxp.com>
Signed-off-by: Ashish Kumar <Ashish.Kumar at nxp.com>
---
 arch/arm/cpu/armv8/fsl-layerscape/Kconfig | 10 ++++++
 arch/arm/cpu/armv8/fsl-layerscape/soc.c   | 42 +++++++++++++++++++++++
 2 files changed, 52 insertions(+)

diff --git a/arch/arm/cpu/armv8/fsl-layerscape/Kconfig b/arch/arm/cpu/armv8/fsl-layerscape/Kconfig
index 5280d33ec8..8d66783b7c 100644
--- a/arch/arm/cpu/armv8/fsl-layerscape/Kconfig
+++ b/arch/arm/cpu/armv8/fsl-layerscape/Kconfig
@@ -327,6 +327,16 @@ config SYS_FSPI_AHB_INIT
 	  performed. Default LUT programmed in AHB mode is Fast Read command
 	  with 4-byte addressing enabled.
 
+config FSPI_AHB_EN_4BYTE
+	bool "Enable 4-byte Fast Read cmd for AHB mode"
+	depends on NXP_FSPI
+	default n
+	help
+	  The default setting for FSPI AHB bus just supports 3-byte addressing.
+	  But some FSPI flash sizes are up to 64MBytes.
+	  This flag enables fast read cmd for AHB mode and modifies required
+	  LUT to support full FSPI flash.
+
 config SYS_CCI400_OFFSET
 	hex "Offset for CCI400 base"
 	depends on SYS_FSL_HAS_CCI400
diff --git a/arch/arm/cpu/armv8/fsl-layerscape/soc.c b/arch/arm/cpu/armv8/fsl-layerscape/soc.c
index 3f15cb08ff..60beb0dc96 100644
--- a/arch/arm/cpu/armv8/fsl-layerscape/soc.c
+++ b/arch/arm/cpu/armv8/fsl-layerscape/soc.c
@@ -640,6 +640,45 @@ void fsl_lsch2_early_init_f(void)
 }
 #endif
 
+#ifdef CONFIG_FSPI_AHB_EN_4BYTE
+int fspi_ahb_init(void)
+{
+	/* Enable 4bytes address support and fast read */
+	u32 *fspi_lut, lut_key, *fspi_key;
+
+	fspi_key = (void *)SYS_FSL_FSPI_ADDR + 0x18;
+	fspi_lut = (void *)SYS_FSL_FSPI_ADDR + 0x200;
+
+	lut_key = in_be32(fspi_key);
+
+	if (lut_key == 0x5af05af0) {
+		/* That means the register is BE */
+		out_be32(fspi_key, 0x5af05af0);
+		/* Unlock the lut table */
+		out_be32(fspi_key + 1, 0x00000002);
+		out_be32(fspi_lut, 0x0820040c);
+		out_be32(fspi_lut + 1, 0x24003008);
+		out_be32(fspi_lut + 2, 0x00000000);
+		/* Lock the lut table */
+		out_be32(fspi_key, 0x5af05af0);
+		out_be32(fspi_key + 1, 0x00000001);
+	} else {
+		/* That means the register is LE */
+		out_le32(fspi_key, 0x5af05af0);
+		/* Unlock the lut table */
+		out_le32(fspi_key + 1, 0x00000002);
+		out_le32(fspi_lut, 0x0820040c);
+		out_le32(fspi_lut + 1, 0x24003008);
+		out_le32(fspi_lut + 2, 0x00000000);
+		/* Lock the lut table */
+		out_le32(fspi_key, 0x5af05af0);
+		out_le32(fspi_key + 1, 0x00000001);
+	}
+
+	return 0;
+}
+#endif
+
 #ifdef CONFIG_QSPI_AHB_INIT
 /* Enable 4bytes address support and fast read */
 int qspi_ahb_init(void)
@@ -688,6 +727,9 @@ int board_late_init(void)
 #ifdef CONFIG_QSPI_AHB_INIT
 	qspi_ahb_init();
 #endif
+#ifdef CONFIG_FSPI_AHB_EN_4BYTE
+	fspi_ahb_init();
+#endif
 
 	return 0;
 }
-- 
2.17.1



More information about the U-Boot mailing list