Merge v4.4-rc1 into MTD development
authorBrian Norris <computersforpeace@gmail.com>
Mon, 16 Nov 2015 04:30:53 +0000 (20:30 -0800)
committerBrian Norris <computersforpeace@gmail.com>
Mon, 16 Nov 2015 04:31:29 +0000 (20:31 -0800)
Sync up with the upstream development.

Signed-off-by: Brian Norris <computersforpeace@gmail.com>
46 files changed:
Documentation/devicetree/bindings/mtd/mtk-quadspi.txt [new file with mode: 0644]
Documentation/devicetree/bindings/mtd/partition.txt
drivers/mtd/Kconfig
drivers/mtd/afs.c
drivers/mtd/devices/m25p80.c
drivers/mtd/devices/mtd_dataflash.c
drivers/mtd/devices/spear_smi.c
drivers/mtd/devices/st_spi_fsm.c
drivers/mtd/maps/lantiq-flash.c
drivers/mtd/maps/physmap_of.c
drivers/mtd/mtdcore.c
drivers/mtd/mtdpart.c
drivers/mtd/nand/atmel_nand.c
drivers/mtd/nand/brcmnand/brcmnand.c
drivers/mtd/nand/davinci_nand.c
drivers/mtd/nand/fsl_elbc_nand.c
drivers/mtd/nand/fsl_ifc_nand.c
drivers/mtd/nand/fsl_upm.c
drivers/mtd/nand/fsmc_nand.c
drivers/mtd/nand/gpio.c
drivers/mtd/nand/gpmi-nand/gpmi-nand.c
drivers/mtd/nand/hisi504_nand.c
drivers/mtd/nand/lpc32xx_mlc.c
drivers/mtd/nand/lpc32xx_slc.c
drivers/mtd/nand/mpc5121_nfc.c
drivers/mtd/nand/mxc_nand.c
drivers/mtd/nand/nand_base.c
drivers/mtd/nand/ndfc.c
drivers/mtd/nand/omap2.c
drivers/mtd/nand/orion_nand.c
drivers/mtd/nand/plat_nand.c
drivers/mtd/nand/pxa3xx_nand.c
drivers/mtd/nand/sh_flctl.c
drivers/mtd/nand/socrates_nand.c
drivers/mtd/nand/sunxi_nand.c
drivers/mtd/nand/vf610_nfc.c
drivers/mtd/ofpart.c
drivers/mtd/onenand/omap2.c
drivers/mtd/spi-nor/fsl-quadspi.c
drivers/mtd/spi-nor/nxp-spifi.c
drivers/mtd/spi-nor/spi-nor.c
drivers/staging/mt29f_spinand/mt29f_spinand.c
include/linux/mtd/mtd.h
include/linux/mtd/nand.h
include/linux/mtd/partitions.h
include/linux/mtd/spi-nor.h

diff --git a/Documentation/devicetree/bindings/mtd/mtk-quadspi.txt b/Documentation/devicetree/bindings/mtd/mtk-quadspi.txt
new file mode 100644 (file)
index 0000000..fb314f0
--- /dev/null
@@ -0,0 +1,41 @@
+* Serial NOR flash controller for MTK MT81xx (and similar)
+
+Required properties:
+- compatible:    should be "mediatek,mt8173-nor";
+- reg:                   physical base address and length of the controller's register
+- clocks:        the phandle of the clocks needed by the nor controller
+- clock-names:           the names of the clocks
+                 the clocks should be named "spi" and "sf". "spi" is used for spi bus,
+                 and "sf" is used for controller, these are the clocks witch
+                 hardware needs to enabling nor flash and nor flash controller.
+                 See Documentation/devicetree/bindings/clock/clock-bindings.txt for details.
+- #address-cells: should be <1>
+- #size-cells:   should be <0>
+
+The SPI flash must be a child of the nor_flash node and must have a
+compatible property. Also see jedec,spi-nor.txt.
+
+Required properties:
+- compatible:    May include a device-specific string consisting of the manufacturer
+                 and name of the chip. Must also include "jedec,spi-nor" for any
+                 SPI NOR flash that can be identified by the JEDEC READ ID opcode (0x9F).
+- reg :                  Chip-Select number
+
+Example:
+
+nor_flash: spi@1100d000 {
+       compatible = "mediatek,mt8173-nor";
+       reg = <0 0x1100d000 0 0xe0>;
+       clocks = <&pericfg CLK_PERI_SPI>,
+                <&topckgen CLK_TOP_SPINFI_IFR_SEL>;
+       clock-names = "spi", "sf";
+       #address-cells = <1>;
+       #size-cells = <0>;
+       status = "disabled";
+
+       flash@0 {
+               compatible = "jedec,spi-nor";
+               reg = <0>;
+       };
+};
+
index f1e2a02..8dc4bf9 100644 (file)
@@ -30,6 +30,8 @@ Optional properties:
   partition should only be mounted read-only. This is usually used for flash
   partitions containing early-boot firmware images or data which should not be
   clobbered.
+- lock : Do not unlock the partition at initialization time (not supported on
+  all devices)
 
 Examples:
 
index a03ad29..42cc953 100644 (file)
@@ -112,7 +112,7 @@ config MTD_CMDLINE_PARTS
 
 config MTD_AFS_PARTS
        tristate "ARM Firmware Suite partition parsing"
-       depends on ARM
+       depends on (ARM || ARM64)
        ---help---
          The ARM Firmware Suite allows the user to divide flash devices into
          multiple 'images'. Each such image has a header containing its name
index 96a33e3..a1eea50 100644 (file)
@@ -34,7 +34,9 @@
 #include <linux/mtd/map.h>
 #include <linux/mtd/partitions.h>
 
