From: Boris Brezillon <boris.brezillon@free-electrons.com>
To: Michal Suchanek <hramrach@gmail.com>
Cc: Rob Herring <robh+dt@kernel.org>, Pawel Moll <pawel.moll@arm.com>,
Mark Rutland <mark.rutland@arm.com>,
Ian Campbell <ijc+devicetree@hellion.org.uk>,
Kumar Gala <galak@codeaurora.org>,
David Woodhouse <dwmw2@infradead.org>,
Brian Norris <computersforpeace@gmail.com>,
devicetree@vger.kernel.org, linux-kernel@vger.kernel.org,
linux-mtd@lists.infradead.org
Subject: Re: [PATCH v2 5/5] mtd: ofpart: move ofpart partitions to a dedicated dt node
Date: Fri, 31 Jul 2015 18:06:14 +0200 [thread overview]
Message-ID: <20150731180614.162852ee@bbrezillon> (raw)
In-Reply-To: <4982216b5cb602c71ade6810cecdb9535e0862fc.1438340815.git.hramrach@gmail.com>
Hi Michal,
On Thu, 30 Jul 2015 12:10:42 +0200
Michal Suchanek <hramrach@gmail.com> wrote:
> Parsing direct subnodes of a mtd device as partitions is unreliable
> since the mtd device is also part of its bus subsystem and can contain
> bus data in subnodes.
>
> Move ofpart data to a subnode of its own so it is clear which data is
> part of the partition layout.
>
> Signed-off-by: Michal Suchanek <hramrach@gmail.com>
> ---
> drivers/mtd/ofpart.c | 56 +++++++++++++++++++++++++++++++++++++---------------
> 1 file changed, 40 insertions(+), 16 deletions(-)
>
> diff --git a/drivers/mtd/ofpart.c b/drivers/mtd/ofpart.c
> index aa26c32..2c28aaa 100644
> --- a/drivers/mtd/ofpart.c
> +++ b/drivers/mtd/ofpart.c
> @@ -29,23 +29,33 @@ static int parse_ofpart_partitions(struct mtd_info *master,
> struct mtd_partition **pparts,
> struct mtd_part_parser_data *data)
> {
> - struct device_node *node;
> + struct device_node *mtd_node;
> + struct device_node *ofpart_node;
> const char *partname;
> struct device_node *pp;
> int nr_parts, i;
> + bool dedicated = true;
>
>
> if (!data)
> return 0;
>
> - node = data->of_node;
> - if (!node)
> + mtd_node = data->of_node;
> + if (!mtd_node)
> return 0;
>
> + ofpart_node = of_get_child_by_name(mtd_node, "ofpart");
Hm, you should use a more generic name, ofpart of the linux MTD
DT partition parser, but another operating system might decide to name
it otherwise. I think "partitions" is more appropriate.
> + if (!ofpart_node) {
> + pr_warn("%s: 'ofpart' subnode not found on %s. Trying to parse direct subnodes as partitions.\n",
> + master->name, mtd_node->full_name);
Do we really want to complain here. I mean, a lot of users do not need
to define their partition in a different node.
> + ofpart_node = mtd_node;
> + dedicated = false;
> + }
> +
> /* First count the subnodes */
> nr_parts = 0;
> - for_each_child_of_node(node, pp) {
> - if (node_has_compatible(pp))
> + for_each_child_of_node(ofpart_node, pp) {
> + if (!dedicated && node_has_compatible(pp))
> continue;
>
> nr_parts++;
> @@ -59,22 +69,36 @@ static int parse_ofpart_partitions(struct mtd_info *master,
> return -ENOMEM;
>
> i = 0;
> - for_each_child_of_node(node, pp) {
> + for_each_child_of_node(ofpart_node, pp) {
> const __be32 *reg;
> int len;
> int a_cells, s_cells;
>
> - if (node_has_compatible(pp))
> - continue;
> + if (!dedicated && node_has_compatible(pp))
> + continue;
Check your indentation (checkpatch should complain here).
>
> reg = of_get_property(pp, "reg", &len);
> if (!reg) {
> + if (dedicated) {
> + pr_debug("%s: ofpart partition %s (%s) missing reg property.\n",
> + master->name, pp->full_name,
> + mtd_node->full_name);
> + goto ofpart_fail;
> + } else {
> nr_parts--;
> continue;
Ditto.
> + }
> }
>
> a_cells = of_n_addr_cells(pp);
> s_cells = of_n_size_cells(pp);
> + if (len / 4 != a_cells + s_cells) {
> + pr_debug("%s: ofpart partition %s (%s) error parsing reg property.\n",
> + master->name, pp->full_name,
> + mtd_node->full_name);
> + goto ofpart_fail;
> + }
> +
The above changes have nothing to do with the description you gave in
your commit message.
> (*pparts)[i].offset = of_read_number(reg, a_cells);
> (*pparts)[i].size = of_read_number(reg + a_cells, s_cells);
>
> @@ -92,15 +116,15 @@ static int parse_ofpart_partitions(struct mtd_info *master,
> i++;
> }
>
> - if (!i) {
> - of_node_put(pp);
> - pr_err("No valid partition found on %s\n", node->full_name);
> - kfree(*pparts);
> - *pparts = NULL;
> - return -EINVAL;
> - }
> -
Are you sure you can safely remove this check?
Best Regards,
Boris
--
Boris Brezillon, Free Electrons
Embedded Linux and Kernel engineering
http://free-electrons.com
WARNING: multiple messages have this Message-ID (diff)
From: Boris Brezillon <boris.brezillon-wi1+55ScJUtKEb57/3fJTNBPR1lH4CV8@public.gmane.org>
To: Michal Suchanek <hramrach-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
Cc: Rob Herring <robh+dt-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>,
Pawel Moll <pawel.moll-5wv7dgnIgG8@public.gmane.org>,
Mark Rutland <mark.rutland-5wv7dgnIgG8@public.gmane.org>,
Ian Campbell
<ijc+devicetree-KcIKpvwj1kUDXYZnReoRVg@public.gmane.org>,
Kumar Gala <galak-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org>,
David Woodhouse <dwmw2-wEGCiKHe2LqWVfeAwA7xHQ@public.gmane.org>,
Brian Norris
<computersforpeace-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>,
devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
linux-mtd-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org
Subject: Re: [PATCH v2 5/5] mtd: ofpart: move ofpart partitions to a dedicated dt node
Date: Fri, 31 Jul 2015 18:06:14 +0200 [thread overview]
Message-ID: <20150731180614.162852ee@bbrezillon> (raw)
In-Reply-To: <4982216b5cb602c71ade6810cecdb9535e0862fc.1438340815.git.hramrach-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
Hi Michal,
On Thu, 30 Jul 2015 12:10:42 +0200
Michal Suchanek <hramrach-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:
> Parsing direct subnodes of a mtd device as partitions is unreliable
> since the mtd device is also part of its bus subsystem and can contain
> bus data in subnodes.
>
> Move ofpart data to a subnode of its own so it is clear which data is
> part of the partition layout.
>
> Signed-off-by: Michal Suchanek <hramrach-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
> ---
> drivers/mtd/ofpart.c | 56 +++++++++++++++++++++++++++++++++++++---------------
> 1 file changed, 40 insertions(+), 16 deletions(-)
>
> diff --git a/drivers/mtd/ofpart.c b/drivers/mtd/ofpart.c
> index aa26c32..2c28aaa 100644
> --- a/drivers/mtd/ofpart.c
> +++ b/drivers/mtd/ofpart.c
> @@ -29,23 +29,33 @@ static int parse_ofpart_partitions(struct mtd_info *master,
> struct mtd_partition **pparts,
> struct mtd_part_parser_data *data)
> {
> - struct device_node *node;
> + struct device_node *mtd_node;
> + struct device_node *ofpart_node;
> const char *partname;
> struct device_node *pp;
> int nr_parts, i;
> + bool dedicated = true;
>
>
> if (!data)
> return 0;
>
> - node = data->of_node;
> - if (!node)
> + mtd_node = data->of_node;
> + if (!mtd_node)
> return 0;
>
> + ofpart_node = of_get_child_by_name(mtd_node, "ofpart");
Hm, you should use a more generic name, ofpart of the linux MTD
DT partition parser, but another operating system might decide to name
it otherwise. I think "partitions" is more appropriate.
> + if (!ofpart_node) {
> + pr_warn("%s: 'ofpart' subnode not found on %s. Trying to parse direct subnodes as partitions.\n",
> + master->name, mtd_node->full_name);
Do we really want to complain here. I mean, a lot of users do not need
to define their partition in a different node.
> + ofpart_node = mtd_node;
> + dedicated = false;
> + }
> +
> /* First count the subnodes */
> nr_parts = 0;
> - for_each_child_of_node(node, pp) {
> - if (node_has_compatible(pp))
> + for_each_child_of_node(ofpart_node, pp) {
> + if (!dedicated && node_has_compatible(pp))
> continue;
>
> nr_parts++;
> @@ -59,22 +69,36 @@ static int parse_ofpart_partitions(struct mtd_info *master,
> return -ENOMEM;
>
> i = 0;
> - for_each_child_of_node(node, pp) {
> + for_each_child_of_node(ofpart_node, pp) {
> const __be32 *reg;
> int len;
> int a_cells, s_cells;
>
> - if (node_has_compatible(pp))
> - continue;
> + if (!dedicated && node_has_compatible(pp))
> + continue;
Check your indentation (checkpatch should complain here).
>
> reg = of_get_property(pp, "reg", &len);
> if (!reg) {
> + if (dedicated) {
> + pr_debug("%s: ofpart partition %s (%s) missing reg property.\n",
> + master->name, pp->full_name,
> + mtd_node->full_name);
> + goto ofpart_fail;
> + } else {
> nr_parts--;
> continue;
Ditto.
> + }
> }
>
> a_cells = of_n_addr_cells(pp);
> s_cells = of_n_size_cells(pp);
> + if (len / 4 != a_cells + s_cells) {
> + pr_debug("%s: ofpart partition %s (%s) error parsing reg property.\n",
> + master->name, pp->full_name,
> + mtd_node->full_name);
> + goto ofpart_fail;
> + }
> +
The above changes have nothing to do with the description you gave in
your commit message.
> (*pparts)[i].offset = of_read_number(reg, a_cells);
> (*pparts)[i].size = of_read_number(reg + a_cells, s_cells);
>
> @@ -92,15 +116,15 @@ static int parse_ofpart_partitions(struct mtd_info *master,
> i++;
> }
>
> - if (!i) {
> - of_node_put(pp);
> - pr_err("No valid partition found on %s\n", node->full_name);
> - kfree(*pparts);
> - *pparts = NULL;
> - return -EINVAL;
> - }
> -
Are you sure you can safely remove this check?
Best Regards,
Boris
--
Boris Brezillon, Free Electrons
Embedded Linux and Kernel engineering
http://free-electrons.com
--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
next prev parent reply other threads:[~2015-07-31 16:06 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-07-31 11:06 [PATCH v2 0/5] improve mtdpart robustness Michal Suchanek
2015-07-31 11:06 ` Michal Suchanek
2015-07-30 8:43 ` [PATCH v2 3/5] mtd: ofpart: update devicetree binding specification Michal Suchanek
2015-07-30 8:43 ` Michal Suchanek
2015-07-30 10:10 ` [PATCH v2 5/5] mtd: ofpart: move ofpart partitions to a dedicated dt node Michal Suchanek
2015-07-30 10:10 ` Michal Suchanek
2015-07-31 16:06 ` Boris Brezillon [this message]
2015-07-31 16:06 ` Boris Brezillon
2015-07-31 16:52 ` Michal Suchanek
2015-07-31 16:52 ` Michal Suchanek
2015-07-31 17:24 ` Boris Brezillon
2015-07-31 22:32 ` Michal Suchanek
2015-07-31 22:32 ` Michal Suchanek
2015-07-30 10:19 ` [PATCH v2 4/5] mtd: ofpart: document the lock flag Michal Suchanek
2015-07-30 10:19 ` Michal Suchanek
2015-07-31 11:19 ` [PATCH v2 2/5] mtd: mtdpart: Do not fail mtd probe when parsing partitions fails Michal Suchanek
2015-07-31 11:19 ` Michal Suchanek
2015-07-31 11:19 ` [PATCH v2 1/5] mtd: mtdpart: add debug prints to partition parser Michal Suchanek
2015-07-31 11:19 ` Michal Suchanek
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20150731180614.162852ee@bbrezillon \
--to=boris.brezillon@free-electrons.com \
--cc=computersforpeace@gmail.com \
--cc=devicetree@vger.kernel.org \
--cc=dwmw2@infradead.org \
--cc=galak@codeaurora.org \
--cc=hramrach@gmail.com \
--cc=ijc+devicetree@hellion.org.uk \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mtd@lists.infradead.org \
--cc=mark.rutland@arm.com \
--cc=pawel.moll@arm.com \
--cc=robh+dt@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.