[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <d59007d1-f4e3-f550-cecd-64b788a534bc@linaro.org>
Date: Mon, 6 Apr 2020 13:33:43 +0100
From: Srinivas Kandagatla <srinivas.kandagatla@...aro.org>
To: Ahmad Fatoum <a.fatoum@...gutronix.de>
Cc: kernel@...gutronix.de, Christian Eggers <CEggers@...i.de>,
linux-kernel@...r.kernel.org
Subject: Re: [PATCH v2] nvmem: core: don't consider subnodes not matching
binding
On 23/03/2020 15:28, Ahmad Fatoum wrote:
> The nvmem cell binding applies to objects which match "^.*@[0-9a-f]+$",
> but so far the driver has matched all objects and failed if they didn't
> have the expected properties.
>
> The driver's behavior in this regard precludes future extension of
> EEPROMs by child nodes other than nvmem and clashes with the barebox
> bootloader binding that extends the fixed-partitions MTD binding to
> EEPROMs as it tries to interpret the "fixed-partitions"-compatible
> partitions node as a nvmem cell.
>
> Solve this issue by skipping all subnodes that don't contain an @.
>
> This still allows for cell names like `partitions@0,0', but this
NACK.. thats nasty hack!
Its standard practice as per device tree specs to have nodes name as
"node-name@...t-address"
Ref:
https://github.com/devicetree-org/devicetree-specification/releases/download/v0.3/devicetree-specification-v0.3.pdf
> is much less likely to cause future collisions.
There have been discussions on this topic in the past at:
https://patchwork.ozlabs.org/patch/890741/
We need to come up with a better solution!
--srini
>
> Signed-off-by: Ahmad Fatoum <a.fatoum@...gutronix.de>
> ---
> v1 -> v2:
> use ->full_name instead of ->name as to not break existing correct
> cells (Christian)
> ---
> drivers/nvmem/core.c | 2 ++
> 1 file changed, 2 insertions(+)
>
> diff --git a/drivers/nvmem/core.c b/drivers/nvmem/core.c
> index ef326f243f36..f051051fb1a8 100644
> --- a/drivers/nvmem/core.c
> +++ b/drivers/nvmem/core.c
> @@ -278,6 +278,8 @@ static int nvmem_add_cells_from_of(struct nvmem_device *nvmem)
> parent = dev->of_node;
>
> for_each_child_of_node(parent, child) {
> + if (!strchr(kbasename(child->full_name), '@'))
> + continue;
> addr = of_get_property(child, "reg", &len);
> if (!addr || (len < 2 * sizeof(u32))) {
> dev_err(dev, "nvmem: invalid reg on %pOF\n", child);
>
Powered by blists - more mailing lists