* [PATCH V2 mtd/next 1/3] dt-bindings: mtd: move partition binding to its own file @ 2021-02-11 16:20 Rafał Miłecki 2021-02-11 16:20 ` [PATCH V2 mtd/next 2/3] dt-bindings: mtd: add binding for BCM4908 partitions Rafał Miłecki 2021-02-11 16:20 ` [PATCH V2 mtd/next 3/3] mtd: parsers: ofpart: support BCM4908 fixed partitions Rafał Miłecki 0 siblings, 2 replies; 5+ messages in thread From: Rafał Miłecki @ 2021-02-11 16:20 UTC (permalink / raw) To: Miquel Raynal, Richard Weinberger, Vignesh Raghavendra, Rob Herring Cc: Boris Brezillon, linux-mtd, devicetree, linux-kernel, Rafał Miłecki, Rob Herring From: Rafał Miłecki <rafal@milecki.pl> Single partition binding is quite common and may be: 1. Used by multiple parsers 2. Extended for more specific cases Move it to separated file to avoid code duplication. Signed-off-by: Rafał Miłecki <rafal@milecki.pl> Reviewed-by: Rob Herring <robh@kernel.org> --- .../mtd/partitions/fixed-partitions.yaml | 33 +------------ .../bindings/mtd/partitions/partition.yaml | 47 +++++++++++++++++++ 2 files changed, 48 insertions(+), 32 deletions(-) create mode 100644 Documentation/devicetree/bindings/mtd/partitions/partition.yaml diff --git a/Documentation/devicetree/bindings/mtd/partitions/fixed-partitions.yaml b/Documentation/devicetree/bindings/mtd/partitions/fixed-partitions.yaml index 6d4a3450e064..ea4cace6a955 100644 --- a/Documentation/devicetree/bindings/mtd/partitions/fixed-partitions.yaml +++ b/Documentation/devicetree/bindings/mtd/partitions/fixed-partitions.yaml @@ -27,38 +27,7 @@ properties: patternProperties: "@[0-9a-f]+$": - description: node describing a single flash partition - type: object - - properties: - reg: - description: partition's offset and size within the flash - maxItems: 1 - - label: - description: The label / name for this partition. If omitted, the label - is taken from the node name (excluding the unit address). - - read-only: - description: This parameter, if present, is a hint that this partition - should only be mounted read-only. This is usually used for flash - partitions containing early-boot firmware images or data which should - not be clobbered. - type: boolean - - lock: - description: Do not unlock the partition at initialization time (not - supported on all devices) - type: boolean - - slc-mode: - description: This parameter, if present, allows one to emulate SLC mode - on a partition attached to an MLC NAND thus making this partition - immune to paired-pages corruptions - type: boolean - - required: - - reg + $ref: "partition.yaml#" required: - "#address-cells" diff --git a/Documentation/devicetree/bindings/mtd/partitions/partition.yaml b/Documentation/devicetree/bindings/mtd/partitions/partition.yaml new file mode 100644 index 000000000000..e1ac08064425 --- /dev/null +++ b/Documentation/devicetree/bindings/mtd/partitions/partition.yaml @@ -0,0 +1,47 @@ +# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/mtd/partitions/partition.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: Partition + +description: | + This binding describes a single flash partition. Each partition must have its + relative offset and size specified. Depending on partition function extra + properties can be used. + +maintainers: + - Rafał Miłecki <rafal@milecki.pl> + +properties: + reg: + description: partition's offset and size within the flash + maxItems: 1 + + label: + description: The label / name for this partition. If omitted, the label + is taken from the node name (excluding the unit address). + + read-only: + description: This parameter, if present, is a hint that this partition + should only be mounted read-only. This is usually used for flash + partitions containing early-boot firmware images or data which should + not be clobbered. + type: boolean + + lock: + description: Do not unlock the partition at initialization time (not + supported on all devices) + type: boolean + + slc-mode: + description: This parameter, if present, allows one to emulate SLC mode + on a partition attached to an MLC NAND thus making this partition + immune to paired-pages corruptions + type: boolean + +required: + - reg + +additionalProperties: true -- 2.26.2 ^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH V2 mtd/next 2/3] dt-bindings: mtd: add binding for BCM4908 partitions 2021-02-11 16:20 [PATCH V2 mtd/next 1/3] dt-bindings: mtd: move partition binding to its own file Rafał Miłecki @ 2021-02-11 16:20 ` Rafał Miłecki 2021-02-11 16:20 ` [PATCH V2 mtd/next 3/3] mtd: parsers: ofpart: support BCM4908 fixed partitions Rafał Miłecki 1 sibling, 0 replies; 5+ messages in thread From: Rafał Miłecki @ 2021-02-11 16:20 UTC (permalink / raw) To: Miquel Raynal, Richard Weinberger, Vignesh Raghavendra, Rob Herring Cc: Boris Brezillon, linux-mtd, devicetree, linux-kernel, Rafał Miłecki From: Rafał Miłecki <rafal@milecki.pl> BCM4908 uses fixed partitions layout but function of some partitions may vary. Some devices use multiple firmware partitions and those partitions should be marked to let system discover their purpose. Signed-off-by: Rafał Miłecki <rafal@milecki.pl> --- V2: Use enum: [ 1, 2 ] for address & size Use ^partition@[0-9a-f]+$ pattern ("partition" was added) Drop unneeded allOf Add unevaluatedProperties --- .../partitions/brcm,bcm4908-partitions.yaml | 70 +++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 Documentation/devicetree/bindings/mtd/partitions/brcm,bcm4908-partitions.yaml diff --git a/Documentation/devicetree/bindings/mtd/partitions/brcm,bcm4908-partitions.yaml b/Documentation/devicetree/bindings/mtd/partitions/brcm,bcm4908-partitions.yaml new file mode 100644 index 000000000000..7b113e5e3421 --- /dev/null +++ b/Documentation/devicetree/bindings/mtd/partitions/brcm,bcm4908-partitions.yaml @@ -0,0 +1,70 @@ +# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/mtd/partitions/brcm,bcm4908-partitions.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: Broadcom BCM4908 partitioning + +description: | + Broadcom BCM4908 CFE bootloader supports two firmware partitions. One is used + for regular booting, the other is treated as fallback. + + This binding allows defining all fixed partitions and marking those containing + firmware. System can use that information e.g. for booting or flashing + purposes. + +maintainers: + - Rafał Miłecki <rafal@milecki.pl> + +properties: + compatible: + const: brcm,bcm4908-partitions + + "#address-cells": + enum: [ 1, 2 ] + + "#size-cells": + enum: [ 1, 2 ] + +patternProperties: + "^partition@[0-9a-f]+$": + $ref: "partition.yaml#" + properties: + compatible: + const: brcm,bcm4908-firmware + unevaluatedProperties: false + +required: + - "#address-cells" + - "#size-cells" + +additionalProperties: false + +examples: + - | + partitions { + compatible = "brcm,bcm4908-partitions"; + #address-cells = <1>; + #size-cells = <1>; + + partition@0 { + label = "cferom"; + reg = <0x0 0x100000>; + }; + + partition@100000 { + compatible = "brcm,bcm4908-firmware"; + reg = <0x100000 0xf00000>; + }; + + partition@1000000 { + compatible = "brcm,bcm4908-firmware"; + reg = <0x1000000 0xf00000>; + }; + + partition@1f00000 { + label = "calibration"; + reg = <0x1f00000 0x100000>; + }; + }; -- 2.26.2 ^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH V2 mtd/next 3/3] mtd: parsers: ofpart: support BCM4908 fixed partitions 2021-02-11 16:20 [PATCH V2 mtd/next 1/3] dt-bindings: mtd: move partition binding to its own file Rafał Miłecki 2021-02-11 16:20 ` [PATCH V2 mtd/next 2/3] dt-bindings: mtd: add binding for BCM4908 partitions Rafał Miłecki @ 2021-02-11 16:20 ` Rafał Miłecki 2021-02-11 19:22 ` kernel test robot 2021-02-11 19:49 ` kernel test robot 1 sibling, 2 replies; 5+ messages in thread From: Rafał Miłecki @ 2021-02-11 16:20 UTC (permalink / raw) To: Miquel Raynal, Richard Weinberger, Vignesh Raghavendra, Rob Herring Cc: Boris Brezillon, linux-mtd, devicetree, linux-kernel, Rafał Miłecki From: Rafał Miłecki <rafal@milecki.pl> BCM4908 partitioning is based on fixed layout but allows specifying multiple firmware partitions. It requires detecting which firmware partition was used for booting current kernel. To support such cases without duplicating a lot of code (without copying most of the ofpart.c code) support for post-parsing callback was added. BCM4908 callback simply reads offset of currently used firmware partition from the DT. Bootloader specifies it using the "brcm_blparms" property. Signed-off-by: Rafał Miłecki <rafal@milecki.pl> --- drivers/mtd/parsers/Makefile | 1 + drivers/mtd/parsers/bcm4908-partitions.c | 62 ++++++++++++++++++++++++ drivers/mtd/parsers/bcm4908-partitions.h | 7 +++ drivers/mtd/parsers/ofpart.c | 28 ++++++++++- 4 files changed, 96 insertions(+), 2 deletions(-) create mode 100644 drivers/mtd/parsers/bcm4908-partitions.c create mode 100644 drivers/mtd/parsers/bcm4908-partitions.h diff --git a/drivers/mtd/parsers/Makefile b/drivers/mtd/parsers/Makefile index 50eb0b0a2210..01972a5edc5c 100644 --- a/drivers/mtd/parsers/Makefile +++ b/drivers/mtd/parsers/Makefile @@ -4,6 +4,7 @@ obj-$(CONFIG_MTD_BCM47XX_PARTS) += bcm47xxpart.o obj-$(CONFIG_MTD_BCM63XX_PARTS) += bcm63xxpart.o obj-$(CONFIG_MTD_CMDLINE_PARTS) += cmdlinepart.o obj-$(CONFIG_MTD_OF_PARTS) += ofpart.o +obj-$(CONFIG_MTD_OF_PARTS) += bcm4908-partitions.o obj-$(CONFIG_MTD_PARSER_IMAGETAG) += parser_imagetag.o obj-$(CONFIG_MTD_AFS_PARTS) += afs.o obj-$(CONFIG_MTD_PARSER_TRX) += parser_trx.o diff --git a/drivers/mtd/parsers/bcm4908-partitions.c b/drivers/mtd/parsers/bcm4908-partitions.c new file mode 100644 index 000000000000..032a4b1b8a5f --- /dev/null +++ b/drivers/mtd/parsers/bcm4908-partitions.c @@ -0,0 +1,62 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Copyright (C) 2021 Rafał Miłecki <rafal@milecki.pl> + */ + +#include <linux/module.h> +#include <linux/init.h> +#include <linux/of.h> +#include <linux/mtd/mtd.h> +#include <linux/slab.h> +#include <linux/mtd/partitions.h> + +#define BLPARAMS_FW_OFFSET "NAND_RFS_OFS" + +static long long bcm4908_partitions_fw_offset(void) +{ + struct device_node *root; + struct property *prop; + const char *s; + + root = of_find_node_by_path("/"); + if (!root) + return -ENOENT; + + of_property_for_each_string(root, "brcm_blparms", prop, s) { + size_t len = strlen(BLPARAMS_FW_OFFSET); + unsigned long offset; + int err; + + if (strncmp(s, BLPARAMS_FW_OFFSET, len) || s[len] != '=') + continue; + + err = kstrtoul(s + len + 1, 0, &offset); + if (err) { + pr_err("failed to parse %s\n", s + len + 1); + return err; + } + + return offset << 10; + } + + return -ENOENT; +} + +int bcm4908_partitions_post_parse(struct mtd_info *mtd, struct mtd_partition *parts, int nr_parts) +{ + long long fw_offset; + int i; + + fw_offset = bcm4908_partitions_fw_offset(); + + for (i = 0; i < nr_parts; i++) { + if (of_device_is_compatible(parts[i].of_node, "brcm,bcm4908-firmware")) { + if (fw_offset < 0 || parts[i].offset == fw_offset) + parts[i].name = "firmware"; + else + parts[i].name = "backup"; + } + } + + return 0; +} diff --git a/drivers/mtd/parsers/bcm4908-partitions.h b/drivers/mtd/parsers/bcm4908-partitions.h new file mode 100644 index 000000000000..df25f0487d0a --- /dev/null +++ b/drivers/mtd/parsers/bcm4908-partitions.h @@ -0,0 +1,7 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#ifndef __BCM4908_PARTITIONS_H +#define __BCM4908_PARTITIONS_H + +int bcm4908_partitions_post_parse(struct mtd_info *mtd, struct mtd_partition *parts, int nr_parts); + +#endif diff --git a/drivers/mtd/parsers/ofpart.c b/drivers/mtd/parsers/ofpart.c index daf507c123e6..6b221df8401c 100644 --- a/drivers/mtd/parsers/ofpart.c +++ b/drivers/mtd/parsers/ofpart.c @@ -16,6 +16,18 @@ #include <linux/slab.h> #include <linux/mtd/partitions.h> +#include "bcm4908-partitions.h" + +struct fixed_partitions_quirks { + int (*post_parse)(struct mtd_info *mtd, struct mtd_partition *parts, int nr_parts); +}; + +struct fixed_partitions_quirks bcm4908_partitions_quirks = { + .post_parse = bcm4908_partitions_post_parse, +}; + +static const struct of_device_id parse_ofpart_match_table[]; + static bool node_has_compatible(struct device_node *pp) { return of_get_property(pp, "compatible", NULL); @@ -25,6 +37,8 @@ static int parse_fixed_partitions(struct mtd_info *master, const struct mtd_partition **pparts, struct mtd_part_parser_data *data) { + const struct fixed_partitions_quirks *quirks; + const struct of_device_id *of_id; struct mtd_partition *parts; struct device_node *mtd_node; struct device_node *ofpart_node; @@ -33,7 +47,6 @@ static int parse_fixed_partitions(struct mtd_info *master, int nr_parts, i, ret = 0; bool dedicated = true; - /* Pull of_node from the master device node */ mtd_node = mtd_get_of_node(master); if (!mtd_node) @@ -50,11 +63,16 @@ static int parse_fixed_partitions(struct mtd_info *master, master->name, mtd_node); ofpart_node = mtd_node; dedicated = false; - } else if (!of_device_is_compatible(ofpart_node, "fixed-partitions")) { + } + + of_id = of_match_node(parse_ofpart_match_table, ofpart_node); + if (dedicated && !of_id) { /* The 'partitions' subnode might be used by another parser */ return 0; } + quirks = of_id ? of_id->data : NULL; + /* First count the subnodes */ nr_parts = 0; for_each_child_of_node(ofpart_node, pp) { @@ -126,6 +144,9 @@ static int parse_fixed_partitions(struct mtd_info *master, if (!nr_parts) goto ofpart_none; + if (quirks && quirks->post_parse) + quirks->post_parse(master, parts, nr_parts); + *pparts = parts; return nr_parts; @@ -140,7 +161,10 @@ static int parse_fixed_partitions(struct mtd_info *master, } static const struct of_device_id parse_ofpart_match_table[] = { + /* Generic */ { .compatible = "fixed-partitions" }, + /* Customized */ + { .compatible = "brcm,bcm4908-partitions", .data = &bcm4908_partitions_quirks, }, {}, }; MODULE_DEVICE_TABLE(of, parse_ofpart_match_table); -- 2.26.2 ^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH V2 mtd/next 3/3] mtd: parsers: ofpart: support BCM4908 fixed partitions 2021-02-11 16:20 ` [PATCH V2 mtd/next 3/3] mtd: parsers: ofpart: support BCM4908 fixed partitions Rafał Miłecki @ 2021-02-11 19:22 ` kernel test robot 2021-02-11 19:49 ` kernel test robot 1 sibling, 0 replies; 5+ messages in thread From: kernel test robot @ 2021-02-11 19:22 UTC (permalink / raw) To: Rafał Miłecki, Miquel Raynal, Richard Weinberger, Vignesh Raghavendra, Rob Herring Cc: kbuild-all, clang-built-linux, Boris Brezillon, linux-mtd, devicetree, linux-kernel, Rafał Miłecki [-- Attachment #1: Type: text/plain, Size: 2543 bytes --] Hi "Rafał, I love your patch! Perhaps something to improve: [auto build test WARNING on mtd/mtd/next] [also build test WARNING on mtd/mtd/fixes robh/for-next v5.11-rc7 next-20210211] [If your patch is applied to the wrong git tree, kindly drop us a note. And when submitting patch, we suggest to use '--base' as documented in https://git-scm.com/docs/git-format-patch] url: https://github.com/0day-ci/linux/commits/Rafa-Mi-ecki/dt-bindings-mtd-move-partition-binding-to-its-own-file/20210212-002803 base: https://git.kernel.org/pub/scm/linux/kernel/git/mtd/linux.git mtd/next config: x86_64-randconfig-a015-20210209 (attached as .config) compiler: clang version 12.0.0 (https://github.com/llvm/llvm-project c9439ca36342fb6013187d0a69aef92736951476) reproduce (this is a W=1 build): wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross # install x86_64 cross compiling tool for clang build # apt-get install binutils-x86-64-linux-gnu # https://github.com/0day-ci/linux/commit/4453a81e3dd814c506fc96674433702c2a25a3c8 git remote add linux-review https://github.com/0day-ci/linux git fetch --no-tags linux-review Rafa-Mi-ecki/dt-bindings-mtd-move-partition-binding-to-its-own-file/20210212-002803 git checkout 4453a81e3dd814c506fc96674433702c2a25a3c8 # save the attached .config to linux build tree COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=x86_64 If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot <lkp@intel.com> All warnings (new ones prefixed by >>): >> drivers/mtd/parsers/bcm4908-partitions.c:45:5: warning: no previous prototype for function 'bcm4908_partitions_post_parse' [-Wmissing-prototypes] int bcm4908_partitions_post_parse(struct mtd_info *mtd, struct mtd_partition *parts, int nr_parts) ^ drivers/mtd/parsers/bcm4908-partitions.c:45:1: note: declare 'static' if the function is not intended to be used outside of this translation unit int bcm4908_partitions_post_parse(struct mtd_info *mtd, struct mtd_partition *parts, int nr_parts) ^ static 1 warning generated. vim +/bcm4908_partitions_post_parse +45 drivers/mtd/parsers/bcm4908-partitions.c 44 > 45 int bcm4908_partitions_post_parse(struct mtd_info *mtd, struct mtd_partition *parts, int nr_parts) --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org [-- Attachment #2: .config.gz --] [-- Type: application/gzip, Size: 41082 bytes --] ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH V2 mtd/next 3/3] mtd: parsers: ofpart: support BCM4908 fixed partitions 2021-02-11 16:20 ` [PATCH V2 mtd/next 3/3] mtd: parsers: ofpart: support BCM4908 fixed partitions Rafał Miłecki 2021-02-11 19:22 ` kernel test robot @ 2021-02-11 19:49 ` kernel test robot 1 sibling, 0 replies; 5+ messages in thread From: kernel test robot @ 2021-02-11 19:49 UTC (permalink / raw) To: Rafał Miłecki, Miquel Raynal, Richard Weinberger, Vignesh Raghavendra, Rob Herring Cc: kbuild-all, Boris Brezillon, linux-mtd, devicetree, linux-kernel, Rafał Miłecki [-- Attachment #1: Type: text/plain, Size: 2104 bytes --] Hi "Rafał, I love your patch! Perhaps something to improve: [auto build test WARNING on mtd/mtd/next] [also build test WARNING on mtd/mtd/fixes robh/for-next v5.11-rc7 next-20210211] [If your patch is applied to the wrong git tree, kindly drop us a note. And when submitting patch, we suggest to use '--base' as documented in https://git-scm.com/docs/git-format-patch] url: https://github.com/0day-ci/linux/commits/Rafa-Mi-ecki/dt-bindings-mtd-move-partition-binding-to-its-own-file/20210212-002803 base: https://git.kernel.org/pub/scm/linux/kernel/git/mtd/linux.git mtd/next config: nds32-randconfig-r014-20210209 (attached as .config) compiler: nds32le-linux-gcc (GCC) 9.3.0 reproduce (this is a W=1 build): wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross # https://github.com/0day-ci/linux/commit/4453a81e3dd814c506fc96674433702c2a25a3c8 git remote add linux-review https://github.com/0day-ci/linux git fetch --no-tags linux-review Rafa-Mi-ecki/dt-bindings-mtd-move-partition-binding-to-its-own-file/20210212-002803 git checkout 4453a81e3dd814c506fc96674433702c2a25a3c8 # save the attached .config to linux build tree COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross ARCH=nds32 If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot <lkp@intel.com> All warnings (new ones prefixed by >>): >> drivers/mtd/parsers/bcm4908-partitions.c:45:5: warning: no previous prototype for 'bcm4908_partitions_post_parse' [-Wmissing-prototypes] 45 | int bcm4908_partitions_post_parse(struct mtd_info *mtd, struct mtd_partition *parts, int nr_parts) | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ vim +/bcm4908_partitions_post_parse +45 drivers/mtd/parsers/bcm4908-partitions.c 44 > 45 int bcm4908_partitions_post_parse(struct mtd_info *mtd, struct mtd_partition *parts, int nr_parts) --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org [-- Attachment #2: .config.gz --] [-- Type: application/gzip, Size: 24056 bytes --] ^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2021-02-11 19:52 UTC | newest] Thread overview: 5+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2021-02-11 16:20 [PATCH V2 mtd/next 1/3] dt-bindings: mtd: move partition binding to its own file Rafał Miłecki 2021-02-11 16:20 ` [PATCH V2 mtd/next 2/3] dt-bindings: mtd: add binding for BCM4908 partitions Rafał Miłecki 2021-02-11 16:20 ` [PATCH V2 mtd/next 3/3] mtd: parsers: ofpart: support BCM4908 fixed partitions Rafał Miłecki 2021-02-11 19:22 ` kernel test robot 2021-02-11 19:49 ` kernel test robot
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).