[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