mirror of
https://github.com/openwrt/openwrt.git
synced 2025-03-03 12:54:38 +00:00
kernel: add pending mtd patches adding NVMEM support
It's meant to provide upstream support for mtd & NVMEM. It's required e.g. for reading MAC address from mtd partition content. It seems to be in a final shape so it's worth testing. Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
This commit is contained in:
parent
deceb03993
commit
e90e75b12c
@ -0,0 +1,69 @@
|
|||||||
|
From 2d751203aacf86a1b301a188d8551c7da91043ab Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <rafal@milecki.pl>
|
||||||
|
Date: Tue, 2 Mar 2021 20:00:12 +0100
|
||||||
|
Subject: [PATCH] mtd: parsers: ofpart: limit parsing of deprecated DT syntax
|
||||||
|
MIME-Version: 1.0
|
||||||
|
Content-Type: text/plain; charset=UTF-8
|
||||||
|
Content-Transfer-Encoding: 8bit
|
||||||
|
|
||||||
|
For backward compatibility ofpart still supports the old syntax like:
|
||||||
|
spi-flash@0 {
|
||||||
|
compatible = "jedec,spi-nor";
|
||||||
|
reg = <0x0>;
|
||||||
|
|
||||||
|
partition@0 {
|
||||||
|
label = "bootloader";
|
||||||
|
reg = <0x0 0x100000>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
(without "partitions" subnode).
|
||||||
|
|
||||||
|
There is no reason however to support nested partitions without a clear
|
||||||
|
"compatible" string like:
|
||||||
|
partitions {
|
||||||
|
compatible = "fixed-partitions";
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <1>;
|
||||||
|
|
||||||
|
partition@0 {
|
||||||
|
label = "bootloader";
|
||||||
|
reg = <0x0 0x100000>;
|
||||||
|
|
||||||
|
partition@0 {
|
||||||
|
label = "config";
|
||||||
|
reg = <0x80000 0x80000>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
(we never officially supported or documented that).
|
||||||
|
|
||||||
|
Make sure ofpart doesn't attempt to parse above.
|
||||||
|
|
||||||
|
Cc: Ansuel Smith <ansuelsmth@gmail.com>
|
||||||
|
Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
|
||||||
|
Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
|
||||||
|
Link: https://lore.kernel.org/linux-mtd/20210302190012.1255-1-zajec5@gmail.com
|
||||||
|
---
|
||||||
|
drivers/mtd/parsers/ofpart_core.c | 4 +++-
|
||||||
|
1 file changed, 3 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
|
--- a/drivers/mtd/parsers/ofpart_core.c
|
||||||
|
+++ b/drivers/mtd/parsers/ofpart_core.c
|
||||||
|
@@ -53,7 +53,7 @@ static int parse_fixed_partitions(struct
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
ofpart_node = of_get_child_by_name(mtd_node, "partitions");
|
||||||
|
- if (!ofpart_node) {
|
||||||
|
+ if (!ofpart_node && !master->parent) {
|
||||||
|
/*
|
||||||
|
* We might get here even when ofpart isn't used at all (e.g.,
|
||||||
|
* when using another parser), so don't be louder than
|
||||||
|
@@ -64,6 +64,8 @@ static int parse_fixed_partitions(struct
|
||||||
|
ofpart_node = mtd_node;
|
||||||
|
dedicated = false;
|
||||||
|
}
|
||||||
|
+ if (!ofpart_node)
|
||||||
|
+ return 0;
|
||||||
|
|
||||||
|
of_id = of_match_node(parse_ofpart_match_table, ofpart_node);
|
||||||
|
if (dedicated && !of_id) {
|
@ -0,0 +1,69 @@
|
|||||||
|
From 2d751203aacf86a1b301a188d8551c7da91043ab Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <rafal@milecki.pl>
|
||||||
|
Date: Tue, 2 Mar 2021 20:00:12 +0100
|
||||||
|
Subject: [PATCH] mtd: parsers: ofpart: limit parsing of deprecated DT syntax
|
||||||
|
MIME-Version: 1.0
|
||||||
|
Content-Type: text/plain; charset=UTF-8
|
||||||
|
Content-Transfer-Encoding: 8bit
|
||||||
|
|
||||||
|
For backward compatibility ofpart still supports the old syntax like:
|
||||||
|
spi-flash@0 {
|
||||||
|
compatible = "jedec,spi-nor";
|
||||||
|
reg = <0x0>;
|
||||||
|
|
||||||
|
partition@0 {
|
||||||
|
label = "bootloader";
|
||||||
|
reg = <0x0 0x100000>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
(without "partitions" subnode).
|
||||||
|
|
||||||
|
There is no reason however to support nested partitions without a clear
|
||||||
|
"compatible" string like:
|
||||||
|
partitions {
|
||||||
|
compatible = "fixed-partitions";
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <1>;
|
||||||
|
|
||||||
|
partition@0 {
|
||||||
|
label = "bootloader";
|
||||||
|
reg = <0x0 0x100000>;
|
||||||
|
|
||||||
|
partition@0 {
|
||||||
|
label = "config";
|
||||||
|
reg = <0x80000 0x80000>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
(we never officially supported or documented that).
|
||||||
|
|
||||||
|
Make sure ofpart doesn't attempt to parse above.
|
||||||
|
|
||||||
|
Cc: Ansuel Smith <ansuelsmth@gmail.com>
|
||||||
|
Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
|
||||||
|
Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
|
||||||
|
Link: https://lore.kernel.org/linux-mtd/20210302190012.1255-1-zajec5@gmail.com
|
||||||
|
---
|
||||||
|
drivers/mtd/parsers/ofpart_core.c | 4 +++-
|
||||||
|
1 file changed, 3 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
|
--- a/drivers/mtd/parsers/ofpart_core.c
|
||||||
|
+++ b/drivers/mtd/parsers/ofpart_core.c
|
||||||
|
@@ -53,7 +53,7 @@ static int parse_fixed_partitions(struct
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
ofpart_node = of_get_child_by_name(mtd_node, "partitions");
|
||||||
|
- if (!ofpart_node) {
|
||||||
|
+ if (!ofpart_node && !mtd_is_partition(master)) {
|
||||||
|
/*
|
||||||
|
* We might get here even when ofpart isn't used at all (e.g.,
|
||||||
|
* when using another parser), so don't be louder than
|
||||||
|
@@ -64,6 +64,8 @@ static int parse_fixed_partitions(struct
|
||||||
|
ofpart_node = mtd_node;
|
||||||
|
dedicated = false;
|
||||||
|
}
|
||||||
|
+ if (!ofpart_node)
|
||||||
|
+ return 0;
|
||||||
|
|
||||||
|
of_id = of_match_node(parse_ofpart_match_table, ofpart_node);
|
||||||
|
if (dedicated && !of_id) {
|
@ -0,0 +1,38 @@
|
|||||||
|
From a5d83d6e2bc747b13f347962d4b335d70b23559b Mon Sep 17 00:00:00 2001
|
||||||
|
From: Ansuel Smith <ansuelsmth@gmail.com>
|
||||||
|
Date: Fri, 12 Mar 2021 07:28:19 +0100
|
||||||
|
Subject: [PATCH] mtd: core: add nvmem-cells compatible to parse mtd as nvmem
|
||||||
|
cells
|
||||||
|
MIME-Version: 1.0
|
||||||
|
Content-Type: text/plain; charset=UTF-8
|
||||||
|
Content-Transfer-Encoding: 8bit
|
||||||
|
|
||||||
|
Partitions that contains the nvmem-cells compatible will register
|
||||||
|
their direct subonodes as nvmem cells and the node will be treated as a
|
||||||
|
nvmem provider.
|
||||||
|
|
||||||
|
Signed-off-by: Ansuel Smith <ansuelsmth@gmail.com>
|
||||||
|
Tested-by: Rafał Miłecki <rafal@milecki.pl>
|
||||||
|
---
|
||||||
|
drivers/mtd/mtdcore.c | 3 ++-
|
||||||
|
1 file changed, 2 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
|
--- a/drivers/mtd/mtdcore.c
|
||||||
|
+++ b/drivers/mtd/mtdcore.c
|
||||||
|
@@ -531,6 +531,7 @@ static int mtd_nvmem_reg_read(void *priv
|
||||||
|
|
||||||
|
static int mtd_nvmem_add(struct mtd_info *mtd)
|
||||||
|
{
|
||||||
|
+ struct device_node *node = mtd_get_of_node(mtd);
|
||||||
|
struct nvmem_config config = {};
|
||||||
|
|
||||||
|
config.id = -1;
|
||||||
|
@@ -543,7 +544,7 @@ static int mtd_nvmem_add(struct mtd_info
|
||||||
|
config.stride = 1;
|
||||||
|
config.read_only = true;
|
||||||
|
config.root_only = true;
|
||||||
|
- config.no_of_node = true;
|
||||||
|
+ config.no_of_node = !of_device_is_compatible(node, "nvmem-cells");
|
||||||
|
config.priv = mtd;
|
||||||
|
|
||||||
|
mtd->nvmem = nvmem_register(&config);
|
@ -0,0 +1,25 @@
|
|||||||
|
From 42645976c3289b03a12f1bd2bc131fd98fc27170 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Ansuel Smith <ansuelsmth@gmail.com>
|
||||||
|
Date: Fri, 12 Mar 2021 07:28:20 +0100
|
||||||
|
Subject: [PATCH] devicetree: nvmem: nvmem: drop $nodename restriction
|
||||||
|
|
||||||
|
Drop $nodename restriction as now mtd partition can also be used as
|
||||||
|
nvmem provider.
|
||||||
|
|
||||||
|
Signed-off-by: Ansuel Smith <ansuelsmth@gmail.com>
|
||||||
|
---
|
||||||
|
Documentation/devicetree/bindings/nvmem/nvmem.yaml | 3 ---
|
||||||
|
1 file changed, 3 deletions(-)
|
||||||
|
|
||||||
|
--- a/Documentation/devicetree/bindings/nvmem/nvmem.yaml
|
||||||
|
+++ b/Documentation/devicetree/bindings/nvmem/nvmem.yaml
|
||||||
|
@@ -20,9 +20,6 @@ description: |
|
||||||
|
storage device.
|
||||||
|
|
||||||
|
properties:
|
||||||
|
- $nodename:
|
||||||
|
- pattern: "^(eeprom|efuse|nvram)(@.*|-[0-9a-f])*$"
|
||||||
|
-
|
||||||
|
"#address-cells":
|
||||||
|
const: 1
|
||||||
|
|
@ -0,0 +1,117 @@
|
|||||||
|
From 377aa0135dc8489312edd3184d143ce3a89ff7ee Mon Sep 17 00:00:00 2001
|
||||||
|
From: Ansuel Smith <ansuelsmth@gmail.com>
|
||||||
|
Date: Fri, 12 Mar 2021 07:28:21 +0100
|
||||||
|
Subject: [PATCH] dt-bindings: mtd: Document use of nvmem-cells compatible
|
||||||
|
|
||||||
|
Document nvmem-cells compatible used to treat mtd partitions as a
|
||||||
|
nvmem provider.
|
||||||
|
|
||||||
|
Signed-off-by: Ansuel Smith <ansuelsmth@gmail.com>
|
||||||
|
Reviewed-by: Rob Herring <robh@kernel.org>
|
||||||
|
---
|
||||||
|
.../bindings/mtd/partitions/nvmem-cells.yaml | 99 +++++++++++++++++++
|
||||||
|
1 file changed, 99 insertions(+)
|
||||||
|
create mode 100644 Documentation/devicetree/bindings/mtd/partitions/nvmem-cells.yaml
|
||||||
|
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/Documentation/devicetree/bindings/mtd/partitions/nvmem-cells.yaml
|
||||||
|
@@ -0,0 +1,99 @@
|
||||||
|
+# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause
|
||||||
|
+%YAML 1.2
|
||||||
|
+---
|
||||||
|
+$id: http://devicetree.org/schemas/mtd/partitions/nvmem-cells.yaml#
|
||||||
|
+$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||||
|
+
|
||||||
|
+title: Nvmem cells
|
||||||
|
+
|
||||||
|
+description: |
|
||||||
|
+ Any partition containing the compatible "nvmem-cells" will register as a
|
||||||
|
+ nvmem provider.
|
||||||
|
+ Each direct subnodes represents a nvmem cell following the nvmem binding.
|
||||||
|
+ Nvmem binding to declare nvmem-cells can be found in:
|
||||||
|
+ Documentation/devicetree/bindings/nvmem/nvmem.yaml
|
||||||
|
+
|
||||||
|
+maintainers:
|
||||||
|
+ - Ansuel Smith <ansuelsmth@gmail.com>
|
||||||
|
+
|
||||||
|
+allOf:
|
||||||
|
+ - $ref: /schemas/nvmem/nvmem.yaml#
|
||||||
|
+
|
||||||
|
+properties:
|
||||||
|
+ compatible:
|
||||||
|
+ const: nvmem-cells
|
||||||
|
+
|
||||||
|
+required:
|
||||||
|
+ - compatible
|
||||||
|
+
|
||||||
|
+additionalProperties: true
|
||||||
|
+
|
||||||
|
+examples:
|
||||||
|
+ - |
|
||||||
|
+ partitions {
|
||||||
|
+ compatible = "fixed-partitions";
|
||||||
|
+ #address-cells = <1>;
|
||||||
|
+ #size-cells = <1>;
|
||||||
|
+
|
||||||
|
+ /* ... */
|
||||||
|
+
|
||||||
|
+ };
|
||||||
|
+ art: art@1200000 {
|
||||||
|
+ compatible = "nvmem-cells";
|
||||||
|
+ reg = <0x1200000 0x0140000>;
|
||||||
|
+ label = "art";
|
||||||
|
+ read-only;
|
||||||
|
+ #address-cells = <1>;
|
||||||
|
+ #size-cells = <1>;
|
||||||
|
+
|
||||||
|
+ macaddr_gmac1: macaddr_gmac1@0 {
|
||||||
|
+ reg = <0x0 0x6>;
|
||||||
|
+ };
|
||||||
|
+
|
||||||
|
+ macaddr_gmac2: macaddr_gmac2@6 {
|
||||||
|
+ reg = <0x6 0x6>;
|
||||||
|
+ };
|
||||||
|
+
|
||||||
|
+ pre_cal_24g: pre_cal_24g@1000 {
|
||||||
|
+ reg = <0x1000 0x2f20>;
|
||||||
|
+ };
|
||||||
|
+
|
||||||
|
+ pre_cal_5g: pre_cal_5g@5000{
|
||||||
|
+ reg = <0x5000 0x2f20>;
|
||||||
|
+ };
|
||||||
|
+ };
|
||||||
|
+ - |
|
||||||
|
+ partitions {
|
||||||
|
+ compatible = "fixed-partitions";
|
||||||
|
+ #address-cells = <1>;
|
||||||
|
+ #size-cells = <1>;
|
||||||
|
+
|
||||||
|
+ partition@0 {
|
||||||
|
+ label = "bootloader";
|
||||||
|
+ reg = <0x000000 0x100000>;
|
||||||
|
+ read-only;
|
||||||
|
+ };
|
||||||
|
+
|
||||||
|
+ firmware@100000 {
|
||||||
|
+ compatible = "brcm,trx";
|
||||||
|
+ label = "firmware";
|
||||||
|
+ reg = <0x100000 0xe00000>;
|
||||||
|
+ };
|
||||||
|
+
|
||||||
|
+ calibration@f00000 {
|
||||||
|
+ compatible = "nvmem-cells";
|
||||||
|
+ label = "calibration";
|
||||||
|
+ reg = <0xf00000 0x100000>;
|
||||||
|
+ ranges = <0 0xf00000 0x100000>;
|
||||||
|
+ #address-cells = <1>;
|
||||||
|
+ #size-cells = <1>;
|
||||||
|
+
|
||||||
|
+ wifi0@0 {
|
||||||
|
+ reg = <0x000000 0x080000>;
|
||||||
|
+ };
|
||||||
|
+
|
||||||
|
+ wifi1@80000 {
|
||||||
|
+ reg = <0x080000 0x080000>;
|
||||||
|
+ };
|
||||||
|
+ };
|
||||||
|
+ };
|
@ -20,7 +20,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
|
|||||||
#include <linux/nvmem-provider.h>
|
#include <linux/nvmem-provider.h>
|
||||||
|
|
||||||
#include <linux/mtd/mtd.h>
|
#include <linux/mtd/mtd.h>
|
||||||
@@ -692,6 +693,15 @@ int add_mtd_device(struct mtd_info *mtd)
|
@@ -693,6 +694,15 @@ int add_mtd_device(struct mtd_info *mtd)
|
||||||
of this try_ nonsense, and no bitching about it
|
of this try_ nonsense, and no bitching about it
|
||||||
either. :) */
|
either. :) */
|
||||||
__module_get(THIS_MODULE);
|
__module_get(THIS_MODULE);
|
||||||
|
@ -17,7 +17,7 @@ Reviewed-by: Miquel Raynal <miquel.raynal@bootlin.com>
|
|||||||
|
|
||||||
--- a/drivers/mtd/mtdcore.c
|
--- a/drivers/mtd/mtdcore.c
|
||||||
+++ b/drivers/mtd/mtdcore.c
|
+++ b/drivers/mtd/mtdcore.c
|
||||||
@@ -1052,6 +1052,44 @@ out_unlock:
|
@@ -1053,6 +1053,44 @@ out_unlock:
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(get_mtd_device_nm);
|
EXPORT_SYMBOL_GPL(get_mtd_device_nm);
|
||||||
|
|
||||||
|
@ -0,0 +1,38 @@
|
|||||||
|
From a5d83d6e2bc747b13f347962d4b335d70b23559b Mon Sep 17 00:00:00 2001
|
||||||
|
From: Ansuel Smith <ansuelsmth@gmail.com>
|
||||||
|
Date: Fri, 12 Mar 2021 07:28:19 +0100
|
||||||
|
Subject: [PATCH] mtd: core: add nvmem-cells compatible to parse mtd as nvmem
|
||||||
|
cells
|
||||||
|
MIME-Version: 1.0
|
||||||
|
Content-Type: text/plain; charset=UTF-8
|
||||||
|
Content-Transfer-Encoding: 8bit
|
||||||
|
|
||||||
|
Partitions that contains the nvmem-cells compatible will register
|
||||||
|
their direct subonodes as nvmem cells and the node will be treated as a
|
||||||
|
nvmem provider.
|
||||||
|
|
||||||
|
Signed-off-by: Ansuel Smith <ansuelsmth@gmail.com>
|
||||||
|
Tested-by: Rafał Miłecki <rafal@milecki.pl>
|
||||||
|
---
|
||||||
|
drivers/mtd/mtdcore.c | 3 ++-
|
||||||
|
1 file changed, 2 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
|
--- a/drivers/mtd/mtdcore.c
|
||||||
|
+++ b/drivers/mtd/mtdcore.c
|
||||||
|
@@ -559,6 +559,7 @@ static int mtd_nvmem_reg_read(void *priv
|
||||||
|
|
||||||
|
static int mtd_nvmem_add(struct mtd_info *mtd)
|
||||||
|
{
|
||||||
|
+ struct device_node *node = mtd_get_of_node(mtd);
|
||||||
|
struct nvmem_config config = {};
|
||||||
|
|
||||||
|
config.id = -1;
|
||||||
|
@@ -571,7 +572,7 @@ static int mtd_nvmem_add(struct mtd_info
|
||||||
|
config.stride = 1;
|
||||||
|
config.read_only = true;
|
||||||
|
config.root_only = true;
|
||||||
|
- config.no_of_node = true;
|
||||||
|
+ config.no_of_node = !of_device_is_compatible(node, "nvmem-cells");
|
||||||
|
config.priv = mtd;
|
||||||
|
|
||||||
|
mtd->nvmem = nvmem_register(&config);
|
@ -0,0 +1,25 @@
|
|||||||
|
From 42645976c3289b03a12f1bd2bc131fd98fc27170 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Ansuel Smith <ansuelsmth@gmail.com>
|
||||||
|
Date: Fri, 12 Mar 2021 07:28:20 +0100
|
||||||
|
Subject: [PATCH] devicetree: nvmem: nvmem: drop $nodename restriction
|
||||||
|
|
||||||
|
Drop $nodename restriction as now mtd partition can also be used as
|
||||||
|
nvmem provider.
|
||||||
|
|
||||||
|
Signed-off-by: Ansuel Smith <ansuelsmth@gmail.com>
|
||||||
|
---
|
||||||
|
Documentation/devicetree/bindings/nvmem/nvmem.yaml | 3 ---
|
||||||
|
1 file changed, 3 deletions(-)
|
||||||
|
|
||||||
|
--- a/Documentation/devicetree/bindings/nvmem/nvmem.yaml
|
||||||
|
+++ b/Documentation/devicetree/bindings/nvmem/nvmem.yaml
|
||||||
|
@@ -20,9 +20,6 @@ description: |
|
||||||
|
storage device.
|
||||||
|
|
||||||
|
properties:
|
||||||
|
- $nodename:
|
||||||
|
- pattern: "^(eeprom|efuse|nvram)(@.*|-[0-9a-f])*$"
|
||||||
|
-
|
||||||
|
"#address-cells":
|
||||||
|
const: 1
|
||||||
|
|
@ -0,0 +1,117 @@
|
|||||||
|
From 377aa0135dc8489312edd3184d143ce3a89ff7ee Mon Sep 17 00:00:00 2001
|
||||||
|
From: Ansuel Smith <ansuelsmth@gmail.com>
|
||||||
|
Date: Fri, 12 Mar 2021 07:28:21 +0100
|
||||||
|
Subject: [PATCH] dt-bindings: mtd: Document use of nvmem-cells compatible
|
||||||
|
|
||||||
|
Document nvmem-cells compatible used to treat mtd partitions as a
|
||||||
|
nvmem provider.
|
||||||
|
|
||||||
|
Signed-off-by: Ansuel Smith <ansuelsmth@gmail.com>
|
||||||
|
Reviewed-by: Rob Herring <robh@kernel.org>
|
||||||
|
---
|
||||||
|
.../bindings/mtd/partitions/nvmem-cells.yaml | 99 +++++++++++++++++++
|
||||||
|
1 file changed, 99 insertions(+)
|
||||||
|
create mode 100644 Documentation/devicetree/bindings/mtd/partitions/nvmem-cells.yaml
|
||||||
|
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/Documentation/devicetree/bindings/mtd/partitions/nvmem-cells.yaml
|
||||||
|
@@ -0,0 +1,99 @@
|
||||||
|
+# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause
|
||||||
|
+%YAML 1.2
|
||||||
|
+---
|
||||||
|
+$id: http://devicetree.org/schemas/mtd/partitions/nvmem-cells.yaml#
|
||||||
|
+$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||||
|
+
|
||||||
|
+title: Nvmem cells
|
||||||
|
+
|
||||||
|
+description: |
|
||||||
|
+ Any partition containing the compatible "nvmem-cells" will register as a
|
||||||
|
+ nvmem provider.
|
||||||
|
+ Each direct subnodes represents a nvmem cell following the nvmem binding.
|
||||||
|
+ Nvmem binding to declare nvmem-cells can be found in:
|
||||||
|
+ Documentation/devicetree/bindings/nvmem/nvmem.yaml
|
||||||
|
+
|
||||||
|
+maintainers:
|
||||||
|
+ - Ansuel Smith <ansuelsmth@gmail.com>
|
||||||
|
+
|
||||||
|
+allOf:
|
||||||
|
+ - $ref: /schemas/nvmem/nvmem.yaml#
|
||||||
|
+
|
||||||
|
+properties:
|
||||||
|
+ compatible:
|
||||||
|
+ const: nvmem-cells
|
||||||
|
+
|
||||||
|
+required:
|
||||||
|
+ - compatible
|
||||||
|
+
|
||||||
|
+additionalProperties: true
|
||||||
|
+
|
||||||
|
+examples:
|
||||||
|
+ - |
|
||||||
|
+ partitions {
|
||||||
|
+ compatible = "fixed-partitions";
|
||||||
|
+ #address-cells = <1>;
|
||||||
|
+ #size-cells = <1>;
|
||||||
|
+
|
||||||
|
+ /* ... */
|
||||||
|
+
|
||||||
|
+ };
|
||||||
|
+ art: art@1200000 {
|
||||||
|
+ compatible = "nvmem-cells";
|
||||||
|
+ reg = <0x1200000 0x0140000>;
|
||||||
|
+ label = "art";
|
||||||
|
+ read-only;
|
||||||
|
+ #address-cells = <1>;
|
||||||
|
+ #size-cells = <1>;
|
||||||
|
+
|
||||||
|
+ macaddr_gmac1: macaddr_gmac1@0 {
|
||||||
|
+ reg = <0x0 0x6>;
|
||||||
|
+ };
|
||||||
|
+
|
||||||
|
+ macaddr_gmac2: macaddr_gmac2@6 {
|
||||||
|
+ reg = <0x6 0x6>;
|
||||||
|
+ };
|
||||||
|
+
|
||||||
|
+ pre_cal_24g: pre_cal_24g@1000 {
|
||||||
|
+ reg = <0x1000 0x2f20>;
|
||||||
|
+ };
|
||||||
|
+
|
||||||
|
+ pre_cal_5g: pre_cal_5g@5000{
|
||||||
|
+ reg = <0x5000 0x2f20>;
|
||||||
|
+ };
|
||||||
|
+ };
|
||||||
|
+ - |
|
||||||
|
+ partitions {
|
||||||
|
+ compatible = "fixed-partitions";
|
||||||
|
+ #address-cells = <1>;
|
||||||
|
+ #size-cells = <1>;
|
||||||
|
+
|
||||||
|
+ partition@0 {
|
||||||
|
+ label = "bootloader";
|
||||||
|
+ reg = <0x000000 0x100000>;
|
||||||
|
+ read-only;
|
||||||
|
+ };
|
||||||
|
+
|
||||||
|
+ firmware@100000 {
|
||||||
|
+ compatible = "brcm,trx";
|
||||||
|
+ label = "firmware";
|
||||||
|
+ reg = <0x100000 0xe00000>;
|
||||||
|
+ };
|
||||||
|
+
|
||||||
|
+ calibration@f00000 {
|
||||||
|
+ compatible = "nvmem-cells";
|
||||||
|
+ label = "calibration";
|
||||||
|
+ reg = <0xf00000 0x100000>;
|
||||||
|
+ ranges = <0 0xf00000 0x100000>;
|
||||||
|
+ #address-cells = <1>;
|
||||||
|
+ #size-cells = <1>;
|
||||||
|
+
|
||||||
|
+ wifi0@0 {
|
||||||
|
+ reg = <0x000000 0x080000>;
|
||||||
|
+ };
|
||||||
|
+
|
||||||
|
+ wifi1@80000 {
|
||||||
|
+ reg = <0x080000 0x080000>;
|
||||||
|
+ };
|
||||||
|
+ };
|
||||||
|
+ };
|
@ -20,7 +20,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
|
|||||||
#include <linux/nvmem-provider.h>
|
#include <linux/nvmem-provider.h>
|
||||||
|
|
||||||
#include <linux/mtd/mtd.h>
|
#include <linux/mtd/mtd.h>
|
||||||
@@ -698,6 +699,15 @@ int add_mtd_device(struct mtd_info *mtd)
|
@@ -699,6 +700,15 @@ int add_mtd_device(struct mtd_info *mtd)
|
||||||
of this try_ nonsense, and no bitching about it
|
of this try_ nonsense, and no bitching about it
|
||||||
either. :) */
|
either. :) */
|
||||||
__module_get(THIS_MODULE);
|
__module_get(THIS_MODULE);
|
||||||
|
@ -17,7 +17,7 @@ Reviewed-by: Miquel Raynal <miquel.raynal@bootlin.com>
|
|||||||
|
|
||||||
--- a/drivers/mtd/mtdcore.c
|
--- a/drivers/mtd/mtdcore.c
|
||||||
+++ b/drivers/mtd/mtdcore.c
|
+++ b/drivers/mtd/mtdcore.c
|
||||||
@@ -1049,6 +1049,44 @@ out_unlock:
|
@@ -1050,6 +1050,44 @@ out_unlock:
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(get_mtd_device_nm);
|
EXPORT_SYMBOL_GPL(get_mtd_device_nm);
|
||||||
|
|
||||||
|
@ -22,7 +22,7 @@ Signed-off-by: Imre Kaloz <kaloz@openwrt.org>
|
|||||||
const char *partname;
|
const char *partname;
|
||||||
struct device_node *pp;
|
struct device_node *pp;
|
||||||
int nr_parts, i, ret = 0;
|
int nr_parts, i, ret = 0;
|
||||||
@@ -124,9 +127,15 @@ static int parse_fixed_partitions(struct
|
@@ -126,9 +129,15 @@ static int parse_fixed_partitions(struct
|
||||||
parts[i].size = of_read_number(reg + a_cells, s_cells);
|
parts[i].size = of_read_number(reg + a_cells, s_cells);
|
||||||
parts[i].of_node = pp;
|
parts[i].of_node = pp;
|
||||||
|
|
||||||
@ -41,7 +41,7 @@ Signed-off-by: Imre Kaloz <kaloz@openwrt.org>
|
|||||||
parts[i].name = partname;
|
parts[i].name = partname;
|
||||||
|
|
||||||
if (of_get_property(pp, "read-only", &len))
|
if (of_get_property(pp, "read-only", &len))
|
||||||
@@ -242,6 +251,18 @@ static int __init ofpart_parser_init(voi
|
@@ -244,6 +253,18 @@ static int __init ofpart_parser_init(voi
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -22,7 +22,7 @@ Signed-off-by: Imre Kaloz <kaloz@openwrt.org>
|
|||||||
const char *partname;
|
const char *partname;
|
||||||
struct device_node *pp;
|
struct device_node *pp;
|
||||||
int nr_parts, i, ret = 0;
|
int nr_parts, i, ret = 0;
|
||||||
@@ -124,9 +127,15 @@ static int parse_fixed_partitions(struct
|
@@ -126,9 +129,15 @@ static int parse_fixed_partitions(struct
|
||||||
parts[i].size = of_read_number(reg + a_cells, s_cells);
|
parts[i].size = of_read_number(reg + a_cells, s_cells);
|
||||||
parts[i].of_node = pp;
|
parts[i].of_node = pp;
|
||||||
|
|
||||||
@ -41,7 +41,7 @@ Signed-off-by: Imre Kaloz <kaloz@openwrt.org>
|
|||||||
parts[i].name = partname;
|
parts[i].name = partname;
|
||||||
|
|
||||||
if (of_get_property(pp, "read-only", &len))
|
if (of_get_property(pp, "read-only", &len))
|
||||||
@@ -239,6 +248,18 @@ static int __init ofpart_parser_init(voi
|
@@ -241,6 +250,18 @@ static int __init ofpart_parser_init(voi
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -48,7 +48,7 @@
|
|||||||
|
|
||||||
/* Pull of_node from the master device node */
|
/* Pull of_node from the master device node */
|
||||||
mtd_node = mtd_get_of_node(master);
|
mtd_node = mtd_get_of_node(master);
|
||||||
@@ -86,7 +120,9 @@ static int parse_fixed_partitions(struct
|
@@ -88,7 +122,9 @@ static int parse_fixed_partitions(struct
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
parts = kcalloc(nr_parts, sizeof(*parts), GFP_KERNEL);
|
parts = kcalloc(nr_parts, sizeof(*parts), GFP_KERNEL);
|
||||||
@ -59,7 +59,7 @@
|
|||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
||||||
i = 0;
|
i = 0;
|
||||||
@@ -135,6 +171,11 @@ static int parse_fixed_partitions(struct
|
@@ -137,6 +173,11 @@ static int parse_fixed_partitions(struct
|
||||||
if (of_get_property(pp, "lock", &len))
|
if (of_get_property(pp, "lock", &len))
|
||||||
parts[i].mask_flags |= MTD_POWERUP_LOCK;
|
parts[i].mask_flags |= MTD_POWERUP_LOCK;
|
||||||
|
|
||||||
@ -71,7 +71,7 @@
|
|||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -144,6 +185,11 @@ static int parse_fixed_partitions(struct
|
@@ -146,6 +187,11 @@ static int parse_fixed_partitions(struct
|
||||||
if (quirks && quirks->post_parse)
|
if (quirks && quirks->post_parse)
|
||||||
quirks->post_parse(master, parts, nr_parts);
|
quirks->post_parse(master, parts, nr_parts);
|
||||||
|
|
||||||
@ -83,7 +83,7 @@
|
|||||||
*pparts = parts;
|
*pparts = parts;
|
||||||
return nr_parts;
|
return nr_parts;
|
||||||
|
|
||||||
@@ -154,6 +200,7 @@ ofpart_fail:
|
@@ -156,6 +202,7 @@ ofpart_fail:
|
||||||
ofpart_none:
|
ofpart_none:
|
||||||
of_node_put(pp);
|
of_node_put(pp);
|
||||||
kfree(parts);
|
kfree(parts);
|
||||||
|
@ -22,7 +22,7 @@ Signed-off-by: Imre Kaloz <kaloz@openwrt.org>
|
|||||||
struct device_node *pp;
|
struct device_node *pp;
|
||||||
int nr_parts, i, ret = 0;
|
int nr_parts, i, ret = 0;
|
||||||
bool dedicated = true;
|
bool dedicated = true;
|
||||||
@@ -124,9 +127,13 @@ static int parse_fixed_partitions(struct
|
@@ -126,9 +129,13 @@ static int parse_fixed_partitions(struct
|
||||||
parts[i].size = of_read_number(reg + a_cells, s_cells);
|
parts[i].size = of_read_number(reg + a_cells, s_cells);
|
||||||
parts[i].of_node = pp;
|
parts[i].of_node = pp;
|
||||||
|
|
||||||
@ -39,7 +39,7 @@ Signed-off-by: Imre Kaloz <kaloz@openwrt.org>
|
|||||||
parts[i].name = partname;
|
parts[i].name = partname;
|
||||||
|
|
||||||
if (of_get_property(pp, "read-only", &len))
|
if (of_get_property(pp, "read-only", &len))
|
||||||
@@ -242,6 +249,18 @@ static int __init ofpart_parser_init(voi
|
@@ -244,6 +251,18 @@ static int __init ofpart_parser_init(voi
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -22,7 +22,7 @@ Signed-off-by: Imre Kaloz <kaloz@openwrt.org>
|
|||||||
struct device_node *pp;
|
struct device_node *pp;
|
||||||
int nr_parts, i, ret = 0;
|
int nr_parts, i, ret = 0;
|
||||||
bool dedicated = true;
|
bool dedicated = true;
|
||||||
@@ -124,9 +127,13 @@ static int parse_fixed_partitions(struct
|
@@ -126,9 +129,13 @@ static int parse_fixed_partitions(struct
|
||||||
parts[i].size = of_read_number(reg + a_cells, s_cells);
|
parts[i].size = of_read_number(reg + a_cells, s_cells);
|
||||||
parts[i].of_node = pp;
|
parts[i].of_node = pp;
|
||||||
|
|
||||||
@ -39,7 +39,7 @@ Signed-off-by: Imre Kaloz <kaloz@openwrt.org>
|
|||||||
parts[i].name = partname;
|
parts[i].name = partname;
|
||||||
|
|
||||||
if (of_get_property(pp, "read-only", &len))
|
if (of_get_property(pp, "read-only", &len))
|
||||||
@@ -239,6 +246,18 @@ static int __init ofpart_parser_init(voi
|
@@ -241,6 +248,18 @@ static int __init ofpart_parser_init(voi
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -34,7 +34,7 @@ Signed-off-by: Abhimanyu Vishwakarma <Abhimanyu.Vishwakarma@imgtec.com>
|
|||||||
mtd->type = MTD_NORFLASH;
|
mtd->type = MTD_NORFLASH;
|
||||||
--- a/drivers/mtd/mtdcore.c
|
--- a/drivers/mtd/mtdcore.c
|
||||||
+++ b/drivers/mtd/mtdcore.c
|
+++ b/drivers/mtd/mtdcore.c
|
||||||
@@ -778,6 +778,17 @@ out_error:
|
@@ -779,6 +779,17 @@ out_error:
|
||||||
*/
|
*/
|
||||||
static void mtd_set_dev_defaults(struct mtd_info *mtd)
|
static void mtd_set_dev_defaults(struct mtd_info *mtd)
|
||||||
{
|
{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user