2023-06-09 18:37:46

by Rob Herring (Arm)

[permalink] [raw]
Subject: [PATCH] i2c: mpc: Use of_property_read_reg() to parse "reg"

Use the recently added of_property_read_reg() helper to get the
untranslated "reg" address value.

Signed-off-by: Rob Herring <[email protected]>
---
drivers/i2c/busses/i2c-mpc.c | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/drivers/i2c/busses/i2c-mpc.c b/drivers/i2c/busses/i2c-mpc.c
index cfd074ee6d54..595dce9218ad 100644
--- a/drivers/i2c/busses/i2c-mpc.c
+++ b/drivers/i2c/busses/i2c-mpc.c
@@ -316,9 +316,10 @@ static void mpc_i2c_setup_512x(struct device_node *node,
if (node_ctrl) {
ctrl = of_iomap(node_ctrl, 0);
if (ctrl) {
+ u64 addr;
/* Interrupt enable bits for i2c-0/1/2: bit 24/26/28 */
- pval = of_get_property(node, "reg", NULL);
- idx = (*pval & 0xff) / 0x20;
+ of_property_read_reg(node, 0, &addr, NULL);
+ idx = (addr & 0xff) / 0x20;
setbits32(ctrl, 1 << (24 + idx * 2));
iounmap(ctrl);
}
--
2.39.2



2023-06-10 09:52:40

by Andi Shyti

[permalink] [raw]
Subject: Re: [PATCH] i2c: mpc: Use of_property_read_reg() to parse "reg"

Hi Rob,

On Fri, Jun 09, 2023 at 12:30:44PM -0600, Rob Herring wrote:
> Use the recently added of_property_read_reg() helper to get the
> untranslated "reg" address value.
>
> Signed-off-by: Rob Herring <[email protected]>
> ---
> drivers/i2c/busses/i2c-mpc.c | 5 +++--
> 1 file changed, 3 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/i2c/busses/i2c-mpc.c b/drivers/i2c/busses/i2c-mpc.c
> index cfd074ee6d54..595dce9218ad 100644
> --- a/drivers/i2c/busses/i2c-mpc.c
> +++ b/drivers/i2c/busses/i2c-mpc.c
> @@ -316,9 +316,10 @@ static void mpc_i2c_setup_512x(struct device_node *node,
> if (node_ctrl) {
> ctrl = of_iomap(node_ctrl, 0);
> if (ctrl) {
> + u64 addr;
> /* Interrupt enable bits for i2c-0/1/2: bit 24/26/28 */
> - pval = of_get_property(node, "reg", NULL);
> - idx = (*pval & 0xff) / 0x20;
> + of_property_read_reg(node, 0, &addr, NULL);

because of_property_read_reg() can return error, can we check
also the error value here?

Thanks,
Andi

> + idx = (addr & 0xff) / 0x20;
> setbits32(ctrl, 1 << (24 + idx * 2));
> iounmap(ctrl);
> }
> --
> 2.39.2
>

2023-06-12 19:58:35

by Rob Herring (Arm)

[permalink] [raw]
Subject: Re: [PATCH] i2c: mpc: Use of_property_read_reg() to parse "reg"

On Sat, Jun 10, 2023 at 3:36 AM Andi Shyti <[email protected]> wrote:
>
> Hi Rob,
>
> On Fri, Jun 09, 2023 at 12:30:44PM -0600, Rob Herring wrote:
> > Use the recently added of_property_read_reg() helper to get the
> > untranslated "reg" address value.
> >
> > Signed-off-by: Rob Herring <[email protected]>
> > ---
> > drivers/i2c/busses/i2c-mpc.c | 5 +++--
> > 1 file changed, 3 insertions(+), 2 deletions(-)
> >
> > diff --git a/drivers/i2c/busses/i2c-mpc.c b/drivers/i2c/busses/i2c-mpc.c
> > index cfd074ee6d54..595dce9218ad 100644
> > --- a/drivers/i2c/busses/i2c-mpc.c
> > +++ b/drivers/i2c/busses/i2c-mpc.c
> > @@ -316,9 +316,10 @@ static void mpc_i2c_setup_512x(struct device_node *node,
> > if (node_ctrl) {
> > ctrl = of_iomap(node_ctrl, 0);
> > if (ctrl) {
> > + u64 addr;
> > /* Interrupt enable bits for i2c-0/1/2: bit 24/26/28 */
> > - pval = of_get_property(node, "reg", NULL);
> > - idx = (*pval & 0xff) / 0x20;
> > + of_property_read_reg(node, 0, &addr, NULL);
>
> because of_property_read_reg() can return error, can we check
> also the error value here?

Why? The old code wasn't worried about of_get_property() returning
NULL on the same possible errors. If anyone is still actually using
mpc512x, I don't think their DTB will have an error at this point.
IOW, is improving the error handling on this really worth it?

Rob

2023-06-12 21:28:05

by Andi Shyti

[permalink] [raw]
Subject: Re: [PATCH] i2c: mpc: Use of_property_read_reg() to parse "reg"

Hi Rob,

On Mon, Jun 12, 2023 at 01:27:03PM -0600, Rob Herring wrote:
> On Sat, Jun 10, 2023 at 3:36 AM Andi Shyti <[email protected]> wrote:
> >
> > Hi Rob,
> >
> > On Fri, Jun 09, 2023 at 12:30:44PM -0600, Rob Herring wrote:
> > > Use the recently added of_property_read_reg() helper to get the
> > > untranslated "reg" address value.
> > >
> > > Signed-off-by: Rob Herring <[email protected]>
> > > ---
> > > drivers/i2c/busses/i2c-mpc.c | 5 +++--
> > > 1 file changed, 3 insertions(+), 2 deletions(-)
> > >
> > > diff --git a/drivers/i2c/busses/i2c-mpc.c b/drivers/i2c/busses/i2c-mpc.c
> > > index cfd074ee6d54..595dce9218ad 100644
> > > --- a/drivers/i2c/busses/i2c-mpc.c
> > > +++ b/drivers/i2c/busses/i2c-mpc.c
> > > @@ -316,9 +316,10 @@ static void mpc_i2c_setup_512x(struct device_node *node,
> > > if (node_ctrl) {
> > > ctrl = of_iomap(node_ctrl, 0);
> > > if (ctrl) {
> > > + u64 addr;
> > > /* Interrupt enable bits for i2c-0/1/2: bit 24/26/28 */
> > > - pval = of_get_property(node, "reg", NULL);
> > > - idx = (*pval & 0xff) / 0x20;
> > > + of_property_read_reg(node, 0, &addr, NULL);
> >
> > because of_property_read_reg() can return error, can we check
> > also the error value here?
>
> Why?

Because if a function can return an error, the error must be
checked. Even if the property is "reg" and the binding says that
it's required. Otherwise let's make those functions void.

> The old code wasn't worried about of_get_property() returning
> NULL on the same possible errors.

Sure! Checking the error comes for free. The patch is fine as it
is, mine was a little improvement I asked for. I can still ack
it and add the error handling later myself :)

> If anyone is still actually using
> mpc512x, I don't think their DTB will have an error at this point.
> IOW, is improving the error handling on this really worth it?

In my view, every error needs to be checked as every error is
unlikely to happen: it makes the code future proof and makes sure
other components failure don't impact the normal functioning of
this driver.

Anyway, the patch is doing what you described and for the sole
economy of this change:

Acked-by: Andi Shyti <[email protected]>

Thank you,
Andi

2023-06-12 21:53:20

by Rob Herring (Arm)

[permalink] [raw]
Subject: Re: [PATCH] i2c: mpc: Use of_property_read_reg() to parse "reg"

On Mon, Jun 12, 2023 at 3:08 PM Andi Shyti <[email protected]> wrote:
>
> Hi Rob,
>
> On Mon, Jun 12, 2023 at 01:27:03PM -0600, Rob Herring wrote:
> > On Sat, Jun 10, 2023 at 3:36 AM Andi Shyti <[email protected]> wrote:
> > >
> > > Hi Rob,
> > >
> > > On Fri, Jun 09, 2023 at 12:30:44PM -0600, Rob Herring wrote:
> > > > Use the recently added of_property_read_reg() helper to get the
> > > > untranslated "reg" address value.
> > > >
> > > > Signed-off-by: Rob Herring <[email protected]>
> > > > ---
> > > > drivers/i2c/busses/i2c-mpc.c | 5 +++--
> > > > 1 file changed, 3 insertions(+), 2 deletions(-)
> > > >
> > > > diff --git a/drivers/i2c/busses/i2c-mpc.c b/drivers/i2c/busses/i2c-mpc.c
> > > > index cfd074ee6d54..595dce9218ad 100644
> > > > --- a/drivers/i2c/busses/i2c-mpc.c
> > > > +++ b/drivers/i2c/busses/i2c-mpc.c
> > > > @@ -316,9 +316,10 @@ static void mpc_i2c_setup_512x(struct device_node *node,
> > > > if (node_ctrl) {
> > > > ctrl = of_iomap(node_ctrl, 0);
> > > > if (ctrl) {
> > > > + u64 addr;
> > > > /* Interrupt enable bits for i2c-0/1/2: bit 24/26/28 */
> > > > - pval = of_get_property(node, "reg", NULL);
> > > > - idx = (*pval & 0xff) / 0x20;
> > > > + of_property_read_reg(node, 0, &addr, NULL);
> > >
> > > because of_property_read_reg() can return error, can we check
> > > also the error value here?
> >
> > Why?
>
> Because if a function can return an error, the error must be
> checked. Even if the property is "reg" and the binding says that
> it's required. Otherwise let's make those functions void.

Then every function should have a must_check annotation, but they
don't as the function is designed to work with optional properties
where we want to ignore errors.

> > The old code wasn't worried about of_get_property() returning
> > NULL on the same possible errors.
>
> Sure! Checking the error comes for free. The patch is fine as it
> is, mine was a little improvement I asked for. I can still ack
> it and add the error handling later myself :)
>
> > If anyone is still actually using
> > mpc512x, I don't think their DTB will have an error at this point.
> > IOW, is improving the error handling on this really worth it?
>
> In my view, every error needs to be checked as every error is
> unlikely to happen: it makes the code future proof and makes sure
> other components failure don't impact the normal functioning of
> this driver.

An error in this case is a bad DT. It's not the kernel's job to ensure
DT is correct. If it is, then it is doing a terrible job. The reason
we have dtschema is to ensure correctness.

Rob

2023-06-14 09:15:07

by Wolfram Sang

[permalink] [raw]
Subject: Re: [PATCH] i2c: mpc: Use of_property_read_reg() to parse "reg"

On Fri, Jun 09, 2023 at 12:30:44PM -0600, Rob Herring wrote:
> Use the recently added of_property_read_reg() helper to get the
> untranslated "reg" address value.
>
> Signed-off-by: Rob Herring <[email protected]>

Applied to for-next, thanks!


Attachments:
(No filename) (252.00 B)
signature.asc (849.00 B)
Download all attachments

2023-06-21 17:37:49

by Guenter Roeck

[permalink] [raw]
Subject: Re: [PATCH] i2c: mpc: Use of_property_read_reg() to parse "reg"

On Fri, Jun 09, 2023 at 12:30:44PM -0600, Rob Herring wrote:
> Use the recently added of_property_read_reg() helper to get the
> untranslated "reg" address value.
>
> Signed-off-by: Rob Herring <[email protected]>

This patch results in:

Building powerpc:ppc32_allmodconfig ... failed
--------------
Error log:
drivers/i2c/busses/i2c-mpc.c: In function 'mpc_i2c_setup_512x':
drivers/i2c/busses/i2c-mpc.c:310:20: error: unused variable 'pval' [-Werror=unused-variable]
310 | const u32 *pval;

because pval is no longer used.

Guenter

> ---
> drivers/i2c/busses/i2c-mpc.c | 5 +++--
> 1 file changed, 3 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/i2c/busses/i2c-mpc.c b/drivers/i2c/busses/i2c-mpc.c
> index cfd074ee6d54..595dce9218ad 100644
> --- a/drivers/i2c/busses/i2c-mpc.c
> +++ b/drivers/i2c/busses/i2c-mpc.c
> @@ -316,9 +316,10 @@ static void mpc_i2c_setup_512x(struct device_node *node,
> if (node_ctrl) {
> ctrl = of_iomap(node_ctrl, 0);
> if (ctrl) {
> + u64 addr;
> /* Interrupt enable bits for i2c-0/1/2: bit 24/26/28 */
> - pval = of_get_property(node, "reg", NULL);
> - idx = (*pval & 0xff) / 0x20;
> + of_property_read_reg(node, 0, &addr, NULL);
> + idx = (addr & 0xff) / 0x20;
> setbits32(ctrl, 1 << (24 + idx * 2));
> iounmap(ctrl);
> }
> --
> 2.39.2
>