ret = dwc3_meson_g12a_get_phys(priv);
        if (ret)
-               goto err_disable_clks;
+               goto err_rearm;
 
        ret = priv->drvdata->setup_regmaps(priv, base);
        if (ret)
-               goto err_disable_clks;
+               goto err_rearm;
 
        if (priv->vbus) {
                ret = regulator_enable(priv->vbus);
                if (ret)
-                       goto err_disable_clks;
+                       goto err_rearm;
        }
 
        /* Get dr_mode */
        if (priv->vbus)
                regulator_disable(priv->vbus);
 
+err_rearm:
+       reset_control_rearm(priv->reset);
+
 err_disable_clks:
        clk_bulk_disable_unprepare(priv->drvdata->num_clks,
                                   priv->drvdata->clks);
        pm_runtime_put_noidle(dev);
        pm_runtime_set_suspended(dev);
 
+       reset_control_rearm(priv->reset);
+
        clk_bulk_disable_unprepare(priv->drvdata->num_clks,
                                   priv->drvdata->clks);
 
                phy_exit(priv->phys[i]);
        }
 
-       reset_control_assert(priv->reset);
+       reset_control_rearm(priv->reset);
 
        return 0;
 }
        struct dwc3_meson_g12a *priv = dev_get_drvdata(dev);
        int i, ret;
 
-       reset_control_deassert(priv->reset);
+       ret = reset_control_reset(priv->reset);
+       if (ret)
+               return ret;
 
        ret = priv->drvdata->usb_init(priv);
        if (ret)