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