linux-doc.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Alexander Stein <alexander.stein@ew.tq-group.com>
To: Michael Walle <michael@walle.cc>
Cc: Miquel Raynal <miquel.raynal@bootlin.com>,
	Srinivas Kandagatla <srinivas.kandagatla@linaro.org>,
	Jonathan Corbet <corbet@lwn.net>,
	Rob Herring <robh+dt@kernel.org>,
	Frank Rowand <frowand.list@gmail.com>,
	Sascha Hauer <s.hauer@pengutronix.de>,
	linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org, devicetree@vger.kernel.org,
	Dan Carpenter <error27@gmail.com>
Subject: Re: [PATCH v5 00/21] nvmem: core: introduce NVMEM layouts
Date: Thu, 05 Jan 2023 14:22:06 +0100	[thread overview]
Message-ID: <20668918.0c2gjJ1VT2@steina-w> (raw)
In-Reply-To: <13fca55324d55f9d4e30ca7fcc930e15@walle.cc>

Hi Michael,

Am Donnerstag, 5. Januar 2023, 13:51:53 CET schrieb Michael Walle:
> Hi,
> 
> Am 2023-01-05 13:21, schrieb Alexander Stein:
> > Am Donnerstag, 5. Januar 2023, 13:11:37 CET schrieb Michael Walle:
> >> thanks for debugging. I'm not yet sure what is going wrong, so
> >> I have some more questions below.
> >> 
> >> >> This causes the following errors on existing boards (imx8mq-tqma8mq-
> >> >> mba8mx.dtb):
> >> >> root@tqma8-common:~# uname -r
> >> >> 6.2.0-rc2-next-20230105
> >> >> 
> >> >> > OF: /soc@0: could not get #nvmem-cell-cells for /soc@0/bus@30000000/
> >> >> 
> >> >> efuse@30350000/soc-uid@4
> >> >> 
> >> >> > OF: /soc@0/bus@30800000/ethernet@30be0000: could not get
> >> >> > #nvmem-cell-cells
> >> >> 
> >> >> for /soc@0/bus@30000000/efuse@30350000/mac-address@90
> >> >> 
> >> >> These are caused because '#nvmem-cell-cells = <0>;' is not explicitly
> >> >> set in
> >> >> DT.
> >> >> 
> >> >> > TI DP83867 30be0000.ethernet-1:0e: error -EINVAL: failed to get
> >> >> > nvmem
> >> >> > cell
> >> >> 
> >> >> io_impedance_ctrl
> >> >> 
> >> >> > TI DP83867: probe of 30be0000.ethernet-1:0e failed with error -22
> >> >> 
> >> >> These are caused because of_nvmem_cell_get() now returns -EINVAL
> >> >> instead of -
> >> >> ENODEV if the requested nvmem cell is not available.
> >> 
> >> What do you mean with not available? Not yet available because of
> >> probe
> >> order?
> > 
> > Ah, I was talking about there is no nvmem cell being used in my PHY
> > node, e.g.
> > no 'nvmem-cells' nor 'nvmem-cell-names' (set to 'io_impedance_ctrl').
> > That's
> > why of_property_match_string returns -EINVAL.
> 
> Ahh I see. You mean ENOENT instead of ENODEV, right?

Yeah you are right here, ENOENT is the one missing.

