All of lore.kernel.org
 help / color / mirror / Atom feed
* [U-Boot] [UBOOT PATCH] usb: dwc3: convert to livetree
@ 2018-06-11  9:39 Vipul Kumar
  2018-06-11 12:06 ` Michal Simek
  2018-07-11 15:01 ` Marek Vasut
  0 siblings, 2 replies; 4+ messages in thread
From: Vipul Kumar @ 2018-06-11  9:39 UTC (permalink / raw)
  To: u-boot

Update the DWC3 USB driver to support a live tree.

Signed-off-by: Vipul Kumar <vipul.kumar@xilinx.com>
---
 drivers/usb/common/common.c     | 11 +++++------
 drivers/usb/dwc3/dwc3-generic.c | 17 +++++++----------
 drivers/usb/host/xhci-dwc3.c    |  3 ++-
 drivers/usb/host/xhci-zynqmp.c  |  3 +--
 include/linux/usb/otg.h         |  6 ++++--
 5 files changed, 19 insertions(+), 21 deletions(-)

diff --git a/drivers/usb/common/common.c b/drivers/usb/common/common.c
index a55def5..3dea79b 100644
--- a/drivers/usb/common/common.c
+++ b/drivers/usb/common/common.c
@@ -10,6 +10,7 @@
 #include <linux/libfdt.h>
 #include <linux/usb/otg.h>
 #include <linux/usb/ch9.h>
+#include <dm.h>

 DECLARE_GLOBAL_DATA_PTR;

@@ -20,13 +21,12 @@ static const char *const usb_dr_modes[] = {
        [USB_DR_MODE_OTG]               = "otg",
 };

