forked from lede-project/source
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
brcm63xx: backport mtd of node changes from upstream
Should fix parser data containing uninitialized values for of probed physmap flashes, which could break e.g. the redboot parser. Signed-off-by: Jonas Gorski <[email protected]>
- Loading branch information
1 parent
86ec410
commit 0ddae04
Showing
12 changed files
with
608 additions
and
23 deletions.
There are no files selected for viewing
78 changes: 78 additions & 0 deletions
78
...et/linux/brcm63xx/patches-4.4/000-4.5-01-mtd-add-get-set-of_node-flash_node-helpers.patch
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,78 @@ | ||
From 28b8b26b308e656edfa9467867d5f79212da2ec3 Mon Sep 17 00:00:00 2001 | ||
From: Brian Norris <[email protected]> | ||
Date: Fri, 30 Oct 2015 20:33:20 -0700 | ||
Subject: [PATCH] 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 | ||
conversions on spi_nor (and nand_chip eventually) too, so get that ready | ||
with their own helpers. | ||
|
||
Signed-off-by: Brian Norris <[email protected]> | ||
Reviewed-by: Boris Brezillon <[email protected]> | ||
--- | ||
include/linux/mtd/mtd.h | 11 +++++++++++ | ||
include/linux/mtd/nand.h | 11 +++++++++++ | ||
include/linux/mtd/spi-nor.h | 11 +++++++++++ | ||
3 files changed, 33 insertions(+) | ||
|
||
--- a/include/linux/mtd/mtd.h | ||
+++ b/include/linux/mtd/mtd.h | ||
@@ -258,6 +258,17 @@ struct mtd_info { | ||
int usecount; | ||
}; | ||
|
||
+static inline void mtd_set_of_node(struct mtd_info *mtd, | ||
+ struct device_node *np) | ||
+{ | ||
+ mtd->dev.of_node = np; | ||
+} | ||
+ | ||
+static inline struct device_node *mtd_get_of_node(struct mtd_info *mtd) | ||
+{ | ||
+ return mtd->dev.of_node; | ||
+} | ||
+ | ||
int mtd_erase(struct mtd_info *mtd, struct erase_info *instr); | ||
int mtd_point(struct mtd_info *mtd, loff_t from, size_t len, size_t *retlen, | ||
void **virt, resource_size_t *phys); | ||
--- a/include/linux/mtd/nand.h | ||
+++ b/include/linux/mtd/nand.h | ||
@@ -719,6 +719,17 @@ struct nand_chip { | ||
void *priv; | ||
}; | ||
|
||
+static inline void nand_set_flash_node(struct nand_chip *chip, | ||
+ struct device_node *np) | ||
+{ | ||
+ chip->flash_node = np; | ||
+} | ||
+ | ||
+static inline struct device_node *nand_get_flash_node(struct nand_chip *chip) | ||
+{ | ||
+ return chip->flash_node; | ||
+} | ||
+ | ||
/* | ||
* NAND Flash Manufacturer ID Codes | ||
*/ | ||
--- a/include/linux/mtd/spi-nor.h | ||
+++ b/include/linux/mtd/spi-nor.h | ||
@@ -184,6 +184,17 @@ struct spi_nor { | ||
void *priv; | ||
}; | ||
|
||
+static inline void spi_nor_set_flash_node(struct spi_nor *nor, | ||
+ struct device_node *np) | ||
+{ | ||
+ nor->flash_node = np; | ||
+} | ||
+ | ||
+static inline struct device_node *spi_nor_get_flash_node(struct spi_nor *nor) | ||
+{ | ||
+ return nor->flash_node; | ||
+} | ||
+ | ||
/** | ||
* spi_nor_scan() - scan the SPI NOR | ||
* @nor: the spi_nor structure |
74 changes: 74 additions & 0 deletions
74
...rcm63xx/patches-4.4/000-4.5-02-mtd-ofpart-grab-device-tree-node-directly-from-maste.patch
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,74 @@ | ||
From 3b6521eab0386a4854d47b1a01947d7dc46ec98d Mon Sep 17 00:00:00 2001 | ||
From: Brian Norris <[email protected]> | ||
Date: Fri, 30 Oct 2015 20:33:21 -0700 | ||
Subject: [PATCH] mtd: ofpart: grab device tree node directly from master | ||
device node | ||
|
||
It seems more logical to use a device node directly associated with the | ||
MTD master device (i.e., mtd->dev.of_node field) rather than requiring | ||
auxiliary partition parser information to be passed in by the driver in | ||
a separate struct. | ||
|
||
This patch supports the mtd->dev.of_node field and deprecates the parser | ||
data 'of_node' field | ||
|
||
Driver conversions may now follow. | ||
|
||
Additional side benefit to assigning mtd->dev.of_node rather than using | ||
parser data: the driver core will automatically create a device -> node | ||
symlink for us. | ||
|
||
Signed-off-by: Brian Norris <[email protected]> | ||
Reviewed-by: Boris Brezillon <[email protected]> | ||
--- | ||
drivers/mtd/ofpart.c | 18 ++++++++++-------- | ||
include/linux/mtd/partitions.h | 4 +++- | ||
2 files changed, 13 insertions(+), 9 deletions(-) | ||
|
||
--- a/drivers/mtd/ofpart.c | ||
+++ b/drivers/mtd/ofpart.c | ||
@@ -37,10 +37,11 @@ static int parse_ofpart_partitions(struc | ||
bool dedicated = true; | ||
|
||
|
||
- if (!data) | ||
- return 0; | ||
- | ||
- mtd_node = data->of_node; | ||
+ /* | ||
+ * 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); | ||
if (!mtd_node) | ||
return 0; | ||
|
||
@@ -157,10 +158,11 @@ static int parse_ofoldpart_partitions(st | ||
} *part; | ||
const char *names; | ||
|
||
- if (!data) | ||
- return 0; | ||
- | ||
- dp = data->of_node; | ||
+ /* | ||
+ * 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); | ||
if (!dp) | ||
return 0; | ||
|
||
--- a/include/linux/mtd/partitions.h | ||
+++ b/include/linux/mtd/partitions.h | ||
@@ -56,7 +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 | ||
+ * @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; |
79 changes: 79 additions & 0 deletions
79
...nux/brcm63xx/patches-4.4/000-4.5-03-spi-nor-convert-to-spi_nor_-get-set-_flash_node.patch
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,79 @@ | ||
From 9c7d787508be6d68a6ec66de3c3466b24e820c71 Mon Sep 17 00:00:00 2001 | ||
From: Brian Norris <[email protected]> | ||
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 <[email protected]> | ||
Reviewed-by: Boris Brezillon <[email protected]> | ||
--- | ||
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 | ||
@@ -1109,7 +1109,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; | ||
|
83 changes: 83 additions & 0 deletions
83
.../brcm63xx/patches-4.4/000-4.5-04-mtd-spi-nor-drop-unnecessary-partition-parser-data.patch
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,83 @@ | ||
From df02c885f8697546da41665f28dde5e30ce99674 Mon Sep 17 00:00:00 2001 | ||
From: Brian Norris <[email protected]> | ||
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 <[email protected]> | ||
Reviewed-by: Boris Brezillon <[email protected]> | ||
--- | ||
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; |
Oops, something went wrong.