diff mbox series

usb: dwc3: Enable GBit Ethernet on Odroid XU4

Message ID 20190121140204.GA2360@vis (mailing list archive)
State New, archived
Headers show
Series usb: dwc3: Enable GBit Ethernet on Odroid XU4 | expand

Commit Message

Jochen Sprickerhof Jan. 21, 2019, 2:02 p.m. UTC
Note that it only works with USB_XHCI_PLATFORM=y. Also it needs a hard
reset when coming from an unpatched kernel.

This was included in the original patch in
https://patchwork.kernel.org/patch/9992809/ but got dropped when
accepted in d8c80bb3b55b phy: exynos5-usbdrd: Calibrate LOS levels for
exynos5420/5800.

Old behaviour:

$ lsusb -t
/:  Bus 06.Port 1: Dev 1, Class=root_hub, Driver=xhci-hcd/1p, 5000M
/:  Bus 05.Port 1: Dev 1, Class=root_hub, Driver=xhci-hcd/1p, 480M
    |__ Port 1: Dev 2, If 0, Class=Vendor Specific Class, Driver=r8152, 480M

New behaviour:

$ lsusb -t
/:  Bus 06.Port 1: Dev 1, Class=root_hub, Driver=xhci-hcd/1p, 5000M
    |__ Port 1: Dev 2, If 0, Class=Vendor Specific Class, Driver=r8152, 5000M

Tested on Debian unstable using u-boot-exynos (2018.11+dfsg-2) and Linux
4.19.14.

Signed-off-by: Jochen Sprickerhof <git@jochen.sprickerhof.de>
---

Hi,

I'm not sure why this it only works with the driver compiled into the
kernel nor why it needs a hard reset or why it was the line was dropped
when the patch was accepted. Would be great to get some feedback of the
authors.

Cheers Jochen

 drivers/usb/dwc3/core.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

Comments

Felipe Balbi Feb. 6, 2019, 6:49 a.m. UTC | #1
hi,

Jochen Sprickerhof <git@jochen.sprickerhof.de> writes:
> Note that it only works with USB_XHCI_PLATFORM=y. Also it needs a hard
> reset when coming from an unpatched kernel.
>
> This was included in the original patch in
> https://patchwork.kernel.org/patch/9992809/ but got dropped when
> accepted in d8c80bb3b55b phy: exynos5-usbdrd: Calibrate LOS levels for
> exynos5420/5800.
>
> Old behaviour:
>
> $ lsusb -t
> /:  Bus 06.Port 1: Dev 1, Class=root_hub, Driver=xhci-hcd/1p, 5000M
> /:  Bus 05.Port 1: Dev 1, Class=root_hub, Driver=xhci-hcd/1p, 480M
>     |__ Port 1: Dev 2, If 0, Class=Vendor Specific Class, Driver=r8152, 480M
>
> New behaviour:
>
> $ lsusb -t
> /:  Bus 06.Port 1: Dev 1, Class=root_hub, Driver=xhci-hcd/1p, 5000M
>     |__ Port 1: Dev 2, If 0, Class=Vendor Specific Class, Driver=r8152, 5000M
>
> Tested on Debian unstable using u-boot-exynos (2018.11+dfsg-2) and Linux
> 4.19.14.
>
> Signed-off-by: Jochen Sprickerhof <git@jochen.sprickerhof.de>
> ---
>
> Hi,
>
> I'm not sure why this it only works with the driver compiled into the
> kernel nor why it needs a hard reset or why it was the line was dropped
> when the patch was accepted. Would be great to get some feedback of the
> authors.
>
> Cheers Jochen
>
>  drivers/usb/dwc3/core.c | 3 ++-
>  1 file changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c
> index a1b126f90261..0008bccc30aa 100644
> --- a/drivers/usb/dwc3/core.c
> +++ b/drivers/usb/dwc3/core.c
> @@ -1169,7 +1169,8 @@ static int dwc3_core_init_mode(struct dwc3 *dwc)
>  				dev_err(dev, "failed to initialize host\n");
>  			return ret;
>  		}
> -		phy_calibrate(dwc->usb2_generic_phy);
> +		if (dwc->usb2_generic_phy)
> +			phy_calibrate(dwc->usb2_generic_phy);

I can't see why this is necessary. What's really going on? Why is this
branch helping?
Roger Quadros Feb. 6, 2019, 8:41 a.m. UTC | #2
Hi,

