Re: [PATCH v7, 0/8] Add MediaTek USB3 DRD Driver
On Fri, 2016-10-28 at 12:37 +0200, Matthias Brugger wrote: > Hi Chunfeng, > > On 10/19/2016 04:28 AM, Chunfeng Yun wrote: > > These patches introduce the MediaTek USB3 dual-role controller > > driver. > > > > The driver can be configured as Dual-Role Device (DRD), > > Peripheral Only and Host Only (xHCI) modes. It works well > > with Mass Storage, RNDIS and g_zero on FS/HS and SS. And it is > > tested on MT8173 platform which only contains USB2.0 device IP, > > and on MT6290 platform which contains USB3.0 device IP. [...] > > > > Change in v2: > > 1. modify binding docs according to suggestions > > 2. modify some comments and remove some dummy blank lines > > 3. fix memory leakage > > > > > > Chunfeng Yun (8): > > dt-bindings: mt8173-xhci: support host side of dual-role mode > > dt-bindings: mt8173-mtu3: add devicetree bindings > > usb: xhci-mtk: make IPPC register optional > > usb: Add MediaTek USB3 DRD driver > > usb: mtu3: Super-Speed Peripheral mode support > > usb: mtu3: host only mode support > > usb: mtu3: dual-role mode support > > arm64: dts: mediatek: add USB3 DRD driver > > > > I tried the driver with my mt8173-evb, but wasn't able to get USB > working (no usb stick detected when adding to the usb port). > Can you test it again by USB3.0 type-A port? If it works, then regulators of vusb33 and vbus are got after PROBE_DEFER of mt6397-regulator driver; For OTG port, need cherry pick a patch: https://patchwork.kernel.org/patch/9055261/ which is abandoned because GPIO driver owner wants to fix all pins with the same problem. Then device will be recognized well when connected to PC with OTG cable. But it is a trouble for OTG host mode, due to vbus 5.5V of OTG port is originally provided by charger driver which is not upstreamed on EVB board, we need rework the board to control vbus by gpio. There is a simple way, you can plug in a self-powered hub to test OTG host mode. > # dmesg |grep mtu > [0.428420] mtu3 11271000.usb: failed to get vusb33 > [0.510570] mtu3 11271000.usb: failed to get vbus > [0.592103] mtu3 11271000.usb: failed to get vbus > > > Relevant config options: > CONFIG_USB_MTU3=y > CONFIG_USB_MTU3_HOST=y > CONFIG_USB_MTU3_DEBUG=y > CONFIG_PHY_MT65XX_USB3=y > > > Looks like an error in the device tree. I can see that the mt6397 > regulater get's initialized *after* the mtu3 driver: > [0.505166] mt6397-regulator mt6397-regulator: Chip ID = 0x4097 > > Not sure if this is related. > Any idea whats going wrong here? > as above. Sorry for inconvenience > Cheers, > Matthias
Re: [PATCH v7, 0/8] Add MediaTek USB3 DRD Driver
On Fri, 2016-10-28 at 12:37 +0200, Matthias Brugger wrote: > Hi Chunfeng, > > On 10/19/2016 04:28 AM, Chunfeng Yun wrote: > > These patches introduce the MediaTek USB3 dual-role controller > > driver. > > > > The driver can be configured as Dual-Role Device (DRD), > > Peripheral Only and Host Only (xHCI) modes. It works well > > with Mass Storage, RNDIS and g_zero on FS/HS and SS. And it is > > tested on MT8173 platform which only contains USB2.0 device IP, > > and on MT6290 platform which contains USB3.0 device IP. [...] > > > > Change in v2: > > 1. modify binding docs according to suggestions > > 2. modify some comments and remove some dummy blank lines > > 3. fix memory leakage > > > > > > Chunfeng Yun (8): > > dt-bindings: mt8173-xhci: support host side of dual-role mode > > dt-bindings: mt8173-mtu3: add devicetree bindings > > usb: xhci-mtk: make IPPC register optional > > usb: Add MediaTek USB3 DRD driver > > usb: mtu3: Super-Speed Peripheral mode support > > usb: mtu3: host only mode support > > usb: mtu3: dual-role mode support > > arm64: dts: mediatek: add USB3 DRD driver > > > > I tried the driver with my mt8173-evb, but wasn't able to get USB > working (no usb stick detected when adding to the usb port). > Can you test it again by USB3.0 type-A port? If it works, then regulators of vusb33 and vbus are got after PROBE_DEFER of mt6397-regulator driver; For OTG port, need cherry pick a patch: https://patchwork.kernel.org/patch/9055261/ which is abandoned because GPIO driver owner wants to fix all pins with the same problem. Then device will be recognized well when connected to PC with OTG cable. But it is a trouble for OTG host mode, due to vbus 5.5V of OTG port is originally provided by charger driver which is not upstreamed on EVB board, we need rework the board to control vbus by gpio. There is a simple way, you can plug in a self-powered hub to test OTG host mode. > # dmesg |grep mtu > [0.428420] mtu3 11271000.usb: failed to get vusb33 > [0.510570] mtu3 11271000.usb: failed to get vbus > [0.592103] mtu3 11271000.usb: failed to get vbus > > > Relevant config options: > CONFIG_USB_MTU3=y > CONFIG_USB_MTU3_HOST=y > CONFIG_USB_MTU3_DEBUG=y > CONFIG_PHY_MT65XX_USB3=y > > > Looks like an error in the device tree. I can see that the mt6397 > regulater get's initialized *after* the mtu3 driver: > [0.505166] mt6397-regulator mt6397-regulator: Chip ID = 0x4097 > > Not sure if this is related. > Any idea whats going wrong here? > as above. Sorry for inconvenience > Cheers, > Matthias
Re: [PATCH v7, 0/8] Add MediaTek USB3 DRD Driver
Hi Chunfeng, On 10/19/2016 04:28 AM, Chunfeng Yun wrote: These patches introduce the MediaTek USB3 dual-role controller driver. The driver can be configured as Dual-Role Device (DRD), Peripheral Only and Host Only (xHCI) modes. It works well with Mass Storage, RNDIS and g_zero on FS/HS and SS. And it is tested on MT8173 platform which only contains USB2.0 device IP, and on MT6290 platform which contains USB3.0 device IP. Change in v7: 1. split dual-role driver into four patchs 2. remove QMU done tasklet 3. add a bool in xhci_hcd_mtk to signal absence of IPPC Change in v6: 1. handle endianness of GPD and SETUP data 2. remove dummy error log and return suitable error number 3. cancel delay work when deregiseter driver Change in v5: 1. modify some comments 2. rename some unsuitable variables 3. add reg-names property for host node 4. add USB_MTU3_DEBUG to control debug messages Change in v4: 1. fix build errors on non-mediatek platforms 2. provide manual dual-role switch via debugfs instead of sysfs Change in v3: 1. fix some typo error 2. rename mtu3.txt to mt8173-mtu3.txt Change in v2: 1. modify binding docs according to suggestions 2. modify some comments and remove some dummy blank lines 3. fix memory leakage Chunfeng Yun (8): dt-bindings: mt8173-xhci: support host side of dual-role mode dt-bindings: mt8173-mtu3: add devicetree bindings usb: xhci-mtk: make IPPC register optional usb: Add MediaTek USB3 DRD driver usb: mtu3: Super-Speed Peripheral mode support usb: mtu3: host only mode support usb: mtu3: dual-role mode support arm64: dts: mediatek: add USB3 DRD driver I tried the driver with my mt8173-evb, but wasn't able to get USB working (no usb stick detected when adding to the usb port). # dmesg |grep mtu [0.428420] mtu3 11271000.usb: failed to get vusb33 [0.510570] mtu3 11271000.usb: failed to get vbus [0.592103] mtu3 11271000.usb: failed to get vbus Relevant config options: CONFIG_USB_MTU3=y CONFIG_USB_MTU3_HOST=y CONFIG_USB_MTU3_DEBUG=y CONFIG_PHY_MT65XX_USB3=y Looks like an error in the device tree. I can see that the mt6397 regulater get's initialized *after* the mtu3 driver: [0.505166] mt6397-regulator mt6397-regulator: Chip ID = 0x4097 Not sure if this is related. Any idea whats going wrong here? Cheers, Matthias
Re: [PATCH v7, 0/8] Add MediaTek USB3 DRD Driver
Hi Chunfeng, On 10/19/2016 04:28 AM, Chunfeng Yun wrote: These patches introduce the MediaTek USB3 dual-role controller driver. The driver can be configured as Dual-Role Device (DRD), Peripheral Only and Host Only (xHCI) modes. It works well with Mass Storage, RNDIS and g_zero on FS/HS and SS. And it is tested on MT8173 platform which only contains USB2.0 device IP, and on MT6290 platform which contains USB3.0 device IP. Change in v7: 1. split dual-role driver into four patchs 2. remove QMU done tasklet 3. add a bool in xhci_hcd_mtk to signal absence of IPPC Change in v6: 1. handle endianness of GPD and SETUP data 2. remove dummy error log and return suitable error number 3. cancel delay work when deregiseter driver Change in v5: 1. modify some comments 2. rename some unsuitable variables 3. add reg-names property for host node 4. add USB_MTU3_DEBUG to control debug messages Change in v4: 1. fix build errors on non-mediatek platforms 2. provide manual dual-role switch via debugfs instead of sysfs Change in v3: 1. fix some typo error 2. rename mtu3.txt to mt8173-mtu3.txt Change in v2: 1. modify binding docs according to suggestions 2. modify some comments and remove some dummy blank lines 3. fix memory leakage Chunfeng Yun (8): dt-bindings: mt8173-xhci: support host side of dual-role mode dt-bindings: mt8173-mtu3: add devicetree bindings usb: xhci-mtk: make IPPC register optional usb: Add MediaTek USB3 DRD driver usb: mtu3: Super-Speed Peripheral mode support usb: mtu3: host only mode support usb: mtu3: dual-role mode support arm64: dts: mediatek: add USB3 DRD driver I tried the driver with my mt8173-evb, but wasn't able to get USB working (no usb stick detected when adding to the usb port). # dmesg |grep mtu [0.428420] mtu3 11271000.usb: failed to get vusb33 [0.510570] mtu3 11271000.usb: failed to get vbus [0.592103] mtu3 11271000.usb: failed to get vbus Relevant config options: CONFIG_USB_MTU3=y CONFIG_USB_MTU3_HOST=y CONFIG_USB_MTU3_DEBUG=y CONFIG_PHY_MT65XX_USB3=y Looks like an error in the device tree. I can see that the mt6397 regulater get's initialized *after* the mtu3 driver: [0.505166] mt6397-regulator mt6397-regulator: Chip ID = 0x4097 Not sure if this is related. Any idea whats going wrong here? Cheers, Matthias
Re: [PATCH v7, 0/8] Add MediaTek USB3 DRD Driver
On Wed, Oct 19, 2016 at 10:28:19AM +0800, Chunfeng Yun wrote: > These patches introduce the MediaTek USB3 dual-role controller > driver. > > The driver can be configured as Dual-Role Device (DRD), > Peripheral Only and Host Only (xHCI) modes. It works well > with Mass Storage, RNDIS and g_zero on FS/HS and SS. And it is > tested on MT8173 platform which only contains USB2.0 device IP, > and on MT6290 platform which contains USB3.0 device IP. > > Change in v7: > 1. split dual-role driver into four patchs > 2. remove QMU done tasklet > 3. add a bool in xhci_hcd_mtk to signal absence of IPPC Given a lack of objection from anyone, I've now merged these to my tree to get them a spin in the 0-day build-bot. thanks, greg k-h
Re: [PATCH v7, 0/8] Add MediaTek USB3 DRD Driver
On Wed, Oct 19, 2016 at 10:28:19AM +0800, Chunfeng Yun wrote: > These patches introduce the MediaTek USB3 dual-role controller > driver. > > The driver can be configured as Dual-Role Device (DRD), > Peripheral Only and Host Only (xHCI) modes. It works well > with Mass Storage, RNDIS and g_zero on FS/HS and SS. And it is > tested on MT8173 platform which only contains USB2.0 device IP, > and on MT6290 platform which contains USB3.0 device IP. > > Change in v7: > 1. split dual-role driver into four patchs > 2. remove QMU done tasklet > 3. add a bool in xhci_hcd_mtk to signal absence of IPPC Given a lack of objection from anyone, I've now merged these to my tree to get them a spin in the 0-day build-bot. thanks, greg k-h
[PATCH v7, 4/8] usb: Add MediaTek USB3 DRD driver
This patch adds support for the MediaTek USB3 controller integrated into MT8173. It currently supports High-Speed Peripheral Only mode. Super-Speed Peripheral, Dual-Role Device and Host Only (xHCI) modes will be added in the next patchs. Signed-off-by: Chunfeng Yun--- drivers/usb/Kconfig|2 + drivers/usb/Makefile |1 + drivers/usb/mtu3/Kconfig | 32 ++ drivers/usb/mtu3/Makefile |2 + drivers/usb/mtu3/mtu3.h| 341 drivers/usb/mtu3/mtu3_core.c | 675 ++ drivers/usb/mtu3/mtu3_gadget.c | 709 drivers/usb/mtu3/mtu3_gadget_ep0.c | 791 drivers/usb/mtu3/mtu3_hw_regs.h| 440 drivers/usb/mtu3/mtu3_plat.c | 251 drivers/usb/mtu3/mtu3_qmu.c| 573 ++ drivers/usb/mtu3/mtu3_qmu.h| 43 ++ 12 files changed, 3860 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_gadget.c create mode 100644 drivers/usb/mtu3/mtu3_gadget_ep0.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/drivers/usb/Kconfig b/drivers/usb/Kconfig index 644e978..fbe493d 100644 --- a/drivers/usb/Kconfig +++ b/drivers/usb/Kconfig @@ -95,6 +95,8 @@ source "drivers/usb/usbip/Kconfig" endif +source "drivers/usb/mtu3/Kconfig" + source "drivers/usb/musb/Kconfig" source "drivers/usb/dwc3/Kconfig" diff --git a/drivers/usb/Makefile b/drivers/usb/Makefile index dca7856..7791af6 100644 --- a/drivers/usb/Makefile +++ b/drivers/usb/Makefile @@ -12,6 +12,7 @@ obj-$(CONFIG_USB_DWC2)+= dwc2/ obj-$(CONFIG_USB_ISP1760) += isp1760/ obj-$(CONFIG_USB_MON) += mon/ +obj-$(CONFIG_USB_MTU3) += mtu3/ obj-$(CONFIG_PCI) += host/ obj-$(CONFIG_USB_EHCI_HCD) += host/ diff --git a/drivers/usb/mtu3/Kconfig b/drivers/usb/mtu3/Kconfig new file mode 100644 index 000..54dadee --- /dev/null +++ b/drivers/usb/mtu3/Kconfig @@ -0,0 +1,32 @@ +# For MTK USB3.0 IP + +config USB_MTU3 + tristate "MediaTek USB3 Dual Role controller" + depends on (USB || USB_GADGET) && HAS_DMA + depends on ARCH_MEDIATEK || COMPILE_TEST + help + Say Y or M 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, or both. + + If you don't know what this is, please say N. + + Choose M here to compile this driver as a module, and it + will be called mtu3.ko. + + +if USB_MTU3 +choice + bool "MTU3 Mode Selection" + default USB_MTU3_GADGET if (!USB && USB_GADGET) + +config USB_MTU3_GADGET + bool "Gadget only mode" + depends on USB_GADGET=y || USB_GADGET=USB_MTU3 + help + Select this when you want to use MTU3 in gadget mode only, + thereby the host feature will be regressed. + +endchoice + +endif diff --git a/drivers/usb/mtu3/Makefile b/drivers/usb/mtu3/Makefile new file mode 100644 index 000..532c257 --- /dev/null +++ b/drivers/usb/mtu3/Makefile @@ -0,0 +1,2 @@ +obj-$(CONFIG_USB_MTU3) += mtu3.o +mtu3-y := mtu3_plat.o mtu3_core.o mtu3_gadget_ep0.o mtu3_gadget.o mtu3_qmu.o diff --git a/drivers/usb/mtu3/mtu3.h b/drivers/usb/mtu3/mtu3.h new file mode 100644 index 000..ad1a133 --- /dev/null +++ b/drivers/usb/mtu3/mtu3.h @@ -0,0 +1,341 @@ +/* + * mtu3.h - MediaTek USB3 DRD header + * + * Copyright (C) 2016 MediaTek Inc. + * + * Author: Chunfeng Yun + * + * This software is licensed under the terms of the GNU General Public + * License version 2, as published by the Free Software Foundation, and + * may be copied, distributed, and modified under those terms. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + */ + +#ifndef __MTU3_H__ +#define __MTU3_H__ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +struct mtu3; +struct mtu3_ep; +struct mtu3_request; + +#include "mtu3_hw_regs.h" +#include "mtu3_qmu.h" + +#defineMU3D_EP_TXCR0(epnum)(U3D_TX1CSR0 + (((epnum) - 1) * 0x10)) +#defineMU3D_EP_TXCR1(epnum)(U3D_TX1CSR1 + (((epnum) - 1) * 0x10)) +#defineMU3D_EP_TXCR2(epnum)(U3D_TX1CSR2 + (((epnum) - 1) * 0x10)) + +#defineMU3D_EP_RXCR0(epnum)
[PATCH v7, 4/8] usb: Add MediaTek USB3 DRD driver
This patch adds support for the MediaTek USB3 controller integrated into MT8173. It currently supports High-Speed Peripheral Only mode. Super-Speed Peripheral, Dual-Role Device and Host Only (xHCI) modes will be added in the next patchs. Signed-off-by: Chunfeng Yun --- drivers/usb/Kconfig|2 + drivers/usb/Makefile |1 + drivers/usb/mtu3/Kconfig | 32 ++ drivers/usb/mtu3/Makefile |2 + drivers/usb/mtu3/mtu3.h| 341 drivers/usb/mtu3/mtu3_core.c | 675 ++ drivers/usb/mtu3/mtu3_gadget.c | 709 drivers/usb/mtu3/mtu3_gadget_ep0.c | 791 drivers/usb/mtu3/mtu3_hw_regs.h| 440 drivers/usb/mtu3/mtu3_plat.c | 251 drivers/usb/mtu3/mtu3_qmu.c| 573 ++ drivers/usb/mtu3/mtu3_qmu.h| 43 ++ 12 files changed, 3860 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_gadget.c create mode 100644 drivers/usb/mtu3/mtu3_gadget_ep0.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/drivers/usb/Kconfig b/drivers/usb/Kconfig index 644e978..fbe493d 100644 --- a/drivers/usb/Kconfig +++ b/drivers/usb/Kconfig @@ -95,6 +95,8 @@ source "drivers/usb/usbip/Kconfig" endif +source "drivers/usb/mtu3/Kconfig" + source "drivers/usb/musb/Kconfig" source "drivers/usb/dwc3/Kconfig" diff --git a/drivers/usb/Makefile b/drivers/usb/Makefile index dca7856..7791af6 100644 --- a/drivers/usb/Makefile +++ b/drivers/usb/Makefile @@ -12,6 +12,7 @@ obj-$(CONFIG_USB_DWC2)+= dwc2/ obj-$(CONFIG_USB_ISP1760) += isp1760/ obj-$(CONFIG_USB_MON) += mon/ +obj-$(CONFIG_USB_MTU3) += mtu3/ obj-$(CONFIG_PCI) += host/ obj-$(CONFIG_USB_EHCI_HCD) += host/ diff --git a/drivers/usb/mtu3/Kconfig b/drivers/usb/mtu3/Kconfig new file mode 100644 index 000..54dadee --- /dev/null +++ b/drivers/usb/mtu3/Kconfig @@ -0,0 +1,32 @@ +# For MTK USB3.0 IP + +config USB_MTU3 + tristate "MediaTek USB3 Dual Role controller" + depends on (USB || USB_GADGET) && HAS_DMA + depends on ARCH_MEDIATEK || COMPILE_TEST + help + Say Y or M 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, or both. + + If you don't know what this is, please say N. + + Choose M here to compile this driver as a module, and it + will be called mtu3.ko. + + +if USB_MTU3 +choice + bool "MTU3 Mode Selection" + default USB_MTU3_GADGET if (!USB && USB_GADGET) + +config USB_MTU3_GADGET + bool "Gadget only mode" + depends on USB_GADGET=y || USB_GADGET=USB_MTU3 + help + Select this when you want to use MTU3 in gadget mode only, + thereby the host feature will be regressed. + +endchoice + +endif diff --git a/drivers/usb/mtu3/Makefile b/drivers/usb/mtu3/Makefile new file mode 100644 index 000..532c257 --- /dev/null +++ b/drivers/usb/mtu3/Makefile @@ -0,0 +1,2 @@ +obj-$(CONFIG_USB_MTU3) += mtu3.o +mtu3-y := mtu3_plat.o mtu3_core.o mtu3_gadget_ep0.o mtu3_gadget.o mtu3_qmu.o diff --git a/drivers/usb/mtu3/mtu3.h b/drivers/usb/mtu3/mtu3.h new file mode 100644 index 000..ad1a133 --- /dev/null +++ b/drivers/usb/mtu3/mtu3.h @@ -0,0 +1,341 @@ +/* + * mtu3.h - MediaTek USB3 DRD header + * + * Copyright (C) 2016 MediaTek Inc. + * + * Author: Chunfeng Yun + * + * This software is licensed under the terms of the GNU General Public + * License version 2, as published by the Free Software Foundation, and + * may be copied, distributed, and modified under those terms. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + */ + +#ifndef __MTU3_H__ +#define __MTU3_H__ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +struct mtu3; +struct mtu3_ep; +struct mtu3_request; + +#include "mtu3_hw_regs.h" +#include "mtu3_qmu.h" + +#defineMU3D_EP_TXCR0(epnum)(U3D_TX1CSR0 + (((epnum) - 1) * 0x10)) +#defineMU3D_EP_TXCR1(epnum)(U3D_TX1CSR1 + (((epnum) - 1) * 0x10)) +#defineMU3D_EP_TXCR2(epnum)(U3D_TX1CSR2 + (((epnum) - 1) * 0x10)) + +#defineMU3D_EP_RXCR0(epnum)(U3D_RX1CSR0 + (((epnum) - 1) * 0x10)) +#define
[PATCH v7, 0/8] Add MediaTek USB3 DRD Driver
These patches introduce the MediaTek USB3 dual-role controller driver. The driver can be configured as Dual-Role Device (DRD), Peripheral Only and Host Only (xHCI) modes. It works well with Mass Storage, RNDIS and g_zero on FS/HS and SS. And it is tested on MT8173 platform which only contains USB2.0 device IP, and on MT6290 platform which contains USB3.0 device IP. Change in v7: 1. split dual-role driver into four patchs 2. remove QMU done tasklet 3. add a bool in xhci_hcd_mtk to signal absence of IPPC Change in v6: 1. handle endianness of GPD and SETUP data 2. remove dummy error log and return suitable error number 3. cancel delay work when deregiseter driver Change in v5: 1. modify some comments 2. rename some unsuitable variables 3. add reg-names property for host node 4. add USB_MTU3_DEBUG to control debug messages Change in v4: 1. fix build errors on non-mediatek platforms 2. provide manual dual-role switch via debugfs instead of sysfs Change in v3: 1. fix some typo error 2. rename mtu3.txt to mt8173-mtu3.txt Change in v2: 1. modify binding docs according to suggestions 2. modify some comments and remove some dummy blank lines 3. fix memory leakage Chunfeng Yun (8): dt-bindings: mt8173-xhci: support host side of dual-role mode dt-bindings: mt8173-mtu3: add devicetree bindings usb: xhci-mtk: make IPPC register optional usb: Add MediaTek USB3 DRD driver usb: mtu3: Super-Speed Peripheral mode support usb: mtu3: host only mode support usb: mtu3: dual-role mode support arm64: dts: mediatek: add USB3 DRD driver .../devicetree/bindings/usb/mt8173-mtu3.txt| 87 ++ .../devicetree/bindings/usb/mt8173-xhci.txt| 54 +- arch/arm64/boot/dts/mediatek/mt8173-evb.dts| 63 +- arch/arm64/boot/dts/mediatek/mt8173.dtsi | 29 +- drivers/usb/Kconfig|2 + drivers/usb/Makefile |1 + drivers/usb/host/xhci-mtk.c| 38 +- drivers/usb/host/xhci-mtk.h|1 + drivers/usb/mtu3/Kconfig | 54 ++ drivers/usb/mtu3/Makefile | 18 + drivers/usb/mtu3/mtu3.h| 417 + drivers/usb/mtu3/mtu3_core.c | 859 +++ drivers/usb/mtu3/mtu3_dr.c | 379 + drivers/usb/mtu3/mtu3_dr.h | 108 +++ drivers/usb/mtu3/mtu3_gadget.c | 730 drivers/usb/mtu3/mtu3_gadget_ep0.c | 881 drivers/usb/mtu3/mtu3_host.c | 294 +++ drivers/usb/mtu3/mtu3_hw_regs.h| 473 +++ drivers/usb/mtu3/mtu3_plat.c | 484 +++ drivers/usb/mtu3/mtu3_qmu.c| 573 + drivers/usb/mtu3/mtu3_qmu.h| 43 + 21 files changed, 5561 insertions(+), 27 deletions(-) create mode 100644 Documentation/devicetree/bindings/usb/mt8173-mtu3.txt 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.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 -- 1.7.9.5
[PATCH v7, 0/8] Add MediaTek USB3 DRD Driver
These patches introduce the MediaTek USB3 dual-role controller driver. The driver can be configured as Dual-Role Device (DRD), Peripheral Only and Host Only (xHCI) modes. It works well with Mass Storage, RNDIS and g_zero on FS/HS and SS. And it is tested on MT8173 platform which only contains USB2.0 device IP, and on MT6290 platform which contains USB3.0 device IP. Change in v7: 1. split dual-role driver into four patchs 2. remove QMU done tasklet 3. add a bool in xhci_hcd_mtk to signal absence of IPPC Change in v6: 1. handle endianness of GPD and SETUP data 2. remove dummy error log and return suitable error number 3. cancel delay work when deregiseter driver Change in v5: 1. modify some comments 2. rename some unsuitable variables 3. add reg-names property for host node 4. add USB_MTU3_DEBUG to control debug messages Change in v4: 1. fix build errors on non-mediatek platforms 2. provide manual dual-role switch via debugfs instead of sysfs Change in v3: 1. fix some typo error 2. rename mtu3.txt to mt8173-mtu3.txt Change in v2: 1. modify binding docs according to suggestions 2. modify some comments and remove some dummy blank lines 3. fix memory leakage Chunfeng Yun (8): dt-bindings: mt8173-xhci: support host side of dual-role mode dt-bindings: mt8173-mtu3: add devicetree bindings usb: xhci-mtk: make IPPC register optional usb: Add MediaTek USB3 DRD driver usb: mtu3: Super-Speed Peripheral mode support usb: mtu3: host only mode support usb: mtu3: dual-role mode support arm64: dts: mediatek: add USB3 DRD driver .../devicetree/bindings/usb/mt8173-mtu3.txt| 87 ++ .../devicetree/bindings/usb/mt8173-xhci.txt| 54 +- arch/arm64/boot/dts/mediatek/mt8173-evb.dts| 63 +- arch/arm64/boot/dts/mediatek/mt8173.dtsi | 29 +- drivers/usb/Kconfig|2 + drivers/usb/Makefile |1 + drivers/usb/host/xhci-mtk.c| 38 +- drivers/usb/host/xhci-mtk.h|1 + drivers/usb/mtu3/Kconfig | 54 ++ drivers/usb/mtu3/Makefile | 18 + drivers/usb/mtu3/mtu3.h| 417 + drivers/usb/mtu3/mtu3_core.c | 859 +++ drivers/usb/mtu3/mtu3_dr.c | 379 + drivers/usb/mtu3/mtu3_dr.h | 108 +++ drivers/usb/mtu3/mtu3_gadget.c | 730 drivers/usb/mtu3/mtu3_gadget_ep0.c | 881 drivers/usb/mtu3/mtu3_host.c | 294 +++ drivers/usb/mtu3/mtu3_hw_regs.h| 473 +++ drivers/usb/mtu3/mtu3_plat.c | 484 +++ drivers/usb/mtu3/mtu3_qmu.c| 573 + drivers/usb/mtu3/mtu3_qmu.h| 43 + 21 files changed, 5561 insertions(+), 27 deletions(-) create mode 100644 Documentation/devicetree/bindings/usb/mt8173-mtu3.txt 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.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 -- 1.7.9.5
Re: [RESEND PATCH v6, 4/5] usb: Add MediaTek USB3 DRD Driver
On 10/11/2016 05:14 AM, Chunfeng Yun wrote: On Mon, 2016-10-10 at 13:00 +0200, Matthias Brugger wrote: On 09/21/2016 07:54 AM, Chunfeng Yun wrote: This patch adds support for the MediaTek USB3 controller integrated into MT8173. It can be configured as Dual-Role Device (DRD), Peripheral Only and Host Only (xHCI) modes. Signed-off-by: Chunfeng Yun--- drivers/usb/Kconfig|2 + drivers/usb/Makefile |1 + drivers/usb/mtu3/Kconfig | 54 +++ drivers/usb/mtu3/Makefile | 19 + drivers/usb/mtu3/mtu3.h| 422 + drivers/usb/mtu3/mtu3_core.c | 871 +++ drivers/usb/mtu3/mtu3_dr.c | 379 drivers/usb/mtu3/mtu3_dr.h | 108 + drivers/usb/mtu3/mtu3_gadget.c | 731 + drivers/usb/mtu3/mtu3_gadget_ep0.c | 883 drivers/usb/mtu3/mtu3_host.c | 294 drivers/usb/mtu3/mtu3_hw_regs.h| 473 +++ drivers/usb/mtu3/mtu3_plat.c | 490 drivers/usb/mtu3/mtu3_qmu.c| 599 drivers/usb/mtu3/mtu3_qmu.h| 43 ++ 15 files changed, 5369 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.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 As Oliver already said, this patch is quiet big which makes it difficult to review. I propose to provide a first implementation with minimal functionality and incremental patches on top of this when the first got merged. You could split the patch in three series/parts: 1. Host only 2. Peripheral only 3. Dual mode What do you think? Ok, I'll split the patch into some small ones as many as possible. There is no direct policy how to do that and it depends a bit on every maintainer what he prefers. As a rule of thumb each commit should compile on it's own without errors. This makes bisecting the kernel much easier. Regards, Matthias Thanks a lot Regards, Matthias
Re: [RESEND PATCH v6, 4/5] usb: Add MediaTek USB3 DRD Driver
On 10/11/2016 05:14 AM, Chunfeng Yun wrote: On Mon, 2016-10-10 at 13:00 +0200, Matthias Brugger wrote: On 09/21/2016 07:54 AM, Chunfeng Yun wrote: This patch adds support for the MediaTek USB3 controller integrated into MT8173. It can be configured as Dual-Role Device (DRD), Peripheral Only and Host Only (xHCI) modes. Signed-off-by: Chunfeng Yun --- drivers/usb/Kconfig|2 + drivers/usb/Makefile |1 + drivers/usb/mtu3/Kconfig | 54 +++ drivers/usb/mtu3/Makefile | 19 + drivers/usb/mtu3/mtu3.h| 422 + drivers/usb/mtu3/mtu3_core.c | 871 +++ drivers/usb/mtu3/mtu3_dr.c | 379 drivers/usb/mtu3/mtu3_dr.h | 108 + drivers/usb/mtu3/mtu3_gadget.c | 731 + drivers/usb/mtu3/mtu3_gadget_ep0.c | 883 drivers/usb/mtu3/mtu3_host.c | 294 drivers/usb/mtu3/mtu3_hw_regs.h| 473 +++ drivers/usb/mtu3/mtu3_plat.c | 490 drivers/usb/mtu3/mtu3_qmu.c| 599 drivers/usb/mtu3/mtu3_qmu.h| 43 ++ 15 files changed, 5369 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.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 As Oliver already said, this patch is quiet big which makes it difficult to review. I propose to provide a first implementation with minimal functionality and incremental patches on top of this when the first got merged. You could split the patch in three series/parts: 1. Host only 2. Peripheral only 3. Dual mode What do you think? Ok, I'll split the patch into some small ones as many as possible. There is no direct policy how to do that and it depends a bit on every maintainer what he prefers. As a rule of thumb each commit should compile on it's own without errors. This makes bisecting the kernel much easier. Regards, Matthias Thanks a lot Regards, Matthias
Re: [RESEND PATCH v6, 4/5] usb: Add MediaTek USB3 DRD Driver
On Mon, 2016-10-10 at 13:00 +0200, Matthias Brugger wrote: > > On 09/21/2016 07:54 AM, Chunfeng Yun wrote: > > This patch adds support for the MediaTek USB3 controller > > integrated into MT8173. It can be configured as Dual-Role > > Device (DRD), Peripheral Only and Host Only (xHCI) modes. > > > > Signed-off-by: Chunfeng Yun> > --- > > drivers/usb/Kconfig|2 + > > drivers/usb/Makefile |1 + > > drivers/usb/mtu3/Kconfig | 54 +++ > > drivers/usb/mtu3/Makefile | 19 + > > drivers/usb/mtu3/mtu3.h| 422 + > > drivers/usb/mtu3/mtu3_core.c | 871 > > +++ > > drivers/usb/mtu3/mtu3_dr.c | 379 > > drivers/usb/mtu3/mtu3_dr.h | 108 + > > drivers/usb/mtu3/mtu3_gadget.c | 731 + > > drivers/usb/mtu3/mtu3_gadget_ep0.c | 883 > > > > drivers/usb/mtu3/mtu3_host.c | 294 > > drivers/usb/mtu3/mtu3_hw_regs.h| 473 +++ > > drivers/usb/mtu3/mtu3_plat.c | 490 > > drivers/usb/mtu3/mtu3_qmu.c| 599 > > drivers/usb/mtu3/mtu3_qmu.h| 43 ++ > > 15 files changed, 5369 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.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 > > > > As Oliver already said, this patch is quiet big which makes it difficult > to review. > I propose to provide a first implementation with minimal functionality > and incremental patches on top of this when the first got merged. > > You could split the patch in three series/parts: > 1. Host only > 2. Peripheral only > 3. Dual mode > > What do you think? Ok, I'll split the patch into some small ones as many as possible. Thanks a lot > > Regards, > Matthias >
Re: [RESEND PATCH v6, 4/5] usb: Add MediaTek USB3 DRD Driver
On Mon, 2016-10-10 at 13:00 +0200, Matthias Brugger wrote: > > On 09/21/2016 07:54 AM, Chunfeng Yun wrote: > > This patch adds support for the MediaTek USB3 controller > > integrated into MT8173. It can be configured as Dual-Role > > Device (DRD), Peripheral Only and Host Only (xHCI) modes. > > > > Signed-off-by: Chunfeng Yun > > --- > > drivers/usb/Kconfig|2 + > > drivers/usb/Makefile |1 + > > drivers/usb/mtu3/Kconfig | 54 +++ > > drivers/usb/mtu3/Makefile | 19 + > > drivers/usb/mtu3/mtu3.h| 422 + > > drivers/usb/mtu3/mtu3_core.c | 871 > > +++ > > drivers/usb/mtu3/mtu3_dr.c | 379 > > drivers/usb/mtu3/mtu3_dr.h | 108 + > > drivers/usb/mtu3/mtu3_gadget.c | 731 + > > drivers/usb/mtu3/mtu3_gadget_ep0.c | 883 > > > > drivers/usb/mtu3/mtu3_host.c | 294 > > drivers/usb/mtu3/mtu3_hw_regs.h| 473 +++ > > drivers/usb/mtu3/mtu3_plat.c | 490 > > drivers/usb/mtu3/mtu3_qmu.c| 599 > > drivers/usb/mtu3/mtu3_qmu.h| 43 ++ > > 15 files changed, 5369 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.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 > > > > As Oliver already said, this patch is quiet big which makes it difficult > to review. > I propose to provide a first implementation with minimal functionality > and incremental patches on top of this when the first got merged. > > You could split the patch in three series/parts: > 1. Host only > 2. Peripheral only > 3. Dual mode > > What do you think? Ok, I'll split the patch into some small ones as many as possible. Thanks a lot > > Regards, > Matthias >
[RESEND PATCH v6, 0/5] Add MediaTek USB3 DRD Driver
>From 99e428a1808c8ca91ff473d487b52ca5d355d875 Mon Sep 17 00:00:00 2001 From: Chunfeng Yun <chunfeng@mediatek.com> Date: Mon, 5 Sep 2016 10:27:07 +0800 Subject: [PATCH v6, 0/5] Add MediaTek USB3 DRD Driver These patches introduce the MediaTek USB3 dual-role controller driver. The driver can be configured as Dual-Role Device (DRD), Peripheral Only and Host Only (xHCI) modes. It works well with Mass Storage, RNDIS and g_zero on FS/HS and SS. And it is tested on MT8173 platform which only contains USB2.0 device IP, and on MT6290 platform which contains USB3.0 device IP. Change in v6: 1. handle endianness of GPD and SETUP data 2. remove dummy error log and return suitable error number 3. cancel delay work when deregiseter driver Change in v5: 1. modify some comments 2. rename some unsuitable variables 3. add reg-names property for host node 4. add USB_MTU3_DEBUG to control debug messages Change in v4: 1. fix build errors on non-mediatek platforms 2. provide manual dual-role switch via debugfs instead of sysfs Change in v3: 1. fix some typo error 2. rename mtu3.txt to mt8173-mtu3.txt Change in v2: 1. modify binding docs according to suggestions 2. modify some comments and remove some dummy blank lines 3. fix memory leakage Chunfeng Yun (5): dt-bindings: mt8173-xhci: support host side of dual-role mode dt-bindings: mt8173-mtu3: add devicetree bindings usb: xhci-mtk: make IPPC register optional usb: Add MediaTek USB3 DRD Driver arm64: dts: mediatek: add USB3 DRD driver .../devicetree/bindings/usb/mt8173-mtu3.txt| 87 ++ .../devicetree/bindings/usb/mt8173-xhci.txt| 54 +- arch/arm64/boot/dts/mediatek/mt8173-evb.dts| 46 +- arch/arm64/boot/dts/mediatek/mt8173.dtsi | 29 +- drivers/usb/Kconfig|2 + drivers/usb/Makefile |1 + drivers/usb/host/xhci-mtk.c| 36 +- drivers/usb/mtu3/Kconfig | 54 ++ drivers/usb/mtu3/Makefile | 19 + drivers/usb/mtu3/mtu3.h| 422 ++ drivers/usb/mtu3/mtu3_core.c | 871 +++ drivers/usb/mtu3/mtu3_dr.c | 379 + drivers/usb/mtu3/mtu3_dr.h | 108 +++ drivers/usb/mtu3/mtu3_gadget.c | 731 drivers/usb/mtu3/mtu3_gadget_ep0.c | 883 drivers/usb/mtu3/mtu3_host.c | 294 +++ drivers/usb/mtu3/mtu3_hw_regs.h| 473 +++ drivers/usb/mtu3/mtu3_plat.c | 490 +++ drivers/usb/mtu3/mtu3_qmu.c| 599 + drivers/usb/mtu3/mtu3_qmu.h| 43 + 20 files changed, 5603 insertions(+), 18 deletions(-) create mode 100644 Documentation/devicetree/bindings/usb/mt8173-mtu3.txt 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.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 -- 1.7.9.5
[RESEND PATCH v6, 0/5] Add MediaTek USB3 DRD Driver
>From 99e428a1808c8ca91ff473d487b52ca5d355d875 Mon Sep 17 00:00:00 2001 From: Chunfeng Yun Date: Mon, 5 Sep 2016 10:27:07 +0800 Subject: [PATCH v6, 0/5] Add MediaTek USB3 DRD Driver These patches introduce the MediaTek USB3 dual-role controller driver. The driver can be configured as Dual-Role Device (DRD), Peripheral Only and Host Only (xHCI) modes. It works well with Mass Storage, RNDIS and g_zero on FS/HS and SS. And it is tested on MT8173 platform which only contains USB2.0 device IP, and on MT6290 platform which contains USB3.0 device IP. Change in v6: 1. handle endianness of GPD and SETUP data 2. remove dummy error log and return suitable error number 3. cancel delay work when deregiseter driver Change in v5: 1. modify some comments 2. rename some unsuitable variables 3. add reg-names property for host node 4. add USB_MTU3_DEBUG to control debug messages Change in v4: 1. fix build errors on non-mediatek platforms 2. provide manual dual-role switch via debugfs instead of sysfs Change in v3: 1. fix some typo error 2. rename mtu3.txt to mt8173-mtu3.txt Change in v2: 1. modify binding docs according to suggestions 2. modify some comments and remove some dummy blank lines 3. fix memory leakage Chunfeng Yun (5): dt-bindings: mt8173-xhci: support host side of dual-role mode dt-bindings: mt8173-mtu3: add devicetree bindings usb: xhci-mtk: make IPPC register optional usb: Add MediaTek USB3 DRD Driver arm64: dts: mediatek: add USB3 DRD driver .../devicetree/bindings/usb/mt8173-mtu3.txt| 87 ++ .../devicetree/bindings/usb/mt8173-xhci.txt| 54 +- arch/arm64/boot/dts/mediatek/mt8173-evb.dts| 46 +- arch/arm64/boot/dts/mediatek/mt8173.dtsi | 29 +- drivers/usb/Kconfig|2 + drivers/usb/Makefile |1 + drivers/usb/host/xhci-mtk.c| 36 +- drivers/usb/mtu3/Kconfig | 54 ++ drivers/usb/mtu3/Makefile | 19 + drivers/usb/mtu3/mtu3.h| 422 ++ drivers/usb/mtu3/mtu3_core.c | 871 +++ drivers/usb/mtu3/mtu3_dr.c | 379 + drivers/usb/mtu3/mtu3_dr.h | 108 +++ drivers/usb/mtu3/mtu3_gadget.c | 731 drivers/usb/mtu3/mtu3_gadget_ep0.c | 883 drivers/usb/mtu3/mtu3_host.c | 294 +++ drivers/usb/mtu3/mtu3_hw_regs.h| 473 +++ drivers/usb/mtu3/mtu3_plat.c | 490 +++ drivers/usb/mtu3/mtu3_qmu.c| 599 + drivers/usb/mtu3/mtu3_qmu.h| 43 + 20 files changed, 5603 insertions(+), 18 deletions(-) create mode 100644 Documentation/devicetree/bindings/usb/mt8173-mtu3.txt 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.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 -- 1.7.9.5
[RESEND PATCH v6, 4/5] usb: Add MediaTek USB3 DRD Driver
This patch adds support for the MediaTek USB3 controller integrated into MT8173. It can be configured as Dual-Role Device (DRD), Peripheral Only and Host Only (xHCI) modes. Signed-off-by: Chunfeng Yun--- drivers/usb/Kconfig|2 + drivers/usb/Makefile |1 + drivers/usb/mtu3/Kconfig | 54 +++ drivers/usb/mtu3/Makefile | 19 + drivers/usb/mtu3/mtu3.h| 422 + drivers/usb/mtu3/mtu3_core.c | 871 +++ drivers/usb/mtu3/mtu3_dr.c | 379 drivers/usb/mtu3/mtu3_dr.h | 108 + drivers/usb/mtu3/mtu3_gadget.c | 731 + drivers/usb/mtu3/mtu3_gadget_ep0.c | 883 drivers/usb/mtu3/mtu3_host.c | 294 drivers/usb/mtu3/mtu3_hw_regs.h| 473 +++ drivers/usb/mtu3/mtu3_plat.c | 490 drivers/usb/mtu3/mtu3_qmu.c| 599 drivers/usb/mtu3/mtu3_qmu.h| 43 ++ 15 files changed, 5369 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.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/drivers/usb/Kconfig b/drivers/usb/Kconfig index 8689dcb..9ca0bf0 100644 --- a/drivers/usb/Kconfig +++ b/drivers/usb/Kconfig @@ -95,6 +95,8 @@ source "drivers/usb/usbip/Kconfig" endif +source "drivers/usb/mtu3/Kconfig" + source "drivers/usb/musb/Kconfig" source "drivers/usb/dwc3/Kconfig" diff --git a/drivers/usb/Makefile b/drivers/usb/Makefile index dca7856..7791af6 100644 --- a/drivers/usb/Makefile +++ b/drivers/usb/Makefile @@ -12,6 +12,7 @@ obj-$(CONFIG_USB_DWC2)+= dwc2/ obj-$(CONFIG_USB_ISP1760) += isp1760/ obj-$(CONFIG_USB_MON) += mon/ +obj-$(CONFIG_USB_MTU3) += mtu3/ obj-$(CONFIG_PCI) += host/ obj-$(CONFIG_USB_EHCI_HCD) += host/ diff --git a/drivers/usb/mtu3/Kconfig b/drivers/usb/mtu3/Kconfig new file mode 100644 index 000..25cd619 --- /dev/null +++ b/drivers/usb/mtu3/Kconfig @@ -0,0 +1,54 @@ +# For MTK USB3.0 IP + +config USB_MTU3 + tristate "MediaTek USB3 Dual Role controller" + depends on EXTCON && (USB || USB_GADGET) && HAS_DMA + depends on ARCH_MEDIATEK || COMPILE_TEST + select USB_XHCI_MTK if USB_SUPPORT && USB_XHCI_HCD + help + Say Y or M 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, or both. + + If you don't know what this is, please say N. + + Choose M here to compile this driver as a module, and it + will be called mtu3.ko. + + +if USB_MTU3 +choice + bool "MTU3 Mode Selection" + default USB_MTU3_DUAL_ROLE if (USB && USB_GADGET) + default USB_MTU3_HOST if (USB && !USB_GADGET) + default USB_MTU3_GADGET if (!USB && USB_GADGET) + +config USB_MTU3_HOST + bool "Host only mode" + depends on USB=y || USB=USB_MTU3 + 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 + help + Select this when you want to use MTU3 in gadget mode only, + thereby the host feature will be regressed. + +config USB_MTU3_DUAL_ROLE + bool "Dual Role mode" + depends on ((USB=y || USB=USB_MTU3) && (USB_GADGET=y || USB_GADGET=USB_MTU3)) + help + This is the default mode of working of MTU3 controller where + both host and gadget features are enabled. + +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 000..3e17ff7 --- /dev/null +++ b/drivers/usb/mtu3/Makefile @@ -0,0 +1,19 @@ + +ccflags-$(CONFIG_USB_MTU3_DEBUG) += -DDEBUG + +obj-$(CONFIG_USB_MTU3) += mtu3.o + +mtu3-y := mtu3_plat.o + +ifneq ($(filter y,$(CONFIG_USB_MTU3_HOST) $(CONFIG_USB_MTU3_DUAL_ROLE)),) + mtu3-y += mtu3_host.o +endif + +ifneq ($(filter y,$(CONFIG_USB_MTU3_GADGET) $(CONFIG_USB_MTU3_DUAL_ROLE)),) + mtu3-y += mtu3_core.o
[RESEND PATCH v6, 4/5] usb: Add MediaTek USB3 DRD Driver
This patch adds support for the MediaTek USB3 controller integrated into MT8173. It can be configured as Dual-Role Device (DRD), Peripheral Only and Host Only (xHCI) modes. Signed-off-by: Chunfeng Yun --- drivers/usb/Kconfig|2 + drivers/usb/Makefile |1 + drivers/usb/mtu3/Kconfig | 54 +++ drivers/usb/mtu3/Makefile | 19 + drivers/usb/mtu3/mtu3.h| 422 + drivers/usb/mtu3/mtu3_core.c | 871 +++ drivers/usb/mtu3/mtu3_dr.c | 379 drivers/usb/mtu3/mtu3_dr.h | 108 + drivers/usb/mtu3/mtu3_gadget.c | 731 + drivers/usb/mtu3/mtu3_gadget_ep0.c | 883 drivers/usb/mtu3/mtu3_host.c | 294 drivers/usb/mtu3/mtu3_hw_regs.h| 473 +++ drivers/usb/mtu3/mtu3_plat.c | 490 drivers/usb/mtu3/mtu3_qmu.c| 599 drivers/usb/mtu3/mtu3_qmu.h| 43 ++ 15 files changed, 5369 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.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/drivers/usb/Kconfig b/drivers/usb/Kconfig index 8689dcb..9ca0bf0 100644 --- a/drivers/usb/Kconfig +++ b/drivers/usb/Kconfig @@ -95,6 +95,8 @@ source "drivers/usb/usbip/Kconfig" endif +source "drivers/usb/mtu3/Kconfig" + source "drivers/usb/musb/Kconfig" source "drivers/usb/dwc3/Kconfig" diff --git a/drivers/usb/Makefile b/drivers/usb/Makefile index dca7856..7791af6 100644 --- a/drivers/usb/Makefile +++ b/drivers/usb/Makefile @@ -12,6 +12,7 @@ obj-$(CONFIG_USB_DWC2)+= dwc2/ obj-$(CONFIG_USB_ISP1760) += isp1760/ obj-$(CONFIG_USB_MON) += mon/ +obj-$(CONFIG_USB_MTU3) += mtu3/ obj-$(CONFIG_PCI) += host/ obj-$(CONFIG_USB_EHCI_HCD) += host/ diff --git a/drivers/usb/mtu3/Kconfig b/drivers/usb/mtu3/Kconfig new file mode 100644 index 000..25cd619 --- /dev/null +++ b/drivers/usb/mtu3/Kconfig @@ -0,0 +1,54 @@ +# For MTK USB3.0 IP + +config USB_MTU3 + tristate "MediaTek USB3 Dual Role controller" + depends on EXTCON && (USB || USB_GADGET) && HAS_DMA + depends on ARCH_MEDIATEK || COMPILE_TEST + select USB_XHCI_MTK if USB_SUPPORT && USB_XHCI_HCD + help + Say Y or M 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, or both. + + If you don't know what this is, please say N. + + Choose M here to compile this driver as a module, and it + will be called mtu3.ko. + + +if USB_MTU3 +choice + bool "MTU3 Mode Selection" + default USB_MTU3_DUAL_ROLE if (USB && USB_GADGET) + default USB_MTU3_HOST if (USB && !USB_GADGET) + default USB_MTU3_GADGET if (!USB && USB_GADGET) + +config USB_MTU3_HOST + bool "Host only mode" + depends on USB=y || USB=USB_MTU3 + 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 + help + Select this when you want to use MTU3 in gadget mode only, + thereby the host feature will be regressed. + +config USB_MTU3_DUAL_ROLE + bool "Dual Role mode" + depends on ((USB=y || USB=USB_MTU3) && (USB_GADGET=y || USB_GADGET=USB_MTU3)) + help + This is the default mode of working of MTU3 controller where + both host and gadget features are enabled. + +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 000..3e17ff7 --- /dev/null +++ b/drivers/usb/mtu3/Makefile @@ -0,0 +1,19 @@ + +ccflags-$(CONFIG_USB_MTU3_DEBUG) += -DDEBUG + +obj-$(CONFIG_USB_MTU3) += mtu3.o + +mtu3-y := mtu3_plat.o + +ifneq ($(filter y,$(CONFIG_USB_MTU3_HOST) $(CONFIG_USB_MTU3_DUAL_ROLE)),) + mtu3-y += mtu3_host.o +endif + +ifneq ($(filter y,$(CONFIG_USB_MTU3_GADGET) $(CONFIG_USB_MTU3_DUAL_ROLE)),) + mtu3-y += mtu3_core.o mtu3_gadget_ep0.o mtu3_gadget.o
[PATCH, v6 0/5] Add MediaTek USB3 DRD Driver
>From 99e428a1808c8ca91ff473d487b52ca5d355d875 Mon Sep 17 00:00:00 2001 From: Chunfeng Yun <chunfeng@mediatek.com> Date: Mon, 5 Sep 2016 10:27:07 +0800 Subject: [PATCH, v6 0/5] Add MediaTek USB3 DRD Driver These patches introduce the MediaTek USB3 dual-role controller driver. The driver can be configured as Dual-Role Device (DRD), Peripheral Only and Host Only (xHCI) modes. It works well with Mass Storage, RNDIS and g_zero on FS/HS and SS. And it is tested on MT8173 platform which only contains USB2.0 device IP, and on MT6290 platform which contains USB3.0 device IP. Change in v6: 1. handle endianness of GPD and SETUP data 2. remove dummy error log and return suitable error number 3. cancel delay work when deregiseter driver Change in v5: 1. modify some comments 2. rename some unsuitable variables 3. add reg-names property for host node 4. add USB_MTU3_DEBUG to control debug messages Change in v4: 1. fix build errors on non-mediatek platforms 2. provide manual dual-role switch via debugfs instead of sysfs Change in v3: 1. fix some typo error 2. rename mtu3.txt to mt8173-mtu3.txt Change in v2: 1. modify binding docs according to suggestions 2. modify some comments and remove some dummy blank lines 3. fix memory leakage Chunfeng Yun (5): dt-bindings: mt8173-xhci: support host side of dual-role mode dt-bindings: mt8173-mtu3: add devicetree bindings usb: xhci-mtk: make IPPC register optional usb: Add MediaTek USB3 DRD Driver arm64: dts: mediatek: add USB3 DRD driver .../devicetree/bindings/usb/mt8173-mtu3.txt| 87 ++ .../devicetree/bindings/usb/mt8173-xhci.txt| 54 +- arch/arm64/boot/dts/mediatek/mt8173-evb.dts| 46 +- arch/arm64/boot/dts/mediatek/mt8173.dtsi | 29 +- drivers/usb/Kconfig|2 + drivers/usb/Makefile |1 + drivers/usb/host/xhci-mtk.c| 36 +- drivers/usb/mtu3/Kconfig | 54 ++ drivers/usb/mtu3/Makefile | 19 + drivers/usb/mtu3/mtu3.h| 422 ++ drivers/usb/mtu3/mtu3_core.c | 871 +++ drivers/usb/mtu3/mtu3_dr.c | 379 + drivers/usb/mtu3/mtu3_dr.h | 108 +++ drivers/usb/mtu3/mtu3_gadget.c | 731 drivers/usb/mtu3/mtu3_gadget_ep0.c | 883 drivers/usb/mtu3/mtu3_host.c | 294 +++ drivers/usb/mtu3/mtu3_hw_regs.h| 473 +++ drivers/usb/mtu3/mtu3_plat.c | 490 +++ drivers/usb/mtu3/mtu3_qmu.c| 599 + drivers/usb/mtu3/mtu3_qmu.h| 43 + 20 files changed, 5603 insertions(+), 18 deletions(-) create mode 100644 Documentation/devicetree/bindings/usb/mt8173-mtu3.txt 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.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 -- 1.7.9.5
[PATCH, v6 0/5] Add MediaTek USB3 DRD Driver
>From 99e428a1808c8ca91ff473d487b52ca5d355d875 Mon Sep 17 00:00:00 2001 From: Chunfeng Yun Date: Mon, 5 Sep 2016 10:27:07 +0800 Subject: [PATCH, v6 0/5] Add MediaTek USB3 DRD Driver These patches introduce the MediaTek USB3 dual-role controller driver. The driver can be configured as Dual-Role Device (DRD), Peripheral Only and Host Only (xHCI) modes. It works well with Mass Storage, RNDIS and g_zero on FS/HS and SS. And it is tested on MT8173 platform which only contains USB2.0 device IP, and on MT6290 platform which contains USB3.0 device IP. Change in v6: 1. handle endianness of GPD and SETUP data 2. remove dummy error log and return suitable error number 3. cancel delay work when deregiseter driver Change in v5: 1. modify some comments 2. rename some unsuitable variables 3. add reg-names property for host node 4. add USB_MTU3_DEBUG to control debug messages Change in v4: 1. fix build errors on non-mediatek platforms 2. provide manual dual-role switch via debugfs instead of sysfs Change in v3: 1. fix some typo error 2. rename mtu3.txt to mt8173-mtu3.txt Change in v2: 1. modify binding docs according to suggestions 2. modify some comments and remove some dummy blank lines 3. fix memory leakage Chunfeng Yun (5): dt-bindings: mt8173-xhci: support host side of dual-role mode dt-bindings: mt8173-mtu3: add devicetree bindings usb: xhci-mtk: make IPPC register optional usb: Add MediaTek USB3 DRD Driver arm64: dts: mediatek: add USB3 DRD driver .../devicetree/bindings/usb/mt8173-mtu3.txt| 87 ++ .../devicetree/bindings/usb/mt8173-xhci.txt| 54 +- arch/arm64/boot/dts/mediatek/mt8173-evb.dts| 46 +- arch/arm64/boot/dts/mediatek/mt8173.dtsi | 29 +- drivers/usb/Kconfig|2 + drivers/usb/Makefile |1 + drivers/usb/host/xhci-mtk.c| 36 +- drivers/usb/mtu3/Kconfig | 54 ++ drivers/usb/mtu3/Makefile | 19 + drivers/usb/mtu3/mtu3.h| 422 ++ drivers/usb/mtu3/mtu3_core.c | 871 +++ drivers/usb/mtu3/mtu3_dr.c | 379 + drivers/usb/mtu3/mtu3_dr.h | 108 +++ drivers/usb/mtu3/mtu3_gadget.c | 731 drivers/usb/mtu3/mtu3_gadget_ep0.c | 883 drivers/usb/mtu3/mtu3_host.c | 294 +++ drivers/usb/mtu3/mtu3_hw_regs.h| 473 +++ drivers/usb/mtu3/mtu3_plat.c | 490 +++ drivers/usb/mtu3/mtu3_qmu.c| 599 + drivers/usb/mtu3/mtu3_qmu.h| 43 + 20 files changed, 5603 insertions(+), 18 deletions(-) create mode 100644 Documentation/devicetree/bindings/usb/mt8173-mtu3.txt 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.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 -- 1.7.9.5
[PATCH v6, 4/5] usb: Add MediaTek USB3 DRD Driver
This patch adds support for the MediaTek USB3 controller integrated into MT8173. It can be configured as Dual-Role Device (DRD), Peripheral Only and Host Only (xHCI) modes. Signed-off-by: Chunfeng Yun--- drivers/usb/Kconfig|2 + drivers/usb/Makefile |1 + drivers/usb/mtu3/Kconfig | 54 +++ drivers/usb/mtu3/Makefile | 19 + drivers/usb/mtu3/mtu3.h| 422 + drivers/usb/mtu3/mtu3_core.c | 871 +++ drivers/usb/mtu3/mtu3_dr.c | 379 drivers/usb/mtu3/mtu3_dr.h | 108 + drivers/usb/mtu3/mtu3_gadget.c | 731 + drivers/usb/mtu3/mtu3_gadget_ep0.c | 883 drivers/usb/mtu3/mtu3_host.c | 294 drivers/usb/mtu3/mtu3_hw_regs.h| 473 +++ drivers/usb/mtu3/mtu3_plat.c | 490 drivers/usb/mtu3/mtu3_qmu.c| 599 drivers/usb/mtu3/mtu3_qmu.h| 43 ++ 15 files changed, 5369 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.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/drivers/usb/Kconfig b/drivers/usb/Kconfig index 8689dcb..9ca0bf0 100644 --- a/drivers/usb/Kconfig +++ b/drivers/usb/Kconfig @@ -95,6 +95,8 @@ source "drivers/usb/usbip/Kconfig" endif +source "drivers/usb/mtu3/Kconfig" + source "drivers/usb/musb/Kconfig" source "drivers/usb/dwc3/Kconfig" diff --git a/drivers/usb/Makefile b/drivers/usb/Makefile index dca7856..7791af6 100644 --- a/drivers/usb/Makefile +++ b/drivers/usb/Makefile @@ -12,6 +12,7 @@ obj-$(CONFIG_USB_DWC2)+= dwc2/ obj-$(CONFIG_USB_ISP1760) += isp1760/ obj-$(CONFIG_USB_MON) += mon/ +obj-$(CONFIG_USB_MTU3) += mtu3/ obj-$(CONFIG_PCI) += host/ obj-$(CONFIG_USB_EHCI_HCD) += host/ diff --git a/drivers/usb/mtu3/Kconfig b/drivers/usb/mtu3/Kconfig new file mode 100644 index 000..25cd619 --- /dev/null +++ b/drivers/usb/mtu3/Kconfig @@ -0,0 +1,54 @@ +# For MTK USB3.0 IP + +config USB_MTU3 + tristate "MediaTek USB3 Dual Role controller" + depends on EXTCON && (USB || USB_GADGET) && HAS_DMA + depends on ARCH_MEDIATEK || COMPILE_TEST + select USB_XHCI_MTK if USB_SUPPORT && USB_XHCI_HCD + help + Say Y or M 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, or both. + + If you don't know what this is, please say N. + + Choose M here to compile this driver as a module, and it + will be called mtu3.ko. + + +if USB_MTU3 +choice + bool "MTU3 Mode Selection" + default USB_MTU3_DUAL_ROLE if (USB && USB_GADGET) + default USB_MTU3_HOST if (USB && !USB_GADGET) + default USB_MTU3_GADGET if (!USB && USB_GADGET) + +config USB_MTU3_HOST + bool "Host only mode" + depends on USB=y || USB=USB_MTU3 + 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 + help + Select this when you want to use MTU3 in gadget mode only, + thereby the host feature will be regressed. + +config USB_MTU3_DUAL_ROLE + bool "Dual Role mode" + depends on ((USB=y || USB=USB_MTU3) && (USB_GADGET=y || USB_GADGET=USB_MTU3)) + help + This is the default mode of working of MTU3 controller where + both host and gadget features are enabled. + +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 000..3e17ff7 --- /dev/null +++ b/drivers/usb/mtu3/Makefile @@ -0,0 +1,19 @@ + +ccflags-$(CONFIG_USB_MTU3_DEBUG) += -DDEBUG + +obj-$(CONFIG_USB_MTU3) += mtu3.o + +mtu3-y := mtu3_plat.o + +ifneq ($(filter y,$(CONFIG_USB_MTU3_HOST) $(CONFIG_USB_MTU3_DUAL_ROLE)),) + mtu3-y += mtu3_host.o +endif + +ifneq ($(filter y,$(CONFIG_USB_MTU3_GADGET) $(CONFIG_USB_MTU3_DUAL_ROLE)),) + mtu3-y += mtu3_core.o
[PATCH v6, 4/5] usb: Add MediaTek USB3 DRD Driver
This patch adds support for the MediaTek USB3 controller integrated into MT8173. It can be configured as Dual-Role Device (DRD), Peripheral Only and Host Only (xHCI) modes. Signed-off-by: Chunfeng Yun --- drivers/usb/Kconfig|2 + drivers/usb/Makefile |1 + drivers/usb/mtu3/Kconfig | 54 +++ drivers/usb/mtu3/Makefile | 19 + drivers/usb/mtu3/mtu3.h| 422 + drivers/usb/mtu3/mtu3_core.c | 871 +++ drivers/usb/mtu3/mtu3_dr.c | 379 drivers/usb/mtu3/mtu3_dr.h | 108 + drivers/usb/mtu3/mtu3_gadget.c | 731 + drivers/usb/mtu3/mtu3_gadget_ep0.c | 883 drivers/usb/mtu3/mtu3_host.c | 294 drivers/usb/mtu3/mtu3_hw_regs.h| 473 +++ drivers/usb/mtu3/mtu3_plat.c | 490 drivers/usb/mtu3/mtu3_qmu.c| 599 drivers/usb/mtu3/mtu3_qmu.h| 43 ++ 15 files changed, 5369 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.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/drivers/usb/Kconfig b/drivers/usb/Kconfig index 8689dcb..9ca0bf0 100644 --- a/drivers/usb/Kconfig +++ b/drivers/usb/Kconfig @@ -95,6 +95,8 @@ source "drivers/usb/usbip/Kconfig" endif +source "drivers/usb/mtu3/Kconfig" + source "drivers/usb/musb/Kconfig" source "drivers/usb/dwc3/Kconfig" diff --git a/drivers/usb/Makefile b/drivers/usb/Makefile index dca7856..7791af6 100644 --- a/drivers/usb/Makefile +++ b/drivers/usb/Makefile @@ -12,6 +12,7 @@ obj-$(CONFIG_USB_DWC2)+= dwc2/ obj-$(CONFIG_USB_ISP1760) += isp1760/ obj-$(CONFIG_USB_MON) += mon/ +obj-$(CONFIG_USB_MTU3) += mtu3/ obj-$(CONFIG_PCI) += host/ obj-$(CONFIG_USB_EHCI_HCD) += host/ diff --git a/drivers/usb/mtu3/Kconfig b/drivers/usb/mtu3/Kconfig new file mode 100644 index 000..25cd619 --- /dev/null +++ b/drivers/usb/mtu3/Kconfig @@ -0,0 +1,54 @@ +# For MTK USB3.0 IP + +config USB_MTU3 + tristate "MediaTek USB3 Dual Role controller" + depends on EXTCON && (USB || USB_GADGET) && HAS_DMA + depends on ARCH_MEDIATEK || COMPILE_TEST + select USB_XHCI_MTK if USB_SUPPORT && USB_XHCI_HCD + help + Say Y or M 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, or both. + + If you don't know what this is, please say N. + + Choose M here to compile this driver as a module, and it + will be called mtu3.ko. + + +if USB_MTU3 +choice + bool "MTU3 Mode Selection" + default USB_MTU3_DUAL_ROLE if (USB && USB_GADGET) + default USB_MTU3_HOST if (USB && !USB_GADGET) + default USB_MTU3_GADGET if (!USB && USB_GADGET) + +config USB_MTU3_HOST + bool "Host only mode" + depends on USB=y || USB=USB_MTU3 + 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 + help + Select this when you want to use MTU3 in gadget mode only, + thereby the host feature will be regressed. + +config USB_MTU3_DUAL_ROLE + bool "Dual Role mode" + depends on ((USB=y || USB=USB_MTU3) && (USB_GADGET=y || USB_GADGET=USB_MTU3)) + help + This is the default mode of working of MTU3 controller where + both host and gadget features are enabled. + +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 000..3e17ff7 --- /dev/null +++ b/drivers/usb/mtu3/Makefile @@ -0,0 +1,19 @@ + +ccflags-$(CONFIG_USB_MTU3_DEBUG) += -DDEBUG + +obj-$(CONFIG_USB_MTU3) += mtu3.o + +mtu3-y := mtu3_plat.o + +ifneq ($(filter y,$(CONFIG_USB_MTU3_HOST) $(CONFIG_USB_MTU3_DUAL_ROLE)),) + mtu3-y += mtu3_host.o +endif + +ifneq ($(filter y,$(CONFIG_USB_MTU3_GADGET) $(CONFIG_USB_MTU3_DUAL_ROLE)),) + mtu3-y += mtu3_core.o mtu3_gadget_ep0.o mtu3_gadget.o
Re: [RESEND PATCH, v5 4/5] usb: Add MediaTek USB3 DRD Driver
On Tue, 2016-08-30 at 19:20 +0200, Greg Kroah-Hartman wrote: > On Fri, Aug 26, 2016 at 05:38:27PM +0800, chunfeng yun wrote: > > Hi, > > > > On Thu, 2016-08-25 at 10:32 +0200, Oliver Neukum wrote: > > > On Thu, 2016-08-25 at 11:05 +0800, Chunfeng Yun wrote: > > > > This patch adds support for the MediaTek USB3 controller > > > > integrated into MT8173. It can be configured as Dual-Role > > > > Device (DRD), Peripheral Only and Host Only (xHCI) modes. > > > > > > > > > > > +/** > > > > + * General Purpose Descriptor (GPD): > > > > + * The format of TX GPD is a little different from RX one. > > > > + * And the size of GPD is 16 bytes. > > > > + * > > > > + * @flag: > > > > + * bit0: Hardware Own (HWO) > > > > + * bit1: Buffer Descriptor Present (BDP), always 0, BD is not > > > > supported > > > > + * bit2: Bypass (BPS), 1: HW skips this GPD if HWO = 1 > > > > + * bit7: Interrupt On Completion (IOC) > > > > + * @chksum: This is used to validate the contents of this GPD; > > > > + * If TXQ_CS_EN / RXQ_CS_EN bit is set, an interrupt is issued > > > > + * when checksum validation fails; > > > > + * Checksum value is calculated over the 16 bytes of the GPD by > > > > default; > > > > + * @data_buf_len (RX ONLY): This value indicates the length of > > > > + * the assigned data buffer > > > > + * @next_gpd: Physical address of the next GPD > > > > + * @buffer: Physical address of the data buffer > > > > + * @buf_len: > > > > + * (TX): This value indicates the length of the assigned data > > > > buffer > > > > + * (RX): The total length of data received > > > > + * @ext_len: reserved > > > > + * @ext_flag: > > > > + * bit5 (TX ONLY): Zero Length Packet (ZLP), > > > > + */ > > > > +struct qmu_gpd { > > > > + u8 flag; > > > > + u8 chksum; > > > > + u16 data_buf_len; > > > > + u32 next_gpd; > > > > + u32 buffer; > > > > + u16 buf_len; > > > > + u8 ext_len; > > > > + u8 ext_flag; > > > > +} __packed; > > > > > > It looks like this is shared with hardware in memory. > > > But you leave the endianness of the bigger fields undeclared. > > > > > The driver only supports Little-Endian SoCs currently, because I have no > > Big-Endian platform to test it. > > that's ok, you still have to mark the endian of the data and use it in > that manner, you can't just not worry about it. > > Please fix up. Ok, I will do it thank you > > thanks, > > greg k-h
Re: [RESEND PATCH, v5 4/5] usb: Add MediaTek USB3 DRD Driver
On Tue, 2016-08-30 at 19:20 +0200, Greg Kroah-Hartman wrote: > On Fri, Aug 26, 2016 at 05:38:27PM +0800, chunfeng yun wrote: > > Hi, > > > > On Thu, 2016-08-25 at 10:32 +0200, Oliver Neukum wrote: > > > On Thu, 2016-08-25 at 11:05 +0800, Chunfeng Yun wrote: > > > > This patch adds support for the MediaTek USB3 controller > > > > integrated into MT8173. It can be configured as Dual-Role > > > > Device (DRD), Peripheral Only and Host Only (xHCI) modes. > > > > > > > > > > > +/** > > > > + * General Purpose Descriptor (GPD): > > > > + * The format of TX GPD is a little different from RX one. > > > > + * And the size of GPD is 16 bytes. > > > > + * > > > > + * @flag: > > > > + * bit0: Hardware Own (HWO) > > > > + * bit1: Buffer Descriptor Present (BDP), always 0, BD is not > > > > supported > > > > + * bit2: Bypass (BPS), 1: HW skips this GPD if HWO = 1 > > > > + * bit7: Interrupt On Completion (IOC) > > > > + * @chksum: This is used to validate the contents of this GPD; > > > > + * If TXQ_CS_EN / RXQ_CS_EN bit is set, an interrupt is issued > > > > + * when checksum validation fails; > > > > + * Checksum value is calculated over the 16 bytes of the GPD by > > > > default; > > > > + * @data_buf_len (RX ONLY): This value indicates the length of > > > > + * the assigned data buffer > > > > + * @next_gpd: Physical address of the next GPD > > > > + * @buffer: Physical address of the data buffer > > > > + * @buf_len: > > > > + * (TX): This value indicates the length of the assigned data > > > > buffer > > > > + * (RX): The total length of data received > > > > + * @ext_len: reserved > > > > + * @ext_flag: > > > > + * bit5 (TX ONLY): Zero Length Packet (ZLP), > > > > + */ > > > > +struct qmu_gpd { > > > > + u8 flag; > > > > + u8 chksum; > > > > + u16 data_buf_len; > > > > + u32 next_gpd; > > > > + u32 buffer; > > > > + u16 buf_len; > > > > + u8 ext_len; > > > > + u8 ext_flag; > > > > +} __packed; > > > > > > It looks like this is shared with hardware in memory. > > > But you leave the endianness of the bigger fields undeclared. > > > > > The driver only supports Little-Endian SoCs currently, because I have no > > Big-Endian platform to test it. > > that's ok, you still have to mark the endian of the data and use it in > that manner, you can't just not worry about it. > > Please fix up. Ok, I will do it thank you > > thanks, > > greg k-h
Re: [RESEND PATCH, v5 4/5] usb: Add MediaTek USB3 DRD Driver
On Fri, Aug 26, 2016 at 05:38:27PM +0800, chunfeng yun wrote: > Hi, > > On Thu, 2016-08-25 at 10:32 +0200, Oliver Neukum wrote: > > On Thu, 2016-08-25 at 11:05 +0800, Chunfeng Yun wrote: > > > This patch adds support for the MediaTek USB3 controller > > > integrated into MT8173. It can be configured as Dual-Role > > > Device (DRD), Peripheral Only and Host Only (xHCI) modes. > > > > > > > > +/** > > > + * General Purpose Descriptor (GPD): > > > + * The format of TX GPD is a little different from RX one. > > > + * And the size of GPD is 16 bytes. > > > + * > > > + * @flag: > > > + * bit0: Hardware Own (HWO) > > > + * bit1: Buffer Descriptor Present (BDP), always 0, BD is not > > > supported > > > + * bit2: Bypass (BPS), 1: HW skips this GPD if HWO = 1 > > > + * bit7: Interrupt On Completion (IOC) > > > + * @chksum: This is used to validate the contents of this GPD; > > > + * If TXQ_CS_EN / RXQ_CS_EN bit is set, an interrupt is issued > > > + * when checksum validation fails; > > > + * Checksum value is calculated over the 16 bytes of the GPD by > > > default; > > > + * @data_buf_len (RX ONLY): This value indicates the length of > > > + * the assigned data buffer > > > + * @next_gpd: Physical address of the next GPD > > > + * @buffer: Physical address of the data buffer > > > + * @buf_len: > > > + * (TX): This value indicates the length of the assigned data > > > buffer > > > + * (RX): The total length of data received > > > + * @ext_len: reserved > > > + * @ext_flag: > > > + * bit5 (TX ONLY): Zero Length Packet (ZLP), > > > + */ > > > +struct qmu_gpd { > > > + u8 flag; > > > + u8 chksum; > > > + u16 data_buf_len; > > > + u32 next_gpd; > > > + u32 buffer; > > > + u16 buf_len; > > > + u8 ext_len; > > > + u8 ext_flag; > > > +} __packed; > > > > It looks like this is shared with hardware in memory. > > But you leave the endianness of the bigger fields undeclared. > > > The driver only supports Little-Endian SoCs currently, because I have no > Big-Endian platform to test it. that's ok, you still have to mark the endian of the data and use it in that manner, you can't just not worry about it. Please fix up. thanks, greg k-h
Re: [RESEND PATCH, v5 4/5] usb: Add MediaTek USB3 DRD Driver
On Fri, Aug 26, 2016 at 05:38:27PM +0800, chunfeng yun wrote: > Hi, > > On Thu, 2016-08-25 at 10:32 +0200, Oliver Neukum wrote: > > On Thu, 2016-08-25 at 11:05 +0800, Chunfeng Yun wrote: > > > This patch adds support for the MediaTek USB3 controller > > > integrated into MT8173. It can be configured as Dual-Role > > > Device (DRD), Peripheral Only and Host Only (xHCI) modes. > > > > > > > > +/** > > > + * General Purpose Descriptor (GPD): > > > + * The format of TX GPD is a little different from RX one. > > > + * And the size of GPD is 16 bytes. > > > + * > > > + * @flag: > > > + * bit0: Hardware Own (HWO) > > > + * bit1: Buffer Descriptor Present (BDP), always 0, BD is not > > > supported > > > + * bit2: Bypass (BPS), 1: HW skips this GPD if HWO = 1 > > > + * bit7: Interrupt On Completion (IOC) > > > + * @chksum: This is used to validate the contents of this GPD; > > > + * If TXQ_CS_EN / RXQ_CS_EN bit is set, an interrupt is issued > > > + * when checksum validation fails; > > > + * Checksum value is calculated over the 16 bytes of the GPD by > > > default; > > > + * @data_buf_len (RX ONLY): This value indicates the length of > > > + * the assigned data buffer > > > + * @next_gpd: Physical address of the next GPD > > > + * @buffer: Physical address of the data buffer > > > + * @buf_len: > > > + * (TX): This value indicates the length of the assigned data > > > buffer > > > + * (RX): The total length of data received > > > + * @ext_len: reserved > > > + * @ext_flag: > > > + * bit5 (TX ONLY): Zero Length Packet (ZLP), > > > + */ > > > +struct qmu_gpd { > > > + u8 flag; > > > + u8 chksum; > > > + u16 data_buf_len; > > > + u32 next_gpd; > > > + u32 buffer; > > > + u16 buf_len; > > > + u8 ext_len; > > > + u8 ext_flag; > > > +} __packed; > > > > It looks like this is shared with hardware in memory. > > But you leave the endianness of the bigger fields undeclared. > > > The driver only supports Little-Endian SoCs currently, because I have no > Big-Endian platform to test it. that's ok, you still have to mark the endian of the data and use it in that manner, you can't just not worry about it. Please fix up. thanks, greg k-h
Re: [RESEND PATCH, v5 4/5] usb: Add MediaTek USB3 DRD Driver
Hi, On Thu, 2016-08-25 at 10:32 +0200, Oliver Neukum wrote: > On Thu, 2016-08-25 at 11:05 +0800, Chunfeng Yun wrote: > > This patch adds support for the MediaTek USB3 controller > > integrated into MT8173. It can be configured as Dual-Role > > Device (DRD), Peripheral Only and Host Only (xHCI) modes. > > > > > +/** > > + * General Purpose Descriptor (GPD): > > + * The format of TX GPD is a little different from RX one. > > + * And the size of GPD is 16 bytes. > > + * > > + * @flag: > > + * bit0: Hardware Own (HWO) > > + * bit1: Buffer Descriptor Present (BDP), always 0, BD is not supported > > + * bit2: Bypass (BPS), 1: HW skips this GPD if HWO = 1 > > + * bit7: Interrupt On Completion (IOC) > > + * @chksum: This is used to validate the contents of this GPD; > > + * If TXQ_CS_EN / RXQ_CS_EN bit is set, an interrupt is issued > > + * when checksum validation fails; > > + * Checksum value is calculated over the 16 bytes of the GPD by default; > > + * @data_buf_len (RX ONLY): This value indicates the length of > > + * the assigned data buffer > > + * @next_gpd: Physical address of the next GPD > > + * @buffer: Physical address of the data buffer > > + * @buf_len: > > + * (TX): This value indicates the length of the assigned data buffer > > + * (RX): The total length of data received > > + * @ext_len: reserved > > + * @ext_flag: > > + * bit5 (TX ONLY): Zero Length Packet (ZLP), > > + */ > > +struct qmu_gpd { > > + u8 flag; > > + u8 chksum; > > + u16 data_buf_len; > > + u32 next_gpd; > > + u32 buffer; > > + u16 buf_len; > > + u8 ext_len; > > + u8 ext_flag; > > +} __packed; > > It looks like this is shared with hardware in memory. > But you leave the endianness of the bigger fields undeclared. > The driver only supports Little-Endian SoCs currently, because I have no Big-Endian platform to test it. > > +/** > > +* dma: physical base address of GPD segment > > +* start: virtual base address of GPD segment > > +* end: the last GPD element > > +* enqueue: the first empty GPD to use > > +* dequeue: the first completed GPD serviced by ISR > > +* NOTE: the size of GPD ring should be >= 2 > > +*/ > > +struct mtu3_gpd_ring { > > + dma_addr_t dma; > > + struct qmu_gpd *start; > > + struct qmu_gpd *end; > > + struct qmu_gpd *enqueue; > > + struct qmu_gpd *dequeue; > > +}; > > + > > +/** > > +* @vbus: vbus 5V used by host mode > > +* @edev: external connector used to detect vbus and iddig changes > > +* @vbus_nb: notifier for vbus detection > > +* @vbus_nb: notifier for iddig(idpin) detection > > +* @extcon_reg_dwork: delay work for extcon notifier register, waiting for > > +* xHCI driver initialization, it's necessary for system bootup > > +* as device. > > +* @is_u3_drd: whether port0 supports usb3.0 dual-role device or not > > +* @id_*: used to maually switch between host and device modes by idpin > > +* @manual_drd_enabled: it's true when supports dual-role device by debugfs > > +* to switch host/device modes depending on user input. > > Please use a common interface for this. The Intel people are introducing > one. Can you give me the link address of the patch, I didn't find it. > > > > +#endif > > diff --git a/drivers/usb/mtu3/mtu3_core.c b/drivers/usb/mtu3/mtu3_core.c > > new file mode 100644 > > index 000..fdc11b6 > > --- /dev/null > > +++ b/drivers/usb/mtu3/mtu3_core.c > > @@ -0,0 +1,874 @@ > > +/* > > + * mtu3_core.c - hardware access layer and gadget init/exit of > > + * MediaTek usb3 Dual-Role Controller Driver > > + * > > + * Copyright (C) 2016 MediaTek Inc. > > + * > > + * Author: Chunfeng Yun> > + * > > + * This software is licensed under the terms of the GNU General Public > > + * License version 2, as published by the Free Software Foundation, and > > + * may be copied, distributed, and modified under those terms. > > + * > > + * This program is distributed in the hope that it will be useful, > > + * but WITHOUT ANY WARRANTY; without even the implied warranty of > > + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > > + * GNU General Public License for more details. > > + * > > + */ > > + > > +#include > > +#include > > +#include > > +#include > > +#include > > + > > +#include "mtu3.h" > > + > > +static int ep_fifo_alloc(struct mtu3_ep *mep, u32 seg_size) > > +{ > > + struct mtu3_fifo_info *fifo = mep->fifo; > > + u32 num_bits = DIV_ROUND_UP(seg_size, MTU3_EP_FIFO_UNIT); > > + u32 start_bit; > > + > > + /* ensure that @mep->fifo_seg_size is power of two */ > > + num_bits = roundup_pow_of_two(num_bits); > > + if (num_bits > fifo->limit) > > + return -EINVAL; > > + > > + mep->fifo_seg_size = num_bits * MTU3_EP_FIFO_UNIT; > > + num_bits = num_bits * (mep->slot + 1); > > + start_bit = bitmap_find_next_zero_area(fifo->bitmap, > > + fifo->limit, 0, num_bits, 0); > > + if (start_bit >= fifo->limit) > > + return
Re: [RESEND PATCH, v5 4/5] usb: Add MediaTek USB3 DRD Driver
Hi, On Thu, 2016-08-25 at 10:32 +0200, Oliver Neukum wrote: > On Thu, 2016-08-25 at 11:05 +0800, Chunfeng Yun wrote: > > This patch adds support for the MediaTek USB3 controller > > integrated into MT8173. It can be configured as Dual-Role > > Device (DRD), Peripheral Only and Host Only (xHCI) modes. > > > > > +/** > > + * General Purpose Descriptor (GPD): > > + * The format of TX GPD is a little different from RX one. > > + * And the size of GPD is 16 bytes. > > + * > > + * @flag: > > + * bit0: Hardware Own (HWO) > > + * bit1: Buffer Descriptor Present (BDP), always 0, BD is not supported > > + * bit2: Bypass (BPS), 1: HW skips this GPD if HWO = 1 > > + * bit7: Interrupt On Completion (IOC) > > + * @chksum: This is used to validate the contents of this GPD; > > + * If TXQ_CS_EN / RXQ_CS_EN bit is set, an interrupt is issued > > + * when checksum validation fails; > > + * Checksum value is calculated over the 16 bytes of the GPD by default; > > + * @data_buf_len (RX ONLY): This value indicates the length of > > + * the assigned data buffer > > + * @next_gpd: Physical address of the next GPD > > + * @buffer: Physical address of the data buffer > > + * @buf_len: > > + * (TX): This value indicates the length of the assigned data buffer > > + * (RX): The total length of data received > > + * @ext_len: reserved > > + * @ext_flag: > > + * bit5 (TX ONLY): Zero Length Packet (ZLP), > > + */ > > +struct qmu_gpd { > > + u8 flag; > > + u8 chksum; > > + u16 data_buf_len; > > + u32 next_gpd; > > + u32 buffer; > > + u16 buf_len; > > + u8 ext_len; > > + u8 ext_flag; > > +} __packed; > > It looks like this is shared with hardware in memory. > But you leave the endianness of the bigger fields undeclared. > The driver only supports Little-Endian SoCs currently, because I have no Big-Endian platform to test it. > > +/** > > +* dma: physical base address of GPD segment > > +* start: virtual base address of GPD segment > > +* end: the last GPD element > > +* enqueue: the first empty GPD to use > > +* dequeue: the first completed GPD serviced by ISR > > +* NOTE: the size of GPD ring should be >= 2 > > +*/ > > +struct mtu3_gpd_ring { > > + dma_addr_t dma; > > + struct qmu_gpd *start; > > + struct qmu_gpd *end; > > + struct qmu_gpd *enqueue; > > + struct qmu_gpd *dequeue; > > +}; > > + > > +/** > > +* @vbus: vbus 5V used by host mode > > +* @edev: external connector used to detect vbus and iddig changes > > +* @vbus_nb: notifier for vbus detection > > +* @vbus_nb: notifier for iddig(idpin) detection > > +* @extcon_reg_dwork: delay work for extcon notifier register, waiting for > > +* xHCI driver initialization, it's necessary for system bootup > > +* as device. > > +* @is_u3_drd: whether port0 supports usb3.0 dual-role device or not > > +* @id_*: used to maually switch between host and device modes by idpin > > +* @manual_drd_enabled: it's true when supports dual-role device by debugfs > > +* to switch host/device modes depending on user input. > > Please use a common interface for this. The Intel people are introducing > one. Can you give me the link address of the patch, I didn't find it. > > > > +#endif > > diff --git a/drivers/usb/mtu3/mtu3_core.c b/drivers/usb/mtu3/mtu3_core.c > > new file mode 100644 > > index 000..fdc11b6 > > --- /dev/null > > +++ b/drivers/usb/mtu3/mtu3_core.c > > @@ -0,0 +1,874 @@ > > +/* > > + * mtu3_core.c - hardware access layer and gadget init/exit of > > + * MediaTek usb3 Dual-Role Controller Driver > > + * > > + * Copyright (C) 2016 MediaTek Inc. > > + * > > + * Author: Chunfeng Yun > > + * > > + * This software is licensed under the terms of the GNU General Public > > + * License version 2, as published by the Free Software Foundation, and > > + * may be copied, distributed, and modified under those terms. > > + * > > + * This program is distributed in the hope that it will be useful, > > + * but WITHOUT ANY WARRANTY; without even the implied warranty of > > + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > > + * GNU General Public License for more details. > > + * > > + */ > > + > > +#include > > +#include > > +#include > > +#include > > +#include > > + > > +#include "mtu3.h" > > + > > +static int ep_fifo_alloc(struct mtu3_ep *mep, u32 seg_size) > > +{ > > + struct mtu3_fifo_info *fifo = mep->fifo; > > + u32 num_bits = DIV_ROUND_UP(seg_size, MTU3_EP_FIFO_UNIT); > > + u32 start_bit; > > + > > + /* ensure that @mep->fifo_seg_size is power of two */ > > + num_bits = roundup_pow_of_two(num_bits); > > + if (num_bits > fifo->limit) > > + return -EINVAL; > > + > > + mep->fifo_seg_size = num_bits * MTU3_EP_FIFO_UNIT; > > + num_bits = num_bits * (mep->slot + 1); > > + start_bit = bitmap_find_next_zero_area(fifo->bitmap, > > + fifo->limit, 0, num_bits, 0); > > + if (start_bit >= fifo->limit) > > + return -EOVERFLOW; > > + > > +
Re: [RESEND PATCH, v5 4/5] usb: Add MediaTek USB3 DRD Driver
On Thu, 2016-08-25 at 11:05 +0800, Chunfeng Yun wrote: > This patch adds support for the MediaTek USB3 controller > integrated into MT8173. It can be configured as Dual-Role > Device (DRD), Peripheral Only and Host Only (xHCI) modes. > > +/** > + * General Purpose Descriptor (GPD): > + * The format of TX GPD is a little different from RX one. > + * And the size of GPD is 16 bytes. > + * > + * @flag: > + * bit0: Hardware Own (HWO) > + * bit1: Buffer Descriptor Present (BDP), always 0, BD is not supported > + * bit2: Bypass (BPS), 1: HW skips this GPD if HWO = 1 > + * bit7: Interrupt On Completion (IOC) > + * @chksum: This is used to validate the contents of this GPD; > + * If TXQ_CS_EN / RXQ_CS_EN bit is set, an interrupt is issued > + * when checksum validation fails; > + * Checksum value is calculated over the 16 bytes of the GPD by default; > + * @data_buf_len (RX ONLY): This value indicates the length of > + * the assigned data buffer > + * @next_gpd: Physical address of the next GPD > + * @buffer: Physical address of the data buffer > + * @buf_len: > + * (TX): This value indicates the length of the assigned data buffer > + * (RX): The total length of data received > + * @ext_len: reserved > + * @ext_flag: > + * bit5 (TX ONLY): Zero Length Packet (ZLP), > + */ > +struct qmu_gpd { > + u8 flag; > + u8 chksum; > + u16 data_buf_len; > + u32 next_gpd; > + u32 buffer; > + u16 buf_len; > + u8 ext_len; > + u8 ext_flag; > +} __packed; It looks like this is shared with hardware in memory. But you leave the endianness of the bigger fields undeclared. > +/** > +* dma: physical base address of GPD segment > +* start: virtual base address of GPD segment > +* end: the last GPD element > +* enqueue: the first empty GPD to use > +* dequeue: the first completed GPD serviced by ISR > +* NOTE: the size of GPD ring should be >= 2 > +*/ > +struct mtu3_gpd_ring { > + dma_addr_t dma; > + struct qmu_gpd *start; > + struct qmu_gpd *end; > + struct qmu_gpd *enqueue; > + struct qmu_gpd *dequeue; > +}; > + > +/** > +* @vbus: vbus 5V used by host mode > +* @edev: external connector used to detect vbus and iddig changes > +* @vbus_nb: notifier for vbus detection > +* @vbus_nb: notifier for iddig(idpin) detection > +* @extcon_reg_dwork: delay work for extcon notifier register, waiting for > +*xHCI driver initialization, it's necessary for system bootup > +*as device. > +* @is_u3_drd: whether port0 supports usb3.0 dual-role device or not > +* @id_*: used to maually switch between host and device modes by idpin > +* @manual_drd_enabled: it's true when supports dual-role device by debugfs > +*to switch host/device modes depending on user input. Please use a common interface for this. The Intel people are introducing one. > +#endif > diff --git a/drivers/usb/mtu3/mtu3_core.c b/drivers/usb/mtu3/mtu3_core.c > new file mode 100644 > index 000..fdc11b6 > --- /dev/null > +++ b/drivers/usb/mtu3/mtu3_core.c > @@ -0,0 +1,874 @@ > +/* > + * mtu3_core.c - hardware access layer and gadget init/exit of > + * MediaTek usb3 Dual-Role Controller Driver > + * > + * Copyright (C) 2016 MediaTek Inc. > + * > + * Author: Chunfeng Yun> + * > + * This software is licensed under the terms of the GNU General Public > + * License version 2, as published by the Free Software Foundation, and > + * may be copied, distributed, and modified under those terms. > + * > + * This program is distributed in the hope that it will be useful, > + * but WITHOUT ANY WARRANTY; without even the implied warranty of > + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > + * GNU General Public License for more details. > + * > + */ > + > +#include > +#include > +#include > +#include > +#include > + > +#include "mtu3.h" > + > +static int ep_fifo_alloc(struct mtu3_ep *mep, u32 seg_size) > +{ > + struct mtu3_fifo_info *fifo = mep->fifo; > + u32 num_bits = DIV_ROUND_UP(seg_size, MTU3_EP_FIFO_UNIT); > + u32 start_bit; > + > + /* ensure that @mep->fifo_seg_size is power of two */ > + num_bits = roundup_pow_of_two(num_bits); > + if (num_bits > fifo->limit) > + return -EINVAL; > + > + mep->fifo_seg_size = num_bits * MTU3_EP_FIFO_UNIT; > + num_bits = num_bits * (mep->slot + 1); > + start_bit = bitmap_find_next_zero_area(fifo->bitmap, > + fifo->limit, 0, num_bits, 0); > + if (start_bit >= fifo->limit) > + return -EOVERFLOW; > + > + bitmap_set(fifo->bitmap, start_bit, num_bits); > + mep->fifo_size = num_bits * MTU3_EP_FIFO_UNIT; > + mep->fifo_addr = fifo->base + MTU3_EP_FIFO_UNIT * start_bit; > + > + dev_dbg(mep->mtu->dev, "%s fifo:%#x/%#x, start_bit: %d\n", > + __func__, mep->fifo_seg_size, mep->fifo_size, start_bit); If you use the "f" option to dynamic debugging it will give you the
Re: [RESEND PATCH, v5 4/5] usb: Add MediaTek USB3 DRD Driver
On Thu, 2016-08-25 at 11:05 +0800, Chunfeng Yun wrote: > This patch adds support for the MediaTek USB3 controller > integrated into MT8173. It can be configured as Dual-Role > Device (DRD), Peripheral Only and Host Only (xHCI) modes. > > +/** > + * General Purpose Descriptor (GPD): > + * The format of TX GPD is a little different from RX one. > + * And the size of GPD is 16 bytes. > + * > + * @flag: > + * bit0: Hardware Own (HWO) > + * bit1: Buffer Descriptor Present (BDP), always 0, BD is not supported > + * bit2: Bypass (BPS), 1: HW skips this GPD if HWO = 1 > + * bit7: Interrupt On Completion (IOC) > + * @chksum: This is used to validate the contents of this GPD; > + * If TXQ_CS_EN / RXQ_CS_EN bit is set, an interrupt is issued > + * when checksum validation fails; > + * Checksum value is calculated over the 16 bytes of the GPD by default; > + * @data_buf_len (RX ONLY): This value indicates the length of > + * the assigned data buffer > + * @next_gpd: Physical address of the next GPD > + * @buffer: Physical address of the data buffer > + * @buf_len: > + * (TX): This value indicates the length of the assigned data buffer > + * (RX): The total length of data received > + * @ext_len: reserved > + * @ext_flag: > + * bit5 (TX ONLY): Zero Length Packet (ZLP), > + */ > +struct qmu_gpd { > + u8 flag; > + u8 chksum; > + u16 data_buf_len; > + u32 next_gpd; > + u32 buffer; > + u16 buf_len; > + u8 ext_len; > + u8 ext_flag; > +} __packed; It looks like this is shared with hardware in memory. But you leave the endianness of the bigger fields undeclared. > +/** > +* dma: physical base address of GPD segment > +* start: virtual base address of GPD segment > +* end: the last GPD element > +* enqueue: the first empty GPD to use > +* dequeue: the first completed GPD serviced by ISR > +* NOTE: the size of GPD ring should be >= 2 > +*/ > +struct mtu3_gpd_ring { > + dma_addr_t dma; > + struct qmu_gpd *start; > + struct qmu_gpd *end; > + struct qmu_gpd *enqueue; > + struct qmu_gpd *dequeue; > +}; > + > +/** > +* @vbus: vbus 5V used by host mode > +* @edev: external connector used to detect vbus and iddig changes > +* @vbus_nb: notifier for vbus detection > +* @vbus_nb: notifier for iddig(idpin) detection > +* @extcon_reg_dwork: delay work for extcon notifier register, waiting for > +*xHCI driver initialization, it's necessary for system bootup > +*as device. > +* @is_u3_drd: whether port0 supports usb3.0 dual-role device or not > +* @id_*: used to maually switch between host and device modes by idpin > +* @manual_drd_enabled: it's true when supports dual-role device by debugfs > +*to switch host/device modes depending on user input. Please use a common interface for this. The Intel people are introducing one. > +#endif > diff --git a/drivers/usb/mtu3/mtu3_core.c b/drivers/usb/mtu3/mtu3_core.c > new file mode 100644 > index 000..fdc11b6 > --- /dev/null > +++ b/drivers/usb/mtu3/mtu3_core.c > @@ -0,0 +1,874 @@ > +/* > + * mtu3_core.c - hardware access layer and gadget init/exit of > + * MediaTek usb3 Dual-Role Controller Driver > + * > + * Copyright (C) 2016 MediaTek Inc. > + * > + * Author: Chunfeng Yun > + * > + * This software is licensed under the terms of the GNU General Public > + * License version 2, as published by the Free Software Foundation, and > + * may be copied, distributed, and modified under those terms. > + * > + * This program is distributed in the hope that it will be useful, > + * but WITHOUT ANY WARRANTY; without even the implied warranty of > + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > + * GNU General Public License for more details. > + * > + */ > + > +#include > +#include > +#include > +#include > +#include > + > +#include "mtu3.h" > + > +static int ep_fifo_alloc(struct mtu3_ep *mep, u32 seg_size) > +{ > + struct mtu3_fifo_info *fifo = mep->fifo; > + u32 num_bits = DIV_ROUND_UP(seg_size, MTU3_EP_FIFO_UNIT); > + u32 start_bit; > + > + /* ensure that @mep->fifo_seg_size is power of two */ > + num_bits = roundup_pow_of_two(num_bits); > + if (num_bits > fifo->limit) > + return -EINVAL; > + > + mep->fifo_seg_size = num_bits * MTU3_EP_FIFO_UNIT; > + num_bits = num_bits * (mep->slot + 1); > + start_bit = bitmap_find_next_zero_area(fifo->bitmap, > + fifo->limit, 0, num_bits, 0); > + if (start_bit >= fifo->limit) > + return -EOVERFLOW; > + > + bitmap_set(fifo->bitmap, start_bit, num_bits); > + mep->fifo_size = num_bits * MTU3_EP_FIFO_UNIT; > + mep->fifo_addr = fifo->base + MTU3_EP_FIFO_UNIT * start_bit; > + > + dev_dbg(mep->mtu->dev, "%s fifo:%#x/%#x, start_bit: %d\n", > + __func__, mep->fifo_seg_size, mep->fifo_size, start_bit); If you use the "f" option to dynamic debugging it will give you the function name anyway. So why
[RESEND PATCH, v5 4/5] usb: Add MediaTek USB3 DRD Driver
This patch adds support for the MediaTek USB3 controller integrated into MT8173. It can be configured as Dual-Role Device (DRD), Peripheral Only and Host Only (xHCI) modes. Signed-off-by: Chunfeng Yun--- drivers/usb/Kconfig|2 + drivers/usb/Makefile |1 + drivers/usb/mtu3/Kconfig | 54 +++ drivers/usb/mtu3/Makefile | 19 + drivers/usb/mtu3/mtu3.h| 422 + drivers/usb/mtu3/mtu3_core.c | 874 +++ drivers/usb/mtu3/mtu3_dr.c | 375 +++ drivers/usb/mtu3/mtu3_dr.h | 108 + drivers/usb/mtu3/mtu3_gadget.c | 731 ++ drivers/usb/mtu3/mtu3_gadget_ep0.c | 879 drivers/usb/mtu3/mtu3_host.c | 294 drivers/usb/mtu3/mtu3_hw_regs.h| 473 +++ drivers/usb/mtu3/mtu3_plat.c | 490 drivers/usb/mtu3/mtu3_qmu.c| 599 drivers/usb/mtu3/mtu3_qmu.h| 43 ++ 15 files changed, 5364 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.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/drivers/usb/Kconfig b/drivers/usb/Kconfig index 8689dcb..9ca0bf0 100644 --- a/drivers/usb/Kconfig +++ b/drivers/usb/Kconfig @@ -95,6 +95,8 @@ source "drivers/usb/usbip/Kconfig" endif +source "drivers/usb/mtu3/Kconfig" + source "drivers/usb/musb/Kconfig" source "drivers/usb/dwc3/Kconfig" diff --git a/drivers/usb/Makefile b/drivers/usb/Makefile index dca7856..7791af6 100644 --- a/drivers/usb/Makefile +++ b/drivers/usb/Makefile @@ -12,6 +12,7 @@ obj-$(CONFIG_USB_DWC2)+= dwc2/ obj-$(CONFIG_USB_ISP1760) += isp1760/ obj-$(CONFIG_USB_MON) += mon/ +obj-$(CONFIG_USB_MTU3) += mtu3/ obj-$(CONFIG_PCI) += host/ obj-$(CONFIG_USB_EHCI_HCD) += host/ diff --git a/drivers/usb/mtu3/Kconfig b/drivers/usb/mtu3/Kconfig new file mode 100644 index 000..25cd619 --- /dev/null +++ b/drivers/usb/mtu3/Kconfig @@ -0,0 +1,54 @@ +# For MTK USB3.0 IP + +config USB_MTU3 + tristate "MediaTek USB3 Dual Role controller" + depends on EXTCON && (USB || USB_GADGET) && HAS_DMA + depends on ARCH_MEDIATEK || COMPILE_TEST + select USB_XHCI_MTK if USB_SUPPORT && USB_XHCI_HCD + help + Say Y or M 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, or both. + + If you don't know what this is, please say N. + + Choose M here to compile this driver as a module, and it + will be called mtu3.ko. + + +if USB_MTU3 +choice + bool "MTU3 Mode Selection" + default USB_MTU3_DUAL_ROLE if (USB && USB_GADGET) + default USB_MTU3_HOST if (USB && !USB_GADGET) + default USB_MTU3_GADGET if (!USB && USB_GADGET) + +config USB_MTU3_HOST + bool "Host only mode" + depends on USB=y || USB=USB_MTU3 + 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 + help + Select this when you want to use MTU3 in gadget mode only, + thereby the host feature will be regressed. + +config USB_MTU3_DUAL_ROLE + bool "Dual Role mode" + depends on ((USB=y || USB=USB_MTU3) && (USB_GADGET=y || USB_GADGET=USB_MTU3)) + help + This is the default mode of working of MTU3 controller where + both host and gadget features are enabled. + +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 000..3e17ff7 --- /dev/null +++ b/drivers/usb/mtu3/Makefile @@ -0,0 +1,19 @@ + +ccflags-$(CONFIG_USB_MTU3_DEBUG) += -DDEBUG + +obj-$(CONFIG_USB_MTU3) += mtu3.o + +mtu3-y := mtu3_plat.o + +ifneq ($(filter y,$(CONFIG_USB_MTU3_HOST) $(CONFIG_USB_MTU3_DUAL_ROLE)),) + mtu3-y += mtu3_host.o +endif + +ifneq ($(filter y,$(CONFIG_USB_MTU3_GADGET) $(CONFIG_USB_MTU3_DUAL_ROLE)),) + mtu3-y += mtu3_core.o
[RESEND PATCH V5, 0/5] Add MediaTek USB3 DRD Driver
>From e60d29d748a4e9f412c9bb08458083e97d3f523d Mon Sep 17 00:00:00 2001 From: Chunfeng Yun <chunfeng@mediatek.com> Date: Tue, 9 Aug 2016 16:12:31 +0800 Subject: [PATCH V5, 0/5] Add MediaTek USB3 DRD Driver These patches introduce the MediaTek USB3 dual-role controller driver. The driver can be configured as Dual-Role Device (DRD), Peripheral Only and Host Only (xHCI) modes. It works well with Mass Storage, RNDIS and g_zero on FS/HS and SS. And it is tested on MT8173 platform which only contains USB2.0 device IP, and on MT6290 platform which contains USB3.0 device IP. Change in v5: 1. modify some comments 2. rename some unsuitable variables 3. add reg-names property for host node 4. add USB_MTU3_DEBUG to control debug messages Change in v4: 1. fix build errors on non-mediatek platforms 2. provide manual dual-role switch via debugfs instead of sysfs Change in v3: 1. fix some typo error 2. rename mtu3.txt to mt8173-mtu3.txt Change in v2: 1. modify binding docs according to suggestions 2. modify some comments and remove some dummy blank lines 3. fix memory leakage Change in v2: 1. modify binding docs according to suggestions 2. modify some comments and remove some dummy blank lines 3. fix memory leakage Chunfeng Yun (5): dt-bindings: mt8173-xhci: support host side of dual-role mode dt-bindings: mt8173-mtu3: add devicetree bindings usb: xhci-mtk: make IPPC register optional usb: Add MediaTek USB3 DRD Driver arm64: dts: mediatek: add USB3 DRD driver .../devicetree/bindings/usb/mt8173-mtu3.txt| 87 ++ .../devicetree/bindings/usb/mt8173-xhci.txt| 54 +- arch/arm64/boot/dts/mediatek/mt8173-evb.dts| 46 +- arch/arm64/boot/dts/mediatek/mt8173.dtsi | 29 +- drivers/usb/Kconfig|2 + drivers/usb/Makefile |1 + drivers/usb/host/xhci-mtk.c| 36 +- drivers/usb/mtu3/Kconfig | 54 ++ drivers/usb/mtu3/Makefile | 19 + drivers/usb/mtu3/mtu3.h| 422 ++ drivers/usb/mtu3/mtu3_core.c | 874 +++ drivers/usb/mtu3/mtu3_dr.c | 375 + drivers/usb/mtu3/mtu3_dr.h | 108 +++ drivers/usb/mtu3/mtu3_gadget.c | 731 drivers/usb/mtu3/mtu3_gadget_ep0.c | 879 drivers/usb/mtu3/mtu3_host.c | 294 +++ drivers/usb/mtu3/mtu3_hw_regs.h| 473 +++ drivers/usb/mtu3/mtu3_plat.c | 490 +++ drivers/usb/mtu3/mtu3_qmu.c| 599 + drivers/usb/mtu3/mtu3_qmu.h| 43 + 20 files changed, 5598 insertions(+), 18 deletions(-) create mode 100644 Documentation/devicetree/bindings/usb/mt8173-mtu3.txt 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.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
[RESEND PATCH V5, 0/5] Add MediaTek USB3 DRD Driver
>From e60d29d748a4e9f412c9bb08458083e97d3f523d Mon Sep 17 00:00:00 2001 From: Chunfeng Yun Date: Tue, 9 Aug 2016 16:12:31 +0800 Subject: [PATCH V5, 0/5] Add MediaTek USB3 DRD Driver These patches introduce the MediaTek USB3 dual-role controller driver. The driver can be configured as Dual-Role Device (DRD), Peripheral Only and Host Only (xHCI) modes. It works well with Mass Storage, RNDIS and g_zero on FS/HS and SS. And it is tested on MT8173 platform which only contains USB2.0 device IP, and on MT6290 platform which contains USB3.0 device IP. Change in v5: 1. modify some comments 2. rename some unsuitable variables 3. add reg-names property for host node 4. add USB_MTU3_DEBUG to control debug messages Change in v4: 1. fix build errors on non-mediatek platforms 2. provide manual dual-role switch via debugfs instead of sysfs Change in v3: 1. fix some typo error 2. rename mtu3.txt to mt8173-mtu3.txt Change in v2: 1. modify binding docs according to suggestions 2. modify some comments and remove some dummy blank lines 3. fix memory leakage Change in v2: 1. modify binding docs according to suggestions 2. modify some comments and remove some dummy blank lines 3. fix memory leakage Chunfeng Yun (5): dt-bindings: mt8173-xhci: support host side of dual-role mode dt-bindings: mt8173-mtu3: add devicetree bindings usb: xhci-mtk: make IPPC register optional usb: Add MediaTek USB3 DRD Driver arm64: dts: mediatek: add USB3 DRD driver .../devicetree/bindings/usb/mt8173-mtu3.txt| 87 ++ .../devicetree/bindings/usb/mt8173-xhci.txt| 54 +- arch/arm64/boot/dts/mediatek/mt8173-evb.dts| 46 +- arch/arm64/boot/dts/mediatek/mt8173.dtsi | 29 +- drivers/usb/Kconfig|2 + drivers/usb/Makefile |1 + drivers/usb/host/xhci-mtk.c| 36 +- drivers/usb/mtu3/Kconfig | 54 ++ drivers/usb/mtu3/Makefile | 19 + drivers/usb/mtu3/mtu3.h| 422 ++ drivers/usb/mtu3/mtu3_core.c | 874 +++ drivers/usb/mtu3/mtu3_dr.c | 375 + drivers/usb/mtu3/mtu3_dr.h | 108 +++ drivers/usb/mtu3/mtu3_gadget.c | 731 drivers/usb/mtu3/mtu3_gadget_ep0.c | 879 drivers/usb/mtu3/mtu3_host.c | 294 +++ drivers/usb/mtu3/mtu3_hw_regs.h| 473 +++ drivers/usb/mtu3/mtu3_plat.c | 490 +++ drivers/usb/mtu3/mtu3_qmu.c| 599 + drivers/usb/mtu3/mtu3_qmu.h| 43 + 20 files changed, 5598 insertions(+), 18 deletions(-) create mode 100644 Documentation/devicetree/bindings/usb/mt8173-mtu3.txt 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.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
[RESEND PATCH, v5 4/5] usb: Add MediaTek USB3 DRD Driver
This patch adds support for the MediaTek USB3 controller integrated into MT8173. It can be configured as Dual-Role Device (DRD), Peripheral Only and Host Only (xHCI) modes. Signed-off-by: Chunfeng Yun --- drivers/usb/Kconfig|2 + drivers/usb/Makefile |1 + drivers/usb/mtu3/Kconfig | 54 +++ drivers/usb/mtu3/Makefile | 19 + drivers/usb/mtu3/mtu3.h| 422 + drivers/usb/mtu3/mtu3_core.c | 874 +++ drivers/usb/mtu3/mtu3_dr.c | 375 +++ drivers/usb/mtu3/mtu3_dr.h | 108 + drivers/usb/mtu3/mtu3_gadget.c | 731 ++ drivers/usb/mtu3/mtu3_gadget_ep0.c | 879 drivers/usb/mtu3/mtu3_host.c | 294 drivers/usb/mtu3/mtu3_hw_regs.h| 473 +++ drivers/usb/mtu3/mtu3_plat.c | 490 drivers/usb/mtu3/mtu3_qmu.c| 599 drivers/usb/mtu3/mtu3_qmu.h| 43 ++ 15 files changed, 5364 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.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/drivers/usb/Kconfig b/drivers/usb/Kconfig index 8689dcb..9ca0bf0 100644 --- a/drivers/usb/Kconfig +++ b/drivers/usb/Kconfig @@ -95,6 +95,8 @@ source "drivers/usb/usbip/Kconfig" endif +source "drivers/usb/mtu3/Kconfig" + source "drivers/usb/musb/Kconfig" source "drivers/usb/dwc3/Kconfig" diff --git a/drivers/usb/Makefile b/drivers/usb/Makefile index dca7856..7791af6 100644 --- a/drivers/usb/Makefile +++ b/drivers/usb/Makefile @@ -12,6 +12,7 @@ obj-$(CONFIG_USB_DWC2)+= dwc2/ obj-$(CONFIG_USB_ISP1760) += isp1760/ obj-$(CONFIG_USB_MON) += mon/ +obj-$(CONFIG_USB_MTU3) += mtu3/ obj-$(CONFIG_PCI) += host/ obj-$(CONFIG_USB_EHCI_HCD) += host/ diff --git a/drivers/usb/mtu3/Kconfig b/drivers/usb/mtu3/Kconfig new file mode 100644 index 000..25cd619 --- /dev/null +++ b/drivers/usb/mtu3/Kconfig @@ -0,0 +1,54 @@ +# For MTK USB3.0 IP + +config USB_MTU3 + tristate "MediaTek USB3 Dual Role controller" + depends on EXTCON && (USB || USB_GADGET) && HAS_DMA + depends on ARCH_MEDIATEK || COMPILE_TEST + select USB_XHCI_MTK if USB_SUPPORT && USB_XHCI_HCD + help + Say Y or M 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, or both. + + If you don't know what this is, please say N. + + Choose M here to compile this driver as a module, and it + will be called mtu3.ko. + + +if USB_MTU3 +choice + bool "MTU3 Mode Selection" + default USB_MTU3_DUAL_ROLE if (USB && USB_GADGET) + default USB_MTU3_HOST if (USB && !USB_GADGET) + default USB_MTU3_GADGET if (!USB && USB_GADGET) + +config USB_MTU3_HOST + bool "Host only mode" + depends on USB=y || USB=USB_MTU3 + 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 + help + Select this when you want to use MTU3 in gadget mode only, + thereby the host feature will be regressed. + +config USB_MTU3_DUAL_ROLE + bool "Dual Role mode" + depends on ((USB=y || USB=USB_MTU3) && (USB_GADGET=y || USB_GADGET=USB_MTU3)) + help + This is the default mode of working of MTU3 controller where + both host and gadget features are enabled. + +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 000..3e17ff7 --- /dev/null +++ b/drivers/usb/mtu3/Makefile @@ -0,0 +1,19 @@ + +ccflags-$(CONFIG_USB_MTU3_DEBUG) += -DDEBUG + +obj-$(CONFIG_USB_MTU3) += mtu3.o + +mtu3-y := mtu3_plat.o + +ifneq ($(filter y,$(CONFIG_USB_MTU3_HOST) $(CONFIG_USB_MTU3_DUAL_ROLE)),) + mtu3-y += mtu3_host.o +endif + +ifneq ($(filter y,$(CONFIG_USB_MTU3_GADGET) $(CONFIG_USB_MTU3_DUAL_ROLE)),) + mtu3-y += mtu3_core.o mtu3_gadget_ep0.o mtu3_gadget.o
Re: [PATCH V5, 0/5] Add MediaTek USB3 DRD Driver
Hi, On Wed, 2016-08-24 at 13:29 +0200, Oliver Neukum wrote: > On Wed, 2016-08-24 at 14:42 +0800, chunfeng yun wrote: > > Dear all, > > > > Could you please help me to review the code? > > Is the structure > > struct qmu_gpd > > shared with the hardware? Do I read this correctly that > you do PIO to endpoint 0 but DMA to the others? > Yes, you are right. > Could you resend the series? > I will do it soon Thank you. > Regards > Oliver > >
Re: [PATCH V5, 0/5] Add MediaTek USB3 DRD Driver
Hi, On Wed, 2016-08-24 at 13:29 +0200, Oliver Neukum wrote: > On Wed, 2016-08-24 at 14:42 +0800, chunfeng yun wrote: > > Dear all, > > > > Could you please help me to review the code? > > Is the structure > > struct qmu_gpd > > shared with the hardware? Do I read this correctly that > you do PIO to endpoint 0 but DMA to the others? > Yes, you are right. > Could you resend the series? > I will do it soon Thank you. > Regards > Oliver > >
Re: [PATCH V5, 0/5] Add MediaTek USB3 DRD Driver
On Wed, 2016-08-24 at 14:42 +0800, chunfeng yun wrote: > Dear all, > > Could you please help me to review the code? Is the structure struct qmu_gpd shared with the hardware? Do I read this correctly that you do PIO to endpoint 0 but DMA to the others? Could you resend the series? Regards Oliver
Re: [PATCH V5, 0/5] Add MediaTek USB3 DRD Driver
On Wed, 2016-08-24 at 14:42 +0800, chunfeng yun wrote: > Dear all, > > Could you please help me to review the code? Is the structure struct qmu_gpd shared with the hardware? Do I read this correctly that you do PIO to endpoint 0 but DMA to the others? Could you resend the series? Regards Oliver
Re: [PATCH V5, 0/5] Add MediaTek USB3 DRD Driver
Dear all, Could you please help me to review the code? Thank you very much. On Tue, 2016-08-09 at 16:23 +0800, Chunfeng Yun wrote: > These patches introduce the MediaTek USB3 dual-role controller > driver. > > The driver can be configured as Dual-Role Device (DRD), > Peripheral Only and Host Only (xHCI) modes. It works well > with Mass Storage, RNDIS and g_zero on FS/HS and SS. And it is > tested on MT8173 platform which only contains USB2.0 device IP, > and on MT6290 platform which contains USB3.0 device IP. > > Change in v5: > 1. modify some comments > 2. rename some unsuitable variables > 3. add reg-names property for host node > 4. add USB_MTU3_DEBUG to control debug messages > > Change in v4: > 1. fix build errors on non-mediatek platforms > 2. provide manual dual-role switch via debugfs instead of sysfs > > Change in v3: > 1. fix some typo error > 2. rename mtu3.txt to mt8173-mtu3.txt > > Change in v2: > 1. modify binding docs according to suggestions > 2. modify some comments and remove some dummy blank lines > 3. fix memory leakage > > > Chunfeng Yun (5): > dt-bindings: mt8173-xhci: support host side of dual-role mode > dt-bindings: mt8173-mtu3: add devicetree bindings > usb: xhci-mtk: make IPPC register optional > usb: Add MediaTek USB3 DRD Driver > arm64: dts: mediatek: add USB3 DRD driver > > .../devicetree/bindings/usb/mt8173-mtu3.txt| 87 ++ > .../devicetree/bindings/usb/mt8173-xhci.txt| 54 +- > arch/arm64/boot/dts/mediatek/mt8173-evb.dts| 46 +- > arch/arm64/boot/dts/mediatek/mt8173.dtsi | 29 +- > drivers/usb/Kconfig|2 + > drivers/usb/Makefile |1 + > drivers/usb/host/xhci-mtk.c| 36 +- > drivers/usb/mtu3/Kconfig | 54 ++ > drivers/usb/mtu3/Makefile | 19 + > drivers/usb/mtu3/mtu3.h| 422 ++ > drivers/usb/mtu3/mtu3_core.c | 874 +++ > drivers/usb/mtu3/mtu3_dr.c | 375 + > drivers/usb/mtu3/mtu3_dr.h | 108 +++ > drivers/usb/mtu3/mtu3_gadget.c | 731 > drivers/usb/mtu3/mtu3_gadget_ep0.c | 879 > > drivers/usb/mtu3/mtu3_host.c | 294 +++ > drivers/usb/mtu3/mtu3_hw_regs.h| 473 +++ > drivers/usb/mtu3/mtu3_plat.c | 490 +++ > drivers/usb/mtu3/mtu3_qmu.c| 599 + > drivers/usb/mtu3/mtu3_qmu.h| 43 + > 20 files changed, 5598 insertions(+), 18 deletions(-) > create mode 100644 Documentation/devicetree/bindings/usb/mt8173-mtu3.txt > 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.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 >
Re: [PATCH V5, 0/5] Add MediaTek USB3 DRD Driver
Dear all, Could you please help me to review the code? Thank you very much. On Tue, 2016-08-09 at 16:23 +0800, Chunfeng Yun wrote: > These patches introduce the MediaTek USB3 dual-role controller > driver. > > The driver can be configured as Dual-Role Device (DRD), > Peripheral Only and Host Only (xHCI) modes. It works well > with Mass Storage, RNDIS and g_zero on FS/HS and SS. And it is > tested on MT8173 platform which only contains USB2.0 device IP, > and on MT6290 platform which contains USB3.0 device IP. > > Change in v5: > 1. modify some comments > 2. rename some unsuitable variables > 3. add reg-names property for host node > 4. add USB_MTU3_DEBUG to control debug messages > > Change in v4: > 1. fix build errors on non-mediatek platforms > 2. provide manual dual-role switch via debugfs instead of sysfs > > Change in v3: > 1. fix some typo error > 2. rename mtu3.txt to mt8173-mtu3.txt > > Change in v2: > 1. modify binding docs according to suggestions > 2. modify some comments and remove some dummy blank lines > 3. fix memory leakage > > > Chunfeng Yun (5): > dt-bindings: mt8173-xhci: support host side of dual-role mode > dt-bindings: mt8173-mtu3: add devicetree bindings > usb: xhci-mtk: make IPPC register optional > usb: Add MediaTek USB3 DRD Driver > arm64: dts: mediatek: add USB3 DRD driver > > .../devicetree/bindings/usb/mt8173-mtu3.txt| 87 ++ > .../devicetree/bindings/usb/mt8173-xhci.txt| 54 +- > arch/arm64/boot/dts/mediatek/mt8173-evb.dts| 46 +- > arch/arm64/boot/dts/mediatek/mt8173.dtsi | 29 +- > drivers/usb/Kconfig|2 + > drivers/usb/Makefile |1 + > drivers/usb/host/xhci-mtk.c| 36 +- > drivers/usb/mtu3/Kconfig | 54 ++ > drivers/usb/mtu3/Makefile | 19 + > drivers/usb/mtu3/mtu3.h| 422 ++ > drivers/usb/mtu3/mtu3_core.c | 874 +++ > drivers/usb/mtu3/mtu3_dr.c | 375 + > drivers/usb/mtu3/mtu3_dr.h | 108 +++ > drivers/usb/mtu3/mtu3_gadget.c | 731 > drivers/usb/mtu3/mtu3_gadget_ep0.c | 879 > > drivers/usb/mtu3/mtu3_host.c | 294 +++ > drivers/usb/mtu3/mtu3_hw_regs.h| 473 +++ > drivers/usb/mtu3/mtu3_plat.c | 490 +++ > drivers/usb/mtu3/mtu3_qmu.c| 599 + > drivers/usb/mtu3/mtu3_qmu.h| 43 + > 20 files changed, 5598 insertions(+), 18 deletions(-) > create mode 100644 Documentation/devicetree/bindings/usb/mt8173-mtu3.txt > 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.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 >
[PATCH v5,4/5] usb: Add MediaTek USB3 DRD Driver
This patch adds support for the MediaTek USB3 controller integrated into MT8173. It can be configured as Dual-Role Device (DRD), Peripheral Only and Host Only (xHCI) modes. Signed-off-by: Chunfeng Yun--- drivers/usb/Kconfig|2 + drivers/usb/Makefile |1 + drivers/usb/mtu3/Kconfig | 54 +++ drivers/usb/mtu3/Makefile | 19 + drivers/usb/mtu3/mtu3.h| 422 + drivers/usb/mtu3/mtu3_core.c | 874 +++ drivers/usb/mtu3/mtu3_dr.c | 375 +++ drivers/usb/mtu3/mtu3_dr.h | 108 + drivers/usb/mtu3/mtu3_gadget.c | 731 ++ drivers/usb/mtu3/mtu3_gadget_ep0.c | 879 drivers/usb/mtu3/mtu3_host.c | 294 drivers/usb/mtu3/mtu3_hw_regs.h| 473 +++ drivers/usb/mtu3/mtu3_plat.c | 490 drivers/usb/mtu3/mtu3_qmu.c| 599 drivers/usb/mtu3/mtu3_qmu.h| 43 ++ 15 files changed, 5364 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.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/drivers/usb/Kconfig b/drivers/usb/Kconfig index 8689dcb..9ca0bf0 100644 --- a/drivers/usb/Kconfig +++ b/drivers/usb/Kconfig @@ -95,6 +95,8 @@ source "drivers/usb/usbip/Kconfig" endif +source "drivers/usb/mtu3/Kconfig" + source "drivers/usb/musb/Kconfig" source "drivers/usb/dwc3/Kconfig" diff --git a/drivers/usb/Makefile b/drivers/usb/Makefile index dca7856..7791af6 100644 --- a/drivers/usb/Makefile +++ b/drivers/usb/Makefile @@ -12,6 +12,7 @@ obj-$(CONFIG_USB_DWC2)+= dwc2/ obj-$(CONFIG_USB_ISP1760) += isp1760/ obj-$(CONFIG_USB_MON) += mon/ +obj-$(CONFIG_USB_MTU3) += mtu3/ obj-$(CONFIG_PCI) += host/ obj-$(CONFIG_USB_EHCI_HCD) += host/ diff --git a/drivers/usb/mtu3/Kconfig b/drivers/usb/mtu3/Kconfig new file mode 100644 index 000..25cd619 --- /dev/null +++ b/drivers/usb/mtu3/Kconfig @@ -0,0 +1,54 @@ +# For MTK USB3.0 IP + +config USB_MTU3 + tristate "MediaTek USB3 Dual Role controller" + depends on EXTCON && (USB || USB_GADGET) && HAS_DMA + depends on ARCH_MEDIATEK || COMPILE_TEST + select USB_XHCI_MTK if USB_SUPPORT && USB_XHCI_HCD + help + Say Y or M 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, or both. + + If you don't know what this is, please say N. + + Choose M here to compile this driver as a module, and it + will be called mtu3.ko. + + +if USB_MTU3 +choice + bool "MTU3 Mode Selection" + default USB_MTU3_DUAL_ROLE if (USB && USB_GADGET) + default USB_MTU3_HOST if (USB && !USB_GADGET) + default USB_MTU3_GADGET if (!USB && USB_GADGET) + +config USB_MTU3_HOST + bool "Host only mode" + depends on USB=y || USB=USB_MTU3 + 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 + help + Select this when you want to use MTU3 in gadget mode only, + thereby the host feature will be regressed. + +config USB_MTU3_DUAL_ROLE + bool "Dual Role mode" + depends on ((USB=y || USB=USB_MTU3) && (USB_GADGET=y || USB_GADGET=USB_MTU3)) + help + This is the default mode of working of MTU3 controller where + both host and gadget features are enabled. + +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 000..3e17ff7 --- /dev/null +++ b/drivers/usb/mtu3/Makefile @@ -0,0 +1,19 @@ + +ccflags-$(CONFIG_USB_MTU3_DEBUG) += -DDEBUG + +obj-$(CONFIG_USB_MTU3) += mtu3.o + +mtu3-y := mtu3_plat.o + +ifneq ($(filter y,$(CONFIG_USB_MTU3_HOST) $(CONFIG_USB_MTU3_DUAL_ROLE)),) + mtu3-y += mtu3_host.o +endif + +ifneq ($(filter y,$(CONFIG_USB_MTU3_GADGET) $(CONFIG_USB_MTU3_DUAL_ROLE)),) + mtu3-y += mtu3_core.o
[PATCH v5,4/5] usb: Add MediaTek USB3 DRD Driver
This patch adds support for the MediaTek USB3 controller integrated into MT8173. It can be configured as Dual-Role Device (DRD), Peripheral Only and Host Only (xHCI) modes. Signed-off-by: Chunfeng Yun --- drivers/usb/Kconfig|2 + drivers/usb/Makefile |1 + drivers/usb/mtu3/Kconfig | 54 +++ drivers/usb/mtu3/Makefile | 19 + drivers/usb/mtu3/mtu3.h| 422 + drivers/usb/mtu3/mtu3_core.c | 874 +++ drivers/usb/mtu3/mtu3_dr.c | 375 +++ drivers/usb/mtu3/mtu3_dr.h | 108 + drivers/usb/mtu3/mtu3_gadget.c | 731 ++ drivers/usb/mtu3/mtu3_gadget_ep0.c | 879 drivers/usb/mtu3/mtu3_host.c | 294 drivers/usb/mtu3/mtu3_hw_regs.h| 473 +++ drivers/usb/mtu3/mtu3_plat.c | 490 drivers/usb/mtu3/mtu3_qmu.c| 599 drivers/usb/mtu3/mtu3_qmu.h| 43 ++ 15 files changed, 5364 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.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/drivers/usb/Kconfig b/drivers/usb/Kconfig index 8689dcb..9ca0bf0 100644 --- a/drivers/usb/Kconfig +++ b/drivers/usb/Kconfig @@ -95,6 +95,8 @@ source "drivers/usb/usbip/Kconfig" endif +source "drivers/usb/mtu3/Kconfig" + source "drivers/usb/musb/Kconfig" source "drivers/usb/dwc3/Kconfig" diff --git a/drivers/usb/Makefile b/drivers/usb/Makefile index dca7856..7791af6 100644 --- a/drivers/usb/Makefile +++ b/drivers/usb/Makefile @@ -12,6 +12,7 @@ obj-$(CONFIG_USB_DWC2)+= dwc2/ obj-$(CONFIG_USB_ISP1760) += isp1760/ obj-$(CONFIG_USB_MON) += mon/ +obj-$(CONFIG_USB_MTU3) += mtu3/ obj-$(CONFIG_PCI) += host/ obj-$(CONFIG_USB_EHCI_HCD) += host/ diff --git a/drivers/usb/mtu3/Kconfig b/drivers/usb/mtu3/Kconfig new file mode 100644 index 000..25cd619 --- /dev/null +++ b/drivers/usb/mtu3/Kconfig @@ -0,0 +1,54 @@ +# For MTK USB3.0 IP + +config USB_MTU3 + tristate "MediaTek USB3 Dual Role controller" + depends on EXTCON && (USB || USB_GADGET) && HAS_DMA + depends on ARCH_MEDIATEK || COMPILE_TEST + select USB_XHCI_MTK if USB_SUPPORT && USB_XHCI_HCD + help + Say Y or M 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, or both. + + If you don't know what this is, please say N. + + Choose M here to compile this driver as a module, and it + will be called mtu3.ko. + + +if USB_MTU3 +choice + bool "MTU3 Mode Selection" + default USB_MTU3_DUAL_ROLE if (USB && USB_GADGET) + default USB_MTU3_HOST if (USB && !USB_GADGET) + default USB_MTU3_GADGET if (!USB && USB_GADGET) + +config USB_MTU3_HOST + bool "Host only mode" + depends on USB=y || USB=USB_MTU3 + 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 + help + Select this when you want to use MTU3 in gadget mode only, + thereby the host feature will be regressed. + +config USB_MTU3_DUAL_ROLE + bool "Dual Role mode" + depends on ((USB=y || USB=USB_MTU3) && (USB_GADGET=y || USB_GADGET=USB_MTU3)) + help + This is the default mode of working of MTU3 controller where + both host and gadget features are enabled. + +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 000..3e17ff7 --- /dev/null +++ b/drivers/usb/mtu3/Makefile @@ -0,0 +1,19 @@ + +ccflags-$(CONFIG_USB_MTU3_DEBUG) += -DDEBUG + +obj-$(CONFIG_USB_MTU3) += mtu3.o + +mtu3-y := mtu3_plat.o + +ifneq ($(filter y,$(CONFIG_USB_MTU3_HOST) $(CONFIG_USB_MTU3_DUAL_ROLE)),) + mtu3-y += mtu3_host.o +endif + +ifneq ($(filter y,$(CONFIG_USB_MTU3_GADGET) $(CONFIG_USB_MTU3_DUAL_ROLE)),) + mtu3-y += mtu3_core.o mtu3_gadget_ep0.o mtu3_gadget.o
[PATCH V5, 0/5] Add MediaTek USB3 DRD Driver
These patches introduce the MediaTek USB3 dual-role controller driver. The driver can be configured as Dual-Role Device (DRD), Peripheral Only and Host Only (xHCI) modes. It works well with Mass Storage, RNDIS and g_zero on FS/HS and SS. And it is tested on MT8173 platform which only contains USB2.0 device IP, and on MT6290 platform which contains USB3.0 device IP. Change in v5: 1. modify some comments 2. rename some unsuitable variables 3. add reg-names property for host node 4. add USB_MTU3_DEBUG to control debug messages Change in v4: 1. fix build errors on non-mediatek platforms 2. provide manual dual-role switch via debugfs instead of sysfs Change in v3: 1. fix some typo error 2. rename mtu3.txt to mt8173-mtu3.txt Change in v2: 1. modify binding docs according to suggestions 2. modify some comments and remove some dummy blank lines 3. fix memory leakage Chunfeng Yun (5): dt-bindings: mt8173-xhci: support host side of dual-role mode dt-bindings: mt8173-mtu3: add devicetree bindings usb: xhci-mtk: make IPPC register optional usb: Add MediaTek USB3 DRD Driver arm64: dts: mediatek: add USB3 DRD driver .../devicetree/bindings/usb/mt8173-mtu3.txt| 87 ++ .../devicetree/bindings/usb/mt8173-xhci.txt| 54 +- arch/arm64/boot/dts/mediatek/mt8173-evb.dts| 46 +- arch/arm64/boot/dts/mediatek/mt8173.dtsi | 29 +- drivers/usb/Kconfig|2 + drivers/usb/Makefile |1 + drivers/usb/host/xhci-mtk.c| 36 +- drivers/usb/mtu3/Kconfig | 54 ++ drivers/usb/mtu3/Makefile | 19 + drivers/usb/mtu3/mtu3.h| 422 ++ drivers/usb/mtu3/mtu3_core.c | 874 +++ drivers/usb/mtu3/mtu3_dr.c | 375 + drivers/usb/mtu3/mtu3_dr.h | 108 +++ drivers/usb/mtu3/mtu3_gadget.c | 731 drivers/usb/mtu3/mtu3_gadget_ep0.c | 879 drivers/usb/mtu3/mtu3_host.c | 294 +++ drivers/usb/mtu3/mtu3_hw_regs.h| 473 +++ drivers/usb/mtu3/mtu3_plat.c | 490 +++ drivers/usb/mtu3/mtu3_qmu.c| 599 + drivers/usb/mtu3/mtu3_qmu.h| 43 + 20 files changed, 5598 insertions(+), 18 deletions(-) create mode 100644 Documentation/devicetree/bindings/usb/mt8173-mtu3.txt 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.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 -- 1.7.9.5
[PATCH V5, 0/5] Add MediaTek USB3 DRD Driver
These patches introduce the MediaTek USB3 dual-role controller driver. The driver can be configured as Dual-Role Device (DRD), Peripheral Only and Host Only (xHCI) modes. It works well with Mass Storage, RNDIS and g_zero on FS/HS and SS. And it is tested on MT8173 platform which only contains USB2.0 device IP, and on MT6290 platform which contains USB3.0 device IP. Change in v5: 1. modify some comments 2. rename some unsuitable variables 3. add reg-names property for host node 4. add USB_MTU3_DEBUG to control debug messages Change in v4: 1. fix build errors on non-mediatek platforms 2. provide manual dual-role switch via debugfs instead of sysfs Change in v3: 1. fix some typo error 2. rename mtu3.txt to mt8173-mtu3.txt Change in v2: 1. modify binding docs according to suggestions 2. modify some comments and remove some dummy blank lines 3. fix memory leakage Chunfeng Yun (5): dt-bindings: mt8173-xhci: support host side of dual-role mode dt-bindings: mt8173-mtu3: add devicetree bindings usb: xhci-mtk: make IPPC register optional usb: Add MediaTek USB3 DRD Driver arm64: dts: mediatek: add USB3 DRD driver .../devicetree/bindings/usb/mt8173-mtu3.txt| 87 ++ .../devicetree/bindings/usb/mt8173-xhci.txt| 54 +- arch/arm64/boot/dts/mediatek/mt8173-evb.dts| 46 +- arch/arm64/boot/dts/mediatek/mt8173.dtsi | 29 +- drivers/usb/Kconfig|2 + drivers/usb/Makefile |1 + drivers/usb/host/xhci-mtk.c| 36 +- drivers/usb/mtu3/Kconfig | 54 ++ drivers/usb/mtu3/Makefile | 19 + drivers/usb/mtu3/mtu3.h| 422 ++ drivers/usb/mtu3/mtu3_core.c | 874 +++ drivers/usb/mtu3/mtu3_dr.c | 375 + drivers/usb/mtu3/mtu3_dr.h | 108 +++ drivers/usb/mtu3/mtu3_gadget.c | 731 drivers/usb/mtu3/mtu3_gadget_ep0.c | 879 drivers/usb/mtu3/mtu3_host.c | 294 +++ drivers/usb/mtu3/mtu3_hw_regs.h| 473 +++ drivers/usb/mtu3/mtu3_plat.c | 490 +++ drivers/usb/mtu3/mtu3_qmu.c| 599 + drivers/usb/mtu3/mtu3_qmu.h| 43 + 20 files changed, 5598 insertions(+), 18 deletions(-) create mode 100644 Documentation/devicetree/bindings/usb/mt8173-mtu3.txt 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.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 -- 1.7.9.5
Re: [PATCH v3,4/5] usb: Add MediaTek USB3 DRD Driver
Hi, On Mon, 2016-08-08 at 15:10 +0200, Greg Kroah-Hartman wrote: > On Fri, Jun 10, 2016 at 03:32:41PM +0800, Chunfeng Yun wrote: > > --- /dev/null > > +++ b/drivers/usb/mtu3/Makefile > > @@ -0,0 +1,20 @@ > > + > > +#ifeq ($(CONFIG_USB_DEBUG),y) > > + ccflags-y += -DDEBUG > > +#endif > > There is no CONFIG_USB_DEBUG in the tree anymore, are you sure you > tested this? :) > Sorry, I just commented it out here and didn't enable it. I modify it now. Thank you > thanks, > > greg k-h
Re: [PATCH v3,4/5] usb: Add MediaTek USB3 DRD Driver
Hi, On Mon, 2016-08-08 at 15:10 +0200, Greg Kroah-Hartman wrote: > On Fri, Jun 10, 2016 at 03:32:41PM +0800, Chunfeng Yun wrote: > > --- /dev/null > > +++ b/drivers/usb/mtu3/Makefile > > @@ -0,0 +1,20 @@ > > + > > +#ifeq ($(CONFIG_USB_DEBUG),y) > > + ccflags-y += -DDEBUG > > +#endif > > There is no CONFIG_USB_DEBUG in the tree anymore, are you sure you > tested this? :) > Sorry, I just commented it out here and didn't enable it. I modify it now. Thank you > thanks, > > greg k-h
Re: [PATCH v3,4/5] usb: Add MediaTek USB3 DRD Driver
On Fri, Jun 10, 2016 at 03:32:41PM +0800, Chunfeng Yun wrote: > --- /dev/null > +++ b/drivers/usb/mtu3/Makefile > @@ -0,0 +1,20 @@ > + > +#ifeq ($(CONFIG_USB_DEBUG),y) > + ccflags-y += -DDEBUG > +#endif There is no CONFIG_USB_DEBUG in the tree anymore, are you sure you tested this? :) thanks, greg k-h
Re: [PATCH v3,4/5] usb: Add MediaTek USB3 DRD Driver
On Fri, Jun 10, 2016 at 03:32:41PM +0800, Chunfeng Yun wrote: > --- /dev/null > +++ b/drivers/usb/mtu3/Makefile > @@ -0,0 +1,20 @@ > + > +#ifeq ($(CONFIG_USB_DEBUG),y) > + ccflags-y += -DDEBUG > +#endif There is no CONFIG_USB_DEBUG in the tree anymore, are you sure you tested this? :) thanks, greg k-h
Re: Add MediaTek USB3 DRD Driver
Hi Felipe: Could you please give me some suggestions if you have already reviewed some codes. Thanks a lot. On Wed, 2016-06-15 at 11:07 +0800, Chunfeng Yun wrote: > From 48552e96e4e33f8830cb6a59154fe148425532fd Mon Sep 17 00:00:00 2001 > From: Chunfeng Yun <chunfeng@mediatek.com> > Date: Wed, 15 Jun 2016 10:58:10 +0800 > Subject: [PATCH v4,0/5] Add MediaTek USB3 DRD Driver > > These patches introduce the MediaTek USB3 dual-role controller > driver. > > The driver can be configured as Dual-Role Device (DRD), > Peripheral Only and Host Only (xHCI) modes. It works well > with Mass Storage, RNDIS and g_zero on FS/HS and SS. And it is > tested on MT8173 platform which only contains USB2.0 device IP, > and on MT6290 platform which contains USB3.0 device IP. > > Change in v4: > 1. fix build errors on non-mediatek platforms > 2. provide manual dual-role switch via debugfs instead of sysfs > > -- > 1.7.9.5 > >
Re: Add MediaTek USB3 DRD Driver
Hi Felipe: Could you please give me some suggestions if you have already reviewed some codes. Thanks a lot. On Wed, 2016-06-15 at 11:07 +0800, Chunfeng Yun wrote: > From 48552e96e4e33f8830cb6a59154fe148425532fd Mon Sep 17 00:00:00 2001 > From: Chunfeng Yun > Date: Wed, 15 Jun 2016 10:58:10 +0800 > Subject: [PATCH v4,0/5] Add MediaTek USB3 DRD Driver > > These patches introduce the MediaTek USB3 dual-role controller > driver. > > The driver can be configured as Dual-Role Device (DRD), > Peripheral Only and Host Only (xHCI) modes. It works well > with Mass Storage, RNDIS and g_zero on FS/HS and SS. And it is > tested on MT8173 platform which only contains USB2.0 device IP, > and on MT6290 platform which contains USB3.0 device IP. > > Change in v4: > 1. fix build errors on non-mediatek platforms > 2. provide manual dual-role switch via debugfs instead of sysfs > > -- > 1.7.9.5 > >
Add MediaTek USB3 DRD Driver
>From 48552e96e4e33f8830cb6a59154fe148425532fd Mon Sep 17 00:00:00 2001 From: Chunfeng Yun <chunfeng@mediatek.com> Date: Wed, 15 Jun 2016 10:58:10 +0800 Subject: [PATCH v4,0/5] Add MediaTek USB3 DRD Driver These patches introduce the MediaTek USB3 dual-role controller driver. The driver can be configured as Dual-Role Device (DRD), Peripheral Only and Host Only (xHCI) modes. It works well with Mass Storage, RNDIS and g_zero on FS/HS and SS. And it is tested on MT8173 platform which only contains USB2.0 device IP, and on MT6290 platform which contains USB3.0 device IP. Change in v4: 1. fix build errors on non-mediatek platforms 2. provide manual dual-role switch via debugfs instead of sysfs Change in v3: 1. fix some typo error 2. rename mtu3.txt to mt8173-mtu3.txt Change in v2: 1. modify binding docs according to suggestions 2. modify some comments and remove some dummy blank lines 3. fix memory leakage Chunfeng Yun (5): dt-bindings: mt8173-xhci: support host side of dual-role mode dt-bindings: mt8173-mtu3: add devicetree bindings usb: xhci-mtk: make IPPC register optional usb: Add MediaTek USB3 DRD Driver arm64: dts: mediatek: add USB3 DRD driver .../devicetree/bindings/usb/mt8173-mtu3.txt| 86 ++ .../devicetree/bindings/usb/mt8173-xhci.txt| 48 ++ arch/arm64/boot/dts/mediatek/mt8173-evb.dts| 46 +- arch/arm64/boot/dts/mediatek/mt8173.dtsi | 28 +- drivers/usb/Kconfig|2 + drivers/usb/Makefile |1 + drivers/usb/host/xhci-mtk.c| 32 +- drivers/usb/mtu3/Kconfig | 48 ++ drivers/usb/mtu3/Makefile | 21 + drivers/usb/mtu3/mtu3.h| 424 ++ drivers/usb/mtu3/mtu3_core.c | 879 drivers/usb/mtu3/mtu3_dr.c | 375 + drivers/usb/mtu3/mtu3_dr.h | 108 +++ drivers/usb/mtu3/mtu3_gadget.c | 731 drivers/usb/mtu3/mtu3_gadget_ep0.c | 879 drivers/usb/mtu3/mtu3_host.c | 294 +++ drivers/usb/mtu3/mtu3_hw_regs.h| 474 +++ drivers/usb/mtu3/mtu3_plat.c | 490 +++ drivers/usb/mtu3/mtu3_qmu.c| 599 + drivers/usb/mtu3/mtu3_qmu.h| 43 + 20 files changed, 5594 insertions(+), 14 deletions(-) create mode 100644 Documentation/devicetree/bindings/usb/mt8173-mtu3.txt 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.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 -- 1.7.9.5
Add MediaTek USB3 DRD Driver
>From 48552e96e4e33f8830cb6a59154fe148425532fd Mon Sep 17 00:00:00 2001 From: Chunfeng Yun Date: Wed, 15 Jun 2016 10:58:10 +0800 Subject: [PATCH v4,0/5] Add MediaTek USB3 DRD Driver These patches introduce the MediaTek USB3 dual-role controller driver. The driver can be configured as Dual-Role Device (DRD), Peripheral Only and Host Only (xHCI) modes. It works well with Mass Storage, RNDIS and g_zero on FS/HS and SS. And it is tested on MT8173 platform which only contains USB2.0 device IP, and on MT6290 platform which contains USB3.0 device IP. Change in v4: 1. fix build errors on non-mediatek platforms 2. provide manual dual-role switch via debugfs instead of sysfs Change in v3: 1. fix some typo error 2. rename mtu3.txt to mt8173-mtu3.txt Change in v2: 1. modify binding docs according to suggestions 2. modify some comments and remove some dummy blank lines 3. fix memory leakage Chunfeng Yun (5): dt-bindings: mt8173-xhci: support host side of dual-role mode dt-bindings: mt8173-mtu3: add devicetree bindings usb: xhci-mtk: make IPPC register optional usb: Add MediaTek USB3 DRD Driver arm64: dts: mediatek: add USB3 DRD driver .../devicetree/bindings/usb/mt8173-mtu3.txt| 86 ++ .../devicetree/bindings/usb/mt8173-xhci.txt| 48 ++ arch/arm64/boot/dts/mediatek/mt8173-evb.dts| 46 +- arch/arm64/boot/dts/mediatek/mt8173.dtsi | 28 +- drivers/usb/Kconfig|2 + drivers/usb/Makefile |1 + drivers/usb/host/xhci-mtk.c| 32 +- drivers/usb/mtu3/Kconfig | 48 ++ drivers/usb/mtu3/Makefile | 21 + drivers/usb/mtu3/mtu3.h| 424 ++ drivers/usb/mtu3/mtu3_core.c | 879 drivers/usb/mtu3/mtu3_dr.c | 375 + drivers/usb/mtu3/mtu3_dr.h | 108 +++ drivers/usb/mtu3/mtu3_gadget.c | 731 drivers/usb/mtu3/mtu3_gadget_ep0.c | 879 drivers/usb/mtu3/mtu3_host.c | 294 +++ drivers/usb/mtu3/mtu3_hw_regs.h| 474 +++ drivers/usb/mtu3/mtu3_plat.c | 490 +++ drivers/usb/mtu3/mtu3_qmu.c| 599 + drivers/usb/mtu3/mtu3_qmu.h| 43 + 20 files changed, 5594 insertions(+), 14 deletions(-) create mode 100644 Documentation/devicetree/bindings/usb/mt8173-mtu3.txt 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.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 -- 1.7.9.5
[PATCH v4,4/5] usb: Add MediaTek USB3 DRD Driver
This patch adds support for the MediaTek USB3 controller integrated into MT8173. It can be configured as Dual-Role Device (DRD), Peripheral Only and Host Only (xHCI) modes. Signed-off-by: Chunfeng Yun--- drivers/usb/Kconfig|2 + drivers/usb/Makefile |1 + drivers/usb/mtu3/Kconfig | 48 ++ drivers/usb/mtu3/Makefile | 21 + drivers/usb/mtu3/mtu3.h| 424 + drivers/usb/mtu3/mtu3_core.c | 879 drivers/usb/mtu3/mtu3_dr.c | 375 +++ drivers/usb/mtu3/mtu3_dr.h | 108 + drivers/usb/mtu3/mtu3_gadget.c | 731 ++ drivers/usb/mtu3/mtu3_gadget_ep0.c | 879 drivers/usb/mtu3/mtu3_host.c | 294 drivers/usb/mtu3/mtu3_hw_regs.h| 474 +++ drivers/usb/mtu3/mtu3_plat.c | 490 drivers/usb/mtu3/mtu3_qmu.c| 599 drivers/usb/mtu3/mtu3_qmu.h| 43 ++ 15 files changed, 5368 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.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/drivers/usb/Kconfig b/drivers/usb/Kconfig index 8689dcb..9ca0bf0 100644 --- a/drivers/usb/Kconfig +++ b/drivers/usb/Kconfig @@ -95,6 +95,8 @@ source "drivers/usb/usbip/Kconfig" endif +source "drivers/usb/mtu3/Kconfig" + source "drivers/usb/musb/Kconfig" source "drivers/usb/dwc3/Kconfig" diff --git a/drivers/usb/Makefile b/drivers/usb/Makefile index dca7856..7791af6 100644 --- a/drivers/usb/Makefile +++ b/drivers/usb/Makefile @@ -12,6 +12,7 @@ obj-$(CONFIG_USB_DWC2)+= dwc2/ obj-$(CONFIG_USB_ISP1760) += isp1760/ obj-$(CONFIG_USB_MON) += mon/ +obj-$(CONFIG_USB_MTU3) += mtu3/ obj-$(CONFIG_PCI) += host/ obj-$(CONFIG_USB_EHCI_HCD) += host/ diff --git a/drivers/usb/mtu3/Kconfig b/drivers/usb/mtu3/Kconfig new file mode 100644 index 000..929ff51 --- /dev/null +++ b/drivers/usb/mtu3/Kconfig @@ -0,0 +1,48 @@ +# For MTK USB3.0 IP + +config USB_MTU3 + tristate "MediaTek USB3 Dual Role controller" + depends on EXTCON && (USB || USB_GADGET) && HAS_DMA + depends on ARCH_MEDIATEK || COMPILE_TEST + select USB_XHCI_MTK if USB_SUPPORT && USB_XHCI_HCD + help + Say Y or M 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, or both. + + If you don't know what this is, please say N. + + Choose M here to compile this driver as a module, and it + will be called mtu3.ko. + + +if USB_MTU3 +choice + bool "MTU3 Mode Selection" + default USB_MTU3_DUAL_ROLE if (USB && USB_GADGET) + default USB_MTU3_HOST if (USB && !USB_GADGET) + default USB_MTU3_GADGET if (!USB && USB_GADGET) + +config USB_MTU3_HOST + bool "Host only mode" + depends on USB=y || USB=USB_MTU3 + 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 + help + Select this when you want to use MTU3 in gadget mode only, + thereby the host feature will be regressed. + +config USB_MTU3_DUAL_ROLE + bool "Dual Role mode" + depends on ((USB=y || USB=USB_MTU3) && (USB_GADGET=y || USB_GADGET=USB_MTU3)) + help + This is the default mode of working of MTU3 controller where + both host and gadget features are enabled. + +endchoice +endif diff --git a/drivers/usb/mtu3/Makefile b/drivers/usb/mtu3/Makefile new file mode 100644 index 000..4307ab9 --- /dev/null +++ b/drivers/usb/mtu3/Makefile @@ -0,0 +1,21 @@ + +#ifeq ($(CONFIG_USB_DEBUG),y) + ccflags-y += -DDEBUG +#endif + +obj-$(CONFIG_USB_MTU3) += mtu3.o + +mtu3-y := mtu3_plat.o + +ifneq ($(filter y,$(CONFIG_USB_MTU3_HOST) $(CONFIG_USB_MTU3_DUAL_ROLE)),) + mtu3-y += mtu3_host.o +endif + +ifneq ($(filter y,$(CONFIG_USB_MTU3_GADGET) $(CONFIG_USB_MTU3_DUAL_ROLE)),) + mtu3-y += mtu3_core.o mtu3_gadget_ep0.o mtu3_gadget.o mtu3_qmu.o +endif + +ifneq ($(CONFIG_USB_MTU3_DUAL_ROLE),) + mtu3-y += mtu3_dr.o +endif + diff --git
[PATCH v4,4/5] usb: Add MediaTek USB3 DRD Driver
This patch adds support for the MediaTek USB3 controller integrated into MT8173. It can be configured as Dual-Role Device (DRD), Peripheral Only and Host Only (xHCI) modes. Signed-off-by: Chunfeng Yun --- drivers/usb/Kconfig|2 + drivers/usb/Makefile |1 + drivers/usb/mtu3/Kconfig | 48 ++ drivers/usb/mtu3/Makefile | 21 + drivers/usb/mtu3/mtu3.h| 424 + drivers/usb/mtu3/mtu3_core.c | 879 drivers/usb/mtu3/mtu3_dr.c | 375 +++ drivers/usb/mtu3/mtu3_dr.h | 108 + drivers/usb/mtu3/mtu3_gadget.c | 731 ++ drivers/usb/mtu3/mtu3_gadget_ep0.c | 879 drivers/usb/mtu3/mtu3_host.c | 294 drivers/usb/mtu3/mtu3_hw_regs.h| 474 +++ drivers/usb/mtu3/mtu3_plat.c | 490 drivers/usb/mtu3/mtu3_qmu.c| 599 drivers/usb/mtu3/mtu3_qmu.h| 43 ++ 15 files changed, 5368 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.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/drivers/usb/Kconfig b/drivers/usb/Kconfig index 8689dcb..9ca0bf0 100644 --- a/drivers/usb/Kconfig +++ b/drivers/usb/Kconfig @@ -95,6 +95,8 @@ source "drivers/usb/usbip/Kconfig" endif +source "drivers/usb/mtu3/Kconfig" + source "drivers/usb/musb/Kconfig" source "drivers/usb/dwc3/Kconfig" diff --git a/drivers/usb/Makefile b/drivers/usb/Makefile index dca7856..7791af6 100644 --- a/drivers/usb/Makefile +++ b/drivers/usb/Makefile @@ -12,6 +12,7 @@ obj-$(CONFIG_USB_DWC2)+= dwc2/ obj-$(CONFIG_USB_ISP1760) += isp1760/ obj-$(CONFIG_USB_MON) += mon/ +obj-$(CONFIG_USB_MTU3) += mtu3/ obj-$(CONFIG_PCI) += host/ obj-$(CONFIG_USB_EHCI_HCD) += host/ diff --git a/drivers/usb/mtu3/Kconfig b/drivers/usb/mtu3/Kconfig new file mode 100644 index 000..929ff51 --- /dev/null +++ b/drivers/usb/mtu3/Kconfig @@ -0,0 +1,48 @@ +# For MTK USB3.0 IP + +config USB_MTU3 + tristate "MediaTek USB3 Dual Role controller" + depends on EXTCON && (USB || USB_GADGET) && HAS_DMA + depends on ARCH_MEDIATEK || COMPILE_TEST + select USB_XHCI_MTK if USB_SUPPORT && USB_XHCI_HCD + help + Say Y or M 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, or both. + + If you don't know what this is, please say N. + + Choose M here to compile this driver as a module, and it + will be called mtu3.ko. + + +if USB_MTU3 +choice + bool "MTU3 Mode Selection" + default USB_MTU3_DUAL_ROLE if (USB && USB_GADGET) + default USB_MTU3_HOST if (USB && !USB_GADGET) + default USB_MTU3_GADGET if (!USB && USB_GADGET) + +config USB_MTU3_HOST + bool "Host only mode" + depends on USB=y || USB=USB_MTU3 + 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 + help + Select this when you want to use MTU3 in gadget mode only, + thereby the host feature will be regressed. + +config USB_MTU3_DUAL_ROLE + bool "Dual Role mode" + depends on ((USB=y || USB=USB_MTU3) && (USB_GADGET=y || USB_GADGET=USB_MTU3)) + help + This is the default mode of working of MTU3 controller where + both host and gadget features are enabled. + +endchoice +endif diff --git a/drivers/usb/mtu3/Makefile b/drivers/usb/mtu3/Makefile new file mode 100644 index 000..4307ab9 --- /dev/null +++ b/drivers/usb/mtu3/Makefile @@ -0,0 +1,21 @@ + +#ifeq ($(CONFIG_USB_DEBUG),y) + ccflags-y += -DDEBUG +#endif + +obj-$(CONFIG_USB_MTU3) += mtu3.o + +mtu3-y := mtu3_plat.o + +ifneq ($(filter y,$(CONFIG_USB_MTU3_HOST) $(CONFIG_USB_MTU3_DUAL_ROLE)),) + mtu3-y += mtu3_host.o +endif + +ifneq ($(filter y,$(CONFIG_USB_MTU3_GADGET) $(CONFIG_USB_MTU3_DUAL_ROLE)),) + mtu3-y += mtu3_core.o mtu3_gadget_ep0.o mtu3_gadget.o mtu3_qmu.o +endif + +ifneq ($(CONFIG_USB_MTU3_DUAL_ROLE),) + mtu3-y += mtu3_dr.o +endif + diff --git a/drivers/usb/mtu3/mtu3.h
Re: [PATCH v3,4/5] usb: Add MediaTek USB3 DRD Driver
Hi, [auto build test ERROR on usb/usb-testing] [also build test ERROR on v4.7-rc2 next-20160609] [if your patch is applied to the wrong git tree, please drop us a note to help improve the system] url: https://github.com/0day-ci/linux/commits/Chunfeng-Yun/usb-Add-MediaTek-USB3-DRD-Driver/20160610-153559 base: https://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb.git usb-testing config: i386-randconfig-x011-06120748 (attached as .config) compiler: gcc-6 (Debian 6.1.1-1) 6.1.1 20160430 reproduce: # save the attached .config to linux build tree make ARCH=i386 All error/warnings (new ones prefixed by >>): warning: (USB_MTU3) selects USB_XHCI_MTK which has unmet direct dependencies (USB_SUPPORT && USB && USB_XHCI_HCD && (ARCH_MEDIATEK || COMPILE_TEST)) drivers/built-in.o: In function `mtu3_probe': >> mtu3_plat.c:(.text+0x21471d): undefined reference to >> `extcon_get_edev_by_phandle' --- 0-DAY kernel test infrastructureOpen Source Technology Center https://lists.01.org/pipermail/kbuild-all Intel Corporation .config.gz Description: Binary data
Re: [PATCH v3,4/5] usb: Add MediaTek USB3 DRD Driver
Hi, [auto build test ERROR on usb/usb-testing] [also build test ERROR on v4.7-rc2 next-20160609] [if your patch is applied to the wrong git tree, please drop us a note to help improve the system] url: https://github.com/0day-ci/linux/commits/Chunfeng-Yun/usb-Add-MediaTek-USB3-DRD-Driver/20160610-153559 base: https://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb.git usb-testing config: i386-randconfig-x011-06120748 (attached as .config) compiler: gcc-6 (Debian 6.1.1-1) 6.1.1 20160430 reproduce: # save the attached .config to linux build tree make ARCH=i386 All error/warnings (new ones prefixed by >>): warning: (USB_MTU3) selects USB_XHCI_MTK which has unmet direct dependencies (USB_SUPPORT && USB && USB_XHCI_HCD && (ARCH_MEDIATEK || COMPILE_TEST)) drivers/built-in.o: In function `mtu3_probe': >> mtu3_plat.c:(.text+0x21471d): undefined reference to >> `extcon_get_edev_by_phandle' --- 0-DAY kernel test infrastructureOpen Source Technology Center https://lists.01.org/pipermail/kbuild-all Intel Corporation .config.gz Description: Binary data
Re: [PATCH v3,4/5] usb: Add MediaTek USB3 DRD Driver
Hi, [auto build test ERROR on usb/usb-testing] [also build test ERROR on v4.7-rc2 next-20160609] [if your patch is applied to the wrong git tree, please drop us a note to help improve the system] url: https://github.com/0day-ci/linux/commits/Chunfeng-Yun/usb-Add-MediaTek-USB3-DRD-Driver/20160610-153559 base: https://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb.git usb-testing config: blackfin-allmodconfig (attached as .config) compiler: bfin-uclinux-gcc (GCC) 4.6.3 reproduce: wget https://git.kernel.org/cgit/linux/kernel/git/wfg/lkp-tests.git/plain/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross # save the attached .config to linux build tree make.cross ARCH=blackfin All errors (new ones prefixed by >>): drivers/usb/mtu3/mtu3_dr.c: In function 'ssusb_mode_sysfs_switch': >> drivers/usb/mtu3/mtu3_dr.c:271:3: error: implicit declaration of function >> 'pinctrl_select_state' [-Werror=implicit-function-declaration] cc1: some warnings being treated as errors vim +/pinctrl_select_state +271 drivers/usb/mtu3/mtu3_dr.c 265 struct otg_switch_mtk *otg_sx = >otg_switch; 266 267 if (!otg_sx->manual_drd_enabled) 268 return; 269 270 if (to_host) > 271 pinctrl_select_state(otg_sx->id_pinctrl, > otg_sx->id_ground); 272 else 273 pinctrl_select_state(otg_sx->id_pinctrl, otg_sx->id_float); 274 } --- 0-DAY kernel test infrastructureOpen Source Technology Center https://lists.01.org/pipermail/kbuild-all Intel Corporation .config.gz Description: Binary data
Re: [PATCH v3,4/5] usb: Add MediaTek USB3 DRD Driver
Hi, [auto build test ERROR on usb/usb-testing] [also build test ERROR on v4.7-rc2 next-20160609] [if your patch is applied to the wrong git tree, please drop us a note to help improve the system] url: https://github.com/0day-ci/linux/commits/Chunfeng-Yun/usb-Add-MediaTek-USB3-DRD-Driver/20160610-153559 base: https://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb.git usb-testing config: blackfin-allmodconfig (attached as .config) compiler: bfin-uclinux-gcc (GCC) 4.6.3 reproduce: wget https://git.kernel.org/cgit/linux/kernel/git/wfg/lkp-tests.git/plain/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross # save the attached .config to linux build tree make.cross ARCH=blackfin All errors (new ones prefixed by >>): drivers/usb/mtu3/mtu3_dr.c: In function 'ssusb_mode_sysfs_switch': >> drivers/usb/mtu3/mtu3_dr.c:271:3: error: implicit declaration of function >> 'pinctrl_select_state' [-Werror=implicit-function-declaration] cc1: some warnings being treated as errors vim +/pinctrl_select_state +271 drivers/usb/mtu3/mtu3_dr.c 265 struct otg_switch_mtk *otg_sx = >otg_switch; 266 267 if (!otg_sx->manual_drd_enabled) 268 return; 269 270 if (to_host) > 271 pinctrl_select_state(otg_sx->id_pinctrl, > otg_sx->id_ground); 272 else 273 pinctrl_select_state(otg_sx->id_pinctrl, otg_sx->id_float); 274 } --- 0-DAY kernel test infrastructureOpen Source Technology Center https://lists.01.org/pipermail/kbuild-all Intel Corporation .config.gz Description: Binary data
Re: Add MediaTek USB3 DRD Driver
Hi, Chunfeng Yun <chunfeng@mediatek.com> writes: > From 8fdc924cecf0ca14da6e8aba360501e53437e548 Mon Sep 17 00:00:00 2001 > From: Chunfeng Yun <chunfeng@mediatek.com> > Date: Fri, 10 Jun 2016 15:20:20 +0800 > Subject: [PATCH 0/5] Add MediaTek USB3 DRD Driver > > These patches introduce the MediaTek USB3 dual-role controller > driver. > > The driver can be configured as Dual-Role Device (DRD), > Peripheral Only and Host Only (xHCI) modes. It works well > with Mass Storage, RNDIS and g_zero on FS/HS and SS. And it is > tested on MT8173 platform which only contains USB2.0 device IP, > and on MT6290 platform which contains USB3.0 device IP. > > Change in v3: > 1. fix some typo error > 2. rename mtu3.txt to mt8173-mtu3.txt > > Change in v2: > 1. modify binding docs according to suggestions > 2. modify some comments and remove some dummy blank lines > 3. fix memory leakage I don't see anything inherently wrong with this series. But keep in mind I don't have HW to test. I can take the peripheral driver in a few days. -- balbi signature.asc Description: PGP signature
Re: Add MediaTek USB3 DRD Driver
Hi, Chunfeng Yun writes: > From 8fdc924cecf0ca14da6e8aba360501e53437e548 Mon Sep 17 00:00:00 2001 > From: Chunfeng Yun > Date: Fri, 10 Jun 2016 15:20:20 +0800 > Subject: [PATCH 0/5] Add MediaTek USB3 DRD Driver > > These patches introduce the MediaTek USB3 dual-role controller > driver. > > The driver can be configured as Dual-Role Device (DRD), > Peripheral Only and Host Only (xHCI) modes. It works well > with Mass Storage, RNDIS and g_zero on FS/HS and SS. And it is > tested on MT8173 platform which only contains USB2.0 device IP, > and on MT6290 platform which contains USB3.0 device IP. > > Change in v3: > 1. fix some typo error > 2. rename mtu3.txt to mt8173-mtu3.txt > > Change in v2: > 1. modify binding docs according to suggestions > 2. modify some comments and remove some dummy blank lines > 3. fix memory leakage I don't see anything inherently wrong with this series. But keep in mind I don't have HW to test. I can take the peripheral driver in a few days. -- balbi signature.asc Description: PGP signature
Re: Add MediaTek USB3 DRD Driver
Hi, On Fri, 2016-06-10 at 15:32 +0800, Chunfeng Yun wrote: > From 8fdc924cecf0ca14da6e8aba360501e53437e548 Mon Sep 17 00:00:00 2001 > From: Chunfeng Yun <chunfeng@mediatek.com> > Date: Fri, 10 Jun 2016 15:20:20 +0800 > Subject: [PATCH 0/5] Add MediaTek USB3 DRD Driver > > These patches introduce the MediaTek USB3 dual-role controller > driver. > > The driver can be configured as Dual-Role Device (DRD), > Peripheral Only and Host Only (xHCI) modes. It works well > with Mass Storage, RNDIS and g_zero on FS/HS and SS. And it is > tested on MT8173 platform which only contains USB2.0 device IP, > and on MT6290 platform which contains USB3.0 device IP. > > Change in v3: > 1. fix some typo error > 2. rename mtu3.txt to mt8173-mtu3.txt > > Change in v2: > 1. modify binding docs according to suggestions > 2. modify some comments and remove some dummy blank lines > 3. fix memory leakage > > Chunfeng Yun (5): > dt-bindings: mt8173-xhci: support host side of dual-role mode > dt-bindings: mt8173-mtu3: add devicetree bindings Could you please help me to review the following two patches based on v4.7-rc1: 1- usb: xhci-mtk: make IPPC register optional 2- usb: Add MediaTek USB3 DRD Driver Thank you very much > usb: xhci-mtk: make IPPC register optional > usb: Add MediaTek USB3 DRD Driver > arm64: dts: mediatek: add USB3 DRD driver > > .../devicetree/bindings/usb/mt8173-mtu3.txt| 85 ++ > .../devicetree/bindings/usb/mt8173-xhci.txt| 48 ++ > arch/arm64/boot/dts/mediatek/mt8173-evb.dts| 46 +- > arch/arm64/boot/dts/mediatek/mt8173.dtsi | 28 +- > drivers/usb/Kconfig|2 + > drivers/usb/Makefile |1 + > drivers/usb/host/xhci-mtk.c| 32 +- > drivers/usb/mtu3/Kconfig | 47 ++ > drivers/usb/mtu3/Makefile | 20 + > drivers/usb/mtu3/mtu3.h| 422 ++ > drivers/usb/mtu3/mtu3_core.c | 879 > > drivers/usb/mtu3/mtu3_dr.c | 348 > drivers/usb/mtu3/mtu3_dr.h | 108 +++ > drivers/usb/mtu3/mtu3_gadget.c | 731 > drivers/usb/mtu3/mtu3_gadget_ep0.c | 879 > > drivers/usb/mtu3/mtu3_host.c | 294 +++ > drivers/usb/mtu3/mtu3_hw_regs.h| 474 +++ > drivers/usb/mtu3/mtu3_plat.c | 490 +++ > drivers/usb/mtu3/mtu3_qmu.c| 599 + > drivers/usb/mtu3/mtu3_qmu.h| 43 + > 20 files changed, 5562 insertions(+), 14 deletions(-) > create mode 100644 Documentation/devicetree/bindings/usb/mt8173-mtu3.txt > 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.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 > > -- > 1.7.9.5 > >
Re: Add MediaTek USB3 DRD Driver
Hi, On Fri, 2016-06-10 at 15:32 +0800, Chunfeng Yun wrote: > From 8fdc924cecf0ca14da6e8aba360501e53437e548 Mon Sep 17 00:00:00 2001 > From: Chunfeng Yun > Date: Fri, 10 Jun 2016 15:20:20 +0800 > Subject: [PATCH 0/5] Add MediaTek USB3 DRD Driver > > These patches introduce the MediaTek USB3 dual-role controller > driver. > > The driver can be configured as Dual-Role Device (DRD), > Peripheral Only and Host Only (xHCI) modes. It works well > with Mass Storage, RNDIS and g_zero on FS/HS and SS. And it is > tested on MT8173 platform which only contains USB2.0 device IP, > and on MT6290 platform which contains USB3.0 device IP. > > Change in v3: > 1. fix some typo error > 2. rename mtu3.txt to mt8173-mtu3.txt > > Change in v2: > 1. modify binding docs according to suggestions > 2. modify some comments and remove some dummy blank lines > 3. fix memory leakage > > Chunfeng Yun (5): > dt-bindings: mt8173-xhci: support host side of dual-role mode > dt-bindings: mt8173-mtu3: add devicetree bindings Could you please help me to review the following two patches based on v4.7-rc1: 1- usb: xhci-mtk: make IPPC register optional 2- usb: Add MediaTek USB3 DRD Driver Thank you very much > usb: xhci-mtk: make IPPC register optional > usb: Add MediaTek USB3 DRD Driver > arm64: dts: mediatek: add USB3 DRD driver > > .../devicetree/bindings/usb/mt8173-mtu3.txt| 85 ++ > .../devicetree/bindings/usb/mt8173-xhci.txt| 48 ++ > arch/arm64/boot/dts/mediatek/mt8173-evb.dts| 46 +- > arch/arm64/boot/dts/mediatek/mt8173.dtsi | 28 +- > drivers/usb/Kconfig|2 + > drivers/usb/Makefile |1 + > drivers/usb/host/xhci-mtk.c| 32 +- > drivers/usb/mtu3/Kconfig | 47 ++ > drivers/usb/mtu3/Makefile | 20 + > drivers/usb/mtu3/mtu3.h| 422 ++ > drivers/usb/mtu3/mtu3_core.c | 879 > > drivers/usb/mtu3/mtu3_dr.c | 348 > drivers/usb/mtu3/mtu3_dr.h | 108 +++ > drivers/usb/mtu3/mtu3_gadget.c | 731 > drivers/usb/mtu3/mtu3_gadget_ep0.c | 879 > > drivers/usb/mtu3/mtu3_host.c | 294 +++ > drivers/usb/mtu3/mtu3_hw_regs.h| 474 +++ > drivers/usb/mtu3/mtu3_plat.c | 490 +++ > drivers/usb/mtu3/mtu3_qmu.c| 599 + > drivers/usb/mtu3/mtu3_qmu.h| 43 + > 20 files changed, 5562 insertions(+), 14 deletions(-) > create mode 100644 Documentation/devicetree/bindings/usb/mt8173-mtu3.txt > 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.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 > > -- > 1.7.9.5 > >
Add MediaTek USB3 DRD Driver
>From 8fdc924cecf0ca14da6e8aba360501e53437e548 Mon Sep 17 00:00:00 2001 From: Chunfeng Yun <chunfeng@mediatek.com> Date: Fri, 10 Jun 2016 15:20:20 +0800 Subject: [PATCH 0/5] Add MediaTek USB3 DRD Driver These patches introduce the MediaTek USB3 dual-role controller driver. The driver can be configured as Dual-Role Device (DRD), Peripheral Only and Host Only (xHCI) modes. It works well with Mass Storage, RNDIS and g_zero on FS/HS and SS. And it is tested on MT8173 platform which only contains USB2.0 device IP, and on MT6290 platform which contains USB3.0 device IP. Change in v3: 1. fix some typo error 2. rename mtu3.txt to mt8173-mtu3.txt Change in v2: 1. modify binding docs according to suggestions 2. modify some comments and remove some dummy blank lines 3. fix memory leakage Chunfeng Yun (5): dt-bindings: mt8173-xhci: support host side of dual-role mode dt-bindings: mt8173-mtu3: add devicetree bindings usb: xhci-mtk: make IPPC register optional usb: Add MediaTek USB3 DRD Driver arm64: dts: mediatek: add USB3 DRD driver .../devicetree/bindings/usb/mt8173-mtu3.txt| 85 ++ .../devicetree/bindings/usb/mt8173-xhci.txt| 48 ++ arch/arm64/boot/dts/mediatek/mt8173-evb.dts| 46 +- arch/arm64/boot/dts/mediatek/mt8173.dtsi | 28 +- drivers/usb/Kconfig|2 + drivers/usb/Makefile |1 + drivers/usb/host/xhci-mtk.c| 32 +- drivers/usb/mtu3/Kconfig | 47 ++ drivers/usb/mtu3/Makefile | 20 + drivers/usb/mtu3/mtu3.h| 422 ++ drivers/usb/mtu3/mtu3_core.c | 879 drivers/usb/mtu3/mtu3_dr.c | 348 drivers/usb/mtu3/mtu3_dr.h | 108 +++ drivers/usb/mtu3/mtu3_gadget.c | 731 drivers/usb/mtu3/mtu3_gadget_ep0.c | 879 drivers/usb/mtu3/mtu3_host.c | 294 +++ drivers/usb/mtu3/mtu3_hw_regs.h| 474 +++ drivers/usb/mtu3/mtu3_plat.c | 490 +++ drivers/usb/mtu3/mtu3_qmu.c| 599 + drivers/usb/mtu3/mtu3_qmu.h| 43 + 20 files changed, 5562 insertions(+), 14 deletions(-) create mode 100644 Documentation/devicetree/bindings/usb/mt8173-mtu3.txt 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.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 -- 1.7.9.5
Add MediaTek USB3 DRD Driver
>From 8fdc924cecf0ca14da6e8aba360501e53437e548 Mon Sep 17 00:00:00 2001 From: Chunfeng Yun Date: Fri, 10 Jun 2016 15:20:20 +0800 Subject: [PATCH 0/5] Add MediaTek USB3 DRD Driver These patches introduce the MediaTek USB3 dual-role controller driver. The driver can be configured as Dual-Role Device (DRD), Peripheral Only and Host Only (xHCI) modes. It works well with Mass Storage, RNDIS and g_zero on FS/HS and SS. And it is tested on MT8173 platform which only contains USB2.0 device IP, and on MT6290 platform which contains USB3.0 device IP. Change in v3: 1. fix some typo error 2. rename mtu3.txt to mt8173-mtu3.txt Change in v2: 1. modify binding docs according to suggestions 2. modify some comments and remove some dummy blank lines 3. fix memory leakage Chunfeng Yun (5): dt-bindings: mt8173-xhci: support host side of dual-role mode dt-bindings: mt8173-mtu3: add devicetree bindings usb: xhci-mtk: make IPPC register optional usb: Add MediaTek USB3 DRD Driver arm64: dts: mediatek: add USB3 DRD driver .../devicetree/bindings/usb/mt8173-mtu3.txt| 85 ++ .../devicetree/bindings/usb/mt8173-xhci.txt| 48 ++ arch/arm64/boot/dts/mediatek/mt8173-evb.dts| 46 +- arch/arm64/boot/dts/mediatek/mt8173.dtsi | 28 +- drivers/usb/Kconfig|2 + drivers/usb/Makefile |1 + drivers/usb/host/xhci-mtk.c| 32 +- drivers/usb/mtu3/Kconfig | 47 ++ drivers/usb/mtu3/Makefile | 20 + drivers/usb/mtu3/mtu3.h| 422 ++ drivers/usb/mtu3/mtu3_core.c | 879 drivers/usb/mtu3/mtu3_dr.c | 348 drivers/usb/mtu3/mtu3_dr.h | 108 +++ drivers/usb/mtu3/mtu3_gadget.c | 731 drivers/usb/mtu3/mtu3_gadget_ep0.c | 879 drivers/usb/mtu3/mtu3_host.c | 294 +++ drivers/usb/mtu3/mtu3_hw_regs.h| 474 +++ drivers/usb/mtu3/mtu3_plat.c | 490 +++ drivers/usb/mtu3/mtu3_qmu.c| 599 + drivers/usb/mtu3/mtu3_qmu.h| 43 + 20 files changed, 5562 insertions(+), 14 deletions(-) create mode 100644 Documentation/devicetree/bindings/usb/mt8173-mtu3.txt 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.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 -- 1.7.9.5
[PATCH v3,4/5] usb: Add MediaTek USB3 DRD Driver
This patch adds support for the MediaTek USB3 controller integrated into MT8173. It can be configured as Dual-Role Device (DRD), Peripheral Only and Host Only (xHCI) modes. Signed-off-by: Chunfeng Yun--- drivers/usb/Kconfig|2 + drivers/usb/Makefile |1 + drivers/usb/mtu3/Kconfig | 47 ++ drivers/usb/mtu3/Makefile | 20 + drivers/usb/mtu3/mtu3.h| 422 + drivers/usb/mtu3/mtu3_core.c | 879 drivers/usb/mtu3/mtu3_dr.c | 348 ++ drivers/usb/mtu3/mtu3_dr.h | 108 + drivers/usb/mtu3/mtu3_gadget.c | 731 ++ drivers/usb/mtu3/mtu3_gadget_ep0.c | 879 drivers/usb/mtu3/mtu3_host.c | 294 drivers/usb/mtu3/mtu3_hw_regs.h| 474 +++ drivers/usb/mtu3/mtu3_plat.c | 490 drivers/usb/mtu3/mtu3_qmu.c| 599 drivers/usb/mtu3/mtu3_qmu.h| 43 ++ 15 files changed, 5337 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.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/drivers/usb/Kconfig b/drivers/usb/Kconfig index 8689dcb..9ca0bf0 100644 --- a/drivers/usb/Kconfig +++ b/drivers/usb/Kconfig @@ -95,6 +95,8 @@ source "drivers/usb/usbip/Kconfig" endif +source "drivers/usb/mtu3/Kconfig" + source "drivers/usb/musb/Kconfig" source "drivers/usb/dwc3/Kconfig" diff --git a/drivers/usb/Makefile b/drivers/usb/Makefile index dca7856..7791af6 100644 --- a/drivers/usb/Makefile +++ b/drivers/usb/Makefile @@ -12,6 +12,7 @@ obj-$(CONFIG_USB_DWC2)+= dwc2/ obj-$(CONFIG_USB_ISP1760) += isp1760/ obj-$(CONFIG_USB_MON) += mon/ +obj-$(CONFIG_USB_MTU3) += mtu3/ obj-$(CONFIG_PCI) += host/ obj-$(CONFIG_USB_EHCI_HCD) += host/ diff --git a/drivers/usb/mtu3/Kconfig b/drivers/usb/mtu3/Kconfig new file mode 100644 index 000..6850fb6 --- /dev/null +++ b/drivers/usb/mtu3/Kconfig @@ -0,0 +1,47 @@ +# For MTK USB3.0 IP + +config USB_MTU3 + tristate "MediaTek USB3 Dual Role controller" + depends on (USB || USB_GADGET) && HAS_DMA + select USB_XHCI_MTK if USB_SUPPORT && USB_XHCI_HCD + help + Say Y or M 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, or both. + + If you don't know what this is, please say N. + + Choose M here to compile this driver as a module, and it + will be called mtu3.ko. + + +if USB_MTU3 +choice + bool "MTU3 Mode Selection" + default USB_MTU3_DUAL_ROLE if (USB && USB_GADGET) + default USB_MTU3_HOST if (USB && !USB_GADGET) + default USB_MTU3_GADGET if (!USB && USB_GADGET) + +config USB_MTU3_HOST + bool "Host only mode" + depends on USB=y || USB=USB_MTU3 + 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 + help + Select this when you want to use MTU3 in gadget mode only, + thereby the host feature will be regressed. + +config USB_MTU3_DUAL_ROLE + bool "Dual Role mode" + depends on ((USB=y || USB=USB_MTU3) && (USB_GADGET=y || USB_GADGET=USB_MTU3)) + help + This is the default mode of working of MTU3 controller where + both host and gadget features are enabled. + +endchoice +endif diff --git a/drivers/usb/mtu3/Makefile b/drivers/usb/mtu3/Makefile new file mode 100644 index 000..4a66b01 --- /dev/null +++ b/drivers/usb/mtu3/Makefile @@ -0,0 +1,20 @@ + +#ifeq ($(CONFIG_USB_DEBUG),y) + ccflags-y += -DDEBUG +#endif + +obj-$(CONFIG_USB_MTU3) += mtu3.o + +mtu3-y := mtu3_plat.o + +ifneq ($(filter y,$(CONFIG_USB_MTU3_HOST) $(CONFIG_USB_MTU3_DUAL_ROLE)),) + mtu3-y += mtu3_host.o +endif + +ifneq ($(filter y,$(CONFIG_USB_MTU3_GADGET) $(CONFIG_USB_MTU3_DUAL_ROLE)),) + mtu3-y += mtu3_core.o mtu3_gadget_ep0.o mtu3_gadget.o mtu3_qmu.o +endif + +ifneq ($(CONFIG_USB_MTU3_DUAL_ROLE),) + mtu3-y += mtu3_dr.o +endif \ No newline at end of file diff --git a/drivers/usb/mtu3/mtu3.h
[PATCH v3,4/5] usb: Add MediaTek USB3 DRD Driver
This patch adds support for the MediaTek USB3 controller integrated into MT8173. It can be configured as Dual-Role Device (DRD), Peripheral Only and Host Only (xHCI) modes. Signed-off-by: Chunfeng Yun --- drivers/usb/Kconfig|2 + drivers/usb/Makefile |1 + drivers/usb/mtu3/Kconfig | 47 ++ drivers/usb/mtu3/Makefile | 20 + drivers/usb/mtu3/mtu3.h| 422 + drivers/usb/mtu3/mtu3_core.c | 879 drivers/usb/mtu3/mtu3_dr.c | 348 ++ drivers/usb/mtu3/mtu3_dr.h | 108 + drivers/usb/mtu3/mtu3_gadget.c | 731 ++ drivers/usb/mtu3/mtu3_gadget_ep0.c | 879 drivers/usb/mtu3/mtu3_host.c | 294 drivers/usb/mtu3/mtu3_hw_regs.h| 474 +++ drivers/usb/mtu3/mtu3_plat.c | 490 drivers/usb/mtu3/mtu3_qmu.c| 599 drivers/usb/mtu3/mtu3_qmu.h| 43 ++ 15 files changed, 5337 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.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/drivers/usb/Kconfig b/drivers/usb/Kconfig index 8689dcb..9ca0bf0 100644 --- a/drivers/usb/Kconfig +++ b/drivers/usb/Kconfig @@ -95,6 +95,8 @@ source "drivers/usb/usbip/Kconfig" endif +source "drivers/usb/mtu3/Kconfig" + source "drivers/usb/musb/Kconfig" source "drivers/usb/dwc3/Kconfig" diff --git a/drivers/usb/Makefile b/drivers/usb/Makefile index dca7856..7791af6 100644 --- a/drivers/usb/Makefile +++ b/drivers/usb/Makefile @@ -12,6 +12,7 @@ obj-$(CONFIG_USB_DWC2)+= dwc2/ obj-$(CONFIG_USB_ISP1760) += isp1760/ obj-$(CONFIG_USB_MON) += mon/ +obj-$(CONFIG_USB_MTU3) += mtu3/ obj-$(CONFIG_PCI) += host/ obj-$(CONFIG_USB_EHCI_HCD) += host/ diff --git a/drivers/usb/mtu3/Kconfig b/drivers/usb/mtu3/Kconfig new file mode 100644 index 000..6850fb6 --- /dev/null +++ b/drivers/usb/mtu3/Kconfig @@ -0,0 +1,47 @@ +# For MTK USB3.0 IP + +config USB_MTU3 + tristate "MediaTek USB3 Dual Role controller" + depends on (USB || USB_GADGET) && HAS_DMA + select USB_XHCI_MTK if USB_SUPPORT && USB_XHCI_HCD + help + Say Y or M 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, or both. + + If you don't know what this is, please say N. + + Choose M here to compile this driver as a module, and it + will be called mtu3.ko. + + +if USB_MTU3 +choice + bool "MTU3 Mode Selection" + default USB_MTU3_DUAL_ROLE if (USB && USB_GADGET) + default USB_MTU3_HOST if (USB && !USB_GADGET) + default USB_MTU3_GADGET if (!USB && USB_GADGET) + +config USB_MTU3_HOST + bool "Host only mode" + depends on USB=y || USB=USB_MTU3 + 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 + help + Select this when you want to use MTU3 in gadget mode only, + thereby the host feature will be regressed. + +config USB_MTU3_DUAL_ROLE + bool "Dual Role mode" + depends on ((USB=y || USB=USB_MTU3) && (USB_GADGET=y || USB_GADGET=USB_MTU3)) + help + This is the default mode of working of MTU3 controller where + both host and gadget features are enabled. + +endchoice +endif diff --git a/drivers/usb/mtu3/Makefile b/drivers/usb/mtu3/Makefile new file mode 100644 index 000..4a66b01 --- /dev/null +++ b/drivers/usb/mtu3/Makefile @@ -0,0 +1,20 @@ + +#ifeq ($(CONFIG_USB_DEBUG),y) + ccflags-y += -DDEBUG +#endif + +obj-$(CONFIG_USB_MTU3) += mtu3.o + +mtu3-y := mtu3_plat.o + +ifneq ($(filter y,$(CONFIG_USB_MTU3_HOST) $(CONFIG_USB_MTU3_DUAL_ROLE)),) + mtu3-y += mtu3_host.o +endif + +ifneq ($(filter y,$(CONFIG_USB_MTU3_GADGET) $(CONFIG_USB_MTU3_DUAL_ROLE)),) + mtu3-y += mtu3_core.o mtu3_gadget_ep0.o mtu3_gadget.o mtu3_qmu.o +endif + +ifneq ($(CONFIG_USB_MTU3_DUAL_ROLE),) + mtu3-y += mtu3_dr.o +endif \ No newline at end of file diff --git a/drivers/usb/mtu3/mtu3.h b/drivers/usb/mtu3/mtu3.h new file
[PATCH v2,4/5] usb: Add MediaTek USB3 DRD Driver
This patch adds support for the MediaTek USB3 controller integrated into MT8173. It can be configured as Dual-Role Device (DRD), Peripheral Only and Host Only (xHCI) modes. Signed-off-by: Chunfeng Yun--- drivers/usb/Kconfig|2 + drivers/usb/Makefile |1 + drivers/usb/mtu3/Kconfig | 47 ++ drivers/usb/mtu3/Makefile | 20 + drivers/usb/mtu3/mtu3.h| 422 + drivers/usb/mtu3/mtu3_core.c | 879 drivers/usb/mtu3/mtu3_dr.c | 348 ++ drivers/usb/mtu3/mtu3_dr.h | 108 + drivers/usb/mtu3/mtu3_gadget.c | 731 ++ drivers/usb/mtu3/mtu3_gadget_ep0.c | 879 drivers/usb/mtu3/mtu3_host.c | 294 drivers/usb/mtu3/mtu3_hw_regs.h| 474 +++ drivers/usb/mtu3/mtu3_plat.c | 490 drivers/usb/mtu3/mtu3_qmu.c| 599 drivers/usb/mtu3/mtu3_qmu.h| 43 ++ 15 files changed, 5337 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.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/drivers/usb/Kconfig b/drivers/usb/Kconfig index 8689dcb..9ca0bf0 100644 --- a/drivers/usb/Kconfig +++ b/drivers/usb/Kconfig @@ -95,6 +95,8 @@ source "drivers/usb/usbip/Kconfig" endif +source "drivers/usb/mtu3/Kconfig" + source "drivers/usb/musb/Kconfig" source "drivers/usb/dwc3/Kconfig" diff --git a/drivers/usb/Makefile b/drivers/usb/Makefile index dca7856..7791af6 100644 --- a/drivers/usb/Makefile +++ b/drivers/usb/Makefile @@ -12,6 +12,7 @@ obj-$(CONFIG_USB_DWC2)+= dwc2/ obj-$(CONFIG_USB_ISP1760) += isp1760/ obj-$(CONFIG_USB_MON) += mon/ +obj-$(CONFIG_USB_MTU3) += mtu3/ obj-$(CONFIG_PCI) += host/ obj-$(CONFIG_USB_EHCI_HCD) += host/ diff --git a/drivers/usb/mtu3/Kconfig b/drivers/usb/mtu3/Kconfig new file mode 100644 index 000..6850fb6 --- /dev/null +++ b/drivers/usb/mtu3/Kconfig @@ -0,0 +1,47 @@ +# For MTK USB3.0 IP + +config USB_MTU3 + tristate "MediaTek USB3 Dual Role controller" + depends on (USB || USB_GADGET) && HAS_DMA + select USB_XHCI_MTK if USB_SUPPORT && USB_XHCI_HCD + help + Say Y or M 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, or both. + + If you don't know what this is, please say N. + + Choose M here to compile this driver as a module, and it + will be called mtu3.ko. + + +if USB_MTU3 +choice + bool "MTU3 Mode Selection" + default USB_MTU3_DUAL_ROLE if (USB && USB_GADGET) + default USB_MTU3_HOST if (USB && !USB_GADGET) + default USB_MTU3_GADGET if (!USB && USB_GADGET) + +config USB_MTU3_HOST + bool "Host only mode" + depends on USB=y || USB=USB_MTU3 + 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 + help + Select this when you want to use MTU3 in gadget mode only, + thereby the host feature will be regressed. + +config USB_MTU3_DUAL_ROLE + bool "Dual Role mode" + depends on ((USB=y || USB=USB_MTU3) && (USB_GADGET=y || USB_GADGET=USB_MTU3)) + help + This is the default mode of working of MTU3 controller where + both host and gadget features are enabled. + +endchoice +endif diff --git a/drivers/usb/mtu3/Makefile b/drivers/usb/mtu3/Makefile new file mode 100644 index 000..4a66b01 --- /dev/null +++ b/drivers/usb/mtu3/Makefile @@ -0,0 +1,20 @@ + +#ifeq ($(CONFIG_USB_DEBUG),y) + ccflags-y += -DDEBUG +#endif + +obj-$(CONFIG_USB_MTU3) += mtu3.o + +mtu3-y := mtu3_plat.o + +ifneq ($(filter y,$(CONFIG_USB_MTU3_HOST) $(CONFIG_USB_MTU3_DUAL_ROLE)),) + mtu3-y += mtu3_host.o +endif + +ifneq ($(filter y,$(CONFIG_USB_MTU3_GADGET) $(CONFIG_USB_MTU3_DUAL_ROLE)),) + mtu3-y += mtu3_core.o mtu3_gadget_ep0.o mtu3_gadget.o mtu3_qmu.o +endif + +ifneq ($(CONFIG_USB_MTU3_DUAL_ROLE),) + mtu3-y += mtu3_dr.o +endif \ No newline at end of file diff --git a/drivers/usb/mtu3/mtu3.h
[PATCH v2,4/5] usb: Add MediaTek USB3 DRD Driver
This patch adds support for the MediaTek USB3 controller integrated into MT8173. It can be configured as Dual-Role Device (DRD), Peripheral Only and Host Only (xHCI) modes. Signed-off-by: Chunfeng Yun --- drivers/usb/Kconfig|2 + drivers/usb/Makefile |1 + drivers/usb/mtu3/Kconfig | 47 ++ drivers/usb/mtu3/Makefile | 20 + drivers/usb/mtu3/mtu3.h| 422 + drivers/usb/mtu3/mtu3_core.c | 879 drivers/usb/mtu3/mtu3_dr.c | 348 ++ drivers/usb/mtu3/mtu3_dr.h | 108 + drivers/usb/mtu3/mtu3_gadget.c | 731 ++ drivers/usb/mtu3/mtu3_gadget_ep0.c | 879 drivers/usb/mtu3/mtu3_host.c | 294 drivers/usb/mtu3/mtu3_hw_regs.h| 474 +++ drivers/usb/mtu3/mtu3_plat.c | 490 drivers/usb/mtu3/mtu3_qmu.c| 599 drivers/usb/mtu3/mtu3_qmu.h| 43 ++ 15 files changed, 5337 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.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/drivers/usb/Kconfig b/drivers/usb/Kconfig index 8689dcb..9ca0bf0 100644 --- a/drivers/usb/Kconfig +++ b/drivers/usb/Kconfig @@ -95,6 +95,8 @@ source "drivers/usb/usbip/Kconfig" endif +source "drivers/usb/mtu3/Kconfig" + source "drivers/usb/musb/Kconfig" source "drivers/usb/dwc3/Kconfig" diff --git a/drivers/usb/Makefile b/drivers/usb/Makefile index dca7856..7791af6 100644 --- a/drivers/usb/Makefile +++ b/drivers/usb/Makefile @@ -12,6 +12,7 @@ obj-$(CONFIG_USB_DWC2)+= dwc2/ obj-$(CONFIG_USB_ISP1760) += isp1760/ obj-$(CONFIG_USB_MON) += mon/ +obj-$(CONFIG_USB_MTU3) += mtu3/ obj-$(CONFIG_PCI) += host/ obj-$(CONFIG_USB_EHCI_HCD) += host/ diff --git a/drivers/usb/mtu3/Kconfig b/drivers/usb/mtu3/Kconfig new file mode 100644 index 000..6850fb6 --- /dev/null +++ b/drivers/usb/mtu3/Kconfig @@ -0,0 +1,47 @@ +# For MTK USB3.0 IP + +config USB_MTU3 + tristate "MediaTek USB3 Dual Role controller" + depends on (USB || USB_GADGET) && HAS_DMA + select USB_XHCI_MTK if USB_SUPPORT && USB_XHCI_HCD + help + Say Y or M 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, or both. + + If you don't know what this is, please say N. + + Choose M here to compile this driver as a module, and it + will be called mtu3.ko. + + +if USB_MTU3 +choice + bool "MTU3 Mode Selection" + default USB_MTU3_DUAL_ROLE if (USB && USB_GADGET) + default USB_MTU3_HOST if (USB && !USB_GADGET) + default USB_MTU3_GADGET if (!USB && USB_GADGET) + +config USB_MTU3_HOST + bool "Host only mode" + depends on USB=y || USB=USB_MTU3 + 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 + help + Select this when you want to use MTU3 in gadget mode only, + thereby the host feature will be regressed. + +config USB_MTU3_DUAL_ROLE + bool "Dual Role mode" + depends on ((USB=y || USB=USB_MTU3) && (USB_GADGET=y || USB_GADGET=USB_MTU3)) + help + This is the default mode of working of MTU3 controller where + both host and gadget features are enabled. + +endchoice +endif diff --git a/drivers/usb/mtu3/Makefile b/drivers/usb/mtu3/Makefile new file mode 100644 index 000..4a66b01 --- /dev/null +++ b/drivers/usb/mtu3/Makefile @@ -0,0 +1,20 @@ + +#ifeq ($(CONFIG_USB_DEBUG),y) + ccflags-y += -DDEBUG +#endif + +obj-$(CONFIG_USB_MTU3) += mtu3.o + +mtu3-y := mtu3_plat.o + +ifneq ($(filter y,$(CONFIG_USB_MTU3_HOST) $(CONFIG_USB_MTU3_DUAL_ROLE)),) + mtu3-y += mtu3_host.o +endif + +ifneq ($(filter y,$(CONFIG_USB_MTU3_GADGET) $(CONFIG_USB_MTU3_DUAL_ROLE)),) + mtu3-y += mtu3_core.o mtu3_gadget_ep0.o mtu3_gadget.o mtu3_qmu.o +endif + +ifneq ($(CONFIG_USB_MTU3_DUAL_ROLE),) + mtu3-y += mtu3_dr.o +endif \ No newline at end of file diff --git a/drivers/usb/mtu3/mtu3.h b/drivers/usb/mtu3/mtu3.h new file
Add MediaTek USB3 DRD Driver
>From f2b6744b1ed13636db8690dd3e8d65ad7f3fb7ce Mon Sep 17 00:00:00 2001 From: Chunfeng Yun <chunfeng@mediatek.com> Date: Tue, 31 May 2016 10:52:46 +0800 Subject: [PATCH 0/5] Add MediaTek USB3 DRD Driver These patches introduce the MediaTek USB3 dual-role controller driver. The driver can be configured as Dual-Role Device (DRD), Peripheral Only and Host Only (xHCI) modes. It works well with Mass Storage, RNDIS and g_zero on FS/HS and SS. And it is tested on MT8173 platform which only contains USB2.0 device IP, and on MT6290 platform which contains USB3.0 device IP. Change in v2: 1. modify binding docs according to suggestions 2. modify some comments and remove some dummy blank lines 3. fix memory leakage Chunfeng Yun (5): dt-bindings: mt8173-xhci: support host side of dual-role mode usb: xhci-mtk: make IPPC register optional dt-bindings: mtu3: add devicetree bindings usb: Add MediaTek USB3 DRD Driver arm64: dts: mediatek: add USB3 DRD driver .../devicetree/bindings/usb/mt8173-xhci.txt| 48 ++ Documentation/devicetree/bindings/usb/mtu3.txt | 85 ++ arch/arm64/boot/dts/mediatek/mt8173-evb.dts| 46 +- arch/arm64/boot/dts/mediatek/mt8173.dtsi | 28 +- drivers/usb/Kconfig|2 + drivers/usb/Makefile |1 + drivers/usb/host/xhci-mtk.c| 32 +- drivers/usb/mtu3/Kconfig | 47 ++ drivers/usb/mtu3/Makefile | 20 + drivers/usb/mtu3/mtu3.h| 422 ++ drivers/usb/mtu3/mtu3_core.c | 879 drivers/usb/mtu3/mtu3_dr.c | 348 drivers/usb/mtu3/mtu3_dr.h | 108 +++ drivers/usb/mtu3/mtu3_gadget.c | 731 drivers/usb/mtu3/mtu3_gadget_ep0.c | 879 drivers/usb/mtu3/mtu3_host.c | 294 +++ drivers/usb/mtu3/mtu3_hw_regs.h| 474 +++ drivers/usb/mtu3/mtu3_plat.c | 490 +++ drivers/usb/mtu3/mtu3_qmu.c| 599 + drivers/usb/mtu3/mtu3_qmu.h| 43 + 20 files changed, 5562 insertions(+), 14 deletions(-) create mode 100644 Documentation/devicetree/bindings/usb/mtu3.txt 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.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 -- 1.7.9.5
Add MediaTek USB3 DRD Driver
>From f2b6744b1ed13636db8690dd3e8d65ad7f3fb7ce Mon Sep 17 00:00:00 2001 From: Chunfeng Yun Date: Tue, 31 May 2016 10:52:46 +0800 Subject: [PATCH 0/5] Add MediaTek USB3 DRD Driver These patches introduce the MediaTek USB3 dual-role controller driver. The driver can be configured as Dual-Role Device (DRD), Peripheral Only and Host Only (xHCI) modes. It works well with Mass Storage, RNDIS and g_zero on FS/HS and SS. And it is tested on MT8173 platform which only contains USB2.0 device IP, and on MT6290 platform which contains USB3.0 device IP. Change in v2: 1. modify binding docs according to suggestions 2. modify some comments and remove some dummy blank lines 3. fix memory leakage Chunfeng Yun (5): dt-bindings: mt8173-xhci: support host side of dual-role mode usb: xhci-mtk: make IPPC register optional dt-bindings: mtu3: add devicetree bindings usb: Add MediaTek USB3 DRD Driver arm64: dts: mediatek: add USB3 DRD driver .../devicetree/bindings/usb/mt8173-xhci.txt| 48 ++ Documentation/devicetree/bindings/usb/mtu3.txt | 85 ++ arch/arm64/boot/dts/mediatek/mt8173-evb.dts| 46 +- arch/arm64/boot/dts/mediatek/mt8173.dtsi | 28 +- drivers/usb/Kconfig|2 + drivers/usb/Makefile |1 + drivers/usb/host/xhci-mtk.c| 32 +- drivers/usb/mtu3/Kconfig | 47 ++ drivers/usb/mtu3/Makefile | 20 + drivers/usb/mtu3/mtu3.h| 422 ++ drivers/usb/mtu3/mtu3_core.c | 879 drivers/usb/mtu3/mtu3_dr.c | 348 drivers/usb/mtu3/mtu3_dr.h | 108 +++ drivers/usb/mtu3/mtu3_gadget.c | 731 drivers/usb/mtu3/mtu3_gadget_ep0.c | 879 drivers/usb/mtu3/mtu3_host.c | 294 +++ drivers/usb/mtu3/mtu3_hw_regs.h| 474 +++ drivers/usb/mtu3/mtu3_plat.c | 490 +++ drivers/usb/mtu3/mtu3_qmu.c| 599 + drivers/usb/mtu3/mtu3_qmu.h| 43 + 20 files changed, 5562 insertions(+), 14 deletions(-) create mode 100644 Documentation/devicetree/bindings/usb/mtu3.txt 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.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 -- 1.7.9.5
Add MediaTek USB3 DRD Driver
>From 5e3e992dc3c02eda12f5cf984a18a57f0207333d Mon Sep 17 00:00:00 2001 From: Chunfeng Yun <chunfeng@mediatek.com> Date: Tue, 10 May 2016 16:04:25 +0800 Subject: [PATCH 0/6] Add MediaTek USB3 DRD Driver These patches introduce the MediaTek USB3 dual-role controller driver. The driver can be configured as Dual-Role Device (DRD), Peripheral Only and Host Only (xHCI) modes. It works well with Mass Storage, RNDIS and g_zero on FS/HS and SS. And it is tested on MT8173 platform which only contains USB2.0 device IP, and on MT6290 platform which contains USB3.0 device IP. Chunfeng Yun (6): dt-bindings: mt8173-xhci: support host side of dual-role mode usb: xhci-mtk: make IPPC register optional dt-bindings: mtu3: add devicetree bindings usb: Add MediaTek USB3 DRD Driver arm64: dts: mediatek: add USB3 DRD driver pinctrl: mt8173: set GPIO16 to usb iddig mode .../devicetree/bindings/usb/mt8173-xhci.txt| 48 ++ Documentation/devicetree/bindings/usb/mtu3.txt | 86 ++ arch/arm64/boot/dts/mediatek/mt8173-evb.dts| 46 +- arch/arm64/boot/dts/mediatek/mt8173.dtsi | 28 +- drivers/pinctrl/mediatek/pinctrl-mtk-mt8173.h |2 +- drivers/usb/Kconfig|2 + drivers/usb/Makefile |1 + drivers/usb/host/xhci-mtk.c| 32 +- drivers/usb/mtu3/Kconfig | 47 ++ drivers/usb/mtu3/Makefile | 20 + drivers/usb/mtu3/mtu3.h| 422 ++ drivers/usb/mtu3/mtu3_core.c | 877 +++ drivers/usb/mtu3/mtu3_dr.c | 353 drivers/usb/mtu3/mtu3_dr.h | 108 +++ drivers/usb/mtu3/mtu3_gadget.c | 735 drivers/usb/mtu3/mtu3_gadget_ep0.c | 889 drivers/usb/mtu3/mtu3_host.c | 294 +++ drivers/usb/mtu3/mtu3_hw_regs.h| 474 +++ drivers/usb/mtu3/mtu3_plat.c | 496 +++ drivers/usb/mtu3/mtu3_qmu.c| 599 + drivers/usb/mtu3/mtu3_qmu.h| 43 + 21 files changed, 5587 insertions(+), 15 deletions(-) create mode 100644 Documentation/devicetree/bindings/usb/mtu3.txt 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.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 -- 1.7.9.5
Add MediaTek USB3 DRD Driver
>From 5e3e992dc3c02eda12f5cf984a18a57f0207333d Mon Sep 17 00:00:00 2001 From: Chunfeng Yun Date: Tue, 10 May 2016 16:04:25 +0800 Subject: [PATCH 0/6] Add MediaTek USB3 DRD Driver These patches introduce the MediaTek USB3 dual-role controller driver. The driver can be configured as Dual-Role Device (DRD), Peripheral Only and Host Only (xHCI) modes. It works well with Mass Storage, RNDIS and g_zero on FS/HS and SS. And it is tested on MT8173 platform which only contains USB2.0 device IP, and on MT6290 platform which contains USB3.0 device IP. Chunfeng Yun (6): dt-bindings: mt8173-xhci: support host side of dual-role mode usb: xhci-mtk: make IPPC register optional dt-bindings: mtu3: add devicetree bindings usb: Add MediaTek USB3 DRD Driver arm64: dts: mediatek: add USB3 DRD driver pinctrl: mt8173: set GPIO16 to usb iddig mode .../devicetree/bindings/usb/mt8173-xhci.txt| 48 ++ Documentation/devicetree/bindings/usb/mtu3.txt | 86 ++ arch/arm64/boot/dts/mediatek/mt8173-evb.dts| 46 +- arch/arm64/boot/dts/mediatek/mt8173.dtsi | 28 +- drivers/pinctrl/mediatek/pinctrl-mtk-mt8173.h |2 +- drivers/usb/Kconfig|2 + drivers/usb/Makefile |1 + drivers/usb/host/xhci-mtk.c| 32 +- drivers/usb/mtu3/Kconfig | 47 ++ drivers/usb/mtu3/Makefile | 20 + drivers/usb/mtu3/mtu3.h| 422 ++ drivers/usb/mtu3/mtu3_core.c | 877 +++ drivers/usb/mtu3/mtu3_dr.c | 353 drivers/usb/mtu3/mtu3_dr.h | 108 +++ drivers/usb/mtu3/mtu3_gadget.c | 735 drivers/usb/mtu3/mtu3_gadget_ep0.c | 889 drivers/usb/mtu3/mtu3_host.c | 294 +++ drivers/usb/mtu3/mtu3_hw_regs.h| 474 +++ drivers/usb/mtu3/mtu3_plat.c | 496 +++ drivers/usb/mtu3/mtu3_qmu.c| 599 + drivers/usb/mtu3/mtu3_qmu.h| 43 + 21 files changed, 5587 insertions(+), 15 deletions(-) create mode 100644 Documentation/devicetree/bindings/usb/mtu3.txt 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.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 -- 1.7.9.5
[PATCH 4/6] usb: Add MediaTek USB3 DRD Driver
This patch adds support for the MediaTek USB3 controller integrated into MT8173. It can be configured as Dual-Role Device (DRD), Peripheral Only and Host Only (xHCI) modes. Signed-off-by: Chunfeng Yun--- drivers/usb/Kconfig|2 + drivers/usb/Makefile |1 + drivers/usb/mtu3/Kconfig | 47 ++ drivers/usb/mtu3/Makefile | 20 + drivers/usb/mtu3/mtu3.h| 422 + drivers/usb/mtu3/mtu3_core.c | 877 +++ drivers/usb/mtu3/mtu3_dr.c | 353 ++ drivers/usb/mtu3/mtu3_dr.h | 108 + drivers/usb/mtu3/mtu3_gadget.c | 735 + drivers/usb/mtu3/mtu3_gadget_ep0.c | 889 drivers/usb/mtu3/mtu3_host.c | 294 drivers/usb/mtu3/mtu3_hw_regs.h| 474 +++ drivers/usb/mtu3/mtu3_plat.c | 496 drivers/usb/mtu3/mtu3_qmu.c| 599 drivers/usb/mtu3/mtu3_qmu.h| 43 ++ 15 files changed, 5360 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.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/drivers/usb/Kconfig b/drivers/usb/Kconfig index 8ed451d..946af81 100644 --- a/drivers/usb/Kconfig +++ b/drivers/usb/Kconfig @@ -96,6 +96,8 @@ source "drivers/usb/usbip/Kconfig" endif +source "drivers/usb/mtu3/Kconfig" + source "drivers/usb/musb/Kconfig" source "drivers/usb/dwc3/Kconfig" diff --git a/drivers/usb/Makefile b/drivers/usb/Makefile index dca7856..7791af6 100644 --- a/drivers/usb/Makefile +++ b/drivers/usb/Makefile @@ -12,6 +12,7 @@ obj-$(CONFIG_USB_DWC2)+= dwc2/ obj-$(CONFIG_USB_ISP1760) += isp1760/ obj-$(CONFIG_USB_MON) += mon/ +obj-$(CONFIG_USB_MTU3) += mtu3/ obj-$(CONFIG_PCI) += host/ obj-$(CONFIG_USB_EHCI_HCD) += host/ diff --git a/drivers/usb/mtu3/Kconfig b/drivers/usb/mtu3/Kconfig new file mode 100644 index 000..6850fb6 --- /dev/null +++ b/drivers/usb/mtu3/Kconfig @@ -0,0 +1,47 @@ +# For MTK USB3.0 IP + +config USB_MTU3 + tristate "MediaTek USB3 Dual Role controller" + depends on (USB || USB_GADGET) && HAS_DMA + select USB_XHCI_MTK if USB_SUPPORT && USB_XHCI_HCD + help + Say Y or M 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, or both. + + If you don't know what this is, please say N. + + Choose M here to compile this driver as a module, and it + will be called mtu3.ko. + + +if USB_MTU3 +choice + bool "MTU3 Mode Selection" + default USB_MTU3_DUAL_ROLE if (USB && USB_GADGET) + default USB_MTU3_HOST if (USB && !USB_GADGET) + default USB_MTU3_GADGET if (!USB && USB_GADGET) + +config USB_MTU3_HOST + bool "Host only mode" + depends on USB=y || USB=USB_MTU3 + 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 + help + Select this when you want to use MTU3 in gadget mode only, + thereby the host feature will be regressed. + +config USB_MTU3_DUAL_ROLE + bool "Dual Role mode" + depends on ((USB=y || USB=USB_MTU3) && (USB_GADGET=y || USB_GADGET=USB_MTU3)) + help + This is the default mode of working of MTU3 controller where + both host and gadget features are enabled. + +endchoice +endif diff --git a/drivers/usb/mtu3/Makefile b/drivers/usb/mtu3/Makefile new file mode 100644 index 000..4a66b01 --- /dev/null +++ b/drivers/usb/mtu3/Makefile @@ -0,0 +1,20 @@ + +#ifeq ($(CONFIG_USB_DEBUG),y) + ccflags-y += -DDEBUG +#endif + +obj-$(CONFIG_USB_MTU3) += mtu3.o + +mtu3-y := mtu3_plat.o + +ifneq ($(filter y,$(CONFIG_USB_MTU3_HOST) $(CONFIG_USB_MTU3_DUAL_ROLE)),) + mtu3-y += mtu3_host.o +endif + +ifneq ($(filter y,$(CONFIG_USB_MTU3_GADGET) $(CONFIG_USB_MTU3_DUAL_ROLE)),) + mtu3-y += mtu3_core.o mtu3_gadget_ep0.o mtu3_gadget.o mtu3_qmu.o +endif + +ifneq ($(CONFIG_USB_MTU3_DUAL_ROLE),) + mtu3-y += mtu3_dr.o +endif \ No newline at end of file diff --git a/drivers/usb/mtu3/mtu3.h
[PATCH 4/6] usb: Add MediaTek USB3 DRD Driver
This patch adds support for the MediaTek USB3 controller integrated into MT8173. It can be configured as Dual-Role Device (DRD), Peripheral Only and Host Only (xHCI) modes. Signed-off-by: Chunfeng Yun --- drivers/usb/Kconfig|2 + drivers/usb/Makefile |1 + drivers/usb/mtu3/Kconfig | 47 ++ drivers/usb/mtu3/Makefile | 20 + drivers/usb/mtu3/mtu3.h| 422 + drivers/usb/mtu3/mtu3_core.c | 877 +++ drivers/usb/mtu3/mtu3_dr.c | 353 ++ drivers/usb/mtu3/mtu3_dr.h | 108 + drivers/usb/mtu3/mtu3_gadget.c | 735 + drivers/usb/mtu3/mtu3_gadget_ep0.c | 889 drivers/usb/mtu3/mtu3_host.c | 294 drivers/usb/mtu3/mtu3_hw_regs.h| 474 +++ drivers/usb/mtu3/mtu3_plat.c | 496 drivers/usb/mtu3/mtu3_qmu.c| 599 drivers/usb/mtu3/mtu3_qmu.h| 43 ++ 15 files changed, 5360 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.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/drivers/usb/Kconfig b/drivers/usb/Kconfig index 8ed451d..946af81 100644 --- a/drivers/usb/Kconfig +++ b/drivers/usb/Kconfig @@ -96,6 +96,8 @@ source "drivers/usb/usbip/Kconfig" endif +source "drivers/usb/mtu3/Kconfig" + source "drivers/usb/musb/Kconfig" source "drivers/usb/dwc3/Kconfig" diff --git a/drivers/usb/Makefile b/drivers/usb/Makefile index dca7856..7791af6 100644 --- a/drivers/usb/Makefile +++ b/drivers/usb/Makefile @@ -12,6 +12,7 @@ obj-$(CONFIG_USB_DWC2)+= dwc2/ obj-$(CONFIG_USB_ISP1760) += isp1760/ obj-$(CONFIG_USB_MON) += mon/ +obj-$(CONFIG_USB_MTU3) += mtu3/ obj-$(CONFIG_PCI) += host/ obj-$(CONFIG_USB_EHCI_HCD) += host/ diff --git a/drivers/usb/mtu3/Kconfig b/drivers/usb/mtu3/Kconfig new file mode 100644 index 000..6850fb6 --- /dev/null +++ b/drivers/usb/mtu3/Kconfig @@ -0,0 +1,47 @@ +# For MTK USB3.0 IP + +config USB_MTU3 + tristate "MediaTek USB3 Dual Role controller" + depends on (USB || USB_GADGET) && HAS_DMA + select USB_XHCI_MTK if USB_SUPPORT && USB_XHCI_HCD + help + Say Y or M 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, or both. + + If you don't know what this is, please say N. + + Choose M here to compile this driver as a module, and it + will be called mtu3.ko. + + +if USB_MTU3 +choice + bool "MTU3 Mode Selection" + default USB_MTU3_DUAL_ROLE if (USB && USB_GADGET) + default USB_MTU3_HOST if (USB && !USB_GADGET) + default USB_MTU3_GADGET if (!USB && USB_GADGET) + +config USB_MTU3_HOST + bool "Host only mode" + depends on USB=y || USB=USB_MTU3 + 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 + help + Select this when you want to use MTU3 in gadget mode only, + thereby the host feature will be regressed. + +config USB_MTU3_DUAL_ROLE + bool "Dual Role mode" + depends on ((USB=y || USB=USB_MTU3) && (USB_GADGET=y || USB_GADGET=USB_MTU3)) + help + This is the default mode of working of MTU3 controller where + both host and gadget features are enabled. + +endchoice +endif diff --git a/drivers/usb/mtu3/Makefile b/drivers/usb/mtu3/Makefile new file mode 100644 index 000..4a66b01 --- /dev/null +++ b/drivers/usb/mtu3/Makefile @@ -0,0 +1,20 @@ + +#ifeq ($(CONFIG_USB_DEBUG),y) + ccflags-y += -DDEBUG +#endif + +obj-$(CONFIG_USB_MTU3) += mtu3.o + +mtu3-y := mtu3_plat.o + +ifneq ($(filter y,$(CONFIG_USB_MTU3_HOST) $(CONFIG_USB_MTU3_DUAL_ROLE)),) + mtu3-y += mtu3_host.o +endif + +ifneq ($(filter y,$(CONFIG_USB_MTU3_GADGET) $(CONFIG_USB_MTU3_DUAL_ROLE)),) + mtu3-y += mtu3_core.o mtu3_gadget_ep0.o mtu3_gadget.o mtu3_qmu.o +endif + +ifneq ($(CONFIG_USB_MTU3_DUAL_ROLE),) + mtu3-y += mtu3_dr.o +endif \ No newline at end of file diff --git a/drivers/usb/mtu3/mtu3.h b/drivers/usb/mtu3/mtu3.h new file mode