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

2017-05-23 Thread Patrice CHOTARD
Hi Simon

On 05/22/2017 10:26 PM, Simon Glass wrote:
> On 19 May 2017 at 01:15,   wrote:
>> From: Patrice Chotard 
>>
>> Add support of generic PHY framework support
>>
>> Signed-off-by: Patrice Chotard 
>> ---
>>   drivers/usb/host/xhci-dwc3.c | 29 +
>>   1 file changed, 29 insertions(+)
>>
> 
> Reviewed-by: Simon Glass 
> 
> 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 
>>   #include 
>> +#include 
>> +#include 
>>   #include 
>>
>>   #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, >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(>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(>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
> 
___
U-Boot mailing list
U-Boot@lists.denx.de
https://lists.denx.de/listinfo/u-boot


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

2017-05-22 Thread Simon Glass
On 19 May 2017 at 01:15,   wrote:
> From: Patrice Chotard 
>
> Add support of generic PHY framework support
>
> Signed-off-by: Patrice Chotard 
> ---
>  drivers/usb/host/xhci-dwc3.c | 29 +
>  1 file changed, 29 insertions(+)
>

Reviewed-by: Simon Glass 

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 
>  #include 
> +#include 
> +#include 
>  #include 
>
>  #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, >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(>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?

> +   ret = generic_phy_exit(>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
___
U-Boot mailing list
U-Boot@lists.denx.de
https://lists.denx.de/listinfo/u-boot


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

2017-05-19 Thread Patrice CHOTARD
Hi Marek

On 05/19/2017 12:07 PM, Marek Vasut wrote:
> On 05/19/2017 09:15 AM, patrice.chot...@st.com wrote:
>> From: Patrice Chotard 
>>
>> Add support of generic PHY framework support
>>
>> Signed-off-by: Patrice Chotard 
>> ---
>>   drivers/usb/host/xhci-dwc3.c | 29 +
>>   1 file changed, 29 insertions(+)
>>
>> 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 
>>   #include 
>> +#include 
>> +#include 
>>   #include 
>>   
>>   #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, >usb_phy);
>> +if (ret) {
>> +if (ret != -ENOENT) {
>> +error("Failed to get USB PHY for %s\n", dev->name);
>> +return ret;
>> +}
>> +} else {
> 
> You can drop the else and indent here by reordering the condition.

I can't drop the "else", otherwise, in case there is no "phys" property 
in DT (by example for arch/arm/dts/zynqmp.dtsi), 
generic_phy_get_by_index() returns -ENOENT, we must continue without 
calling generic_phy_init().

Patrice
> 
> Otherwise OK.
> 
>> +ret = generic_phy_init(>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) {
>> +ret = generic_phy_exit(>usb_phy);
>> +if (ret) {
>> +error("Can't deinit USB PHY for %s\n", dev->name);
>> +return ret;
>> +}
>> +}
>> +
>>  return xhci_deregister(dev);
>>   }
>>   
>>
> 
> 
___
U-Boot mailing list
U-Boot@lists.denx.de
https://lists.denx.de/listinfo/u-boot


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

2017-05-19 Thread Marek Vasut
On 05/19/2017 09:15 AM, patrice.chot...@st.com wrote:
> From: Patrice Chotard 
> 
> Add support of generic PHY framework support
> 
> Signed-off-by: Patrice Chotard 
> ---
>  drivers/usb/host/xhci-dwc3.c | 29 +
>  1 file changed, 29 insertions(+)
> 
> 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 
>  #include 
> +#include 
> +#include 
>  #include 
>  
>  #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, >usb_phy);
> + if (ret) {
> + if (ret != -ENOENT) {
> + error("Failed to get USB PHY for %s\n", dev->name);
> + return ret;
> + }
> + } else {

You can drop the else and indent here by reordering the condition.

Otherwise OK.

> + ret = generic_phy_init(>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) {
> + ret = generic_phy_exit(>usb_phy);
> + if (ret) {
> + error("Can't deinit USB PHY for %s\n", dev->name);
> + return ret;
> + }
> + }
> +
>   return xhci_deregister(dev);
>  }
>  
> 


-- 
Best regards,
Marek Vasut
___
U-Boot mailing list
U-Boot@lists.denx.de
https://lists.denx.de/listinfo/u-boot


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

2017-05-19 Thread patrice.chotard
From: Patrice Chotard 

Add support of generic PHY framework support

Signed-off-by: Patrice Chotard 
---
 drivers/usb/host/xhci-dwc3.c | 29 +
 1 file changed, 29 insertions(+)

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 
 #include 
+#include 
+#include 
 #include 
 
 #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, >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(>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) {
+   ret = generic_phy_exit(>usb_phy);
+   if (ret) {
+   error("Can't deinit USB PHY for %s\n", dev->name);
+   return ret;
+   }
+   }
+
return xhci_deregister(dev);
 }
 
-- 
1.9.1

___
U-Boot mailing list
U-Boot@lists.denx.de
https://lists.denx.de/listinfo/u-boot