USB3 regression in RK3399
Enric Balletbo i Serra
enric.balletbo at collabora.com
Mon Feb 26 08:34:20 PST 2018
Hi Vicente,
On 25/02/18 11:03, Vicente Bergas wrote:
> (cut)
>>>>>> testing on the Sapphire board, which uses the RK3399 SoC, a regression
>>>>>> has been found in v4.16-rc2 wrt v4.15.4 regarding the USB3 type-A port:
>>>>>> In v4.15.4 it works in USB2-only mode.
>>>>>> In v4.16-rc2 it does not work.
> (cut)
>>>>> Hmm, I'd guess the main issue would be a missing typec-phy driver
>>>>> in your kernel (see drivers/phy/rockchip/phy-rockchip-typec.c
> (cut)
>>> I suspect that what Heiko says is right and typec-phy fails probing. Could you
> (cut)
>
> Hello,
> this is the patch to blame for the regression:
>
> From c301b327aea898af558b2387252a2f5fc0117dee Mon Sep 17 00:00:00 2001
> From: Enric Balletbo i Serra <enric.balletbo at collabora.com>
> Date: Fri, 15 Dec 2017 12:00:03 +0100
> Subject: [PATCH] arm64: dts: rockchip: add usb3-phy otg-port support for rk3399
>
> Add the usb3 phyter for the USB3.0 OTG controller.
>
> Signed-off-by: Enric Balletbo i Serra <enric.balletbo at collabora.com>
> Signed-off-by: Heiko Stuebner <heiko at sntech.de>
> ---
> arch/arm64/boot/dts/rockchip/rk3399.dtsi | 8 ++++----
> 1 file changed, 4 insertions(+), 4 deletions(-)
>
> diff --git a/arch/arm64/boot/dts/rockchip/rk3399.dtsi
> b/arch/arm64/boot/dts/rockchip/rk3399.dtsi
> index b4511503878b..7aa2144e0d47 100644
> --- a/arch/arm64/boot/dts/rockchip/rk3399.dtsi
> +++ b/arch/arm64/boot/dts/rockchip/rk3399.dtsi
> @@ -411,8 +411,8 @@
> reg = <0x0 0xfe800000 0x0 0x100000>;
> interrupts = <GIC_SPI 105 IRQ_TYPE_LEVEL_HIGH 0>;
> dr_mode = "otg";
> - phys = <&u2phy0_otg>;
> - phy-names = "usb2-phy";
> + phys = <&u2phy0_otg>, <&tcphy0_usb3>;
> + phy-names = "usb2-phy", "usb3-phy";
> phy_type = "utmi_wide";
> snps,dis_enblslpm_quirk;
> snps,dis-u2-freeclk-exists-quirk;
> @@ -444,8 +444,8 @@
> reg = <0x0 0xfe900000 0x0 0x100000>;
> interrupts = <GIC_SPI 110 IRQ_TYPE_LEVEL_HIGH 0>;
> dr_mode = "otg";
> - phys = <&u2phy1_otg>;
> - phy-names = "usb2-phy";
> + phys = <&u2phy1_otg>, <&tcphy1_usb3>;
> + phy-names = "usb2-phy", "usb3-phy";
> phy_type = "utmi_wide";
> snps,dis_enblslpm_quirk;
> snps,dis-u2-freeclk-exists-quirk;
>
Can you try if the following patch solves the issue for you?
diff --git a/arch/arm64/boot/dts/rockchip/rk3399-sapphire.dtsi
b/arch/arm64/boot/dts/rockchip/rk3399-sapphire.dtsi
index f7157c1d768b..617d362eb8af 100644
--- a/arch/arm64/boot/dts/rockchip/rk3399-sapphire.dtsi
+++ b/arch/arm64/boot/dts/rockchip/rk3399-sapphire.dtsi
@@ -569,6 +569,14 @@
status = "okay";
};
+&tcphy0 {
+ status = "okay";
+};
+
+&tcphy1 {
+ status = "okay";
+};
+
&u2phy0 {
status = "okay";
diff --git a/drivers/phy/rockchip/phy-rockchip-typec.c
b/drivers/phy/rockchip/phy-rockchip-typec.c
index 1c79785a5439..6af1ec262fcb 100644
--- a/drivers/phy/rockchip/phy-rockchip-typec.c
+++ b/drivers/phy/rockchip/phy-rockchip-typec.c
@@ -821,6 +821,9 @@ static int tcphy_get_mode(struct rockchip_typec_phy *tcphy)
u8 mode;
int ret;
+ if (!edev)
+ return MODE_DFP_USB;
+
ufp = extcon_get_state(edev, EXTCON_USB);
dp = extcon_get_state(edev, EXTCON_DISP_DP);
@@ -1159,9 +1162,9 @@ static int rockchip_typec_phy_probe(struct platform_device
*pdev)
tcphy->extcon = extcon_get_edev_by_phandle(dev, 0);
if (IS_ERR(tcphy->extcon)) {
- if (PTR_ERR(tcphy->extcon) != -EPROBE_DEFER)
- dev_err(dev, "Invalid or missing extcon\n");
- return PTR_ERR(tcphy->extcon);
+ if (PTR_ERR(tcphy->extcon) == -EPROBE_DEFER)
+ return PTR_ERR(tcphy->extcon);
+ tcphy->extcon = NULL;
}
pm_runtime_enable(dev);
Best regards,
Enric
More information about the Linux-rockchip
mailing list