kernel: backport brcmnand support for "brcm,wp-not-connected"
It's required to support NAND controllers with WP pin on boards that don't have it connected to NAND chip. Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
This commit is contained in:
parent
2feedab805
commit
6ddc9fc4b5
7 changed files with 114 additions and 6 deletions
|
@ -22,7 +22,7 @@ Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
|
||||||
|
|
||||||
/* Enable the static key if the soc provides I/O operations indicating
|
/* Enable the static key if the soc provides I/O operations indicating
|
||||||
* that a non-memory mapped IO access path must be used
|
* that a non-memory mapped IO access path must be used
|
||||||
@@ -3205,8 +3206,6 @@ int brcmnand_probe(struct platform_devic
|
@@ -3209,8 +3210,6 @@ int brcmnand_probe(struct platform_devic
|
||||||
* interesting ways
|
* interesting ways
|
||||||
*/
|
*/
|
||||||
if (soc) {
|
if (soc) {
|
||||||
|
|
|
@ -43,7 +43,7 @@ Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
|
||||||
nand_set_controller_data(chip, host);
|
nand_set_controller_data(chip, host);
|
||||||
mtd->name = devm_kasprintf(dev, GFP_KERNEL, "brcmnand.%d",
|
mtd->name = devm_kasprintf(dev, GFP_KERNEL, "brcmnand.%d",
|
||||||
host->cs);
|
host->cs);
|
||||||
@@ -3236,7 +3229,16 @@ int brcmnand_probe(struct platform_devic
|
@@ -3240,7 +3233,16 @@ int brcmnand_probe(struct platform_devic
|
||||||
host->pdev = pdev;
|
host->pdev = pdev;
|
||||||
host->ctrl = ctrl;
|
host->ctrl = ctrl;
|
||||||
|
|
||||||
|
|
|
@ -32,7 +32,7 @@ Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
|
||||||
/* switch to interrupt polling and PIO mode */
|
/* switch to interrupt polling and PIO mode */
|
||||||
disable_ctrl_irqs(ctrl);
|
disable_ctrl_irqs(ctrl);
|
||||||
sts = bcmnand_ctrl_poll_status(ctrl, NAND_CTRL_RDY,
|
sts = bcmnand_ctrl_poll_status(ctrl, NAND_CTRL_RDY,
|
||||||
@@ -3187,33 +3187,29 @@ int brcmnand_probe(struct platform_devic
|
@@ -3191,33 +3191,29 @@ int brcmnand_probe(struct platform_devic
|
||||||
}
|
}
|
||||||
|
|
||||||
/* IRQ */
|
/* IRQ */
|
||||||
|
|
|
@ -72,7 +72,7 @@ Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
|
||||||
return PTR_ERR(ctrl->nand_base);
|
return PTR_ERR(ctrl->nand_base);
|
||||||
|
|
||||||
/* Enable clock before using NAND registers */
|
/* Enable clock before using NAND registers */
|
||||||
@@ -3214,7 +3214,6 @@ int brcmnand_probe(struct platform_devic
|
@@ -3218,7 +3218,6 @@ int brcmnand_probe(struct platform_devic
|
||||||
|
|
||||||
for_each_available_child_of_node(dn, child) {
|
for_each_available_child_of_node(dn, child) {
|
||||||
if (of_device_is_compatible(child, "brcm,nandcs")) {
|
if (of_device_is_compatible(child, "brcm,nandcs")) {
|
||||||
|
@ -80,7 +80,7 @@ Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
|
||||||
|
|
||||||
host = devm_kzalloc(dev, sizeof(*host), GFP_KERNEL);
|
host = devm_kzalloc(dev, sizeof(*host), GFP_KERNEL);
|
||||||
if (!host) {
|
if (!host) {
|
||||||
@@ -3234,7 +3233,7 @@ int brcmnand_probe(struct platform_devic
|
@@ -3238,7 +3237,7 @@ int brcmnand_probe(struct platform_devic
|
||||||
|
|
||||||
nand_set_flash_node(&host->chip, child);
|
nand_set_flash_node(&host->chip, child);
|
||||||
|
|
||||||
|
@ -89,7 +89,7 @@ Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
|
||||||
if (ret) {
|
if (ret) {
|
||||||
devm_kfree(dev, host);
|
devm_kfree(dev, host);
|
||||||
continue; /* Try all chip-selects */
|
continue; /* Try all chip-selects */
|
||||||
@@ -3244,6 +3243,32 @@ int brcmnand_probe(struct platform_devic
|
@@ -3248,6 +3247,32 @@ int brcmnand_probe(struct platform_devic
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,36 @@
|
||||||
|
From 8e7daa85641c9559c113f6b217bdc923397de77c Mon Sep 17 00:00:00 2001
|
||||||
|
From: William Zhang <william.zhang@broadcom.com>
|
||||||
|
Date: Thu, 22 Feb 2024 19:47:58 -0800
|
||||||
|
Subject: [PATCH] mtd: rawnand: brcmnand: Support write protection setting from
|
||||||
|
dts
|
||||||
|
|
||||||
|
The write protection feature is controlled by the module parameter wp_on
|
||||||
|
with default set to enabled. But not all the board use this feature
|
||||||
|
especially in BCMBCA broadband board. And module parameter is not
|
||||||
|
sufficient as different board can have different option. Add a device
|
||||||
|
tree property and allow this feature to be configured through the board
|
||||||
|
dts on per board basis.
|
||||||
|
|
||||||
|
Signed-off-by: William Zhang <william.zhang@broadcom.com>
|
||||||
|
Reviewed-by: Florian Fainelli <florian.fainelli@broadcom.com>
|
||||||
|
Reviewed-by: Kamal Dasu <kamal.dasu@broadcom.com>
|
||||||
|
Reviewed-by: David Regan <dregan@broadcom.com>
|
||||||
|
Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
|
||||||
|
Link: https://lore.kernel.org/linux-mtd/20240223034758.13753-14-william.zhang@broadcom.com
|
||||||
|
---
|
||||||
|
drivers/mtd/nand/raw/brcmnand/brcmnand.c | 4 ++++
|
||||||
|
1 file changed, 4 insertions(+)
|
||||||
|
|
||||||
|
--- a/drivers/mtd/nand/raw/brcmnand/brcmnand.c
|
||||||
|
+++ b/drivers/mtd/nand/raw/brcmnand/brcmnand.c
|
||||||
|
@@ -3184,6 +3184,10 @@ int brcmnand_probe(struct platform_devic
|
||||||
|
/* Disable XOR addressing */
|
||||||
|
brcmnand_rmw_reg(ctrl, BRCMNAND_CS_XOR, 0xff, 0, 0);
|
||||||
|
|
||||||
|
+ /* Check if the board connects the WP pin */
|
||||||
|
+ if (of_property_read_bool(dn, "brcm,wp-not-connected"))
|
||||||
|
+ wp_on = 0;
|
||||||
|
+
|
||||||
|
if (ctrl->features & BRCMNAND_HAS_WP) {
|
||||||
|
/* Permanently disable write protection */
|
||||||
|
if (wp_on == 2)
|
|
@ -0,0 +1,36 @@
|
||||||
|
From 8e7daa85641c9559c113f6b217bdc923397de77c Mon Sep 17 00:00:00 2001
|
||||||
|
From: William Zhang <william.zhang@broadcom.com>
|
||||||
|
Date: Thu, 22 Feb 2024 19:47:58 -0800
|
||||||
|
Subject: [PATCH] mtd: rawnand: brcmnand: Support write protection setting from
|
||||||
|
dts
|
||||||
|
|
||||||
|
The write protection feature is controlled by the module parameter wp_on
|
||||||
|
with default set to enabled. But not all the board use this feature
|
||||||
|
especially in BCMBCA broadband board. And module parameter is not
|
||||||
|
sufficient as different board can have different option. Add a device
|
||||||
|
tree property and allow this feature to be configured through the board
|
||||||
|
dts on per board basis.
|
||||||
|
|
||||||
|
Signed-off-by: William Zhang <william.zhang@broadcom.com>
|
||||||
|
Reviewed-by: Florian Fainelli <florian.fainelli@broadcom.com>
|
||||||
|
Reviewed-by: Kamal Dasu <kamal.dasu@broadcom.com>
|
||||||
|
Reviewed-by: David Regan <dregan@broadcom.com>
|
||||||
|
Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
|
||||||
|
Link: https://lore.kernel.org/linux-mtd/20240223034758.13753-14-william.zhang@broadcom.com
|
||||||
|
---
|
||||||
|
drivers/mtd/nand/raw/brcmnand/brcmnand.c | 4 ++++
|
||||||
|
1 file changed, 4 insertions(+)
|
||||||
|
|
||||||
|
--- a/drivers/mtd/nand/raw/brcmnand/brcmnand.c
|
||||||
|
+++ b/drivers/mtd/nand/raw/brcmnand/brcmnand.c
|
||||||
|
@@ -3188,6 +3188,10 @@ int brcmnand_probe(struct platform_devic
|
||||||
|
/* Disable XOR addressing */
|
||||||
|
brcmnand_rmw_reg(ctrl, BRCMNAND_CS_XOR, 0xff, 0, 0);
|
||||||
|
|
||||||
|
+ /* Check if the board connects the WP pin */
|
||||||
|
+ if (of_property_read_bool(dn, "brcm,wp-not-connected"))
|
||||||
|
+ wp_on = 0;
|
||||||
|
+
|
||||||
|
if (ctrl->features & BRCMNAND_HAS_WP) {
|
||||||
|
/* Permanently disable write protection */
|
||||||
|
if (wp_on == 2)
|
|
@ -0,0 +1,36 @@
|
||||||
|
From 8e7daa85641c9559c113f6b217bdc923397de77c Mon Sep 17 00:00:00 2001
|
||||||
|
From: William Zhang <william.zhang@broadcom.com>
|
||||||
|
Date: Thu, 22 Feb 2024 19:47:58 -0800
|
||||||
|
Subject: [PATCH] mtd: rawnand: brcmnand: Support write protection setting from
|
||||||
|
dts
|
||||||
|
|
||||||
|
The write protection feature is controlled by the module parameter wp_on
|
||||||
|
with default set to enabled. But not all the board use this feature
|
||||||
|
especially in BCMBCA broadband board. And module parameter is not
|
||||||
|
sufficient as different board can have different option. Add a device
|
||||||
|
tree property and allow this feature to be configured through the board
|
||||||
|
dts on per board basis.
|
||||||
|
|
||||||
|
Signed-off-by: William Zhang <william.zhang@broadcom.com>
|
||||||
|
Reviewed-by: Florian Fainelli <florian.fainelli@broadcom.com>
|
||||||
|
Reviewed-by: Kamal Dasu <kamal.dasu@broadcom.com>
|
||||||
|
Reviewed-by: David Regan <dregan@broadcom.com>
|
||||||
|
Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
|
||||||
|
Link: https://lore.kernel.org/linux-mtd/20240223034758.13753-14-william.zhang@broadcom.com
|
||||||
|
---
|
||||||
|
drivers/mtd/nand/raw/brcmnand/brcmnand.c | 4 ++++
|
||||||
|
1 file changed, 4 insertions(+)
|
||||||
|
|
||||||
|
--- a/drivers/mtd/nand/raw/brcmnand/brcmnand.c
|
||||||
|
+++ b/drivers/mtd/nand/raw/brcmnand/brcmnand.c
|
||||||
|
@@ -3189,6 +3189,10 @@ int brcmnand_probe(struct platform_devic
|
||||||
|
/* Disable XOR addressing */
|
||||||
|
brcmnand_rmw_reg(ctrl, BRCMNAND_CS_XOR, 0xff, 0, 0);
|
||||||
|
|
||||||
|
+ /* Check if the board connects the WP pin */
|
||||||
|
+ if (of_property_read_bool(dn, "brcm,wp-not-connected"))
|
||||||
|
+ wp_on = 0;
|
||||||
|
+
|
||||||
|
if (ctrl->features & BRCMNAND_HAS_WP) {
|
||||||
|
/* Permanently disable write protection */
|
||||||
|
if (wp_on == 2)
|
Loading…
Reference in a new issue