From 48ada284da070753559ea9d434eaa11ac2bf5d6f 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/rk356x.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 5aed3c0d1104..40adb47747e0 100644 --- a/arch/arm64/boot/dts/rockchip/rk3328.dtsi +++ b/arch/arm64/boot/dts/rockchip/rk3328.dtsi @@ -1012,6 +1012,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 c99ea5f57466..d7290405dec6 100644 --- a/arch/arm64/boot/dts/rockchip/rk3399.dtsi +++ b/arch/arm64/boot/dts/rockchip/rk3399.dtsi @@ -495,6 +495,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"; @@ -532,6 +533,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 145a798ca5b1..9c62cd215527 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 2c0acaed59c3..c156868b6643 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/rk356x.dtsi b/arch/arm64/boot/dts/rockchip/rk356x.dtsi index bc4dbf9d203e..c4647ac2fdfc 100644 --- a/arch/arm64/boot/dts/rockchip/rk356x.dtsi +++ b/arch/arm64/boot/dts/rockchip/rk356x.dtsi @@ -601,6 +601,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"; @@ -635,6 +636,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 2d82c25f9899..2689fa8578e5 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 f8eb3e0cd8ba..9fdf361bade2 100644 --- a/arch/arm64/boot/dts/rockchip/rk3588s.dtsi +++ b/arch/arm64/boot/dts/rockchip/rk3588s.dtsi @@ -2630,6 +2630,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"; @@ -2736,6 +2737,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"; };