From patchwork Sun May 17 17:35:12 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Hauke Mehrtens X-Patchwork-Id: 473208 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from bombadil.infradead.org (bombadil.infradead.org [IPv6:2001:1868:205::9]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 25CA21402B5 for ; Mon, 18 May 2015 03:37:31 +1000 (AEST) Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.80.1 #2 (Red Hat Linux)) id 1Yu2TY-0000Je-K9; Sun, 17 May 2015 17:35:44 +0000 Received: from hauke-m.de ([5.39.93.123]) by bombadil.infradead.org with esmtps (Exim 4.80.1 #2 (Red Hat Linux)) id 1Yu2TV-0008Qa-KO for linux-mtd@lists.infradead.org; Sun, 17 May 2015 17:35:42 +0000 Received: from hauke-desktop.fritz.box (p5DE97812.dip0.t-ipconnect.de [93.233.120.18]) by hauke-m.de (Postfix) with ESMTPSA id 7392020138; Sun, 17 May 2015 19:35:19 +0200 (CEST) From: Hauke Mehrtens To: computersforpeace@gmail.com Subject: [PATCH] mtd: part: add generic parsing of linux,part-probe Date: Sun, 17 May 2015 19:35:12 +0200 Message-Id: <1431884112-28236-1-git-send-email-hauke@hauke-m.de> X-Mailer: git-send-email 2.1.4 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20150517_103542_006186_03303836 X-CRM114-Status: GOOD ( 14.01 ) X-Spam-Score: -0.0 (/) X-Spam-Report: SpamAssassin version 3.4.0 on bombadil.infradead.org summary: Content analysis details: (-0.0 points) pts rule name description ---- ---------------------- -------------------------------------------------- -0.0 T_RP_MATCHES_RCVD Envelope sender domain matches handover relay domain -0.0 SPF_HELO_PASS SPF: HELO matches SPF record -0.0 SPF_PASS SPF: sender matches SPF record Cc: devicetree@vger.kernel.org, f.fainelli@gmail.com, rjui@broadcom.com, zajec5@gmail.com, jogo@openwrt.org, linux-mtd@lists.infradead.org, Hauke Mehrtens , bcm-kernel-feedback-list@broadcom.com X-BeenThere: linux-mtd@lists.infradead.org X-Mailman-Version: 2.1.18-1 Precedence: list List-Id: Linux MTD discussion mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Sender: "linux-mtd" Errors-To: linux-mtd-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org This moves the linux,part-probe device tree parsing code from physmap_of.c to mtdpart.c. Now all drivers can use this feature by just providing a reference to they device tree node in struct mtd_part_parser_data. Signed-off-by: Hauke Mehrtens --- drivers/mtd/maps/physmap_of.c | 40 +--------------------------------------- drivers/mtd/mtdpart.c | 38 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 39 insertions(+), 39 deletions(-) diff --git a/drivers/mtd/maps/physmap_of.c b/drivers/mtd/maps/physmap_of.c index 774b32f..fd3750f 100644 --- a/drivers/mtd/maps/physmap_of.c +++ b/drivers/mtd/maps/physmap_of.c @@ -112,45 +112,9 @@ static struct mtd_info *obsolete_probe(struct platform_device *dev, static const char * const part_probe_types_def[] = { "cmdlinepart", "RedBoot", "ofpart", "ofoldpart", NULL }; -static const char * const *of_get_probes(struct device_node *dp) -{ - const char *cp; - int cplen; - unsigned int l; - unsigned int count; - const char **res; - - cp = of_get_property(dp, "linux,part-probe", &cplen); - if (cp == NULL) - return part_probe_types_def; - - count = 0; - for (l = 0; l != cplen; l++) - if (cp[l] == 0) - count++; - - res = kzalloc((count + 1)*sizeof(*res), GFP_KERNEL); - count = 0; - while (cplen > 0) { - res[count] = cp; - l = strlen(cp) + 1; - cp += l; - cplen -= l; - count++; - } - return res; -} - -static void of_free_probes(const char * const *probes) -{ - if (probes != part_probe_types_def) - kfree(probes); -} - static const struct of_device_id of_flash_match[]; static int of_flash_probe(struct platform_device *dev) { - const char * const *part_probe_types; const struct of_device_id *match; struct device_node *dp = dev->dev.of_node; struct resource res; @@ -310,10 +274,8 @@ static int of_flash_probe(struct platform_device *dev) goto err_out; ppdata.of_node = dp; - part_probe_types = of_get_probes(dp); - mtd_device_parse_register(info->cmtd, part_probe_types, &ppdata, + mtd_device_parse_register(info->cmtd, part_probe_types_def, &ppdata, NULL, 0); - of_free_probes(part_probe_types); kfree(mtd_list); diff --git a/drivers/mtd/mtdpart.c b/drivers/mtd/mtdpart.c index cafdb88..b3059d6 100644 --- a/drivers/mtd/mtdpart.c +++ b/drivers/mtd/mtdpart.c @@ -29,6 +29,7 @@ #include #include #include +#include #include #include @@ -718,6 +719,35 @@ void deregister_mtd_parser(struct mtd_part_parser *p) } EXPORT_SYMBOL_GPL(deregister_mtd_parser); +static const char * const *of_get_probes(struct device_node *dp) +{ + const char *cp; + int cplen; + unsigned int l; + unsigned int count; + const char **res; + + cp = of_get_property(dp, "linux,part-probe", &cplen); + if (cp == NULL) + return NULL; + + count = 0; + for (l = 0; l != cplen; l++) + if (cp[l] == 0) + count++; + + res = kzalloc((count + 1)*sizeof(*res), GFP_KERNEL); + count = 0; + while (cplen > 0) { + res[count] = cp; + l = strlen(cp) + 1; + cp += l; + cplen -= l; + count++; + } + return res; +} + /* * Do not forget to update 'parse_mtd_partitions()' kerneldoc comment if you * are changing this array! @@ -754,6 +784,13 @@ int parse_mtd_partitions(struct mtd_info *master, const char *const *types, { struct mtd_part_parser *parser; int ret = 0; + const char *const *types_of = NULL; + + if (data && data->of_node) { + types_of = of_get_probes(data->of_node); + if (types_of != NULL) + types = types_of; + } if (!types) types = default_mtd_part_types; @@ -772,6 +809,7 @@ int parse_mtd_partitions(struct mtd_info *master, const char *const *types, break; } } + kfree(types_of); return ret; }