[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