On Tue, 2020-10-13 at 22:26 +0800, Bin Meng wrote: > 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. It's good enough, I and my workmate will test the function
> > > --- > > 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? Yes, no error happens when use menuconfig, but can be simplified, I modify it. Thanks a lot > > > + 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