summaryrefslogtreecommitdiff
path: root/src/soc/mediatek
diff options
context:
space:
mode:
authorShaocheng Wang <shaocheng.wang@mediatek.corp-partner.google.com>2023-02-17 15:42:25 +0800
committerRex-BC Chen <rex-bc.chen@mediatek.com>2023-02-22 03:18:11 +0000
commited2b6a5a17fd71e6069f3aa017341694e77df777 (patch)
tree25abac3deb3bacdb6b83a4ab03c29fb636f0a37c /src/soc/mediatek
parent8b4154c1d2914c67d76cd9467457ea3d2815f47a (diff)
soc/mediatek/mt8188: Fix USB2 detection issue
MT8188 supports port0/port1 download. The hardware needs a trapping pin to select the port to use. When port1 is selected, the phy of port1 will be switched to port0. That is, port1 connector will be the physical line of port0. Since port0 phy isn't initialized in coreboot, switch back to port1 phy. BUG=b:269059211 TEST=can detect USB2 devices in depthcharge. Change-Id: Ic97d0bd9d0233883196b2e73ac2a22cd8ea9466b Signed-off-by: Shaocheng Wang <shaocheng.wang@mediatek.corp-partner.google.com> Reviewed-on: https://review.coreboot.org/c/coreboot/+/73170 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Rex-BC Chen <rex-bc.chen@mediatek.com> Reviewed-by: Yu-Ping Wu <yupingso@google.com> Reviewed-by: Yidi Lin <yidilin@google.com>
Diffstat (limited to 'src/soc/mediatek')
-rw-r--r--src/soc/mediatek/mt8188/usb.c15
1 files changed, 15 insertions, 0 deletions
diff --git a/src/soc/mediatek/mt8188/usb.c b/src/soc/mediatek/mt8188/usb.c
index 2312e2d42a..75d4667e7a 100644
--- a/src/soc/mediatek/mt8188/usb.c
+++ b/src/soc/mediatek/mt8188/usb.c
@@ -11,7 +11,22 @@
#include <soc/pll_common.h>
#include <soc/usb.h>
+#define TRAP_USB20_P1_USBD1_EN 0x10005600
+
+static void mt_set_trapping_pin(void)
+{
+ /*
+ * MT8188 supports port0/port1 download. The hardware needs a trapping pin to
+ * select the port to use. When port1 is selected, the phy of port1 will be
+ * switched to port0. That is, port1 connector will be the physical line of
+ * port0. Since port0 phy isn't initialized in coreboot, switch back to port1
+ * phy.
+ */
+ setbits32p(TRAP_USB20_P1_USBD1_EN, BIT(9));
+}
+
void mtk_usb_prepare(void)
{
mt_pll_set_usb_clock();
+ mt_set_trapping_pin();
}