On Thursday 30 October 2014 02:43 AM, Alan Stern wrote:
On Wed, 29 Oct 2014, Varka Bhadram wrote:
This series removes the duplication of sanity check for
platform_get_resource() return resource. It will be checked
with devm_ioremap_resource()
This series based on usb/master.
Varka Bhadram (32):
host: ehci-atmel: remove duplicate check on resource
host: ehci-exynos: remove duplicate check on resource
host: ehci-fsl: remove duplicate check on resource
dwc3: core: remove duplicate check on resource
dwc3: dwc3-keystone: remove duplicate check on resource
renesas_usbhs: common: remove duplicate check on resource
phy: phy-rcar-usb: remove duplicate check on resource
musb: musb_dsps: remove duplicate check on resource
musb: musb_core: remove duplicate check on resource
host: xhci-plat: remove duplicate check on resource
host: uhci-platform: remove duplicate check on resource
host: ohci-st: remove duplicate check on resource
host: ohci-spear: remove duplicate check on resource
host: ehci-sh: remove duplicate check on resource
host: ohci-pxa27x: remove duplicate check on resource
host: ohci-platform: remove duplicate check on resource
host: ohci-octeon: remove duplicate check on resource
host: ohci-jz4740: remove duplicate check on resource
host: ohci-exynos: remove duplicate check on resource
host: ohci-da8xx: remove duplicate check on resource
host: ohci-at91: remove duplicate check on resource
host: ehci-w90x900: remove duplicate check on resource
host: ehci-tegra: remove duplicate check on resource
host: ehci-st: remove duplicate check on resource
host: ehci-spear: remove duplicate check on resource
host: ehci-sead3: remove duplicate check on resource
host: ehci-platform: remove duplicate check on resource
host: ehci-orion: remove duplicate check on resource
host: ehci-octeon: remove duplicate check on resource
host: ehci-mxc: remove duplicate check on resource
host: ehci-mv: remove duplicate check on resource
host: ehci-msm: remove duplicate check on resource
For all the ehci, ohci, and uhci changes:
Acked-by: Alan Stern <stern@xxxxxxxxxxxxxxxxxxx>
Thanx for your ACK.
I didn't look carefully at the others, but the dwc3-core patch (4/32)
definitely seemed wrong.
I don't find any wrong in the code.
Plese see the probe()
static int dwc3_probe(struct platform_device *pdev)
{
struct device *dev = &pdev->dev;
struct dwc3_platform_data *pdata = dev_get_platdata(dev);
struct device_node *node = dev->of_node;
struct resource *res;
struct dwc3 *dwc;
int ret;
void __iomem *regs;
void *mem;
mem = devm_kzalloc(dev, sizeof(*dwc) + DWC3_ALIGN_MASK, GFP_KERNEL);
if (!mem)
return -ENOMEM;
dwc = PTR_ALIGN(mem, DWC3_ALIGN_MASK + 1);
dwc->mem = mem;
dwc->dev = dev;
res = platform_get_resource(pdev, IORESOURCE_IRQ, 0);
if (!res) {
dev_err(dev, "missing IRQ\n");
return -ENODEV;
}
dwc->xhci_resources[1].start = res->start;
dwc->xhci_resources[1].end = res->end;
dwc->xhci_resources[1].flags = res->flags;
dwc->xhci_resources[1].name = res->name;
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
/*
* Request memory region but exclude xHCI regs,
* since it will be requested by the xhci-plat driver.
*/
regs = devm_ioremap_resource(dev, res);
if (IS_ERR(regs))
return PTR_ERR(regs);
dwc->xhci_resources[0].start = res->start;
dwc->xhci_resources[0].end = dwc->xhci_resources[0].start +
DWC3_XHCI_REGS_END;
dwc->xhci_resources[0].flags = res->flags;
dwc->xhci_resources[0].name = res->name;
res->start += DWC3_GLOBALS_REGS_START;
dwc->regs = regs;
dwc->regs_size = resource_size(res);
/*
* restore res->start back to its original value so that,
* in case the probe is deferred, we don't end up getting error in
* request the memory region the next time probe is called.
*/
res->start -= DWC3_GLOBALS_REGS_START;
if (node) {
dwc->maximum_speed = of_usb_get_maximum_speed(node);
dwc->needs_fifo_resize = of_property_read_bool(node, "tx-fifo-resize");
dwc->dr_mode = of_usb_get_dr_mode(node);
} else if (pdata) {
dwc->maximum_speed = pdata->maximum_speed;
dwc->needs_fifo_resize = pdata->tx_fifo_resize;
dwc->dr_mode = pdata->dr_mode;
}
/* default to superspeed if no maximum_speed passed */
if (dwc->maximum_speed == USB_SPEED_UNKNOWN)
dwc->maximum_speed = USB_SPEED_SUPER;
ret = dwc3_core_get_phy(dwc);
if (ret)
return ret;
spin_lock_init(&dwc->lock);
platform_set_drvdata(pdev, dwc);
dev->dma_mask = dev->parent->dma_mask;
dev->dma_parms = dev->parent->dma_parms;
dma_set_coherent_mask(dev, dev->parent->coherent_dma_mask);
pm_runtime_enable(dev);
pm_runtime_get_sync(dev);
pm_runtime_forbid(dev);
dwc3_cache_hwparams(dwc);
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;
}
if (IS_ENABLED(CONFIG_USB_DWC3_HOST))
dwc->dr_mode = USB_DR_MODE_HOST;
else if (IS_ENABLED(CONFIG_USB_DWC3_GADGET))
dwc->dr_mode = USB_DR_MODE_PERIPHERAL;
if (dwc->dr_mode == USB_DR_MODE_UNKNOWN)
dwc->dr_mode = USB_DR_MODE_OTG;
ret = dwc3_core_init(dwc);
if (ret) {
dev_err(dev, "failed to initialize core\n");
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;
}
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;
}
pm_runtime_allow(dev);
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:
dwc3_free_event_buffers(dwc);
return ret;
}
Please review it again...
--
Thanks and Regards,
Varka Bhadram.
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html