Re: [PATCH 0/3] Fix USB3.0 DRD PHY calibration issues (DWC3/XHCI) on Exynos542x SoCs

From: Anand Moon
Date: Fri Jun 28 2019 - 11:32:43 EST


Hi Marek,

On Thu, 27 Jun 2019 at 12:47, Marek Szyprowski <m.szyprowski@xxxxxxxxxxx> wrote:
>
> Dear All,
>
> Commit d8c80bb3b55b ("phy: exynos5-usbdrd: Calibrate LOS levels for
> exynos5420/5800") added support for Exynos5 USB3.0 DRD PHY calibration,
> what enabled proper Super-Speed enumeration of USB3.0 devices connected
> to various Exynos5 SoCs. After some time it turned out that the mentioned
> patch worked a bit by pure luck and covered only one use case (fresh
> boot with all drivers compiled into the kernel).
>
> If drivers were compiled as modules, due to timing issue, it worked only
> if XHCI-plat driver was loaded before the DWC3 driver:
> https://patchwork.kernel.org/patch/10773947/
>
> Also during the system suspend/resume cycle the calibration was not
> performed at the proper time and resulted in switching USB 3.0 devices to
> USB 2.0 high-speed compatibility mode.
>
> This patch addresses all those issues. Exynos5 USB3.0 DRD PHY calibration
> is moved to the Exynos5 specific variant of the XHCI-plat driver, which
> takes care of proper PHY calibration after XHCI core reset. This fixes
> all known use cases (XHCI driver compiled as module and loaded on demand
> as well as during system suspend/resume cycle).
>
> Here are the logs taken on Exynos5422-based Odroid HC1 board (with USB3.0
> RTL8153 LAN and USB3.0 JMicron SATA-USB bridge):
>

Thanks for these patch. I have tested on linux-next-20190626

*But hotpluging of usb device is not working on usb ports.*


These patches fix the suspend/resume for XU4.
But their is two issue.
1> On warm boot fails to reset the usb hub
------------------------------------------------------------------
[ 7.019896] usb 4-1.1: new SuperSpeed Gen 1 USB device number 3
using xhci-hcd
[ 7.063032] usb 4-1.1: New USB device found, idVendor=152d,
idProduct=0578, bcdDevice=63.01
[ 7.070484] usb 4-1.1: New USB device strings: Mfr=1, Product=2,
SerialNumber=3
[ 7.077438] usb 4-1.1: Product: JMS567
[ 7.081749] usb 4-1.1: Manufacturer: JMicron
[ 7.086028] usb 4-1.1: SerialNumber: DB12345678A3
[ 7.151572] scsi host0: uas
[ 7.162765] scsi 0:0:0:0: Direct-Access KINGSTON SA400S37120G
6301 PQ: 0 ANSI: 6
[ 7.176231] sd 0:0:0:0: [sda] 234441648 512-byte logical blocks:
(120 GB/112 GiB)
[ 7.177550] sd 0:0:0:0: Attached scsi generic sg0 type 0
[ 7.183547] sd 0:0:0:0: [sda] 4096-byte physical blocks
[ 7.201150] sd 0:0:0:0: [sda] Write Protect is off
[ 7.204977] sd 0:0:0:0: [sda] Disabling FUA
[ 7.209476] sd 0:0:0:0: [sda] Write cache: enabled, read cache:
enabled, doesn't support DPO or FUA
[ 7.219411] sd 0:0:0:0: [sda] Optimal transfer size 33553920 bytes
not a multiple of physical block size (4096 bytes)
[ 7.713603] sda: sda1
[ 7.736338] sd 0:0:0:0: [sda] Attached SCSI disk
[ 11.372630] xhci-hcd exynos5-dwc3-xhci.5.auto: Timeout while
waiting for setup device command
[ 16.650624] xhci-hcd exynos5-dwc3-xhci.5.auto: Timeout while
waiting for setup device command
[ 16.870255] usb 6-1: device not accepting address 2, error -62
[ 22.171093] xhci-hcd exynos5-dwc3-xhci.5.auto: Timeout while
waiting for setup device command
[ 27.451021] xhci-hcd exynos5-dwc3-xhci.5.auto: Timeout while
waiting for setup device command
[ 27.669956] usb 6-1: device not accepting address 3, error -62
[ 27.711656] usb usb6-port1: attempt power cycle

some how 12500000.phy do not de-register when we perform reboot.

[ 120.260813] shutdown[1]: All loop devices detached.
[ 120.308592] sd 0:0:0:0: [sda] Synchronizing SCSI cache
[ 120.425890] usb 4-1.1: reset SuperSpeed Gen 1 USB device number 3
using xhci-hcd
[ 120.500085] wake enabled for irq 155
[ 120.592335] reboot: Restartin

Attach are the reboot logs.
[0] https://pastebin.com/a3d712q4

Second issue is the unbind on usb dwc3 fails.

[root@archl-xu4m ~]# cd /sys/bus/platform/drivers/exynos5_usb3drd_phy/
[root@archl-xu4m exynos5_usb3drd_phy]# ls -la
total 0
drwxr-xr-x 2 root root 0 Jun 28 14:08 .
drwxr-xr-x 131 root root 0 Jun 28 14:08 ..
lrwxrwxrwx 1 root root 0 Jun 28 14:11 12100000.phy ->
../../../../devices/platform/soc/12100000.phy
lrwxrwxrwx 1 root root 0 Jun 28 14:11 12500000.phy ->
../../../../devices/platform/soc/12500000.phy
--w------- 1 root root 4096 Jun 28 14:11 bind
--w------- 1 root root 4096 Jun 28 14:08 uevent
--w------- 1 root root 4096 Jun 28 14:11 unbind
[root@archl-xu4m exynos5_usb3drd_phy]#
[root@archl-xu4m exynos5_usb3drd_phy]#
[root@archl-xu4m exynos5_usb3drd_phy]# echo 12500000.phy > unbind
[ 194.138492] ------------[ cut here ]------------
[ 194.142104] WARNING: CPU: 6 PID: 292 at
drivers/regulator/core.c:2036 _regulator_put.part.4+0x110/0x118
[ 194.156913] Modules linked in: s5p_mfc s5p_jpeg exynos_gsc
v4l2_mem2mem v4l2_common videobuf2_dma_contig videobuf2_memops
videobuf2_v4l2 videobuf2_common videodev mc s5p_cec
[ 194.171542] CPU: 6 PID: 292 Comm: bash Not tainted
5.2.0-rc6-next-20190626-xu4ml #21
[ 194.178963] Hardware name: SAMSUNG EXYNOS (Flattened Device Tree)
[ 194.184983] [<c0112794>] (unwind_backtrace) from [<c010dfec>]
(show_stack+0x10/0x14)
[ 194.192732] [<c010dfec>] (show_stack) from [<c0ab30c0>]
(dump_stack+0x98/0xc4)
[ 194.199887] [<c0ab30c0>] (dump_stack) from [<c0127b78>]
(__warn.part.3+0xbc/0xec)
[ 194.207332] [<c0127b78>] (__warn.part.3) from [<c0127d10>]
(warn_slowpath_null+0x44/0x4c)
[ 194.215491] [<c0127d10>] (warn_slowpath_null) from [<c04f8f3c>]
(_regulator_put.part.4+0x110/0x118)
[ 194.224518] [<c04f8f3c>] (_regulator_put.part.4) from [<c04f8f70>]
(regulator_put+0x2c/0x3c)
[ 194.232916] [<c04f8f70>] (regulator_put) from [<c05b8eb8>]
(release_nodes+0x1c0/0x204)
[ 194.240791] [<c05b8eb8>] (release_nodes) from [<c05b4f20>]
(device_release_driver_internal+0xec/0x1ac)
[ 194.250086] [<c05b4f20>] (device_release_driver_internal) from
[<c05b2d38>] (unbind_store+0x60/0xd4)
[ 194.259189] [<c05b2d38>] (unbind_store) from [<c03332dc>]
(kernfs_fop_write+0x100/0x1e0)
[ 194.267232] [<c03332dc>] (kernfs_fop_write) from [<c02a2f60>]
(__vfs_write+0x30/0x1c4)
[ 194.275110] [<c02a2f60>] (__vfs_write) from [<c02a5a74>]
(vfs_write+0xa4/0x184)
[ 194.282376] [<c02a5a74>] (vfs_write) from [<c02a5ccc>] (ksys_write+0x5c/0xd4)
[ 194.289472] [<c02a5ccc>] (ksys_write) from [<c0101000>]
(ret_fast_syscall+0x0/0x28)
[ 194.297103] Exception stack(0xe50fbfa8 to 0xe50fbff0)
[ 194.302074] bfa0: 0000000d 0054a958 00000001
0054a958 0000000d 00000000
[ 194.310284] bfc0: 0000000d 0054a958 b6e7ebc8 00000004 0054a958
0000000d 00000000 00000000
[ 194.318424] bfe0: 00000070 be9e1868 b6da3c80 b6dff784
[ 194.323614] irq event stamp: 20491
[ 194.326920] hardirqs last enabled at (20515): [<c0199aac>]
console_unlock+0x440/0x64c
[ 194.334720] hardirqs last disabled at (20522): [<c0199714>]
console_unlock+0xa8/0x64c
[ 194.342690] softirqs last enabled at (20540): [<c0102544>]
__do_softirq+0x35c/0x654
[ 194.350403] softirqs last disabled at (20553): [<c012fd80>]
irq_exit+0x158/0x16c
[ 194.357782] ---[ end trace 5ea20768939447c5 ]---
[ 194.363628] ------------[ cut here ]------------
[ 194.367095] WARNING: CPU: 6 PID: 292 at
drivers/regulator/core.c:2036 _regulator_put.part.4+0x110/0x118
[ 194.376360] Modules linked in: s5p_mfc s5p_jpeg exynos_gsc
v4l2_mem2mem v4l2_common videobuf2_dma_contig videobuf2_memops
videobuf2_v4l2 videobuf2_common videodev mc s5p_cec
[ 194.392067] CPU: 6 PID: 292 Comm: bash Tainted: G W
5.2.0-rc6-next-20190626-xu4ml #21
[ 194.400882] Hardware name: SAMSUNG EXYNOS (Flattened Device Tree)
[ 194.406902] [<c0112794>] (unwind_backtrace) from [<c010dfec>]
(show_stack+0x10/0x14)
[ 194.414647] [<c010dfec>] (show_stack) from [<c0ab30c0>]
(dump_stack+0x98/0xc4)
[ 194.421825] [<c0ab30c0>] (dump_stack) from [<c0127b78>]
(__warn.part.3+0xbc/0xec)
[ 194.429284] [<c0127b78>] (__warn.part.3) from [<c0127d10>]
(warn_slowpath_null+0x44/0x4c)
[ 194.437441] [<c0127d10>] (warn_slowpath_null) from [<c04f8f3c>]
(_regulator_put.part.4+0x110/0x118)
[ 194.446469] [<c04f8f3c>] (_regulator_put.part.4) from [<c04f8f70>]
(regulator_put+0x2c/0x3c)
[ 194.454868] [<c04f8f70>] (regulator_put) from [<c05b8eb8>]
(release_nodes+0x1c0/0x204)
[ 194.462743] [<c05b8eb8>] (release_nodes) from [<c05b4f20>]
(device_release_driver_internal+0xec/0x1ac)
[ 194.472038] [<c05b4f20>] (device_release_driver_internal) from
[<c05b2d38>] (unbind_store+0x60/0xd4)
[ 194.481135] [<c05b2d38>] (unbind_store) from [<c03332dc>]
(kernfs_fop_write+0x100/0x1e0)
[ 194.489175] [<c03332dc>] (kernfs_fop_write) from [<c02a2f60>]
(__vfs_write+0x30/0x1c4)
[ 194.497056] [<c02a2f60>] (__vfs_write) from [<c02a5a74>]
(vfs_write+0xa4/0x184)
[ 194.504323] [<c02a5a74>] (vfs_write) from [<c02a5ccc>] (ksys_write+0x5c/0xd4)
[ 194.511417] [<c02a5ccc>] (ksys_write) from [<c0101000>]
(ret_fast_syscall+0x0/0x28)
[ 194.519050] Exception stack(0xe50fbfa8 to 0xe50fbff0)
[ 194.524020] bfa0: 0000000d 0054a958 00000001
0054a958 0000000d 00000000
[ 194.532231] bfc0: 0000000d 0054a958 b6e7ebc8 00000004 0054a958
0000000d 00000000 00000000
[ 194.540372] bfe0: 00000070 be9e1868 b6da3c80 b6dff784
[ 194.545640] irq event stamp: 20765
[ 194.548824] hardirqs last enabled at (20785): [<c0199aac>]
console_unlock+0x440/0x64c
[ 194.556794] hardirqs last disabled at (20802): [<c0199714>]
console_unlock+0xa8/0x64c
[ 194.564468] softirqs last enabled at (20800): [<c0102544>]
__do_softirq+0x35c/0x654
[ 194.572329] softirqs last disabled at (20819): [<c012fd80>]
irq_exit+0x158/0x16c
[ 194.579679] ---[ end trace 5ea20768939447c6 ]---
[root@archl-xu4m exynos5_usb3drd_phy]#

I saw the peripherals get on/off during suspend resume but on no
regulator disable/enable calls.

Attach are the logs
[2] https://pastebin.com/uQT2EYgX

Best Regards
-Anand