Hello Venkatesh Yadav Abbarapu,

On 23.06.25 10:06, Venkatesh Yadav Abbarapu wrote:
Observing the crash when we add the i2c-arbitrator node in the device
tree as per the DT bindings. The issue is with the child node of
i2c-arbitrator@72 i.e., i2c@f1950000->i2c-arbitrator@72->i2c-arb, as the
arbitrator uses the uclass of mux(UCLASS_I2C_MUX) and the mux uclass driver
checks for the "reg" property using the i2c_mux_child_post_bind() function,
if it won't find the "reg" property it will return -EINVAL which is leading
to the crash.
So, add the logic to check whether the  child node has the "reg" property,
if the "reg" property exists then read the "reg" and update the channel.

https://www.kernel.org/doc/Documentation/devicetree/bindings/i2c/i2c-arb.txt

Signed-off-by: Venkatesh Yadav Abbarapu <[email protected]>
---
Changes in v2:
- Return immediately if "reg" property is missing for arbitrator case.
---
  drivers/i2c/muxes/i2c-mux-uclass.c | 5 +++++
  1 file changed, 5 insertions(+)

Reviewed-by: Heiko Schocher <[email protected]>

@Tom: The fix looks valid for me, but I am unsure if it is not to
      late for 2025.07. What do you think?

Thanks!

diff --git a/drivers/i2c/muxes/i2c-mux-uclass.c 
b/drivers/i2c/muxes/i2c-mux-uclass.c
index d1999d21feb..012881de05b 100644
--- a/drivers/i2c/muxes/i2c-mux-uclass.c
+++ b/drivers/i2c/muxes/i2c-mux-uclass.c
@@ -40,6 +40,11 @@ static int i2c_mux_child_post_bind(struct udevice *dev)
        struct i2c_mux_bus *plat = dev_get_parent_plat(dev);
        int channel;
+ ofnode node = dev_ofnode(dev);
+
+       if (!ofnode_has_property(node, "reg"))
+               return 0;
+
        channel = dev_read_u32_default(dev, "reg", -1);
        if (channel < 0)
                return -EINVAL;


bye,
Heiko
--
DENX Software Engineering GmbH,      Managing Director: Erika Unter
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: +49-8142-66989-52   Fax: +49-8142-66989-80   Email: [email protected]

Reply via email to