]> git.baikalelectronics.ru Git - kernel.git/commitdiff
scsi: ufs: ufshpb: Merge ufshpb_reset() and ufshpb_reset_host()
authorBean Huo <beanhuo@micron.com>
Thu, 5 May 2022 13:47:02 +0000 (15:47 +0200)
committerMartin K. Petersen <martin.petersen@oracle.com>
Wed, 11 May 2022 02:01:51 +0000 (22:01 -0400)
There is no functional change in this patch, just merge ufshpb_reset() and
ufshpb_reset_host() into one function ufshpb_toggle_state().

Link: https://lore.kernel.org/r/20220505134707.35929-2-huobean@gmail.com
Reviewed-by: Keoseong Park <keosung.park@samsung.com>
Signed-off-by: Bean Huo <beanhuo@micron.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/scsi/ufs/ufshcd.c
drivers/scsi/ufs/ufshpb.c
drivers/scsi/ufs/ufshpb.h

index 1f82590d153fc9df5fdf789574e7b02e0fdf8c5f..1fb3a8b9b03ed680af0bb19b68a09c17ebab11ff 100644 (file)
@@ -7226,7 +7226,7 @@ static int ufshcd_host_reset_and_restore(struct ufs_hba *hba)
         * Stop the host controller and complete the requests
         * cleared by h/w
         */
-       ufshpb_reset_host(hba);
+       ufshpb_toggle_state(hba, HPB_PRESENT, HPB_RESET);
        ufshcd_hba_stop(hba);
        hba->silence_err_logs = true;
        ufshcd_complete_requests(hba);
@@ -8193,7 +8193,7 @@ static int ufshcd_probe_hba(struct ufs_hba *hba, bool init_dev_params)
        /* Enable Auto-Hibernate if configured */
        ufshcd_auto_hibern8_enable(hba);
 
-       ufshpb_reset(hba);
+       ufshpb_toggle_state(hba, HPB_RESET, HPB_PRESENT);
 out:
        spin_lock_irqsave(hba->host->host_lock, flags);
        if (ret)
index 6e5237a041b5e41c67e974538935bc4faa5c3d9a..5412ce6309dfa4ec05720a4363a6dc4a6dd9ca6f 100644 (file)
@@ -2272,38 +2272,28 @@ out:
        return flag_res;
 }
 
-void ufshpb_reset(struct ufs_hba *hba)
+/**
+ * ufshpb_toggle_state - switch HPB state of all LUs
+ * @hba: per-adapter instance
+ * @src: expected current HPB state
+ * @dest: target HPB state to switch to
+ */
+void ufshpb_toggle_state(struct ufs_hba *hba, enum UFSHPB_STATE src, enum UFSHPB_STATE dest)
 {
        struct ufshpb_lu *hpb;
        struct scsi_device *sdev;
 
        shost_for_each_device(sdev, hba->host) {
                hpb = ufshpb_get_hpb_data(sdev);
-               if (!hpb)
-                       continue;
-
-               if (ufshpb_get_state(hpb) != HPB_RESET)
-                       continue;
-
-               ufshpb_set_state(hpb, HPB_PRESENT);
-       }
-}
-
-void ufshpb_reset_host(struct ufs_hba *hba)
-{
-       struct ufshpb_lu *hpb;
-       struct scsi_device *sdev;
 
-       shost_for_each_device(sdev, hba->host) {
-               hpb = ufshpb_get_hpb_data(sdev);
-               if (!hpb)
+               if (!hpb || ufshpb_get_state(hpb) != src)
                        continue;
+               ufshpb_set_state(hpb, dest);
 
-               if (ufshpb_get_state(hpb) != HPB_PRESENT)
-                       continue;
-               ufshpb_set_state(hpb, HPB_RESET);
-               ufshpb_cancel_jobs(hpb);
-               ufshpb_discard_rsp_lists(hpb);
+               if (dest == HPB_RESET) {
+                       ufshpb_cancel_jobs(hpb);
+                       ufshpb_discard_rsp_lists(hpb);
+               }
        }
 }
 
index b475dbd78988371913343f3227043547eada7e9c..7aa0dc58ee9fb2db98284278573bd2d73b509782 100644 (file)
@@ -288,8 +288,7 @@ static int ufshpb_prep(struct ufs_hba *hba, struct ufshcd_lrb *lrbp) { return 0;
 static void ufshpb_rsp_upiu(struct ufs_hba *hba, struct ufshcd_lrb *lrbp) {}
 static void ufshpb_resume(struct ufs_hba *hba) {}
 static void ufshpb_suspend(struct ufs_hba *hba) {}
-static void ufshpb_reset(struct ufs_hba *hba) {}
-static void ufshpb_reset_host(struct ufs_hba *hba) {}
+static void ufshpb_toggle_state(struct ufs_hba *hba, enum UFSHPB_STATE src, enum UFSHPB_STATE dest) {}
 static void ufshpb_init(struct ufs_hba *hba) {}
 static void ufshpb_init_hpb_lu(struct ufs_hba *hba, struct scsi_device *sdev) {}
 static void ufshpb_destroy_lu(struct ufs_hba *hba, struct scsi_device *sdev) {}
@@ -303,8 +302,7 @@ int ufshpb_prep(struct ufs_hba *hba, struct ufshcd_lrb *lrbp);
 void ufshpb_rsp_upiu(struct ufs_hba *hba, struct ufshcd_lrb *lrbp);
 void ufshpb_resume(struct ufs_hba *hba);
 void ufshpb_suspend(struct ufs_hba *hba);
-void ufshpb_reset(struct ufs_hba *hba);
-void ufshpb_reset_host(struct ufs_hba *hba);
+void ufshpb_toggle_state(struct ufs_hba *hba, enum UFSHPB_STATE src, enum UFSHPB_STATE dest);
 void ufshpb_init(struct ufs_hba *hba);
 void ufshpb_init_hpb_lu(struct ufs_hba *hba, struct scsi_device *sdev);
 void ufshpb_destroy_lu(struct ufs_hba *hba, struct scsi_device *sdev);