From: Luca Ceresoli <luca@lucaceresoli.net> To: Geert Uytterhoeven <geert@linux-m68k.org>, Wolfram Sang <wsa+renesas@sang-engineering.com> Cc: "Linux I2C" <linux-i2c@vger.kernel.org>, Linux-Renesas <linux-renesas-soc@vger.kernel.org>, linux-i3c@lists.infradead.org, "Kieran Bingham" <kieran@ksquared.org.uk>, "Niklas Söderlund" <niklas.soderlund@ragnatech.se>, "Jacopo Mondi" <jacopo@jmondi.org>, "Laurent Pinchart" <laurent.pinchart@ideasonboard.com>, "Vladimir Zapolskiy" <vz@mleia.com>, "Linux Kernel Mailing List" <linux-kernel@vger.kernel.org>, "open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS" <devicetree@vger.kernel.org>, "Alexandre Belloni" <alexandre.belloni@bootlin.com> Subject: Re: [RFC PATCH 3/7] i2c: allow DT nodes without 'compatible' Date: Mon, 24 Feb 2020 00:11:10 +0100 [thread overview] Message-ID: <e43eaaf1-a294-902f-9a52-ebf8b29acab1@lucaceresoli.net> (raw) In-Reply-To: <CAMuHMdWaPfc050dZiRr+gAFzsdjSo9Vo70ztWgrMGPJxLUqupw@mail.gmail.com> Hi, On 21/02/20 10:45, Geert Uytterhoeven wrote: > Hi Wolfram, > > On Thu, Feb 20, 2020 at 6:26 PM Wolfram Sang > <wsa+renesas@sang-engineering.com> wrote: >> Sometimes, we have unknown devices in a system and still want to block >> their address. For that, we allow DT nodes with only a 'reg' property. >> These devices will be bound to the "dummy" driver but with the name >> "reserved". That way, we can distinguish them and even hand them over to >> the "dummy" driver later when they are really requested using >> i2c_new_ancillary_device(). >> >> Signed-off-by: Wolfram Sang <wsa+renesas@sang-engineering.com> Cc:ing Alexandre who raised the need for a described-but-disabled I2C node. > Thanks for your patch! > > Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be> > but one question below. > >> --- a/Documentation/devicetree/bindings/i2c/i2c-ocores.txt >> +++ b/Documentation/devicetree/bindings/i2c/i2c-ocores.txt >> @@ -50,7 +50,6 @@ Examples: >> reg-io-width = <1>; /* 8 bit read/write */ >> >> dummy@60 { >> - compatible = "dummy"; >> reg = <0x60>; >> }; >> }; > > There's a second instance to remove 18 lines below. > >> --- a/drivers/i2c/i2c-core-of.c >> +++ b/drivers/i2c/i2c-core-of.c >> @@ -27,17 +27,15 @@ int of_i2c_get_board_info(struct device *dev, struct device_node *node, >> >> memset(info, 0, sizeof(*info)); >> >> - if (of_modalias_node(node, info->type, sizeof(info->type)) < 0) { >> - dev_err(dev, "of_i2c: modalias failure on %pOF\n", node); >> - return -EINVAL; >> - } >> - >> ret = of_property_read_u32(node, "reg", &addr); >> if (ret) { >> dev_err(dev, "of_i2c: invalid reg on %pOF\n", node); >> return ret; >> } >> >> + if (of_modalias_node(node, info->type, sizeof(info->type)) < 0) >> + strlcpy(info->type, I2C_RESERVED_DRV_NAME, sizeof(I2C_RESERVED_DRV_NAME)); > > Could this cause a regression, e.g. if people already have such dummy > nodes in their DTS, and use sysfs new_device from userspace to > instantiate the device later? Such a DTS would be illegal because "compatible" has been a required property so far. Thus one could leave such people out in the cold because they went on an unsupported path. Not super nice anyway. However I'd like to view the issue from the DT point of view. DT describes the hardware, and it is possible (and even desirable) that the firmware provides the DTB independently from the OS, and the kernel consumes it. It this scenario, firmware could and should describe all I2C slaves with proper "compatible" property, and there is no way to remove it, in a clean way at least. But the kernel currently ignores nodes that have no matching driver, right? So in this case the kernel knows that that address is used, but ignores this information and considers the address as available. Seen in this perspective, we should have a "compatible" for all nodes: it is just describing the hardware and could be out of the kernel control. But instead of discarding all nodes without a matching driver, the i2c-core-of code should mark them as "reserved". Does it sound correct? Clearly this does not fit the case reported by Alexandre: a device having a driver which is known to be badly buggy, so we don't want to instantiate it. But again, this should not affect DT as it is not describing the HW, but only an implementation detail. Probably disabling or blacklisting the driver would be a better option there? My apologies to Wolfram, I appreciate a lot the effort you are doing, but before reviewing this patch I have never realized what I tried to explain above. -- Luca
WARNING: multiple messages have this Message-ID (diff)
From: Luca Ceresoli <luca@lucaceresoli.net> To: Geert Uytterhoeven <geert@linux-m68k.org>, Wolfram Sang <wsa+renesas@sang-engineering.com> Cc: "open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS" <devicetree@vger.kernel.org>, "Jacopo Mondi" <jacopo@jmondi.org>, "Alexandre Belloni" <alexandre.belloni@bootlin.com>, "Linux Kernel Mailing List" <linux-kernel@vger.kernel.org>, "Kieran Bingham" <kieran@ksquared.org.uk>, "Vladimir Zapolskiy" <vz@mleia.com>, Linux-Renesas <linux-renesas-soc@vger.kernel.org>, "Linux I2C" <linux-i2c@vger.kernel.org>, "Niklas Söderlund" <niklas.soderlund@ragnatech.se>, linux-i3c@lists.infradead.org, "Laurent Pinchart" <laurent.pinchart@ideasonboard.com> Subject: Re: [RFC PATCH 3/7] i2c: allow DT nodes without 'compatible' Date: Mon, 24 Feb 2020 00:11:10 +0100 [thread overview] Message-ID: <e43eaaf1-a294-902f-9a52-ebf8b29acab1@lucaceresoli.net> (raw) In-Reply-To: <CAMuHMdWaPfc050dZiRr+gAFzsdjSo9Vo70ztWgrMGPJxLUqupw@mail.gmail.com> Hi, On 21/02/20 10:45, Geert Uytterhoeven wrote: > Hi Wolfram, > > On Thu, Feb 20, 2020 at 6:26 PM Wolfram Sang > <wsa+renesas@sang-engineering.com> wrote: >> Sometimes, we have unknown devices in a system and still want to block >> their address. For that, we allow DT nodes with only a 'reg' property. >> These devices will be bound to the "dummy" driver but with the name >> "reserved". That way, we can distinguish them and even hand them over to >> the "dummy" driver later when they are really requested using >> i2c_new_ancillary_device(). >> >> Signed-off-by: Wolfram Sang <wsa+renesas@sang-engineering.com> Cc:ing Alexandre who raised the need for a described-but-disabled I2C node. > Thanks for your patch! > > Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be> > but one question below. > >> --- a/Documentation/devicetree/bindings/i2c/i2c-ocores.txt >> +++ b/Documentation/devicetree/bindings/i2c/i2c-ocores.txt >> @@ -50,7 +50,6 @@ Examples: >> reg-io-width = <1>; /* 8 bit read/write */ >> >> dummy@60 { >> - compatible = "dummy"; >> reg = <0x60>; >> }; >> }; > > There's a second instance to remove 18 lines below. > >> --- a/drivers/i2c/i2c-core-of.c >> +++ b/drivers/i2c/i2c-core-of.c >> @@ -27,17 +27,15 @@ int of_i2c_get_board_info(struct device *dev, struct device_node *node, >> >> memset(info, 0, sizeof(*info)); >> >> - if (of_modalias_node(node, info->type, sizeof(info->type)) < 0) { >> - dev_err(dev, "of_i2c: modalias failure on %pOF\n", node); >> - return -EINVAL; >> - } >> - >> ret = of_property_read_u32(node, "reg", &addr); >> if (ret) { >> dev_err(dev, "of_i2c: invalid reg on %pOF\n", node); >> return ret; >> } >> >> + if (of_modalias_node(node, info->type, sizeof(info->type)) < 0) >> + strlcpy(info->type, I2C_RESERVED_DRV_NAME, sizeof(I2C_RESERVED_DRV_NAME)); > > Could this cause a regression, e.g. if people already have such dummy > nodes in their DTS, and use sysfs new_device from userspace to > instantiate the device later? Such a DTS would be illegal because "compatible" has been a required property so far. Thus one could leave such people out in the cold because they went on an unsupported path. Not super nice anyway. However I'd like to view the issue from the DT point of view. DT describes the hardware, and it is possible (and even desirable) that the firmware provides the DTB independently from the OS, and the kernel consumes it. It this scenario, firmware could and should describe all I2C slaves with proper "compatible" property, and there is no way to remove it, in a clean way at least. But the kernel currently ignores nodes that have no matching driver, right? So in this case the kernel knows that that address is used, but ignores this information and considers the address as available. Seen in this perspective, we should have a "compatible" for all nodes: it is just describing the hardware and could be out of the kernel control. But instead of discarding all nodes without a matching driver, the i2c-core-of code should mark them as "reserved". Does it sound correct? Clearly this does not fit the case reported by Alexandre: a device having a driver which is known to be badly buggy, so we don't want to instantiate it. But again, this should not affect DT as it is not describing the HW, but only an implementation detail. Probably disabling or blacklisting the driver would be a better option there? My apologies to Wolfram, I appreciate a lot the effort you are doing, but before reviewing this patch I have never realized what I tried to explain above. -- Luca _______________________________________________ linux-i3c mailing list linux-i3c@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-i3c
next prev parent reply other threads:[~2020-02-23 23:11 UTC|newest] Thread overview: 67+ messages / expand[flat|nested] mbox.gz Atom feed top 2020-02-20 17:23 [RFC PATCH 0/7] i2c: of: reserve unknown and ancillary addresses Wolfram Sang 2020-02-20 17:23 ` Wolfram Sang 2020-02-20 17:23 ` [RFC PATCH 1/7] i2c: add sanity check for parameter of i2c_verify_client() Wolfram Sang 2020-02-20 17:23 ` Wolfram Sang 2020-02-21 9:36 ` Geert Uytterhoeven 2020-02-21 9:36 ` Geert Uytterhoeven 2020-02-20 17:23 ` [RFC PATCH 2/7] i2c: use DEFINE for the dummy driver name Wolfram Sang 2020-02-20 17:23 ` Wolfram Sang 2020-02-21 9:38 ` Geert Uytterhoeven 2020-02-21 9:38 ` Geert Uytterhoeven 2020-02-20 17:23 ` [RFC PATCH 3/7] i2c: allow DT nodes without 'compatible' Wolfram Sang 2020-02-20 17:23 ` Wolfram Sang 2020-02-20 17:23 ` Wolfram Sang 2020-02-21 9:45 ` Geert Uytterhoeven 2020-02-21 9:45 ` Geert Uytterhoeven 2020-02-21 9:45 ` Geert Uytterhoeven 2020-02-21 9:48 ` Geert Uytterhoeven 2020-02-21 9:48 ` Geert Uytterhoeven 2020-02-21 9:48 ` Geert Uytterhoeven 2020-02-23 23:11 ` Luca Ceresoli [this message] 2020-02-23 23:11 ` Luca Ceresoli 2020-03-12 11:19 ` Wolfram Sang 2020-03-12 11:19 ` Wolfram Sang 2020-03-12 11:44 ` Alexandre Belloni 2020-03-12 11:44 ` Alexandre Belloni 2020-03-12 11:44 ` Alexandre Belloni 2020-04-10 13:47 ` Luca Ceresoli 2020-04-10 13:47 ` Luca Ceresoli 2020-02-26 16:30 ` Rob Herring 2020-02-26 16:30 ` Rob Herring 2020-02-26 16:30 ` Rob Herring 2020-02-20 17:24 ` [RFC PATCH 4/7] i2c: of: remove superfluous parameter from exported function Wolfram Sang 2020-02-20 17:24 ` Wolfram Sang 2020-02-21 9:50 ` Geert Uytterhoeven 2020-02-21 9:50 ` Geert Uytterhoeven 2020-02-21 9:50 ` Geert Uytterhoeven 2020-02-24 8:12 ` Luca Ceresoli 2020-02-24 8:12 ` Luca Ceresoli 2020-02-20 17:24 ` [RFC PATCH 5/7] i2c: of: error message unification Wolfram Sang 2020-02-20 17:24 ` Wolfram Sang 2020-02-21 9:54 ` Geert Uytterhoeven 2020-02-21 9:54 ` Geert Uytterhoeven 2020-02-20 17:24 ` [RFC PATCH 6/7] i2c: of: mark a whole array of regs as reserved Wolfram Sang 2020-02-20 17:24 ` Wolfram Sang 2020-02-21 10:09 ` Geert Uytterhoeven 2020-02-21 10:09 ` Geert Uytterhoeven 2020-03-12 11:21 ` Wolfram Sang 2020-03-12 11:21 ` Wolfram Sang 2020-03-18 14:33 ` Wolfram Sang 2020-03-18 14:33 ` Wolfram Sang 2020-02-28 12:11 ` Luca Ceresoli 2020-02-28 12:11 ` Luca Ceresoli 2020-02-20 17:24 ` [RFC PATCH 7/7] i2c: core: hand over reserved devices when requesting ancillary addresses Wolfram Sang 2020-02-20 17:24 ` Wolfram Sang 2020-02-21 10:13 ` Geert Uytterhoeven 2020-02-21 10:13 ` Geert Uytterhoeven 2020-02-21 10:13 ` Geert Uytterhoeven 2020-02-28 12:11 ` Luca Ceresoli 2020-02-28 12:11 ` Luca Ceresoli 2020-03-12 11:30 ` Wolfram Sang 2020-03-12 11:30 ` Wolfram Sang 2020-03-12 11:21 ` Wolfram Sang 2020-03-12 11:21 ` Wolfram Sang 2020-03-13 12:42 ` Wolfram Sang 2020-03-13 12:42 ` Wolfram Sang 2020-02-21 10:15 ` [RFC PATCH 0/7] i2c: of: reserve unknown and " Geert Uytterhoeven 2020-02-21 10:15 ` Geert Uytterhoeven
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=e43eaaf1-a294-902f-9a52-ebf8b29acab1@lucaceresoli.net \ --to=luca@lucaceresoli.net \ --cc=alexandre.belloni@bootlin.com \ --cc=devicetree@vger.kernel.org \ --cc=geert@linux-m68k.org \ --cc=jacopo@jmondi.org \ --cc=kieran@ksquared.org.uk \ --cc=laurent.pinchart@ideasonboard.com \ --cc=linux-i2c@vger.kernel.org \ --cc=linux-i3c@lists.infradead.org \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-renesas-soc@vger.kernel.org \ --cc=niklas.soderlund@ragnatech.se \ --cc=vz@mleia.com \ --cc=wsa+renesas@sang-engineering.com \ /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: linkBe 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.