On Fri, Sep 18, 2020 at 5:12 PM Chunfeng Yun <chunfeng....@mediatek.com> wrote: > > This patch adds support for the MediaTek USB3 DRD controller, > its host side is based on xHCI, this driver supports device mode > and host mode. > > Signed-off-by: Chunfeng Yun <chunfeng....@mediatek.com>
I can only comment some generic stuff, since I have no access to the controller datasheet. > --- > v7: > 1. use xhci quirk flag XHCI_MTK_HOST > > v6: no changes > > v5: > 1. change condition of readl_poll_timeout() when check clocks > > v4: > 1. remove unused member @busy and @wedged, use their flags instead > 2. support force_vbus mode > 3. add a glue driver using UCLASS_NOP > 4. add host driver, and rebuild host flow > > v3 changes > 1. add ->udc_set_speed() > 2. simplify some code flow > > v2: simplify QMU operations > --- > Makefile | 1 + > drivers/usb/Kconfig | 2 + > drivers/usb/mtu3/Kconfig | 45 ++ > drivers/usb/mtu3/Makefile | 11 + > drivers/usb/mtu3/mtu3.h | 423 +++++++++++++++++ > drivers/usb/mtu3/mtu3_core.c | 838 +++++++++++++++++++++++++++++++++ > drivers/usb/mtu3/mtu3_dr.h | 52 +++ > drivers/usb/mtu3/mtu3_gadget.c | 686 +++++++++++++++++++++++++++ > drivers/usb/mtu3/mtu3_gadget_ep0.c | 933 > +++++++++++++++++++++++++++++++++++++ > drivers/usb/mtu3/mtu3_host.c | 141 ++++++ > drivers/usb/mtu3/mtu3_hw_regs.h | 515 ++++++++++++++++++++ > drivers/usb/mtu3/mtu3_plat.c | 368 +++++++++++++++ > drivers/usb/mtu3/mtu3_qmu.c | 504 ++++++++++++++++++++ > drivers/usb/mtu3/mtu3_qmu.h | 37 ++ > 14 files changed, 4556 insertions(+) > create mode 100644 drivers/usb/mtu3/Kconfig > create mode 100644 drivers/usb/mtu3/Makefile > create mode 100644 drivers/usb/mtu3/mtu3.h > create mode 100644 drivers/usb/mtu3/mtu3_core.c > create mode 100644 drivers/usb/mtu3/mtu3_dr.h > create mode 100644 drivers/usb/mtu3/mtu3_gadget.c > create mode 100644 drivers/usb/mtu3/mtu3_gadget_ep0.c > create mode 100644 drivers/usb/mtu3/mtu3_host.c > create mode 100644 drivers/usb/mtu3/mtu3_hw_regs.h > create mode 100644 drivers/usb/mtu3/mtu3_plat.c > create mode 100644 drivers/usb/mtu3/mtu3_qmu.c > create mode 100644 drivers/usb/mtu3/mtu3_qmu.h > > diff --git a/Makefile b/Makefile > index 7a05fc7..2dcc41a 100644 > --- a/Makefile > +++ b/Makefile > @@ -795,6 +795,7 @@ libs-y += drivers/usb/eth/ > libs-$(CONFIG_USB_GADGET) += drivers/usb/gadget/ > libs-$(CONFIG_USB_GADGET) += drivers/usb/gadget/udc/ > libs-y += drivers/usb/host/ > +libs-y += drivers/usb/mtu3/ > libs-y += drivers/usb/musb/ > libs-y += drivers/usb/musb-new/ > libs-y += drivers/usb/phy/ > diff --git a/drivers/usb/Kconfig b/drivers/usb/Kconfig > index 34881a1..fedc013 100644 > --- a/drivers/usb/Kconfig > +++ b/drivers/usb/Kconfig > @@ -72,6 +72,8 @@ source "drivers/usb/cdns3/Kconfig" > > source "drivers/usb/dwc3/Kconfig" > > +source "drivers/usb/mtu3/Kconfig" > + > source "drivers/usb/musb/Kconfig" > > source "drivers/usb/musb-new/Kconfig" > diff --git a/drivers/usb/mtu3/Kconfig b/drivers/usb/mtu3/Kconfig > new file mode 100644 > index 0000000..66651ad > --- /dev/null > +++ b/drivers/usb/mtu3/Kconfig > @@ -0,0 +1,45 @@ > +# SPDX-License-Identifier: GPL-2.0 > +# > +# For MTK USB3.0 IP > + > +config USB_MTU3 > + bool "MediaTek USB3 Dual Role controller" > + depends on USB || USB_GADGET > + depends on ARCH_MEDIATEK > + help > + Say Y here if your system runs on MediaTek SoCs with > + Dual Role SuperSpeed USB controller. You can select usb > + mode as peripheral role or host role. > + > + If you don't know what this is, please say N. > + > +if USB_MTU3 > +choice > + bool "MTU3 Mode Selection" > + default USB_MTU3_GADGET if USB_GADGET > + default USB_MTU3_HOST if (USB && !USB_GADGET) > + > +config USB_MTU3_HOST > + bool "Host only mode" > + depends on USB=y || USB=USB_MTU3 Is this Kconfig grammer supported by U-Boot? > + select USB_XHCI_HCD > + help > + Select this when you want to use MTU3 in host mode only, > + thereby the gadget feature will be regressed. > + > +config USB_MTU3_GADGET > + bool "Gadget only mode" > + depends on USB_GADGET=y || USB_GADGET=USB_MTU3 > + select USB_GADGET_DUALSPEED > + help > + Select this when you want to use MTU3 in gadget mode only, > + thereby the host feature will be regressed. > + > +endchoice > + > +config USB_MTU3_DEBUG > + bool "Enable Debugging Messages" > + help > + Say Y here to enable debugging messages in the MTU3 Driver. > + > +endif > diff --git a/drivers/usb/mtu3/Makefile b/drivers/usb/mtu3/Makefile > new file mode 100644 > index 0000000..234f3a3 > --- /dev/null > +++ b/drivers/usb/mtu3/Makefile > @@ -0,0 +1,11 @@ > +# SPDX-License-Identifier: GPL-2.0 > + > +ccflags-$(CONFIG_USB_MTU3_DEBUG) += -DDEBUG > + > +obj-$(CONFIG_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 [snip] Regards, Bin