From d04353d0020cd29c4b54f9db165f37312f8c4a2d Mon Sep 17 00:00:00 2001 From: William Wu Date: Tue, 15 Aug 2023 15:46:24 +0800 Subject: [PATCH] arm64: dts: rockchip: disable hs park mode for usb dwc3 controller Some high speed devices performance drop drastically on Rockchip platforms when connected with DWC3-xHCI controller. It's because that the DWC3 controller enable high speed park mode by default, it aims to improve performance with pipelining of multiple packet. However, for some devices (such as UVC with bulk transfer VID:04b4, PID:02f9), when an IN request is sent within 900ns of the ACK of the previous packet, these devices NAKs more than 3 times, it could decrease the performance. These slow devices include: 1. idVendor=04b4, idProduct=02f9, Product: IRay UVC 2. idVendor=1921, idProduct=21863, Product: Sandisk 3. idVendor=3744, idProduct=8552, Manufacturer: Flex Drive In order to improve compatibility with high speed devices, this patch disable HS park mode for USB DWC3 controller on all arm64 SoCs. With this patch, we test RK3588 with one slow device (IRay UVC VID:04b4, PID:02f9) and three fast devices (U2 disk VID:058f, PID:6387; U2 disk VID:0781, PID:557c; U3 disk VID:174c, PID:55aa), all of these device have no performance loss. Signed-off-by: William Wu Change-Id: I9037143fa2553317ad7ae55abeafad3b106cafcb --- arch/arm64/boot/dts/rockchip/rk1808.dtsi | 1 + arch/arm64/boot/dts/rockchip/rk3328.dtsi | 1 + arch/arm64/boot/dts/rockchip/rk3399.dtsi | 2 ++ arch/arm64/boot/dts/rockchip/rk3528.dtsi | 2 ++ arch/arm64/boot/dts/rockchip/rk3562.dtsi | 2 ++ arch/arm64/boot/dts/rockchip/rk3568.dtsi | 2 ++ arch/arm64/boot/dts/rockchip/rk3588.dtsi | 1 + arch/arm64/boot/dts/rockchip/rk3588s.dtsi | 2 ++ 8 files changed, 13 insertions(+) diff --git a/arch/arm64/boot/dts/rockchip/rk1808.dtsi b/arch/arm64/boot/dts/rockchip/rk1808.dtsi index 3401beb0837b..429bbd657124 100644 --- a/arch/arm64/boot/dts/rockchip/rk1808.dtsi +++ b/arch/arm64/boot/dts/rockchip/rk1808.dtsi @@ -385,6 +385,7 @@ snps,dis-del-phy-power-chg-quirk; snps,tx-ipgap-linecheck-dis-quirk; snps,xhci-trb-ent-quirk; + snps,parkmode-disable-hs-quirk; snps,parkmode-disable-ss-quirk; status = "disabled"; }; diff --git a/arch/arm64/boot/dts/rockchip/rk3328.dtsi b/arch/arm64/boot/dts/rockchip/rk3328.dtsi index bcbadbae2910..0a8357f34422 100644 --- a/arch/arm64/boot/dts/rockchip/rk3328.dtsi +++ b/arch/arm64/boot/dts/rockchip/rk3328.dtsi @@ -1003,6 +1003,7 @@ snps,dis-u2-freeclk-exists-quirk; snps,dis_u2_susphy_quirk; snps,dis_u3_susphy_quirk; + snps,parkmode-disable-hs-quirk; snps,parkmode-disable-ss-quirk; status = "disabled"; }; diff --git a/arch/arm64/boot/dts/rockchip/rk3399.dtsi b/arch/arm64/boot/dts/rockchip/rk3399.dtsi index af24b9864153..c50bacc6a5e5 100644 --- a/arch/arm64/boot/dts/rockchip/rk3399.dtsi +++ b/arch/arm64/boot/dts/rockchip/rk3399.dtsi @@ -456,6 +456,7 @@ snps,dis_u2_susphy_quirk; snps,dis-del-phy-power-chg-quirk; snps,dis-tx-ipgap-linecheck-quirk; + snps,parkmode-disable-hs-quirk; snps,parkmode-disable-ss-quirk; power-domains = <&power RK3399_PD_USB3>; status = "disabled"; @@ -493,6 +494,7 @@ snps,dis_u2_susphy_quirk; snps,dis-del-phy-power-chg-quirk; snps,dis-tx-ipgap-linecheck-quirk; + snps,parkmode-disable-hs-quirk; snps,parkmode-disable-ss-quirk; power-domains = <&power RK3399_PD_USB3>; status = "disabled"; diff --git a/arch/arm64/boot/dts/rockchip/rk3528.dtsi b/arch/arm64/boot/dts/rockchip/rk3528.dtsi index ba30a26d5ead..5a87757d3d00 100644 --- a/arch/arm64/boot/dts/rockchip/rk3528.dtsi +++ b/arch/arm64/boot/dts/rockchip/rk3528.dtsi @@ -650,6 +650,8 @@ snps,dis-tx-ipgap-linecheck-quirk; snps,xhci-trb-ent-quirk; snps,dis_rxdet_inp3_quirk; + snps,parkmode-disable-hs-quirk; + snps,parkmode-disable-ss-quirk; quirk-skip-phy-init; status = "disabled"; }; diff --git a/arch/arm64/boot/dts/rockchip/rk3562.dtsi b/arch/arm64/boot/dts/rockchip/rk3562.dtsi index f9c593362561..2716af7ca471 100644 --- a/arch/arm64/boot/dts/rockchip/rk3562.dtsi +++ b/arch/arm64/boot/dts/rockchip/rk3562.dtsi @@ -843,6 +843,8 @@ snps,dis-del-phy-power-chg-quirk; snps,dis-tx-ipgap-linecheck-quirk; snps,dis_rxdet_inp3_quirk; + snps,parkmode-disable-hs-quirk; + snps,parkmode-disable-ss-quirk; quirk-skip-phy-init; status = "disabled"; }; diff --git a/arch/arm64/boot/dts/rockchip/rk3568.dtsi b/arch/arm64/boot/dts/rockchip/rk3568.dtsi index c2224c2a5e8c..c9ac4e7942f2 100644 --- a/arch/arm64/boot/dts/rockchip/rk3568.dtsi +++ b/arch/arm64/boot/dts/rockchip/rk3568.dtsi @@ -621,6 +621,7 @@ snps,dis-tx-ipgap-linecheck-quirk; snps,dis_rxdet_inp3_quirk; snps,xhci-trb-ent-quirk; + snps,parkmode-disable-hs-quirk; snps,parkmode-disable-ss-quirk; quirk-skip-phy-init; status = "disabled"; @@ -655,6 +656,7 @@ snps,dis-tx-ipgap-linecheck-quirk; snps,dis_rxdet_inp3_quirk; snps,xhci-trb-ent-quirk; + snps,parkmode-disable-hs-quirk; snps,parkmode-disable-ss-quirk; status = "disabled"; }; diff --git a/arch/arm64/boot/dts/rockchip/rk3588.dtsi b/arch/arm64/boot/dts/rockchip/rk3588.dtsi index 0f78f6e6a20e..c3bdd738b494 100644 --- a/arch/arm64/boot/dts/rockchip/rk3588.dtsi +++ b/arch/arm64/boot/dts/rockchip/rk3588.dtsi @@ -116,6 +116,7 @@ snps,dis-u2-freeclk-exists-quirk; snps,dis-del-phy-power-chg-quirk; snps,dis-tx-ipgap-linecheck-quirk; + snps,parkmode-disable-hs-quirk; snps,parkmode-disable-ss-quirk; status = "disabled"; }; diff --git a/arch/arm64/boot/dts/rockchip/rk3588s.dtsi b/arch/arm64/boot/dts/rockchip/rk3588s.dtsi index dcd429389151..8d64adfcdd1d 100644 --- a/arch/arm64/boot/dts/rockchip/rk3588s.dtsi +++ b/arch/arm64/boot/dts/rockchip/rk3588s.dtsi @@ -2576,6 +2576,7 @@ snps,dis-u2-freeclk-exists-quirk; snps,dis-del-phy-power-chg-quirk; snps,dis-tx-ipgap-linecheck-quirk; + snps,parkmode-disable-hs-quirk; snps,parkmode-disable-ss-quirk; quirk-skip-phy-init; status = "disabled"; @@ -2682,6 +2683,7 @@ snps,dis-del-phy-power-chg-quirk; snps,dis-tx-ipgap-linecheck-quirk; snps,dis_rxdet_inp3_quirk; + snps,parkmode-disable-hs-quirk; snps,parkmode-disable-ss-quirk; status = "disabled"; };