USB3 regression in RK3399
Vicente Bergas
vicencb at gmail.com
Mon Feb 26 10:38:12 PST 2018
On Mon, Feb 26, 2018 at 5:34 PM, Enric Balletbo i Serra
<enric.balletbo at collabora.com> wrote:
> 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?
Hi Enric,
with this patch the usb3 type-A port works fine in both usb2-mode and
usb-3 mode!
Now I am getting 350Mbytes/s read bandwidth to the SSD, that's a big
improvement.
Type-C not tested.
Regards,
Vicente.
> 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