-enum usb_dr_mode usb_get_dr_mode(int node)
+enum usb_dr_mode usb_get_dr_mode(ofnode node)
 {
-       const void *fdt = gd->fdt_blob;
        const char *dr_mode;
        int i;

-       dr_mode = fdt_getprop(fdt, node, "dr_mode", NULL);
+       dr_mode = ofnode_get_property(node, "dr_mode", NULL);
        if (!dr_mode) {
                pr_err("usb dr_mode not found\n");
                return USB_DR_MODE_UNKNOWN;
@@ -48,13 +48,12 @@ static const char *const speed_names[] = {
        [USB_SPEED_SUPER] = "super-speed",
 };

-enum usb_device_speed usb_get_maximum_speed(int node)
+enum usb_device_speed usb_get_maximum_speed(ofnode node)
 {
-       const void *fdt = gd->fdt_blob;
        const char *max_speed;
        int i;

-       max_speed = fdt_getprop(fdt, node, "maximum-speed", NULL);
+       max_speed = ofnode_get_property(node, "maximum-speed", NULL);
        if (!max_speed) {
                pr_err("usb maximum-speed not found\n");
                return USB_SPEED_UNKNOWN;
diff --git a/drivers/usb/dwc3/dwc3-generic.c b/drivers/usb/dwc3/dwc3-generic.c
index ca63eac..ef72c8c 100644
--- a/drivers/usb/dwc3/dwc3-generic.c
+++ b/drivers/usb/dwc3/dwc3-generic.c
@@ -61,18 +61,17 @@ static int dwc3_generic_peripheral_remove(struct udevice *dev)
 static int dwc3_generic_peripheral_ofdata_to_platdata(struct udevice *dev)
 {
        struct dwc3 *priv = dev_get_priv(dev);
-       int node = dev_of_offset(dev);

-       priv->regs = (void *)devfdt_get_addr(dev);
+       priv->regs = (void *)dev_read_addr(dev);
        priv->regs += DWC3_GLOBALS_REGS_START;

-       priv->maximum_speed = usb_get_maximum_speed(node);
+       priv->maximum_speed = usb_get_maximum_speed(dev->node);
        if (priv->maximum_speed == USB_SPEED_UNKNOWN) {
                pr_err("Invalid usb maximum speed\n");
                return -ENODEV;
        }

-       priv->dr_mode = usb_get_dr_mode(node);
+       priv->dr_mode = usb_get_dr_mode(dev->node);
        if (priv->dr_mode == USB_DR_MODE_UNKNOWN) {
                pr_err("Invalid usb mode setup\n");
                return -ENODEV;
@@ -100,13 +99,11 @@ U_BOOT_DRIVER(dwc3_generic_peripheral) = {

 static int dwc3_generic_bind(struct udevice *parent)
 {
-       const void *fdt = gd->fdt_blob;
-       int node;
+       ofnode node;
        int ret;

-       for (node = fdt_first_subnode(fdt, dev_of_offset(parent)); node > 0;
-            node = fdt_next_subnode(fdt, node)) {
-               const char *name = fdt_get_name(fdt, node, NULL);
+       dev_for_each_subnode(node, parent) {
+               const char *name = (char *)ofnode_get_name(node);
                enum usb_dr_mode dr_mode;
                struct udevice *dev;
                const char *driver;
@@ -133,7 +130,7 @@ static int dwc3_generic_bind(struct udevice *parent)
                };

                ret = device_bind_driver_to_node(parent, driver, name,
-                                                offset_to_ofnode(node), &dev);
+                                                node, &dev);
                if (ret) {
                        debug("%s: not able to bind usb device mode\n",
                              __func__);
diff --git a/drivers/usb/host/xhci-dwc3.c b/drivers/usb/host/xhci-dwc3.c
index 80754d7..cbab436 100644
--- a/drivers/usb/host/xhci-dwc3.c
+++ b/drivers/usb/host/xhci-dwc3.c
@@ -202,6 +202,7 @@ static int xhci_dwc3_probe(struct udevice *dev)
        struct dwc3 *dwc3_reg;
        enum usb_dr_mode dr_mode;
        int ret;
+       ofnode node;

        hccr = (struct xhci_hccr *)((uintptr_t)dev_read_addr(dev));
        hcor = (struct xhci_hcor *)((uintptr_t)hccr +
@@ -215,7 +216,7 @@ static int xhci_dwc3_probe(struct udevice *dev)

        dwc3_core_init(dwc3_reg);

-       dr_mode = usb_get_dr_mode(dev_of_offset(dev));
+       dr_mode = usb_get_dr_mode(node);
        if (dr_mode == USB_DR_MODE_UNKNOWN)
                /* by default set dual role mode to HOST */
                dr_mode = USB_DR_MODE_HOST;
diff --git a/drivers/usb/host/xhci-zynqmp.c b/drivers/usb/host/xhci-zynqmp.c
index e44e1ae..5a5b870 100644
--- a/drivers/usb/host/xhci-zynqmp.c
+++ b/drivers/usb/host/xhci-zynqmp.c
@@ -121,10 +121,9 @@ static int xhci_usb_remove(struct udevice *dev)
 static int xhci_usb_ofdata_to_platdata(struct udevice *dev)
 {
        struct zynqmp_xhci_platdata *plat = dev_get_platdata(dev);
-       const void *blob = gd->fdt_blob;

        /* Get the base address for XHCI controller from the device node */
-       plat->hcd_base = fdtdec_get_addr(blob, dev_of_offset(dev), "reg");
+       plat->hcd_base = dev_read_addr(dev);
        if (plat->hcd_base == FDT_ADDR_T_NONE) {
                debug("Can't get the XHCI register base address\n");
                return -ENXIO;
diff --git a/include/linux/usb/otg.h b/include/linux/usb/otg.h
index d2604c5..baf4d91 100644
--- a/include/linux/usb/otg.h
+++ b/include/linux/usb/otg.h
@@ -9,6 +9,8 @@
 #ifndef __LINUX_USB_OTG_H
 #define __LINUX_USB_OTG_H

+#include <dm/ofnode.h>
+
 enum usb_dr_mode {
        USB_DR_MODE_UNKNOWN,
        USB_DR_MODE_HOST,
@@ -23,7 +25,7 @@ enum usb_dr_mode {
  * The function gets phy interface string from property 'dr_mode',
  * and returns the correspondig enum usb_dr_mode
  */
-enum usb_dr_mode usb_get_dr_mode(int node);
+enum usb_dr_mode usb_get_dr_mode(ofnode node);

 /**
  * usb_get_maximum_speed() - Get maximum speed for given device
@@ -32,6 +34,6 @@ enum usb_dr_mode usb_get_dr_mode(int node);
  * The function gets phy interface string from property 'maximum-speed',
  * and returns the correspondig enum usb_device_speed
  */
-enum usb_device_speed usb_get_maximum_speed(int node);
+enum usb_device_speed usb_get_maximum_speed(ofnode node);

 #endif /* __LINUX_USB_OTG_H */
--
2.7.4

This email and any attachments are intended for the sole use of the named recipient(s) and contain(s) confidential information that may be proprietary, privileged or copyrighted under applicable law. If you are not the intended recipient, do not read, copy, or forward this email message or any attachments. Delete this email message and any attachments immediately.

^ permalink raw reply related	[flat|nested] 4+ messages in thread

* [U-Boot] [UBOOT PATCH] usb: dwc3: convert to livetree
  2018-06-11  9:39 [U-Boot] [UBOOT PATCH] usb: dwc3: convert to livetree Vipul Kumar
@ 2018-06-11 12:06 ` Michal Simek
  2018-07-11 15:01 ` Marek Vasut
  1 sibling, 0 replies; 4+ messages in thread
From: Michal Simek @ 2018-06-11 12:06 UTC (permalink / raw)
  To: u-boot

On 11.6.2018 11:39, Vipul Kumar wrote:
> Update the DWC3 USB driver to support a live tree.
> 
> Signed-off-by: Vipul Kumar <vipul.kumar@xilinx.com>
> ---
>  drivers/usb/common/common.c     | 11 +++++------
>  drivers/usb/dwc3/dwc3-generic.c | 17 +++++++----------
>  drivers/usb/host/xhci-dwc3.c    |  3 ++-
>  drivers/usb/host/xhci-zynqmp.c  |  3 +--
>  include/linux/usb/otg.h         |  6 ++++--
>  5 files changed, 19 insertions(+), 21 deletions(-)
> 
> diff --git a/drivers/usb/common/common.c b/drivers/usb/common/common.c
> index a55def5..3dea79b 100644
> --- a/drivers/usb/common/common.c
> +++ b/drivers/usb/common/common.c
> @@ -10,6 +10,7 @@
>  #include <linux/libfdt.h>
>  #include <linux/usb/otg.h>
>  #include <linux/usb/ch9.h>
> +#include <dm.h>
>  
>  DECLARE_GLOBAL_DATA_PTR;
>  
> @@ -20,13 +21,12 @@ static const char *const usb_dr_modes[] = {
>  	[USB_DR_MODE_OTG]		= "otg",
>  };
>  
> -enum usb_dr_mode usb_get_dr_mode(int node)
> +enum usb_dr_mode usb_get_dr_mode(ofnode node)
>  {
> -	const void *fdt = gd->fdt_blob;
>  	const char *dr_mode;
>  	int i;
>  
> -	dr_mode = fdt_getprop(fdt, node, "dr_mode", NULL);
> +	dr_mode = ofnode_get_property(node, "dr_mode", NULL);
>  	if (!dr_mode) {
>  		pr_err("usb dr_mode not found\n");
>  		return USB_DR_MODE_UNKNOWN;
> @@ -48,13 +48,12 @@ static const char *const speed_names[] = {
>  	[USB_SPEED_SUPER] = "super-speed",
>  };
>  
> -enum usb_device_speed usb_get_maximum_speed(int node)
> +enum usb_device_speed usb_get_maximum_speed(ofnode node)
>  {
> -	const void *fdt = gd->fdt_blob;
>  	const char *max_speed;
>  	int i;
>  
> -	max_speed = fdt_getprop(fdt, node, "maximum-speed", NULL);
> +	max_speed = ofnode_get_property(node, "maximum-speed", NULL);
>  	if (!max_speed) {
>  		pr_err("usb maximum-speed not found\n");
>  		return USB_SPEED_UNKNOWN;
> diff --git a/drivers/usb/dwc3/dwc3-generic.c b/drivers/usb/dwc3/dwc3-generic.c
> index ca63eac..ef72c8c 100644
> --- a/drivers/usb/dwc3/dwc3-generic.c
> +++ b/drivers/usb/dwc3/dwc3-generic.c
> @@ -61,18 +61,17 @@ static int dwc3_generic_peripheral_remove(struct udevice *dev)
>  static int dwc3_generic_peripheral_ofdata_to_platdata(struct udevice *dev)
>  {
>  	struct dwc3 *priv = dev_get_priv(dev);
> -	int node = dev_of_offset(dev);
>  
> -	priv->regs = (void *)devfdt_get_addr(dev);
> +	priv->regs = (void *)dev_read_addr(dev);
>  	priv->regs += DWC3_GLOBALS_REGS_START;
>  
> -	priv->maximum_speed = usb_get_maximum_speed(node);
> +	priv->maximum_speed = usb_get_maximum_speed(dev->node);
>  	if (priv->maximum_speed == USB_SPEED_UNKNOWN) {
>  		pr_err("Invalid usb maximum speed\n");
>  		return -ENODEV;
>  	}
>  
> -	priv->dr_mode = usb_get_dr_mode(node);
> +	priv->dr_mode = usb_get_dr_mode(dev->node);
>  	if (priv->dr_mode == USB_DR_MODE_UNKNOWN) {
>  		pr_err("Invalid usb mode setup\n");
>  		return -ENODEV;
> @@ -100,13 +99,11 @@ U_BOOT_DRIVER(dwc3_generic_peripheral) = {
>  
>  static int dwc3_generic_bind(struct udevice *parent)
>  {
> -	const void *fdt = gd->fdt_blob;
> -	int node;
> +	ofnode node;
>  	int ret;
>  
> -	for (node = fdt_first_subnode(fdt, dev_of_offset(parent)); node > 0;
> -	     node = fdt_next_subnode(fdt, node)) {
> -		const char *name = fdt_get_name(fdt, node, NULL);
> +	dev_for_each_subnode(node, parent) {
> +		const char *name = (char *)ofnode_get_name(node);
>  		enum usb_dr_mode dr_mode;
>  		struct udevice *dev;
>  		const char *driver;
> @@ -133,7 +130,7 @@ static int dwc3_generic_bind(struct udevice *parent)
>  		};
>  
>  		ret = device_bind_driver_to_node(parent, driver, name,
> -						 offset_to_ofnode(node), &dev);
> +						 node, &dev);
>  		if (ret) {
>  			debug("%s: not able to bind usb device mode\n",
>  			      __func__);
> diff --git a/drivers/usb/host/xhci-dwc3.c b/drivers/usb/host/xhci-dwc3.c
> index 80754d7..cbab436 100644
> --- a/drivers/usb/host/xhci-dwc3.c
> +++ b/drivers/usb/host/xhci-dwc3.c
> @@ -202,6 +202,7 @@ static int xhci_dwc3_probe(struct udevice *dev)
>  	struct dwc3 *dwc3_reg;
>  	enum usb_dr_mode dr_mode;
>  	int ret;
> +	ofnode node;
>  
>  	hccr = (struct xhci_hccr *)((uintptr_t)dev_read_addr(dev));
>  	hcor = (struct xhci_hcor *)((uintptr_t)hccr +
> @@ -215,7 +216,7 @@ static int xhci_dwc3_probe(struct udevice *dev)
>  
>  	dwc3_core_init(dwc3_reg);
>  
> -	dr_mode = usb_get_dr_mode(dev_of_offset(dev));
> +	dr_mode = usb_get_dr_mode(node);
>  	if (dr_mode == USB_DR_MODE_UNKNOWN)
>  		/* by default set dual role mode to HOST */
>  		dr_mode = USB_DR_MODE_HOST;
> diff --git a/drivers/usb/host/xhci-zynqmp.c b/drivers/usb/host/xhci-zynqmp.c
> index e44e1ae..5a5b870 100644
> --- a/drivers/usb/host/xhci-zynqmp.c
> +++ b/drivers/usb/host/xhci-zynqmp.c
> @@ -121,10 +121,9 @@ static int xhci_usb_remove(struct udevice *dev)
>  static int xhci_usb_ofdata_to_platdata(struct udevice *dev)
>  {
>  	struct zynqmp_xhci_platdata *plat = dev_get_platdata(dev);
> -	const void *blob = gd->fdt_blob;
>  
>  	/* Get the base address for XHCI controller from the device node */
> -	plat->hcd_base = fdtdec_get_addr(blob, dev_of_offset(dev), "reg");
> +	plat->hcd_base = dev_read_addr(dev);
>  	if (plat->hcd_base == FDT_ADDR_T_NONE) {
>  		debug("Can't get the XHCI register base address\n");
>  		return -ENXIO;
> diff --git a/include/linux/usb/otg.h b/include/linux/usb/otg.h
> index d2604c5..baf4d91 100644
> --- a/include/linux/usb/otg.h
> +++ b/include/linux/usb/otg.h
> @@ -9,6 +9,8 @@
>  #ifndef __LINUX_USB_OTG_H
>  #define __LINUX_USB_OTG_H
>  
> +#include <dm/ofnode.h>
> +
>  enum usb_dr_mode {
>  	USB_DR_MODE_UNKNOWN,
>  	USB_DR_MODE_HOST,
> @@ -23,7 +25,7 @@ enum usb_dr_mode {
>   * The function gets phy interface string from property 'dr_mode',
>   * and returns the correspondig enum usb_dr_mode
>   */
> -enum usb_dr_mode usb_get_dr_mode(int node);
> +enum usb_dr_mode usb_get_dr_mode(ofnode node);
>  
>  /**
>   * usb_get_maximum_speed() - Get maximum speed for given device
> @@ -32,6 +34,6 @@ enum usb_dr_mode usb_get_dr_mode(int node);
>   * The function gets phy interface string from property 'maximum-speed',
>   * and returns the correspondig enum usb_device_speed
>   */
> -enum usb_device_speed usb_get_maximum_speed(int node);
> +enum usb_device_speed usb_get_maximum_speed(ofnode node);
>  
>  #endif /* __LINUX_USB_OTG_H */
> 

Tested-by: Michal Simek <michal.simek@xilinx.com>

Thanks,
Michal

^ permalink raw reply	[flat|nested] 4+ messages in thread

* [U-Boot] [UBOOT PATCH] usb: dwc3: convert to livetree
  2018-06-11  9:39 [U-Boot] [UBOOT PATCH] usb: dwc3: convert to livetree Vipul Kumar
  2018-06-11 12:06 ` Michal Simek
@ 2018-07-11 15:01 ` Marek Vasut
  2018-07-12  5:44   ` Michal Simek
  1 sibling, 1 reply; 4+ messages in thread
From: Marek Vasut @ 2018-07-11 15:01 UTC (permalink / raw)
  To: u-boot

On 06/11/2018 11:39 AM, Vipul Kumar wrote:
> Update the DWC3 USB driver to support a live tree.
> 
> Signed-off-by: Vipul Kumar <vipul.kumar@xilinx.com>

What about systems which do not use live tree, does it work on those ?

-- 
Best regards,
Marek Vasut

^ permalink raw reply	[flat|nested] 4+ messages in thread

* [U-Boot] [UBOOT PATCH] usb: dwc3: convert to livetree
  2018-07-11 15:01 ` Marek Vasut
@ 2018-07-12  5:44   ` Michal Simek
  0 siblings, 0 replies; 4+ messages in thread
From: Michal Simek @ 2018-07-12  5:44 UTC (permalink / raw)
  To: u-boot

On 11.7.2018 17:01, Marek Vasut wrote:
> On 06/11/2018 11:39 AM, Vipul Kumar wrote:
>> Update the DWC3 USB driver to support a live tree.
>>
>> Signed-off-by: Vipul Kumar <vipul.kumar@xilinx.com>
> 
> What about systems which do not use live tree, does it work on those ?
> 

They are not affected because headers are pointing to right functions.

Thanks,
Michal

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2018-07-12  5:44 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-06-11  9:39 [U-Boot] [UBOOT PATCH] usb: dwc3: convert to livetree Vipul Kumar
2018-06-11 12:06 ` Michal Simek
2018-07-11 15:01 ` Marek Vasut
2018-07-12  5:44   ` Michal Simek

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.