* since it will be requested by the xhci-plat driver.
         */
        regs = devm_ioremap_resource(dev, res);
-       if (IS_ERR(regs))
-               return PTR_ERR(regs);
+       if (IS_ERR(regs)) {
+               ret = PTR_ERR(regs);
+               goto err0;
+       }
 
        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;
 
        /* default to highest possible threshold */
        lpm_nyet_threshold = 0xff;
 
        ret = dwc3_core_get_phy(dwc);
        if (ret)
-               return ret;
+               goto err0;
 
        spin_lock_init(&dwc->lock);
        platform_set_drvdata(pdev, dwc);
        if (ret) {
                dev_err(dwc->dev, "failed to allocate event buffers\n");
                ret = -ENOMEM;
-               goto err0;
+               goto err1;
        }
 
        if (IS_ENABLED(CONFIG_USB_DWC3_HOST))
        ret = dwc3_core_init(dwc);
        if (ret) {
                dev_err(dev, "failed to initialize core\n");
-               goto err0;
+               goto err1;
        }
 
        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;
+               goto err2;
 
        ret = phy_power_on(dwc->usb3_generic_phy);
        if (ret < 0)
-               goto err_usb2phy_power;
+               goto err3;
 
        ret = dwc3_event_buffers_setup(dwc);
        if (ret) {
                dev_err(dwc->dev, "failed to setup event buffers\n");
-               goto err_usb3phy_power;
+               goto err4;
        }
 
        ret = dwc3_core_init_mode(dwc);
        if (ret)
-               goto err2;
+               goto err5;
 
        ret = dwc3_debugfs_init(dwc);
        if (ret) {
                dev_err(dev, "failed to initialize debugfs\n");
-               goto err3;
+               goto err6;
        }
 
        pm_runtime_allow(dev);
 
        return 0;
 
-err3:
+err6:
        dwc3_core_exit_mode(dwc);
 
-err2:
+err5:
        dwc3_event_buffers_cleanup(dwc);
 
-err_usb3phy_power:
+err4:
        phy_power_off(dwc->usb3_generic_phy);
 
-err_usb2phy_power:
+err3:
        phy_power_off(dwc->usb2_generic_phy);
 
-err1:
+err2:
        usb_phy_set_suspend(dwc->usb2_phy, 1);
        usb_phy_set_suspend(dwc->usb3_phy, 1);
        dwc3_core_exit(dwc);
 
-err0:
+err1:
        dwc3_free_event_buffers(dwc);
 
+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);
+
+       /*
+        * 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);