ARM: introduce arch_early_init_r()
PATCH 1/2 ARM: introduce arch_early_init_r()
Introduce arch_early_init_r() function, which can be useful for doing early initialization after relocation has happened.
--- arch/arm/include/asm/u-boot-arm.h | 1 + arch/arm/lib/board.c | 4 ++++ 2 files changed, 5 insertions(+), 0 deletions(-)
arch/arm/include/asm/u-boot-arm.h +1 -0
@@ -52,6 +52,7 @@ void cpu_init_cp15(void);/* cpu/.../arch/cpu.c */ int arch_cpu_init (void );int arch_misc_init (void ); +int arch_early_init_r (void );/* board/.../... */ int board_init (void );
arch/arm/lib/board.c +4 -0
@@ -500,6 +500,10 @@ void board_init_r(gd_t *id, ulong dest_addr) malloc_start = dest_addr -TOTAL_MALLOC_LEN ;mem_malloc_init (malloc_start,TOTAL_MALLOC_LEN ); +#ifdef CONFIG_ARCH_EARLY_INIT_R +arch_early_init_r (); +#endif +#if !defined(CONFIG_SYS_NO_FLASH )puts ("Flash: " );
Signature · 1 line
1.7.1
PATCH 2/2 mmc: mxsmmc: Fix operation with DMA
Initialize the DMA controller so that the following errors are fixed:
U-Boot 2012.04-rc1-00001-g037cbfd (Apr 02 2012 - 10:57:48)
Freescale i.MX28 family at 454 MHz
DRAM: 128 MiB MMC: MXS MMC: 0 MMC0: DMA transfer failed MMC0: DMA transfer failed MMC0: DMA transfer failed MMC0: DMA transfer failed
MMC init failed
Do the DMA initialization inside arch_early_init_r(), so that it can work after relocation.
In order to not break the DMA NAND support, remove mxs_dma_init from the NAND driver now that it is called from arch_early_init_r().
--- arch/arm/cpu/arm926ejs/mx28/mx28.c | 12 ++++++++++++ drivers/mtd/nand/mxs_nand.c | 3 --- include/configs/m28evk.h | 1 + include/configs/mx28evk.h | 1 + 4 files changed, 14 insertions(+), 3 deletions(-)
arch/arm/cpu/arm926ejs/mx28/mx28.c +12 -0
@@ -34,6 +34,7 @@#include <asm/arch/iomux.h> #include <asm/arch/imx-regs.h> #include <asm/arch/sys_proto.h> +#include <asm/arch/dma.h> DECLARE_GLOBAL_DATA_PTR ;
@@ -297,3 +298,14 @@ U_BOOT_CMD("display clocks" ,"" ); + +#ifdef CONFIG_ARCH_EARLY_INIT_R +int arch_early_init_r (void ) +{ +#ifdef CONFIG_APBH_DMA +/* Initialize the DMA controller. */ +mxs_dma_init (); +#endif +return 0 ; +} +#endif
drivers/mtd/nand/mxs_nand.c +0 -3
@@ -1072,9 +1072,6 @@ int mxs_nand_init(struct mxs_nand_info *info) goto err2; } -/* Init the DMA controller. */ -mxs_dma_init (); -/* Reset the GPMI block. */ mx28_reset_block (&gpmi_regs->hw_gpmi_ctrl0_reg);
include/configs/m28evk.h +1 -0
@@ -42,6 +42,7 @@#define CONFIG_BOARD_EARLY_INIT_F #define CONFIG_ARCH_CPU_INIT #define CONFIG_ARCH_MISC_INIT +#define CONFIG_ARCH_EARLY_INIT_R /* * SPL
include/configs/mx28evk.h +1 -0
@@ -36,6 +36,7 @@#define CONFIG_BOARD_EARLY_INIT_F #define CONFIG_ARCH_CPU_INIT #define CONFIG_ARCH_MISC_INIT +#define CONFIG_ARCH_EARLY_INIT_R /* * SPL
Signature · 1 line
1.7.1
PATCH 1/2 ARM: introduce arch_early_init_r()
In reply to Fabio EstevamQuoted 4 lines · Fabio Estevam
Introduce
arch_early_init_r()function, which can be useful for doing early initialization after relocation has happened.Signed-off-by Fabio Estevam <[email protected]>
Perhaps I just overlooked earlier conversations, but why not just do this in board_init() ?
Signature · 1 line
Tom
PATCH 1/2 ARM: introduce arch_early_init_r()
Dear Tom Rini,
Quoted 8 lines · Fabio Estevam
Quoted 4 lines
Introduce
arch_early_init_r()function, which can be useful for doing early initialization after relocation has happened.Signed-off-by Fabio Estevam <[email protected]>Perhaps I just overlooked earlier conversations, but why not just do this in
board_init()?
Because we have multiple boards and they all need it.
Best regards,
Marek Vasut
PATCH 1/2 ARM: introduce arch_early_init_r()
Quoted 6 lines · Marek Vasut
Dear Tom Rini,
Quoted 4 lines · Fabio Estevam
Quoted 3 lines
Introduce
arch_early_init_r()function, which can be useful for doing early initialization after relocation has happened.
Quoted 6 lines
Quoted 4 lines
Quoted 1 line
Signed-off-by Fabio Estevam <[email protected]>Perhaps I just overlooked earlier conversations, but why not just do this in
board_init()?Because we have multiple boards and they all need it.
And you aren't architectured with a common board_init() over the family (would there be little to no duplication)? This is what we do in various TI families.
Signature · 1 line
Tom
PATCH 1/2 ARM: introduce arch_early_init_r()
Dear Tom Rini,
Quoted 9 lines · Marek Vasut
Quoted 8 lines
Dear Tom Rini,
Quoted 6 lines · Fabio Estevam
Quoted 4 lines
Introduce
arch_early_init_r()function, which can be useful for doing early initialization after relocation has happened.Signed-off-by Fabio Estevam <[email protected]>
Quoted 8 lines
Quoted 4 lines
Quoted 2 lines
Perhaps I just overlooked earlier conversations, but why not just do this in
board_init()?Because we have multiple boards and they all need it.
And you aren't architectured with a common
board_init()over the family (would there be little to no duplication)? This is what we do in various TI families.
Common board_init() ? How would you then do the actual distinct per-board init?
Best regards,
Marek Vasut
PATCH 1/2 ARM: introduce arch_early_init_r()
Quoted 14 lines · Marek Vasut
Dear Tom Rini,
Quoted 12 lines · Marek Vasut
Quoted 11 lines
Dear Tom Rini,
Quoted 8 lines · Fabio Estevam
Quoted 4 lines
Introduce
arch_early_init_r()function, which can be useful for doing early initialization after relocation has happened.Signed-off-by Fabio Estevam <[email protected]>Perhaps I just overlooked earlier conversations, but why not just do this in
board_init()?
Quoted 7 lines
Quoted 5 lines
Quoted 1 line
Because we have multiple boards and they all need it.
And you aren't architectured with a common
board_init()over the family (would there be little to no duplication)? This is what we do in various TI families.Common
board_init()? How would you then do the actual distinct per-board init?
Pah, mis-recalled things, sorry. We have a pre-relocation hook that's common per-family (lowlevel_init (generic) -> s_init (TI generic)).
Signature · 1 line
Tom
PATCH 1/2 ARM: introduce arch_early_init_r()
In reply to Fabio EstevamQuoted 4 lines · Fabio Estevam
Introduce
arch_early_init_r()function, which can be useful for doing early initialization after relocation has happened.Signed-off-by Fabio Estevam <[email protected]>
[snip]
arch/arm/lib/board.c void board_init_r(gd_t *id, ulong dest_addr) · line 505
Quoted 3 lines
arch/arm/lib/board.c +3
-0+#ifdef CONFIG_ARCH_EARLY_INIT_R +arch_early_init_r (); +#endif
We never check return status, make this a void? As Wolfgang has said before, just because the other examples do things wrong doesn't mean we should keep doing it :)
Signature · 1 line
Tom
PATCH 1/2 ARM: introduce arch_early_init_r()
Hi Tom,
Quoted 6 lines · Tom Rini
Quoted 4 lines · Fabio Estevam
Introduce
arch_early_init_r()function, which can be useful for doing early initialization after relocation has happened.Signed-off-by Fabio Estevam <[email protected]>
Quoted 8 lines
[snip]
arch/arm/lib/board.c void board_init_r(gd_t *id, ulong dest_addr) · line 505
Quoted 3 lines
arch/arm/lib/board.c +3
-0+#ifdef CONFIG_ARCH_EARLY_INIT_R + ? ? arch_early_init_r(); +#endif We never check return status, make this a void? ?As Wolfgang has said before, just because the other examples do things wrong doesn't mean we should keep doing it :)
The INIT_FUNC patch series will require that the board_init...() functions get flattened to simply processing loops and all of these extra functions that have crept in outside those loops be moved into the init arrays.
Have a look at arch/x86/lib/board.c for reference
Defining these functions as returning int with no parameters will make that work a lot easier
Regards,
Graeme
PATCH 1/2 ARM: introduce arch_early_init_r()
In reply to Fabio EstevamDear Fabio Estevam,
Quoted 4 lines
Introduce
arch_early_init_r()function, which can be useful for doing early initialization after relocation has happened.Signed-off-by Fabio Estevam <[email protected]>
Are we getting anywhere with this patchset please?
CCing Albert Aribaud.
Best regards,
Marek Vasut
Fabio Estevam
reviewerPATCH 1/2 ARM: introduce arch_early_init_r()
Quoted 8 lines · Marek Vasut
Dear Fabio Estevam,
Quoted 4 lines
Introduce
arch_early_init_r()function, which can be useful for doing early initialization after relocation has happened.Signed-off-by Fabio Estevam <[email protected]>Are we getting anywhere with this patchset please?
Looking forward for it to be applied :-)
Quoted 2 lines
CCing Albert Aribaud.
I added Albert on Cc on my initial patch submission.
Regards,
Fabio Estevam
PATCH 1/2 ARM: introduce arch_early_init_r()
Dear Fabio Estevam,
Quoted 8 lines · Marek Vasut
Quoted 7 lines
Dear Fabio Estevam,
Quoted 4 lines
Introduce
arch_early_init_r()function, which can be useful for doing early initialization after relocation has happened.Signed-off-by Fabio Estevam <[email protected]>
Quoted 7 lines
Quoted 1 line
Are we getting anywhere with this patchset please?
Looking forward for it to be applied :-)
Quoted 1 line
CCing Albert Aribaud.
I added Albert on Cc on my initial patch submission.
Well ... let's prod him a bit more ;)
Quoted 3 lines
Regards,
Fabio Estevam
Best regards,
Marek Vasut
PATCH 1/2 ARM: introduce arch_early_init_r()
In reply to Fabio EstevamHi Fabio,
Quoted 26 lines · Fabio Estevam
Introduce
arch_early_init_r()function, which can be useful for doing early initialization after relocation has happened.Signed-off-by Fabio Estevam <[email protected]>--- arch/arm/include/asm/u-boot-arm.h | 1 + arch/arm/lib/board.c | 4 ++++ 2 files changed, 5 insertions(+), 0 deletions(-)(quoted diff) +0
-0
b/arch/arm/include/asm/u-boot-arm.hindex 4ca75f9..9f3cae5 100644arch/arm/include/asm/u-boot-arm.h +1
-0@@ -52,6 +52,7 @@ void cpu_init_cp15(void);/* cpu/.../arch/cpu.c */ int arch_cpu_init (void );int arch_misc_init (void ); +int arch_early_init_r (void );/* board/.../... */ int board_init (void );arch/arm/lib/board.c +0
-0
arch/arm/lib/board.c void board_init_r(gd_t *id, ulong dest_addr) · line 509
Quoted 10 lines
arch/arm/lib/board.c +4
-0@@ -500,6 +500,10 @@ void board_init_r(gd_t *id, ulong dest_addr) malloc_start = dest_addr -TOTAL_MALLOC_LEN ;mem_malloc_init (malloc_start,TOTAL_MALLOC_LEN ); +#ifdef CONFIG_ARCH_EARLY_INIT_R +arch_early_init_r (); +#endif +#if !defined(CONFIG_SYS_NO_FLASH )puts ("Flash: " );
Applied to u-boot-arm (with an addmittedly very slow sensitivity to prodding), thanks.
Amicalement,
Signature · 1 line
Albert.