Re: [RFC v1 7/7] usb: onboard-hub: Add conditional compilation for I2C initialization
Michal Simek <[email protected]> Wed, 21 May 2025 16:34:26 +0200
| Newsgroups | io.groups.u-boot-amlogic,org.u-boot-project.lists.u-boot |
|---|---|
| Message-ID | <[email protected]> |
On 5/12/25 09:06, Quentin Schulz wrote: > Hi Anand, > > On 5/9/25 7:45 PM, Anand Moon wrote: >> Hi Quentin, >> >> On Fri, 9 May 2025 at 17:21, Quentin Schulz <[email protected]> wrote: >>> >>> Hi Neil, Anand, >>> >>> On 5/9/25 9:57 AM, Neil Armstrong wrote: >>>> On 09/05/2025 09:02, Anand Moon wrote: >>>>> Add conditional compilation for the usb5744_i2c_init() function based >>>>> on the CONFIG_DM_I2C configuration, to avoid compilation failure. >>>>> >>>>> CC net/net-common.o >>>>> AR net/built-in.o >>>>> LDS u-boot.lds >>>>> LD u-boot >>>>> aarch64-linux-gnu-ld.bfd: common/usb_onboard_hub.o: in function >>>>> `usb5744_i2c_init': >>>>> /home/amoon/mainline/u-boot/amlogic/u-boot-maineline/common/ >>>>> usb_onboard_hub.c:74:(.text.usb5744_i2c_init+0xfc): undefined >>>>> reference to `i2c_get_chip' >>>>> aarch64-linux-gnu-ld.bfd: /home/amoon/mainline/u-boot/amlogic/u-boot- >>>>> maineline/common/usb_onboard_hub.c:89:(.text.usb5744_i2c_init+0x1a0): >>>>> undefined reference to `dm_i2c_write' >>>>> aarch64-linux-gnu-ld.bfd: /home/amoon/mainline/u-boot/amlogic/u-boot- >>>>> maineline/common/usb_onboard_hub.c:96:(.text.usb5744_i2c_init+0x1c8): >>>>> undefined reference to `dm_i2c_write' >>>>> aarch64-linux-gnu-ld.bfd: /home/amoon/mainline/u-boot/amlogic/u-boot- >>>>> maineline/common/usb_onboard_hub.c:104:(.text.usb5744_i2c_init+0x1f0): >>>>> undefined reference to `dm_i2c_write' >>>>> Segmentation fault (core dumped) >>>>> make: *** [Makefile:1824: u-boot] Error 139 >>>>> make: *** Deleting file 'u-boot' >>>>> >>>>> Signed-off-by: Anand Moon <[email protected]> >>>>> --- >>>>> common/usb_onboard_hub.c | 4 ++++ >>>>> 1 file changed, 4 insertions(+) >>>>> >>>>> diff --git a/common/usb_onboard_hub.c b/common/usb_onboard_hub.c >>>>> index 1242513c631..92e3f3a92c9 100644 >>>>> --- a/common/usb_onboard_hub.c >>>>> +++ b/common/usb_onboard_hub.c >>>>> @@ -30,6 +30,7 @@ struct onboard_hub_data { >>>>> int (*init)(struct udevice *dev); >>>>> }; >>>>> +#if CONFIG_IS_ENABLED(DM_I2C) >>>>> static int usb5744_i2c_init(struct udevice *dev) >>>>> { >>>>> /* >>>>> @@ -109,6 +110,7 @@ static int usb5744_i2c_init(struct udevice *dev) >>>>> return 0; >>>>> } >>>>> +#endif >>>>> int usb_onboard_hub_reset(struct udevice *dev) >>>>> { >>>>> @@ -222,7 +224,9 @@ static const struct onboard_hub_data usb2514_data = { >>>>> }; >>>>> static const struct onboard_hub_data usb5744_data = { >>>>> +#if CONFIG_IS_ENABLED(DM_I2C) >>>>> .init = usb5744_i2c_init, >>>>> +#endif >>>>> .power_on_delay_us = 1000, >>>>> .reset_us = 5, >>>>> }; >>>> >>>> I think you should completely disable usb5744_data in this case >>>> >>> >>> I would recommend to go the same route as the Linux kernel which has a >>> special Kconfig option for it, c.f. USB_ONBOARD_DEV_USB5744 which adds >>> the necessary dependencies. >>> >> On Linux kernel, it needs to parse the device node with i2c-bus. >> > > Seems like it does in U-Boot too? c.f. usb5744_i2c_init() with > dev_read_phandle_with_args with i2c-bus? > >>> We probably should be careful and figure out which boards are actually >>> using the usb5744 and add this symbol to their defconfig so they don't >>> regress. >>> >> From my initial analysis configs/xilinx_zynqmp_kria_defconfig >> which use CONFIG_USB_ONBOARD_HUB >> I believe using DM_I2C to guard the code is the best approach. >> it should be around .init() callback to guard this to work. >> > > I disagree. The driver clearly supports the USB5744 and the driver is compiled > regardless of DM_I2C support which is required (as far as I understood, maybe > that's incorrect?) for being able to use USB5744? I don't like hidden dependencies. > > Also, I believe Neil's point is we shouldn't try to probe the USB5744 if there > is no DM_I2C support, simply excluding .init() callback will probably just > render this "support" of USB5744 non-functional? USB5744 can be configured differently. We are using two configurations. 1. no initialization over i2c (but still you can have a need to have driver for reset or power) 2. initialization over i2c to start the hub And there is also one more configuration via SPI. It means I don't think DM_I2C should be real dependency on getting usb5744 to operate. Thanks, Michal