Hi Kishon, > Removed probe and remove that are specific to linux and replaced it > with uboot init and uboot exit. These functions will be invoked from > boardfile. > > This will change once we have dwc3-omap driver adapted to use the > uboot driver model. > > Signed-off-by: Kishon Vijay Abraham I <kis...@ti.com> > --- > drivers/usb/dwc3/dwc3-omap.c | 128 > +++++++++++++----------------------------- > include/dwc3-omap-uboot.h | 3 + 2 files changed, 42 > insertions(+), 89 deletions(-) > > diff --git a/drivers/usb/dwc3/dwc3-omap.c > b/drivers/usb/dwc3/dwc3-omap.c index 31a2aa3..30d7210 100644 > --- a/drivers/usb/dwc3/dwc3-omap.c > +++ b/drivers/usb/dwc3/dwc3-omap.c > @@ -17,6 +17,7 @@ > #include <common.h> > #include <malloc.h> > #include <asm/io.h> > +#include <dwc3-omap-uboot.h> > #include <linux/usb/dwc3-omap.h> > #include <linux/ioport.h> > > @@ -120,6 +121,8 @@ struct dwc3_omap { > u32 dma_status:1; > }; > > +struct dwc3_omap *omap; > + > static inline u32 dwc3_omap_readl(void __iomem *base, u32 offset) > { > return readl(base + offset); > @@ -278,15 +281,6 @@ static irqreturn_t dwc3_omap_interrupt(int irq, > void *_omap) return IRQ_HANDLED; > } > > -static int dwc3_omap_remove_core(struct device *dev, void *c) > -{ > - struct platform_device *pdev = to_platform_device(dev); > - > - of_device_unregister(pdev); > - > - return 0; > -} > - > static void dwc3_omap_enable_irqs(struct dwc3_omap *omap) > { > u32 reg; > @@ -315,12 +309,8 @@ static void dwc3_omap_disable_irqs(struct > dwc3_omap *omap) dwc3_omap_write_irq0_set(omap, 0x00); > } > > -static u64 dwc3_omap_dma_mask = DMA_BIT_MASK(32); > - > static void dwc3_omap_map_offset(struct dwc3_omap *omap) > { > - struct device_node *node = omap->dev->of_node; > - > /* > * Differentiate between OMAP5 and AM437x. > * > @@ -329,25 +319,21 @@ static void dwc3_omap_map_offset(struct > dwc3_omap *omap) * > * Using dt compatible to differentiate AM437x. > */ > - if (of_device_is_compatible(node, "ti,am437x-dwc3")) { > - omap->irq_eoi_offset = USBOTGSS_EOI_OFFSET; > - omap->irq0_offset = USBOTGSS_IRQ0_OFFSET; > - omap->irqmisc_offset = USBOTGSS_IRQMISC_OFFSET; > - omap->utmi_otg_offset = USBOTGSS_UTMI_OTG_OFFSET; > - omap->debug_offset = USBOTGSS_DEBUG_OFFSET; > - } > +#ifdef CONFIG_AM43XX > + omap->irq_eoi_offset = USBOTGSS_EOI_OFFSET; > + omap->irq0_offset = USBOTGSS_IRQ0_OFFSET; > + omap->irqmisc_offset = USBOTGSS_IRQMISC_OFFSET; > + omap->utmi_otg_offset = USBOTGSS_UTMI_OTG_OFFSET; > + omap->debug_offset = USBOTGSS_DEBUG_OFFSET; > +#endif > } > > -static void dwc3_omap_set_utmi_mode(struct dwc3_omap *omap) > +static void dwc3_omap_set_utmi_mode(struct dwc3_omap *omap, int > utmi_mode) { > u32 reg; > - struct device_node *node = omap->dev->of_node; > - int utmi_mode = 0; > > reg = dwc3_omap_read_utmi_status(omap); > > - of_property_read_u32(node, "utmi-mode", &utmi_mode); > - > switch (utmi_mode) { > case DWC3_OMAP_UTMI_MODE_SW: > reg |= USBOTGSS_UTMI_OTG_STATUS_SW_MODE; > @@ -362,95 +348,59 @@ static void dwc3_omap_set_utmi_mode(struct > dwc3_omap *omap) dwc3_omap_write_utmi_status(omap, reg); > } > > -static int dwc3_omap_probe(struct platform_device *pdev) > +/** > + * dwc3_omap_uboot_init - dwc3 omap uboot initialization code > + * @dev: struct dwc3_omap_device containing initialization data > + * > + * Entry point for dwc3 omap driver (equivalent to dwc3_omap_probe > in linux > + * kernel driver). Pointer to dwc3_omap_device should be passed > containing > + * base address and other initialization data. Returns '0' on > success and > + * a negative value on failure. > + * > + * Generally called from board_usb_init() implemented in board file. > + */ > +int dwc3_omap_uboot_init(struct dwc3_omap_device *omap_dev) > { > - struct device_node *node = pdev->dev.of_node; > - > - struct dwc3_omap *omap; > - struct resource *res; > - struct device *dev = &pdev->dev; > - > - int ret; > u32 reg; > - > - void __iomem *base; > - > - if (!node) { > - dev_err(dev, "device node not found\n"); > - return -EINVAL; > - } > + struct device *dev; > > omap = devm_kzalloc(dev, sizeof(*omap), GFP_KERNEL); > if (!omap) > return -ENOMEM; > > - platform_set_drvdata(pdev, omap); > - > - res = platform_get_resource(pdev, IORESOURCE_MEM, 0); > - base = devm_ioremap_resource(dev, res); > - if (IS_ERR(base)) > - return PTR_ERR(base); > - > - omap->dev = dev; > - omap->base = base; > - dev->dma_mask = &dwc3_omap_dma_mask; > + omap->base = omap_dev->base; > > dwc3_omap_map_offset(omap); > - dwc3_omap_set_utmi_mode(omap); > + dwc3_omap_set_utmi_mode(omap, omap_dev->utmi_mode); > > /* check the DMA Status */ > reg = dwc3_omap_readl(omap->base, USBOTGSS_SYSCONFIG); > omap->dma_status = !!(reg & USBOTGSS_SYSCONFIG_DMADISABLE); > > - dwc3_omap_enable_irqs(omap); > + dwc3_omap_set_mailbox(omap, omap_dev->vbus_id_status); > > - ret = of_platform_populate(node, NULL, NULL, dev); > - if (ret) { > - dev_err(&pdev->dev, "failed to create dwc3 core\n"); > - goto err1; > - } > + dwc3_omap_enable_irqs(omap); > > return 0; > - > -err1: > - dwc3_omap_disable_irqs(omap); > - > -err0: > - return ret; > } > > -static int dwc3_omap_remove(struct platform_device *pdev) > +/** > + * dwc3_omap_uboot_exit - dwc3 omap uboot cleanup code > + * @index: index of this controller > + * > + * Performs cleanup of memory allocated in dwc3_omap_uboot_init > + * (equivalent to dwc3_omap_remove in linux). > + * > + * Generally called from board file. > + */ > +void dwc3_omap_uboot_exit(void) > { > - struct dwc3_omap *omap = platform_get_drvdata(pdev); > - > dwc3_omap_disable_irqs(omap); > - device_for_each_child(&pdev->dev, NULL, > dwc3_omap_remove_core); > + kfree(omap); > > return 0; > } > > -static const struct of_device_id of_dwc3_match[] = { > - { > - .compatible = "ti,dwc3" > - }, > - { > - .compatible = "ti,am437x-dwc3" > - }, > - { }, > -}; > -MODULE_DEVICE_TABLE(of, of_dwc3_match); > - > -static struct platform_driver dwc3_omap_driver = { > - .probe = dwc3_omap_probe, > - .remove = dwc3_omap_remove, > - .driver = { > - .name = "omap-dwc3", > - .of_match_table = of_dwc3_match, > - }, > -}; > - > -module_platform_driver(dwc3_omap_driver); > - > MODULE_ALIAS("platform:omap-dwc3"); > MODULE_AUTHOR("Felipe Balbi <ba...@ti.com>"); > MODULE_LICENSE("GPL v2"); > diff --git a/include/dwc3-omap-uboot.h b/include/dwc3-omap-uboot.h > index b313b64..99f8f38 100644 > --- a/include/dwc3-omap-uboot.h > +++ b/include/dwc3-omap-uboot.h > @@ -24,4 +24,7 @@ struct dwc3_omap_device { > enum dwc3_omap_utmi_mode utmi_mode; > enum omap_dwc3_vbus_id_status vbus_id_status; > }; > + > +int dwc3_omap_uboot_init(struct dwc3_omap_device *dev); > +void dwc3_omap_uboot_exit(void); > #endif /* __DWC3_OMAP_UBOOT_H_ */
Reviewed-by: Lukasz Majewski <l.majew...@samsung.com> -- Best regards, Lukasz Majewski Samsung R&D Institute Poland (SRPOL) | Linux Platform Group _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot