From patchwork Thu Jun 2 14:51:28 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Dmitry Baryshkov X-Patchwork-Id: 98408 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from merlin.infradead.org (merlin.infradead.org [205.233.59.134]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client did not present a certificate) by ozlabs.org (Postfix) with ESMTPS id 08D9FB6F9D for ; Fri, 3 Jun 2011 00:54:33 +1000 (EST) Received: from canuck.infradead.org ([2001:4978:20e::1]) by merlin.infradead.org with esmtps (Exim 4.76 #1 (Red Hat Linux)) id 1QS9Hk-00083B-9e; Thu, 02 Jun 2011 14:54:10 +0000 Received: from localhost ([127.0.0.1] helo=canuck.infradead.org) by canuck.infradead.org with esmtp (Exim 4.76 #1 (Red Hat Linux)) id 1QS9Hj-0007oR-Oz; Thu, 02 Jun 2011 14:54:07 +0000 Received: from mail-wy0-f177.google.com ([74.125.82.177]) by canuck.infradead.org with esmtps (Exim 4.76 #1 (Red Hat Linux)) id 1QS9Fd-00074f-9H for linux-mtd@lists.infradead.org; Thu, 02 Jun 2011 14:52:00 +0000 Received: by mail-wy0-f177.google.com with SMTP id 28so928274wyb.36 for ; Thu, 02 Jun 2011 07:51:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:from:to:subject:date:message-id:x-mailer :in-reply-to:references:mime-version:content-type :content-transfer-encoding; bh=b+odravZ44lePw3ywX9xi1lTpFD5PK5GHfpxyeczZIs=; b=JMrRXTdTNNMh5qOT/W8HcMe5e5bGjwDj8RKLThEvTMTOpLCGBzv21ELL3AUHQDFMJR tbSC5wxUr/u1qkef0LAFcufBlzn4+YItiYZQ8zuwcmYD7HOrDNohDpPqNGcK5+ZthDSv Ox1iROEYYaOSsOTzX7bg2pasMWamzJVwD/ONY= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=from:to:subject:date:message-id:x-mailer:in-reply-to:references :mime-version:content-type:content-transfer-encoding; b=wOENfq1yGfW5XxiTeGhwAHQcZUCJQtDKK6XyGuSUPO4jRDfGfm5yzBM6bQHX5j2pGO BpPvVJND1RDmrnEqcGSxdAzS6J98uuqLo1BPcd2aDOASBTQt8pv0dj33PsPnj3+Y0dK/ 7XL3ctj1DCWtK8wjiOR172kDrtkqsgl+uNDsc= Received: by 10.216.221.158 with SMTP id r30mr6310498wep.50.1307026316842; Thu, 02 Jun 2011 07:51:56 -0700 (PDT) Received: from doriath.ww600.siemens.net ([91.213.169.4]) by mx.google.com with ESMTPS id k70sm368125weq.6.2011.06.02.07.51.55 (version=SSLv3 cipher=OTHER); Thu, 02 Jun 2011 07:51:56 -0700 (PDT) From: Dmitry Eremin-Solenikov To: linux-mtd@lists.infradead.org Subject: =?UTF-8?q?=5BPATCH=20050/104=5D=20physmap=5Fof=3A=20separate=20parse=5Fobsolete=5Fpartitions=20to=20separate=20parser?= Date: Thu, 2 Jun 2011 18:51:28 +0400 Message-Id: <1307026293-8535-16-git-send-email-dbaryshkov@gmail.com> X-Mailer: git-send-email 1.7.4.4 In-Reply-To: <1307026293-8535-1-git-send-email-dbaryshkov@gmail.com> References: <1307026293-8535-1-git-send-email-dbaryshkov@gmail.com> MIME-Version: 1.0 X-CRM114-Version: 20090807-BlameThorstenAndJenny ( TRE 0.7.6 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20110602_105157_797643_CD38033C X-CRM114-Status: GOOD ( 24.41 ) X-Spam-Score: -0.8 (/) X-Spam-Report: SpamAssassin version 3.3.1 on canuck.infradead.org summary: Content analysis details: (-0.8 points) pts rule name description ---- ---------------------- -------------------------------------------------- -0.7 RCVD_IN_DNSWL_LOW RBL: Sender listed at http://www.dnswl.org/, low trust [74.125.82.177 listed in list.dnswl.org] 0.0 FREEMAIL_FROM Sender email is freemail (dbaryshkov[at]gmail.com) -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature 0.0 RFC_ABUSE_POST Both abuse and postmaster missing on sender domain 0.0 T_TO_NO_BRKTS_FREEMAIL T_TO_NO_BRKTS_FREEMAIL X-BeenThere: linux-mtd@lists.infradead.org X-Mailman-Version: 2.1.12 Precedence: list List-Id: Linux MTD discussion mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: linux-mtd-bounces@lists.infradead.org Errors-To: linux-mtd-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org Separate parse_obsolete_partitions() to external ofoldpart partitions parser. Signed-off-by: Dmitry Eremin-Solenikov --- drivers/mtd/Kconfig | 10 +++++ drivers/mtd/Makefile | 1 + drivers/mtd/maps/physmap_of.c | 53 +------------------------ drivers/mtd/ofoldpart.c | 89 +++++++++++++++++++++++++++++++++++++++++ 4 files changed, 101 insertions(+), 52 deletions(-) create mode 100644 drivers/mtd/ofoldpart.c diff --git a/drivers/mtd/Kconfig b/drivers/mtd/Kconfig index 4be8373..2aa8afb 100644 --- a/drivers/mtd/Kconfig +++ b/drivers/mtd/Kconfig @@ -144,6 +144,16 @@ config MTD_OF_PARTS the partition map from the children of the flash node, as described in Documentation/powerpc/booting-without-of.txt. +config MTD_OF_OLD_PARTS + bool "Obsolete OF tree partition info" + depends on OF + help + This provides a partition parsing function which derives + the partition map from the the flash node, being an obsolete + way to describe physmap_of partitioning info. + + If you aren't sure you need this, you can say N. + config MTD_AR7_PARTS tristate "TI AR7 partitioning support" ---help--- diff --git a/drivers/mtd/Makefile b/drivers/mtd/Makefile index 39664c4..1de83b9 100644 --- a/drivers/mtd/Makefile +++ b/drivers/mtd/Makefile @@ -6,6 +6,7 @@ obj-$(CONFIG_MTD) += mtd.o mtd-y := mtdcore.o mtdsuper.o mtdconcat.o mtdpart.o mtd-$(CONFIG_MTD_OF_PARTS) += ofpart.o +mtd-$(CONFIG_MTD_OF_OLD_PARTS) += ofoldpart.o obj-$(CONFIG_MTD_REDBOOT_PARTS) += redboot.o obj-$(CONFIG_MTD_CMDLINE_PARTS) += cmdlinepart.o diff --git a/drivers/mtd/maps/physmap_of.c b/drivers/mtd/maps/physmap_of.c index 312eb17..c953db3 100644 --- a/drivers/mtd/maps/physmap_of.c +++ b/drivers/mtd/maps/physmap_of.c @@ -40,51 +40,6 @@ struct of_flash { }; #define OF_FLASH_PARTS(info) ((info)->parts) -static int parse_obsolete_partitions(struct platform_device *dev, - struct of_flash *info, - struct device_node *dp) -{ - int i, plen, nr_parts; - const struct { - __be32 offset, len; - } *part; - const char *names; - - part = of_get_property(dp, "partitions", &plen); - if (!part) - return 0; /* No partitions found */ - - dev_warn(&dev->dev, "Device tree uses obsolete partition map binding\n"); - - nr_parts = plen / sizeof(part[0]); - - info->parts = kzalloc(nr_parts * sizeof(*info->parts), GFP_KERNEL); - if (!info->parts) - return -ENOMEM; - - names = of_get_property(dp, "partition-names", &plen); - - for (i = 0; i < nr_parts; i++) { - info->parts[i].offset = be32_to_cpu(part->offset); - info->parts[i].size = be32_to_cpu(part->len) & ~1; - if (be32_to_cpu(part->len) & 1) /* bit 0 set signifies read only partition */ - info->parts[i].mask_flags = MTD_WRITEABLE; - - if (names && (plen > 0)) { - int len = strlen(names) + 1; - - info->parts[i].name = (char *)names; - plen -= len; - names += len; - } else { - info->parts[i].name = "unnamed"; - } - - part++; - } - - return nr_parts; -} static int of_flash_remove(struct platform_device *dev) { @@ -166,7 +121,7 @@ static struct mtd_info * __devinit obsolete_probe(struct platform_device *dev, default is use. These take precedence over other device tree information. */ static const char *part_probe_types_def[] = { "cmdlinepart", "RedBoot", - "ofpart", NULL }; + "ofpart", "ofoldpart", NULL }; static const char ** __devinit of_get_probes(struct device_node *dp) { const char *cp; @@ -342,12 +297,6 @@ static int __devinit of_flash_probe(struct platform_device *dev) } of_free_probes(part_probe_types); - if (err == 0) { - err = parse_obsolete_partitions(dev, info, dp); - if (err < 0) - goto err_out; - } - mtd_device_register(info->cmtd, info->parts, err); kfree(mtd_list); diff --git a/drivers/mtd/ofoldpart.c b/drivers/mtd/ofoldpart.c new file mode 100644 index 0000000..a2c143b --- /dev/null +++ b/drivers/mtd/ofoldpart.c @@ -0,0 +1,89 @@ +/* + * Flash partitions described by the OF (or flattened) device tree + * + * Copyright © 2006 MontaVista Software Inc. + * Author: Vitaly Wool + * + * Revised to handle newer style flash binding by: + * Copyright © 2007 David Gibson, IBM Corporation. + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. + */ + +#include +#include +#include +#include +#include +#include + +static int parse_ofoldpart_partitions(struct mtd_info *master, + struct mtd_partition **pparts, + unsigned long origin) +{ + struct device_node *dp; + int i, plen, nr_parts; + const struct { + __be32 offset, len; + } *part; + const char *names; + + dp = master->node; + if (!dp) + return 0; + + part = of_get_property(dp, "partitions", &plen); + if (!part) + return 0; /* No partitions found */ + + pr_warning("Device tree uses obsolete partition map binding: %s\n", + dp->full_name); + + nr_parts = plen / sizeof(part[0]); + + *pparts = kzalloc(nr_parts * sizeof(*(*pparts)), GFP_KERNEL); + if (!pparts) + return -ENOMEM; + + names = of_get_property(dp, "partition-names", &plen); + + for (i = 0; i < nr_parts; i++) { + (*pparts)[i].offset = be32_to_cpu(part->offset); + (*pparts)[i].size = be32_to_cpu(part->len) & ~1; + if (be32_to_cpu(part->len) & 1) /* bit 0 set signifies read only partition */ + (*pparts)[i].mask_flags = MTD_WRITEABLE; + + if (names && (plen > 0)) { + int len = strlen(names) + 1; + + (*pparts)[i].name = (char *)names; + plen -= len; + names += len; + } else { + (*pparts)[i].name = "unnamed"; + } + + part++; + } + + return nr_parts; +} + +static struct mtd_part_parser ofoldpart_parser = { + .owner = THIS_MODULE, + .parse_fn = parse_ofoldpart_partitions, + .name = "ofoldpart", +}; + +static int __init ofoldpart_parser_init(void) +{ + return register_mtd_parser(&ofoldpart_parser); +} + +module_init(ofoldpart_parser_init); + +MODULE_LICENSE("GPL"); +