linux-sunxi.lists.linux.dev archive mirror
 help / color / mirror / Atom feed
* [PATCH] phy: sun4i-usb: Fix PHY0 routing and passby configuration for MUSB
@ 2021-05-26  0:57 Andre Przywara
  2021-05-26 10:48 ` Paul Kocialkowski
  2021-05-26 17:07 ` Jagan Teki
  0 siblings, 2 replies; 8+ messages in thread
From: Andre Przywara @ 2021-05-26  0:57 UTC (permalink / raw)
  To: Jagan Teki
  Cc: u-boot, Paul Kocialkowski, Jernej Skrabec, Samuel Holland,
	Icenowy Zheng, linux-sunxi

From: Paul Kocialkowski <paul.kocialkowski@bootlin.com>

Recent Allwinner platforms (starting with the H3) only use the MUSB
controller for peripheral mode and use HCI for host mode. As a result,
extra steps need to be taken to properly route USB signals to one or
the other. More precisely, the following is required:
* Routing the pins to either HCI/MUSB (controlled by PHY);
* Enabling USB PHY passby in HCI mode (controlled by PMU).

The current code will enable passby for each PHY and reroute PHY0 to
MUSB, which is inconsistent and results in broken USB host support
for port 0.

Passby on PHY0 must only be enabled when we want to use HCI. Since
host/device mode detection is not available from the PHY code and
because U-Boot does not support changing the mode dynamically anyway,
we can just mux the controller to MUSB if it is enabled and mux it to
HCI otherwise.

This fixes USB host support for port 0 on platforms with PHY0 dual-route,
especially on boards like Pine64 (with only USB-A host ports) and
TV boxes without OTG ports.

Signed-off-by: Paul Kocialkowski <paul.kocialkowski@bootlin.com>
[Andre: tweak commit message, use IS_ENABLED()]
Signed-off-by: Andre Przywara <andre.przywara@arm.com>
---
Hi,

for H6 boards to work this requires a DT update (to get the <&usbphy 0>
links between HCI and PHY), which I will send later.
Tested on Pine H64, Pine64-LTS, OrangePi Zero, OrangePi PC 2, BananaPi M64,
BananaPi M1.

Cheers,
Andre

 drivers/phy/allwinner/phy-sun4i-usb.c | 16 ++++++++++++++--
 1 file changed, 14 insertions(+), 2 deletions(-)

diff --git a/drivers/phy/allwinner/phy-sun4i-usb.c b/drivers/phy/allwinner/phy-sun4i-usb.c
index 5723c980323..e6ceafc7648 100644
--- a/drivers/phy/allwinner/phy-sun4i-usb.c
+++ b/drivers/phy/allwinner/phy-sun4i-usb.c
@@ -313,9 +313,21 @@ static int sun4i_usb_phy_init(struct phy *phy)
 				    data->cfg->disc_thresh, PHY_DISCON_TH_LEN);
 	}
 
-	sun4i_usb_phy_passby(phy, true);
+	if (IS_ENABLED(CONFIG_USB_MUSB_SUNXI)) {
+		/* Needed for HCI and conflicts with MUSB, keep PHY0 on MUSB */
+		if (usb_phy->id != 0)
+			sun4i_usb_phy_passby(phy, true);
+
+		/* Route PHY0 to MUSB to allow USB gadget */
+		if (data->cfg->phy0_dual_route)
+			sun4i_usb_phy0_reroute(data, true);
+	} else {
+		sun4i_usb_phy_passby(phy, true);
 
-	sun4i_usb_phy0_reroute(data, true);
+		/* Route PHY0 to HCI to allow USB host */
+		if (data->cfg->phy0_dual_route)
+			sun4i_usb_phy0_reroute(data, false);
+	}
 
 	return 0;
 }
-- 
2.17.5


^ permalink raw reply related	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2021-05-27 11:33 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-05-26  0:57 [PATCH] phy: sun4i-usb: Fix PHY0 routing and passby configuration for MUSB Andre Przywara
2021-05-26 10:48 ` Paul Kocialkowski
2021-05-26 11:29   ` Andre Przywara
2021-05-26 17:07 ` Jagan Teki
2021-05-26 17:31   ` Andre Przywara
2021-05-26 18:21     ` Jagan Teki
2021-05-26 19:08       ` Andre Przywara
2021-05-27 11:33         ` Jagan Teki

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).