From c5b79860899c50e04b21c9fee1b319dbdf10d398 Mon Sep 17 00:00:00 2001 From: Sascha Hauer Date: Fri, 17 Jan 2014 12:41:21 +0100 Subject: ARM: i.MX: external NAND boot: pass boarddata Signed-off-by: Sascha Hauer --- arch/arm/boards/eukrea_cpuimx25/lowlevel.c | 2 +- arch/arm/boards/eukrea_cpuimx27/lowlevel_init.S | 1 + arch/arm/boards/eukrea_cpuimx35/lowlevel.c | 2 +- arch/arm/boards/freescale-mx25-3-stack/lowlevel_init.S | 1 + arch/arm/boards/freescale-mx35-3-stack/lowlevel_init.S | 1 + arch/arm/boards/guf-cupid/lowlevel.c | 2 +- arch/arm/boards/guf-neso/lowlevel.c | 2 +- arch/arm/boards/karo-tx25/lowlevel.c | 2 +- arch/arm/boards/pcm037/lowlevel.c | 2 +- arch/arm/boards/pcm038/lowlevel.c | 2 +- arch/arm/boards/pcm043/lowlevel.c | 2 +- arch/arm/boards/phycard-i.MX27/lowlevel.c | 2 +- arch/arm/mach-imx/external-nand-boot.c | 14 ++++++++------ arch/arm/mach-imx/include/mach/imx-nand.h | 10 +++++----- 14 files changed, 25 insertions(+), 20 deletions(-) diff --git a/arch/arm/boards/eukrea_cpuimx25/lowlevel.c b/arch/arm/boards/eukrea_cpuimx25/lowlevel.c index 11d990dfd9..07659f53fc 100644 --- a/arch/arm/boards/eukrea_cpuimx25/lowlevel.c +++ b/arch/arm/boards/eukrea_cpuimx25/lowlevel.c @@ -131,7 +131,7 @@ void __bare_init __naked barebox_arm_reset_vector(void) /* setup a stack to be able to call imx25_barebox_boot_nand_external() */ arm_setup_stack(STACK_BASE + STACK_SIZE - 12); - imx25_barebox_boot_nand_external(); + imx25_barebox_boot_nand_external(0); #endif out: imx25_barebox_entry(0); diff --git a/arch/arm/boards/eukrea_cpuimx27/lowlevel_init.S b/arch/arm/boards/eukrea_cpuimx27/lowlevel_init.S index a85b00d910..ae1391c283 100644 --- a/arch/arm/boards/eukrea_cpuimx27/lowlevel_init.S +++ b/arch/arm/boards/eukrea_cpuimx27/lowlevel_init.S @@ -127,6 +127,7 @@ barebox_arm_reset_vector: /* Setup a temporary stack in SDRAM */ ldr sp, =MX27_IRAM_BASE_ADDR + MX27_IRAM_SIZE - 4; + mov r0, #0 b imx27_barebox_boot_nand_external #endif /* CONFIG_NAND_IMX_BOOT */ diff --git a/arch/arm/boards/eukrea_cpuimx35/lowlevel.c b/arch/arm/boards/eukrea_cpuimx35/lowlevel.c index a667e4c5eb..d03e1109d9 100644 --- a/arch/arm/boards/eukrea_cpuimx35/lowlevel.c +++ b/arch/arm/boards/eukrea_cpuimx35/lowlevel.c @@ -140,7 +140,7 @@ void __bare_init __naked barebox_arm_reset_vector(void) /* setup a stack to be able to call imx35_barebox_boot_nand_external() */ arm_setup_stack(MX35_IRAM_BASE_ADDR + MX35_IRAM_SIZE - 8); - imx35_barebox_boot_nand_external(); + imx35_barebox_boot_nand_external(0); #endif out: imx35_barebox_entry(0); diff --git a/arch/arm/boards/freescale-mx25-3-stack/lowlevel_init.S b/arch/arm/boards/freescale-mx25-3-stack/lowlevel_init.S index 174262d193..8446c6f1db 100644 --- a/arch/arm/boards/freescale-mx25-3-stack/lowlevel_init.S +++ b/arch/arm/boards/freescale-mx25-3-stack/lowlevel_init.S @@ -101,6 +101,7 @@ barebox_arm_reset_vector: /* Setup a temporary stack in SRAM */ ldr sp, =MX25_IRAM_BASE_ADDR + MX25_IRAM_SIZE - 4 + mov r0, #0 b imx25_barebox_boot_nand_external #endif /* CONFIG_NAND_IMX_BOOT */ diff --git a/arch/arm/boards/freescale-mx35-3-stack/lowlevel_init.S b/arch/arm/boards/freescale-mx35-3-stack/lowlevel_init.S index 2844465f39..cb9ed0ab6e 100644 --- a/arch/arm/boards/freescale-mx35-3-stack/lowlevel_init.S +++ b/arch/arm/boards/freescale-mx35-3-stack/lowlevel_init.S @@ -158,6 +158,7 @@ barebox_arm_reset_vector: /* Setup a temporary stack in internal SRAM */ ldr sp, =MX35_IRAM_BASE_ADDR + MX35_IRAM_SIZE - 4 + mov r0, #0 b imx35_barebox_boot_nand_external #endif /* CONFIG_NAND_IMX_BOOT */ diff --git a/arch/arm/boards/guf-cupid/lowlevel.c b/arch/arm/boards/guf-cupid/lowlevel.c index d5298c1836..d5dce16507 100644 --- a/arch/arm/boards/guf-cupid/lowlevel.c +++ b/arch/arm/boards/guf-cupid/lowlevel.c @@ -316,7 +316,7 @@ void __bare_init __naked barebox_arm_reset_vector(void) /* setup a stack to be able to call imx35_barebox_boot_nand_external() */ arm_setup_stack(MX35_IRAM_BASE_ADDR + MX35_IRAM_SIZE - 8); - imx35_barebox_boot_nand_external(); + imx35_barebox_boot_nand_external(0); #endif out: imx35_barebox_entry(0); diff --git a/arch/arm/boards/guf-neso/lowlevel.c b/arch/arm/boards/guf-neso/lowlevel.c index 386751d5ef..c3323ee1ea 100644 --- a/arch/arm/boards/guf-neso/lowlevel.c +++ b/arch/arm/boards/guf-neso/lowlevel.c @@ -90,7 +90,7 @@ void __bare_init __naked barebox_arm_reset_vector(void) /* setup a stack to be able to call imx27_barebox_boot_nand_external() */ arm_setup_stack(MX27_IRAM_BASE_ADDR + MX27_IRAM_SIZE - 8); - imx27_barebox_boot_nand_external(); + imx27_barebox_boot_nand_external(0); #endif out: imx27_barebox_entry(0); diff --git a/arch/arm/boards/karo-tx25/lowlevel.c b/arch/arm/boards/karo-tx25/lowlevel.c index 742100d0ab..11f4138d2f 100644 --- a/arch/arm/boards/karo-tx25/lowlevel.c +++ b/arch/arm/boards/karo-tx25/lowlevel.c @@ -161,7 +161,7 @@ void __bare_init __naked barebox_arm_reset_vector(void) /* setup a stack to be able to call imx25_barebox_boot_nand_external() */ arm_setup_stack(MX25_IRAM_BASE_ADDR + MX25_IRAM_SIZE - 8); - imx25_barebox_boot_nand_external(); + imx25_barebox_boot_nand_external(0); #endif out: imx25_barebox_entry(0); diff --git a/arch/arm/boards/pcm037/lowlevel.c b/arch/arm/boards/pcm037/lowlevel.c index b81a24f0cd..ae2d8c0375 100644 --- a/arch/arm/boards/pcm037/lowlevel.c +++ b/arch/arm/boards/pcm037/lowlevel.c @@ -129,7 +129,7 @@ void __bare_init __naked barebox_arm_reset_vector(void) /* setup a stack to be able to call imx31_barebox_boot_nand_external() */ arm_setup_stack(MX31_IRAM_BASE_ADDR + MX31_IRAM_SIZE - 12); - imx31_barebox_boot_nand_external(); + imx31_barebox_boot_nand_external(0); #else imx31_barebox_entry(0); #endif diff --git a/arch/arm/boards/pcm038/lowlevel.c b/arch/arm/boards/pcm038/lowlevel.c index 0ea293981b..bb948f1c14 100644 --- a/arch/arm/boards/pcm038/lowlevel.c +++ b/arch/arm/boards/pcm038/lowlevel.c @@ -97,7 +97,7 @@ void __bare_init __naked barebox_arm_reset_vector(void) /* setup a stack to be able to call mx27_barebox_boot_nand_external() */ arm_setup_stack(MX27_IRAM_BASE_ADDR + MX27_IRAM_SIZE - 8); - imx27_barebox_boot_nand_external(); + imx27_barebox_boot_nand_external(0); #endif out: imx27_barebox_entry(0); diff --git a/arch/arm/boards/pcm043/lowlevel.c b/arch/arm/boards/pcm043/lowlevel.c index ebd6b29543..64b03823f6 100644 --- a/arch/arm/boards/pcm043/lowlevel.c +++ b/arch/arm/boards/pcm043/lowlevel.c @@ -192,7 +192,7 @@ void __bare_init __naked barebox_arm_reset_vector(void) /* setup a stack to be able to call imx35_barebox_boot_nand_external() */ arm_setup_stack(MX35_IRAM_BASE_ADDR + MX35_IRAM_SIZE - 8); - imx35_barebox_boot_nand_external(); + imx35_barebox_boot_nand_external(0); #endif out: imx35_barebox_entry(0); diff --git a/arch/arm/boards/phycard-i.MX27/lowlevel.c b/arch/arm/boards/phycard-i.MX27/lowlevel.c index 9f5dfff16e..33de1c0423 100644 --- a/arch/arm/boards/phycard-i.MX27/lowlevel.c +++ b/arch/arm/boards/phycard-i.MX27/lowlevel.c @@ -100,7 +100,7 @@ void __bare_init __naked barebox_arm_reset_vector(void) sdram_init(); #ifdef CONFIG_NAND_IMX_BOOT - imx27_barebox_boot_nand_external(); + imx27_barebox_boot_nand_external(0); #else imx27_barebox_entry(0); #endif diff --git a/arch/arm/mach-imx/external-nand-boot.c b/arch/arm/mach-imx/external-nand-boot.c index 7760d8d175..fab37bf77a 100644 --- a/arch/arm/mach-imx/external-nand-boot.c +++ b/arch/arm/mach-imx/external-nand-boot.c @@ -318,7 +318,8 @@ static inline int imx35_pagesize_2k(void) #define DEFINE_EXTERNAL_NAND_ENTRY(soc) \ \ -void __noreturn BARE_INIT_FUNCTION(imx##soc##_boot_nand_external_cont)(void) \ +void __noreturn BARE_INIT_FUNCTION(imx##soc##_boot_nand_external_cont) \ + (uint32_t boarddata) \ { \ unsigned long nfc_base = MX##soc##_NFC_BASE_ADDR; \ unsigned long sdram = MX##soc##_CSD0_BASE_ADDR; \ @@ -328,10 +329,11 @@ void __noreturn BARE_INIT_FUNCTION(imx##soc##_boot_nand_external_cont)(void) (void *)nfc_base, \ imx##soc##_pagesize_2k()); \ \ - imx##soc##_barebox_entry(0); \ + imx##soc##_barebox_entry(boarddata); \ } \ \ -void __noreturn BARE_INIT_FUNCTION(imx##soc##_barebox_boot_nand_external)(void) \ +void __noreturn BARE_INIT_FUNCTION(imx##soc##_barebox_boot_nand_external) \ + (uint32_t boarddata) \ { \ unsigned long nfc_base = MX##soc##_NFC_BASE_ADDR; \ unsigned long sdram = MX##soc##_CSD0_BASE_ADDR; \ @@ -339,12 +341,12 @@ void __noreturn BARE_INIT_FUNCTION(imx##soc##_barebox_boot_nand_external)(void) u32 r; \ u32 *src, *trg; \ int i; \ - void __noreturn (*fn)(void); \ + void __noreturn (*fn)(uint32_t); \ \ /* skip NAND boot if not running from NFC space */ \ r = get_pc(); \ if (r < nfc_base || r > nfc_base + 0x800) \ - imx##soc##_barebox_entry(0); \ + imx##soc##_barebox_entry(boarddata); \ \ src = (unsigned int *)nfc_base; \ trg = (unsigned int *)sdram; \ @@ -368,7 +370,7 @@ void __noreturn BARE_INIT_FUNCTION(imx##soc##_barebox_boot_nand_external)(void) \ fn = (void *)__fn; \ \ - fn(); \ + fn(boarddata); \ } #ifdef BROKEN diff --git a/arch/arm/mach-imx/include/mach/imx-nand.h b/arch/arm/mach-imx/include/mach/imx-nand.h index 9e6416e4d4..972a0da5d7 100644 --- a/arch/arm/mach-imx/include/mach/imx-nand.h +++ b/arch/arm/mach-imx/include/mach/imx-nand.h @@ -3,11 +3,11 @@ #include -void imx21_barebox_boot_nand_external(void); -void imx25_barebox_boot_nand_external(void); -void imx27_barebox_boot_nand_external(void); -void imx31_barebox_boot_nand_external(void); -void imx35_barebox_boot_nand_external(void); +void imx21_barebox_boot_nand_external(uint32_t boarddata); +void imx25_barebox_boot_nand_external(uint32_t boarddata); +void imx27_barebox_boot_nand_external(uint32_t boarddata); +void imx31_barebox_boot_nand_external(uint32_t boarddata); +void imx35_barebox_boot_nand_external(uint32_t boarddata); void imx_nand_set_layout(int writesize, int datawidth); struct imx_nand_platform_data { -- cgit v1.2.3