struct generic_pm_domain *genpd = pd_to_genpd(pd);
        struct gpd_link *link;
        struct pm_domain_data *pdd;
-       s64 min_dev_off_time_ns;
+       s64 min_off_time_ns;
        s64 off_on_time_ns;
 
        if (genpd->max_off_time_changed) {
                                to_gpd_data(pdd)->td.save_state_latency_ns;
        }
 
+       min_off_time_ns = -1;
        /*
         * Check if subdomains can be off for enough time.
         *
                 */
                if (sd_max_off_ns <= off_on_time_ns)
                        return false;
+
+               if (min_off_time_ns > sd_max_off_ns || min_off_time_ns < 0)
+                       min_off_time_ns = sd_max_off_ns;
        }
 
        /*
         * Check if the devices in the domain can be off enough time.
         */
-       min_dev_off_time_ns = -1;
        list_for_each_entry(pdd, &genpd->dev_list, list_node) {
                struct gpd_timing_data *td;
                s64 constraint_ns;
                if (constraint_ns <= off_on_time_ns)
                        return false;
 
-               if (min_dev_off_time_ns > constraint_ns
-                   || min_dev_off_time_ns < 0)
-                       min_dev_off_time_ns = constraint_ns;
+               if (min_off_time_ns > constraint_ns || min_off_time_ns < 0)
+                       min_off_time_ns = constraint_ns;
        }
 
        genpd->cached_power_down_ok = true;
         * latency constraints, so the domain can spend arbitrary time in the
         * "off" state.
         */
-       if (min_dev_off_time_ns < 0)
+       if (min_off_time_ns < 0)
                return true;
 
        /*
-        * The difference between the computed minimum device off time and the
-        * time needed to turn the domain on is the maximum theoretical time
-        * this domain can spend in the "off" state.
+        * The difference between the computed minimum subdomain or device off
+        * time and the time needed to turn the domain on is the maximum
+        * theoretical time this domain can spend in the "off" state.
         */
-       genpd->max_off_time_ns = min_dev_off_time_ns -
-                                       genpd->power_on_latency_ns;
+       genpd->max_off_time_ns = min_off_time_ns - genpd->power_on_latency_ns;
        return true;
 }