On 21/01/19 16:02, Jochen Sprickerhof wrote:
> Note that it only works with USB_XHCI_PLATFORM=y. Also it needs a hard
> reset when coming from an unpatched kernel.
> 
> This was included in the original patch in
> https://patchwork.kernel.org/patch/9992809/ but got dropped when
> accepted in d8c80bb3b55b phy: exynos5-usbdrd: Calibrate LOS levels for
> exynos5420/5800.
> 
> Old behaviour:
> 
> $ lsusb -t
> /:  Bus 06.Port 1: Dev 1, Class=root_hub, Driver=xhci-hcd/1p, 5000M
> /:  Bus 05.Port 1: Dev 1, Class=root_hub, Driver=xhci-hcd/1p, 480M
>    |__ Port 1: Dev 2, If 0, Class=Vendor Specific Class, Driver=r8152, 480M
> 
> New behaviour:
> 
> $ lsusb -t
> /:  Bus 06.Port 1: Dev 1, Class=root_hub, Driver=xhci-hcd/1p, 5000M
>    |__ Port 1: Dev 2, If 0, Class=Vendor Specific Class, Driver=r8152, 5000M
> 
> Tested on Debian unstable using u-boot-exynos (2018.11+dfsg-2) and Linux
> 4.19.14.
> 
> Signed-off-by: Jochen Sprickerhof <git@jochen.sprickerhof.de>
> ---
> 
> Hi,
> 
> I'm not sure why this it only works with the driver compiled into the
> kernel nor why it needs a hard reset or why it was the line was dropped
> when the patch was accepted. Would be great to get some feedback of the
> authors.

When XHCI driver is compiled into the kernel are the relevant PHY drivers
compiled in as well?

cheers,
-roger

> 
> Cheers Jochen
> 
> drivers/usb/dwc3/core.c | 3 ++-
> 1 file changed, 2 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c
> index a1b126f90261..0008bccc30aa 100644
> --- a/drivers/usb/dwc3/core.c
> +++ b/drivers/usb/dwc3/core.c
> @@ -1169,7 +1169,8 @@ static int dwc3_core_init_mode(struct dwc3 *dwc)
>                 dev_err(dev, "failed to initialize host\n");
>             return ret;
>         }
> -        phy_calibrate(dwc->usb2_generic_phy);
> +        if (dwc->usb2_generic_phy)
> +            phy_calibrate(dwc->usb2_generic_phy);
>         break;
>     case USB_DR_MODE_OTG:
>         INIT_WORK(&dwc->drd_work, __dwc3_set_mode);
Jochen Sprickerhof Feb. 6, 2019, 9:38 a.m. UTC | #3
* Roger Quadros <rogerq@ti.com> [2019-02-06 10:41]:
>Hi,
>
>On 21/01/19 16:02, Jochen Sprickerhof wrote:
[..]
>> I'm not sure why this it only works with the driver compiled into the
>> kernel nor why it needs a hard reset or why it was the line was dropped
>> when the patch was accepted. Would be great to get some feedback of the
>> authors.
>
>When XHCI driver is compiled into the kernel are the relevant PHY drivers
>compiled in as well?

Only CONFIG_USB_PHY=y (I took the config from the 
linux-image-4.19.0-1-armmp_4.19.13-1_armhf.deb Debian package as a 
basis where this is the default).

Cheers Jochen
Roger Quadros Feb. 6, 2019, 10:17 a.m. UTC | #4
+Marek

As Vivek's and Andrzej's Samsung IDs bounced back.

On 06/02/19 11:38, Jochen Sprickerhof wrote:
> * Roger Quadros <rogerq@ti.com> [2019-02-06 10:41]:
>> Hi,
>>
>> On 21/01/19 16:02, Jochen Sprickerhof wrote:
> [..]
>>> I'm not sure why this it only works with the driver compiled into the
>>> kernel nor why it needs a hard reset or why it was the line was dropped
>>> when the patch was accepted. Would be great to get some feedback of the
>>> authors.
>>
>> When XHCI driver is compiled into the kernel are the relevant PHY drivers
>> compiled in as well?
> 
> Only CONFIG_USB_PHY=y (I took the config from the linux-image-4.19.0-1-armmp_4.19.13-1_armhf.deb Debian package as a basis where this is the default).
>
Marek Szyprowski Feb. 8, 2019, 12:36 p.m. UTC | #5
Hi Roger,

