* [U-Boot] [PATCH 0/3] Extend xhci-dwc3
@ 2017-05-19 7:15 patrice.chotard at st.com
2017-05-19 7:15 ` [U-Boot] [PATCH 1/3] usb: host: xhci-dwc3: Convert driver to DM patrice.chotard at st.com
` (2 more replies)
0 siblings, 3 replies; 11+ messages in thread
From: patrice.chotard at st.com @ 2017-05-19 7:15 UTC (permalink / raw)
To: u-boot
From: Patrice Chotard <patrice.chotard@st.com>
Convert xhci-dwc3 to Driver Model
Add dual role mode selection from DT
Add generic PHY support
Patrice Chotard (3):
usb: host: xhci-dwc3: Convert driver to DM
usb: host: xhci-dwc3: Add dual role mode support from DT
usb: host: xhci-dwc3: Add generic PHY support
drivers/usb/host/xhci-dwc3.c | 109 +++++++++++++++++++++++++++++++++++++++++++
1 file changed, 109 insertions(+)
--
1.9.1
^ permalink raw reply [flat|nested] 11+ messages in thread
* [U-Boot] [PATCH 1/3] usb: host: xhci-dwc3: Convert driver to DM
2017-05-19 7:15 [U-Boot] [PATCH 0/3] Extend xhci-dwc3 patrice.chotard at st.com
@ 2017-05-19 7:15 ` patrice.chotard at st.com
2017-05-19 10:06 ` Marek Vasut
2017-05-19 7:15 ` [U-Boot] [PATCH 2/3] usb: host: xhci-dwc3: Add dual role mode support from DT patrice.chotard at st.com
2017-05-19 7:15 ` [U-Boot] [PATCH 3/3] usb: host: xhci-dwc3: Add generic PHY support patrice.chotard at st.com
2 siblings, 1 reply; 11+ messages in thread
From: patrice.chotard at st.com @ 2017-05-19 7:15 UTC (permalink / raw)
To: u-boot
From: Patrice Chotard <patrice.chotard@st.com>
Add Driver Model support with use of generic DT
compatible string "snps,dwc3"
Signed-off-by: Patrice Chotard <patrice.chotard@st.com>
---
drivers/usb/host/xhci-dwc3.c | 71 ++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 71 insertions(+)
diff --git a/drivers/usb/host/xhci-dwc3.c b/drivers/usb/host/xhci-dwc3.c
index 33961cd..b0b9076 100644
--- a/drivers/usb/host/xhci-dwc3.c
+++ b/drivers/usb/host/xhci-dwc3.c
@@ -9,9 +9,23 @@
*/
#include <common.h>
+#include <dm.h>
+#include <usb.h>
+
+#include "xhci.h"
#include <asm/io.h>
#include <linux/usb/dwc3.h>
+DECLARE_GLOBAL_DATA_PTR;
+
+struct xhci_dwc3_platdata {
+ phys_addr_t dwc3_regs;
+};
+
+struct xhci_dwc3_priv {
+ struct xhci_ctrl ctrl;
+};
+
void dwc3_set_mode(struct dwc3 *dwc3_reg, u32 mode)
{
clrsetbits_le32(&dwc3_reg->g_ctl,
@@ -97,3 +111,60 @@ void dwc3_set_fladj(struct dwc3 *dwc3_reg, u32 val)
setbits_le32(&dwc3_reg->g_fladj, GFLADJ_30MHZ_REG_SEL |
GFLADJ_30MHZ(val));
}
+
+static int xhci_dwc3_ofdata_to_platdata(struct udevice *dev)
+{
+ struct xhci_dwc3_platdata *plat = dev_get_platdata(dev);
+ u32 reg[2];
+
+ /* get the dwc3 register space base address */
+ if (fdtdec_get_int_array(gd->fdt_blob, dev_of_offset(dev), "reg", reg,
+ ARRAY_SIZE(reg))) {
+ debug("dwc3 node has bad/missing 'reg' property\n");
+ return -FDT_ERR_NOTFOUND;
+ }
+ plat->dwc3_regs = reg[0];
+
+ return 0;
+}
+
+static int xhci_dwc3_probe(struct udevice *dev)
+{
+ struct xhci_dwc3_platdata *plat = dev_get_platdata(dev);
+ struct xhci_hcor *hcor;
+ struct xhci_hccr *hccr;
+ struct dwc3 *dwc3_reg;
+
+ hccr = (struct xhci_hccr *)plat->dwc3_regs;
+ hcor = (struct xhci_hcor *)((phys_addr_t)hccr +
+ HC_LENGTH(xhci_readl(&(hccr)->cr_capbase)));
+
+ dwc3_reg = (struct dwc3 *)((char *)(hccr) + DWC3_REG_OFFSET);
+
+ dwc3_core_init(dwc3_reg);
+
+ return xhci_register(dev, hccr, hcor);
+}
+
+static int xhci_dwc3_remove(struct udevice *dev)
+{
+ return xhci_deregister(dev);
+}
+
+static const struct udevice_id xhci_dwc3_ids[] = {
+ { .compatible = "snps,dwc3" },
+ { }
+};
+
+U_BOOT_DRIVER(xhci_dwc3) = {
+ .name = "xhci-dwc3",
+ .id = UCLASS_USB,
+ .of_match = xhci_dwc3_ids,
+ .ofdata_to_platdata = xhci_dwc3_ofdata_to_platdata,
+ .probe = xhci_dwc3_probe,
+ .remove = xhci_dwc3_remove,
+ .ops = &xhci_usb_ops,
+ .priv_auto_alloc_size = sizeof(struct xhci_dwc3_priv),
+ .platdata_auto_alloc_size = sizeof(struct xhci_dwc3_platdata),
+ .flags = DM_FLAG_ALLOC_PRIV_DMA,
+};
--
1.9.1
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [U-Boot] [PATCH 2/3] usb: host: xhci-dwc3: Add dual role mode support from DT
2017-05-19 7:15 [U-Boot] [PATCH 0/3] Extend xhci-dwc3 patrice.chotard at st.com
2017-05-19 7:15 ` [U-Boot] [PATCH 1/3] usb: host: xhci-dwc3: Convert driver to DM patrice.chotard at st.com
@ 2017-05-19 7:15 ` patrice.chotard at st.com
2017-05-22 20:26 ` Simon Glass
2017-05-19 7:15 ` [U-Boot] [PATCH 3/3] usb: host: xhci-dwc3: Add generic PHY support patrice.chotard at st.com
2 siblings, 1 reply; 11+ messages in thread
From: patrice.chotard at st.com @ 2017-05-19 7:15 UTC (permalink / raw)
To: u-boot
From: Patrice Chotard <patrice.chotard@st.com>
DWC3 dual role mode is selected using DT "dr_mode"
property. If not found, DWC3 controller is configured
in HOST mode by default
Signed-off-by: Patrice Chotard <patrice.chotard@st.com>
---
drivers/usb/host/xhci-dwc3.c | 9 +++++++++
1 file changed, 9 insertions(+)
diff --git a/drivers/usb/host/xhci-dwc3.c b/drivers/usb/host/xhci-dwc3.c
index b0b9076..ea85834 100644
--- a/drivers/usb/host/xhci-dwc3.c
+++ b/drivers/usb/host/xhci-dwc3.c
@@ -15,6 +15,7 @@
#include "xhci.h"
#include <asm/io.h>
#include <linux/usb/dwc3.h>
+#include <linux/usb/otg.h>
DECLARE_GLOBAL_DATA_PTR;
@@ -134,6 +135,7 @@ static int xhci_dwc3_probe(struct udevice *dev)
struct xhci_hcor *hcor;
struct xhci_hccr *hccr;
struct dwc3 *dwc3_reg;
+ enum usb_dr_mode dr_mode;
hccr = (struct xhci_hccr *)plat->dwc3_regs;
hcor = (struct xhci_hcor *)((phys_addr_t)hccr +
@@ -143,6 +145,13 @@ static int xhci_dwc3_probe(struct udevice *dev)
dwc3_core_init(dwc3_reg);
+ dr_mode = usb_get_dr_mode(dev_of_offset(dev));
+ if (dr_mode == USB_DR_MODE_UNKNOWN)
+ /* by default set dual role mode to HOST */
+ dr_mode = USB_DR_MODE_HOST;
+
+ dwc3_set_mode(dwc3_reg, dr_mode);
+
return xhci_register(dev, hccr, hcor);
}
--
1.9.1
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [U-Boot] [PATCH 3/3] usb: host: xhci-dwc3: Add generic PHY support
2017-05-19 7:15 [U-Boot] [PATCH 0/3] Extend xhci-dwc3 patrice.chotard at st.com
2017-05-19 7:15 ` [U-Boot] [PATCH 1/3] usb: host: xhci-dwc3: Convert driver to DM patrice.chotard at st.com
2017-05-19 7:15 ` [U-Boot] [PATCH 2/3] usb: host: xhci-dwc3: Add dual role mode support from DT patrice.chotard at st.com
@ 2017-05-19 7:15 ` patrice.chotard at st.com
2017-05-19 10:07 ` Marek Vasut
2017-05-22 20:26 ` Simon Glass
2 siblings, 2 replies; 11+ messages in thread
From: patrice.chotard at st.com @ 2017-05-19 7:15 UTC (permalink / raw)
To: u-boot
From: Patrice Chotard <patrice.chotard@st.com>
Add support of generic PHY framework support
Signed-off-by: Patrice Chotard <patrice.chotard@st.com>
---
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 <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) {
+ 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
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [U-Boot] [PATCH 1/3] usb: host: xhci-dwc3: Convert driver to DM
2017-05-19 7:15 ` [U-Boot] [PATCH 1/3] usb: host: xhci-dwc3: Convert driver to DM patrice.chotard at st.com
@ 2017-05-19 10:06 ` Marek Vasut
2017-05-19 11:41 ` Patrice CHOTARD
0 siblings, 1 reply; 11+ messages in thread
From: Marek Vasut @ 2017-05-19 10:06 UTC (permalink / raw)
To: u-boot
On 05/19/2017 09:15 AM, patrice.chotard at st.com wrote:
> From: Patrice Chotard <patrice.chotard@st.com>
>
> Add Driver Model support with use of generic DT
> compatible string "snps,dwc3"
>
> Signed-off-by: Patrice Chotard <patrice.chotard@st.com>
> ---
> drivers/usb/host/xhci-dwc3.c | 71 ++++++++++++++++++++++++++++++++++++++++++++
> 1 file changed, 71 insertions(+)
>
> diff --git a/drivers/usb/host/xhci-dwc3.c b/drivers/usb/host/xhci-dwc3.c
> index 33961cd..b0b9076 100644
> --- a/drivers/usb/host/xhci-dwc3.c
> +++ b/drivers/usb/host/xhci-dwc3.c
> @@ -9,9 +9,23 @@
> */
>
> #include <common.h>
> +#include <dm.h>
> +#include <usb.h>
> +
> +#include "xhci.h"
> #include <asm/io.h>
> #include <linux/usb/dwc3.h>
>
> +DECLARE_GLOBAL_DATA_PTR;
> +
> +struct xhci_dwc3_platdata {
> + phys_addr_t dwc3_regs;
> +};
Since you have DM, do you need this ?
> +struct xhci_dwc3_priv {
> + struct xhci_ctrl ctrl;
> +};
> +
> void dwc3_set_mode(struct dwc3 *dwc3_reg, u32 mode)
> {
> clrsetbits_le32(&dwc3_reg->g_ctl,
> @@ -97,3 +111,60 @@ void dwc3_set_fladj(struct dwc3 *dwc3_reg, u32 val)
> setbits_le32(&dwc3_reg->g_fladj, GFLADJ_30MHZ_REG_SEL |
> GFLADJ_30MHZ(val));
> }
> +
> +static int xhci_dwc3_ofdata_to_platdata(struct udevice *dev)
> +{
> + struct xhci_dwc3_platdata *plat = dev_get_platdata(dev);
> + u32 reg[2];
> +
> + /* get the dwc3 register space base address */
> + if (fdtdec_get_int_array(gd->fdt_blob, dev_of_offset(dev), "reg", reg,
> + ARRAY_SIZE(reg))) {
dev_get_addr() ?
> + debug("dwc3 node has bad/missing 'reg' property\n");
> + return -FDT_ERR_NOTFOUND;
> + }
> + plat->dwc3_regs = reg[0];
> +
> + return 0;
> +}
> +
> +static int xhci_dwc3_probe(struct udevice *dev)
> +{
> + struct xhci_dwc3_platdata *plat = dev_get_platdata(dev);
> + struct xhci_hcor *hcor;
> + struct xhci_hccr *hccr;
> + struct dwc3 *dwc3_reg;
> +
> + hccr = (struct xhci_hccr *)plat->dwc3_regs;
> + hcor = (struct xhci_hcor *)((phys_addr_t)hccr +
> + HC_LENGTH(xhci_readl(&(hccr)->cr_capbase)));
> +
> + dwc3_reg = (struct dwc3 *)((char *)(hccr) + DWC3_REG_OFFSET);
> +
> + dwc3_core_init(dwc3_reg);
> +
> + return xhci_register(dev, hccr, hcor);
> +}
> +
> +static int xhci_dwc3_remove(struct udevice *dev)
> +{
> + return xhci_deregister(dev);
> +}
> +
> +static const struct udevice_id xhci_dwc3_ids[] = {
> + { .compatible = "snps,dwc3" },
> + { }
> +};
> +
> +U_BOOT_DRIVER(xhci_dwc3) = {
> + .name = "xhci-dwc3",
> + .id = UCLASS_USB,
> + .of_match = xhci_dwc3_ids,
> + .ofdata_to_platdata = xhci_dwc3_ofdata_to_platdata,
> + .probe = xhci_dwc3_probe,
> + .remove = xhci_dwc3_remove,
> + .ops = &xhci_usb_ops,
> + .priv_auto_alloc_size = sizeof(struct xhci_dwc3_priv),
> + .platdata_auto_alloc_size = sizeof(struct xhci_dwc3_platdata),
> + .flags = DM_FLAG_ALLOC_PRIV_DMA,
> +};
>
--
Best regards,
Marek Vasut
^ permalink raw reply [flat|nested] 11+ messages in thread
* [U-Boot] [PATCH 3/3] usb: host: xhci-dwc3: Add generic PHY support
2017-05-19 7:15 ` [U-Boot] [PATCH 3/3] usb: host: xhci-dwc3: Add generic PHY support patrice.chotard at st.com
@ 2017-05-19 10:07 ` Marek Vasut
2017-05-19 12:05 ` Patrice CHOTARD
2017-05-22 20:26 ` Simon Glass
1 sibling, 1 reply; 11+ messages in thread
From: Marek Vasut @ 2017-05-19 10:07 UTC (permalink / raw)
To: u-boot
On 05/19/2017 09:15 AM, patrice.chotard at st.com wrote:
> From: Patrice Chotard <patrice.chotard@st.com>
>
> Add support of generic PHY framework support
>
> Signed-off-by: Patrice Chotard <patrice.chotard@st.com>
> ---
> 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 <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 {
You can drop the else and indent here by reordering the condition.
Otherwise OK.
> + 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) {
> + 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);
> }
>
>
--
Best regards,
Marek Vasut
^ permalink raw reply [flat|nested] 11+ messages in thread
* [U-Boot] [PATCH 1/3] usb: host: xhci-dwc3: Convert driver to DM
2017-05-19 10:06 ` Marek Vasut
@ 2017-05-19 11:41 ` Patrice CHOTARD
0 siblings, 0 replies; 11+ messages in thread
From: Patrice CHOTARD @ 2017-05-19 11:41 UTC (permalink / raw)
To: u-boot
Hi Marek
On 05/19/2017 12:06 PM, Marek Vasut wrote:
> On 05/19/2017 09:15 AM, patrice.chotard at st.com wrote:
>> From: Patrice Chotard <patrice.chotard@st.com>
>>
>> Add Driver Model support with use of generic DT
>> compatible string "snps,dwc3"
>>
>> Signed-off-by: Patrice Chotard <patrice.chotard@st.com>
>> ---
>> drivers/usb/host/xhci-dwc3.c | 71 ++++++++++++++++++++++++++++++++++++++++++++
>> 1 file changed, 71 insertions(+)
>>
>> diff --git a/drivers/usb/host/xhci-dwc3.c b/drivers/usb/host/xhci-dwc3.c
>> index 33961cd..b0b9076 100644
>> --- a/drivers/usb/host/xhci-dwc3.c
>> +++ b/drivers/usb/host/xhci-dwc3.c
>> @@ -9,9 +9,23 @@
>> */
>>
>> #include <common.h>
>> +#include <dm.h>
>> +#include <usb.h>
>> +
>> +#include "xhci.h"
>> #include <asm/io.h>
>> #include <linux/usb/dwc3.h>
>>
>> +DECLARE_GLOBAL_DATA_PTR;
>> +
>> +struct xhci_dwc3_platdata {
>> + phys_addr_t dwc3_regs;
>> +};
>
> Since you have DM, do you need this ?
Ah yes, effectively, i can remove that
>
>> +struct xhci_dwc3_priv {
>> + struct xhci_ctrl ctrl;
>> +};
>> +
>> void dwc3_set_mode(struct dwc3 *dwc3_reg, u32 mode)
>> {
>> clrsetbits_le32(&dwc3_reg->g_ctl,
>> @@ -97,3 +111,60 @@ void dwc3_set_fladj(struct dwc3 *dwc3_reg, u32 val)
>> setbits_le32(&dwc3_reg->g_fladj, GFLADJ_30MHZ_REG_SEL |
>> GFLADJ_30MHZ(val));
>> }
>> +
>> +static int xhci_dwc3_ofdata_to_platdata(struct udevice *dev)
>> +{
>> + struct xhci_dwc3_platdata *plat = dev_get_platdata(dev);
>> + u32 reg[2];
>> +
>> + /* get the dwc3 register space base address */
>> + if (fdtdec_get_int_array(gd->fdt_blob, dev_of_offset(dev), "reg", reg,
>> + ARRAY_SIZE(reg))) {
>
> dev_get_addr() ?
Agree, i will fix it
Thanks
Patrice
>
>> + debug("dwc3 node has bad/missing 'reg' property\n");
>> + return -FDT_ERR_NOTFOUND;
>> + }
>> + plat->dwc3_regs = reg[0];
>> +
>> + return 0;
>> +}
>> +
>> +static int xhci_dwc3_probe(struct udevice *dev)
>> +{
>> + struct xhci_dwc3_platdata *plat = dev_get_platdata(dev);
>> + struct xhci_hcor *hcor;
>> + struct xhci_hccr *hccr;
>> + struct dwc3 *dwc3_reg;
>> +
>> + hccr = (struct xhci_hccr *)plat->dwc3_regs;
>> + hcor = (struct xhci_hcor *)((phys_addr_t)hccr +
>> + HC_LENGTH(xhci_readl(&(hccr)->cr_capbase)));
>> +
>> + dwc3_reg = (struct dwc3 *)((char *)(hccr) + DWC3_REG_OFFSET);
>> +
>> + dwc3_core_init(dwc3_reg);
>> +
>> + return xhci_register(dev, hccr, hcor);
>> +}
>> +
>> +static int xhci_dwc3_remove(struct udevice *dev)
>> +{
>> + return xhci_deregister(dev);
>> +}
>> +
>> +static const struct udevice_id xhci_dwc3_ids[] = {
>> + { .compatible = "snps,dwc3" },
>> + { }
>> +};
>> +
>> +U_BOOT_DRIVER(xhci_dwc3) = {
>> + .name = "xhci-dwc3",
>> + .id = UCLASS_USB,
>> + .of_match = xhci_dwc3_ids,
>> + .ofdata_to_platdata = xhci_dwc3_ofdata_to_platdata,
>> + .probe = xhci_dwc3_probe,
>> + .remove = xhci_dwc3_remove,
>> + .ops = &xhci_usb_ops,
>> + .priv_auto_alloc_size = sizeof(struct xhci_dwc3_priv),
>> + .platdata_auto_alloc_size = sizeof(struct xhci_dwc3_platdata),
>> + .flags = DM_FLAG_ALLOC_PRIV_DMA,
>> +};
>>
>
>
^ permalink raw reply [flat|nested] 11+ messages in thread
* [U-Boot] [PATCH 3/3] usb: host: xhci-dwc3: Add generic PHY support
2017-05-19 10:07 ` Marek Vasut
@ 2017-05-19 12:05 ` Patrice CHOTARD
0 siblings, 0 replies; 11+ messages in thread
From: Patrice CHOTARD @ 2017-05-19 12:05 UTC (permalink / raw)
To: u-boot
Hi Marek
On 05/19/2017 12:07 PM, Marek Vasut wrote:
> On 05/19/2017 09:15 AM, patrice.chotard at st.com wrote:
>> From: Patrice Chotard <patrice.chotard@st.com>
>>
>> Add support of generic PHY framework support
>>
>> Signed-off-by: Patrice Chotard <patrice.chotard@st.com>
>> ---
>> 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 <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 {
>
> 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(&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) {
>> + 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);
>> }
>>
>>
>
>
^ permalink raw reply [flat|nested] 11+ messages in thread
* [U-Boot] [PATCH 2/3] usb: host: xhci-dwc3: Add dual role mode support from DT
2017-05-19 7:15 ` [U-Boot] [PATCH 2/3] usb: host: xhci-dwc3: Add dual role mode support from DT patrice.chotard at st.com
@ 2017-05-22 20:26 ` Simon Glass
0 siblings, 0 replies; 11+ messages in thread
From: Simon Glass @ 2017-05-22 20:26 UTC (permalink / raw)
To: u-boot
On 19 May 2017 at 01:15, <patrice.chotard@st.com> wrote:
> From: Patrice Chotard <patrice.chotard@st.com>
>
> DWC3 dual role mode is selected using DT "dr_mode"
> property. If not found, DWC3 controller is configured
> in HOST mode by default
>
> Signed-off-by: Patrice Chotard <patrice.chotard@st.com>
> ---
> drivers/usb/host/xhci-dwc3.c | 9 +++++++++
> 1 file changed, 9 insertions(+)
Reviewed-by: Simon Glass <sjg@chromium.org>
^ permalink raw reply [flat|nested] 11+ messages in thread
* [U-Boot] [PATCH 3/3] usb: host: xhci-dwc3: Add generic PHY support
2017-05-19 7:15 ` [U-Boot] [PATCH 3/3] usb: host: xhci-dwc3: Add generic PHY support patrice.chotard at st.com
2017-05-19 10:07 ` Marek Vasut
@ 2017-05-22 20:26 ` Simon Glass
2017-05-23 7:21 ` Patrice CHOTARD
1 sibling, 1 reply; 11+ messages in thread
From: Simon Glass @ 2017-05-22 20:26 UTC (permalink / raw)
To: u-boot
On 19 May 2017 at 01:15, <patrice.chotard@st.com> wrote:
> From: Patrice Chotard <patrice.chotard@st.com>
>
> Add support of generic PHY framework support
>
> Signed-off-by: Patrice Chotard <patrice.chotard@st.com>
> ---
> drivers/usb/host/xhci-dwc3.c | 29 +++++++++++++++++++++++++++++
> 1 file changed, 29 insertions(+)
>
Reviewed-by: Simon Glass <sjg@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?
> + 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
^ permalink raw reply [flat|nested] 11+ messages in thread
* [U-Boot] [PATCH 3/3] usb: host: xhci-dwc3: Add generic PHY support
2017-05-22 20:26 ` Simon Glass
@ 2017-05-23 7:21 ` Patrice CHOTARD
0 siblings, 0 replies; 11+ messages in thread
From: Patrice CHOTARD @ 2017-05-23 7:21 UTC (permalink / raw)
To: u-boot
Hi Simon
On 05/22/2017 10:26 PM, Simon Glass wrote:
> On 19 May 2017 at 01:15, <patrice.chotard@st.com> wrote:
>> From: Patrice Chotard <patrice.chotard@st.com>
>>
>> Add support of generic PHY framework support
>>
>> Signed-off-by: Patrice Chotard <patrice.chotard@st.com>
>> ---
>> drivers/usb/host/xhci-dwc3.c | 29 +++++++++++++++++++++++++++++
>> 1 file changed, 29 insertions(+)
>>
>
> Reviewed-by: Simon Glass <sjg@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
>
^ permalink raw reply [flat|nested] 11+ messages in thread
end of thread, other threads:[~2017-05-23 7:21 UTC | newest]
Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-05-19 7:15 [U-Boot] [PATCH 0/3] Extend xhci-dwc3 patrice.chotard at st.com
2017-05-19 7:15 ` [U-Boot] [PATCH 1/3] usb: host: xhci-dwc3: Convert driver to DM patrice.chotard at st.com
2017-05-19 10:06 ` Marek Vasut
2017-05-19 11:41 ` Patrice CHOTARD
2017-05-19 7:15 ` [U-Boot] [PATCH 2/3] usb: host: xhci-dwc3: Add dual role mode support from DT patrice.chotard at st.com
2017-05-22 20:26 ` Simon Glass
2017-05-19 7:15 ` [U-Boot] [PATCH 3/3] usb: host: xhci-dwc3: Add generic PHY support patrice.chotard at st.com
2017-05-19 10:07 ` Marek Vasut
2017-05-19 12:05 ` Patrice CHOTARD
2017-05-22 20:26 ` Simon Glass
2017-05-23 7:21 ` Patrice CHOTARD
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.