blob: 07b87fc33b0a16cf02a5096067f15e87335a3538 [file] [log] [blame]
developer8cdcb262022-10-27 14:36:15 +08001From 083b79c977495cafc70c5d044db1f3f6c0587b1c Mon Sep 17 00:00:00 2001
developer9cd822e2021-06-24 09:16:06 +08002From: Zhanyong Wang <zhanyong.wang@mediatek.com>
developer3c58fe12022-08-15 17:17:33 +08003Date: Mon, 15 Aug 2022 12:40:22 +0800
4Subject: [PATCH 2/3] xHCI: MT79xx USB 2.0 USBIF compliance toolkit
developer9cd822e2021-06-24 09:16:06 +08005
developer3c58fe12022-08-15 17:17:33 +08006MT79xx USB 2.0 USBIF compliance toolkit
developer9cd822e2021-06-24 09:16:06 +08007
8Signed-off-by: Zhanyong Wang <zhanyong.wang@mediatek.com>
9---
developer3c58fe12022-08-15 17:17:33 +080010 drivers/usb/host/Kconfig | 9 +++++++++
11 drivers/usb/host/Makefile | 10 ++++++++++
developer8cdcb262022-10-27 14:36:15 +080012 drivers/usb/host/xhci-mtk.c | 6 ++++--
developer3c58fe12022-08-15 17:17:33 +080013 drivers/usb/host/xhci-mtk.h | 7 +++++++
14 drivers/usb/host/xhci.c | 2 +-
15 drivers/usb/host/xhci.h | 1 +
developer8cdcb262022-10-27 14:36:15 +080016 6 files changed, 32 insertions(+), 3 deletions(-)
developer9cd822e2021-06-24 09:16:06 +080017
18diff --git a/drivers/usb/host/Kconfig b/drivers/usb/host/Kconfig
19index 79b2e79dddd0..12b1bf9aa043 100644
20--- a/drivers/usb/host/Kconfig
21+++ b/drivers/usb/host/Kconfig
22@@ -69,6 +69,15 @@ config USB_XHCI_MTK
23 found in MediaTek SoCs.
24 If unsure, say N.
25
26+config USB_XHCI_MTK_DEBUGFS
27+ tristate "xHCI DEBUGFS support for Mediatek MT65xx"
28+ depends on USB_XHCI_MTK && DEBUG_FS
29+ default y
30+ ---help---
31+ Say 'Y' to enable the debugfs support for the xHCI host controller
32+ found in Mediatek MT65xx SoCs.
33+ If don't need, say N.
34+
35 config USB_XHCI_MVEBU
36 tristate "xHCI support for Marvell Armada 375/38x/37xx"
37 select USB_XHCI_PLATFORM
38diff --git a/drivers/usb/host/Makefile b/drivers/usb/host/Makefile
developer3c58fe12022-08-15 17:17:33 +080039index b191361257cc..f064f836db2b 100644
developer9cd822e2021-06-24 09:16:06 +080040--- a/drivers/usb/host/Makefile
41+++ b/drivers/usb/host/Makefile
developer3c58fe12022-08-15 17:17:33 +080042@@ -21,6 +21,16 @@ endif
developer9cd822e2021-06-24 09:16:06 +080043
44 ifneq ($(CONFIG_USB_XHCI_MTK), )
45 xhci-hcd-y += xhci-mtk-sch.o
developerba28e032021-12-07 10:40:00 +080046+ xhci-hcd-$(CONFIG_USB_XHCI_MTK_DEBUGFS) += xhci-mtk-test.o
47+ xhci-hcd-$(CONFIG_USB_XHCI_MTK_DEBUGFS) += xhci-mtk-unusual.o
48+ xhci-hcd-$(CONFIG_USB_XHCI_MTK_DEBUGFS) += xhci-mtk-intr-en.o
49+ xhci-hcd-$(CONFIG_USB_XHCI_MTK_DEBUGFS) += xhci-mtk-vrt-vref.o
50+ xhci-hcd-$(CONFIG_USB_XHCI_MTK_DEBUGFS) += xhci-mtk-term-vref.o
51+ xhci-hcd-$(CONFIG_USB_XHCI_MTK_DEBUGFS) += xhci-mtk-hstx-srctrl.o
52+ xhci-hcd-$(CONFIG_USB_XHCI_MTK_DEBUGFS) += xhci-mtk-discth.o
53+ xhci-hcd-$(CONFIG_USB_XHCI_MTK_DEBUGFS) += xhci-mtk-chgdt-en.o
developerabd06d72022-03-03 16:13:41 +080054+ xhci-hcd-$(CONFIG_USB_XHCI_MTK_DEBUGFS) += xhci-mtk-reg.o
developer3c58fe12022-08-15 17:17:33 +080055+ xhci-hcd-$(CONFIG_USB_XHCI_MTK_DEBUGFS) += xhci-mtk-preemphasic.o
developer9cd822e2021-06-24 09:16:06 +080056 endif
57
58 xhci-plat-hcd-y := xhci-plat.o
59diff --git a/drivers/usb/host/xhci-mtk.c b/drivers/usb/host/xhci-mtk.c
developer8cdcb262022-10-27 14:36:15 +080060index 77ddb8c05500..7a200793169b 100644
developer9cd822e2021-06-24 09:16:06 +080061--- a/drivers/usb/host/xhci-mtk.c
62+++ b/drivers/usb/host/xhci-mtk.c
developer8cdcb262022-10-27 14:36:15 +080063@@ -18,10 +18,10 @@
developerba28e032021-12-07 10:40:00 +080064 #include <linux/pm_runtime.h>
65 #include <linux/regmap.h>
66 #include <linux/regulator/consumer.h>
67-
68+#include <linux/usb/of.h>
developer9cd822e2021-06-24 09:16:06 +080069 #include "xhci.h"
70 #include "xhci-mtk.h"
developer8cdcb262022-10-27 14:36:15 +080071-
developer9cd822e2021-06-24 09:16:06 +080072+#include "xhci-mtk-test.h"
developer8cdcb262022-10-27 14:36:15 +080073 /* COMPLIANCE_CP5_CP7_TXDEEMPH_10G register */
74 #define COMPLIANCE_CP5_CP7_TXDEEMPH_10G 0x2428
75 #define CP5_CP7_TXDEEMPH_10G GENMASK(17, 0)
76@@ -586,6 +586,7 @@ static int xhci_mtk_probe(struct platform_device *pdev)
developer9cd822e2021-06-24 09:16:06 +080077 ret = usb_add_hcd(xhci->shared_hcd, irq, IRQF_SHARED);
78 if (ret)
79 goto dealloc_usb2_hcd;
developerba28e032021-12-07 10:40:00 +080080+ hqa_create_attr(dev);
developer9cd822e2021-06-24 09:16:06 +080081
82 return 0;
83
developer8cdcb262022-10-27 14:36:15 +080084@@ -620,6 +621,7 @@ static int xhci_mtk_remove(struct platform_device *dev)
developerba28e032021-12-07 10:40:00 +080085 struct usb_hcd *hcd = mtk->hcd;
86 struct xhci_hcd *xhci = hcd_to_xhci(hcd);
87 struct usb_hcd *shared_hcd = xhci->shared_hcd;
88+ hqa_remove_attr(&dev->dev);
developer9cd822e2021-06-24 09:16:06 +080089
developerba28e032021-12-07 10:40:00 +080090 pm_runtime_put_noidle(&dev->dev);
91 pm_runtime_disable(&dev->dev);
developer9cd822e2021-06-24 09:16:06 +080092diff --git a/drivers/usb/host/xhci-mtk.h b/drivers/usb/host/xhci-mtk.h
developer8cdcb262022-10-27 14:36:15 +080093index 8a884e7b481b..e815d7091acc 100644
developer9cd822e2021-06-24 09:16:06 +080094--- a/drivers/usb/host/xhci-mtk.h
95+++ b/drivers/usb/host/xhci-mtk.h
developer8cdcb262022-10-27 14:36:15 +080096@@ -157,6 +157,13 @@ struct xhci_hcd_mtk {
developer9cd822e2021-06-24 09:16:06 +080097 u32 uwk_reg_base;
98 u32 uwk_vers;
developer8cdcb262022-10-27 14:36:15 +080099 bool p0_speed_fixup;
developer9cd822e2021-06-24 09:16:06 +0800100+
101+#ifdef CONFIG_USB_XHCI_MTK_DEBUGFS
developerba28e032021-12-07 10:40:00 +0800102+ int test_mode;
103+ size_t hqa_size;
104+ u32 hqa_pos;
105+ char *hqa_buf;
developer9cd822e2021-06-24 09:16:06 +0800106+#endif
107 };
108
109 static inline struct xhci_hcd_mtk *hcd_to_mtk(struct usb_hcd *hcd)
110diff --git a/drivers/usb/host/xhci.c b/drivers/usb/host/xhci.c
developer8cdcb262022-10-27 14:36:15 +0800111index 5ce16a259e61..b6f8383f7371 100644
developer9cd822e2021-06-24 09:16:06 +0800112--- a/drivers/usb/host/xhci.c
113+++ b/drivers/usb/host/xhci.c
developer8cdcb262022-10-27 14:36:15 +0800114@@ -713,7 +713,7 @@ EXPORT_SYMBOL_GPL(xhci_run);
developer9cd822e2021-06-24 09:16:06 +0800115 * Disable device contexts, disable IRQs, and quiesce the HC.
116 * Reset the HC, finish any completed transactions, and cleanup memory.
117 */
118-static void xhci_stop(struct usb_hcd *hcd)
119+void xhci_stop(struct usb_hcd *hcd)
120 {
121 u32 temp;
122 struct xhci_hcd *xhci = hcd_to_xhci(hcd);
123diff --git a/drivers/usb/host/xhci.h b/drivers/usb/host/xhci.h
developer8cdcb262022-10-27 14:36:15 +0800124index 0dc448630197..80b3124c43e2 100644
developer9cd822e2021-06-24 09:16:06 +0800125--- a/drivers/usb/host/xhci.h
126+++ b/drivers/usb/host/xhci.h
developer3c58fe12022-08-15 17:17:33 +0800127@@ -2070,6 +2070,7 @@ int xhci_halt(struct xhci_hcd *xhci);
developer9cd822e2021-06-24 09:16:06 +0800128 int xhci_start(struct xhci_hcd *xhci);
developer3c58fe12022-08-15 17:17:33 +0800129 int xhci_reset(struct xhci_hcd *xhci, u64 timeout_us);
developer9cd822e2021-06-24 09:16:06 +0800130 int xhci_run(struct usb_hcd *hcd);
131+void xhci_stop(struct usb_hcd *hcd);
132 int xhci_gen_setup(struct usb_hcd *hcd, xhci_get_quirks_t get_quirks);
133 void xhci_shutdown(struct usb_hcd *hcd);
134 void xhci_init_driver(struct hc_driver *drv,
135--
1362.18.0
137