On 2019-02-06 11:17, Roger Quadros wrote:
> +Marek
>
> As Vivek's and Andrzej's Samsung IDs bounced back.
>
> On 06/02/19 11:38, Jochen Sprickerhof wrote:
>> * Roger Quadros <rogerq@ti.com> [2019-02-06 10:41]:
>>> Hi,
>>>
>>> On 21/01/19 16:02, Jochen Sprickerhof wrote:
>> [..]
>>>> I'm not sure why this it only works with the driver compiled into the
>>>> kernel nor why it needs a hard reset or why it was the line was dropped
>>>> when the patch was accepted. Would be great to get some feedback of the
>>>> authors.
>>> When XHCI driver is compiled into the kernel are the relevant PHY drivers
>>> compiled in as well?
>> Only CONFIG_USB_PHY=y (I took the config from the linux-image-4.19.0-1-armmp_4.19.13-1_armhf.deb Debian package as a basis where this is the default).

I confirm that on Odroid XU4 USB 3.0 works only when all related drivers
(dwc3, xhci and exynos5 drd phy) are compiled into the kernel. If they
are compiled as modules, USB 3.0 calibration doesn't work. The mentioned
patch doesn't fix anything.

Best regards
Felipe Balbi Feb. 8, 2019, 12:52 p.m. UTC | #6
Hi,

Marek Szyprowski <m.szyprowski@samsung.com> writes:
>>>> On 21/01/19 16:02, Jochen Sprickerhof wrote:
>>> [..]
>>>>> I'm not sure why this it only works with the driver compiled into the
>>>>> kernel nor why it needs a hard reset or why it was the line was dropped
>>>>> when the patch was accepted. Would be great to get some feedback of the
>>>>> authors.
>>>> When XHCI driver is compiled into the kernel are the relevant PHY drivers
>>>> compiled in as well?
>>> Only CONFIG_USB_PHY=y (I took the config from the linux-image-4.19.0-1-armmp_4.19.13-1_armhf.deb Debian package as a basis where this is the default).
>
> I confirm that on Odroid XU4 USB 3.0 works only when all related drivers
> (dwc3, xhci and exynos5 drd phy) are compiled into the kernel. If they
> are compiled as modules, USB 3.0 calibration doesn't work. The mentioned
> patch doesn't fix anything.

cool, thanks. So the problem is elsewhere.
Jochen Sprickerhof Feb. 8, 2019, 7:35 p.m. UTC | #7
Hi Marek,

* Marek Szyprowski <m.szyprowski@samsung.com> [2019-02-08 13:36]:
>>>> On 21/01/19 16:02, Jochen Sprickerhof wrote:
>>> [..]
>>>>> I'm not sure why this it only works with the driver compiled into the
>>>>> kernel nor why it needs a hard reset or why it was the line was dropped
>>>>> when the patch was accepted. Would be great to get some feedback of the
>>>>> authors.
>>>> When XHCI driver is compiled into the kernel are the relevant PHY drivers
>>>> compiled in as well?
>>> Only CONFIG_USB_PHY=y (I took the config from the linux-image-4.19.0-1-armmp_4.19.13-1_armhf.deb Debian package as a basis where this is the default).
>
>I confirm that on Odroid XU4 USB 3.0 works only when all related drivers
>(dwc3, xhci and exynos5 drd phy) are compiled into the kernel. If they
>are compiled as modules, USB 3.0 calibration doesn't work. The mentioned
>patch doesn't fix anything.

I've just tried Linux v5.0-rc5 with the Debian config and 
USB_XHCI_PLATFORM=y and it works, thanks!

Is there a way to make it work with xhci compiled as a module, so it 
would work in Debian out of the box?

Cheers Jochen
Marek Szyprowski March 11, 2019, 11:11 a.m. UTC | #8
Hi Jochen,

