All of lore.kernel.org
 help / color / mirror / Atom feed
* [U-Boot] [RFC] usb: musb-new: omap2430: Enable DM_USB and OF support
@ 2018-07-22 16:45 Adam Ford
  2018-07-22 16:52 ` Adam Ford
  0 siblings, 1 reply; 5+ messages in thread
From: Adam Ford @ 2018-07-22 16:45 UTC (permalink / raw)
  To: u-boot

With upcoming changes that require CONFIG_BLK, this broke
USB Mass Storage on the OMAP3 boards because if CONFIG_BLK is
enabled, it assumes that DM_USB is enabled, but it wasn't yet
available on omap3 and omap4 boards.

This patch converts the OMAP2430 MUSB glue to support DM_USB and
extracts the necessary information based on the device tree.

It's based on the ti-musb driver, but there are enough significant
differences in both the architecture and device tree entires between
am33xx and OMAP3/OMAP4, that I think it makes sense to continue to
keep the separate.

This RFC has functional USB Host working, but it's hard coded to be
host or peripheral based on the config file.  Unfortunately,
USB Peripherals like fastboot, etc don't appear to be
working at all.  At least on omap3_logic (DM3730/OMAP35xx).
Any suggestions are appreciated in how to setup the MUSB in OTG mode
and get it to start USB in either host or gadget mode.

Unless an OTG adapter is connected with a USB device, the only message
I get when issing 'usb start' is

	USB0:   Port not available.

Signed-off-by: Adam Ford <aford173@gmail.com>

diff --git a/drivers/usb/musb-new/omap2430.c b/drivers/usb/musb-new/omap2430.c
index fd63c07789..8b56e1a42a 100644
--- a/drivers/usb/musb-new/omap2430.c
+++ b/drivers/usb/musb-new/omap2430.c
@@ -9,14 +9,18 @@
  * This file is part of the Inventra Controller Driver for Linux.
  */
 #include <common.h>
+#include <dm.h>
+#include <dm/device-internal.h>
+#include <dm/lists.h>
+#include <linux/usb/otg.h>
 #include <asm/omap_common.h>
 #include <asm/omap_musb.h>
 #include <twl4030.h>
 #include <twl6030.h>
 #include "linux-compat.h"
-
 #include "musb_core.h"
 #include "omap2430.h"
+#include "musb_uboot.h"
 
 static inline void omap2430_low_level_exit(struct musb *musb)
 {
@@ -43,6 +47,7 @@ static int omap2430_musb_init(struct musb *musb)
 	u32 l;
 	int status = 0;
 	unsigned long int start;
+
 	struct omap_musb_board_data *data =
 		(struct omap_musb_board_data *)musb->controller;
 
@@ -129,3 +134,144 @@ const struct musb_platform_ops omap2430_ops = {
 	.enable		= omap2430_musb_enable,
 	.disable	= omap2430_musb_disable,
 };
+
+#if defined(CONFIG_DM_USB)
+
+struct omap2430_musb_platdata {
+	void *base;
+	void *ctrl_mod_base;
+	struct musb_hdrc_platform_data plat;
+	struct musb_hdrc_config musb_config;
+	struct omap_musb_board_data otg_board_data;
+};
+
+static int omap2430_musb_ofdata_to_platdata(struct udevice *dev)
+{
+	struct omap2430_musb_platdata *platdata = dev_get_platdata(dev);
+	const void *fdt = gd->fdt_blob;
+	int node = dev_of_offset(dev);
+
+	platdata->base = (void *)dev_read_addr_ptr(dev);
+
+	platdata->musb_config.multipoint = fdtdec_get_int(fdt, node,
+							  "multipoint",
+							  -1);
+	if (platdata->musb_config.multipoint < 0) {
+		pr_err("MUSB multipoint DT entry missing\n");
+		return -ENOENT;
+	}
+
+	platdata->musb_config.dyn_fifo = 1;
+	platdata->musb_config.num_eps = fdtdec_get_int(fdt, node,
+						       "num-eps", -1);
+	if (platdata->musb_config.num_eps < 0) {
+		pr_err("MUSB num-eps DT entry missing\n");
+		return -ENOENT;
+	}
+
+	platdata->musb_config.ram_bits = fdtdec_get_int(fdt, node,
+							"ram-bits", -1);
+	if (platdata->musb_config.ram_bits < 0) {
+		pr_err("MUSB ram-bits DT entry missing\n");
+		return -ENOENT;
+	}
+
+	platdata->plat.power = fdtdec_get_int(fdt, node,
+								"power", -1);
+	if (platdata->plat.power < 0) {
+		pr_err("MUSB power DT entry missing\n");
+		return -ENOENT;
+	}
+
+	platdata->otg_board_data.interface_type = fdtdec_get_int(fdt, node,
+									"interface-type", -1);
+	if (platdata->otg_board_data.interface_type < 0) {
+		pr_err("MUSB interface-type DT entry missing\n");
+		return -ENOENT;
+	}
+
+#if 0 /* In a perfect world, mode would be set to OTG, mode 3 from DT */
+	platdata->plat.mode = fdtdec_get_int(fdt, node,
+										"mode", -1);
+	if (platdata->plat.mode < 0) {
+		pr_err("MUSB mode DT entry missing\n");
+		return -ENOENT;
+	}
+#else /* MUSB_OTG, it doesn't work */
+#ifdef CONFIG_USB_MUSB_HOST /* Host seems to be the only option that works */
+	platdata->plat.mode = MUSB_HOST;
+#else /* For that matter, MUSB_PERIPHERAL doesn't either */
+	platdata->plat.mode = MUSB_PERIPHERAL;
+#endif
+#endif
+	platdata->otg_board_data.dev = dev;
+	platdata->plat.config = &platdata->musb_config;
+	platdata->plat.platform_ops = &omap2430_ops;
+	platdata->plat.board_data = &platdata->otg_board_data;
+	return 0;
+}
+
+static int omap2430_musb_probe(struct udevice *dev)
+{
+#ifdef CONFIG_USB_MUSB_HOST
+	struct musb_host_data *host = dev_get_priv(dev);
+#endif
+	struct omap2430_musb_platdata *platdata = dev_get_platdata(dev);
+	struct usb_bus_priv *priv = dev_get_uclass_priv(dev);
+	struct omap_musb_board_data *otg_board_data;
+	int ret;
+	void *base = dev_read_addr_ptr(dev);
+
+	priv->desc_before_addr = true;
+
+	otg_board_data = &platdata->otg_board_data;
+
+#ifdef CONFIG_USB_MUSB_HOST
+	host->host = musb_init_controller(&platdata->plat,
+					  (struct device *)otg_board_data,
+					  platdata->base);
+	if (!host->host) {
+		return -EIO;
+	}
+
+	ret = musb_lowlevel_init(host);
+#else
+	ret = musb_register(&platdata->plat,
+			  (struct device *)otg_board_data,
+			  platdata->base);
+#endif
+	return ret;
+}
+
+static int omap2430_musb_remove(struct udevice *dev)
+{
+	struct musb_host_data *host = dev_get_priv(dev);
+
+	musb_stop(host->host);
+
+	return 0;
+}
+
+static const struct udevice_id omap2430_musb_ids[] = {
+	{ .compatible = "ti,omap3-musb" },
+	{ .compatible = "ti,omap4-musb" },
+	{ }
+};
+
+U_BOOT_DRIVER(omap2430_musb) = {
+	.name	= "omap2430-musb",
+#ifdef CONFIG_USB_MUSB_HOST
+	.id		= UCLASS_USB,
+#else
+	.id		= UCLASS_USB_DEV_GENERIC,
+#endif
+	.of_match = omap2430_musb_ids,
+	.ofdata_to_platdata = omap2430_musb_ofdata_to_platdata,
+	.probe = omap2430_musb_probe,
+	.remove = omap2430_musb_remove,
+	.ops	= &musb_usb_ops,
+	.platdata_auto_alloc_size = sizeof(struct omap2430_musb_platdata),
+	.priv_auto_alloc_size = sizeof(struct musb_host_data),
+};
+
+#endif /* CONFIG_DM_USB */
-- 
2.17.1

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

* [U-Boot] [RFC] usb: musb-new: omap2430: Enable DM_USB and OF support
  2018-07-22 16:45 [U-Boot] [RFC] usb: musb-new: omap2430: Enable DM_USB and OF support Adam Ford
@ 2018-07-22 16:52 ` Adam Ford
  2018-07-22 20:31   ` Lukasz Majewski
  0 siblings, 1 reply; 5+ messages in thread
From: Adam Ford @ 2018-07-22 16:52 UTC (permalink / raw)
  To: u-boot

On Sun, Jul 22, 2018 at 11:45 AM Adam Ford <aford173@gmail.com> wrote:
>
> With upcoming changes that require CONFIG_BLK, this broke
> USB Mass Storage on the OMAP3 boards because if CONFIG_BLK is
> enabled, it assumes that DM_USB is enabled, but it wasn't yet
> available on omap3 and omap4 boards.
>
> This patch converts the OMAP2430 MUSB glue to support DM_USB and
> extracts the necessary information based on the device tree.
>
> It's based on the ti-musb driver, but there are enough significant
> differences in both the architecture and device tree entires between
> am33xx and OMAP3/OMAP4, that I think it makes sense to continue to
> keep the separate.
>

I forgot to mention that, I based this patch on top of an existing
patch, that hasn't yet been reviewed which strips out a bunch of dead
code
 https://patchwork.ozlabs.org/patch/943813/

I did it to make it easier for me to read.

> This RFC has functional USB Host working, but it's hard coded to be
> host or peripheral based on the config file.  Unfortunately,
> USB Peripherals like fastboot, etc don't appear to be
> working at all.  At least on omap3_logic (DM3730/OMAP35xx).
> Any suggestions are appreciated in how to setup the MUSB in OTG mode
> and get it to start USB in either host or gadget mode.
>
> Unless an OTG adapter is connected with a USB device, the only message
> I get when issing 'usb start' is
>
>         USB0:   Port not available.
>
> Signed-off-by: Adam Ford <aford173@gmail.com>
>
> diff --git a/drivers/usb/musb-new/omap2430.c b/drivers/usb/musb-new/omap2430.c
> index fd63c07789..8b56e1a42a 100644
> --- a/drivers/usb/musb-new/omap2430.c
> +++ b/drivers/usb/musb-new/omap2430.c
> @@ -9,14 +9,18 @@
>   * This file is part of the Inventra Controller Driver for Linux.
>   */
>  #include <common.h>
> +#include <dm.h>
> +#include <dm/device-internal.h>
> +#include <dm/lists.h>
> +#include <linux/usb/otg.h>
>  #include <asm/omap_common.h>
>  #include <asm/omap_musb.h>
>  #include <twl4030.h>
>  #include <twl6030.h>
>  #include "linux-compat.h"
> -
>  #include "musb_core.h"
>  #include "omap2430.h"
> +#include "musb_uboot.h"
>
>  static inline void omap2430_low_level_exit(struct musb *musb)
>  {
> @@ -43,6 +47,7 @@ static int omap2430_musb_init(struct musb *musb)
>         u32 l;
>         int status = 0;
>         unsigned long int start;
> +
>         struct omap_musb_board_data *data =
>                 (struct omap_musb_board_data *)musb->controller;
>
> @@ -129,3 +134,144 @@ const struct musb_platform_ops omap2430_ops = {
>         .enable         = omap2430_musb_enable,
>         .disable        = omap2430_musb_disable,
>  };
> +
> +#if defined(CONFIG_DM_USB)
> +
> +struct omap2430_musb_platdata {
> +       void *base;
> +       void *ctrl_mod_base;
> +       struct musb_hdrc_platform_data plat;
> +       struct musb_hdrc_config musb_config;
> +       struct omap_musb_board_data otg_board_data;
> +};
> +
> +static int omap2430_musb_ofdata_to_platdata(struct udevice *dev)
> +{
> +       struct omap2430_musb_platdata *platdata = dev_get_platdata(dev);
> +       const void *fdt = gd->fdt_blob;
> +       int node = dev_of_offset(dev);
> +
> +       platdata->base = (void *)dev_read_addr_ptr(dev);
> +
> +       platdata->musb_config.multipoint = fdtdec_get_int(fdt, node,
> +                                                         "multipoint",
> +                                                         -1);
> +       if (platdata->musb_config.multipoint < 0) {
> +               pr_err("MUSB multipoint DT entry missing\n");
> +               return -ENOENT;
> +       }
> +
> +       platdata->musb_config.dyn_fifo = 1;
> +       platdata->musb_config.num_eps = fdtdec_get_int(fdt, node,
> +                                                      "num-eps", -1);
> +       if (platdata->musb_config.num_eps < 0) {
> +               pr_err("MUSB num-eps DT entry missing\n");
> +               return -ENOENT;
> +       }
> +
> +       platdata->musb_config.ram_bits = fdtdec_get_int(fdt, node,
> +                                                       "ram-bits", -1);
> +       if (platdata->musb_config.ram_bits < 0) {
> +               pr_err("MUSB ram-bits DT entry missing\n");
> +               return -ENOENT;
> +       }
> +
> +       platdata->plat.power = fdtdec_get_int(fdt, node,
> +                                                               "power", -1);
> +       if (platdata->plat.power < 0) {
> +               pr_err("MUSB power DT entry missing\n");
> +               return -ENOENT;
> +       }
> +
> +       platdata->otg_board_data.interface_type = fdtdec_get_int(fdt, node,
> +                                                                       "interface-type", -1);
> +       if (platdata->otg_board_data.interface_type < 0) {
> +               pr_err("MUSB interface-type DT entry missing\n");
> +               return -ENOENT;
> +       }
> +
> +#if 0 /* In a perfect world, mode would be set to OTG, mode 3 from DT */
> +       platdata->plat.mode = fdtdec_get_int(fdt, node,
> +                                                                               "mode", -1);
> +       if (platdata->plat.mode < 0) {
> +               pr_err("MUSB mode DT entry missing\n");
> +               return -ENOENT;
> +       }
> +#else /* MUSB_OTG, it doesn't work */
> +#ifdef CONFIG_USB_MUSB_HOST /* Host seems to be the only option that works */
> +       platdata->plat.mode = MUSB_HOST;
> +#else /* For that matter, MUSB_PERIPHERAL doesn't either */
> +       platdata->plat.mode = MUSB_PERIPHERAL;
> +#endif
> +#endif
> +       platdata->otg_board_data.dev = dev;
> +       platdata->plat.config = &platdata->musb_config;
> +       platdata->plat.platform_ops = &omap2430_ops;
> +       platdata->plat.board_data = &platdata->otg_board_data;
> +       return 0;
> +}
> +
> +static int omap2430_musb_probe(struct udevice *dev)
> +{
> +#ifdef CONFIG_USB_MUSB_HOST
> +       struct musb_host_data *host = dev_get_priv(dev);
> +#endif
> +       struct omap2430_musb_platdata *platdata = dev_get_platdata(dev);
> +       struct usb_bus_priv *priv = dev_get_uclass_priv(dev);
> +       struct omap_musb_board_data *otg_board_data;
> +       int ret;
> +       void *base = dev_read_addr_ptr(dev);
> +
> +       priv->desc_before_addr = true;
> +
> +       otg_board_data = &platdata->otg_board_data;
> +
> +#ifdef CONFIG_USB_MUSB_HOST
> +       host->host = musb_init_controller(&platdata->plat,
> +                                         (struct device *)otg_board_data,
> +                                         platdata->base);
> +       if (!host->host) {
> +               return -EIO;
> +       }
> +
> +       ret = musb_lowlevel_init(host);
> +#else
> +       ret = musb_register(&platdata->plat,
> +                         (struct device *)otg_board_data,
> +                         platdata->base);
> +#endif
> +       return ret;
> +}
> +
> +static int omap2430_musb_remove(struct udevice *dev)
> +{
> +       struct musb_host_data *host = dev_get_priv(dev);
> +
> +       musb_stop(host->host);
> +
> +       return 0;
> +}
> +
> +static const struct udevice_id omap2430_musb_ids[] = {
> +       { .compatible = "ti,omap3-musb" },
> +       { .compatible = "ti,omap4-musb" },
> +       { }
> +};
> +
> +U_BOOT_DRIVER(omap2430_musb) = {
> +       .name   = "omap2430-musb",
> +#ifdef CONFIG_USB_MUSB_HOST
> +       .id             = UCLASS_USB,
> +#else
> +       .id             = UCLASS_USB_DEV_GENERIC,
> +#endif
> +       .of_match = omap2430_musb_ids,
> +       .ofdata_to_platdata = omap2430_musb_ofdata_to_platdata,
> +       .probe = omap2430_musb_probe,
> +       .remove = omap2430_musb_remove,
> +       .ops    = &musb_usb_ops,
> +       .platdata_auto_alloc_size = sizeof(struct omap2430_musb_platdata),
> +       .priv_auto_alloc_size = sizeof(struct musb_host_data),
> +};
> +
> +#endif /* CONFIG_DM_USB */
> --
> 2.17.1
>

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

* [U-Boot] [RFC] usb: musb-new: omap2430: Enable DM_USB and OF support
  2018-07-22 16:52 ` Adam Ford
