the particular logical unit. The full information about
                the attribute could be found at UFS specifications 2.1.
                The file is read only.
+
+
+What:          /sys/bus/platform/drivers/ufshcd/*/rpm_lvl
+Date:          September 2014
+Contact:       Subhash Jadavani <subhashj@codeaurora.org>
+Description:   This entry could be used to set or show the UFS device
+               runtime power management level. The current driver
+               implementation supports 6 levels with next target states:
+               0 - an UFS device will stay active, an UIC link will
+               stay active
+               1 - an UFS device will stay active, an UIC link will
+               hibernate
+               2 - an UFS device will moved to sleep, an UIC link will
+               stay active
+               3 - an UFS device will moved to sleep, an UIC link will
+               hibernate
+               4 - an UFS device will be powered off, an UIC link will
+               hibernate
+               5 - an UFS device will be powered off, an UIC link will
+               be powered off
+
+What:          /sys/bus/platform/drivers/ufshcd/*/rpm_target_dev_state
+Date:          February 2018
+Contact:       Subhash Jadavani <subhashj@codeaurora.org>
+Description:   This entry shows the target power mode of an UFS device
+               for the chosen runtime power management level.
+               The file is read only.
+
+What:          /sys/bus/platform/drivers/ufshcd/*/rpm_target_link_state
+Date:          February 2018
+Contact:       Subhash Jadavani <subhashj@codeaurora.org>
+Description:   This entry shows the target state of an UFS UIC link
+               for the chosen runtime power management level.
+               The file is read only.
+
+What:          /sys/bus/platform/drivers/ufshcd/*/spm_lvl
+Date:          September 2014
+Contact:       Subhash Jadavani <subhashj@codeaurora.org>
+Description:   This entry could be used to set or show the UFS device
+               system power management level. The current driver
+               implementation supports 6 levels with next target states:
+               0 - an UFS device will stay active, an UIC link will
+               stay active
+               1 - an UFS device will stay active, an UIC link will
+               hibernate
+               2 - an UFS device will moved to sleep, an UIC link will
+               stay active
+               3 - an UFS device will moved to sleep, an UIC link will
+               hibernate
+               4 - an UFS device will be powered off, an UIC link will
+               hibernate
+               5 - an UFS device will be powered off, an UIC link will
+               be powered off
+
+What:          /sys/bus/platform/drivers/ufshcd/*/spm_target_dev_state
+Date:          February 2018
+Contact:       Subhash Jadavani <subhashj@codeaurora.org>
+Description:   This entry shows the target power mode of an UFS device
+               for the chosen system power management level.
+               The file is read only.
+
+What:          /sys/bus/platform/drivers/ufshcd/*/spm_target_link_state
+Date:          February 2018
+Contact:       Subhash Jadavani <subhashj@codeaurora.org>
+Description:   This entry shows the target state of an UFS UIC link
+               for the chosen system power management level.
+               The file is read only.
 
                struct device_attribute *attr, char *buf)
 {
        struct ufs_hba *hba = dev_get_drvdata(dev);
-       int curr_len;
-       u8 lvl;
-
-       curr_len = snprintf(buf, PAGE_SIZE,
-                           "\nCurrent Runtime PM level [%d] => dev_state [%s] link_state [%s]\n",
-                           hba->rpm_lvl,
-                           ufschd_ufs_dev_pwr_mode_to_string(
-                               ufs_pm_lvl_states[hba->rpm_lvl].dev_state),
-                           ufschd_uic_link_state_to_string(
-                               ufs_pm_lvl_states[hba->rpm_lvl].link_state));
-
-       curr_len += snprintf((buf + curr_len), (PAGE_SIZE - curr_len),
-                            "\nAll available Runtime PM levels info:\n");
-       for (lvl = UFS_PM_LVL_0; lvl < UFS_PM_LVL_MAX; lvl++)
-               curr_len += snprintf((buf + curr_len), (PAGE_SIZE - curr_len),
-                                    "\tRuntime PM level [%d] => dev_state [%s] link_state [%s]\n",
-                                   lvl,
-                                   ufschd_ufs_dev_pwr_mode_to_string(
-                                       ufs_pm_lvl_states[lvl].dev_state),
-                                   ufschd_uic_link_state_to_string(
-                                       ufs_pm_lvl_states[lvl].link_state));
-
-       return curr_len;
+
+       return sprintf(buf, "%d\n", hba->rpm_lvl);
 }
 
 static ssize_t rpm_lvl_store(struct device *dev,
        return ufs_sysfs_pm_lvl_store(dev, attr, buf, count, true);
 }
 
