12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- From 53980645bb12bd8723ac226805ee171780b24196 Mon Sep 17 00:00:00 2001
- From: Jonas Gorski <[email protected]>
- Date: Mon, 26 Jun 2017 13:37:11 +0200
- Subject: [PATCH 1/4] mtd: add of_match_table parsing for partition parsers
- Allow partition parsers to be matched by attaching compatible strings to
- partitions.
- This allows specifying the expected format of flash partitions for
- matching partition parsers.
- Example:
- flash@foo {
- ...
- partitions {
- compatible = "fixed-partitions";
- cfe@0 {
- reg = <0x0 0x10000>;
- label = "cfe";
- read-only;
- };
- firmware@10000 {
- reg = <0x10000 0x3e0000>;
- label = "firmware";
- compatible = "brcm,bcm63xx-imagetag";
- };
- nvram@3f0000 {
- reg = <0x3e0000 0x10000>;
- label = "nvram";
- };
- };
- };
- Signed-off-by: Jonas Gorski <[email protected]>
- ---
- drivers/mtd/mtdpart.c | 12 ++++++++----
- 1 file changed, 8 insertions(+), 4 deletions(-)
- --- a/drivers/mtd/mtdpart.c
- +++ b/drivers/mtd/mtdpart.c
- @@ -953,8 +953,7 @@ int add_mtd_partitions(struct mtd_info *
- add_mtd_device(&slave->mtd);
- mtd_partition_split(master, slave);
- mtd_add_partition_attrs(slave);
- - if (parts[i].types)
- - mtd_parse_part(slave, parts[i].types);
- + mtd_parse_part(slave, parts[i].types);
-
- cur_offset = slave->offset + slave->mtd.size;
- }
- @@ -1164,7 +1163,9 @@ int parse_mtd_partitions(struct mtd_info
- types = types_of;
- }
-
- - np = of_get_child_by_name(mtd_get_of_node(master), "partitions");
- + np = mtd_get_of_node(master);
- + if (!mtd_is_partition(master))
- + np = of_get_child_by_name(np, "partitions");
- of_property_for_each_string(np, "compatible", prop, compat) {
- parser = mtd_part_get_compatible_parser(compat);
- if (!parser)
- @@ -1180,8 +1181,12 @@ int parse_mtd_partitions(struct mtd_info
- }
- of_node_put(np);
-
- - if (!types)
- + if (!types) {
- + if (mtd_is_partition(master))
- + return -ENOENT;
- +
- types = default_mtd_part_types;
- + }
-
- for ( ; *types; types++) {
- pr_debug("%s: parsing partitions %s\n", master->name, *types);
|