[U-Boot] [PATCH 3/3] usb: host: xhci-dwc3: Add generic PHY support

Patrice CHOTARD patrice.chotard at st.com
Tue May 23 07:21:14 UTC 2017


Hi Simon

On 05/22/2017 10:26 PM, Simon Glass wrote:
> On 19 May 2017 at 01:15,  <patrice.chotard at st.com> wrote:
>> From: Patrice Chotard <patrice.chotard at st.com>
>>
>> Add support of generic PHY framework support
>>
>> Signed-off-by: Patrice Chotard <patrice.chotard at st.com>
>> ---
>>   drivers/usb/host/xhci-dwc3.c | 29 +++++++++++++++++++++++++++++
>>   1 file changed, 29 insertions(+)
>>
> 
> Reviewed-by: Simon Glass <sjg at chromium.org>
> 
> Please see below.
> 
>> diff --git a/drivers/usb/host/xhci-dwc3.c b/drivers/usb/host/xhci-dwc3.c
>> index ea85834..70d3946 100644
>> --- a/drivers/usb/host/xhci-dwc3.c
>> +++ b/drivers/usb/host/xhci-dwc3.c
>> @@ -10,6 +10,8 @@
>>
>>   #include <common.h>
>>   #include <dm.h>
>> +#include <fdtdec.h>
>> +#include <generic-phy.h>
>>   #include <usb.h>
>>
>>   #include "xhci.h"
>> @@ -20,6 +22,7 @@
>>   DECLARE_GLOBAL_DATA_PTR;
>>
>>   struct xhci_dwc3_platdata {
>> +       struct phy usb_phy;
>>          phys_addr_t dwc3_regs;
>>   };
>>
>> @@ -136,11 +139,26 @@ static int xhci_dwc3_probe(struct udevice *dev)
>>          struct xhci_hccr *hccr;
>>          struct dwc3 *dwc3_reg;
>>          enum usb_dr_mode dr_mode;
>> +       int ret;
>>
>>          hccr = (struct xhci_hccr *)plat->dwc3_regs;
>>          hcor = (struct xhci_hcor *)((phys_addr_t)hccr +
>>                          HC_LENGTH(xhci_readl(&(hccr)->cr_capbase)));
>>
>> +       ret = generic_phy_get_by_index(dev, 0, &plat->usb_phy);
>> +       if (ret) {
>> +               if (ret != -ENOENT) {
>> +                       error("Failed to get USB PHY for %s\n", dev->name);
>> +                       return ret;
>> +               }
>> +       } else {
>> +               ret = generic_phy_init(&plat->usb_phy);
>> +               if (ret) {
>> +                       error("Can't init USB PHY for %s\n", dev->name);
>> +                       return ret;
>> +               }
>> +       }
>> +
>>          dwc3_reg = (struct dwc3 *)((char *)(hccr) + DWC3_REG_OFFSET);
>>
>>          dwc3_core_init(dwc3_reg);
>> @@ -157,6 +175,17 @@ static int xhci_dwc3_probe(struct udevice *dev)
>>
>>   static int xhci_dwc3_remove(struct udevice *dev)
>>   {
>> +       struct xhci_dwc3_platdata *plat = dev_get_platdata(dev);
>> +       int ret;
>> +
>> +       if (plat->usb_phy.dev) {
> 
> I'd like to have something like generic_phy_valid() to avoid poking
> inside this data structure. Could you send a patch to add this please?

Sure, i will add the generic_phy_valid() method.

As the v2 of this series has already been send and reviewed by Marek.
I will send the v3 including a patch with generic_phy_valid() and make 
usage of it.

Thanks

Patrice

> 
>> +               ret = generic_phy_exit(&plat->usb_phy);
>> +               if (ret) {
>> +                       error("Can't deinit USB PHY for %s\n", dev->name);
>> +                       return ret;
>> +               }
>> +       }
>> +
>>          return xhci_deregister(dev);
>>   }
>>
>> --
>> 1.9.1
>>
> 
> Regards,
> Simon
> 


More information about the U-Boot mailing list