aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/generic/pending-4.14
diff options
context:
space:
mode:
authorRafał Miłecki <rafal@milecki.pl>2018-04-09 07:14:04 +0200
committerRafał Miłecki <rafal@milecki.pl>2018-04-09 07:16:48 +0200
commitcdcd5c93d733f6c0d6c2b21b98f5793310b867a2 (patch)
treeddb6f927adb446eca2690e644f32c4344a779ab8 /target/linux/generic/pending-4.14
parentdda5d9b78643ca2a943759278c2ef50d595cb509 (diff)
downloadupstream-cdcd5c93d733f6c0d6c2b21b98f5793310b867a2.tar.gz
upstream-cdcd5c93d733f6c0d6c2b21b98f5793310b867a2.tar.bz2
upstream-cdcd5c93d733f6c0d6c2b21b98f5793310b867a2.zip
kernel: use accepted mtd patchset adding support for "compatible" string
These patches were finally accepted and are already present in the Linus's tree. This should be good enough to make is "backport" material. Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
Diffstat (limited to 'target/linux/generic/pending-4.14')
-rw-r--r--target/linux/generic/pending-4.14/160-0001-mtd-partitions-add-of_match_table-parser-matching-fo.patch194
-rw-r--r--target/linux/generic/pending-4.14/160-0002-mtd-rename-ofpart-parser-to-fixed-partitions-as-it-f.patch68
-rw-r--r--target/linux/generic/pending-4.14/160-0003-mtd-ofpart-add-of_match_table-with-fixed-partitions.patch40
3 files changed, 0 insertions, 302 deletions
diff --git a/target/linux/generic/pending-4.14/160-0001-mtd-partitions-add-of_match_table-parser-matching-fo.patch b/target/linux/generic/pending-4.14/160-0001-mtd-partitions-add-of_match_table-parser-matching-fo.patch
deleted file mode 100644
index 3334203d8a..0000000000
--- a/target/linux/generic/pending-4.14/160-0001-mtd-partitions-add-of_match_table-parser-matching-fo.patch
+++ /dev/null
@@ -1,194 +0,0 @@
-From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <rafal@milecki.pl>
-Date: Tue, 30 Jan 2018 11:55:16 +0100
-Subject: [PATCH V10 1/3] mtd: partitions: add of_match_table parser matching
- for the "ofpart" type
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-In order to properly support compatibility strings as described in the
-bindings/mtd/partition.txt "ofpart" type should be treated as an
-indication for looking into OF. MTD should check "compatible" property
-and search for a matching parser rather than blindly trying the one
-supporting "fixed-partitions".
-
-It also means that existing "fixed-partitions" parser should get renamed
-to use a more meaningful name.
-
-This commit achievies that aim by introducing a new mtd_part_of_parse().
-It works by looking for a matching parser for every string in the
-"compatibility" property (starting with the most specific one).
-
-Please note that driver-specified parsers still take a precedence. It's
-assumed that driver providing a parser type has a good reason for that
-(e.g. having platform data with device-specific info). Also doing
-otherwise could break existing setups. The same applies to using default
-parsers (including "cmdlinepart") as some overwrite DT data with cmdline
-argument.
-
-Partition parsers can now provide an of_match_table to enable
-flash<-->parser matching via device tree as documented in the
-mtd/partition.txt.
-
-This support is currently limited to built-in parsers as it uses
-request_module() and friends. This should be sufficient for most cases
-though as compiling parsers as modules isn't a common choice.
-
-Signed-off-by: Brian Norris <computersforpeace@gmail.com>
-Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
-Tested-by: Peter Rosin <peda@axentia.se>
----
-
---- a/drivers/mtd/mtdpart.c
-+++ b/drivers/mtd/mtdpart.c
-@@ -30,6 +30,7 @@
- #include <linux/mtd/mtd.h>
- #include <linux/mtd/partitions.h>
- #include <linux/err.h>
-+#include <linux/of.h>
-
- #include "mtdcore.h"
-
-@@ -894,6 +895,92 @@ static int mtd_part_do_parse(struct mtd_
- }
-
- /**
-+ * mtd_part_get_compatible_parser - find MTD parser by a compatible string
-+ *
-+ * @compat: compatible string describing partitions in a device tree
-+ *
-+ * MTD parsers can specify supported partitions by providing a table of
-+ * compatibility strings. This function finds a parser that advertises support
-+ * for a passed value of "compatible".
-+ */
-+static struct mtd_part_parser *mtd_part_get_compatible_parser(const char *compat)
-+{
-+ struct mtd_part_parser *p, *ret = NULL;
-+
-+ spin_lock(&part_parser_lock);
-+
-+ list_for_each_entry(p, &part_parsers, list) {
-+ const struct of_device_id *matches;
-+
-+ matches = p->of_match_table;
-+ if (!matches)
-+ continue;
-+
-+ for (; matches->compatible[0]; matches++) {
-+ if (!strcmp(matches->compatible, compat) &&
-+ try_module_get(p->owner)) {
-+ ret = p;
-+ break;
-+ }
-+ }
-+
-+ if (ret)
-+ break;
-+ }
-+
-+ spin_unlock(&part_parser_lock);
-+
-+ return ret;
-+}
-+
-+static int mtd_part_of_parse(struct mtd_info *master,
-+ struct mtd_partitions *pparts)
-+{
-+ struct mtd_part_parser *parser;
-+ struct device_node *np;
-+ struct property *prop;
-+ const char *compat;
-+ const char *fixed = "ofpart";
-+ int ret, err = 0;
-+
-+ np = of_get_child_by_name(mtd_get_of_node(master), "partitions");
-+ of_property_for_each_string(np, "compatible", prop, compat) {
-+ parser = mtd_part_get_compatible_parser(compat);
-+ if (!parser)
-+ continue;
-+ ret = mtd_part_do_parse(parser, master, pparts, NULL);
-+ if (ret > 0) {
-+ of_node_put(np);
-+ return ret;
-+ }
-+ mtd_part_parser_put(parser);
-+ if (ret < 0 && !err)
-+ err = ret;
-+ }
-+ of_node_put(np);
-+
-+ /*
-+ * For backward compatibility we have to try the "ofpart"
-+ * parser. It supports old DT format with partitions specified as a
-+ * direct subnodes of a flash device DT node without any compatibility
-+ * specified we could match.
-+ */
-+ parser = mtd_part_parser_get(fixed);
-+ if (!parser && !request_module("%s", fixed))
-+ parser = mtd_part_parser_get(fixed);
-+ if (parser) {
-+ ret = mtd_part_do_parse(parser, master, pparts, NULL);
-+ if (ret > 0)
-+ return ret;
-+ mtd_part_parser_put(parser);
-+ if (ret < 0 && !err)
-+ err = ret;
-+ }
-+
-+ return err;
-+}
-+
-+/**
- * parse_mtd_partitions - parse MTD partitions
- * @master: the master partition (describes whole MTD device)
- * @types: names of partition parsers to try or %NULL
-@@ -925,19 +1012,30 @@ int parse_mtd_partitions(struct mtd_info
- types = default_mtd_part_types;
-
- for ( ; *types; types++) {
-- pr_debug("%s: parsing partitions %s\n", master->name, *types);
-- parser = mtd_part_parser_get(*types);
-- if (!parser && !request_module("%s", *types))
-+ /*
-+ * ofpart is a special type that means OF partitioning info
-+ * should be used. It requires a bit different logic so it is
-+ * handled in a separated function.
-+ */
-+ if (!strcmp(*types, "ofpart")) {
-+ ret = mtd_part_of_parse(master, pparts);
-+ } else {
-+ pr_debug("%s: parsing partitions %s\n", master->name,
-+ *types);
- parser = mtd_part_parser_get(*types);
-- pr_debug("%s: got parser %s\n", master->name,
-- parser ? parser->name : NULL);
-- if (!parser)
-- continue;
-- ret = mtd_part_do_parse(parser, master, pparts, data);
-+ if (!parser && !request_module("%s", *types))
-+ parser = mtd_part_parser_get(*types);
-+ pr_debug("%s: got parser %s\n", master->name,
-+ parser ? parser->name : NULL);
-+ if (!parser)
-+ continue;
-+ ret = mtd_part_do_parse(parser, master, pparts, data);
-+ if (ret <= 0)
-+ mtd_part_parser_put(parser);
-+ }
- /* Found partitions! */
- if (ret > 0)
- return 0;
-- mtd_part_parser_put(parser);
- /*
- * Stash the first error we see; only report it if no parser
- * succeeds
---- a/include/linux/mtd/partitions.h
-+++ b/include/linux/mtd/partitions.h
-@@ -77,6 +77,7 @@ struct mtd_part_parser {
- struct list_head list;
- struct module *owner;
- const char *name;
-+ const struct of_device_id *of_match_table;
- int (*parse_fn)(struct mtd_info *, const struct mtd_partition **,
- struct mtd_part_parser_data *);
- void (*cleanup)(const struct mtd_partition *pparts, int nr_parts);
diff --git a/target/linux/generic/pending-4.14/160-0002-mtd-rename-ofpart-parser-to-fixed-partitions-as-it-f.patch b/target/linux/generic/pending-4.14/160-0002-mtd-rename-ofpart-parser-to-fixed-partitions-as-it-f.patch
deleted file mode 100644
index c380655635..0000000000
--- a/target/linux/generic/pending-4.14/160-0002-mtd-rename-ofpart-parser-to-fixed-partitions-as-it-f.patch
+++ /dev/null
@@ -1,68 +0,0 @@
-From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <rafal@milecki.pl>
-Date: Tue, 30 Jan 2018 12:09:58 +0100
-Subject: [PATCH V10 2/3] mtd: rename "ofpart" parser to "fixed-partitions" as
- it fits it better
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Type "ofpart" means that OF should be used to get partitioning info and
-this driver supports "fixed-partitions" binding only. Renaming it should
-lead to less confusion especially when parsers for new compatibility
-strings start to appear.
-
-Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
----
-
---- a/drivers/mtd/mtdpart.c
-+++ b/drivers/mtd/mtdpart.c
-@@ -940,7 +940,7 @@ static int mtd_part_of_parse(struct mtd_
- struct device_node *np;
- struct property *prop;
- const char *compat;
-- const char *fixed = "ofpart";
-+ const char *fixed = "fixed-partitions";
- int ret, err = 0;
-
- np = of_get_child_by_name(mtd_get_of_node(master), "partitions");
-@@ -960,7 +960,7 @@ static int mtd_part_of_parse(struct mtd_
- of_node_put(np);
-
- /*
-- * For backward compatibility we have to try the "ofpart"
-+ * For backward compatibility we have to try the "fixed-partitions"
- * parser. It supports old DT format with partitions specified as a
- * direct subnodes of a flash device DT node without any compatibility
- * specified we could match.
---- a/drivers/mtd/ofpart.c
-+++ b/drivers/mtd/ofpart.c
-@@ -25,9 +25,9 @@ static bool node_has_compatible(struct d
- return of_get_property(pp, "compatible", NULL);
- }
-
--static int parse_ofpart_partitions(struct mtd_info *master,
-- const struct mtd_partition **pparts,
-- struct mtd_part_parser_data *data)
-+static int parse_fixed_partitions(struct mtd_info *master,
-+ const struct mtd_partition **pparts,
-+ struct mtd_part_parser_data *data)
- {
- struct mtd_partition *parts;
- struct device_node *mtd_node;
-@@ -141,8 +141,8 @@ ofpart_none:
- }
-
- static struct mtd_part_parser ofpart_parser = {
-- .parse_fn = parse_ofpart_partitions,
-- .name = "ofpart",
-+ .parse_fn = parse_fixed_partitions,
-+ .name = "fixed-partitions",
- };
-
- static int parse_ofoldpart_partitions(struct mtd_info *master,
-@@ -229,4 +229,5 @@ MODULE_AUTHOR("Vitaly Wool, David Gibson
- * with the same name. Since we provide the ofoldpart parser, we should have
- * the corresponding alias.
- */
-+MODULE_ALIAS("fixed-partitions");
- MODULE_ALIAS("ofoldpart");
diff --git a/target/linux/generic/pending-4.14/160-0003-mtd-ofpart-add-of_match_table-with-fixed-partitions.patch b/target/linux/generic/pending-4.14/160-0003-mtd-ofpart-add-of_match_table-with-fixed-partitions.patch
deleted file mode 100644
index 08f048f42a..0000000000
--- a/target/linux/generic/pending-4.14/160-0003-mtd-ofpart-add-of_match_table-with-fixed-partitions.patch
+++ /dev/null
@@ -1,40 +0,0 @@
-From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <rafal@milecki.pl>
-Date: Thu, 4 Jan 2018 08:05:34 +0100
-Subject: [PATCH V10 3/3] mtd: ofpart: add of_match_table with
- "fixed-partitions"
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-This allows using this parser with any flash driver that takes care of
-setting of_node (using mtd_set_of_node helper) correctly. Up to now
-support for "fixed-partitions" DT compatibility string was working only
-with flash drivers that were specifying "ofpart" (manually or by letting
-mtd use the default set of parsers).
-
-This matches existing bindings documentation.
-
-Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
-Reviewed-by: Brian Norris <computersforpeace@gmail.com>
-Tested-by: Brian Norris <computersforpeace@gmail.com>
----
-
---- a/drivers/mtd/ofpart.c
-+++ b/drivers/mtd/ofpart.c
-@@ -140,9 +140,16 @@ ofpart_none:
- return ret;
- }
-
-+static const struct of_device_id parse_ofpart_match_table[] = {
-+ { .compatible = "fixed-partitions" },
-+ {},
-+};
-+MODULE_DEVICE_TABLE(of, parse_ofpart_match_table);
-+
- static struct mtd_part_parser ofpart_parser = {
- .parse_fn = parse_fixed_partitions,
- .name = "fixed-partitions",
-+ .of_match_table = parse_ofpart_match_table,
- };
-
- static int parse_ofoldpart_partitions(struct mtd_info *master,