From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-lj1-x244.google.com ([2a00:1450:4864:20::244]) by bombadil.infradead.org with esmtps (Exim 4.90_1 #2 (Red Hat Linux)) id 1fdz7s-0000F0-QV for linux-mtd@lists.infradead.org; Fri, 13 Jul 2018 14:32:54 +0000 Received: by mail-lj1-x244.google.com with SMTP id 1-v6so24636477ljv.9 for ; Fri, 13 Jul 2018 07:32:42 -0700 (PDT) From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= To: Brian Norris , David Woodhouse , Boris Brezillon , Marek Vasut , Richard Weinberger , Rob Herring Cc: Mark Rutland , linux-mtd@lists.infradead.org, devicetree@vger.kernel.org, Jonas Gorski , =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= Subject: [PATCH V2 2/2] mtd: partitions: use DT info for parsing partitions with "compatible" prop Date: Fri, 13 Jul 2018 16:32:21 +0200 Message-Id: <20180713143221.8474-2-zajec5@gmail.com> In-Reply-To: <20180713143221.8474-1-zajec5@gmail.com> References: <20180713143221.8474-1-zajec5@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit List-Id: Linux MTD discussion mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , From: Rafał Miłecki So far only flash devices could be described in DT regarding partitions parsing. That could be done with "partitions" subnode and a proper "compatible" string. Some devices may use hierarchical (multi-level) layouts and may mix used layouts (fixed and dynamic). Describing that in DT is done by specifying "compatible" for DT-represented partition plus optionally more properties and/or subnodes. To support such layouts each DT partition has to be checked for additional description. Please note this implementation will work in parallel with support for partition type specified for non-DT setups. That already works since commit 1a0915be1926 ("mtd: partitions: add support for partition parsers"). Signed-off-by: Rafał Miłecki --- V2: Updated commit message (more details + info about non-DT cases) --- drivers/mtd/mtdpart.c | 33 +++++++++++++-------------------- 1 file changed, 13 insertions(+), 20 deletions(-) diff --git a/drivers/mtd/mtdpart.c b/drivers/mtd/mtdpart.c index f8d3a015cdad..52e2cb35fc79 100644 --- a/drivers/mtd/mtdpart.c +++ b/drivers/mtd/mtdpart.c @@ -322,22 +322,6 @@ static inline void free_partition(struct mtd_part *p) kfree(p); } -/** - * mtd_parse_part - parse MTD partition looking for subpartitions - * - * @slave: part that is supposed to be a container and should be parsed - * @types: NULL-terminated array with names of partition parsers to try - * - * Some partitions are kind of containers with extra subpartitions (volumes). - * There can be various formats of such containers. This function tries to use - * specified parsers to analyze given partition and registers found - * subpartitions on success. - */ -static int mtd_parse_part(struct mtd_part *slave, const char *const *types) -{ - return parse_mtd_partitions(&slave->mtd, types, NULL); -} - static struct mtd_part *allocate_partition(struct mtd_info *parent, const struct mtd_partition *part, int partno, uint64_t cur_offset) @@ -735,8 +719,8 @@ int add_mtd_partitions(struct mtd_info *master, add_mtd_device(&slave->mtd); mtd_add_partition_attrs(slave); - if (parts[i].types) - mtd_parse_part(slave, parts[i].types); + /* Look for subpartitions */ + parse_mtd_partitions(&slave->mtd, parts[i].types, NULL); cur_offset = slave->offset + slave->mtd.size; } @@ -812,6 +796,12 @@ static const char * const default_mtd_part_types[] = { NULL }; +/* Check DT only when looking for subpartitions. */ +static const char * const default_subpartition_types[] = { + "ofpart", + NULL +}; + static int mtd_part_do_parse(struct mtd_part_parser *parser, struct mtd_info *master, struct mtd_partitions *pparts, @@ -882,7 +872,9 @@ static int mtd_part_of_parse(struct mtd_info *master, const char *fixed = "fixed-partitions"; int ret, err = 0; - 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) @@ -945,7 +937,8 @@ int parse_mtd_partitions(struct mtd_info *master, const char *const *types, int ret, err = 0; if (!types) - types = default_mtd_part_types; + types = mtd_is_partition(master) ? default_subpartition_types : + default_mtd_part_types; for ( ; *types; types++) { /* -- 2.13.7 From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= Subject: [PATCH V2 2/2] mtd: partitions: use DT info for parsing partitions with "compatible" prop Date: Fri, 13 Jul 2018 16:32:21 +0200 Message-ID: <20180713143221.8474-2-zajec5@gmail.com> References: <20180713143221.8474-1-zajec5@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20180713143221.8474-1-zajec5@gmail.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-mtd" Errors-To: linux-mtd-bounces+gldm-linux-mtd-36=gmane.org@lists.infradead.org To: Brian Norris , David Woodhouse , Boris Brezillon , Marek Vasut , Richard Weinberger , Rob Herring Cc: Mark Rutland , devicetree@vger.kernel.org, linux-mtd@lists.infradead.org, =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= , Jonas Gorski List-Id: devicetree@vger.kernel.org RnJvbTogUmFmYcWCIE1pxYJlY2tpIDxyYWZhbEBtaWxlY2tpLnBsPgoKU28gZmFyIG9ubHkgZmxh c2ggZGV2aWNlcyBjb3VsZCBiZSBkZXNjcmliZWQgaW4gRFQgcmVnYXJkaW5nIHBhcnRpdGlvbnMK cGFyc2luZy4gVGhhdCBjb3VsZCBiZSBkb25lIHdpdGggInBhcnRpdGlvbnMiIHN1Ym5vZGUgYW5k IGEgcHJvcGVyCiJjb21wYXRpYmxlIiBzdHJpbmcuCgpTb21lIGRldmljZXMgbWF5IHVzZSBoaWVy YXJjaGljYWwgKG11bHRpLWxldmVsKSBsYXlvdXRzIGFuZCBtYXkgbWl4IHVzZWQKbGF5b3V0cyAo Zml4ZWQgYW5kIGR5bmFtaWMpLiBEZXNjcmliaW5nIHRoYXQgaW4gRFQgaXMgZG9uZSBieSBzcGVj aWZ5aW5nCiJjb21wYXRpYmxlIiBmb3IgRFQtcmVwcmVzZW50ZWQgcGFydGl0aW9uIHBsdXMgb3B0 aW9uYWxseSBtb3JlCnByb3BlcnRpZXMgYW5kL29yIHN1Ym5vZGVzLgoKVG8gc3VwcG9ydCBzdWNo IGxheW91dHMgZWFjaCBEVCBwYXJ0aXRpb24gaGFzIHRvIGJlIGNoZWNrZWQgZm9yCmFkZGl0aW9u YWwgZGVzY3JpcHRpb24uCgpQbGVhc2Ugbm90ZSB0aGlzIGltcGxlbWVudGF0aW9uIHdpbGwgd29y ayBpbiBwYXJhbGxlbCB3aXRoIHN1cHBvcnQgZm9yCnBhcnRpdGlvbiB0eXBlIHNwZWNpZmllZCBm b3Igbm9uLURUIHNldHVwcy4gVGhhdCBhbHJlYWR5IHdvcmtzIHNpbmNlCmNvbW1pdCAxYTA5MTVi ZTE5MjYgKCJtdGQ6IHBhcnRpdGlvbnM6IGFkZCBzdXBwb3J0IGZvciBwYXJ0aXRpb24KcGFyc2Vy cyIpLgoKU2lnbmVkLW9mZi1ieTogUmFmYcWCIE1pxYJlY2tpIDxyYWZhbEBtaWxlY2tpLnBsPgot LS0KVjI6IFVwZGF0ZWQgY29tbWl0IG1lc3NhZ2UgKG1vcmUgZGV0YWlscyArIGluZm8gYWJvdXQg bm9uLURUIGNhc2VzKQotLS0KIGRyaXZlcnMvbXRkL210ZHBhcnQuYyB8IDMzICsrKysrKysrKysr KystLS0tLS0tLS0tLS0tLS0tLS0tLQogMSBmaWxlIGNoYW5nZWQsIDEzIGluc2VydGlvbnMoKyks IDIwIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL210ZHBhcnQuYyBiL2Ry aXZlcnMvbXRkL210ZHBhcnQuYwppbmRleCBmOGQzYTAxNWNkYWQuLjUyZTJjYjM1ZmM3OSAxMDA2 NDQKLS0tIGEvZHJpdmVycy9tdGQvbXRkcGFydC5jCisrKyBiL2RyaXZlcnMvbXRkL210ZHBhcnQu YwpAQCAtMzIyLDIyICszMjIsNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZnJlZV9wYXJ0aXRpb24o c3RydWN0IG10ZF9wYXJ0ICpwKQogCWtmcmVlKHApOwogfQogCi0vKioKLSAqIG10ZF9wYXJzZV9w YXJ0IC0gcGFyc2UgTVREIHBhcnRpdGlvbiBsb29raW5nIGZvciBzdWJwYXJ0aXRpb25zCi0gKgot ICogQHNsYXZlOiBwYXJ0IHRoYXQgaXMgc3VwcG9zZWQgdG8gYmUgYSBjb250YWluZXIgYW5kIHNo b3VsZCBiZSBwYXJzZWQKLSAqIEB0eXBlczogTlVMTC10ZXJtaW5hdGVkIGFycmF5IHdpdGggbmFt ZXMgb2YgcGFydGl0aW9uIHBhcnNlcnMgdG8gdHJ5Ci0gKgotICogU29tZSBwYXJ0aXRpb25zIGFy ZSBraW5kIG9mIGNvbnRhaW5lcnMgd2l0aCBleHRyYSBzdWJwYXJ0aXRpb25zICh2b2x1bWVzKS4K LSAqIFRoZXJlIGNhbiBiZSB2YXJpb3VzIGZvcm1hdHMgb2Ygc3VjaCBjb250YWluZXJzLiBUaGlz IGZ1bmN0aW9uIHRyaWVzIHRvIHVzZQotICogc3BlY2lmaWVkIHBhcnNlcnMgdG8gYW5hbHl6ZSBn aXZlbiBwYXJ0aXRpb24gYW5kIHJlZ2lzdGVycyBmb3VuZAotICogc3VicGFydGl0aW9ucyBvbiBz dWNjZXNzLgotICovCi1zdGF0aWMgaW50IG10ZF9wYXJzZV9wYXJ0KHN0cnVjdCBtdGRfcGFydCAq c2xhdmUsIGNvbnN0IGNoYXIgKmNvbnN0ICp0eXBlcykKLXsKLQlyZXR1cm4gcGFyc2VfbXRkX3Bh cnRpdGlvbnMoJnNsYXZlLT5tdGQsIHR5cGVzLCBOVUxMKTsKLX0KLQogc3RhdGljIHN0cnVjdCBt dGRfcGFydCAqYWxsb2NhdGVfcGFydGl0aW9uKHN0cnVjdCBtdGRfaW5mbyAqcGFyZW50LAogCQkJ Y29uc3Qgc3RydWN0IG10ZF9wYXJ0aXRpb24gKnBhcnQsIGludCBwYXJ0bm8sCiAJCQl1aW50NjRf dCBjdXJfb2Zmc2V0KQpAQCAtNzM1LDggKzcxOSw4IEBAIGludCBhZGRfbXRkX3BhcnRpdGlvbnMo c3RydWN0IG10ZF9pbmZvICptYXN0ZXIsCiAKIAkJYWRkX210ZF9kZXZpY2UoJnNsYXZlLT5tdGQp OwogCQltdGRfYWRkX3BhcnRpdGlvbl9hdHRycyhzbGF2ZSk7Ci0JCWlmIChwYXJ0c1tpXS50eXBl cykKLQkJCW10ZF9wYXJzZV9wYXJ0KHNsYXZlLCBwYXJ0c1tpXS50eXBlcyk7CisJCS8qIExvb2sg Zm9yIHN1YnBhcnRpdGlvbnMgKi8KKwkJcGFyc2VfbXRkX3BhcnRpdGlvbnMoJnNsYXZlLT5tdGQs IHBhcnRzW2ldLnR5cGVzLCBOVUxMKTsKIAogCQljdXJfb2Zmc2V0ID0gc2xhdmUtPm9mZnNldCAr IHNsYXZlLT5tdGQuc2l6ZTsKIAl9CkBAIC04MTIsNiArNzk2LDEyIEBAIHN0YXRpYyBjb25zdCBj aGFyICogY29uc3QgZGVmYXVsdF9tdGRfcGFydF90eXBlc1tdID0gewogCU5VTEwKIH07CiAKKy8q IENoZWNrIERUIG9ubHkgd2hlbiBsb29raW5nIGZvciBzdWJwYXJ0aXRpb25zLiAqLworc3RhdGlj IGNvbnN0IGNoYXIgKiBjb25zdCBkZWZhdWx0X3N1YnBhcnRpdGlvbl90eXBlc1tdID0geworCSJv ZnBhcnQiLAorCU5VTEwKK307CisKIHN0YXRpYyBpbnQgbXRkX3BhcnRfZG9fcGFyc2Uoc3RydWN0 IG10ZF9wYXJ0X3BhcnNlciAqcGFyc2VyLAogCQkJICAgICBzdHJ1Y3QgbXRkX2luZm8gKm1hc3Rl ciwKIAkJCSAgICAgc3RydWN0IG10ZF9wYXJ0aXRpb25zICpwcGFydHMsCkBAIC04ODIsNyArODcy LDkgQEAgc3RhdGljIGludCBtdGRfcGFydF9vZl9wYXJzZShzdHJ1Y3QgbXRkX2luZm8gKm1hc3Rl ciwKIAljb25zdCBjaGFyICpmaXhlZCA9ICJmaXhlZC1wYXJ0aXRpb25zIjsKIAlpbnQgcmV0LCBl cnIgPSAwOwogCi0JbnAgPSBvZl9nZXRfY2hpbGRfYnlfbmFtZShtdGRfZ2V0X29mX25vZGUobWFz dGVyKSwgInBhcnRpdGlvbnMiKTsKKwlucCA9IG10ZF9nZXRfb2Zfbm9kZShtYXN0ZXIpOworCWlm ICghbXRkX2lzX3BhcnRpdGlvbihtYXN0ZXIpKQorCQlucCA9IG9mX2dldF9jaGlsZF9ieV9uYW1l KG5wLCAicGFydGl0aW9ucyIpOwogCW9mX3Byb3BlcnR5X2Zvcl9lYWNoX3N0cmluZyhucCwgImNv bXBhdGlibGUiLCBwcm9wLCBjb21wYXQpIHsKIAkJcGFyc2VyID0gbXRkX3BhcnRfZ2V0X2NvbXBh dGlibGVfcGFyc2VyKGNvbXBhdCk7CiAJCWlmICghcGFyc2VyKQpAQCAtOTQ1LDcgKzkzNyw4IEBA IGludCBwYXJzZV9tdGRfcGFydGl0aW9ucyhzdHJ1Y3QgbXRkX2luZm8gKm1hc3RlciwgY29uc3Qg Y2hhciAqY29uc3QgKnR5cGVzLAogCWludCByZXQsIGVyciA9IDA7CiAKIAlpZiAoIXR5cGVzKQot CQl0eXBlcyA9IGRlZmF1bHRfbXRkX3BhcnRfdHlwZXM7CisJCXR5cGVzID0gbXRkX2lzX3BhcnRp dGlvbihtYXN0ZXIpID8gZGVmYXVsdF9zdWJwYXJ0aXRpb25fdHlwZXMgOgorCQkJZGVmYXVsdF9t dGRfcGFydF90eXBlczsKIAogCWZvciAoIDsgKnR5cGVzOyB0eXBlcysrKSB7CiAJCS8qCi0tIAoy LjEzLjcKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX18KTGludXggTVREIGRpc2N1c3Npb24gbWFpbGluZyBsaXN0Cmh0dHA6Ly9saXN0cy5pbmZy YWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtbXRkLwo=