]> git.ipfire.org Git - thirdparty/openwrt.git/commitdiff
brcm63xx: update flash of_node patches to full patch set
authorJonas Gorski <jonas.gorski@gmail.com>
Tue, 7 Feb 2017 10:59:07 +0000 (11:59 +0100)
committerJonas Gorski <jonas.gorski@gmail.com>
Sun, 4 Jun 2017 08:40:00 +0000 (10:40 +0200)
Fixes missing of_node for SPI flash probed through devicetree.

Signed-off-by: Jonas Gorski <jonas.gorski@gmail.com>
target/linux/brcm63xx/patches-4.4/000-4.5-01-mtd-add-get-set-of_node-flash_node-helpers.patch
target/linux/brcm63xx/patches-4.4/000-4.5-03-mtd-nand-spi-nor-assign-MTD-of_node.patch [new file with mode: 0644]
target/linux/brcm63xx/patches-4.4/000-4.5-04-mtd-nand-convert-to-nand_set_flash_node.patch [new file with mode: 0644]
target/linux/brcm63xx/patches-4.4/000-4.5-05-spi-nor-convert-to-spi_nor_-get-set-_flash_node.patch [moved from target/linux/brcm63xx/patches-4.4/000-4.5-03-spi-nor-convert-to-spi_nor_-get-set-_flash_node.patch with 100% similarity]
target/linux/brcm63xx/patches-4.4/000-4.5-06-mtd-nand-drop-unnecessary-partition-parser-data.patch [new file with mode: 0644]
target/linux/brcm63xx/patches-4.4/000-4.5-07-mtd-spi-nor-drop-unnecessary-partition-parser-data.patch [moved from target/linux/brcm63xx/patches-4.4/000-4.5-04-mtd-spi-nor-drop-unnecessary-partition-parser-data.patch with 100% similarity]
target/linux/brcm63xx/patches-4.4/000-4.5-08-mtd-spi-nor-drop-flash_node-field.patch [new file with mode: 0644]
target/linux/brcm63xx/patches-4.4/000-4.5-09-mtd-drop-unnecessary-partition-parser-data.patch [moved from target/linux/brcm63xx/patches-4.4/000-4.5-05-mtd-drop-unnecessary-partition-parser-data.patch with 100% similarity]
target/linux/brcm63xx/patches-4.4/000-4.5-10-mtd-ofpart-drop-of_node-partition-parser-data.patch [moved from target/linux/brcm63xx/patches-4.4/000-4.5-06-mtd-ofpart-drop-of_node-partition-parser-data.patch with 96% similarity]
target/linux/brcm63xx/patches-4.4/000-4.5-11-mtd-physmap_of-assign-parent-for-the-concatenated-MT.patch [new file with mode: 0644]

index 7b39d4a7e846e60c83f7b9b1b11ec2e653c5f6cf..d4ac4fc0a38788a5636b9e9b40f3904bebe17f2f 100644 (file)
@@ -1,7 +1,7 @@
 From 28b8b26b308e656edfa9467867d5f79212da2ec3 Mon Sep 17 00:00:00 2001
 From: Brian Norris <computersforpeace@gmail.com>
 Date: Fri, 30 Oct 2015 20:33:20 -0700
-Subject: [PATCH] mtd: add get/set of_node/flash_node helpers
+Subject: [PATCH 01/11] mtd: add get/set of_node/flash_node helpers
 
 We are going to begin using the mtd->dev.of_node field for MTD device
 nodes, so let's add helpers for it. Also, we'll be making some
