Like already done for i.MX8MM and i.MX8MP, we can considerably reduce
i.MX8MN board code duplication by moving the TF-A loading and jumping
code into common helpers.

Signed-off-by: Ahmad Fatoum <[email protected]>
---
 arch/arm/boards/nxp-imx8mn-evk/lowlevel.c | 31 +------------------
 arch/arm/mach-imx/atf.c                   | 36 +++++++++++++++++++++++
 arch/arm/mach-imx/include/mach/xload.h    |  1 +
 3 files changed, 38 insertions(+), 30 deletions(-)

diff --git a/arch/arm/boards/nxp-imx8mn-evk/lowlevel.c 
b/arch/arm/boards/nxp-imx8mn-evk/lowlevel.c
index 9e44d343b7ed..ddc6e4fd2b29 100644
--- a/arch/arm/boards/nxp-imx8mn-evk/lowlevel.c
+++ b/arch/arm/boards/nxp-imx8mn-evk/lowlevel.c
@@ -132,11 +132,7 @@ extern struct dram_timing_info imx8mn_evk_ddr4_timing, 
imx8mn_evk_lpddr4_timing;
 static void start_atf(void)
 {
        struct dram_timing_info *dram_timing = &imx8mn_evk_lpddr4_timing;
-       size_t bl31_size;
-       const u8 *bl31;
-       enum bootsource src;
        void *i2c;
-       int instance;
        int ret;
 
        /*
@@ -163,32 +159,7 @@ static void start_atf(void)
 
        imx8mn_ddr_init(dram_timing, dram_timing->dram_type);
 
-       imx8mn_get_boot_source(&src, &instance);
-       switch (src) {
-       case BOOTSOURCE_MMC:
-               imx8mn_esdhc_load_image(instance, false);
-               break;
-       default:
-               printf("Unhandled bootsource BOOTSOURCE_%d\n", src);
-               hang();
-       }
-
-       /*
-        * On completion the TF-A will jump to MX8M_ATF_BL33_BASE_ADDR
-        * in EL2. Copy the image there, but replace the PBL part of
-        * that image with ourselves. On a high assurance boot only the
-        * currently running code is validated and contains the checksum
-        * for the piggy data, so we need to ensure that we are running
-        * the same code in DRAM.
-        */
-       memcpy((void *)MX8M_ATF_BL33_BASE_ADDR,
-              __image_start, barebox_pbl_size);
-
-       get_builtin_firmware(imx8mn_bl31_bin, &bl31, &bl31_size);
-
-       imx8mn_atf_load_bl31(bl31, bl31_size);
-
-       /* not reached */
+       imx8mn_load_and_start_image_via_tfa();
 }
 
 /*
diff --git a/arch/arm/mach-imx/atf.c b/arch/arm/mach-imx/atf.c
index 8fc523d3de61..bb9e04c9746b 100644
--- a/arch/arm/mach-imx/atf.c
+++ b/arch/arm/mach-imx/atf.c
@@ -168,3 +168,39 @@ void imx8mp_load_and_start_image_via_tfa(void)
 
        /* not reached */
 }
+
+void imx8mn_load_and_start_image_via_tfa(void)
+{
+       size_t bl31_size;
+       const u8 *bl31;
+       enum bootsource src;
+       int instance;
+
+       imx8mn_get_boot_source(&src, &instance);
+       switch (src) {
+       case BOOTSOURCE_MMC:
+               imx8mn_esdhc_load_image(instance, false);
+               break;
+       default:
+               printf("Unhandled bootsource BOOTSOURCE_%d\n", src);
+               hang();
+       }
+
+
+       /*
+        * On completion the TF-A will jump to MX8M_ATF_BL33_BASE_ADDR
+        * in EL2. Copy the image there, but replace the PBL part of
+        * that image with ourselves. On a high assurance boot only the
+        * currently running code is validated and contains the checksum
+        * for the piggy data, so we need to ensure that we are running
+        * the same code in DRAM.
+        */
+       memcpy((void *)MX8M_ATF_BL33_BASE_ADDR,
+              __image_start, barebox_pbl_size);
+
+       get_builtin_firmware(imx8mn_bl31_bin, &bl31, &bl31_size);
+
+       imx8mn_atf_load_bl31(bl31, bl31_size);
+
+       /* not reached */
+}
diff --git a/arch/arm/mach-imx/include/mach/xload.h 
b/arch/arm/mach-imx/include/mach/xload.h
index cfc52a94879d..3090c9c83bd7 100644
--- a/arch/arm/mach-imx/include/mach/xload.h
+++ b/arch/arm/mach-imx/include/mach/xload.h
@@ -14,6 +14,7 @@ int imx8mn_esdhc_load_image(int instance, bool start);
 int imx8mp_esdhc_load_image(int instance, bool start);
 
 void imx8mm_load_and_start_image_via_tfa(void);
+void imx8mn_load_and_start_image_via_tfa(void);
 void imx8mp_load_and_start_image_via_tfa(void);
 
 int imx_image_size(void);
-- 
2.30.2


Reply via email to