From a064f846225e1ea4b3f942ea85e2f7b4f3d0cf67 Mon Sep 17 00:00:00 2001 From: William Wu Date: Wed, 29 Nov 2023 09:46:48 +0800 Subject: [PATCH] ARM: dts: rockchip: set usb dr_mode to otg for rv1106 evb1 and evb2 Most of rv1106 evb1 and evb2 dts set the usbdrd_dwc3 dr_mode to peripheral, it aimed to avoid conflict when set vbus-supply for otg host mode, likes rv1106g-evb2 v10, the USB_PWREN gpio is shared with usb vbus-supply and emmc/spi, and set peripheral mode can also simplify the usb controller initialization process. However, peripheral mode causes two issues: 1. USB device can't be recognized in hot plug scenario. The dwc3 driver print err log: dwc3 ffb00000.usb: failed to enable ep0out 2. The dwc3 driver fails to stop controller in the function dwc3_gadget_run_stop() when do system reboot, and it will increase the reboot time because the stop timeout is set to usleep_range(1000, 2000) * 2000. If the CONFIG_HIGH_RES_TIMERS is disabled and the CONFIG_HZ_100 is enabled, the dwc3 stop timeout will take about 20 seconds. The root cause of the two issues is that the usb2 phy is set to suspend mode in phy driver if the usb in unconnected state, and the usb controller internal utmi clock provided by usb2 phy is also disabled. If the dwc3 driver access the registers of the dwc3 controller while the usb2 phy in suspend mode, the accessing operation is invalid. This patch sets the dr_mode to otg, then the dwc3 driver will enable the pm runtime and avoid accessing its registers while the usb2 phy in suspend mode. In otg mode, the dwc3 uses the extcon notifier from the usb2 phy to set peripheral or host mode. Signed-off-by: William Wu Change-Id: I0e77771c2ef62ee6b86c5d7d6444ea7539e51833 --- arch/arm/boot/dts/rv1106g-evb1-v11-cvr-dual-cam.dts | 2 +- arch/arm/boot/dts/rv1106g-evb1-v11-dual-cam.dts | 2 +- arch/arm/boot/dts/rv1106g-evb1-v11.dts | 2 +- arch/arm/boot/dts/rv1106g-evb2-v10-dual-camera.dts | 2 +- arch/arm/boot/dts/rv1106g-evb2-v10.dts | 2 +- arch/arm/boot/dts/rv1106g-evb2-v11-emmc.dts | 2 +- arch/arm/boot/dts/rv1106g-evb2-v11-trailcam-emmc.dts | 2 +- arch/arm/boot/dts/rv1106g-evb2-v12-nofastae-emmc.dts | 2 +- arch/arm/boot/dts/rv1106g-evb2-v12-nofastae-spi-nand.dts | 2 +- arch/arm/boot/dts/rv1106g-evb2-v12-nofastae-spi-nor.dts | 2 +- arch/arm/boot/dts/rv1106g-evb2-v12-wakeup.dts | 2 +- 11 files changed, 11 insertions(+), 11 deletions(-) diff --git a/arch/arm/boot/dts/rv1106g-evb1-v11-cvr-dual-cam.dts b/arch/arm/boot/dts/rv1106g-evb1-v11-cvr-dual-cam.dts index 0368b0f6575d..9cb3e3cd2ad8 100644 --- a/arch/arm/boot/dts/rv1106g-evb1-v11-cvr-dual-cam.dts +++ b/arch/arm/boot/dts/rv1106g-evb1-v11-cvr-dual-cam.dts @@ -173,7 +173,7 @@ }; &usbdrd_dwc3 { - dr_mode = "peripheral"; + dr_mode = "otg"; }; &saradc { diff --git a/arch/arm/boot/dts/rv1106g-evb1-v11-dual-cam.dts b/arch/arm/boot/dts/rv1106g-evb1-v11-dual-cam.dts index a874f672a07c..ca7a3eed19bb 100644 --- a/arch/arm/boot/dts/rv1106g-evb1-v11-dual-cam.dts +++ b/arch/arm/boot/dts/rv1106g-evb1-v11-dual-cam.dts @@ -35,5 +35,5 @@ }; &usbdrd_dwc3 { - dr_mode = "peripheral"; + dr_mode = "otg"; }; diff --git a/arch/arm/boot/dts/rv1106g-evb1-v11.dts b/arch/arm/boot/dts/rv1106g-evb1-v11.dts index 00faf0588980..dc6152543b20 100644 --- a/arch/arm/boot/dts/rv1106g-evb1-v11.dts +++ b/arch/arm/boot/dts/rv1106g-evb1-v11.dts @@ -35,7 +35,7 @@ }; &usbdrd_dwc3 { - dr_mode = "peripheral"; + dr_mode = "otg"; }; &vdd_arm { diff --git a/arch/arm/boot/dts/rv1106g-evb2-v10-dual-camera.dts b/arch/arm/boot/dts/rv1106g-evb2-v10-dual-camera.dts index b24766b68662..634d6e0601fa 100644 --- a/arch/arm/boot/dts/rv1106g-evb2-v10-dual-camera.dts +++ b/arch/arm/boot/dts/rv1106g-evb2-v10-dual-camera.dts @@ -416,5 +416,5 @@ }; &usbdrd_dwc3 { - dr_mode = "peripheral"; + dr_mode = "otg"; }; diff --git a/arch/arm/boot/dts/rv1106g-evb2-v10.dts b/arch/arm/boot/dts/rv1106g-evb2-v10.dts index 47b564600757..43e39b2c30cf 100644 --- a/arch/arm/boot/dts/rv1106g-evb2-v10.dts +++ b/arch/arm/boot/dts/rv1106g-evb2-v10.dts @@ -286,5 +286,5 @@ }; &usbdrd_dwc3 { - dr_mode = "peripheral"; + dr_mode = "otg"; }; diff --git a/arch/arm/boot/dts/rv1106g-evb2-v11-emmc.dts b/arch/arm/boot/dts/rv1106g-evb2-v11-emmc.dts index 653c4eb44af7..3f85003cce5f 100644 --- a/arch/arm/boot/dts/rv1106g-evb2-v11-emmc.dts +++ b/arch/arm/boot/dts/rv1106g-evb2-v11-emmc.dts @@ -285,5 +285,5 @@ }; &usbdrd_dwc3 { - dr_mode = "peripheral"; + dr_mode = "otg"; }; diff --git a/arch/arm/boot/dts/rv1106g-evb2-v11-trailcam-emmc.dts b/arch/arm/boot/dts/rv1106g-evb2-v11-trailcam-emmc.dts index 0710c27eaf69..153a72979df1 100644 --- a/arch/arm/boot/dts/rv1106g-evb2-v11-trailcam-emmc.dts +++ b/arch/arm/boot/dts/rv1106g-evb2-v11-trailcam-emmc.dts @@ -591,7 +591,7 @@ }; &usbdrd_dwc3 { - dr_mode = "peripheral"; + dr_mode = "otg"; }; &vop { diff --git a/arch/arm/boot/dts/rv1106g-evb2-v12-nofastae-emmc.dts b/arch/arm/boot/dts/rv1106g-evb2-v12-nofastae-emmc.dts index a49f45d5436d..fba0ddb79add 100644 --- a/arch/arm/boot/dts/rv1106g-evb2-v12-nofastae-emmc.dts +++ b/arch/arm/boot/dts/rv1106g-evb2-v12-nofastae-emmc.dts @@ -130,5 +130,5 @@ }; &usbdrd_dwc3 { - dr_mode = "peripheral"; + dr_mode = "otg"; }; diff --git a/arch/arm/boot/dts/rv1106g-evb2-v12-nofastae-spi-nand.dts b/arch/arm/boot/dts/rv1106g-evb2-v12-nofastae-spi-nand.dts index a7b53a738158..93c6827211c5 100644 --- a/arch/arm/boot/dts/rv1106g-evb2-v12-nofastae-spi-nand.dts +++ b/arch/arm/boot/dts/rv1106g-evb2-v12-nofastae-spi-nand.dts @@ -125,5 +125,5 @@ }; &usbdrd_dwc3 { - dr_mode = "peripheral"; + dr_mode = "otg"; }; diff --git a/arch/arm/boot/dts/rv1106g-evb2-v12-nofastae-spi-nor.dts b/arch/arm/boot/dts/rv1106g-evb2-v12-nofastae-spi-nor.dts index dcc4da3e5aa5..3871ca91fcde 100644 --- a/arch/arm/boot/dts/rv1106g-evb2-v12-nofastae-spi-nor.dts +++ b/arch/arm/boot/dts/rv1106g-evb2-v12-nofastae-spi-nor.dts @@ -130,5 +130,5 @@ }; &usbdrd_dwc3 { - dr_mode = "peripheral"; + dr_mode = "otg"; }; diff --git a/arch/arm/boot/dts/rv1106g-evb2-v12-wakeup.dts b/arch/arm/boot/dts/rv1106g-evb2-v12-wakeup.dts index 0dfdf594e278..3a3c922b0b32 100644 --- a/arch/arm/boot/dts/rv1106g-evb2-v12-wakeup.dts +++ b/arch/arm/boot/dts/rv1106g-evb2-v12-wakeup.dts @@ -351,7 +351,7 @@ }; &usbdrd_dwc3 { - dr_mode = "peripheral"; + dr_mode = "otg"; }; &acodec {