}
 
 static int tegra_powergate_of_get_resets(struct tegra_powergate *pg,
-                                        struct device_node *np)
+                                        struct device_node *np, bool off)
 {
        struct reset_control *rst;
        unsigned int i, count;
                        err = PTR_ERR(pg->resets[i]);
                        goto error;
                }
+
+               if (off)
+                       err = reset_control_assert(pg->resets[i]);
+               else
+                       err = reset_control_deassert(pg->resets[i]);
+
+               if (err) {
+                       reset_control_put(pg->resets[i]);
+                       goto error;
+               }
        }
 
        pg->num_resets = count;
        pg->genpd.power_on = tegra_genpd_power_on;
        pg->pmc = pmc;
 
+       off = !tegra_powergate_is_powered(pg->id);
+
        if (tegra_powergate_of_get_clks(pg, np))
                goto set_available;
 
-       if (tegra_powergate_of_get_resets(pg, np))
+       if (tegra_powergate_of_get_resets(pg, np, off))
                goto remove_clks;
 
-       off = !tegra_powergate_is_powered(pg->id);
-
        pm_genpd_init(&pg->genpd, NULL, off);
 
        if (of_genpd_add_provider_simple(np, &pg->genpd))