return ufs_pm_lvl_states[lvl].link_state;
 }
 
+static inline enum ufs_pm_level
+ufs_get_desired_pm_lvl_for_dev_link_state(enum ufs_dev_pwr_mode dev_state,
+                                       enum uic_link_state link_state)
+{
+       enum ufs_pm_level lvl;
+
+       for (lvl = UFS_PM_LVL_0; lvl < UFS_PM_LVL_MAX; lvl++) {
+               if ((ufs_pm_lvl_states[lvl].dev_state == dev_state) &&
+                       (ufs_pm_lvl_states[lvl].link_state == link_state))
+                       return lvl;
+       }
+
+       /* if no match found, return the level 0 */
+       return UFS_PM_LVL_0;
+}
+
 static struct ufs_dev_fix ufs_fixups[] = {
        /* UFS cards deviations table */
        UFS_FIX(UFS_VENDOR_SAMSUNG, UFS_ANY_MODEL,
                ufshcd_clkscaling_init_sysfs(hba);
        }
 
+       /*
+        * Set the default power management level for runtime and system PM.
+        * Default power saving mode is to keep UFS link in Hibern8 state
+        * and UFS device in sleep state.
+        */
+       hba->rpm_lvl = ufs_get_desired_pm_lvl_for_dev_link_state(
+                                               UFS_SLEEP_PWR_MODE,
+                                               UIC_LINK_HIBERN8_STATE);
+       hba->spm_lvl = ufs_get_desired_pm_lvl_for_dev_link_state(
+                                               UFS_SLEEP_PWR_MODE,
+                                               UIC_LINK_HIBERN8_STATE);
+
        /* Hold auto suspend until async scan completes */
        pm_runtime_get_sync(dev);