Commit ae695b18df7c19ec3d062e36c1c25864096146f8

Authored by Stefan Roese
Committed by Stefano Babic
1 parent 99193e30b4

mtd: mxs_nand: Add support for i.MX6

Signed-off-by: Stefan Roese <sr@denx.de>
Acked-by: Scott Wood <scottwood@freescale.com>
Cc: Stefano Babic <sbabic@denx.de>
Cc: Marek Vasut <marex@denx.de>
Cc: Fabio Estevam <fabio.estevam@freescale.com>

Showing 3 changed files with 26 additions and 2 deletions Side-by-side Diff

arch/arm/cpu/armv7/mx6/soc.c
... ... @@ -30,6 +30,7 @@
30 30 #include <asm/arch/clock.h>
31 31 #include <asm/arch/sys_proto.h>
32 32 #include <asm/imx-common/boot_mode.h>
  33 +#include <asm/imx-common/dma.h>
33 34 #include <stdbool.h>
34 35  
35 36 struct scu_regs {
... ... @@ -151,6 +152,12 @@
151 152 set_vddsoc(1200); /* Set VDDSOC to 1.2V */
152 153  
153 154 imx_set_wdog_powerdown(false); /* Disable PDE bit of WMCR register */
  155 +
  156 +#ifdef CONFIG_APBH_DMA
  157 + /* Start APBH DMA */
  158 + mxs_dma_init();
  159 +#endif
  160 +
154 161 return 0;
155 162 }
156 163  
arch/arm/include/asm/imx-common/regs-bch.h
... ... @@ -136,8 +136,13 @@
136 136 #define BCH_FLASHLAYOUT0_NBLOCKS_OFFSET 24
137 137 #define BCH_FLASHLAYOUT0_META_SIZE_MASK (0xff << 16)
138 138 #define BCH_FLASHLAYOUT0_META_SIZE_OFFSET 16
  139 +#if defined(CONFIG_MX6)
  140 +#define BCH_FLASHLAYOUT0_ECC0_MASK (0x1f << 11)
  141 +#define BCH_FLASHLAYOUT0_ECC0_OFFSET 11
  142 +#else
139 143 #define BCH_FLASHLAYOUT0_ECC0_MASK (0xf << 12)
140 144 #define BCH_FLASHLAYOUT0_ECC0_OFFSET 12
  145 +#endif
141 146 #define BCH_FLASHLAYOUT0_ECC0_NONE (0x0 << 12)
142 147 #define BCH_FLASHLAYOUT0_ECC0_ECC2 (0x1 << 12)
143 148 #define BCH_FLASHLAYOUT0_ECC0_ECC4 (0x2 << 12)
144 149  
... ... @@ -161,8 +166,13 @@
161 166  
162 167 #define BCH_FLASHLAYOUT1_PAGE_SIZE_MASK (0xffff << 16)
163 168 #define BCH_FLASHLAYOUT1_PAGE_SIZE_OFFSET 16
  169 +#if defined(CONFIG_MX6)
  170 +#define BCH_FLASHLAYOUT1_ECCN_MASK (0x1f << 11)
  171 +#define BCH_FLASHLAYOUT1_ECCN_OFFSET 11
  172 +#else
164 173 #define BCH_FLASHLAYOUT1_ECCN_MASK (0xf << 12)
165 174 #define BCH_FLASHLAYOUT1_ECCN_OFFSET 12
  175 +#endif
166 176 #define BCH_FLASHLAYOUT1_ECCN_NONE (0x0 << 12)
167 177 #define BCH_FLASHLAYOUT1_ECCN_ECC2 (0x1 << 12)
168 178 #define BCH_FLASHLAYOUT1_ECCN_ECC4 (0x2 << 12)
drivers/mtd/nand/mxs_nand.c
... ... @@ -42,6 +42,11 @@
42 42 #define MXS_NAND_DMA_DESCRIPTOR_COUNT 4
43 43  
44 44 #define MXS_NAND_CHUNK_DATA_CHUNK_SIZE 512
  45 +#if defined(CONFIG_MX6)
  46 +#define MXS_NAND_CHUNK_DATA_CHUNK_SIZE_SHIFT 2
  47 +#else
  48 +#define MXS_NAND_CHUNK_DATA_CHUNK_SIZE_SHIFT 0
  49 +#endif
45 50 #define MXS_NAND_METADATA_SIZE 10
46 51  
47 52 #define MXS_NAND_COMMAND_BUFFER_SIZE 32
48 53  
... ... @@ -982,14 +987,16 @@
982 987 tmp |= MXS_NAND_METADATA_SIZE << BCH_FLASHLAYOUT0_META_SIZE_OFFSET;
983 988 tmp |= (mxs_nand_get_ecc_strength(mtd->writesize, mtd->oobsize) >> 1)
984 989 << BCH_FLASHLAYOUT0_ECC0_OFFSET;
985   - tmp |= MXS_NAND_CHUNK_DATA_CHUNK_SIZE;
  990 + tmp |= MXS_NAND_CHUNK_DATA_CHUNK_SIZE
  991 + >> MXS_NAND_CHUNK_DATA_CHUNK_SIZE_SHIFT;
986 992 writel(tmp, &bch_regs->hw_bch_flash0layout0);
987 993  
988 994 tmp = (mtd->writesize + mtd->oobsize)
989 995 << BCH_FLASHLAYOUT1_PAGE_SIZE_OFFSET;
990 996 tmp |= (mxs_nand_get_ecc_strength(mtd->writesize, mtd->oobsize) >> 1)
991 997 << BCH_FLASHLAYOUT1_ECCN_OFFSET;
992   - tmp |= MXS_NAND_CHUNK_DATA_CHUNK_SIZE;
  998 + tmp |= MXS_NAND_CHUNK_DATA_CHUNK_SIZE
  999 + >> MXS_NAND_CHUNK_DATA_CHUNK_SIZE_SHIFT;
993 1000 writel(tmp, &bch_regs->hw_bch_flash0layout1);
994 1001  
995 1002 /* Set *all* chip selects to use layout 0 */