@ 2018-07-22 20:31   ` Lukasz Majewski
  2018-07-31  9:57     ` Adam Ford
  0 siblings, 1 reply; 5+ messages in thread
From: Lukasz Majewski @ 2018-07-22 20:31 UTC (permalink / raw)
  To: u-boot

Hi Adam,

> On Sun, Jul 22, 2018 at 11:45 AM Adam Ford <aford173@gmail.com> wrote:
> >
> > With upcoming changes that require CONFIG_BLK, this broke
> > USB Mass Storage on the OMAP3 boards because if CONFIG_BLK is
> > enabled, it assumes that DM_USB is enabled, but it wasn't yet
> > available on omap3 and omap4 boards.
> >
> > This patch converts the OMAP2430 MUSB glue to support DM_USB and
> > extracts the necessary information based on the device tree.
> >
> > It's based on the ti-musb driver, but there are enough significant
> > differences in both the architecture and device tree entires between
> > am33xx and OMAP3/OMAP4, that I think it makes sense to continue to
> > keep the separate.
> >  
> 
> I forgot to mention that, I based this patch on top of an existing
> patch, that hasn't yet been reviewed which strips out a bunch of dead
> code
>  https://patchwork.ozlabs.org/patch/943813/
> 
> I did it to make it easier for me to read.
> 
> > This RFC has functional USB Host working, but it's hard coded to be
> > host or peripheral based on the config file.  Unfortunately,
> > USB Peripherals like fastboot, etc don't appear to be
> > working at all.  At least on omap3_logic (DM3730/OMAP35xx).
> > Any suggestions are appreciated in how to setup the MUSB in OTG mode
> > and get it to start USB in either host or gadget mode.

