]> git.kernelconcepts.de Git - karo-tx-uboot.git/commitdiff
Merge branch 'master' of git://git.denx.de/u-boot-nand-flash
authorTom Rini <trini@ti.com>
Fri, 31 May 2013 22:28:47 +0000 (18:28 -0400)
committerTom Rini <trini@ti.com>
Fri, 31 May 2013 22:28:47 +0000 (18:28 -0400)
1  2 
drivers/mtd/nand/mxs_nand.c

index 398e4ddc1558a8945bc53eb58b98c6c8c2fc1b4b,7ba48c1201587a3e99e96274b4ee69f9c5107df8..866cabd2765764ff29dbd84b9e2f9e58f6855ec0
  #include <asm/io.h>
  #include <asm/arch/clock.h>
  #include <asm/arch/imx-regs.h>
 +#include <asm/imx-common/regs-bch.h>
 +#include <asm/imx-common/regs-gpmi.h>
  #include <asm/arch/sys_proto.h>
 -#include <asm/arch/dma.h>
 +#include <asm/imx-common/dma.h>
  
  #define       MXS_NAND_DMA_DESCRIPTOR_COUNT           4
  
  #define       MXS_NAND_CHUNK_DATA_CHUNK_SIZE          512
 +#if defined(CONFIG_MX6)
 +#define       MXS_NAND_CHUNK_DATA_CHUNK_SIZE_SHIFT    2
 +#else
 +#define       MXS_NAND_CHUNK_DATA_CHUNK_SIZE_SHIFT    0
 +#endif
  #define       MXS_NAND_METADATA_SIZE                  10
  
  #define       MXS_NAND_COMMAND_BUFFER_SIZE            32
@@@ -553,7 -546,8 +553,8 @@@ static uint8_t mxs_nand_read_byte(struc
   * Read a page from NAND.
   */
  static int mxs_nand_ecc_read_page(struct mtd_info *mtd, struct nand_chip *nand,
-                                       uint8_t *buf, int page)
+                                       uint8_t *buf, int oob_required,
+                                       int page)
  {
        struct mxs_nand_info *nand_info = nand->priv;
        struct mxs_dma_desc *d;
@@@ -698,8 -692,9 +699,9 @@@ rtn
  /*
   * Write a page to NAND.
   */
- static void mxs_nand_ecc_write_page(struct mtd_info *mtd,
-                               struct nand_chip *nand, const uint8_t *buf)
+ static int mxs_nand_ecc_write_page(struct mtd_info *mtd,
+                               struct nand_chip *nand, const uint8_t *buf,
+                               int oob_required)
  {
        struct mxs_nand_info *nand_info = nand->priv;
        struct mxs_dma_desc *d;
  
  rtn:
        mxs_nand_return_dma_descs(nand_info);
+       return 0;
  }
  
  /*
@@@ -770,7 -766,7 +773,7 @@@ static int mxs_nand_hook_read_oob(struc
        struct mxs_nand_info *nand_info = chip->priv;
        int ret;
  
-       if (ops->mode == MTD_OOB_RAW)
+       if (ops->mode == MTD_OPS_RAW)
                nand_info->raw_oob_mode = 1;
        else
                nand_info->raw_oob_mode = 0;
@@@ -795,7 -791,7 +798,7 @@@ static int mxs_nand_hook_write_oob(stru
        struct mxs_nand_info *nand_info = chip->priv;
        int ret;
  
-       if (ops->mode == MTD_OOB_RAW)
+       if (ops->mode == MTD_OPS_RAW)
                nand_info->raw_oob_mode = 1;
        else
                nand_info->raw_oob_mode = 0;
@@@ -873,7 -869,7 +876,7 @@@ static int mxs_nand_hook_block_markbad(
   * what to do.
   */
  static int mxs_nand_ecc_read_oob(struct mtd_info *mtd, struct nand_chip *nand,
-                               int page, int cmd)
+                               int page)
  {
        struct mxs_nand_info *nand_info = nand->priv;
  
@@@ -987,16 -983,14 +990,16 @@@ static int mxs_nand_scan_bbt(struct mtd
        tmp |= MXS_NAND_METADATA_SIZE << BCH_FLASHLAYOUT0_META_SIZE_OFFSET;
        tmp |= (mxs_nand_get_ecc_strength(mtd->writesize, mtd->oobsize) >> 1)
                << BCH_FLASHLAYOUT0_ECC0_OFFSET;
 -      tmp |= MXS_NAND_CHUNK_DATA_CHUNK_SIZE;
 +      tmp |= MXS_NAND_CHUNK_DATA_CHUNK_SIZE
 +              >> MXS_NAND_CHUNK_DATA_CHUNK_SIZE_SHIFT;
        writel(tmp, &bch_regs->hw_bch_flash0layout0);
  
        tmp = (mtd->writesize + mtd->oobsize)
                << BCH_FLASHLAYOUT1_PAGE_SIZE_OFFSET;
        tmp |= (mxs_nand_get_ecc_strength(mtd->writesize, mtd->oobsize) >> 1)
                << BCH_FLASHLAYOUT1_ECCN_OFFSET;
 -      tmp |= MXS_NAND_CHUNK_DATA_CHUNK_SIZE;
 +      tmp |= MXS_NAND_CHUNK_DATA_CHUNK_SIZE
 +              >> MXS_NAND_CHUNK_DATA_CHUNK_SIZE_SHIFT;
        writel(tmp, &bch_regs->hw_bch_flash0layout1);
  
        /* Set *all* chip selects to use layout 0 */
        writel(BCH_CTRL_COMPLETE_IRQ_EN, &bch_regs->hw_bch_ctrl_set);
  
        /* Hook some operations at the MTD level. */
-       if (mtd->read_oob != mxs_nand_hook_read_oob) {
-               nand_info->hooked_read_oob = mtd->read_oob;
-               mtd->read_oob = mxs_nand_hook_read_oob;
+       if (mtd->_read_oob != mxs_nand_hook_read_oob) {
+               nand_info->hooked_read_oob = mtd->_read_oob;
+               mtd->_read_oob = mxs_nand_hook_read_oob;
        }
  
-       if (mtd->write_oob != mxs_nand_hook_write_oob) {
-               nand_info->hooked_write_oob = mtd->write_oob;
-               mtd->write_oob = mxs_nand_hook_write_oob;
+       if (mtd->_write_oob != mxs_nand_hook_write_oob) {
+               nand_info->hooked_write_oob = mtd->_write_oob;
+               mtd->_write_oob = mxs_nand_hook_write_oob;
        }
  
-       if (mtd->block_markbad != mxs_nand_hook_block_markbad) {
-               nand_info->hooked_block_markbad = mtd->block_markbad;
-               mtd->block_markbad = mxs_nand_hook_block_markbad;
+       if (mtd->_block_markbad != mxs_nand_hook_block_markbad) {
+               nand_info->hooked_block_markbad = mtd->_block_markbad;
+               mtd->_block_markbad = mxs_nand_hook_block_markbad;
        }
  
        /* We use the reference implementation for bad block management. */
@@@ -1172,6 -1166,7 +1175,7 @@@ int board_nand_init(struct nand_chip *n
        nand->ecc.mode          = NAND_ECC_HW;
        nand->ecc.bytes         = 9;
        nand->ecc.size          = 512;
+       nand->ecc.strength      = 8;
  
        return 0;