[PATCH next v7 05/10] usb: add MediaTek USB3 DRD driver

Chunfeng Yun chunfeng.yun at mediatek.com
Wed Oct 14 05:15:37 CEST 2020


On Tue, 2020-10-13 at 22:26 +0800, Bin Meng wrote:
> On Fri, Sep 18, 2020 at 5:12 PM Chunfeng Yun <chunfeng.yun at 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.yun at 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



More information about the U-Boot mailing list