]> git.sur5r.net Git - u-boot/blobdiff - drivers/mtd/nand/tegra_nand.c
spl: nand: sunxi: introduce the nand_wait_int() helper
[u-boot] / drivers / mtd / nand / tegra_nand.c
index b20fb1e10d9b1563a9cdfd3bece57a95c403f160..c03c9cb1789e19f3b7a9c081638610a8e8cde3a2 100644 (file)
@@ -14,7 +14,7 @@
 #include <asm/arch/clock.h>
 #include <asm/arch/funcmux.h>
 #include <asm/arch-tegra/clk_rst.h>
-#include <asm/errno.h>
+#include <linux/errno.h>
 #include <asm/gpio.h>
 #include <fdtdec.h>
 #include <bouncebuf.h>
@@ -143,10 +143,10 @@ static int nand_waitfor_cmd_completion(struct nand_ctlr *reg)
  */
 static uint8_t read_byte(struct mtd_info *mtd)
 {
-       struct nand_chip *chip = mtd->priv;
+       struct nand_chip *chip = mtd_to_nand(mtd);
        struct nand_drv *info;
 
-       info = (struct nand_drv *)chip->priv;
+       info = (struct nand_drv *)nand_get_controller_data(chip);
 
        writel(CMD_GO | CMD_PIO | CMD_RX | CMD_CE0 | CMD_A_VALID,
               &info->reg->command);
@@ -169,8 +169,8 @@ static void read_buf(struct mtd_info *mtd, uint8_t *buf, int len)
 {
        int i, s;
        unsigned int reg;
-       struct nand_chip *chip = mtd->priv;
-       struct nand_drv *info = (struct nand_drv *)chip->priv;
+       struct nand_chip *chip = mtd_to_nand(mtd);
+       struct nand_drv *info = (struct nand_drv *)nand_get_controller_data(chip);
 
        for (i = 0; i < len; i += 4) {
                s = (len - i) > 4 ? 4 : len - i;
@@ -194,11 +194,11 @@ static void read_buf(struct mtd_info *mtd, uint8_t *buf, int len)
  */
 static int nand_dev_ready(struct mtd_info *mtd)
 {
-       struct nand_chip *chip = mtd->priv;
+       struct nand_chip *chip = mtd_to_nand(mtd);
        int reg_val;
        struct nand_drv *info;
 
-       info = (struct nand_drv *)chip->priv;
+       info = (struct nand_drv *)nand_get_controller_data(chip);
 
        reg_val = readl(&info->reg->status);
        if (reg_val & STATUS_RBSY0)
@@ -245,10 +245,10 @@ static void nand_clear_interrupt_status(struct nand_ctlr *reg)
 static void nand_command(struct mtd_info *mtd, unsigned int command,
        int column, int page_addr)
 {
-       struct nand_chip *chip = mtd->priv;
+       struct nand_chip *chip = mtd_to_nand(mtd);
        struct nand_drv *info;
 
-       info = (struct nand_drv *)chip->priv;
+       info = (struct nand_drv *)nand_get_controller_data(chip);
 
        /*
         * Write out the command to the device.
@@ -512,7 +512,7 @@ static int nand_rw_page(struct mtd_info *mtd, struct nand_chip *chip,
                return -EINVAL;
        }
 
-       info = (struct nand_drv *)chip->priv;
+       info = (struct nand_drv *)nand_get_controller_data(chip);
        config = &info->config;
        if (set_bus_width_page_size(config, &reg_val))
                return -EINVAL;
@@ -657,16 +657,9 @@ static int nand_read_page_hwecc(struct mtd_info *mtd,
  * @param buf  data buffer
  */
 static int nand_write_page_hwecc(struct mtd_info *mtd,
-       struct nand_chip *chip, const uint8_t *buf, int oob_required)
+       struct nand_chip *chip, const uint8_t *buf, int oob_required,
+       int page)
 {
-       int page;
-       struct nand_drv *info;
-
-       info = (struct nand_drv *)chip->priv;
-
-       page = (readl(&info->reg->addr_reg1) >> 16) |
-               (readl(&info->reg->addr_reg2) << 16);
-
        nand_rw_page(mtd, chip, (uint8_t *)buf, page, 1, 1);
        return 0;
 }
@@ -697,15 +690,9 @@ static int nand_read_page_raw(struct mtd_info *mtd,
  * @param buf  data buffer
  */
 static int nand_write_page_raw(struct mtd_info *mtd,
-               struct nand_chip *chip, const uint8_t *buf, int oob_required)
+               struct nand_chip *chip, const uint8_t *buf,
+               int oob_required, int page)
 {
-       int page;
-       struct nand_drv *info;
-
-       info = (struct nand_drv *)chip->priv;
-       page = (readl(&info->reg->addr_reg1) >> 16) |
-               (readl(&info->reg->addr_reg2) << 16);
-
        nand_rw_page(mtd, chip, (uint8_t *)buf, page, 0, 1);
        return 0;
 }
@@ -734,7 +721,7 @@ static int nand_rw_oob(struct mtd_info *mtd, struct nand_chip *chip,
 
        if (((int)chip->oob_poi) & 0x03)
                return -EINVAL;
-       info = (struct nand_drv *)chip->priv;
+       info = (struct nand_drv *)nand_get_controller_data(chip);
        if (set_bus_width_page_size(&info->config, &reg_val))
                return -EINVAL;
 
@@ -897,7 +884,7 @@ static void setup_timing(unsigned timing[FDT_NAND_TIMING_COUNT],
  * Decode NAND parameters from the device tree
  *
  * @param blob Device tree blob
- * @param node Node containing "nand-flash" compatble node
+ * @param node Node containing "nand-flash" compatible node
  * @return 0 if ok, -ve on error (FDT_ERR_...)
  */
 static int fdt_decode_nand(const void *blob, int node, struct fdt_nand *config)
@@ -907,8 +894,8 @@ static int fdt_decode_nand(const void *blob, int node, struct fdt_nand *config)
        config->reg = (struct nand_ctlr *)fdtdec_get_addr(blob, node, "reg");
        config->enabled = fdtdec_get_is_enabled(blob, node);
        config->width = fdtdec_get_int(blob, node, "nvidia,nand-width", 8);
-       err = gpio_request_by_name_nodev(blob, node, "nvidia,wp-gpios", 0,
-                                &config->wp_gpio, GPIOD_IS_OUT);
+       err = gpio_request_by_name_nodev(offset_to_ofnode(node),
+                       "nvidia,wp-gpios", 0, &config->wp_gpio, GPIOD_IS_OUT);
        if (err)
                return err;
        err = fdtdec_get_int_array(blob, node, "nvidia,timing",
@@ -963,7 +950,7 @@ int tegra_nand_init(struct nand_chip *nand, int devnum)
        nand->ecc.strength = 1;
        nand->select_chip = nand_select_chip;
        nand->dev_ready  = nand_dev_ready;
-       nand->priv = &nand_ctrl;
+       nand_set_controller_data(nand, &nand_ctrl);
 
        /* Disable subpage writes as we do not provide ecc->hwctl */
        nand->options |= NAND_NO_SUBPAGE_WRITE;
@@ -976,8 +963,7 @@ int tegra_nand_init(struct nand_chip *nand, int devnum)
 
        dm_gpio_set_value(&config->wp_gpio, 1);
 
-       our_mtd = &nand->mtd;
-       our_mtd->priv = nand;
+       our_mtd = nand_to_mtd(nand);
        ret = nand_scan_ident(our_mtd, CONFIG_SYS_NAND_MAX_CHIPS, NULL);
        if (ret)
                return ret;