]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
board: ls2088ardb: Extend cs4340_get_fw_addr() functionality
authorKuldeep Singh <kuldeep.singh@nxp.com>
Tue, 10 Aug 2021 05:50:09 +0000 (11:20 +0530)
committerPriyanka Jain <priyanka.jain@nxp.com>
Wed, 18 Aug 2021 10:25:15 +0000 (15:55 +0530)
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>
board/freescale/ls2080ardb/ls2080ardb.c

index 6504cf768f191d21de5daa0a1eab37bf318b786c..e8722f20c139489173f72dd4ed3072a6a4827f52 100644 (file)
@@ -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