From: Jonas Gorski Date: Tue, 7 Feb 2017 10:59:07 +0000 (+0100) Subject: brcm63xx: update flash of_node patches to full patch set X-Git-Tag: v18.06.0-rc1~2778 X-Git-Url: http://git.openwrt.org/?p=openwrt%2Fopenwrt.git;a=commitdiff_plain;h=f62e02cf20c23b55e998edf6874c1a5de3a88c6d brcm63xx: update flash of_node patches to full patch set Fixes missing of_node for SPI flash probed through devicetree. Signed-off-by: Jonas Gorski --- diff --git a/target/linux/brcm63xx/patches-4.4/000-4.5-01-mtd-add-get-set-of_node-flash_node-helpers.patch b/target/linux/brcm63xx/patches-4.4/000-4.5-01-mtd-add-get-set-of_node-flash_node-helpers.patch index 7b39d4a7e8..d4ac4fc0a3 100644 --- a/target/linux/brcm63xx/patches-4.4/000-4.5-01-mtd-add-get-set-of_node-flash_node-helpers.patch +++ b/target/linux/brcm63xx/patches-4.4/000-4.5-01-mtd-add-get-set-of_node-flash_node-helpers.patch @@ -1,7 +1,7 @@ From 28b8b26b308e656edfa9467867d5f79212da2ec3 Mon Sep 17 00:00:00 2001 From: Brian Norris 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 index 0000000000..93bacea83b --- /dev/null +++ b/target/linux/brcm63xx/patches-4.4/000-4.5-03-mtd-nand-spi-nor-assign-MTD-of_node.patch @@ -0,0 +1,37 @@ +From 3e63b26bdd4069c3df2cd7ce7217a21d06801b41 Mon Sep 17 00:00:00 2001 +From: Brian Norris +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 +Reviewed-by: Boris Brezillon +--- + 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-03-spi-nor-convert-to-spi_nor_-get-set-_flash_node.patch b/target/linux/brcm63xx/patches-4.4/000-4.5-03-spi-nor-convert-to-spi_nor_-get-set-_flash_node.patch deleted file mode 100644 index 74af24bbad..0000000000 --- a/target/linux/brcm63xx/patches-4.4/000-4.5-03-spi-nor-convert-to-spi_nor_-get-set-_flash_node.patch +++ /dev/null @@ -1,79 +0,0 @@ -From 9c7d787508be6d68a6ec66de3c3466b24e820c71 Mon Sep 17 00:00:00 2001 -From: Brian Norris -Date: Fri, 30 Oct 2015 20:33:24 -0700 -Subject: [PATCH] mtd: spi-nor: convert to spi_nor_{get, set}_flash_node() - -Used semantic patch with 'make coccicheck MODE=patch COCCI=script.cocci': - ----8<---- -virtual patch - -@@ -struct spi_nor b; -struct spi_nor *c; -expression d; -@@ -( --(b).flash_node = (d) -+spi_nor_set_flash_node(&b, d) -| --(c)->flash_node = (d) -+spi_nor_set_flash_node(c, d) -) ----8<---- - -And a manual conversion for the one use of spi_nor_get_flash_node(). - -Signed-off-by: Brian Norris -Reviewed-by: Boris Brezillon ---- - drivers/mtd/devices/m25p80.c | 2 +- - drivers/mtd/spi-nor/fsl-quadspi.c | 2 +- - drivers/mtd/spi-nor/nxp-spifi.c | 2 +- - drivers/mtd/spi-nor/spi-nor.c | 2 +- - 4 files changed, 4 insertions(+), 4 deletions(-) - ---- a/drivers/mtd/devices/m25p80.c -+++ b/drivers/mtd/devices/m25p80.c -@@ -221,7 +221,7 @@ static int m25p_probe(struct spi_device - 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); ---- a/drivers/mtd/spi-nor/fsl-quadspi.c -+++ b/drivers/mtd/spi-nor/fsl-quadspi.c -@@ -1013,7 +1013,7 @@ static int fsl_qspi_probe(struct platfor - mtd = &nor->mtd; - - nor->dev = dev; -- nor->flash_node = np; -+ spi_nor_set_flash_node(nor, np); - nor->priv = q; - - /* fill the hooks */ ---- a/drivers/mtd/spi-nor/nxp-spifi.c -+++ b/drivers/mtd/spi-nor/nxp-spifi.c -@@ -330,7 +330,7 @@ static int nxp_spifi_setup_flash(struct - 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; ---- a/drivers/mtd/spi-nor/spi-nor.c -+++ b/drivers/mtd/spi-nor/spi-nor.c -@@ -1113,7 +1113,7 @@ int spi_nor_scan(struct spi_nor *nor, co - 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; - 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 index 0000000000..ecfd8c44f5 --- /dev/null +++ b/target/linux/brcm63xx/patches-4.4/000-4.5-04-mtd-nand-convert-to-nand_set_flash_node.patch @@ -0,0 +1,72 @@ +From 6375219951a66047805ed977b674615d152001ee Mon Sep 17 00:00:00 2001 +From: Brian Norris +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 +Reviewed-by: Marek Vasut +Reviewed-by: Boris Brezillon +--- + 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-04-mtd-spi-nor-drop-unnecessary-partition-parser-data.patch b/target/linux/brcm63xx/patches-4.4/000-4.5-04-mtd-spi-nor-drop-unnecessary-partition-parser-data.patch deleted file mode 100644 index dafde1660d..0000000000 --- a/target/linux/brcm63xx/patches-4.4/000-4.5-04-mtd-spi-nor-drop-unnecessary-partition-parser-data.patch +++ /dev/null @@ -1,83 +0,0 @@ -From df02c885f8697546da41665f28dde5e30ce99674 Mon Sep 17 00:00:00 2001 -From: Brian Norris -Date: Fri, 30 Oct 2015 20:33:26 -0700 -Subject: [PATCH] mtd: spi-nor: drop unnecessary partition parser data - -Now that the SPI-NOR/MTD framework pass the 'flash_node' through to the -partition parsing code, we don't have to do it ourselves. - -Also convert to mtd_device_register(), since we don't need the 2nd and -3rd parameters anymore. - -Signed-off-by: Brian Norris -Reviewed-by: Boris Brezillon ---- - drivers/mtd/devices/m25p80.c | 8 ++------ - drivers/mtd/spi-nor/fsl-quadspi.c | 4 +--- - drivers/mtd/spi-nor/nxp-spifi.c | 4 +--- - 3 files changed, 4 insertions(+), 12 deletions(-) - ---- a/drivers/mtd/devices/m25p80.c -+++ b/drivers/mtd/devices/m25p80.c -@@ -197,7 +197,6 @@ static int m25p80_erase(struct spi_nor * - */ - 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; -@@ -249,11 +248,8 @@ static int m25p_probe(struct spi_device - 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); - } - - ---- a/drivers/mtd/spi-nor/fsl-quadspi.c -+++ b/drivers/mtd/spi-nor/fsl-quadspi.c -@@ -927,7 +927,6 @@ static void fsl_qspi_unprep(struct spi_n - 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; -@@ -1038,8 +1037,7 @@ static int fsl_qspi_probe(struct platfor - 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; - ---- a/drivers/mtd/spi-nor/nxp-spifi.c -+++ b/drivers/mtd/spi-nor/nxp-spifi.c -@@ -271,7 +271,6 @@ static void nxp_spifi_dummy_id_read(stru - 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; -@@ -361,8 +360,7 @@ static int nxp_spifi_setup_flash(struct - 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; diff --git a/target/linux/brcm63xx/patches-4.4/000-4.5-05-mtd-drop-unnecessary-partition-parser-data.patch b/target/linux/brcm63xx/patches-4.4/000-4.5-05-mtd-drop-unnecessary-partition-parser-data.patch deleted file mode 100644 index 5bd6c8c57a..0000000000 --- a/target/linux/brcm63xx/patches-4.4/000-4.5-05-mtd-drop-unnecessary-partition-parser-data.patch +++ /dev/null @@ -1,195 +0,0 @@ -From 004b5e6031f4e9fd90d565fb213b74cd06d03718 Mon Sep 17 00:00:00 2001 -From: Brian Norris -Date: Fri, 30 Oct 2015 20:33:28 -0700 -Subject: [PATCH] mtd: drop unnecessary partition parser data - -We should assign the MTD dev.of_node instead of the parser data field. -This gets us the equivalent partition parser behavior with fewer special -fields and parameter passing. - -Also convert several of these to mtd_device_register(), since we don't -need the 2nd and 3rd parameters anymore. - -Signed-off-by: Brian Norris -Reviewed-by: Marek Vasut -Reviewed-by: Boris Brezillon ---- - drivers/mtd/devices/mtd_dataflash.c | 5 ++--- - drivers/mtd/devices/spear_smi.c | 6 ++---- - drivers/mtd/devices/st_spi_fsm.c | 5 ++--- - drivers/mtd/maps/lantiq-flash.c | 5 ++--- - drivers/mtd/maps/physmap_of.c | 5 ++--- - drivers/mtd/onenand/omap2.c | 8 +++----- - 6 files changed, 13 insertions(+), 21 deletions(-) - ---- a/drivers/mtd/devices/mtd_dataflash.c -+++ b/drivers/mtd/devices/mtd_dataflash.c -@@ -624,7 +624,6 @@ static int add_dataflash_otp(struct spi_ - { - 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->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_ - 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); - ---- a/drivers/mtd/devices/spear_smi.c -+++ b/drivers/mtd/devices/spear_smi.c -@@ -810,7 +810,6 @@ static int spear_smi_setup_banks(struct - 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 - 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 - 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; ---- a/drivers/mtd/devices/st_spi_fsm.c -+++ b/drivers/mtd/devices/st_spi_fsm.c -@@ -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_d - 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_d - - 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_d - (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) ---- a/drivers/mtd/maps/lantiq-flash.c -+++ b/drivers/mtd/maps/lantiq-flash.c -@@ -110,7 +110,6 @@ ltq_copy_to(struct map_info *map, unsign - 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 *pd - } - - 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; ---- a/drivers/mtd/maps/physmap_of.c -+++ b/drivers/mtd/maps/physmap_of.c -@@ -128,7 +128,6 @@ static int of_flash_probe(struct platfor - 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; - -@@ -272,8 +271,8 @@ static int of_flash_probe(struct platfor - if (err) - goto err_out; - -- ppdata.of_node = dp; -- mtd_device_parse_register(info->cmtd, part_probe_types_def, &ppdata, -+ mtd_set_of_node(info->cmtd, dp); -+ mtd_device_parse_register(info->cmtd, part_probe_types_def, NULL, - NULL, 0); - - kfree(mtd_list); ---- a/drivers/mtd/onenand/omap2.c -+++ b/drivers/mtd/onenand/omap2.c -@@ -614,7 +614,6 @@ static int omap2_onenand_probe(struct pl - 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 pl - 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 pl - 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; - diff --git a/target/linux/brcm63xx/patches-4.4/000-4.5-05-spi-nor-convert-to-spi_nor_-get-set-_flash_node.patch b/target/linux/brcm63xx/patches-4.4/000-4.5-05-spi-nor-convert-to-spi_nor_-get-set-_flash_node.patch new file mode 100644 index 0000000000..74af24bbad --- /dev/null +++ b/target/linux/brcm63xx/patches-4.4/000-4.5-05-spi-nor-convert-to-spi_nor_-get-set-_flash_node.patch @@ -0,0 +1,79 @@ +From 9c7d787508be6d68a6ec66de3c3466b24e820c71 Mon Sep 17 00:00:00 2001 +From: Brian Norris +Date: Fri, 30 Oct 2015 20:33:24 -0700 +Subject: [PATCH] mtd: spi-nor: convert to spi_nor_{get, set}_flash_node() + +Used semantic patch with 'make coccicheck MODE=patch COCCI=script.cocci': + +---8<---- +virtual patch + +@@ +struct spi_nor b; +struct spi_nor *c; +expression d; +@@ +( +-(b).flash_node = (d) ++spi_nor_set_flash_node(&b, d) +| +-(c)->flash_node = (d) ++spi_nor_set_flash_node(c, d) +) +---8<---- + +And a manual conversion for the one use of spi_nor_get_flash_node(). + +Signed-off-by: Brian Norris +Reviewed-by: Boris Brezillon +--- + drivers/mtd/devices/m25p80.c | 2 +- + drivers/mtd/spi-nor/fsl-quadspi.c | 2 +- + drivers/mtd/spi-nor/nxp-spifi.c | 2 +- + drivers/mtd/spi-nor/spi-nor.c | 2 +- + 4 files changed, 4 insertions(+), 4 deletions(-) + +--- a/drivers/mtd/devices/m25p80.c ++++ b/drivers/mtd/devices/m25p80.c +@@ -221,7 +221,7 @@ static int m25p_probe(struct spi_device + 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); +--- a/drivers/mtd/spi-nor/fsl-quadspi.c ++++ b/drivers/mtd/spi-nor/fsl-quadspi.c +@@ -1013,7 +1013,7 @@ static int fsl_qspi_probe(struct platfor + mtd = &nor->mtd; + + nor->dev = dev; +- nor->flash_node = np; ++ spi_nor_set_flash_node(nor, np); + nor->priv = q; + + /* fill the hooks */ +--- a/drivers/mtd/spi-nor/nxp-spifi.c ++++ b/drivers/mtd/spi-nor/nxp-spifi.c +@@ -330,7 +330,7 @@ static int nxp_spifi_setup_flash(struct + 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; +--- a/drivers/mtd/spi-nor/spi-nor.c ++++ b/drivers/mtd/spi-nor/spi-nor.c +@@ -1113,7 +1113,7 @@ int spi_nor_scan(struct spi_nor *nor, co + 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; + 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 index 0000000000..8a031301b1 --- /dev/null +++ b/target/linux/brcm63xx/patches-4.4/000-4.5-06-mtd-nand-drop-unnecessary-partition-parser-data.patch @@ -0,0 +1,725 @@ +From a61ae81a1907af1987ad4c77300508327bc48b23 Mon Sep 17 00:00:00 2001 +From: Brian Norris +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 +Reviewed-by: Boris Brezillon +--- + 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-06-mtd-ofpart-drop-of_node-partition-parser-data.patch b/target/linux/brcm63xx/patches-4.4/000-4.5-06-mtd-ofpart-drop-of_node-partition-parser-data.patch deleted file mode 100644 index a94e422cad..0000000000 --- a/target/linux/brcm63xx/patches-4.4/000-4.5-06-mtd-ofpart-drop-of_node-partition-parser-data.patch +++ /dev/null @@ -1,61 +0,0 @@ -From e270bca531b40cd0a143176eb093d173b9c6f418 Mon Sep 17 00:00:00 2001 -From: Brian Norris -Date: Fri, 30 Oct 2015 20:33:29 -0700 -Subject: [PATCH] mtd: ofpart: drop 'of_node' partition parser data - -This field is no longer used anywhere, as it is superseded by -mtd->dev.of_node. - -Signed-off-by: Brian Norris -Reviewed-by: Boris Brezillon ---- - drivers/mtd/ofpart.c | 14 ++++---------- - include/linux/mtd/partitions.h | 4 ---- - 2 files changed, 4 insertions(+), 14 deletions(-) - ---- a/drivers/mtd/ofpart.c -+++ b/drivers/mtd/ofpart.c -@@ -37,11 +37,8 @@ static int parse_ofpart_partitions(struc - bool dedicated = true; - - -- /* -- * of_node can be provided through auxiliary parser data or (preferred) -- * by assigning the master device node -- */ -- mtd_node = data && data->of_node ? data->of_node : mtd_get_of_node(master); -+ /* Pull of_node from the master device node */ -+ mtd_node = mtd_get_of_node(master); - if (!mtd_node) - return 0; - -@@ -158,11 +155,8 @@ static int parse_ofoldpart_partitions(st - } *part; - const char *names; - -- /* -- * of_node can be provided through auxiliary parser data or (preferred) -- * by assigning the master device node -- */ -- dp = data && data->of_node ? data->of_node : mtd_get_of_node(master); -+ /* Pull of_node from the master device node */ -+ dp = mtd_get_of_node(master); - if (!dp) - return 0; - ---- a/include/linux/mtd/partitions.h -+++ b/include/linux/mtd/partitions.h -@@ -56,13 +56,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. -- * This field is deprecated, as the device node should simply be -- * assigned to the master struct device. - */ - struct mtd_part_parser_data { - unsigned long origin; -- struct device_node *of_node; - }; - - diff --git a/target/linux/brcm63xx/patches-4.4/000-4.5-07-mtd-spi-nor-drop-unnecessary-partition-parser-data.patch b/target/linux/brcm63xx/patches-4.4/000-4.5-07-mtd-spi-nor-drop-unnecessary-partition-parser-data.patch new file mode 100644 index 0000000000..dafde1660d --- /dev/null +++ b/target/linux/brcm63xx/patches-4.4/000-4.5-07-mtd-spi-nor-drop-unnecessary-partition-parser-data.patch @@ -0,0 +1,83 @@ +From df02c885f8697546da41665f28dde5e30ce99674 Mon Sep 17 00:00:00 2001 +From: Brian Norris +Date: Fri, 30 Oct 2015 20:33:26 -0700 +Subject: [PATCH] mtd: spi-nor: drop unnecessary partition parser data + +Now that the SPI-NOR/MTD framework pass the 'flash_node' through to the +partition parsing code, we don't have to do it ourselves. + +Also convert to mtd_device_register(), since we don't need the 2nd and +3rd parameters anymore. + +Signed-off-by: Brian Norris +Reviewed-by: Boris Brezillon +--- + drivers/mtd/devices/m25p80.c | 8 ++------ + drivers/mtd/spi-nor/fsl-quadspi.c | 4 +--- + drivers/mtd/spi-nor/nxp-spifi.c | 4 +--- + 3 files changed, 4 insertions(+), 12 deletions(-) + +--- a/drivers/mtd/devices/m25p80.c ++++ b/drivers/mtd/devices/m25p80.c +@@ -197,7 +197,6 @@ static int m25p80_erase(struct spi_nor * + */ + 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; +@@ -249,11 +248,8 @@ static int m25p_probe(struct spi_device + 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); + } + + +--- a/drivers/mtd/spi-nor/fsl-quadspi.c ++++ b/drivers/mtd/spi-nor/fsl-quadspi.c +@@ -927,7 +927,6 @@ static void fsl_qspi_unprep(struct spi_n + 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; +@@ -1038,8 +1037,7 @@ static int fsl_qspi_probe(struct platfor + 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; + +--- a/drivers/mtd/spi-nor/nxp-spifi.c ++++ b/drivers/mtd/spi-nor/nxp-spifi.c +@@ -271,7 +271,6 @@ static void nxp_spifi_dummy_id_read(stru + 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; +@@ -361,8 +360,7 @@ static int nxp_spifi_setup_flash(struct + 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; 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 index 0000000000..e8bf8dc119 --- /dev/null +++ b/target/linux/brcm63xx/patches-4.4/000-4.5-08-mtd-spi-nor-drop-flash_node-field.patch @@ -0,0 +1,57 @@ +From 30069af7348b56eb8c5e1dda7788a531c5f24ca2 Mon Sep 17 00:00:00 2001 +From: Brian Norris +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 +Reviewed-by: Boris Brezillon +--- + 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); + } + + /** diff --git a/target/linux/brcm63xx/patches-4.4/000-4.5-09-mtd-drop-unnecessary-partition-parser-data.patch b/target/linux/brcm63xx/patches-4.4/000-4.5-09-mtd-drop-unnecessary-partition-parser-data.patch new file mode 100644 index 0000000000..5bd6c8c57a --- /dev/null +++ b/target/linux/brcm63xx/patches-4.4/000-4.5-09-mtd-drop-unnecessary-partition-parser-data.patch @@ -0,0 +1,195 @@ +From 004b5e6031f4e9fd90d565fb213b74cd06d03718 Mon Sep 17 00:00:00 2001 +From: Brian Norris +Date: Fri, 30 Oct 2015 20:33:28 -0700 +Subject: [PATCH] mtd: drop unnecessary partition parser data + +We should assign the MTD dev.of_node instead of the parser data field. +This gets us the equivalent partition parser behavior with fewer special +fields and parameter passing. + +Also convert several of these to mtd_device_register(), since we don't +need the 2nd and 3rd parameters anymore. + +Signed-off-by: Brian Norris +Reviewed-by: Marek Vasut +Reviewed-by: Boris Brezillon +--- + drivers/mtd/devices/mtd_dataflash.c | 5 ++--- + drivers/mtd/devices/spear_smi.c | 6 ++---- + drivers/mtd/devices/st_spi_fsm.c | 5 ++--- + drivers/mtd/maps/lantiq-flash.c | 5 ++--- + drivers/mtd/maps/physmap_of.c | 5 ++--- + drivers/mtd/onenand/omap2.c | 8 +++----- + 6 files changed, 13 insertions(+), 21 deletions(-) + +--- a/drivers/mtd/devices/mtd_dataflash.c ++++ b/drivers/mtd/devices/mtd_dataflash.c +@@ -624,7 +624,6 @@ static int add_dataflash_otp(struct spi_ + { + 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->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_ + 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); + +--- a/drivers/mtd/devices/spear_smi.c ++++ b/drivers/mtd/devices/spear_smi.c +@@ -810,7 +810,6 @@ static int spear_smi_setup_banks(struct + 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 + 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 + 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; +--- a/drivers/mtd/devices/st_spi_fsm.c ++++ b/drivers/mtd/devices/st_spi_fsm.c +@@ -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_d + 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_d + + 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_d + (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) +--- a/drivers/mtd/maps/lantiq-flash.c ++++ b/drivers/mtd/maps/lantiq-flash.c +@@ -110,7 +110,6 @@ ltq_copy_to(struct map_info *map, unsign + 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 *pd + } + + 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; +--- a/drivers/mtd/maps/physmap_of.c ++++ b/drivers/mtd/maps/physmap_of.c +@@ -128,7 +128,6 @@ static int of_flash_probe(struct platfor + 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; + +@@ -272,8 +271,8 @@ static int of_flash_probe(struct platfor + if (err) + goto err_out; + +- ppdata.of_node = dp; +- mtd_device_parse_register(info->cmtd, part_probe_types_def, &ppdata, ++ mtd_set_of_node(info->cmtd, dp); ++ mtd_device_parse_register(info->cmtd, part_probe_types_def, NULL, + NULL, 0); + + kfree(mtd_list); +--- a/drivers/mtd/onenand/omap2.c ++++ b/drivers/mtd/onenand/omap2.c +@@ -614,7 +614,6 @@ static int omap2_onenand_probe(struct pl + 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 pl + 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 pl + 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; + diff --git a/target/linux/brcm63xx/patches-4.4/000-4.5-10-mtd-ofpart-drop-of_node-partition-parser-data.patch b/target/linux/brcm63xx/patches-4.4/000-4.5-10-mtd-ofpart-drop-of_node-partition-parser-data.patch new file mode 100644 index 0000000000..4c9b11b34c --- /dev/null +++ b/target/linux/brcm63xx/patches-4.4/000-4.5-10-mtd-ofpart-drop-of_node-partition-parser-data.patch @@ -0,0 +1,61 @@ +From e270bca531b40cd0a143176eb093d173b9c6f418 Mon Sep 17 00:00:00 2001 +From: Brian Norris +Date: Fri, 30 Oct 2015 20:33:29 -0700 +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. + +Signed-off-by: Brian Norris +Reviewed-by: Boris Brezillon +--- + drivers/mtd/ofpart.c | 14 ++++---------- + include/linux/mtd/partitions.h | 4 ---- + 2 files changed, 4 insertions(+), 14 deletions(-) + +--- a/drivers/mtd/ofpart.c ++++ b/drivers/mtd/ofpart.c +@@ -37,11 +37,8 @@ static int parse_ofpart_partitions(struc + bool dedicated = true; + + +- /* +- * of_node can be provided through auxiliary parser data or (preferred) +- * by assigning the master device node +- */ +- mtd_node = data && data->of_node ? data->of_node : mtd_get_of_node(master); ++ /* Pull of_node from the master device node */ ++ mtd_node = mtd_get_of_node(master); + if (!mtd_node) + return 0; + +@@ -158,11 +155,8 @@ static int parse_ofoldpart_partitions(st + } *part; + const char *names; + +- /* +- * of_node can be provided through auxiliary parser data or (preferred) +- * by assigning the master device node +- */ +- dp = data && data->of_node ? data->of_node : mtd_get_of_node(master); ++ /* Pull of_node from the master device node */ ++ dp = mtd_get_of_node(master); + if (!dp) + return 0; + +--- a/include/linux/mtd/partitions.h ++++ b/include/linux/mtd/partitions.h +@@ -56,13 +56,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. +- * This field is deprecated, as the device node should simply be +- * assigned to the master struct device. + */ + struct mtd_part_parser_data { + unsigned long origin; +- struct device_node *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 index 0000000000..90eb6dac41 --- /dev/null +++ b/target/linux/brcm63xx/patches-4.4/000-4.5-11-mtd-physmap_of-assign-parent-for-the-concatenated-MT.patch @@ -0,0 +1,27 @@ +From 8361a9b8cb6a9c71b7cf884a87b2532d8367c185 Mon Sep 17 00:00:00 2001 +From: Brian Norris +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 +Reviewed-by: Boris Brezillon +--- + 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);