On 2019-02-08 20:35, Jochen Sprickerhof wrote:
> Hi Marek,
>
> * Marek Szyprowski <m.szyprowski@samsung.com> [2019-02-08 13:36]:
>>>>> On 21/01/19 16:02, Jochen Sprickerhof wrote:
>>>> [..]
>>>>>> I'm not sure why this it only works with the driver compiled into
>>>>>> the
>>>>>> kernel nor why it needs a hard reset or why it was the line was
>>>>>> dropped
>>>>>> when the patch was accepted. Would be great to get some feedback
>>>>>> of the
>>>>>> authors.
>>>>> When XHCI driver is compiled into the kernel are the relevant PHY
>>>>> drivers
>>>>> compiled in as well?
>>>> Only CONFIG_USB_PHY=y (I took the config from the
>>>> linux-image-4.19.0-1-armmp_4.19.13-1_armhf.deb Debian package as a
>>>> basis where this is the default).
>>
>> I confirm that on Odroid XU4 USB 3.0 works only when all related drivers
>> (dwc3, xhci and exynos5 drd phy) are compiled into the kernel. If they
>> are compiled as modules, USB 3.0 calibration doesn't work. The mentioned
>> patch doesn't fix anything.
>
> I've just tried Linux v5.0-rc5 with the Debian config and
> USB_XHCI_PLATFORM=y and it works, thanks!
>
> Is there a way to make it work with xhci compiled as a module, so it
> would work in Debian out of the box?

One more comment - 5000M mode will also work with everything compiled as
modules (dwc3, exynos5 drd phy and xhci-plat) too. Just make sure that
xhci-plat is loaded before dwc3. This would require some manual
configuration, because autoloading will load xhci-plat after dwc3 probe
and switch to host mode.

Best regards
Jochen Sprickerhof March 20, 2019, 6:12 p.m. UTC | #9
Hi Marek,

* Marek Szyprowski <m.szyprowski@samsung.com> [2019-03-11 12:11]:
>Hi Jochen,
>
>On 2019-02-08 20:35, Jochen Sprickerhof wrote:
>> Hi Marek,
>>
>> * Marek Szyprowski <m.szyprowski@samsung.com> [2019-02-08 13:36]:
>>>>>> On 21/01/19 16:02, Jochen Sprickerhof wrote:
>>>>> [..]
>>>>>>> I'm not sure why this it only works with the driver compiled into
>>>>>>> the
>>>>>>> kernel nor why it needs a hard reset or why it was the line was
>>>>>>> dropped
>>>>>>> when the patch was accepted. Would be great to get some feedback
>>>>>>> of the
>>>>>>> authors.
>>>>>> When XHCI driver is compiled into the kernel are the relevant PHY
>>>>>> drivers
>>>>>> compiled in as well?
>>>>> Only CONFIG_USB_PHY=y (I took the config from the
>>>>> linux-image-4.19.0-1-armmp_4.19.13-1_armhf.deb Debian package as a
>>>>> basis where this is the default).
>>>
>>> I confirm that on Odroid XU4 USB 3.0 works only when all related drivers
>>> (dwc3, xhci and exynos5 drd phy) are compiled into the kernel. If they
>>> are compiled as modules, USB 3.0 calibration doesn't work. The mentioned
>>> patch doesn't fix anything.
>>
>> I've just tried Linux v5.0-rc5 with the Debian config and
>> USB_XHCI_PLATFORM=y and it works, thanks!
>>
>> Is there a way to make it work with xhci compiled as a module, so it
>> would work in Debian out of the box?
>
>One more comment - 5000M mode will also work with everything compiled as
>modules (dwc3, exynos5 drd phy and xhci-plat) too. Just make sure that
>xhci-plat is loaded before dwc3. This would require some manual
>configuration, because autoloading will load xhci-plat after dwc3 probe
>and switch to host mode.

Thanks so much for the hint, this made it working :). I opened a bug 
with Debian:

https://bugs.debian.org/925167

Cheers Jochen
diff mbox series

Patch

diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c
index a1b126f90261..0008bccc30aa 100644
--- a/drivers/usb/dwc3/core.c
+++ b/drivers/usb/dwc3/core.c
@@ -1169,7 +1169,8 @@  static int dwc3_core_init_mode(struct dwc3 *dwc)
 				dev_err(dev, "failed to initialize host\n");
 			return ret;
 		}
-		phy_calibrate(dwc->usb2_generic_phy);
+		if (dwc->usb2_generic_phy)
+			phy_calibrate(dwc->usb2_generic_phy);
 		break;
 	case USB_DR_MODE_OTG:
 		INIT_WORK(&dwc->drd_work, __dwc3_set_mode);