@@ -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
@@ -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);
@@ -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
@@ -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
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(). Signed-off-by: Fabio Estevam <fabio.estevam@freescale.com> --- 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(-)