* @res_name:          Resource name used for cmd-db lookup
  * @addr:              Resource address as looped up using resource name from
  *                     cmd-db
+ * @state_synced:      Indicator that sync_state has been invoked for the rpmhpd resource
  */
 struct rpmhpd {
        struct device   *dev;
        bool            enabled;
        const char      *res_name;
        u32             addr;
+       bool            state_synced;
 };
 
 struct rpmhpd_desc {
        unsigned int this_active_corner = 0, this_sleep_corner = 0;
        unsigned int peer_active_corner = 0, peer_sleep_corner = 0;
 
-       to_active_sleep(pd, corner, &this_active_corner, &this_sleep_corner);
+       if (pd->state_synced) {
+               to_active_sleep(pd, corner, &this_active_corner, &this_sleep_corner);
+       } else {
+               /* Clamp to highest corner if sync_state hasn't happened */
+               this_active_corner = pd->level_count - 1;
+               this_sleep_corner = pd->level_count - 1;
+       }
 
        if (peer && peer->enabled)
                to_active_sleep(peer, peer->corner, &peer_active_corner,
        return of_genpd_add_provider_onecell(pdev->dev.of_node, data);
 }
 
+static void rpmhpd_sync_state(struct device *dev)
+{
+       const struct rpmhpd_desc *desc = of_device_get_match_data(dev);
+       struct rpmhpd **rpmhpds = desc->rpmhpds;
+       unsigned int corner;
+       struct rpmhpd *pd;
+       unsigned int i;
+       int ret;
+
+       mutex_lock(&rpmhpd_lock);
+       for (i = 0; i < desc->num_pds; i++) {
+               pd = rpmhpds[i];
+               if (!pd)
+                       continue;
+
+               pd->state_synced = true;
+               if (pd->enabled)
+                       corner = max(pd->corner, pd->enable_corner);
+               else
+                       corner = 0;
+
+               ret = rpmhpd_aggregate_corner(pd, corner);
+               if (ret)
+                       dev_err(dev, "failed to sync %s\n", pd->res_name);
+       }
+       mutex_unlock(&rpmhpd_lock);
+}
+
 static struct platform_driver rpmhpd_driver = {
        .driver = {
                .name = "qcom-rpmhpd",
                .of_match_table = rpmhpd_match_table,
                .suppress_bind_attrs = true,
+               .sync_state = rpmhpd_sync_state,
        },
        .probe = rpmhpd_probe,
 };