> >> > Should we just assume #nvmem-cell-cells = <0> by default? I guess it's
> >> > a safe assumption.
> >> 
> >> Actually, that's what patch 2/21 is for.
> >> 
> >> Alexander, did you verify that the EINVAL is returned by
> >> of_parse_phandle_with_optional_args()?
> > 
> > Yep.
> > 
> > --8<--
> > diff --git a/drivers/nvmem/core.c b/drivers/nvmem/core.c
> > index 1b61c8bf0de4..f2a85a31d039 100644
> > --- a/drivers/nvmem/core.c
> > +++ b/drivers/nvmem/core.c
> > @@ -1339,9 +1339,11 @@ struct nvmem_cell *of_nvmem_cell_get(struct
> > device_node
> > *np, const char *id)
> > 
> >         if (id)
> >         
> >                 index = of_property_match_string(np,
> > 
> > "nvmem-cell-names", id);
> > 
> > +       pr_info("%s: index: %d\n", __func__, index);
> > 
> >         ret = of_parse_phandle_with_optional_args(np, "nvmem-cells",
> >         
> >                                                   "#nvmem-cell-cells",
> >                                                   index, &cell_spec);
> > 
> > +       pr_info("%s: of_parse_phandle_with_optional_args: %d\n",
> > __func__,
> > ret);
> > 
> >         if (ret)
> >         
> >                 return ERR_PTR(ret);
> > 
> > --8<--
> > 
> > Results in:
> >> [    1.861896] of_nvmem_cell_get: index: -22
> >> [    1.865934] of_nvmem_cell_get: of_parse_phandle_with_optional_args:
> >> -22
> >> [    1.872595] TI DP83867 30be0000.ethernet-1:0e: error -EINVAL:
> >> failed to
> > 
> > get nvmem cell io_impedance_ctrl
> > 
> >> [    2.402575] TI DP83867: probe of 30be0000.ethernet-1:0e failed with
> >> error
> > 
> > -22
> > 
> > So, the index is wrong in the first place, but this was no problem
> > until now.
> 
> Thanks, could you try the following patch:
> 
> diff --git a/drivers/nvmem/core.c b/drivers/nvmem/core.c
> index 1b61c8bf0de4..1085abfcd9b1 100644
> --- a/drivers/nvmem/core.c
> +++ b/drivers/nvmem/core.c
> @@ -1336,8 +1336,11 @@ struct nvmem_cell *of_nvmem_cell_get(struct
> device_node *np, const char *id)
>          int ret;
> 
>          /* if cell name exists, find index to the name */
> -       if (id)
> +       if (id) {
>                  index = of_property_match_string(np, "nvmem-cell-names",
> id);
> +               if (index < 0)
> +                       return ERR_PTR(-ENOENT);
> +       }
> 
>          ret = of_parse_phandle_with_optional_args(np, "nvmem-cells",
>                                                    "#nvmem-cell-cells",
> 
> Before patch 6/21, the -EINVAL was passed as index to of_parse_phandle()
> which then returned NULL, which caused the nvmem core to return ENOENT.
> I have a vague memory, that I made sure, that
> of_parse_phandle_with_optional_args() will also propagate the
> wrong index to its return code. But now, it won't be converted
> to ENOENT.

Yes, this does the trick. Thanks

Best regards,
Alexander




  reply	other threads:[~2023-01-05 13:22 UTC|newest]

Thread overview: 34+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-12-06 20:07 [PATCH v5 00/21] nvmem: core: introduce NVMEM layouts Michael Walle
2022-12-06 20:07 ` [PATCH v5 01/21] net: add helper eth_addr_add() Michael Walle
2022-12-06 20:07 ` [PATCH v5 02/21] of: base: add of_parse_phandle_with_optional_args() Michael Walle
2022-12-06 20:07 ` [PATCH v5 03/21] of: property: make #.*-cells optional for simple props Michael Walle
2022-12-06 20:07 ` [PATCH v5 04/21] of: property: add #nvmem-cell-cells property Michael Walle
2022-12-06 20:07 ` [PATCH v5 05/21] nvmem: core: fix device node refcounting Michael Walle
2022-12-06 20:07 ` [PATCH v5 06/21] nvmem: core: add an index parameter to the cell Michael Walle
2022-12-06 20:07 ` [PATCH v5 07/21] nvmem: core: move struct nvmem_cell_info to nvmem-provider.h Michael Walle
2022-12-06 20:07 ` [PATCH v5 08/21] nvmem: core: drop the removal of the cells in nvmem_add_cells() Michael Walle
2022-12-06 20:07 ` [PATCH v5 09/21] nvmem: core: fix cell removal on error Michael Walle
2022-12-06 20:07 ` [PATCH v5 10/21] nvmem: core: add nvmem_add_one_cell() Michael Walle
2022-12-06 20:07 ` [PATCH v5 11/21] nvmem: core: use nvmem_add_one_cell() in nvmem_add_cells_from_of() Michael Walle
2022-12-06 20:07 ` [PATCH v5 12/21] nvmem: core: introduce NVMEM layouts Michael Walle
2022-12-06 20:07 ` [PATCH v5 13/21] nvmem: core: add per-cell post processing Michael Walle
2022-12-06 20:07 ` [PATCH v5 14/21] nvmem: core: allow to modify a cell before adding it Michael Walle
2022-12-06 20:07 ` [PATCH v5 15/21] nvmem: imx-ocotp: replace global post processing with layouts Michael Walle
2022-12-06 20:07 ` [PATCH v5 16/21] nvmem: cell: drop global cell_post_process Michael Walle
2022-12-06 20:07 ` [PATCH v5 17/21] nvmem: core: provide own priv pointer in post process callback Michael Walle
2022-12-06 20:07 ` [PATCH v5 18/21] nvmem: layouts: add sl28vpd layout Michael Walle
2022-12-06 20:07 ` [PATCH v5 19/21] MAINTAINERS: add myself as sl28vpd nvmem layout driver Michael Walle
2022-12-06 20:07 ` [PATCH v5 20/21] nvmem: layouts: Add ONIE tlv " Michael Walle
2022-12-06 20:07 ` [PATCH v5 21/21] MAINTAINERS: Add myself as ONIE tlv NVMEM layout maintainer Michael Walle
2023-01-03 15:39 ` [PATCH v5 00/21] nvmem: core: introduce NVMEM layouts Miquel Raynal
2023-01-03 15:51   ` Srinivas Kandagatla
2023-01-03 15:58     ` Miquel Raynal
2023-01-05 11:04     ` Alexander Stein
2023-01-05 11:35       ` Miquel Raynal
2023-01-05 12:11         ` Michael Walle
2023-01-05 12:21           ` Alexander Stein
2023-01-05 12:51             ` Michael Walle
2023-01-05 13:22               ` Alexander Stein [this message]
2023-02-06 20:31   ` Srinivas Kandagatla
2023-02-06 22:47     ` Miquel Raynal
2023-02-07  6:28       ` Greg Kroah-Hartman

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=20668918.0c2gjJ1VT2@steina-w \
    --to=alexander.stein@ew.tq-group.com \
    --cc=corbet@lwn.net \
    --cc=devicetree@vger.kernel.org \
    --cc=error27@gmail.com \
    --cc=frowand.list@gmail.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-doc@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=michael@walle.cc \
    --cc=miquel.raynal@bootlin.com \
    --cc=robh+dt@kernel.org \
    --cc=s.hauer@pengutronix.de \
    --cc=srinivas.kandagatla@linaro.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).