]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
usb: udc: dwc3: Fold board dm_usb_gadget_handle_interrupts() into DWC3 gadget
authorMarek Vasut <marek.vasut+renesas@mailbox.org>
Sun, 17 Mar 2024 04:42:52 +0000 (05:42 +0100)
committerMattijs Korpershoek <mkorpershoek@baylibre.com>
Tue, 2 Apr 2024 07:08:07 +0000 (09:08 +0200)
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+renesas@mailbox.org>
Reviewed-by: Caleb Connolly <caleb.connolly@linaro.org>
Reviewed-by: Mattijs Korpershoek <mkorpershoek@baylibre.com>
Tested-by: Mattijs Korpershoek <mkorpershoek@baylibre.com> # vim3
Tested-by: Caleb Connolly <caleb.connolly@linaro.org> # qcom sdm845
Link: https://lore.kernel.org/r/20240317044357.547037-1-marek.vasut+renesas@mailbox.org
Signed-off-by: Mattijs Korpershoek <mkorpershoek@baylibre.com>
board/purism/librem5/spl.c
board/samsung/common/exynos5-dt.c
board/st/stih410-b2260/board.c
board/ti/am43xx/board.c
drivers/usb/dwc3/core.c
drivers/usb/dwc3/dwc3-omap.c
include/dwc3-omap-uboot.h
include/dwc3-uboot.h

index 581f09296627b816871965521f7f0fef67e5785f..9aadc553302e0bb06dfedb536af1d4716cc50241 100644 (file)
@@ -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;
index 95cf6d2acc20387037bf1ba7151a5f02e2369e05..b3e87c9375139641046abaf904360f4d88e74f44 100644 (file)
@@ -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 *)
index e21cbc270e99c298deacd05431a1eb679a4a3509..82817571ae3d95e4d669620df94ec2adfd303534 100644 (file)
@@ -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;
index ea0d0b92088a13f169d8494589f55613e816b20b..a4679a2e29489ee850a71295d99de03d87240b85 100644 (file)
@@ -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)
index 4b4fcd8a22e44cd75512c6c069c4e642dd624447..09737be9a9c18d4776768f7b519ca40a8f07f4f0 100644 (file)
@@ -983,6 +983,11 @@ void dwc3_uboot_exit(int index)
        }
 }
 
+MODULE_ALIAS("platform:dwc3");
+MODULE_AUTHOR("Felipe Balbi <balbi@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 <balbi@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)
index 4fadb4a3e200cd65c6ca7a4faa9c2fdb9023c3f0..53c4d4826b4544c967ab91729a8cc6f9daab4a77 100644 (file)
@@ -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;
 
index ed92bfc5a978f2a8dde16a1293119befbd146700..f220705ef7be10532138c46acc76c71fa594bf38 100644 (file)
@@ -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_ */
index 35cfbb93b29490fca1cabfac83911bf5e0b4142b..5f13f5bcf40fc7ad326791f34cc0e4c3caba630e 100644 (file)
@@ -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;