[U-Boot] [PATCH v2] mmc: mxsmmc: Fix operation with DMA
Marek Vasut
marex at denx.de
Mon Apr 2 22:52:26 CEST 2012
Dear Fabio Estevam,
> On Mon, Apr 2, 2012 at 4:54 PM, Marek Vasut <marex at denx.de> wrote:
> > Yes another hook function that'd be called early in board_init_r()
>
> Ok, please see the patch below and let me know if you like it.
>
> If you do, then I can probably split it in 2 parts:
> one that introduces arch_early_init_r() and another one that fixes the
> mmc problem on mx28.
Well ... CCing Albert to express his concerns about this.
>
> diff --git a/arch/arm/cpu/arm926ejs/mx28/mx28.c
> b/arch/arm/cpu/arm926ejs/mx28/mx28.c
> index cf6d4e9..6c148a8 100644
> --- a/arch/arm/cpu/arm926ejs/mx28/mx28.c
> +++ b/arch/arm/cpu/arm926ejs/mx28/mx28.c
> @@ -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
> diff --git a/arch/arm/include/asm/u-boot-arm.h
> b/arch/arm/include/asm/u-boot-arm.h
> index 4ca75f9..9f3cae5 100644
> --- a/arch/arm/include/asm/u-boot-arm.h
> +++ b/arch/arm/include/asm/u-boot-arm.h
> @@ -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);
> diff --git a/arch/arm/lib/board.c b/arch/arm/lib/board.c
> index 5270c11..025d6ca 100644
> --- a/arch/arm/lib/board.c
> +++ b/arch/arm/lib/board.c
> @@ -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: ");
>
> diff --git a/drivers/mtd/nand/mxs_nand.c b/drivers/mtd/nand/mxs_nand.c
> index 4b1297a..95eac35 100644
> --- a/drivers/mtd/nand/mxs_nand.c
> +++ b/drivers/mtd/nand/mxs_nand.c
> @@ -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);
>
> diff --git a/include/configs/m28evk.h b/include/configs/m28evk.h
> index 8b83180..b0e6d3b 100644
> --- a/include/configs/m28evk.h
> +++ b/include/configs/m28evk.h
> @@ -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
> diff --git a/include/configs/mx28evk.h b/include/configs/mx28evk.h
> index 705fdab..350e833 100644
> --- a/include/configs/mx28evk.h
> +++ b/include/configs/mx28evk.h
> @@ -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
More information about the U-Boot
mailing list