]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
ufs: add get_max_pwr_mode callback
authorNeil Armstrong <neil.armstrong@linaro.org>
Tue, 10 Sep 2024 09:50:11 +0000 (11:50 +0200)
committerNeil Armstrong <neil.armstrong@linaro.org>
Mon, 14 Oct 2024 06:56:03 +0000 (08:56 +0200)
Add a new get_max_pwr_mode callback to permit the UFS controller
driver manipulate the max_pwr_mode struct right before setting
the new pwr_mode to the UFS device.

It can be used to limit the HS Gear with errata and hardware
limitations on some UFS controllers.

Tested-by: Julius Lehmann <lehmanju@devpi.de>
Tested-by: Caleb Connolly <caleb.connolly@linaro.org> #rb3gen2
Link: https://lore.kernel.org/r/20240910-topic-ufs-qcom-controller-v1-2-54c0d2231b10@linaro.org
Signed-off-by: Neil Armstrong <neil.armstrong@linaro.org>
drivers/ufs/ufs.c
drivers/ufs/ufs.h

index de8ba011d57f7bf181b2205c97ffd6d303269dee..1edd31677b28e57f7af4bab73b04f973cc0b3b07 100644 (file)
@@ -1744,7 +1744,7 @@ static int ufshcd_get_max_pwr_mode(struct ufs_hba *hba)
        }
 
        hba->max_pwr_info.is_valid = true;
-       return 0;
+       return ufshcd_ops_get_max_pwr_mode(hba, &hba->max_pwr_info);
 }
 
 static int ufshcd_change_power_mode(struct ufs_hba *hba,
index 8221812f6da140d7f9d61b64ace2ea70254e001a..81107e5b37eadac3fae18a865e625890832531d9 100644 (file)
@@ -696,6 +696,8 @@ struct ufs_dev_cmd {
 
 struct ufs_hba_ops {
        int (*init)(struct ufs_hba *hba);
+       int (*get_max_pwr_mode)(struct ufs_hba *hba,
+                               struct ufs_pwr_mode_info *max_pwr_info);
        int (*hce_enable_notify)(struct ufs_hba *hba,
                                 enum ufs_notify_change_status);
        int (*link_startup_notify)(struct ufs_hba *hba,
@@ -903,6 +905,15 @@ static inline int ufshcd_ops_init(struct ufs_hba *hba)
        return 0;
 }
 
+static inline int ufshcd_ops_get_max_pwr_mode(struct ufs_hba *hba,
+                                             struct ufs_pwr_mode_info *max_pwr_info)
+{
+       if (hba->ops && hba->ops->get_max_pwr_mode)
+               return hba->ops->get_max_pwr_mode(hba, max_pwr_info);
+
+       return 0;
+}
+
 static inline int ufshcd_ops_hce_enable_notify(struct ufs_hba *hba,
                                                bool status)
 {