+static ssize_t rpm_target_dev_state_show(struct device *dev,
+               struct device_attribute *attr, char *buf)
+{
+       struct ufs_hba *hba = dev_get_drvdata(dev);
+
+       return sprintf(buf, "%s\n", ufschd_ufs_dev_pwr_mode_to_string(
+                       ufs_pm_lvl_states[hba->rpm_lvl].dev_state));
+}
+
+static ssize_t rpm_target_link_state_show(struct device *dev,
+               struct device_attribute *attr, char *buf)
+{
+       struct ufs_hba *hba = dev_get_drvdata(dev);
+
+       return sprintf(buf, "%s\n", ufschd_uic_link_state_to_string(
+                       ufs_pm_lvl_states[hba->rpm_lvl].link_state));
+}
+
 static ssize_t spm_lvl_show(struct device *dev,
                struct device_attribute *attr, char *buf)
 {
        struct ufs_hba *hba = dev_get_drvdata(dev);
-       int curr_len;
-       u8 lvl;
-
-       curr_len = snprintf(buf, PAGE_SIZE,
-                           "\nCurrent System PM level [%d] => dev_state [%s] link_state [%s]\n",
-                           hba->spm_lvl,
-                           ufschd_ufs_dev_pwr_mode_to_string(
-                               ufs_pm_lvl_states[hba->spm_lvl].dev_state),
-                           ufschd_uic_link_state_to_string(
-                               ufs_pm_lvl_states[hba->spm_lvl].link_state));
 
-       curr_len += snprintf((buf + curr_len), (PAGE_SIZE - curr_len),
-                            "\nAll available System PM levels info:\n");
-       for (lvl = UFS_PM_LVL_0; lvl < UFS_PM_LVL_MAX; lvl++)
-               curr_len += snprintf((buf + curr_len), (PAGE_SIZE - curr_len),
-                                    "\tSystem PM level [%d] => dev_state [%s] link_state [%s]\n",
-                                   lvl,
-                                   ufschd_ufs_dev_pwr_mode_to_string(
-                                       ufs_pm_lvl_states[lvl].dev_state),
-                                   ufschd_uic_link_state_to_string(
-                                       ufs_pm_lvl_states[lvl].link_state));
-
-       return curr_len;
+       return sprintf(buf, "%d\n", hba->spm_lvl);
 }
 
 static ssize_t spm_lvl_store(struct device *dev,
        return ufs_sysfs_pm_lvl_store(dev, attr, buf, count, false);
 }
 
+static ssize_t spm_target_dev_state_show(struct device *dev,
+               struct device_attribute *attr, char *buf)
+{
+       struct ufs_hba *hba = dev_get_drvdata(dev);
+
+       return sprintf(buf, "%s\n", ufschd_ufs_dev_pwr_mode_to_string(
+                               ufs_pm_lvl_states[hba->spm_lvl].dev_state));
+}
+
+static ssize_t spm_target_link_state_show(struct device *dev,
+               struct device_attribute *attr, char *buf)
+{
+       struct ufs_hba *hba = dev_get_drvdata(dev);
+
+       return sprintf(buf, "%s\n", ufschd_uic_link_state_to_string(
+                               ufs_pm_lvl_states[hba->spm_lvl].link_state));
+}
+
 static DEVICE_ATTR_RW(rpm_lvl);
+static DEVICE_ATTR_RO(rpm_target_dev_state);
+static DEVICE_ATTR_RO(rpm_target_link_state);
 static DEVICE_ATTR_RW(spm_lvl);
+static DEVICE_ATTR_RO(spm_target_dev_state);
+static DEVICE_ATTR_RO(spm_target_link_state);
 
 static struct attribute *ufs_sysfs_ufshcd_attrs[] = {
        &dev_attr_rpm_lvl.attr,
+       &dev_attr_rpm_target_dev_state.attr,
+       &dev_attr_rpm_target_link_state.attr,
        &dev_attr_spm_lvl.attr,
+       &dev_attr_spm_target_dev_state.attr,
+       &dev_attr_spm_target_link_state.attr,
        NULL
 };