Re: [PATCH 0/3] Fix USB3.0 DRD PHY calibration issues (DWC3/XHCI) on Exynos542x SoCs
From: Anand Moon
Date: Mon Jul 15 2019 - 14:29:42 EST
Hi Marek,
On Mon, 15 Jul 2019 at 17:49, Marek Szyprowski <m.szyprowski@xxxxxxxxxxx> wrote:
>
> Hi Anand,
>
> On 2019-06-28 17:32, Anand Moon wrote:
> > 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.*
>
> Well, this is a bit poor report. I've checked various USB 3.0 devices
> with my XU4 board and didn't observe any issue with hotplug or
> enumeration. Could you describe a bit more how to trigger the issue?
>
Sorry for the noise one of my usb 3.0 port on XU4 is not working somehow.
I will re-test these patches again on current next and share my result.
> > 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.
>
> Sorry, but this is not related to PHY at all. If I get your log right,
> you have external USB3->SATA bridge which fails to enumerate in your
> case. Does it work right with other boards or vendor kernels? You
> connect it to the XU4 onboard USB3.0 hub, which cannot be programmed or
> controlled in any way, so I doubt we can do anything to fix your issue.
>
Sorry this issue is related to realtek ethernet driver r-8153 failed
to register again
after reboot. It's a know issue for long time as far as I know,
I will double check this again.
>
> > [ 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
>
> This is not dwc3 unbind, but USB3.0 DRD PHY unbind. This is somehow
> expected as unbinding on fly a device, which provides resources to other
> driver (in this case USB phys) causes various issues due to the Linux
> kernel frameworks design. Please don't try such things, it won't work.
> Exynos DRD PHY driver should be marked with suppress_bind flag to hide
> bind/unbind attributes.
>
Ok thanks for your inputs and suggestion.
> Best regards
> --
> Marek Szyprowski, PhD
> Samsung R&D Institute Poland
>
Best Regards
-Anand