aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKuldeep Singh <kuldeep.singh@nxp.com>2021-08-10 11:20:09 +0530
committerPriyanka Jain <priyanka.jain@nxp.com>2021-08-18 15:55:15 +0530
commit961928397f75a5099740519d79ef594eeec87238 (patch)
tree63cba40798d39fba8fd9e27dcfea263be5159fe5
parent5528c90e2dd801c35e0c7a4c9deb84f37d15ca08 (diff)
downloadu-boot-961928397f75a5099740519d79ef594eeec87238.zip
u-boot-961928397f75a5099740519d79ef594eeec87238.tar.gz
u-boot-961928397f75a5099740519d79ef594eeec87238.tar.bz2
board: ls2088ardb: Extend cs4340_get_fw_addr() functionality
LS2088A-RDB supports TFA boot source and has 2 nor banks(default and altbank) and QSPI as boot source. The corresponding defconfig can only have one entry defined and therefore, extend cs4340_get_fw_addr() function to overwrite firmware address which will be later used in cortina firmware. Signed-off-by: Kuldeep Singh <kuldeep.singh@nxp.com> Reviewed-by: Priyanka Jain <priyanka.jain@nxp.com>
-rw-r--r--board/freescale/ls2080ardb/ls2080ardb.c38
1 files changed, 38 insertions, 0 deletions
diff --git a/board/freescale/ls2080ardb/ls2080ardb.c b/board/freescale/ls2080ardb/ls2080ardb.c
index 6504cf7..e8722f2 100644
--- a/board/freescale/ls2080ardb/ls2080ardb.c
+++ b/board/freescale/ls2080ardb/ls2080ardb.c
@@ -33,6 +33,9 @@
#endif
#include "../common/vid.h"
+#define CORTINA_FW_ADDR_IFCNOR 0x580980000
+#define CORTINA_FW_ADDR_IFCNOR_ALTBANK 0x584980000
+#define CORTINA_FW_ADDR_QSPI 0x980000
#define PIN_MUX_SEL_SDHC 0x00
#define PIN_MUX_SEL_DSPI 0x0a
@@ -235,6 +238,41 @@ int config_board_mux(int ctrl_type)
return 0;
}
+ulong *cs4340_get_fw_addr(void)
+{
+#ifdef CONFIG_TFABOOT
+ struct ccsr_gur __iomem *gur = (void *)(CONFIG_SYS_FSL_GUTS_ADDR);
+ u32 svr = gur_in32(&gur->svr);
+#endif
+ ulong cortina_fw_addr = CONFIG_CORTINA_FW_ADDR;
+
+#ifdef CONFIG_TFABOOT
+ /* LS2088A TFA boot */
+ if (SVR_SOC_VER(svr) == SVR_LS2088A) {
+ enum boot_src src = get_boot_src();
+ u8 sw;
+
+ switch (src) {
+ case BOOT_SOURCE_IFC_NOR:
+ sw = QIXIS_READ(brdcfg[0]);
+ sw = (sw & 0x0f);
+ if (sw == 0)
+ cortina_fw_addr = CORTINA_FW_ADDR_IFCNOR;
+ else if (sw == 4)
+ cortina_fw_addr = CORTINA_FW_ADDR_IFCNOR_ALTBANK;
+ break;
+ case BOOT_SOURCE_QSPI_NOR:
+ /* Only one bank in QSPI */
+ cortina_fw_addr = CORTINA_FW_ADDR_QSPI;
+ break;
+ default:
+ printf("WARNING: Boot source not found\n");
+ }
+ }
+#endif
+ return (ulong *)cortina_fw_addr;
+}
+
int board_init(void)
{
#ifdef CONFIG_FSL_MC_ENET