-struct footer_struct {
+#define AFSV1_FOOTER_MAGIC 0xA0FFFF9F
+
+struct footer_v1 {
        u32 image_info_base;    /* Address of first word of ImageFooter  */
        u32 image_start;        /* Start of area reserved by this footer */
        u32 signature;          /* 'Magic' number proves it's a footer   */
@@ -42,7 +44,7 @@ struct footer_struct {
        u32 checksum;           /* Just this structure                   */
 };
 
-struct image_info_struct {
+struct image_info_v1 {
        u32 bootFlags;          /* Boot flags, compression etc.          */
        u32 imageNumber;        /* Unique number, selects for boot etc.  */
        u32 loadAddress;        /* Address program should be loaded to   */
@@ -67,10 +69,10 @@ static u32 word_sum(void *words, int num)
 }
 
 static int
-afs_read_footer(struct mtd_info *mtd, u_int *img_start, u_int *iis_start,
-               u_int off, u_int mask)
+afs_read_footer_v1(struct mtd_info *mtd, u_int *img_start, u_int *iis_start,
+                  u_int off, u_int mask)
 {
-       struct footer_struct fs;
+       struct footer_v1 fs;
        u_int ptr = off + mtd->erasesize - sizeof(fs);
        size_t sz;
        int ret;
@@ -85,25 +87,23 @@ afs_read_footer(struct mtd_info *mtd, u_int *img_start, u_int *iis_start,
                return ret;
        }
 
-       ret = 1;
-
        /*
         * Does it contain the magic number?
         */
-       if (fs.signature != 0xa0ffff9f)
-               ret = 0;
+       if (fs.signature != AFSV1_FOOTER_MAGIC)
+               return 0;
 
        /*
         * Check the checksum.
         */
        if (word_sum(&fs, sizeof(fs) / sizeof(u32)) != 0xffffffff)
-               ret = 0;
+               return 0;
 
        /*
         * Don't touch the SIB.
         */
        if (fs.type == 2)
-               ret = 0;
+               return 0;
 
        *iis_start = fs.image_info_base & mask;
        *img_start = fs.image_start & mask;
@@ -113,20 +113,20 @@ afs_read_footer(struct mtd_info *mtd, u_int *img_start, u_int *iis_start,
         * be located after the footer structure.
         */
        if (*iis_start >= ptr)
-               ret = 0;
+               return 0;
 
        /*
         * Check the start of this image.  The image
         * data can not be located after this block.
         */
        if (*img_start > off)
-               ret = 0;
+               return 0;
 
-       return ret;
+       return 1;
 }
 
 static int
-afs_read_iis(struct mtd_info *mtd, struct image_info_struct *iis, u_int ptr)
+afs_read_iis_v1(struct mtd_info *mtd, struct image_info_v1 *iis, u_int ptr)
 {
        size_t sz;
        int ret, i;
@@ -182,24 +182,23 @@ static int parse_afs_partitions(struct mtd_info *mtd,
         * the strings.
         */
        for (idx = off = sz = 0; off < mtd->size; off += mtd->erasesize) {
-               struct image_info_struct iis;
+               struct image_info_v1 iis;
                u_int iis_ptr, img_ptr;
 
-               ret = afs_read_footer(mtd, &img_ptr, &iis_ptr, off, mask);
-               if (ret < 0)
-                       break;
-               if (ret == 0)
-                       continue;
-
-               ret = afs_read_iis(mtd, &iis, iis_ptr);
+               ret = afs_read_footer_v1(mtd, &img_ptr, &iis_ptr, off, mask);
                if (ret < 0)
                        break;
-               if (ret == 0)
-                       continue;
-
-               sz += sizeof(struct mtd_partition);
-               sz += strlen(iis.name) + 1;
-               idx += 1;
+               if (ret) {
+                       ret = afs_read_iis_v1(mtd, &iis, iis_ptr);
+                       if (ret < 0)
+                               break;
+                       if (ret == 0)
+                               continue;
+
+                       sz += sizeof(struct mtd_partition);
+                       sz += strlen(iis.name) + 1;
+                       idx += 1;
+               }
        }
 
        if (!sz)
@@ -215,18 +214,18 @@ static int parse_afs_partitions(struct mtd_info *mtd,
         * Identify the partitions
         */
        for (idx = off = 0; off < mtd->size; off += mtd->erasesize) {
-               struct image_info_struct iis;
+               struct image_info_v1 iis;
                u_int iis_ptr, img_ptr;
 
                /* Read the footer. */
-               ret = afs_read_footer(mtd, &img_ptr, &iis_ptr, off, mask);
+               ret = afs_read_footer_v1(mtd, &img_ptr, &iis_ptr, off, mask);
                if (ret < 0)
                        break;
                if (ret == 0)
                        continue;
 
                /* Read the image info block */
-               ret = afs_read_iis(mtd, &iis, iis_ptr);
+               ret = afs_read_iis_v1(mtd, &iis, iis_ptr);
                if (ret < 0)
                        break;
                if (ret == 0)
index fe9ceb7..f002a8f 100644 (file)
@@ -175,7 +175,6 @@ static int m25p80_erase(struct spi_nor *nor, loff_t offset)
  */
 static int m25p_probe(struct spi_device *spi)
 {
-       struct mtd_part_parser_data     ppdata;
        struct flash_platform_data      *data;
        struct m25p *flash;
        struct spi_nor *nor;
@@ -199,7 +198,7 @@ static int m25p_probe(struct spi_device *spi)
        nor->read_reg = m25p80_read_reg;
 
        nor->dev = &spi->dev;
-       nor->flash_node = spi->dev.of_node;
+       spi_nor_set_flash_node(nor, spi->dev.of_node);
        nor->priv = flash;
 
        spi_set_drvdata(spi, flash);
@@ -227,11 +226,8 @@ static int m25p_probe(struct spi_device *spi)
        if (ret)
                return ret;
 
-       ppdata.of_node = spi->dev.of_node;
-
-       return mtd_device_parse_register(&nor->mtd, NULL, &ppdata,
-                       data ? data->parts : NULL,
-                       data ? data->nr_parts : 0);
+       return mtd_device_register(&nor->mtd, data ? data->parts : NULL,
+                                  data ? data->nr_parts : 0);
 }
 
 
index e4a8871..f9e9bd1 100644 (file)
@@ -624,7 +624,6 @@ static int add_dataflash_otp(struct spi_device *spi, char *name, int nr_pages,
 {
        struct dataflash                *priv;
        struct mtd_info                 *device;
-       struct mtd_part_parser_data     ppdata;
        struct flash_platform_data      *pdata = dev_get_platdata(&spi->dev);
        char                            *otp_tag = "";
        int                             err = 0;
@@ -656,6 +655,7 @@ static int add_dataflash_otp(struct spi_device *spi, char *name, int nr_pages,
        device->priv = priv;
 
        device->dev.parent = &spi->dev;
+       mtd_set_of_node(device, spi->dev.of_node);
 
        if (revision >= 'c')
                otp_tag = otp_setup(device, revision);
@@ -665,8 +665,7 @@ static int add_dataflash_otp(struct spi_device *spi, char *name, int nr_pages,
                        pagesize, otp_tag);
        spi_set_drvdata(spi, priv);
 
-       ppdata.of_node = spi->dev.of_node;
-       err = mtd_device_parse_register(device, NULL, &ppdata,
+       err = mtd_device_register(device,
                        pdata ? pdata->parts : NULL,
                        pdata ? pdata->nr_parts : 0);
 
index 64c7458..dd50698 100644 (file)
@@ -810,7 +810,6 @@ static int spear_smi_setup_banks(struct platform_device *pdev,
                                 u32 bank, struct device_node *np)
 {
        struct spear_smi *dev = platform_get_drvdata(pdev);
-       struct mtd_part_parser_data ppdata = {};
        struct spear_smi_flash_info *flash_info;
        struct spear_smi_plat_data *pdata;
        struct spear_snor_flash *flash;
@@ -855,6 +854,7 @@ static int spear_smi_setup_banks(struct platform_device *pdev,
                flash->mtd.name = flash_devices[flash_index].name;
 
        flash->mtd.dev.parent = &pdev->dev;
+       mtd_set_of_node(&flash->mtd, np);
        flash->mtd.type = MTD_NORFLASH;
        flash->mtd.writesize = 1;
        flash->mtd.flags = MTD_CAP_NORFLASH;
@@ -881,10 +881,8 @@ static int spear_smi_setup_banks(struct platform_device *pdev,
                count = flash_info->nr_partitions;
        }
 #endif
-       ppdata.of_node = np;
 
-       ret = mtd_device_parse_register(&flash->mtd, NULL, &ppdata, parts,
-                                       count);
+       ret = mtd_device_register(&flash->mtd, parts, count);
        if (ret) {
                dev_err(&dev->pdev->dev, "Err MTD partition=%d\n", ret);
                return ret;
index 3060025..5454b41 100644 (file)
@@ -2025,7 +2025,6 @@ boot_device_fail:
 static int stfsm_probe(struct platform_device *pdev)
 {
        struct device_node *np = pdev->dev.of_node;
-       struct mtd_part_parser_data ppdata;
        struct flash_info *info;
        struct resource *res;
        struct stfsm *fsm;
@@ -2035,7 +2034,6 @@ static int stfsm_probe(struct platform_device *pdev)
                dev_err(&pdev->dev, "No DT found\n");
                return -EINVAL;
        }
-       ppdata.of_node = np;
 
        fsm = devm_kzalloc(&pdev->dev, sizeof(*fsm), GFP_KERNEL);
        if (!fsm)
@@ -2106,6 +2104,7 @@ static int stfsm_probe(struct platform_device *pdev)
 
        fsm->mtd.name           = info->name;
        fsm->mtd.dev.parent     = &pdev->dev;
+       mtd_set_of_node(&fsm->mtd, np);
        fsm->mtd.type           = MTD_NORFLASH;
        fsm->mtd.writesize      = 4;
        fsm->mtd.writebufsize   = fsm->mtd.writesize;
@@ -2124,7 +2123,7 @@ static int stfsm_probe(struct platform_device *pdev)
                (long long)fsm->mtd.size, (long long)(fsm->mtd.size >> 20),
                fsm->mtd.erasesize, (fsm->mtd.erasesize >> 10));
 
-       return mtd_device_parse_register(&fsm->mtd, NULL, &ppdata, NULL, 0);
+       return mtd_device_register(&fsm->mtd, NULL, 0);
 }
 
 static int stfsm_remove(struct platform_device *pdev)
index 9385205..c8febb3 100644 (file)
@@ -110,7 +110,6 @@ ltq_copy_to(struct map_info *map, unsigned long to,
 static int
 ltq_mtd_probe(struct platform_device *pdev)
 {
-       struct mtd_part_parser_data ppdata;
        struct ltq_mtd *ltq_mtd;
        struct cfi_private *cfi;
        int err;
@@ -161,13 +160,13 @@ ltq_mtd_probe(struct platform_device *pdev)
        }
 
        ltq_mtd->mtd->dev.parent = &pdev->dev;
+       mtd_set_of_node(ltq_mtd->mtd, pdev->dev.of_node);
 
        cfi = ltq_mtd->map->fldrv_priv;
        cfi->addr_unlock1 ^= 1;
        cfi->addr_unlock2 ^= 1;
 
-       ppdata.of_node = pdev->dev.of_node;
-       err = mtd_device_parse_register(ltq_mtd->mtd, NULL, &ppdata, NULL, 0);
+       err = mtd_device_register(ltq_mtd->mtd, NULL, 0);
        if (err) {
                dev_err(&pdev->dev, "failed to add partitions\n");
                goto err_destroy;
index e46b4e9..70c4531 100644 (file)
@@ -166,7 +166,6 @@ static int of_flash_probe(struct platform_device *dev)
        int reg_tuple_size;
        struct mtd_info **mtd_list = NULL;
        resource_size_t res_size;
-       struct mtd_part_parser_data ppdata;
        bool map_indirect;
        const char *mtd_name = NULL;
 
@@ -310,13 +309,14 @@ static int of_flash_probe(struct platform_device *dev)
        if (err)
                goto err_out;
 
-       ppdata.of_node = dp;
+       info->cmtd->dev.parent = &dev->dev;
+       mtd_set_of_node(info->cmtd, dp);
        part_probe_types = of_get_probes(dp);
        if (!part_probe_types) {
                err = -ENOMEM;
                goto err_out;
        }
-       mtd_device_parse_register(info->cmtd, part_probe_types, &ppdata,
+       mtd_device_parse_register(info->cmtd, part_probe_types, NULL,
                        NULL, 0);
        of_free_probes(part_probe_types);
 
index 95c13b2..62f83b0 100644 (file)
@@ -32,6 +32,7 @@
 #include <linux/err.h>
 #include <linux/ioctl.h>
 #include <linux/init.h>
+#include <linux/of.h>
 #include <linux/proc_fs.h>
 #include <linux/idr.h>
 #include <linux/backing-dev.h>
@@ -454,6 +455,7 @@ int add_mtd_device(struct mtd_info *mtd)
        mtd->dev.devt = MTD_DEVT(i);
        dev_set_name(&mtd->dev, "mtd%d", i);
        dev_set_drvdata(&mtd->dev, mtd);
+       of_node_get(mtd_get_of_node(mtd));
        error = device_register(&mtd->dev);
        if (error)
                goto fail_added;
@@ -476,6 +478,7 @@ int add_mtd_device(struct mtd_info *mtd)
        return 0;
 
 fail_added:
+       of_node_put(mtd_get_of_node(mtd));
        idr_remove(&mtd_idr, i);
 fail_locked:
        mutex_unlock(&mtd_table_mutex);
@@ -517,6 +520,7 @@ int del_mtd_device(struct mtd_info *mtd)
                device_unregister(&mtd->dev);
 
                idr_remove(&mtd_idr, mtd->index);
+               of_node_put(mtd_get_of_node(mtd));
 
                module_put(THIS_MODULE);
                ret = 0;
index f8ba153..46dfbf5 100644 (file)
@@ -596,11 +596,10 @@ int mtd_add_partition(struct mtd_info *master, const char *name,
        if (length <= 0)
                return -EINVAL;
 
+       memset(&part, 0, sizeof(part));
        part.name = name;
        part.size = length;
        part.offset = offset;
-       part.mask_flags = 0;
-       part.ecclayout = NULL;
 
        new = allocate_partition(master, &part, -1, offset);
        if (IS_ERR(new))
index 583cdd9..6ecc1c1 100644 (file)
@@ -2093,7 +2093,6 @@ static int atmel_nand_probe(struct platform_device *pdev)
        struct mtd_info *mtd;
        struct nand_chip *nand_chip;
        struct resource *mem;
-       struct mtd_part_parser_data ppdata = {};
        int res, irq;
 
        /* Allocate memory for the device structure (and zero it) */
@@ -2117,6 +2116,7 @@ static int atmel_nand_probe(struct platform_device *pdev)
        nand_chip = &host->nand_chip;
        host->dev = &pdev->dev;
        if (IS_ENABLED(CONFIG_OF) && pdev->dev.of_node) {
+               nand_set_flash_node(nand_chip, pdev->dev.of_node);
                /* Only when CONFIG_OF is enabled of_node can be parsed */
                res = atmel_of_init_port(host, pdev->dev.of_node);
                if (res)
@@ -2259,9 +2259,8 @@ static int atmel_nand_probe(struct platform_device *pdev)
        }
 
        mtd->name = "atmel_nand";
-       ppdata.of_node = pdev->dev.of_node;
-       res = mtd_device_parse_register(mtd, NULL, &ppdata,
-                       host->board.parts, host->board.num_parts);
+       res = mtd_device_register(mtd, host->board.parts,
+                                 host->board.num_parts);
        if (!res)
                return res;
 
index 12c6190..2a437c7 100644 (file)
@@ -1816,7 +1816,7 @@ static int brcmnand_setup_dev(struct brcmnand_host *host)
 
        memset(cfg, 0, sizeof(*cfg));
 
-       ret = of_property_read_u32(chip->flash_node,
+       ret = of_property_read_u32(nand_get_flash_node(chip),
                                   "brcm,nand-oob-sector-size",
                                   &oob_sector);
        if (ret) {
@@ -1914,7 +1914,6 @@ static int brcmnand_init_cs(struct brcmnand_host *host)
        struct nand_chip *chip;
        int ret;
        u16 cfg_offs;
-       struct mtd_part_parser_data ppdata = { .of_node = dn };
 
        ret = of_property_read_u32(dn, "reg", &host->cs);
        if (ret) {
@@ -1925,7 +1924,7 @@ static int brcmnand_init_cs(struct brcmnand_host *host)
        mtd = &host->mtd;
        chip = &host->chip;
 
-       chip->flash_node = dn;
+       nand_set_flash_node(chip, dn);
        chip->priv = host;
        mtd->priv = chip;
        mtd->name = devm_kasprintf(&pdev->dev, GFP_KERNEL, "brcmnand.%d",
@@ -1993,7 +1992,7 @@ static int brcmnand_init_cs(struct brcmnand_host *host)
        if (nand_scan_tail(mtd))
                return -ENXIO;
 
-       return mtd_device_parse_register(mtd, NULL, &ppdata, NULL, 0);
+       return mtd_device_register(mtd, NULL, 0);
 }
 
 static void brcmnand_save_restore_cs_config(struct brcmnand_host *host,
index c72313d..8e351af 100644 (file)
@@ -684,6 +684,7 @@ static int nand_davinci_probe(struct platform_device *pdev)
 
        info->mtd.priv          = &info->chip;
        info->mtd.dev.parent    = &pdev->dev;
+       nand_set_flash_node(&info->chip, pdev->dev.of_node);
 
        info->chip.IO_ADDR_R    = vaddr;
        info->chip.IO_ADDR_W    = vaddr;
@@ -839,13 +840,8 @@ syndrome_done:
        if (pdata->parts)
                ret = mtd_device_parse_register(&info->mtd, NULL, NULL,
                                        pdata->parts, pdata->nr_parts);
-       else {
-               struct mtd_part_parser_data     ppdata;
-
-               ppdata.of_node = pdev->dev.of_node;
-               ret = mtd_device_parse_register(&info->mtd, NULL, &ppdata,
-                                               NULL, 0);
-       }
+       else
+               ret = mtd_device_register(&info->mtd, NULL, 0);
        if (ret < 0)
                goto err;
 
index dcb1f7f..bd6d493 100644 (file)
@@ -748,6 +748,7 @@ static int fsl_elbc_chip_init(struct fsl_elbc_mtd *priv)
        /* Fill in fsl_elbc_mtd structure */
        priv->mtd.priv = chip;
        priv->mtd.dev.parent = priv->dev;
+       nand_set_flash_node(chip, priv->dev->of_node);
 
        /* set timeout to maximum */
        priv->fmr = 15 << FMR_CWTO_SHIFT;
@@ -823,9 +824,7 @@ static int fsl_elbc_nand_probe(struct platform_device *pdev)
        int bank;
        struct device *dev;
        struct device_node *node = pdev->dev.of_node;
-       struct mtd_part_parser_data ppdata;
 
-       ppdata.of_node = pdev->dev.of_node;
        if (!fsl_lbc_ctrl_dev || !fsl_lbc_ctrl_dev->regs)
                return -ENODEV;
        lbc = fsl_lbc_ctrl_dev->regs;
@@ -911,7 +910,7 @@ static int fsl_elbc_nand_probe(struct platform_device *pdev)
 
        /* First look for RedBoot table or partitions on the command
         * line, these take precedence over device tree information */
-       mtd_device_parse_register(&priv->mtd, part_probe_types, &ppdata,
+       mtd_device_parse_register(&priv->mtd, part_probe_types, NULL,
                                  NULL, 0);
 
        printk(KERN_INFO "eLBC NAND device at 0x%llx, bank %d\n",
index 7f4ac8c..f260831 100644 (file)
@@ -883,6 +883,7 @@ static int fsl_ifc_chip_init(struct fsl_ifc_mtd *priv)
        /* Fill in fsl_ifc_mtd structure */
        priv->mtd.priv = chip;
        priv->mtd.dev.parent = priv->dev;
+       nand_set_flash_node(chip, priv->dev->of_node);
 
        /* fill in nand_chip structure */
        /* set up function call table */
@@ -1030,9 +1031,7 @@ static int fsl_ifc_nand_probe(struct platform_device *dev)
        int ret;
        int bank;
        struct device_node *node = dev->dev.of_node;
-       struct mtd_part_parser_data ppdata;
 
-       ppdata.of_node = dev->dev.of_node;
        if (!fsl_ifc_ctrl_dev || !fsl_ifc_ctrl_dev->regs)
                return -ENODEV;
        ifc = fsl_ifc_ctrl_dev->regs;
@@ -1128,7 +1127,7 @@ static int fsl_ifc_nand_probe(struct platform_device *dev)
 
        /* First look for RedBoot table or partitions on the command
         * line, these take precedence over device tree information */
-       mtd_device_parse_register(&priv->mtd, part_probe_types, &ppdata,
+       mtd_device_parse_register(&priv->mtd, part_probe_types, NULL,
                                                NULL, 0);
 
        dev_info(priv->dev, "IFC NAND device at 0x%llx, bank %d\n",
index d326369..b3f4a01 100644 (file)
@@ -159,7 +159,6 @@ static int fun_chip_init(struct fsl_upm_nand *fun,
 {
        int ret;
        struct device_node *flash_np;
-       struct mtd_part_parser_data ppdata;
 
        fun->chip.IO_ADDR_R = fun->io_base;
        fun->chip.IO_ADDR_W = fun->io_base;
@@ -182,6 +181,7 @@ static int fun_chip_init(struct fsl_upm_nand *fun,
        if (!flash_np)
                return -ENODEV;
 
+       nand_set_flash_node(&fun->chip, flash_np);
        fun->mtd.name = kasprintf(GFP_KERNEL, "0x%llx.%s", (u64)io_res->start,
                                  flash_np->name);
        if (!fun->mtd.name) {
@@ -193,8 +193,7 @@ static int fun_chip_init(struct fsl_upm_nand *fun,
        if (ret)
                goto err;
 
-       ppdata.of_node = flash_np;
-       ret = mtd_device_parse_register(&fun->mtd, NULL, &ppdata, NULL, 0);
+       ret = mtd_device_register(&fun->mtd, NULL, 0);
 err:
        of_node_put(flash_np);
        if (ret)
index 07af3dc..59fc6d0 100644 (file)
@@ -926,7 +926,6 @@ static int __init fsmc_nand_probe(struct platform_device *pdev)
 {
        struct fsmc_nand_platform_data *pdata = dev_get_platdata(&pdev->dev);
        struct device_node __maybe_unused *np = pdev->dev.of_node;
-       struct mtd_part_parser_data ppdata = {};
        struct fsmc_nand_data *host;
        struct mtd_info *mtd;
        struct nand_chip *nand;
@@ -1016,6 +1015,7 @@ static int __init fsmc_nand_probe(struct platform_device *pdev)
        nand = &host->nand;
        mtd->priv = nand;
        nand->priv = host;
+       nand_set_flash_node(nand, np);
 
        host->mtd.dev.parent = &pdev->dev;
        nand->IO_ADDR_R = host->data_va;
@@ -1033,7 +1033,7 @@ static int __init fsmc_nand_probe(struct platform_device *pdev)
        nand->options = pdata->options;
        nand->select_chip = fsmc_select_chip;
        nand->badblockbits = 7;
-       nand->flash_node = np;
+       nand_set_flash_node(nand, np);
 
        if (pdata->width == FSMC_NAND_BW16)
                nand->options |= NAND_BUSWIDTH_16;
@@ -1175,9 +1175,8 @@ static int __init fsmc_nand_probe(struct platform_device *pdev)
         * Check for partition info passed
         */
        host->mtd.name = "nand";
-       ppdata.of_node = np;
-       ret = mtd_device_parse_register(&host->mtd, NULL, &ppdata,
-                                       host->partitions, host->nr_partitions);
+       ret = mtd_device_register(&host->mtd, host->partitions,
+                                 host->nr_partitions);
        if (ret)
                goto err_probe;
 
index 9ab97f9..d57a07a 100644 (file)
@@ -209,7 +209,6 @@ static int gpio_nand_probe(struct platform_device *pdev)
        struct gpiomtd *gpiomtd;
        struct nand_chip *chip;
        struct resource *res;
-       struct mtd_part_parser_data ppdata = {};
        int ret = 0;
 
        if (!pdev->dev.of_node && !dev_get_platdata(&pdev->dev))
@@ -268,6 +267,7 @@ static int gpio_nand_probe(struct platform_device *pdev)
                chip->dev_ready = gpio_nand_devready;
        }
 
+       nand_set_flash_node(chip, pdev->dev.of_node);
        chip->IO_ADDR_W         = chip->IO_ADDR_R;
        chip->ecc.mode          = NAND_ECC_SOFT;
        chip->options           = gpiomtd->plat.options;
@@ -291,10 +291,8 @@ static int gpio_nand_probe(struct platform_device *pdev)
                gpiomtd->plat.adjust_parts(&gpiomtd->plat,
                                           gpiomtd->mtd_info.size);
 
-       ppdata.of_node = pdev->dev.of_node;
-       ret = mtd_device_parse_register(&gpiomtd->mtd_info, NULL, &ppdata,
-                                       gpiomtd->plat.parts,
-                                       gpiomtd->plat.num_parts);
+       ret = mtd_device_register(&gpiomtd->mtd_info, gpiomtd->plat.parts,
+                                 gpiomtd->plat.num_parts);
        if (!ret)
                return 0;
 
index 2064ada..5a9b696 100644 (file)
@@ -1888,7 +1888,6 @@ static int gpmi_nand_init(struct gpmi_nand_data *this)
 {
        struct mtd_info  *mtd = &this->mtd;
        struct nand_chip *chip = &this->nand;
-       struct mtd_part_parser_data ppdata = {};
        int ret;
 
        /* init current chip */
@@ -1901,6 +1900,7 @@ static int gpmi_nand_init(struct gpmi_nand_data *this)
 
        /* init the nand_chip{}, we don't support a 16-bit NAND Flash bus. */
        chip->priv              = this;
+       nand_set_flash_node(chip, this->pdev->dev.of_node);
        chip->select_chip       = gpmi_select_chip;
        chip->cmd_ctrl          = gpmi_cmd_ctrl;
        chip->dev_ready         = gpmi_dev_ready;
@@ -1954,8 +1954,7 @@ static int gpmi_nand_init(struct gpmi_nand_data *this)
        if (ret)
                goto err_out;
 
-       ppdata.of_node = this->pdev->dev.of_node;
-       ret = mtd_device_parse_register(mtd, NULL, &ppdata, NULL, 0);
+       ret = mtd_device_register(mtd, NULL, 0);
        if (ret)
                goto err_out;
        return 0;
index 0cb2e88..0aad4ac 100644 (file)
@@ -704,7 +704,6 @@ static int hisi_nfc_probe(struct platform_device *pdev)
        struct mtd_info   *mtd;
        struct resource   *res;
        struct device_node *np = dev->of_node;
-       struct mtd_part_parser_data ppdata;
 
        host = devm_kzalloc(dev, sizeof(*host), GFP_KERNEL);
        if (!host)
@@ -742,6 +741,7 @@ static int hisi_nfc_probe(struct platform_device *pdev)
        mtd->dev.parent         = &pdev->dev;
 
        chip->priv              = host;
+       nand_set_flash_node(chip, np);
        chip->cmdfunc           = hisi_nfc_cmdfunc;
        chip->select_chip       = hisi_nfc_select_chip;
        chip->read_byte         = hisi_nfc_read_byte;
@@ -805,8 +805,7 @@ static int hisi_nfc_probe(struct platform_device *pdev)
                goto err_res;
        }
 
-       ppdata.of_node = np;
-       ret = mtd_device_parse_register(mtd, NULL, &ppdata, NULL, 0);
+       ret = mtd_device_register(mtd, NULL, 0);
        if (ret) {
                dev_err(dev, "Err MTD partition=%d\n", ret);
                goto err_mtd;
index 3475109..57c4b71 100644 (file)
@@ -647,7 +647,6 @@ static int lpc32xx_nand_probe(struct platform_device *pdev)
        struct nand_chip *nand_chip;
        struct resource *rc;
        int res;
-       struct mtd_part_parser_data ppdata = {};
 
        /* Allocate memory for the device structure (and zero it) */
        host = devm_kzalloc(&pdev->dev, sizeof(*host), GFP_KERNEL);
@@ -682,6 +681,7 @@ static int lpc32xx_nand_probe(struct platform_device *pdev)
        host->pdata = dev_get_platdata(&pdev->dev);
 
        nand_chip->priv = host;         /* link the private data structures */
+       nand_set_flash_node(nand_chip, pdev->dev.of_node);
        mtd->priv = nand_chip;
        mtd->dev.parent = &pdev->dev;
 
@@ -786,9 +786,8 @@ static int lpc32xx_nand_probe(struct platform_device *pdev)
 
        mtd->name = DRV_NAME;
 
-       ppdata.of_node = pdev->dev.of_node;
-       res = mtd_device_parse_register(mtd, NULL, &ppdata, host->ncfg->parts,
-                                       host->ncfg->num_parts);
+       res = mtd_device_register(mtd, host->ncfg->parts,
+                                 host->ncfg->num_parts);
        if (!res)
                return res;
 
index 4f3d4eb..277626e 100644 (file)
@@ -763,7 +763,6 @@ static int lpc32xx_nand_probe(struct platform_device *pdev)
        struct mtd_info *mtd;
        struct nand_chip *chip;
        struct resource *rc;
-       struct mtd_part_parser_data ppdata = {};
        int res;
 
        rc = platform_get_resource(pdev, IORESOURCE_MEM, 0);
@@ -803,6 +802,7 @@ static int lpc32xx_nand_probe(struct platform_device *pdev)
        mtd = &host->mtd;
        chip = &host->nand_chip;
        chip->priv = host;
+       nand_set_flash_node(chip, pdev->dev.of_node);
        mtd->priv = chip;
        mtd->owner = THIS_MODULE;
        mtd->dev.parent = &pdev->dev;
@@ -908,9 +908,8 @@ static int lpc32xx_nand_probe(struct platform_device *pdev)
        }
 
        mtd->name = "nxp_lpc3220_slc";
-       ppdata.of_node = pdev->dev.of_node;
-       res = mtd_device_parse_register(mtd, NULL, &ppdata, host->ncfg->parts,
-                                       host->ncfg->num_parts);
+       res = mtd_device_register(mtd, host->ncfg->parts,
+                                 host->ncfg->num_parts);
        if (!res)
                return res;
 
index d6bbde4..0fdfc42 100644 (file)
@@ -639,7 +639,6 @@ static int mpc5121_nfc_probe(struct platform_device *op)
        int resettime = 0;
        int retval = 0;
        int rev, len;
-       struct mtd_part_parser_data ppdata;
 
        /*
         * Check SoC revision. This driver supports only NFC
@@ -661,6 +660,7 @@ static int mpc5121_nfc_probe(struct platform_device *op)
        mtd->priv = chip;
        mtd->dev.parent = dev;
        chip->priv = prv;
+       nand_set_flash_node(chip, dn);
        prv->dev = dev;
 
        /* Read NFC configuration from Reset Config Word */
@@ -703,7 +703,6 @@ static int mpc5121_nfc_probe(struct platform_device *op)
        }
 
        mtd->name = "MPC5121 NAND";
-       ppdata.of_node = dn;
        chip->dev_ready = mpc5121_nfc_dev_ready;
        chip->cmdfunc = mpc5121_nfc_command;
        chip->read_byte = mpc5121_nfc_read_byte;
@@ -815,7 +814,7 @@ static int mpc5121_nfc_probe(struct platform_device *op)
        dev_set_drvdata(dev, mtd);
 
        /* Register device in MTD */
-       retval = mtd_device_parse_register(mtd, NULL, &ppdata, NULL, 0);
+       retval = mtd_device_register(mtd, NULL, 0);
        if (retval) {
                dev_err(dev, "Error adding MTD device!\n");
                goto error;
index 136e73a..7922d31 100644 (file)
@@ -1524,6 +1524,7 @@ static int mxcnd_probe(struct platform_device *pdev)
        this->chip_delay = 5;
 
        this->priv = host;
+       nand_set_flash_node(this, pdev->dev.of_node),
        this->dev_ready = mxc_nand_dev_ready;
        this->cmdfunc = mxc_nand_command;
        this->read_byte = mxc_nand_read_byte;
@@ -1683,9 +1684,7 @@ static int mxcnd_probe(struct platform_device *pdev)
 
        /* Register the partitions */
        mtd_device_parse_register(mtd, part_probes,
-                       &(struct mtd_part_parser_data){
-                               .of_node = pdev->dev.of_node,
-                       },
+                       NULL,
                        host->pdata.parts,
                        host->pdata.nr_parts);
 
index cc74142..4ac4efe 100644 (file)
@@ -3989,8 +3989,11 @@ int nand_scan_ident(struct mtd_info *mtd, int maxchips,
        struct nand_flash_dev *type;
        int ret;
 
-       if (chip->flash_node) {
-               ret = nand_dt_init(mtd, chip, chip->flash_node);
+       if (nand_get_flash_node(chip)) {
+               /* MTD can automatically handle DT partitions, etc. */
+               mtd_set_of_node(mtd, nand_get_flash_node(chip));
+
+               ret = nand_dt_init(mtd, chip, nand_get_flash_node(chip));
                if (ret)
                        return ret;
        }
index 4f0d62f..6965858 100644 (file)
@@ -147,7 +147,6 @@ static int ndfc_chip_init(struct ndfc_controller *ndfc,
 {
        struct device_node *flash_np;
        struct nand_chip *chip = &ndfc->chip;
-       struct mtd_part_parser_data ppdata;
        int ret;
 
        chip->IO_ADDR_R = ndfc->ndfcbase + NDFC_DATA;
@@ -174,8 +173,8 @@ static int ndfc_chip_init(struct ndfc_controller *ndfc,
        flash_np = of_get_next_child(node, NULL);
        if (!flash_np)
                return -ENODEV;
+       nand_set_flash_node(chip, flash_np);
 
-       ppdata.of_node = flash_np;
        ndfc->mtd.name = kasprintf(GFP_KERNEL, "%s.%s",
                        dev_name(&ndfc->ofdev->dev), flash_np->name);
        if (!ndfc->mtd.name) {
@@ -187,7 +186,7 @@ static int ndfc_chip_init(struct ndfc_controller *ndfc,
        if (ret)
                goto err;
 
-       ret = mtd_device_parse_register(&ndfc->mtd, NULL, &ppdata, NULL, 0);
+       ret = mtd_device_register(&ndfc->mtd, NULL, 0);
 
 err:
        of_node_put(flash_np);
index 93f664c..e307576 100644 (file)
@@ -1663,7 +1663,6 @@ static int omap_nand_probe(struct platform_device *pdev)
        unsigned                        sig;
        unsigned                        oob_index;
        struct resource                 *res;
-       struct mtd_part_parser_data     ppdata = {};
 
        pdata = dev_get_platdata(&pdev->dev);
        if (pdata == NULL) {
@@ -1688,6 +1687,7 @@ static int omap_nand_probe(struct platform_device *pdev)
        mtd->dev.parent         = &pdev->dev;
        nand_chip               = &info->nand;
        nand_chip->ecc.priv     = NULL;
+       nand_set_flash_node(nand_chip, pdata->of_node);
 
        res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
        nand_chip->IO_ADDR_R = devm_ioremap_resource(&pdev->dev, res);
@@ -2037,9 +2037,7 @@ scan_tail:
                goto return_error;
        }
 
-       ppdata.of_node = pdata->of_node;
-       mtd_device_parse_register(mtd, NULL, &ppdata, pdata->parts,
-                                 pdata->nr_parts);
+       mtd_device_register(mtd, pdata->parts, pdata->nr_parts);
 
        platform_set_drvdata(pdev, mtd);
 
index ee83749..5c21416 100644 (file)
@@ -76,7 +76,6 @@ static void orion_nand_read_buf(struct mtd_info *mtd, uint8_t *buf, int len)
 static int __init orion_nand_probe(struct platform_device *pdev)
 {
        struct mtd_info *mtd;
-       struct mtd_part_parser_data ppdata = {};
        struct nand_chip *nc;
        struct orion_nand_data *board;
        struct resource *res;
@@ -127,6 +126,7 @@ static int __init orion_nand_probe(struct platform_device *pdev)
        mtd->dev.parent = &pdev->dev;
 
        nc->priv = board;
+       nand_set_flash_node(nc, pdev->dev.of_node);
        nc->IO_ADDR_R = nc->IO_ADDR_W = io_base;
        nc->cmd_ctrl = orion_nand_cmd_ctrl;
        nc->read_buf = orion_nand_read_buf;
@@ -161,9 +161,7 @@ static int __init orion_nand_probe(struct platform_device *pdev)
        }
 
        mtd->name = "orion_nand";
-       ppdata.of_node = pdev->dev.of_node;
-       ret = mtd_device_parse_register(mtd, NULL, &ppdata,
-                       board->parts, board->nr_parts);
+       ret = mtd_device_register(mtd, board->parts, board->nr_parts);
        if (ret) {
                nand_release(mtd);
                goto no_dev;
index 65b9dbb..06ac6c6 100644 (file)
@@ -30,7 +30,6 @@ struct plat_nand_data {
 static int plat_nand_probe(struct platform_device *pdev)
 {
        struct platform_nand_data *pdata = dev_get_platdata(&pdev->dev);
-       struct mtd_part_parser_data ppdata;
        struct plat_nand_data *data;
        struct resource *res;
        const char **part_types;
@@ -58,6 +57,7 @@ static int plat_nand_probe(struct platform_device *pdev)
                return PTR_ERR(data->io_base);
 
        data->chip.priv = &data;
+       nand_set_flash_node(&data->chip, pdev->dev.of_node);
        data->mtd.priv = &data->chip;
        data->mtd.dev.parent = &pdev->dev;
 
@@ -94,8 +94,7 @@ static int plat_nand_probe(struct platform_device *pdev)
 
        part_types = pdata->chip.part_probe_types;
 
-       ppdata.of_node = pdev->dev.of_node;
-       err = mtd_device_parse_register(&data->mtd, part_types, &ppdata,
+       err = mtd_device_parse_register(&data->mtd, part_types, NULL,
                                        pdata->chip.partitions,
                                        pdata->chip.nr_partitions);
 
index e453ae9..37df51d 100644 (file)
@@ -1697,6 +1697,7 @@ KEEP_CONFIG:
 
 static int alloc_nand_resource(struct platform_device *pdev)
 {
+       struct device_node *np = pdev->dev.of_node;
        struct pxa3xx_nand_platform_data *pdata;
        struct pxa3xx_nand_info *info;
        struct pxa3xx_nand_host *host;
@@ -1725,6 +1726,8 @@ static int alloc_nand_resource(struct platform_device *pdev)
                host->info_data = info;
                mtd->priv = host;
                mtd->dev.parent = &pdev->dev;
+               /* FIXME: all chips use the same device tree partitions */
+               nand_set_flash_node(chip, np);
 
                chip->ecc.read_page     = pxa3xx_nand_read_page_hwecc;
                chip->ecc.write_page    = pxa3xx_nand_write_page_hwecc;
@@ -1886,7 +1889,6 @@ static int pxa3xx_nand_probe_dt(struct platform_device *pdev)
 static int pxa3xx_nand_probe(struct platform_device *pdev)
 {
        struct pxa3xx_nand_platform_data *pdata;
-       struct mtd_part_parser_data ppdata = {};
        struct pxa3xx_nand_info *info;
        int ret, cs, probe_success, dma_available;
 
@@ -1933,10 +1935,8 @@ static int pxa3xx_nand_probe(struct platform_device *pdev)
                        continue;
                }
 
-               ppdata.of_node = pdev->dev.of_node;
-               ret = mtd_device_parse_register(mtd, NULL,
-                                               &ppdata, pdata->parts[cs],
-                                               pdata->nr_parts[cs]);
+               ret = mtd_device_register(mtd, pdata->parts[cs],
+                                         pdata->nr_parts[cs]);
                if (!ret)
                        probe_success = 1;
        }
index bcba1a9..57dc525 100644 (file)
@@ -1086,7 +1086,6 @@ static int flctl_probe(struct platform_device *pdev)
        struct sh_flctl_platform_data *pdata;
        int ret;
        int irq;
-       struct mtd_part_parser_data ppdata = {};
 
        flctl = devm_kzalloc(&pdev->dev, sizeof(struct sh_flctl), GFP_KERNEL);
        if (!flctl)
@@ -1123,6 +1122,7 @@ static int flctl_probe(struct platform_device *pdev)
        platform_set_drvdata(pdev, flctl);
        flctl_mtd = &flctl->mtd;
        nand = &flctl->chip;
+       nand_set_flash_node(nand, pdev->dev.of_node);
        flctl_mtd->priv = nand;
        flctl_mtd->dev.parent = &pdev->dev;
        flctl->pdev = pdev;
@@ -1163,9 +1163,7 @@ static int flctl_probe(struct platform_device *pdev)
        if (ret)
                goto err_chip;
 
-       ppdata.of_node = pdev->dev.of_node;
-       ret = mtd_device_parse_register(flctl_mtd, NULL, &ppdata, pdata->parts,
-                       pdata->nr_parts);
+       ret = mtd_device_register(flctl_mtd, pdata->parts, pdata->nr_parts);
 
        return 0;
 
index b94f534..bde4043 100644 (file)
@@ -147,7 +147,6 @@ static int socrates_nand_probe(struct platform_device *ofdev)
        struct mtd_info *mtd;
        struct nand_chip *nand_chip;
        int res;
-       struct mtd_part_parser_data ppdata;
 
        /* Allocate memory for the device structure (and zero it) */
        host = devm_kzalloc(&ofdev->dev, sizeof(*host), GFP_KERNEL);
@@ -165,10 +164,10 @@ static int socrates_nand_probe(struct platform_device *ofdev)
        host->dev = &ofdev->dev;
 
        nand_chip->priv = host;         /* link the private data structures */
+       nand_set_flash_node(nand_chip, ofdev->dev.of_node);
        mtd->priv = nand_chip;
        mtd->name = "socrates_nand";
        mtd->dev.parent = &ofdev->dev;
-       ppdata.of_node = ofdev->dev.of_node;
 
        /*should never be accessed directly */
        nand_chip->IO_ADDR_R = (void *)0xdeadbeef;
@@ -200,7 +199,7 @@ static int socrates_nand_probe(struct platform_device *ofdev)
                goto out;
        }
 
-       res = mtd_device_parse_register(mtd, NULL, &ppdata, NULL, 0);
+       res = mtd_device_register(mtd, NULL, 0);
        if (!res)
                return res;
 
index 8247118..2ed52e4 100644 (file)
@@ -1232,7 +1232,6 @@ static int sunxi_nand_chip_init(struct device *dev, struct sunxi_nfc *nfc,
 {
        const struct nand_sdr_timings *timings;
        struct sunxi_nand_chip *chip;
-       struct mtd_part_parser_data ppdata;
        struct mtd_info *mtd;
        struct nand_chip *nand;
        int nsels;
@@ -1330,7 +1329,7 @@ static int sunxi_nand_chip_init(struct device *dev, struct sunxi_nfc *nfc,
         * in the DT.
         */
        nand->ecc.mode = NAND_ECC_HW;
-       nand->flash_node = np;
+       nand_set_flash_node(nand, np);
        nand->select_chip = sunxi_nfc_select_chip;
        nand->cmd_ctrl = sunxi_nfc_cmd_ctrl;
        nand->read_buf = sunxi_nfc_read_buf;
@@ -1366,8 +1365,7 @@ static int sunxi_nand_chip_init(struct device *dev, struct sunxi_nfc *nfc,
                return ret;
        }
 
-       ppdata.of_node = np;
-       ret = mtd_device_parse_register(mtd, NULL, &ppdata, NULL, 0);
+       ret = mtd_device_register(mtd, NULL, 0);
        if (ret) {
                dev_err(dev, "failed to register mtd device: %d\n", ret);
                nand_release(mtd);
index 8805d63..1c86c6b 100644 (file)
@@ -707,18 +707,18 @@ static int vf610_nfc_probe(struct platform_device *pdev)
        for_each_available_child_of_node(nfc->dev->of_node, child) {
                if (of_device_is_compatible(child, "fsl,vf610-nfc-nandcs")) {
 
-                       if (chip->flash_node) {
+                       if (nand_get_flash_node(chip)) {
                                dev_err(nfc->dev,
                                        "Only one NAND chip supported!\n");
                                err = -EINVAL;
                                goto error;
                        }
 
-                       chip->flash_node = child;
+                       nand_set_flash_node(chip, child);
                }
        }
 
-       if (!chip->flash_node) {
+       if (!nand_get_flash_node(chip)) {
                dev_err(nfc->dev, "NAND chip sub-node missing!\n");
                err = -ENODEV;
                goto err_clk;
@@ -811,14 +811,10 @@ static int vf610_nfc_probe(struct platform_device *pdev)
        platform_set_drvdata(pdev, mtd);
 
        /* Register device in MTD */
-       return mtd_device_parse_register(mtd, NULL,
-               &(struct mtd_part_parser_data){
-                       .of_node = chip->flash_node,
-               },
-               NULL, 0);
+       return mtd_device_register(mtd, NULL, 0);
 
 error:
-       of_node_put(chip->flash_node);
+       of_node_put(nand_get_flash_node(chip));
 err_clk:
        clk_disable_unprepare(nfc->clk);
        return err;
index 669c345..f78d2ae 100644 (file)
@@ -37,10 +37,8 @@ static int parse_ofpart_partitions(struct mtd_info *master,
        bool dedicated = true;
 
 
-       if (!data)
-               return 0;
-
-       mtd_node = data->of_node;
+       /* Pull of_node from the master device node */
+       mtd_node = mtd_get_of_node(master);
        if (!mtd_node)
                return 0;
 
@@ -149,10 +147,8 @@ static int parse_ofoldpart_partitions(struct mtd_info *master,
        } *part;
        const char *names;
 
-       if (!data)
-               return 0;
-
-       dp = data->of_node;
+       /* Pull of_node from the master device node */
+       dp = mtd_get_of_node(master);
        if (!dp)
                return 0;
 
index 3e02856..0aacf12 100644 (file)
@@ -614,7 +614,6 @@ static int omap2_onenand_probe(struct platform_device *pdev)
        struct onenand_chip *this;
        int r;
        struct resource *res;
-       struct mtd_part_parser_data ppdata = {};
 
        pdata = dev_get_platdata(&pdev->dev);
        if (pdata == NULL) {
@@ -713,6 +712,7 @@ static int omap2_onenand_probe(struct platform_device *pdev)
        c->mtd.priv = &c->onenand;
 
        c->mtd.dev.parent = &pdev->dev;
+       mtd_set_of_node(&c->mtd, pdata->of_node);
 
        this = &c->onenand;
        if (c->dma_channel >= 0) {
@@ -743,10 +743,8 @@ static int omap2_onenand_probe(struct platform_device *pdev)
        if ((r = onenand_scan(&c->mtd, 1)) < 0)
                goto err_release_regulator;
 
-       ppdata.of_node = pdata->of_node;
-       r = mtd_device_parse_register(&c->mtd, NULL, &ppdata,
-                                     pdata ? pdata->parts : NULL,
-                                     pdata ? pdata->nr_parts : 0);
+       r = mtd_device_register(&c->mtd, pdata ? pdata->parts : NULL,
+                               pdata ? pdata->nr_parts : 0);
        if (r)
                goto err_release_onenand;
 
index 7b10ed4..9e7f657 100644 (file)
@@ -927,7 +927,6 @@ static void fsl_qspi_unprep(struct spi_nor *nor, enum spi_nor_ops ops)
 static int fsl_qspi_probe(struct platform_device *pdev)
 {
        struct device_node *np = pdev->dev.of_node;
-       struct mtd_part_parser_data ppdata;
        struct device *dev = &pdev->dev;
        struct fsl_qspi *q;
        struct resource *res;
@@ -1013,7 +1012,7 @@ static int fsl_qspi_probe(struct platform_device *pdev)
                mtd = &nor->mtd;
 
                nor->dev = dev;
-               nor->flash_node = np;
+               spi_nor_set_flash_node(nor, np);
                nor->priv = q;
 
                /* fill the hooks */
@@ -1038,8 +1037,7 @@ static int fsl_qspi_probe(struct platform_device *pdev)
                if (ret)
                        goto mutex_failed;
 
-               ppdata.of_node = np;
-               ret = mtd_device_parse_register(mtd, NULL, &ppdata, NULL, 0);
+               ret = mtd_device_register(mtd, NULL, 0);
                if (ret)
                        goto mutex_failed;
 
index 9e82098..ae428cb 100644 (file)
@@ -271,7 +271,6 @@ static void nxp_spifi_dummy_id_read(struct spi_nor *nor)
 static int nxp_spifi_setup_flash(struct nxp_spifi *spifi,
                                 struct device_node *np)
 {
-       struct mtd_part_parser_data ppdata;
        enum read_mode flash_read;
        u32 ctrl, property;
        u16 mode = 0;
@@ -330,7 +329,7 @@ static int nxp_spifi_setup_flash(struct nxp_spifi *spifi,
        writel(ctrl, spifi->io_base + SPIFI_CTRL);
 
        spifi->nor.dev   = spifi->dev;
-       spifi->nor.flash_node = np;
+       spi_nor_set_flash_node(&spifi->nor, np);
        spifi->nor.priv  = spifi;
        spifi->nor.read  = nxp_spifi_read;
        spifi->nor.write = nxp_spifi_write;
@@ -361,8 +360,7 @@ static int nxp_spifi_setup_flash(struct nxp_spifi *spifi,
                return ret;
        }
 
-       ppdata.of_node = np;
-       ret = mtd_device_parse_register(&spifi->nor.mtd, NULL, &ppdata, NULL, 0);
+       ret = mtd_device_register(&spifi->nor.mtd, NULL, 0);
        if (ret) {
                dev_err(spifi->dev, "mtd device parse failed\n");
                return ret;
index 4988390..12041e1 100644 (file)
@@ -1151,7 +1151,7 @@ int spi_nor_scan(struct spi_nor *nor, const char *name, enum read_mode mode)
        const struct flash_info *info = NULL;
        struct device *dev = nor->dev;
        struct mtd_info *mtd = &nor->mtd;
-       struct device_node *np = nor->flash_node;
+       struct device_node *np = spi_nor_get_flash_node(nor);
        int ret;
        int i;
 
index 47bb56f..6536066 100644 (file)
@@ -850,7 +850,6 @@ static int spinand_probe(struct spi_device *spi_nand)
        struct nand_chip *chip;
        struct spinand_info *info;
        struct spinand_state *state;
-       struct mtd_part_parser_data ppdata;
 
        info  = devm_kzalloc(&spi_nand->dev, sizeof(struct spinand_info),
                             GFP_KERNEL);
@@ -894,6 +893,7 @@ static int spinand_probe(struct spi_device *spi_nand)
                pr_info("%s: disable ecc failed!\n", __func__);
 #endif
 
+       nand_set_flash_node(chip, spi_nand->dev.of_node);
        chip->priv      = info;
        chip->read_buf  = spinand_read_buf;
        chip->write_buf = spinand_write_buf;
@@ -916,8 +916,7 @@ static int spinand_probe(struct spi_device *spi_nand)
        if (nand_scan(mtd, 1))
                return -ENXIO;
 
-       ppdata.of_node = spi_nand->dev.of_node;
-       return mtd_device_parse_register(mtd, NULL, &ppdata, NULL, 0);
+       return mtd_device_register(mtd, NULL, 0);
 }
 
 /*
index f17fa75..cc84923 100644 (file)
@@ -254,6 +254,17 @@ struct mtd_info {
        int usecount;
 };
 
+static inline void mtd_set_of_node(struct mtd_info *mtd,
+                                  struct device_node *np)
+{
+       mtd->dev.of_node = np;
+}
+
+static inline struct device_node *mtd_get_of_node(struct mtd_info *mtd)
+{
+       return mtd->dev.of_node;
+}
+
 int mtd_erase(struct mtd_info *mtd, struct erase_info *instr);
 int mtd_point(struct mtd_info *mtd, loff_t from, size_t len, size_t *retlen,
              void **virt, resource_size_t *phys);
index 5a9d1d4..4f7c9b9 100644 (file)
@@ -719,6 +719,17 @@ struct nand_chip {
        void *priv;
 };
 
+static inline void nand_set_flash_node(struct nand_chip *chip,
+                                      struct device_node *np)
+{
+       chip->flash_node = np;
+}
+
+static inline struct device_node *nand_get_flash_node(struct nand_chip *chip)
+{
+       return chip->flash_node;
+}
+
 /*
  * NAND Flash Manufacturer ID Codes
  */
index 6a35e6d..8421520 100644 (file)
@@ -41,7 +41,6 @@ struct mtd_partition {
        uint64_t size;                  /* partition size */
        uint64_t offset;                /* offset within the master MTD space */
        uint32_t mask_flags;            /* master MTD flags to mask out for this partition */
-       struct nand_ecclayout *ecclayout;       /* out of band layout for this partition (NAND only) */
 };
 
 #define MTDPART_OFS_RETAIN     (-3)
@@ -56,11 +55,9 @@ struct device_node;
 /**
  * struct mtd_part_parser_data - used to pass data to MTD partition parsers.
  * @origin: for RedBoot, start address of MTD device
- * @of_node: for OF parsers, device node containing partitioning information
  */
 struct mtd_part_parser_data {
        unsigned long origin;
-       struct device_node *of_node;
 };
 
 
index c8723b6..955f268 100644 (file)
@@ -124,7 +124,6 @@ struct mtd_info;
  * @mtd:               point to a mtd_info structure
  * @lock:              the lock for the read/write/erase/lock/unlock operations
  * @dev:               point to a spi device, or a spi nor controller device.
- * @flash_node:                point to a device node describing this flash instance.
  * @page_size:         the page size of the SPI NOR
  * @addr_width:                number of address bytes
  * @erase_opcode:      the opcode for erasing a sector
@@ -155,7 +154,6 @@ struct spi_nor {
        struct mtd_info         mtd;
        struct mutex            lock;
        struct device           *dev;
-       struct device_node      *flash_node;
        u32                     page_size;
        u8                      addr_width;
        u8                      erase_opcode;
@@ -185,6 +183,17 @@ struct spi_nor {
        void *priv;
 };
 
+static inline void spi_nor_set_flash_node(struct spi_nor *nor,
+                                         struct device_node *np)
+{
+       mtd_set_of_node(&nor->mtd, np);
+}
+
+static inline struct device_node *spi_nor_get_flash_node(struct spi_nor *nor)
+{
+       return mtd_get_of_node(&nor->mtd);
+}
+
 /**
  * spi_nor_scan() - scan the SPI NOR
  * @nor:       the spi_nor structure