Has it been working from the outset? Is the old musb driver working
correctly with gadget infrastructure?

> >
> > Unless an OTG adapter is connected with a USB device, the only
> > message I get when issing 'usb start' is
> >
> >         USB0:   Port not available.

I assume that without your patches it works? It was not clear from your
commit message.

> >
> > Signed-off-by: Adam Ford <aford173@gmail.com>
> >
> > diff --git a/drivers/usb/musb-new/omap2430.c
> > b/drivers/usb/musb-new/omap2430.c index fd63c07789..8b56e1a42a
> > 100644 --- a/drivers/usb/musb-new/omap2430.c
> > +++ b/drivers/usb/musb-new/omap2430.c
> > @@ -9,14 +9,18 @@
> >   * This file is part of the Inventra Controller Driver for Linux.
> >   */
> >  #include <common.h>
> > +#include <dm.h>
> > +#include <dm/device-internal.h>
> > +#include <dm/lists.h>
> > +#include <linux/usb/otg.h>
> >  #include <asm/omap_common.h>
> >  #include <asm/omap_musb.h>
> >  #include <twl4030.h>
> >  #include <twl6030.h>
> >  #include "linux-compat.h"
> > -
> >  #include "musb_core.h"
> >  #include "omap2430.h"
> > +#include "musb_uboot.h"
> >
> >  static inline void omap2430_low_level_exit(struct musb *musb)
> >  {
> > @@ -43,6 +47,7 @@ static int omap2430_musb_init(struct musb *musb)
> >         u32 l;
> >         int status = 0;
> >         unsigned long int start;
> > +
> >         struct omap_musb_board_data *data =
> >                 (struct omap_musb_board_data *)musb->controller;
> >
> > @@ -129,3 +134,144 @@ const struct musb_platform_ops omap2430_ops =
> > { .enable         = omap2430_musb_enable,
> >         .disable        = omap2430_musb_disable,
> >  };
> > +
> > +#if defined(CONFIG_DM_USB)
> > +
> > +struct omap2430_musb_platdata {
> > +       void *base;
> > +       void *ctrl_mod_base;
> > +       struct musb_hdrc_platform_data plat;
> > +       struct musb_hdrc_config musb_config;
> > +       struct omap_musb_board_data otg_board_data;
> > +};
> > +
> > +static int omap2430_musb_ofdata_to_platdata(struct udevice *dev)
> > +{
> > +       struct omap2430_musb_platdata *platdata =
> > dev_get_platdata(dev);
> > +       const void *fdt = gd->fdt_blob;
> > +       int node = dev_of_offset(dev);
> > +
> > +       platdata->base = (void *)dev_read_addr_ptr(dev);
> > +
> > +       platdata->musb_config.multipoint = fdtdec_get_int(fdt, node,
> > +
> > "multipoint",
> > +                                                         -1);
> > +       if (platdata->musb_config.multipoint < 0) {
> > +               pr_err("MUSB multipoint DT entry missing\n");
> > +               return -ENOENT;
> > +       }
> > +
> > +       platdata->musb_config.dyn_fifo = 1;
> > +       platdata->musb_config.num_eps = fdtdec_get_int(fdt, node,
> > +                                                      "num-eps",
> > -1);
> > +       if (platdata->musb_config.num_eps < 0) {
> > +               pr_err("MUSB num-eps DT entry missing\n");
> > +               return -ENOENT;
> > +       }
> > +
> > +       platdata->musb_config.ram_bits = fdtdec_get_int(fdt, node,
> > +                                                       "ram-bits",
> > -1);
> > +       if (platdata->musb_config.ram_bits < 0) {
> > +               pr_err("MUSB ram-bits DT entry missing\n");
> > +               return -ENOENT;
> > +       }
> > +
> > +       platdata->plat.power = fdtdec_get_int(fdt, node,
> > +
> > "power", -1);
> > +       if (platdata->plat.power < 0) {
> > +               pr_err("MUSB power DT entry missing\n");
> > +               return -ENOENT;
> > +       }
> > +
> > +       platdata->otg_board_data.interface_type =
> > fdtdec_get_int(fdt, node,
> > +
> > "interface-type", -1);
> > +       if (platdata->otg_board_data.interface_type < 0) {
> > +               pr_err("MUSB interface-type DT entry missing\n");
> > +               return -ENOENT;
> > +       }
> > +
> > +#if 0 /* In a perfect world, mode would be set to OTG, mode 3 from
> > DT */
> > +       platdata->plat.mode = fdtdec_get_int(fdt, node,
> > +
> > "mode", -1);
> > +       if (platdata->plat.mode < 0) {
> > +               pr_err("MUSB mode DT entry missing\n");
> > +               return -ENOENT;
> > +       }
> > +#else /* MUSB_OTG, it doesn't work */
> > +#ifdef CONFIG_USB_MUSB_HOST /* Host seems to be the only option
> > that works */
> > +       platdata->plat.mode = MUSB_HOST;
> > +#else /* For that matter, MUSB_PERIPHERAL doesn't either */
> > +       platdata->plat.mode = MUSB_PERIPHERAL;
> > +#endif
> > +#endif
> > +       platdata->otg_board_data.dev = dev;
> > +       platdata->plat.config = &platdata->musb_config;
> > +       platdata->plat.platform_ops = &omap2430_ops;
> > +       platdata->plat.board_data = &platdata->otg_board_data;
> > +       return 0;
> > +}
> > +
> > +static int omap2430_musb_probe(struct udevice *dev)
> > +{
> > +#ifdef CONFIG_USB_MUSB_HOST
> > +       struct musb_host_data *host = dev_get_priv(dev);
> > +#endif
> > +       struct omap2430_musb_platdata *platdata =
> > dev_get_platdata(dev);
> > +       struct usb_bus_priv *priv = dev_get_uclass_priv(dev);
> > +       struct omap_musb_board_data *otg_board_data;
> > +       int ret;
> > +       void *base = dev_read_addr_ptr(dev);
> > +
> > +       priv->desc_before_addr = true;
> > +
> > +       otg_board_data = &platdata->otg_board_data;
> > +
> > +#ifdef CONFIG_USB_MUSB_HOST
> > +       host->host = musb_init_controller(&platdata->plat,
> > +                                         (struct device
> > *)otg_board_data,
> > +                                         platdata->base);
> > +       if (!host->host) {
> > +               return -EIO;
> > +       }
> > +
> > +       ret = musb_lowlevel_init(host);
> > +#else
> > +       ret = musb_register(&platdata->plat,
> > +                         (struct device *)otg_board_data,
> > +                         platdata->base);
> > +#endif
> > +       return ret;
> > +}
> > +
> > +static int omap2430_musb_remove(struct udevice *dev)
> > +{
> > +       struct musb_host_data *host = dev_get_priv(dev);
> > +
> > +       musb_stop(host->host);
> > +
> > +       return 0;
> > +}
> > +
> > +static const struct udevice_id omap2430_musb_ids[] = {
> > +       { .compatible = "ti,omap3-musb" },
> > +       { .compatible = "ti,omap4-musb" },
> > +       { }
> > +};
> > +
> > +U_BOOT_DRIVER(omap2430_musb) = {
> > +       .name   = "omap2430-musb",
> > +#ifdef CONFIG_USB_MUSB_HOST
> > +       .id             = UCLASS_USB,
> > +#else
> > +       .id             = UCLASS_USB_DEV_GENERIC,
> > +#endif
> > +       .of_match = omap2430_musb_ids,
> > +       .ofdata_to_platdata = omap2430_musb_ofdata_to_platdata,
> > +       .probe = omap2430_musb_probe,
> > +       .remove = omap2430_musb_remove,
> > +       .ops    = &musb_usb_ops,
> > +       .platdata_auto_alloc_size = sizeof(struct
> > omap2430_musb_platdata),
> > +       .priv_auto_alloc_size = sizeof(struct musb_host_data),
> > +};
> > +
> > +#endif /* CONFIG_DM_USB */
> > --
> > 2.17.1
> >  




Best regards,

Lukasz Majewski

--

DENX Software Engineering GmbH,      Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 488 bytes
Desc: OpenPGP digital signature
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20180722/8eddd873/attachment.sig>

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

* [U-Boot] [RFC] usb: musb-new: omap2430: Enable DM_USB and OF support
  2018-07-22 20:31   ` Lukasz Majewski
@ 2018-07-31  9:57     ` Adam Ford
  2018-07-31 10:49       ` Adam Ford
  0 siblings, 1 reply; 5+ messages in thread
From: Adam Ford @ 2018-07-31  9:57 UTC (permalink / raw)
  To: u-boot

On Sun, Jul 22, 2018 at 3:31 PM Lukasz Majewski <lukma@denx.de> wrote:
>
> Hi Adam,
>
> > On Sun, Jul 22, 2018 at 11:45 AM Adam Ford <aford173@gmail.com> wrote:
> > >
> > > With upcoming changes that require CONFIG_BLK, this broke
> > > USB Mass Storage on the OMAP3 boards because if CONFIG_BLK is
> > > enabled, it assumes that DM_USB is enabled, but it wasn't yet
> > > available on omap3 and omap4 boards.
> > >
> > > This patch converts the OMAP2430 MUSB glue to support DM_USB and
> > > extracts the necessary information based on the device tree.
> > >
> > > It's based on the ti-musb driver, but there are enough significant
> > > differences in both the architecture and device tree entires between
> > > am33xx and OMAP3/OMAP4, that I think it makes sense to continue to
> > > keep the separate.
> > >
> >
> > I forgot to mention that, I based this patch on top of an existing
> > patch, that hasn't yet been reviewed which strips out a bunch of dead
> > code
> >  https://patchwork.ozlabs.org/patch/943813/
> >
> > I did it to make it easier for me to read.
> >
> > > This RFC has functional USB Host working, but it's hard coded to be
> > > host or peripheral based on the config file.  Unfortunately,
> > > USB Peripherals like fastboot, etc don't appear to be
> > > working at all.  At least on omap3_logic (DM3730/OMAP35xx).
> > > Any suggestions are appreciated in how to setup the MUSB in OTG mode
> > > and get it to start USB in either host or gadget mode.
>
> Has it been working from the outset? Is the old musb driver working
> correctly with gadget infrastructure?

Currently, the omap3_logic board selects the USB_MUSB_GADGET using the
new MUSB driver.  Host is disabled, but when I do usb start, the
device enumerates.

When I enact fastboot usb 0, my host PC shows

[307816.691237] usb 3-2: USB disconnect, device number 39
[307866.180431] usb 3-2: new high-speed USB device number 41 using xhci_hcd
[307866.328908] usb 3-2: New USB device found, idVendor=0451, idProduct=d022
[307866.328912] usb 3-2: New USB device strings: Mfr=1, Product=2,
SerialNumber=0
[307866.328914] usb 3-2: Product: USB download gadget
[307866.328916] usb 3-2: Manufacturer: TI


>
> > >
> > > Unless an OTG adapter is connected with a USB device, the only
> > > message I get when issing 'usb start' is
> > >
> > >         USB0:   Port not available.
>
> I assume that without your patches it works? It was not clear from your
> commit message.
>

In gadget mode, yet, see above.
> > >
> > > Signed-off-by: Adam Ford <aford173@gmail.com>
> > >
> > > diff --git a/drivers/usb/musb-new/omap2430.c
> > > b/drivers/usb/musb-new/omap2430.c index fd63c07789..8b56e1a42a
> > > 100644 --- a/drivers/usb/musb-new/omap2430.c
> > > +++ b/drivers/usb/musb-new/omap2430.c
> > > @@ -9,14 +9,18 @@
> > >   * This file is part of the Inventra Controller Driver for Linux.
> > >   */
> > >  #include <common.h>
> > > +#include <dm.h>
> > > +#include <dm/device-internal.h>
> > > +#include <dm/lists.h>
> > > +#include <linux/usb/otg.h>
> > >  #include <asm/omap_common.h>
> > >  #include <asm/omap_musb.h>
> > >  #include <twl4030.h>
> > >  #include <twl6030.h>
> > >  #include "linux-compat.h"
> > > -
> > >  #include "musb_core.h"
> > >  #include "omap2430.h"
> > > +#include "musb_uboot.h"
> > >
> > >  static inline void omap2430_low_level_exit(struct musb *musb)
> > >  {
> > > @@ -43,6 +47,7 @@ static int omap2430_musb_init(struct musb *musb)
> > >         u32 l;
> > >         int status = 0;
> > >         unsigned long int start;
> > > +
> > >         struct omap_musb_board_data *data =
> > >                 (struct omap_musb_board_data *)musb->controller;
> > >
> > > @@ -129,3 +134,144 @@ const struct musb_platform_ops omap2430_ops =
> > > { .enable         = omap2430_musb_enable,
> > >         .disable        = omap2430_musb_disable,
> > >  };
> > > +
> > > +#if defined(CONFIG_DM_USB)
> > > +
> > > +struct omap2430_musb_platdata {
> > > +       void *base;
> > > +       void *ctrl_mod_base;
> > > +       struct musb_hdrc_platform_data plat;
> > > +       struct musb_hdrc_config musb_config;
> > > +       struct omap_musb_board_data otg_board_data;
> > > +};
> > > +
> > > +static int omap2430_musb_ofdata_to_platdata(struct udevice *dev)
> > > +{
> > > +       struct omap2430_musb_platdata *platdata =
> > > dev_get_platdata(dev);
> > > +       const void *fdt = gd->fdt_blob;
> > > +       int node = dev_of_offset(dev);
> > > +
> > > +       platdata->base = (void *)dev_read_addr_ptr(dev);
> > > +
> > > +       platdata->musb_config.multipoint = fdtdec_get_int(fdt, node,
> > > +
> > > "multipoint",
> > > +                                                         -1);
> > > +       if (platdata->musb_config.multipoint < 0) {
> > > +               pr_err("MUSB multipoint DT entry missing\n");
> > > +               return -ENOENT;
> > > +       }
> > > +
> > > +       platdata->musb_config.dyn_fifo = 1;
> > > +       platdata->musb_config.num_eps = fdtdec_get_int(fdt, node,
> > > +                                                      "num-eps",
> > > -1);
> > > +       if (platdata->musb_config.num_eps < 0) {
> > > +               pr_err("MUSB num-eps DT entry missing\n");
> > > +               return -ENOENT;
> > > +       }
> > > +
> > > +       platdata->musb_config.ram_bits = fdtdec_get_int(fdt, node,
> > > +                                                       "ram-bits",
> > > -1);
> > > +       if (platdata->musb_config.ram_bits < 0) {
> > > +               pr_err("MUSB ram-bits DT entry missing\n");
> > > +               return -ENOENT;
> > > +       }
> > > +
> > > +       platdata->plat.power = fdtdec_get_int(fdt, node,
> > > +
> > > "power", -1);
> > > +       if (platdata->plat.power < 0) {
> > > +               pr_err("MUSB power DT entry missing\n");
> > > +               return -ENOENT;
> > > +       }
> > > +
> > > +       platdata->otg_board_data.interface_type =
> > > fdtdec_get_int(fdt, node,
> > > +
> > > "interface-type", -1);
> > > +       if (platdata->otg_board_data.interface_type < 0) {
> > > +               pr_err("MUSB interface-type DT entry missing\n");
> > > +               return -ENOENT;
> > > +       }
> > > +
> > > +#if 0 /* In a perfect world, mode would be set to OTG, mode 3 from
> > > DT */
> > > +       platdata->plat.mode = fdtdec_get_int(fdt, node,
> > > +
> > > "mode", -1);
> > > +       if (platdata->plat.mode < 0) {
> > > +               pr_err("MUSB mode DT entry missing\n");
> > > +               return -ENOENT;
> > > +       }
> > > +#else /* MUSB_OTG, it doesn't work */
> > > +#ifdef CONFIG_USB_MUSB_HOST /* Host seems to be the only option
> > > that works */
> > > +       platdata->plat.mode = MUSB_HOST;
> > > +#else /* For that matter, MUSB_PERIPHERAL doesn't either */
> > > +       platdata->plat.mode = MUSB_PERIPHERAL;
> > > +#endif
> > > +#endif
> > > +       platdata->otg_board_data.dev = dev;
> > > +       platdata->plat.config = &platdata->musb_config;
> > > +       platdata->plat.platform_ops = &omap2430_ops;
> > > +       platdata->plat.board_data = &platdata->otg_board_data;
> > > +       return 0;
> > > +}
> > > +
> > > +static int omap2430_musb_probe(struct udevice *dev)
> > > +{
> > > +#ifdef CONFIG_USB_MUSB_HOST
> > > +       struct musb_host_data *host = dev_get_priv(dev);
> > > +#endif
> > > +       struct omap2430_musb_platdata *platdata =
> > > dev_get_platdata(dev);
> > > +       struct usb_bus_priv *priv = dev_get_uclass_priv(dev);
> > > +       struct omap_musb_board_data *otg_board_data;
> > > +       int ret;
> > > +       void *base = dev_read_addr_ptr(dev);
> > > +
> > > +       priv->desc_before_addr = true;
> > > +
> > > +       otg_board_data = &platdata->otg_board_data;
> > > +
> > > +#ifdef CONFIG_USB_MUSB_HOST
> > > +       host->host = musb_init_controller(&platdata->plat,
> > > +                                         (struct device
> > > *)otg_board_data,
> > > +                                         platdata->base);
> > > +       if (!host->host) {
> > > +               return -EIO;
> > > +       }
> > > +
> > > +       ret = musb_lowlevel_init(host);
> > > +#else
> > > +       ret = musb_register(&platdata->plat,
> > > +                         (struct device *)otg_board_data,
> > > +                         platdata->base);
> > > +#endif
> > > +       return ret;
> > > +}
> > > +
> > > +static int omap2430_musb_remove(struct udevice *dev)
> > > +{
> > > +       struct musb_host_data *host = dev_get_priv(dev);
> > > +
> > > +       musb_stop(host->host);
> > > +
> > > +       return 0;
> > > +}
> > > +
> > > +static const struct udevice_id omap2430_musb_ids[] = {
> > > +       { .compatible = "ti,omap3-musb" },
> > > +       { .compatible = "ti,omap4-musb" },
> > > +       { }
> > > +};
> > > +
> > > +U_BOOT_DRIVER(omap2430_musb) = {
> > > +       .name   = "omap2430-musb",
> > > +#ifdef CONFIG_USB_MUSB_HOST
> > > +       .id             = UCLASS_USB,
> > > +#else
> > > +       .id             = UCLASS_USB_DEV_GENERIC,
> > > +#endif
> > > +       .of_match = omap2430_musb_ids,
> > > +       .ofdata_to_platdata = omap2430_musb_ofdata_to_platdata,
> > > +       .probe = omap2430_musb_probe,
> > > +       .remove = omap2430_musb_remove,
> > > +       .ops    = &musb_usb_ops,
> > > +       .platdata_auto_alloc_size = sizeof(struct
> > > omap2430_musb_platdata),
> > > +       .priv_auto_alloc_size = sizeof(struct musb_host_data),
> > > +};
> > > +
> > > +#endif /* CONFIG_DM_USB */
> > > --
> > > 2.17.1
> > >
>
>
>
>
> Best regards,
>
> Lukasz Majewski
>
> --
>
> DENX Software Engineering GmbH,      Managing Director: Wolfgang Denk
> HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
> Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de

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

* [U-Boot] [RFC] usb: musb-new: omap2430: Enable DM_USB and OF support
  2018-07-31  9:57     ` Adam Ford
@ 2018-07-31 10:49       ` Adam Ford
  0 siblings, 0 replies; 5+ messages in thread
From: Adam Ford @ 2018-07-31 10:49 UTC (permalink / raw)
  To: u-boot

On Tue, Jul 31, 2018 at 4:57 AM Adam Ford <aford173@gmail.com> wrote:
>
> On Sun, Jul 22, 2018 at 3:31 PM Lukasz Majewski <lukma@denx.de> wrote:
> >
> > Hi Adam,
> >
> > > On Sun, Jul 22, 2018 at 11:45 AM Adam Ford <aford173@gmail.com> wrote:
> > > >
> > > > With upcoming changes that require CONFIG_BLK, this broke
> > > > USB Mass Storage on the OMAP3 boards because if CONFIG_BLK is
> > > > enabled, it assumes that DM_USB is enabled, but it wasn't yet
> > > > available on omap3 and omap4 boards.
> > > >
> > > > This patch converts the OMAP2430 MUSB glue to support DM_USB and
> > > > extracts the necessary information based on the device tree.
> > > >
> > > > It's based on the ti-musb driver, but there are enough significant
> > > > differences in both the architecture and device tree entires between
> > > > am33xx and OMAP3/OMAP4, that I think it makes sense to continue to
> > > > keep the separate.
> > > >
> > >
> > > I forgot to mention that, I based this patch on top of an existing
> > > patch, that hasn't yet been reviewed which strips out a bunch of dead
> > > code
> > >  https://patchwork.ozlabs.org/patch/943813/
> > >
> > > I did it to make it easier for me to read.
> > >
> > > > This RFC has functional USB Host working, but it's hard coded to be
> > > > host or peripheral based on the config file.  Unfortunately,
> > > > USB Peripherals like fastboot, etc don't appear to be
> > > > working at all.  At least on omap3_logic (DM3730/OMAP35xx).
> > > > Any suggestions are appreciated in how to setup the MUSB in OTG mode
> > > > and get it to start USB in either host or gadget mode.

It appears as if USB gadget mode doesn't support DM yet per
doc/driver-model/usb-info.txt

I think I'll respin this a bit with some additional #ifdef's to check
for gadget and host mode with DM.

It would still be nice to get this working in DM_USB mode as much as
possible.  Hopefully the Gadget mode won't take long, but looking at
the date doc/driver-model/usb-info.txt, it may not happen soon.

> >
> > Has it been working from the outset? Is the old musb driver working
> > correctly with gadget infrastructure?
>
> Currently, the omap3_logic board selects the USB_MUSB_GADGET using the
> new MUSB driver.  Host is disabled, but when I do usb start, the
> device enumerates.
>
> When I enact fastboot usb 0, my host PC shows
>
> [307816.691237] usb 3-2: USB disconnect, device number 39
> [307866.180431] usb 3-2: new high-speed USB device number 41 using xhci_hcd
> [307866.328908] usb 3-2: New USB device found, idVendor=0451, idProduct=d022
> [307866.328912] usb 3-2: New USB device strings: Mfr=1, Product=2,
> SerialNumber=0
> [307866.328914] usb 3-2: Product: USB download gadget
> [307866.328916] usb 3-2: Manufacturer: TI
>
>
> >
> > > >
> > > > Unless an OTG adapter is connected with a USB device, the only
> > > > message I get when issing 'usb start' is
> > > >
> > > >         USB0:   Port not available.
> >
> > I assume that without your patches it works? It was not clear from your
> > commit message.
> >
>
> In gadget mode, yet, see above.
> > > >
> > > > Signed-off-by: Adam Ford <aford173@gmail.com>
> > > >
> > > > diff --git a/drivers/usb/musb-new/omap2430.c
> > > > b/drivers/usb/musb-new/omap2430.c index fd63c07789..8b56e1a42a
> > > > 100644 --- a/drivers/usb/musb-new/omap2430.c
> > > > +++ b/drivers/usb/musb-new/omap2430.c
> > > > @@ -9,14 +9,18 @@
> > > >   * This file is part of the Inventra Controller Driver for Linux.
> > > >   */
> > > >  #include <common.h>
> > > > +#include <dm.h>
> > > > +#include <dm/device-internal.h>
> > > > +#include <dm/lists.h>
> > > > +#include <linux/usb/otg.h>
> > > >  #include <asm/omap_common.h>
> > > >  #include <asm/omap_musb.h>
> > > >  #include <twl4030.h>
> > > >  #include <twl6030.h>
> > > >  #include "linux-compat.h"
> > > > -
> > > >  #include "musb_core.h"
> > > >  #include "omap2430.h"
> > > > +#include "musb_uboot.h"
> > > >
> > > >  static inline void omap2430_low_level_exit(struct musb *musb)
> > > >  {
> > > > @@ -43,6 +47,7 @@ static int omap2430_musb_init(struct musb *musb)
> > > >         u32 l;
> > > >         int status = 0;
> > > >         unsigned long int start;
> > > > +
> > > >         struct omap_musb_board_data *data =
> > > >                 (struct omap_musb_board_data *)musb->controller;
> > > >
> > > > @@ -129,3 +134,144 @@ const struct musb_platform_ops omap2430_ops =
> > > > { .enable         = omap2430_musb_enable,
> > > >         .disable        = omap2430_musb_disable,
> > > >  };
> > > > +
> > > > +#if defined(CONFIG_DM_USB)
> > > > +
> > > > +struct omap2430_musb_platdata {
> > > > +       void *base;
> > > > +       void *ctrl_mod_base;
> > > > +       struct musb_hdrc_platform_data plat;
> > > > +       struct musb_hdrc_config musb_config;
> > > > +       struct omap_musb_board_data otg_board_data;
> > > > +};
> > > > +
> > > > +static int omap2430_musb_ofdata_to_platdata(struct udevice *dev)
> > > > +{
> > > > +       struct omap2430_musb_platdata *platdata =
> > > > dev_get_platdata(dev);
> > > > +       const void *fdt = gd->fdt_blob;
> > > > +       int node = dev_of_offset(dev);
> > > > +
> > > > +       platdata->base = (void *)dev_read_addr_ptr(dev);
> > > > +
> > > > +       platdata->musb_config.multipoint = fdtdec_get_int(fdt, node,
> > > > +
> > > > "multipoint",
> > > > +                                                         -1);
> > > > +       if (platdata->musb_config.multipoint < 0) {
> > > > +               pr_err("MUSB multipoint DT entry missing\n");
> > > > +               return -ENOENT;
> > > > +       }
> > > > +
> > > > +       platdata->musb_config.dyn_fifo = 1;
> > > > +       platdata->musb_config.num_eps = fdtdec_get_int(fdt, node,
> > > > +                                                      "num-eps",
> > > > -1);
> > > > +       if (platdata->musb_config.num_eps < 0) {
> > > > +               pr_err("MUSB num-eps DT entry missing\n");
> > > > +               return -ENOENT;
> > > > +       }
> > > > +
> > > > +       platdata->musb_config.ram_bits = fdtdec_get_int(fdt, node,
> > > > +                                                       "ram-bits",
> > > > -1);
> > > > +       if (platdata->musb_config.ram_bits < 0) {
> > > > +               pr_err("MUSB ram-bits DT entry missing\n");
> > > > +               return -ENOENT;
> > > > +       }
> > > > +
> > > > +       platdata->plat.power = fdtdec_get_int(fdt, node,
> > > > +
> > > > "power", -1);
> > > > +       if (platdata->plat.power < 0) {
> > > > +               pr_err("MUSB power DT entry missing\n");
> > > > +               return -ENOENT;
> > > > +       }
> > > > +
> > > > +       platdata->otg_board_data.interface_type =
> > > > fdtdec_get_int(fdt, node,
> > > > +
> > > > "interface-type", -1);
> > > > +       if (platdata->otg_board_data.interface_type < 0) {
> > > > +               pr_err("MUSB interface-type DT entry missing\n");
> > > > +               return -ENOENT;
> > > > +       }
> > > > +
> > > > +#if 0 /* In a perfect world, mode would be set to OTG, mode 3 from
> > > > DT */
> > > > +       platdata->plat.mode = fdtdec_get_int(fdt, node,
> > > > +
> > > > "mode", -1);
> > > > +       if (platdata->plat.mode < 0) {
> > > > +               pr_err("MUSB mode DT entry missing\n");
> > > > +               return -ENOENT;
> > > > +       }
> > > > +#else /* MUSB_OTG, it doesn't work */
> > > > +#ifdef CONFIG_USB_MUSB_HOST /* Host seems to be the only option
> > > > that works */
> > > > +       platdata->plat.mode = MUSB_HOST;
> > > > +#else /* For that matter, MUSB_PERIPHERAL doesn't either */
> > > > +       platdata->plat.mode = MUSB_PERIPHERAL;
> > > > +#endif
> > > > +#endif
> > > > +       platdata->otg_board_data.dev = dev;
> > > > +       platdata->plat.config = &platdata->musb_config;
> > > > +       platdata->plat.platform_ops = &omap2430_ops;
> > > > +       platdata->plat.board_data = &platdata->otg_board_data;
> > > > +       return 0;
> > > > +}
> > > > +
> > > > +static int omap2430_musb_probe(struct udevice *dev)
> > > > +{
> > > > +#ifdef CONFIG_USB_MUSB_HOST
> > > > +       struct musb_host_data *host = dev_get_priv(dev);
> > > > +#endif
> > > > +       struct omap2430_musb_platdata *platdata =
> > > > dev_get_platdata(dev);
> > > > +       struct usb_bus_priv *priv = dev_get_uclass_priv(dev);
> > > > +       struct omap_musb_board_data *otg_board_data;
> > > > +       int ret;
> > > > +       void *base = dev_read_addr_ptr(dev);
> > > > +
> > > > +       priv->desc_before_addr = true;
> > > > +
> > > > +       otg_board_data = &platdata->otg_board_data;
> > > > +
> > > > +#ifdef CONFIG_USB_MUSB_HOST
> > > > +       host->host = musb_init_controller(&platdata->plat,
> > > > +                                         (struct device
> > > > *)otg_board_data,
> > > > +                                         platdata->base);
> > > > +       if (!host->host) {
> > > > +               return -EIO;
> > > > +       }
> > > > +
> > > > +       ret = musb_lowlevel_init(host);
> > > > +#else
> > > > +       ret = musb_register(&platdata->plat,
> > > > +                         (struct device *)otg_board_data,
> > > > +                         platdata->base);
> > > > +#endif
> > > > +       return ret;
> > > > +}
> > > > +
> > > > +static int omap2430_musb_remove(struct udevice *dev)
> > > > +{
> > > > +       struct musb_host_data *host = dev_get_priv(dev);
> > > > +
> > > > +       musb_stop(host->host);
> > > > +
> > > > +       return 0;
> > > > +}
> > > > +
> > > > +static const struct udevice_id omap2430_musb_ids[] = {
> > > > +       { .compatible = "ti,omap3-musb" },
> > > > +       { .compatible = "ti,omap4-musb" },
> > > > +       { }
> > > > +};
> > > > +
> > > > +U_BOOT_DRIVER(omap2430_musb) = {
> > > > +       .name   = "omap2430-musb",
> > > > +#ifdef CONFIG_USB_MUSB_HOST
> > > > +       .id             = UCLASS_USB,
> > > > +#else
> > > > +       .id             = UCLASS_USB_DEV_GENERIC,
> > > > +#endif
> > > > +       .of_match = omap2430_musb_ids,
> > > > +       .ofdata_to_platdata = omap2430_musb_ofdata_to_platdata,
> > > > +       .probe = omap2430_musb_probe,
> > > > +       .remove = omap2430_musb_remove,
> > > > +       .ops    = &musb_usb_ops,
> > > > +       .platdata_auto_alloc_size = sizeof(struct
> > > > omap2430_musb_platdata),
> > > > +       .priv_auto_alloc_size = sizeof(struct musb_host_data),
> > > > +};
> > > > +
> > > > +#endif /* CONFIG_DM_USB */
> > > > --
> > > > 2.17.1
> > > >
> >
> >
> >
> >
> > Best regards,
> >
> > Lukasz Majewski
> >
> > --
> >
> > DENX Software Engineering GmbH,      Managing Director: Wolfgang Denk
> > HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
> > Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de

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

end of thread, other threads:[~2018-07-31 10:49 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-07-22 16:45 [U-Boot] [RFC] usb: musb-new: omap2430: Enable DM_USB and OF support Adam Ford
2018-07-22 16:52 ` Adam Ford
2018-07-22 20:31   ` Lukasz Majewski
2018-07-31  9:57     ` Adam Ford
2018-07-31 10:49       ` Adam Ford

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.