DWC3 host support

Angus Ainslie angus at akkea.ca
Tue Jul 19 15:22:57 CEST 2022


On 2022-07-18 23:47, Michal Simek wrote:
> Hi,
> 
> On 7/18/22 18:23, Angus Ainslie wrote:
>> Hi,
>> 
>> On 2022-07-18 01:13, Michal Simek wrote:
>>> On 7/17/22 17:23, Marek Vasut wrote:
>>>> On 7/17/22 05:00, Angus Ainslie wrote:
>>>>> On 2022-07-16 11:37, Marek Vasut wrote:
>>>>>> On 7/16/22 15:02, Angus Ainslie wrote:
>>>>>>> Hi Michal,
>>>>>>> 
>>>>>>> I recently rebased my librem5 tree onto the latest u-boot-imx 
>>>>>>> branch
>>>>>>> and the dwc3 host mode stopped working.
>>>>>>> 
>>>>>>> I bisected it down to this commit:
>>>>>>> 
>>>>>>> 142d50fbce7c364a74f5e8204dba491b9f066e6c usb: dwc3: Add support 
>>>>>>> for
>>>>>>> usb3-phy PHY configuration
>>>>>>> 
>>>>>>> Reverting that commit allows usb host mode to work on the librem5 
>>>>>>> again.
>>>>>>> 
>>>>>>> Should this initialization go into an SOC specific glue_configure
>>>>>>> function ?
>>>>>>> 
>>>>>>> Is the imx8mq.dtsi missing something that will keep usb host 
>>>>>>> working
>>>>>>> with this patch ?
>>>>>>> 
>>>>>>> Does this break usb host on other imx8mq devices ?
>>>>>> 
>>>>>> Wasn't this fixed by:
>>>>>> 868d58f69c ("usb: dwc3: Fix non-usb3 configurations")
>>>>>> ?
>>>>> 
>>>>> I've got that in my tree and it still fails to probe the USB2 hub 
>>>>> and
>>>>> USB 2 storage.
>>>> 
>>>> I assume you do have CONFIG_PHY_IMX8MQ_USB enabled ?
>>>> 
>>>> What does generic_phy_get_by_name() return for you in
>>>> drivers/usb/dwc3/dwc3-generic.c ?
>>> 
>>> As Marek said there was one patch which fixes origin patch which
>>> didn't handle all the error cases properly. We need to know return
>>> value from generic_phy_get_by_name(), also if you still have usb3-phy
>>> in DT (as is in imx8mq.dtsi) with phy DT status enabled and enabled
>>> phy driver (CONFIG_PHY_IMX8MQ_USB).
>>> 
>> 
>> Removing the usb3 phy definition also "fixes" it
>> 
>> --- a/arch/arm/dts/imx8mq-librem5-r4.dts
>> +++ b/arch/arm/dts/imx8mq-librem5-r4.dts
>> @@ -33,3 +33,8 @@
>>   &proximity {
>>          proximity-near-level = <10>;
>>   };
>> +
>> +&usb_dwc3_1 {
>> +       phys = <&usb3_phy1>;
>> +       phy-names = "usb2-phy";
>> +};
> 
> Log shows that phy initialization is called properly but it looks like
> that initialization itself has issue which should be the issue with
> phy driver.
> 
> DWC3 driver is calling just phy_init and phy_power_on which are quite
> small 2 functions in phy-imx8mq-usb.c.
> 
> Did usb3 work before 142d50fbce7c364a74f5e8204dba491b9f066e6c?
> I have no idea how imx is working but I have added to CC author of
> this phy driver.
> 

We don't use USB3 on that port so no idea. The only thing connected to 
that port is a USB 2 hub and then downstream devices from the hub. The 
USB 2 hub did work without 142d50fbce7c364a74f5e8204dba491b9f066e6c.

> I see small differences between Linux and U-Boot drivers.
> 
>  99         value &= ~PHY_CTRL0_SSC_RANGE_MASK;
> 100         value |= PHY_CTRL0_SSC_RANGE_4003PPM;
> 
> And in power_on I see this in u-boot
> 
> 129         /* Disable rx term override */
> 130         value = readl(imx_phy->base + PHY_CTRL6);
> 131         value &= ~PHY_CTRL6_RXTERM_OVERRIDE_SEL;
> 132         writel(value, imx_phy->base + PHY_CTRL6);
> 
> And Linux driver is handling regulators. Do you use any regulator?

There isn't a regulator specifically for the PHY. There is one for the 
hub and it gets enabled before the phy_init functions.

> 
> If usb3.0 works in Linux I think it should be easier for you to track
> this down but there are some small differences in the U-Boot driver
> which can be the reason why it is failing on your board.

Thanks
Angus

> 
> Thanks,
> Michal


More information about the U-Boot mailing list