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

Reply via email to