diff options
| author | Carlo Caione <[email protected]> | 2026-08-08 15:40:00 +0200 |
|---|---|---|
| committer | Marek Vasut <[email protected]> | 2026-08-09 13:26:42 +0200 |
| commit | 08b77aac333cb437df57a7f746fa712042ccde61 (patch) | |
| tree | c3738f553cc26c19431487da67e6cfc8b7f29a8c | |
| parent | 0f8cbf3a0d6f5a83f3b3cc9792212247efd5afba (diff) | |
usb: mtu3: add SPL support
MediaTek platforms may need the MTU3 controller before U-Boot proper is
available, but the driver is currently selected and built only with the
main U-Boot configuration symbols.
Add an explicit SPL controller option with host and gadget modes. Make
the driver build and its role checks phase-aware so each phase can select
the MTU3 role it needs without coupling it to the U-Boot proper controller
configuration.
The upstream binding locates the xHCI child registers through the parent
ranges property. Select SPL_OF_TRANSLATE for host mode so SPL can resolve
that address before mapping it.
Signed-off-by: Julien Masson <[email protected]>
Signed-off-by: Carlo Caione <[email protected]>
Reviewed-by: Marek Vasut <[email protected]>
| -rw-r--r-- | drivers/Makefile | 3 | ||||
| -rw-r--r-- | drivers/usb/mtu3/Kconfig | 39 | ||||
| -rw-r--r-- | drivers/usb/mtu3/Makefile | 10 | ||||
| -rw-r--r-- | drivers/usb/mtu3/mtu3_dr.h | 4 | ||||
| -rw-r--r-- | drivers/usb/mtu3/mtu3_plat.c | 8 |
5 files changed, 52 insertions, 12 deletions
diff --git a/drivers/Makefile b/drivers/Makefile index 43d0ba33281..4c7ba741acb 100644 --- a/drivers/Makefile +++ b/drivers/Makefile @@ -66,7 +66,8 @@ obj-$(CONFIG_DRAM_SUN20I_D1) += ram/ obj-$(CONFIG_SPL_DM_RESET) += reset/ obj-$(CONFIG_SPL_MUSB_NEW) += usb/musb-new/ obj-$(CONFIG_SPL_USB_GADGET) += usb/gadget/ -obj-$(CONFIG_SPL_USB_GADGET) += usb/common/ +obj-$(CONFIG_SPL_DM_USB) += usb/common/ +obj-$(CONFIG_SPL_USB_MTU3) += usb/mtu3/ obj-$(CONFIG_SPL_USB_GADGET) += usb/gadget/udc/ obj-$(CONFIG_SPL_WATCHDOG) += watchdog/ obj-$(CONFIG_SPL_USB_HOST) += usb/host/ diff --git a/drivers/usb/mtu3/Kconfig b/drivers/usb/mtu3/Kconfig index 5ec498ec953..8623adfdf51 100644 --- a/drivers/usb/mtu3/Kconfig +++ b/drivers/usb/mtu3/Kconfig @@ -42,3 +42,42 @@ config USB_MTU3_DEBUG Say Y here to enable debugging messages in the MTU3 Driver. endif + +config SPL_USB_MTU3 + bool "MediaTek USB3 controller support in SPL" + depends on ARCH_MEDIATEK + depends on SPL_DM_USB + depends on SPL_USB_HOST || (SPL_DM_USB_GADGET && SPL_USB_GADGET) + help + Enable the MediaTek USB3 controller in SPL. Select host or peripheral + mode below. + +if SPL_USB_MTU3 + +choice + bool "MTU3 SPL Mode Selection" + default SPL_USB_MTU3_GADGET if SPL_USB_GADGET + default SPL_USB_MTU3_HOST if (SPL_USB_HOST && !SPL_USB_GADGET) + help + Select whether the MTU3 controller operates as an xHCI host or a USB + peripheral in SPL. + +config SPL_USB_MTU3_HOST + bool "Host mode in SPL" + depends on SPL_USB_HOST && USB_XHCI_HCD + select SPL_OF_TRANSLATE + help + Enable the MTU3 xHCI host controller in SPL so USB devices can be + accessed before U-Boot proper starts. + +config SPL_USB_MTU3_GADGET + bool "Gadget mode in SPL" + depends on SPL_DM_USB_GADGET && SPL_USB_GADGET + select USB_GADGET_DUALSPEED + help + Enable the MTU3 peripheral controller in SPL so USB gadget + functions can use it before U-Boot proper starts. + +endchoice + +endif diff --git a/drivers/usb/mtu3/Makefile b/drivers/usb/mtu3/Makefile index 234f3a380a3..d1f0cd24875 100644 --- a/drivers/usb/mtu3/Makefile +++ b/drivers/usb/mtu3/Makefile @@ -1,11 +1,11 @@ # SPDX-License-Identifier: GPL-2.0 -ccflags-$(CONFIG_USB_MTU3_DEBUG) += -DDEBUG +ccflags-$(CONFIG_$(PHASE_)USB_MTU3_DEBUG) += -DDEBUG -obj-$(CONFIG_USB_MTU3) += mtu3.o +obj-$(CONFIG_$(PHASE_)USB_MTU3) += mtu3.o mtu3-y := mtu3_plat.o -obj-$(CONFIG_USB_MTU3_GADGET) += mtu3_core.o mtu3_gadget_ep0.o mtu3_gadget.o -obj-$(CONFIG_USB_MTU3_GADGET) += mtu3_qmu.o -obj-$(CONFIG_USB_MTU3_HOST) += mtu3_host.o +obj-$(CONFIG_$(PHASE_)USB_MTU3_GADGET) += mtu3_core.o mtu3_gadget_ep0.o +obj-$(CONFIG_$(PHASE_)USB_MTU3_GADGET) += mtu3_gadget.o mtu3_qmu.o +obj-$(CONFIG_$(PHASE_)USB_MTU3_HOST) += mtu3_host.o diff --git a/drivers/usb/mtu3/mtu3_dr.h b/drivers/usb/mtu3/mtu3_dr.h index ec0e50c04ca..89fbde03625 100644 --- a/drivers/usb/mtu3/mtu3_dr.h +++ b/drivers/usb/mtu3/mtu3_dr.h @@ -10,7 +10,7 @@ #ifndef _MTU3_DR_H_ #define _MTU3_DR_H_ -#if IS_ENABLED(CONFIG_USB_MTU3_HOST) +#if CONFIG_IS_ENABLED(USB_MTU3_HOST) int ssusb_host_init(struct ssusb_mtk *ssusb); void ssusb_host_exit(struct ssusb_mtk *ssusb); @@ -27,7 +27,7 @@ static inline void ssusb_host_exit(struct ssusb_mtk *ssusb) #endif -#if IS_ENABLED(CONFIG_USB_MTU3_GADGET) +#if CONFIG_IS_ENABLED(USB_MTU3_GADGET) int ssusb_gadget_init(struct ssusb_mtk *ssusb); void ssusb_gadget_exit(struct ssusb_mtk *ssusb); irqreturn_t mtu3_irq(int irq, void *data); diff --git a/drivers/usb/mtu3/mtu3_plat.c b/drivers/usb/mtu3/mtu3_plat.c index ec920eaf166..73107167ada 100644 --- a/drivers/usb/mtu3/mtu3_plat.c +++ b/drivers/usb/mtu3/mtu3_plat.c @@ -439,17 +439,17 @@ static int mtu3_glue_bind(struct udevice *parent) switch (dr_mode) { case USB_DR_MODE_PERIPHERAL: - if (IS_ENABLED(CONFIG_USB_MTU3_GADGET)) + if (CONFIG_IS_ENABLED(USB_MTU3_GADGET)) return mtu3_bind_gadget(parent); break; case USB_DR_MODE_HOST: - if (IS_ENABLED(CONFIG_USB_MTU3_HOST)) + if (CONFIG_IS_ENABLED(USB_MTU3_HOST)) return mtu3_bind_host(parent); break; case USB_DR_MODE_OTG: - if (IS_ENABLED(CONFIG_USB_MTU3_GADGET)) + if (CONFIG_IS_ENABLED(USB_MTU3_GADGET)) return mtu3_bind_gadget(parent); - if (IS_ENABLED(CONFIG_USB_MTU3_HOST)) + if (CONFIG_IS_ENABLED(USB_MTU3_HOST)) return mtu3_bind_host(parent); break; default: |
