Message ID | 1399723210-21569-6-git-send-email-gautam.vivek@samsung.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On 05/10/2014 06:00 AM, Vivek Gautam wrote: > Using devm_ioremap_resource() API should actually be preferred over > devm_ioremap(), since the former request the mem region first and then > gives back the ioremap'ed memory pointer. > devm_ioremap_resource() calls request_mem_region(), therby preventing > other drivers to make any overlapping call to the same region. This patch on its own works OK on Tegra. However, if a similar patch were to be applied to the Tegra PHY driver, then I expect that would break USB on Tegra. The reason is that the Tegra USB controller and PHY registers are interleaved a bit randomly within the same address range, and rather than call out which individual addresses are relevant to the controller and the PHY, the DT for both devices just specifies the same whole range, and the drivers only touch the appropriate registers within the range. Perhaps we should have described that as an MFD rather than separate DT nodes and devices, but that's not what we ended up with. -- To unsubscribe from this list: send the line "unsubscribe linux-samsung-soc" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/drivers/usb/host/ehci-tegra.c b/drivers/usb/host/ehci-tegra.c index 572634c..6fdcb8a 100644 --- a/drivers/usb/host/ehci-tegra.c +++ b/drivers/usb/host/ehci-tegra.c @@ -411,10 +411,9 @@ static int tegra_ehci_probe(struct platform_device *pdev) } hcd->rsrc_start = res->start; hcd->rsrc_len = resource_size(res); - hcd->regs = devm_ioremap(&pdev->dev, res->start, resource_size(res)); - if (!hcd->regs) { - dev_err(&pdev->dev, "Failed to remap I/O memory\n"); - err = -ENOMEM; + hcd->regs = devm_ioremap_resource(&pdev->dev, res); + if (IS_ERR(hcd->regs)) { + err = PTR_ERR(hcd->regs); goto cleanup_clk_en; } ehci->caps = hcd->regs + 0x100;
Using devm_ioremap_resource() API should actually be preferred over devm_ioremap(), since the former request the mem region first and then gives back the ioremap'ed memory pointer. devm_ioremap_resource() calls request_mem_region(), therby preventing other drivers to make any overlapping call to the same region. Signed-off-by: Vivek Gautam <gautam.vivek@samsung.com> --- drivers/usb/host/ehci-tegra.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-)