diff --git a/target/linux/brcm63xx/patches-4.4/000-4.5-03-mtd-nand-spi-nor-assign-MTD-of_node.patch b/target/linux/brcm63xx/patches-4.4/000-4.5-03-mtd-nand-spi-nor-assign-MTD-of_node.patch
new file mode 100644 (file)
index 0000000..93bacea
--- /dev/null
@@ -0,0 +1,37 @@
+From 3e63b26bdd4069c3df2cd7ce7217a21d06801b41 Mon Sep 17 00:00:00 2001
+From: Brian Norris <computersforpeace@gmail.com>
+Date: Fri, 30 Oct 2015 20:33:22 -0700
+Subject: [PATCH 03/11] mtd: {nand,spi-nor}: assign MTD of_node
+
+We should pass along our flash DT node to the MTD layer, so it can set
+up ofpart for us.
+
+Signed-off-by: Brian Norris <computersforpeace@gmail.com>
+Reviewed-by: Boris Brezillon <boris.brezillon@free-electrons.com>
+---
+ drivers/mtd/nand/nand_base.c  | 3 +++
+ drivers/mtd/spi-nor/spi-nor.c | 1 +
+ 2 files changed, 4 insertions(+)
+
+--- a/drivers/mtd/nand/nand_base.c
++++ b/drivers/mtd/nand/nand_base.c
+@@ -3989,6 +3989,9 @@ int nand_scan_ident(struct mtd_info *mtd
+       int ret;
+       if (chip->flash_node) {
++              /* MTD can automatically handle DT partitions, etc. */
++              mtd_set_of_node(mtd, chip->flash_node);
++
+               ret = nand_dt_init(mtd, chip, chip->flash_node);
+               if (ret)
+                       return ret;
+--- a/drivers/mtd/spi-nor/spi-nor.c
++++ b/drivers/mtd/spi-nor/spi-nor.c
+@@ -1221,6 +1221,7 @@ int spi_nor_scan(struct spi_nor *nor, co
+               mtd->flags |= MTD_NO_ERASE;
+       mtd->dev.parent = dev;
++      mtd_set_of_node(mtd, np);
+       nor->page_size = info->page_size;
+       mtd->writebufsize = nor->page_size;
diff --git a/target/linux/brcm63xx/patches-4.4/000-4.5-04-mtd-nand-convert-to-nand_set_flash_node.patch b/target/linux/brcm63xx/patches-4.4/000-4.5-04-mtd-nand-convert-to-nand_set_flash_node.patch
new file mode 100644 (file)
index 0000000..ecfd8c4
--- /dev/null
@@ -0,0 +1,72 @@
+From 6375219951a66047805ed977b674615d152001ee Mon Sep 17 00:00:00 2001
+From: Brian Norris <computersforpeace@gmail.com>
+Date: Fri, 30 Oct 2015 20:33:23 -0700
+Subject: [PATCH 04/11] mtd: nand: convert to nand_set_flash_node()
+
+Used semantic patch with 'make coccicheck MODE=patch COCCI=script.cocci':
+
+---8<----
+virtual patch
+
+@@
+struct nand_chip *c;
+struct device_node *d;
+@@
+-(c)->flash_node = (d)
++nand_set_flash_node(c, d)
+---8<----
+
+Signed-off-by: Brian Norris <computersforpeace@gmail.com>
+Reviewed-by: Marek Vasut <marex@denx.de>
+Reviewed-by: Boris Brezillon <boris.brezillon@free-electrons.com>
+---
+ drivers/mtd/nand/brcmnand/brcmnand.c | 2 +-
+ drivers/mtd/nand/fsmc_nand.c         | 2 +-
+ drivers/mtd/nand/sunxi_nand.c        | 2 +-
+ drivers/mtd/nand/vf610_nfc.c         | 2 +-
+ 4 files changed, 4 insertions(+), 4 deletions(-)
+
+--- a/drivers/mtd/nand/brcmnand/brcmnand.c
++++ b/drivers/mtd/nand/brcmnand/brcmnand.c
+@@ -1957,7 +1957,7 @@ static int brcmnand_init_cs(struct brcmn
+       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",
+--- a/drivers/mtd/nand/fsmc_nand.c
++++ b/drivers/mtd/nand/fsmc_nand.c
+@@ -1033,7 +1033,7 @@ static int __init fsmc_nand_probe(struct
+       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;
+--- a/drivers/mtd/nand/sunxi_nand.c
++++ b/drivers/mtd/nand/sunxi_nand.c
+@@ -1330,7 +1330,7 @@ static int sunxi_nand_chip_init(struct d
+        * 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;
+--- a/drivers/mtd/nand/vf610_nfc.c
++++ b/drivers/mtd/nand/vf610_nfc.c
+@@ -714,7 +714,7 @@ static int vf610_nfc_probe(struct platfo
+                               goto error;
+                       }
+-                      chip->flash_node = child;
++                      nand_set_flash_node(chip, child);
+               }
+       }
diff --git a/target/linux/brcm63xx/patches-4.4/000-4.5-06-mtd-nand-drop-unnecessary-partition-parser-data.patch b/target/linux/brcm63xx/patches-4.4/000-4.5-06-mtd-nand-drop-unnecessary-partition-parser-data.patch
new file mode 100644 (file)
index 0000000..8a03130
--- /dev/null
@@ -0,0 +1,725 @@
+From a61ae81a1907af1987ad4c77300508327bc48b23 Mon Sep 17 00:00:00 2001
+From: Brian Norris <computersforpeace@gmail.com>
+Date: Fri, 30 Oct 2015 20:33:25 -0700
+Subject: [PATCH 06/11] mtd: nand: drop unnecessary partition parser data
+
+All of these drivers set up a parser data struct just to communicate DT
+partition data. This field has been deprecated and is instead supported
+by telling nand_scan_ident() about the 'flash_node'.
+
+This patch:
+ * sets chip->flash_node for those drivers that didn't already (but used
+   OF partitioning)
+ * drops the parser data
+ * switches to the simpler mtd_device_register() where possible, now
+   that we've eliminated one of the auxiliary parameters
+
+Now that we've assigned chip->flash_node for these drivers, we can
+probably rely on nand_dt_init() to do more of the DT parsing for us, but
+for now, I don't want to fiddle with each of these drivers. The parsing
+is done in duplicate for now on some drivers. I don't think this should
+break things. (Famous last words.)
+
+(Rolled in some changes by Boris Brezillon)
+
+Signed-off-by: Brian Norris <computersforpeace@gmail.com>
+Reviewed-by: Boris Brezillon <boris.brezillon@free-electrons.com>
+---
+ drivers/mtd/nand/atmel_nand.c                 |  7 +++----
+ drivers/mtd/nand/brcmnand/brcmnand.c          |  3 +--
+ drivers/mtd/nand/davinci_nand.c               | 10 +++-------
+ drivers/mtd/nand/fsl_elbc_nand.c              |  5 ++---
+ drivers/mtd/nand/fsl_ifc_nand.c               |  5 ++---
+ drivers/mtd/nand/fsl_upm.c                    |  5 ++---
+ drivers/mtd/nand/fsmc_nand.c                  |  7 +++----
+ drivers/mtd/nand/gpio.c                       |  8 +++-----
+ drivers/mtd/nand/gpmi-nand/gpmi-nand.c        |  5 ++---
+ drivers/mtd/nand/hisi504_nand.c               |  5 ++---
+ drivers/mtd/nand/lpc32xx_mlc.c                |  7 +++----
+ drivers/mtd/nand/lpc32xx_slc.c                |  7 +++----
+ drivers/mtd/nand/mpc5121_nfc.c                |  5 ++---
+ drivers/mtd/nand/mxc_nand.c                   |  5 ++---
+ drivers/mtd/nand/ndfc.c                       |  5 ++---
+ drivers/mtd/nand/omap2.c                      |  6 ++----
+ drivers/mtd/nand/orion_nand.c                 |  6 ++----
+ drivers/mtd/nand/plat_nand.c                  |  5 ++---
+ drivers/mtd/nand/pxa3xx_nand.c                | 10 +++++-----
+ drivers/mtd/nand/sh_flctl.c                   |  6 ++----
+ drivers/mtd/nand/socrates_nand.c              |  5 ++---
+ drivers/mtd/nand/sunxi_nand.c                 |  4 +---
+ drivers/mtd/nand/vf610_nfc.c                  |  6 +-----
+ drivers/staging/mt29f_spinand/mt29f_spinand.c |  5 ++---
+ 24 files changed, 54 insertions(+), 88 deletions(-)
+
+--- a/drivers/mtd/nand/atmel_nand.c
++++ b/drivers/mtd/nand/atmel_nand.c
+@@ -2093,7 +2093,6 @@ static int atmel_nand_probe(struct platf
+       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 platf
+       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 platf
+       }
+       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;
+--- a/drivers/mtd/nand/brcmnand/brcmnand.c
++++ b/drivers/mtd/nand/brcmnand/brcmnand.c
+@@ -1946,7 +1946,6 @@ static int brcmnand_init_cs(struct brcmn
+       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) {
+@@ -2025,7 +2024,7 @@ static int brcmnand_init_cs(struct brcmn
+       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,
+--- a/drivers/mtd/nand/davinci_nand.c
++++ b/drivers/mtd/nand/davinci_nand.c
+@@ -687,6 +687,7 @@ static int nand_davinci_probe(struct pla
+       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;
+@@ -842,13 +843,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;
+--- a/drivers/mtd/nand/fsl_elbc_nand.c
++++ b/drivers/mtd/nand/fsl_elbc_nand.c
+@@ -748,6 +748,7 @@ static int fsl_elbc_chip_init(struct fsl
+       /* 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 pl
+       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 pl
+       /* 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",
+--- a/drivers/mtd/nand/fsl_ifc_nand.c
++++ b/drivers/mtd/nand/fsl_ifc_nand.c
+@@ -883,6 +883,7 @@ static int fsl_ifc_chip_init(struct fsl_
+       /* 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 pla
+       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 pla
+       /* 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",
+--- a/drivers/mtd/nand/fsl_upm.c
++++ b/drivers/mtd/nand/fsl_upm.c
+@@ -159,7 +159,6 @@ static int fun_chip_init(struct fsl_upm_
+ {
+       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_
+       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_
+       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)
+--- a/drivers/mtd/nand/fsmc_nand.c
++++ b/drivers/mtd/nand/fsmc_nand.c
+@@ -926,7 +926,6 @@ static int __init fsmc_nand_probe(struct
+ {
+       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
+       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;
+@@ -1175,9 +1175,8 @@ static int __init fsmc_nand_probe(struct
+        * 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;
+--- a/drivers/mtd/nand/gpio.c
++++ b/drivers/mtd/nand/gpio.c
+@@ -209,7 +209,6 @@ static int gpio_nand_probe(struct platfo
+       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 platfo
+               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 platfo
+               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;
+--- a/drivers/mtd/nand/gpmi-nand/gpmi-nand.c
++++ b/drivers/mtd/nand/gpmi-nand/gpmi-nand.c
+@@ -1888,7 +1888,6 @@ static int gpmi_nand_init(struct gpmi_na
+ {
+       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_na
+       /* 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_na
+       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;
+--- a/drivers/mtd/nand/hisi504_nand.c
++++ b/drivers/mtd/nand/hisi504_nand.c
+@@ -704,7 +704,6 @@ static int hisi_nfc_probe(struct platfor
+       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 platfor
+       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 platfor
+               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;
+--- a/drivers/mtd/nand/lpc32xx_mlc.c
++++ b/drivers/mtd/nand/lpc32xx_mlc.c
+@@ -647,7 +647,6 @@ static int lpc32xx_nand_probe(struct pla
+       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 pla
+       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 pla
+       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;
+--- a/drivers/mtd/nand/lpc32xx_slc.c
++++ b/drivers/mtd/nand/lpc32xx_slc.c
+@@ -763,7 +763,6 @@ static int lpc32xx_nand_probe(struct pla
+       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 pla
+       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 pla
+       }
+       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;
+--- a/drivers/mtd/nand/mpc5121_nfc.c
++++ b/drivers/mtd/nand/mpc5121_nfc.c
+@@ -639,7 +639,6 @@ static int mpc5121_nfc_probe(struct plat
+       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 plat
+       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 plat
+       }
+       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 plat
+       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;
+--- a/drivers/mtd/nand/mxc_nand.c
++++ b/drivers/mtd/nand/mxc_nand.c
+@@ -1524,6 +1524,7 @@ static int mxcnd_probe(struct platform_d
+       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_d
+       /* 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);
+--- a/drivers/mtd/nand/ndfc.c
++++ b/drivers/mtd/nand/ndfc.c
+@@ -147,7 +147,6 @@ static int ndfc_chip_init(struct ndfc_co
+ {
+       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_co
+       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_co
+       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);
+--- a/drivers/mtd/nand/omap2.c
++++ b/drivers/mtd/nand/omap2.c
+@@ -1663,7 +1663,6 @@ static int omap_nand_probe(struct platfo
+       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 platfo
+       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);
+--- a/drivers/mtd/nand/orion_nand.c
++++ b/drivers/mtd/nand/orion_nand.c
+@@ -76,7 +76,6 @@ static void orion_nand_read_buf(struct m
+ 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(struc
+       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(struc
+       }
+       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;
+--- a/drivers/mtd/nand/plat_nand.c
++++ b/drivers/mtd/nand/plat_nand.c
+@@ -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 platfo
+               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;
+@@ -105,8 +105,7 @@ static int plat_nand_probe(struct platfo
+       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);
+--- a/drivers/mtd/nand/pxa3xx_nand.c
++++ b/drivers/mtd/nand/pxa3xx_nand.c
+@@ -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 pl
+               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 p
+ 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 plat
+                       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;
+       }
+--- a/drivers/mtd/nand/sh_flctl.c
++++ b/drivers/mtd/nand/sh_flctl.c
+@@ -1086,7 +1086,6 @@ static int flctl_probe(struct platform_d
+       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_d
+       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_d
+       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;
+--- a/drivers/mtd/nand/socrates_nand.c
++++ b/drivers/mtd/nand/socrates_nand.c
+@@ -147,7 +147,6 @@ static int socrates_nand_probe(struct pl
+       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 pl
+       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 pl
+               goto out;
+       }
+-      res = mtd_device_parse_register(mtd, NULL, &ppdata, NULL, 0);
++      res = mtd_device_register(mtd, NULL, 0);
+       if (!res)
+               return res;
+--- a/drivers/mtd/nand/sunxi_nand.c
++++ b/drivers/mtd/nand/sunxi_nand.c
+@@ -1232,7 +1232,6 @@ static int sunxi_nand_chip_init(struct d
+ {
+       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;
+@@ -1366,8 +1365,7 @@ static int sunxi_nand_chip_init(struct d
+               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);
+--- a/drivers/mtd/nand/vf610_nfc.c
++++ b/drivers/mtd/nand/vf610_nfc.c
+@@ -811,11 +811,7 @@ static int vf610_nfc_probe(struct platfo
+       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);
+--- a/drivers/staging/mt29f_spinand/mt29f_spinand.c
++++ b/drivers/staging/mt29f_spinand/mt29f_spinand.c
+@@ -850,7 +850,6 @@ static int spinand_probe(struct spi_devi
+       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_devi
+               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_devi
+       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);
+ }
+ /*
diff --git a/target/linux/brcm63xx/patches-4.4/000-4.5-08-mtd-spi-nor-drop-flash_node-field.patch b/target/linux/brcm63xx/patches-4.4/000-4.5-08-mtd-spi-nor-drop-flash_node-field.patch
new file mode 100644 (file)
index 0000000..e8bf8dc
--- /dev/null
@@ -0,0 +1,57 @@
+From 30069af7348b56eb8c5e1dda7788a531c5f24ca2 Mon Sep 17 00:00:00 2001
+From: Brian Norris <computersforpeace@gmail.com>
+Date: Fri, 30 Oct 2015 20:33:27 -0700
+Subject: [PATCH 08/11] mtd: spi-nor: drop flash_node field
+
+We can just alias to the MTD of_node.
+
+Signed-off-by: Brian Norris <computersforpeace@gmail.com>
+Reviewed-by: Boris Brezillon <boris.brezillon@free-electrons.com>
+---
+ drivers/mtd/spi-nor/spi-nor.c | 1 -
+ include/linux/mtd/spi-nor.h   | 6 ++----
+ 2 files changed, 2 insertions(+), 5 deletions(-)
+
+--- a/drivers/mtd/spi-nor/spi-nor.c
++++ b/drivers/mtd/spi-nor/spi-nor.c
+@@ -1221,7 +1221,6 @@ int spi_nor_scan(struct spi_nor *nor, co
+               mtd->flags |= MTD_NO_ERASE;
+       mtd->dev.parent = dev;
+-      mtd_set_of_node(mtd, np);
+       nor->page_size = info->page_size;
+       mtd->writebufsize = nor->page_size;
+--- a/include/linux/mtd/spi-nor.h
++++ b/include/linux/mtd/spi-nor.h
+@@ -123,7 +123,6 @@ enum spi_nor_option_flags {
+  * @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
+@@ -154,7 +153,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;
+@@ -187,12 +185,12 @@ struct spi_nor {
+ static inline void spi_nor_set_flash_node(struct spi_nor *nor,
+                                         struct device_node *np)
+ {
+-      nor->flash_node = np;
++      mtd_set_of_node(&nor->mtd, np);
+ }
+ static inline struct device_node *spi_nor_get_flash_node(struct spi_nor *nor)
+ {
+-      return nor->flash_node;
++      return mtd_get_of_node(&nor->mtd);
+ }
+ /**
similarity index 96%
rename from target/linux/brcm63xx/patches-4.4/000-4.5-06-mtd-ofpart-drop-of_node-partition-parser-data.patch
rename to target/linux/brcm63xx/patches-4.4/000-4.5-10-mtd-ofpart-drop-of_node-partition-parser-data.patch
index a94e422cad43f6e73d1a9cd16db951282767a56a..4c9b11b34c168515cda6a26fc16138fa3441a087 100644 (file)
@@ -1,7 +1,7 @@
 From e270bca531b40cd0a143176eb093d173b9c6f418 Mon Sep 17 00:00:00 2001
 From: Brian Norris <computersforpeace@gmail.com>
 Date: Fri, 30 Oct 2015 20:33:29 -0700
-Subject: [PATCH] mtd: ofpart: drop 'of_node' partition parser data
+Subject: [PATCH 10/11] mtd: ofpart: drop 'of_node' partition parser data
 
 This field is no longer used anywhere, as it is superseded by
 mtd->dev.of_node.
diff --git a/target/linux/brcm63xx/patches-4.4/000-4.5-11-mtd-physmap_of-assign-parent-for-the-concatenated-MT.patch b/target/linux/brcm63xx/patches-4.4/000-4.5-11-mtd-physmap_of-assign-parent-for-the-concatenated-MT.patch
new file mode 100644 (file)
index 0000000..90eb6da
--- /dev/null
@@ -0,0 +1,27 @@
+From 8361a9b8cb6a9c71b7cf884a87b2532d8367c185 Mon Sep 17 00:00:00 2001
+From: Brian Norris <computersforpeace@gmail.com>
+Date: Fri, 30 Oct 2015 20:33:30 -0700
+Subject: [PATCH 11/11] mtd: physmap_of: assign parent for the concatenated MTD
+
+If there is more than one map region for this device, then the
+concatenated MTD will not have a parent device assigned to it -- only
+the sub-devices (which are not actually registered with the framework)
+will have their parents assigned. Let's assign the concatenated device
+correctly.
+
+Signed-off-by: Brian Norris <computersforpeace@gmail.com>
+Reviewed-by: Boris Brezillon <boris.brezillon@free-electrons.com>
+---
+ drivers/mtd/maps/physmap_of.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+--- a/drivers/mtd/maps/physmap_of.c
++++ b/drivers/mtd/maps/physmap_of.c
+@@ -271,6 +271,7 @@ static int of_flash_probe(struct platfor
+       if (err)
+               goto err_out;
++      info->cmtd->dev.parent = &dev->dev;
+       mtd_set_of_node(info->cmtd, dp);
+       mtd_device_parse_register(info->cmtd, part_probe_types_def, NULL,
+                       NULL, 0);