[RFC v1 7/7] usb: onboard-hub: Add conditional compilation for I2C initialization
Anand Moon
linux.amoon at gmail.com
Fri May 9 19:45:30 CEST 2025
Hi Quentin,
On Fri, 9 May 2025 at 17:21, Quentin Schulz <quentin.schulz at cherry.de> 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 <linux.amoon at gmail.com>
> >> ---
> >> 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.
> 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.
> Cheers,
> Quentin
Thanks
-Anand
More information about the U-Boot
mailing list