Hi Marek, Thank you for the patch.
On dim., mars 17, 2024 at 05:42, Marek Vasut <marek.vasut+rene...@mailbox.org> wrote: > The dm_usb_gadget_handle_interrupts() has no place in board code. Move > this into DWC3 driver. The OMAP implementation is special, add new weak > dwc3_uboot_interrupt_status() function to decide whether DWC3 interrupt > handling should be called, and override it in OMAP DWC3 code, to repair > the special OMAP interrupt handling code until OMAP gets switched over > to DM UDC proper. > > Signed-off-by: Marek Vasut <marek.vasut+rene...@mailbox.org> Reviewed-by: Mattijs Korpershoek <mkorpersh...@baylibre.com> Tested that I could scan for usb mass storage and that I can use fastboot: => fastboot usb 0 crq->brequest:0x0 => usb start starting USB... Bus usb@ff500000: Register 3000140 NbrPorts 3 Starting the controller USB XHCI 1.10 scanning bus usb@ff500000 for devices... 3 USB Device(s) found scanning usb for storage devices... 1 Storage Device(s) found => usb storage Device 0: Vendor: SanDisk Rev: 1.00 Prod: Ultra Type: Removable Hard Disk Capacity: 29328.0 MB = 28.6 GB (60063744 x 512) Tested-by: Mattijs Korpershoek <mkorpersh...@baylibre.com> # vim3 > --- > Cc: Angus Ainslie <an...@akkea.ca> > Cc: Caleb Connolly <caleb.conno...@linaro.org> > Cc: Eugen Hristev <eugen.hris...@collabora.com> > Cc: Igor Prusov <ivpru...@salutedevices.com> > Cc: Mattijs Korpershoek <mkorpersh...@baylibre.com> > Cc: Nishanth Menon <n...@ti.com> > Cc: Patrice Chotard <patrice.chot...@foss.st.com> > Cc: Simon Glass <s...@chromium.org> > Cc: Stefan Bosch <stefa...@posteo.net> > Cc: Svyatoslav Ryhel <clamo...@gmail.com> > Cc: Tom Rini <tr...@konsulko.com> > Cc: ker...@puri.sm > --- > board/purism/librem5/spl.c | 6 ------ > board/samsung/common/exynos5-dt.c | 6 ------ > board/st/stih410-b2260/board.c | 6 ------ > board/ti/am43xx/board.c | 11 ----------- > drivers/usb/dwc3/core.c | 25 +++++++++++++++++++++---- > drivers/usb/dwc3/dwc3-omap.c | 4 ++-- > include/dwc3-omap-uboot.h | 1 - > include/dwc3-uboot.h | 1 + > 8 files changed, 24 insertions(+), 36 deletions(-) > > diff --git a/board/purism/librem5/spl.c b/board/purism/librem5/spl.c > index 581f0929662..9aadc553302 100644 > --- a/board/purism/librem5/spl.c > +++ b/board/purism/librem5/spl.c > @@ -418,12 +418,6 @@ out: > return rv; > } > > -int dm_usb_gadget_handle_interrupts(struct udevice *dev) > -{ > - dwc3_uboot_handle_interrupt(dev); > - return 0; > -} > - > static void dwc3_nxp_usb_phy_init(struct dwc3_device *dwc3) > { > u32 RegData; > diff --git a/board/samsung/common/exynos5-dt.c > b/board/samsung/common/exynos5-dt.c > index 95cf6d2acc2..b3e87c93751 100644 > --- a/board/samsung/common/exynos5-dt.c > +++ b/board/samsung/common/exynos5-dt.c > @@ -122,12 +122,6 @@ static struct dwc3_device dwc3_device_data = { > .index = 0, > }; > > -int dm_usb_gadget_handle_interrupts(struct udevice *dev) > -{ > - dwc3_uboot_handle_interrupt(dev); > - return 0; > -} > - > int board_usb_init(int index, enum usb_init_type init) > { > struct exynos_usb3_phy *phy = (struct exynos_usb3_phy *) > diff --git a/board/st/stih410-b2260/board.c b/board/st/stih410-b2260/board.c > index e21cbc270e9..82817571ae3 100644 > --- a/board/st/stih410-b2260/board.c > +++ b/board/st/stih410-b2260/board.c > @@ -50,12 +50,6 @@ static struct dwc3_device dwc3_device_data = { > .index = 0, > }; > > -int dm_usb_gadget_handle_interrupts(struct udevice *dev) > -{ > - dwc3_uboot_handle_interrupt(dev); > - return 0; > -} > - > int board_usb_init(int index, enum usb_init_type init) > { > int node; > diff --git a/board/ti/am43xx/board.c b/board/ti/am43xx/board.c > index ea0d0b92088..a4679a2e294 100644 > --- a/board/ti/am43xx/board.c > +++ b/board/ti/am43xx/board.c > @@ -759,17 +759,6 @@ static struct ti_usb_phy_device usb_phy2_device = { > .usb2_phy_power = (void *)USB2_PHY2_POWER, > .index = 1, > }; > - > -int dm_usb_gadget_handle_interrupts(struct udevice *dev) > -{ > - u32 status; > - > - status = dwc3_omap_uboot_interrupt_status(dev); > - if (status) > - dwc3_uboot_handle_interrupt(dev); > - > - return 0; > -} > #endif /* CONFIG_USB_DWC3 */ > > #if defined(CONFIG_USB_DWC3) || defined(CONFIG_USB_XHCI_OMAP) > diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c > index 4b4fcd8a22e..09737be9a9c 100644 > --- a/drivers/usb/dwc3/core.c > +++ b/drivers/usb/dwc3/core.c > @@ -983,6 +983,11 @@ void dwc3_uboot_exit(int index) > } > } > > +MODULE_ALIAS("platform:dwc3"); > +MODULE_AUTHOR("Felipe Balbi <ba...@ti.com>"); > +MODULE_LICENSE("GPL v2"); > +MODULE_DESCRIPTION("DesignWare USB3 DRD Controller Driver"); > + > /** > * dwc3_uboot_handle_interrupt - handle dwc3 core interrupt > * @dev: device of this controller > @@ -1004,10 +1009,22 @@ void dwc3_uboot_handle_interrupt(struct udevice *dev) > } > } > > -MODULE_ALIAS("platform:dwc3"); > -MODULE_AUTHOR("Felipe Balbi <ba...@ti.com>"); > -MODULE_LICENSE("GPL v2"); > -MODULE_DESCRIPTION("DesignWare USB3 DRD Controller Driver"); > +#if !CONFIG_IS_ENABLED(DM_USB_GADGET) > +__weak int dwc3_uboot_interrupt_status(struct udevice *dev) > +{ > + return 1; > +} > + > +int dm_usb_gadget_handle_interrupts(struct udevice *dev) > +{ > + if (!dwc3_uboot_interrupt_status(dev)) > + return 0; > + > + dwc3_uboot_handle_interrupt(dev); > + > + return 0; > +} > +#endif > > #if CONFIG_IS_ENABLED(PHY) && CONFIG_IS_ENABLED(DM_USB) > int dwc3_setup_phy(struct udevice *dev, struct phy_bulk *phys) > diff --git a/drivers/usb/dwc3/dwc3-omap.c b/drivers/usb/dwc3/dwc3-omap.c > index 4fadb4a3e20..53c4d4826b4 100644 > --- a/drivers/usb/dwc3/dwc3-omap.c > +++ b/drivers/usb/dwc3/dwc3-omap.c > @@ -428,7 +428,7 @@ void dwc3_omap_uboot_exit(int index) > } > > /** > - * dwc3_omap_uboot_interrupt_status - check the status of interrupt > + * dwc3_uboot_interrupt_status - check the status of interrupt > * @dev: device of this controller > * > * Checks the status of interrupts and returns true if an interrupt > @@ -436,7 +436,7 @@ void dwc3_omap_uboot_exit(int index) > * > * Generally called from board file. > */ > -int dwc3_omap_uboot_interrupt_status(struct udevice *dev) > +int dwc3_uboot_interrupt_status(struct udevice *dev) > { > struct dwc3_omap *omap = NULL; > > diff --git a/include/dwc3-omap-uboot.h b/include/dwc3-omap-uboot.h > index ed92bfc5a97..f220705ef7b 100644 > --- a/include/dwc3-omap-uboot.h > +++ b/include/dwc3-omap-uboot.h > @@ -27,5 +27,4 @@ struct dwc3_omap_device { > > int dwc3_omap_uboot_init(struct dwc3_omap_device *dev); > void dwc3_omap_uboot_exit(int index); > -int dwc3_omap_uboot_interrupt_status(struct udevice *dev); > #endif /* __DWC3_OMAP_UBOOT_H_ */ > diff --git a/include/dwc3-uboot.h b/include/dwc3-uboot.h > index 35cfbb93b29..5f13f5bcf40 100644 > --- a/include/dwc3-uboot.h > +++ b/include/dwc3-uboot.h > @@ -44,6 +44,7 @@ struct dwc3_device { > > int dwc3_uboot_init(struct dwc3_device *dev); > void dwc3_uboot_exit(int index); > +int dwc3_uboot_interrupt_status(struct udevice *dev); > void dwc3_uboot_handle_interrupt(struct udevice *dev); > > struct phy; > -- > 2.43.0