diff mbox series

[v2,1/2] usb: dwc3: use local copy of resource to fix-up register offset

Message ID 1524135818-14825-2-git-send-email-yamada.masahiro@socionext.com
State Superseded
Headers show
Series usb: dwc3: support clocks and resets for DWC3 core | expand

Commit Message

Masahiro Yamada April 19, 2018, 11:03 a.m. UTC
It is not a good idea to directly modify the resource of a platform
device.  Modify its local copy, and pass it to devm_ioremap_resource()
so that we do not need to restore it in the failure path and the remove
hook.

Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>

Reviewed-by: Masami Hiramatsu <mhiramat@kernel.org>

---

Changes in v2: None

 drivers/usb/dwc3/core.c | 32 ++++++++------------------------
 1 file changed, 8 insertions(+), 24 deletions(-)

-- 
2.7.4

Comments

Masahiro Yamada May 1, 2018, 2:07 p.m. UTC | #1
Hi Felipe,


2018-04-19 20:03 GMT+09:00 Masahiro Yamada <yamada.masahiro@socionext.com>:
> It is not a good idea to directly modify the resource of a platform

> device.  Modify its local copy, and pass it to devm_ioremap_resource()

> so that we do not need to restore it in the failure path and the remove

> hook.

>

> Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>

> Reviewed-by: Masami Hiramatsu <mhiramat@kernel.org>



I want this patch applied first
unless you are opposed to this clean-up.

I'd like to avoid re-sending a trivial patch like this.




> ---

>

> Changes in v2: None

>

>  drivers/usb/dwc3/core.c | 32 ++++++++------------------------

>  1 file changed, 8 insertions(+), 24 deletions(-)

>

> diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c

> index a15648d..8e66edd 100644

> --- a/drivers/usb/dwc3/core.c

> +++ b/drivers/usb/dwc3/core.c

> @@ -1245,7 +1245,7 @@ static void dwc3_check_params(struct dwc3 *dwc)

>  static int dwc3_probe(struct platform_device *pdev)

>  {

>         struct device           *dev = &pdev->dev;

> -       struct resource         *res;

> +       struct resource         *res, dwc_res;

>         struct dwc3             *dwc;

>

>         int                     ret;

> @@ -1270,20 +1270,19 @@ static int dwc3_probe(struct platform_device *pdev)

>         dwc->xhci_resources[0].flags = res->flags;

>         dwc->xhci_resources[0].name = res->name;

>

> -       res->start += DWC3_GLOBALS_REGS_START;

> -

>         /*

>          * 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)) {

> -               ret = PTR_ERR(regs);

> -               goto err0;

> -       }

> +       dwc_res = *res;

> +       dwc_res.start += DWC3_GLOBALS_REGS_START;

> +

> +       regs = devm_ioremap_resource(dev, &dwc_res);

> +       if (IS_ERR(regs))

> +               return PTR_ERR(regs);

>

>         dwc->regs       = regs;

> -       dwc->regs_size  = resource_size(res);

> +       dwc->regs_size  = resource_size(&dwc_res);

>

>         dwc3_get_properties(dwc);

>

> @@ -1350,29 +1349,14 @@ static int dwc3_probe(struct platform_device *pdev)

>         pm_runtime_put_sync(&pdev->dev);

>         pm_runtime_disable(&pdev->dev);

>

> -err0:

> -       /*

> -        * 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;

> -

>         return ret;

>  }

>

>  static int dwc3_remove(struct platform_device *pdev)

>  {

>         struct dwc3     *dwc = platform_get_drvdata(pdev);

> -       struct resource *res = platform_get_resource(pdev, IORESOURCE_MEM, 0);

>

>         pm_runtime_get_sync(&pdev->dev);

> -       /*

> -        * 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;

>

>         dwc3_debugfs_exit(dwc);

>         dwc3_core_exit_mode(dwc);

> --

> 2.7.4

>

> --

> To unsubscribe from this list: send the line "unsubscribe linux-usb" in

> the body of a message to majordomo@vger.kernel.org

> More majordomo info at  http://vger.kernel.org/majordomo-info.html




-- 
Best Regards
Masahiro Yamada
diff mbox series

Patch

diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c
index a15648d..8e66edd 100644
--- a/drivers/usb/dwc3/core.c
+++ b/drivers/usb/dwc3/core.c
@@ -1245,7 +1245,7 @@  static void dwc3_check_params(struct dwc3 *dwc)
 static int dwc3_probe(struct platform_device *pdev)
 {
 	struct device		*dev = &pdev->dev;
-	struct resource		*res;
+	struct resource		*res, dwc_res;
 	struct dwc3		*dwc;
 
 	int			ret;
@@ -1270,20 +1270,19 @@  static int dwc3_probe(struct platform_device *pdev)
 	dwc->xhci_resources[0].flags = res->flags;
 	dwc->xhci_resources[0].name = res->name;
 
-	res->start += DWC3_GLOBALS_REGS_START;
-
 	/*
 	 * 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)) {
-		ret = PTR_ERR(regs);
-		goto err0;
-	}
+	dwc_res = *res;
+	dwc_res.start += DWC3_GLOBALS_REGS_START;
+
+	regs = devm_ioremap_resource(dev, &dwc_res);
+	if (IS_ERR(regs))
+		return PTR_ERR(regs);
 
 	dwc->regs	= regs;
-	dwc->regs_size	= resource_size(res);
+	dwc->regs_size	= resource_size(&dwc_res);
 
 	dwc3_get_properties(dwc);
 
@@ -1350,29 +1349,14 @@  static int dwc3_probe(struct platform_device *pdev)
 	pm_runtime_put_sync(&pdev->dev);
 	pm_runtime_disable(&pdev->dev);
 
-err0:
-	/*
-	 * 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;
-
 	return ret;
 }
 
 static int dwc3_remove(struct platform_device *pdev)
 {
 	struct dwc3	*dwc = platform_get_drvdata(pdev);
-	struct resource *res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
 
 	pm_runtime_get_sync(&pdev->dev);
-	/*
-	 * 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;
 
 	dwc3_debugfs_exit(dwc);
 	dwc3_core_exit_mode(dwc);