Hi Kishon,

> *) Changed the include header files to that used in u-boot.
> *) Removed phy_* APIs
> *) Removed jiffies and used a simple while loop
> *) Used dma_alloc_coherent and dma_free_coherent APIs of u-boot
> *) Fixed other misc warnings
> 
> Signed-off-by: Kishon Vijay Abraham I <kis...@ti.com>
> ---
>  drivers/usb/dwc3/core.c         |  216
> ++++++---------------------------------
> drivers/usb/dwc3/core.h         |   10 --
> drivers/usb/dwc3/linux-compat.h |   10 ++ 3 files changed, 40
> insertions(+), 196 deletions(-)
> 
> diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c
> index ebfb6ca..78322b7 100644
> --- a/drivers/usb/dwc3/core.c
> +++ b/drivers/usb/dwc3/core.c
> @@ -14,32 +14,19 @@
>   * SPDX-License-Identifier:     GPL-2.0
>   */
>  
> -#include <linux/version.h>
> -#include <linux/module.h>
> -#include <linux/kernel.h>
> -#include <linux/slab.h>
> -#include <linux/spinlock.h>
> -#include <linux/platform_device.h>
> -#include <linux/interrupt.h>
> +#include <common.h>
> +#include <malloc.h>
> +#include <asm/dma-mapping.h>
>  #include <linux/ioport.h>
> -#include <linux/io.h>
> -#include <linux/list.h>
> -#include <linux/delay.h>
> -#include <linux/dma-mapping.h>
> -#include <linux/of.h>
> -#include <linux/acpi.h>
>  
>  #include <linux/usb/ch9.h>
>  #include <linux/usb/gadget.h>
> -#include <linux/usb/of.h>
> -#include <linux/usb/otg.h>
>  
> -#include "platform_data.h"
>  #include "core.h"
>  #include "gadget.h"
>  #include "io.h"
>  
> -#include "debug.h"
> +#include "linux-compat.h"
>  
>  /*
> --------------------------------------------------------------------------
> */ @@ -60,7 +47,6 @@ void dwc3_set_mode(struct dwc3 *dwc, u32 mode)
>  static int dwc3_core_soft_reset(struct dwc3 *dwc)
>  {
>       u32             reg;
> -     int             ret;
>  
>       /* Before Resetting PHY, put Core in Reset */
>       reg = dwc3_readl(dwc->regs, DWC3_GCTL);
> @@ -77,17 +63,6 @@ static int dwc3_core_soft_reset(struct dwc3 *dwc)
>       reg |= DWC3_GUSB2PHYCFG_PHYSOFTRST;
>       dwc3_writel(dwc->regs, DWC3_GUSB2PHYCFG(0), reg);
>  
> -     usb_phy_init(dwc->usb2_phy);
> -     usb_phy_init(dwc->usb3_phy);
> -     ret = phy_init(dwc->usb2_generic_phy);
> -     if (ret < 0)
> -             return ret;
> -
> -     ret = phy_init(dwc->usb3_generic_phy);
> -     if (ret < 0) {
> -             phy_exit(dwc->usb2_generic_phy);
> -             return ret;
> -     }
>       mdelay(100);
>  
>       /* Clear USB3 PHY reset */
> @@ -118,7 +93,7 @@ static int dwc3_core_soft_reset(struct dwc3 *dwc)
>  static void dwc3_free_one_event_buffer(struct dwc3 *dwc,
>               struct dwc3_event_buffer *evt)
>  {
> -     dma_free_coherent(dwc->dev, evt->length, evt->buf, evt->dma);
> +     dma_free_coherent(evt->buf);
>  }
>  
>  /**
> @@ -140,8 +115,8 @@ static struct dwc3_event_buffer
> *dwc3_alloc_one_event_buffer(struct dwc3 *dwc, 
>       evt->dwc        = dwc;
>       evt->length     = length;
> -     evt->buf        = dma_alloc_coherent(dwc->dev, length,
> -                     &evt->dma, GFP_KERNEL);
> +     evt->buf        = dma_alloc_coherent(length,
> +                                          (unsigned long
> *)&evt->dma); if (!evt->buf)
>               return ERR_PTR(-ENOMEM);
>  
> @@ -276,13 +251,9 @@ static int dwc3_setup_scratch_buffers(struct
> dwc3 *dwc) if (!dwc->nr_scratch)
>               return 0;
>  
> -      /* should never fall here */
> -     if (!WARN_ON(dwc->scratchbuf))
> -             return 0;
> -
> -     scratch_addr = dma_map_single(dwc->dev, dwc->scratchbuf,
> -                     dwc->nr_scratch * DWC3_SCRATCHBUF_SIZE,
> -                     DMA_BIDIRECTIONAL);
> +     scratch_addr = dma_map_single(dwc->scratchbuf,
> +                                   dwc->nr_scratch *
> DWC3_SCRATCHBUF_SIZE,
> +                                   DMA_BIDIRECTIONAL);
>       if (dma_mapping_error(dwc->dev, scratch_addr)) {
>               dev_err(dwc->dev, "failed to map scratch buffer\n");
>               ret = -EFAULT;
> @@ -308,8 +279,8 @@ static int dwc3_setup_scratch_buffers(struct dwc3
> *dwc) return 0;
>  
>  err1:
> -     dma_unmap_single(dwc->dev, dwc->scratch_addr,
> dwc->nr_scratch *
> -                     DWC3_SCRATCHBUF_SIZE, DMA_BIDIRECTIONAL);
> +     dma_unmap_single((void *)dwc->scratch_addr, dwc->nr_scratch *
> +                      DWC3_SCRATCHBUF_SIZE, DMA_BIDIRECTIONAL);
>  
>  err0:
>       return ret;
> @@ -323,12 +294,8 @@ static void dwc3_free_scratch_buffers(struct
> dwc3 *dwc) if (!dwc->nr_scratch)
>               return;
>  
> -      /* should never fall here */
> -     if (!WARN_ON(dwc->scratchbuf))
> -             return;
> -
> -     dma_unmap_single(dwc->dev, dwc->scratch_addr,
> dwc->nr_scratch *
> -                     DWC3_SCRATCHBUF_SIZE, DMA_BIDIRECTIONAL);
> +     dma_unmap_single((void *)dwc->scratch_addr, dwc->nr_scratch *
> +                      DWC3_SCRATCHBUF_SIZE, DMA_BIDIRECTIONAL);
>       kfree(dwc->scratchbuf);
>  }
>  
> @@ -446,12 +413,6 @@ static int dwc3_core_init(struct dwc3 *dwc)
>       }
>       dwc->revision = reg;
>  
> -     /*
> -      * Write Linux Version Code to our GUID register so it's
> easy to figure
> -      * out which kernel version a bug was found.
> -      */
> -     dwc3_writel(dwc->regs, DWC3_GUID, LINUX_VERSION_CODE);
> -
>       /* Handle USB2.0-only core configuration */
>       if (DWC3_GHWPARAMS3_SSPHY_IFC(dwc->hwparams.hwparams3) ==
>                       DWC3_GHWPARAMS3_SSPHY_IFC_DIS) {
> @@ -460,21 +421,19 @@ static int dwc3_core_init(struct dwc3 *dwc)
>       }
>  
>       /* issue device SoftReset too */
> -     timeout = jiffies + msecs_to_jiffies(500);
> +     timeout = 5000;
>       dwc3_writel(dwc->regs, DWC3_DCTL, DWC3_DCTL_CSFTRST);
> -     do {
> +     while (timeout--) {
>               reg = dwc3_readl(dwc->regs, DWC3_DCTL);
>               if (!(reg & DWC3_DCTL_CSFTRST))
>                       break;
> +     };
>  
> -             if (time_after(jiffies, timeout)) {
> -                     dev_err(dwc->dev, "Reset Timed Out\n");
> -                     ret = -ETIMEDOUT;
> -                     goto err0;
> -             }
> -
> -             cpu_relax();
> -     } while (true);
> +     if (!timeout) {
> +             dev_err(dwc->dev, "Reset Timed Out\n");
> +             ret = -ETIMEDOUT;
> +             goto err0;
> +     }
>  
>       ret = dwc3_core_soft_reset(dwc);
>       if (ret)
> @@ -525,8 +484,9 @@ static int dwc3_core_init(struct dwc3 *dwc)
>               dwc->is_fpga = true;
>       }
>  
> -     WARN_ONCE(dwc->disable_scramble_quirk && !dwc->is_fpga,
> -                     "disable_scramble cannot be used on non-FPGA
> builds\n");
> +     if(dwc->disable_scramble_quirk && !dwc->is_fpga)
> +             WARN(true,
> +                  "disable_scramble cannot be used on non-FPGA
> builds\n"); 
>       if (dwc->disable_scramble_quirk && dwc->is_fpga)
>               reg |= DWC3_GCTL_DISSCRAMBLE;
> @@ -553,22 +513,16 @@ static int dwc3_core_init(struct dwc3 *dwc)
>  
>       ret = dwc3_alloc_scratch_buffers(dwc);
>       if (ret)
> -             goto err1;
> +             goto err0;
>  
>       ret = dwc3_setup_scratch_buffers(dwc);
>       if (ret)
> -             goto err2;
> +             goto err1;
>  
>       return 0;
>  
> -err2:
> -     dwc3_free_scratch_buffers(dwc);
> -
>  err1:
> -     usb_phy_shutdown(dwc->usb2_phy);
> -     usb_phy_shutdown(dwc->usb3_phy);
> -     phy_exit(dwc->usb2_generic_phy);
> -     phy_exit(dwc->usb3_generic_phy);
> +     dwc3_free_scratch_buffers(dwc);
>  
>  err0:
>       return ret;
> @@ -577,82 +531,10 @@ err0:
>  static void dwc3_core_exit(struct dwc3 *dwc)
>  {
>       dwc3_free_scratch_buffers(dwc);
> -     usb_phy_shutdown(dwc->usb2_phy);
> -     usb_phy_shutdown(dwc->usb3_phy);
> -     phy_exit(dwc->usb2_generic_phy);
> -     phy_exit(dwc->usb3_generic_phy);
> -}
> -
> -static int dwc3_core_get_phy(struct dwc3 *dwc)
> -{
> -     struct device           *dev = dwc->dev;
> -     struct device_node      *node = dev->of_node;
> -     int ret;
> -
> -     if (node) {
> -             dwc->usb2_phy = devm_usb_get_phy_by_phandle(dev,
> "usb-phy", 0);
> -             dwc->usb3_phy = devm_usb_get_phy_by_phandle(dev,
> "usb-phy", 1);
> -     } else {
> -             dwc->usb2_phy = devm_usb_get_phy(dev,
> USB_PHY_TYPE_USB2);
> -             dwc->usb3_phy = devm_usb_get_phy(dev,
> USB_PHY_TYPE_USB3);
> -     }
> -
> -     if (IS_ERR(dwc->usb2_phy)) {
> -             ret = PTR_ERR(dwc->usb2_phy);
> -             if (ret == -ENXIO || ret == -ENODEV) {
> -                     dwc->usb2_phy = NULL;
> -             } else if (ret == -EPROBE_DEFER) {
> -                     return ret;
> -             } else {
> -                     dev_err(dev, "no usb2 phy configured\n");
> -                     return ret;
> -             }
> -     }
> -
> -     if (IS_ERR(dwc->usb3_phy)) {
> -             ret = PTR_ERR(dwc->usb3_phy);
> -             if (ret == -ENXIO || ret == -ENODEV) {
> -                     dwc->usb3_phy = NULL;
> -             } else if (ret == -EPROBE_DEFER) {
> -                     return ret;
> -             } else {
> -                     dev_err(dev, "no usb3 phy configured\n");
> -                     return ret;
> -             }
> -     }
> -
> -     dwc->usb2_generic_phy = devm_phy_get(dev, "usb2-phy");
> -     if (IS_ERR(dwc->usb2_generic_phy)) {
> -             ret = PTR_ERR(dwc->usb2_generic_phy);
> -             if (ret == -ENOSYS || ret == -ENODEV) {
> -                     dwc->usb2_generic_phy = NULL;
> -             } else if (ret == -EPROBE_DEFER) {
> -                     return ret;
> -             } else {
> -                     dev_err(dev, "no usb2 phy configured\n");
> -                     return ret;
> -             }
> -     }
> -
> -     dwc->usb3_generic_phy = devm_phy_get(dev, "usb3-phy");
> -     if (IS_ERR(dwc->usb3_generic_phy)) {
> -             ret = PTR_ERR(dwc->usb3_generic_phy);
> -             if (ret == -ENOSYS || ret == -ENODEV) {
> -                     dwc->usb3_generic_phy = NULL;
> -             } else if (ret == -EPROBE_DEFER) {
> -                     return ret;
> -             } else {
> -                     dev_err(dev, "no usb3 phy configured\n");
> -                     return ret;
> -             }
> -     }
> -
> -     return 0;
>  }
>  
>  static int dwc3_core_init_mode(struct dwc3 *dwc)
>  {
> -     struct device *dev = dwc->dev;
>       int ret;
>  
>       switch (dwc->dr_mode) {
> @@ -870,10 +752,6 @@ static int dwc3_probe(struct platform_device
> *pdev) dwc->hird_threshold = hird_threshold
>               | (dwc->is_utmi_l1_suspend << 4);
>  
> -     ret = dwc3_core_get_phy(dwc);
> -     if (ret)
> -             return ret;
> -
>       spin_lock_init(&dwc->lock);
>       platform_set_drvdata(pdev, dwc);
>  
> @@ -888,8 +766,7 @@ static int dwc3_probe(struct platform_device
> *pdev) ret = dwc3_alloc_event_buffers(dwc, DWC3_EVENT_BUFFERS_SIZE);
>       if (ret) {
>               dev_err(dwc->dev, "failed to allocate event
> buffers\n");
> -             ret = -ENOMEM;
> -             goto err0;
> +             return -ENOMEM;
>       }
>  
>       if (IS_ENABLED(CONFIG_USB_DWC3_HOST))
> @@ -906,49 +783,22 @@ static int dwc3_probe(struct platform_device
> *pdev) goto err0;
>       }
>  
> -     usb_phy_set_suspend(dwc->usb2_phy, 0);
> -     usb_phy_set_suspend(dwc->usb3_phy, 0);
> -     ret = phy_power_on(dwc->usb2_generic_phy);
> -     if (ret < 0)
> -             goto err1;
> -
> -     ret = phy_power_on(dwc->usb3_generic_phy);
> -     if (ret < 0)
> -             goto err_usb2phy_power;
> -
>       ret = dwc3_event_buffers_setup(dwc);
>       if (ret) {
>               dev_err(dwc->dev, "failed to setup event buffers\n");
> -             goto err_usb3phy_power;
> +             goto err1;
>       }
>  
>       ret = dwc3_core_init_mode(dwc);
>       if (ret)
>               goto err2;
>  
> -     ret = dwc3_debugfs_init(dwc);
> -     if (ret) {
> -             dev_err(dev, "failed to initialize debugfs\n");
> -             goto err3;
> -     }
> -
>       return 0;
>  
> -err3:
> -     dwc3_core_exit_mode(dwc);
> -
>  err2:
>       dwc3_event_buffers_cleanup(dwc);
>  
> -err_usb3phy_power:
> -     phy_power_off(dwc->usb3_generic_phy);
> -
> -err_usb2phy_power:
> -     phy_power_off(dwc->usb2_generic_phy);
> -
>  err1:
> -     usb_phy_set_suspend(dwc->usb2_phy, 1);
> -     usb_phy_set_suspend(dwc->usb3_phy, 1);
>       dwc3_core_exit(dwc);
>  
>  err0:
> @@ -961,16 +811,10 @@ static int dwc3_remove(struct platform_device
> *pdev) {
>       struct dwc3     *dwc = platform_get_drvdata(pdev);
>  
> -     dwc3_debugfs_exit(dwc);
>       dwc3_core_exit_mode(dwc);
>       dwc3_event_buffers_cleanup(dwc);
>       dwc3_free_event_buffers(dwc);
>  
> -     usb_phy_set_suspend(dwc->usb2_phy, 1);
> -     usb_phy_set_suspend(dwc->usb3_phy, 1);
> -     phy_power_off(dwc->usb2_generic_phy);
> -     phy_power_off(dwc->usb3_generic_phy);
> -
>       dwc3_core_exit(dwc);
>  
>       return 0;
> diff --git a/drivers/usb/dwc3/core.h b/drivers/usb/dwc3/core.h
> index 0ffcb7d..0d507c1 100644
> --- a/drivers/usb/dwc3/core.h
> +++ b/drivers/usb/dwc3/core.h
> @@ -641,10 +641,6 @@ struct dwc3_scratchpad_array {
>   * @maximum_speed: maximum speed requested (mainly for testing
> purposes)
>   * @revision: revision register contents
>   * @dr_mode: requested mode of operation
> - * @usb2_phy: pointer to USB2 PHY
> - * @usb3_phy: pointer to USB3 PHY
> - * @usb2_generic_phy: pointer to USB2 PHY
> - * @usb3_generic_phy: pointer to USB3 PHY
>   * @dcfg: saved contents of DCFG register
>   * @gctl: saved contents of GCTL register
>   * @isoch_delay: wValue from Set Isochronous Delay request;
> @@ -726,12 +722,6 @@ struct dwc3 {
>       struct usb_gadget       gadget;
>       struct usb_gadget_driver *gadget_driver;
>  
> -     struct usb_phy          *usb2_phy;
> -     struct usb_phy          *usb3_phy;
> -
> -     struct phy              *usb2_generic_phy;
> -     struct phy              *usb3_generic_phy;
> -
>       void __iomem            *regs;
>       size_t                  regs_size;
>  
> diff --git a/drivers/usb/dwc3/linux-compat.h
> b/drivers/usb/dwc3/linux-compat.h index cbfb946..b36f68f 100644
> --- a/drivers/usb/dwc3/linux-compat.h
> +++ b/drivers/usb/dwc3/linux-compat.h
> @@ -25,4 +25,14 @@ static inline size_t strlcat(char *dest, const
> char *src, size_t n) return strlen(dest) + strlen(src);
>  }
>  
> +static inline void *devm_kzalloc(struct device *dev, unsigned int
> size,
> +                              unsigned int flags)
> +{
> +     return kzalloc(size, flags);
> +}
> +
> +static inline void *kmalloc_array(size_t n, size_t size, gfp_t flags)
> +{
> +     return kzalloc(n * size, flags);
> +}
>  #endif

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