scsi: ufs: Reuse compose_dev_cmd
authorAvri Altman <avri.altman@wdc.com>
Sat, 9 Mar 2024 08:11:01 +0000 (10:11 +0200)
committerMartin K. Petersen <martin.petersen@oracle.com>
Mon, 25 Mar 2024 20:50:22 +0000 (16:50 -0400)
Move out some of the dev_cmd initializations so they can be used elsewhere.

Reviewed-by: Bart Van Assche <bvanassche@acm.org>
Reviewed-by: Bean Huo <beanhuo@micron.com>
Signed-off-by: Avri Altman <avri.altman@wdc.com>
Link: https://lore.kernel.org/r/20240309081104.5006-4-avri.altman@wdc.com
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/ufs/core/ufshcd.c

index 957fd59e98edce61ac4d4c5a877647370283ee5b..a089981c74963e6e9f891f62e6c335d5d736caad 100644 (file)
@@ -3061,15 +3061,21 @@ out:
        return err;
 }
 
-static int ufshcd_compose_dev_cmd(struct ufs_hba *hba,
-               struct ufshcd_lrb *lrbp, enum dev_cmd_type cmd_type, int tag)
+static void ufshcd_setup_dev_cmd(struct ufs_hba *hba, struct ufshcd_lrb *lrbp,
+                            enum dev_cmd_type cmd_type, u8 lun, int tag)
 {
        lrbp->cmd = NULL;
        lrbp->task_tag = tag;
-       lrbp->lun = 0; /* device management cmd is not specific to any LUN */
+       lrbp->lun = lun;
        lrbp->intr_cmd = true; /* No interrupt aggregation */
        ufshcd_prepare_lrbp_crypto(NULL, lrbp);
        hba->dev_cmd.type = cmd_type;
+}
+
+static int ufshcd_compose_dev_cmd(struct ufs_hba *hba,
+               struct ufshcd_lrb *lrbp, enum dev_cmd_type cmd_type, int tag)
+{
+       ufshcd_setup_dev_cmd(hba, lrbp, cmd_type, 0, tag);
 
        return ufshcd_compose_devman_upiu(hba, lrbp);
 }
@@ -7214,20 +7220,14 @@ static int ufshcd_issue_devman_upiu_cmd(struct ufs_hba *hba,
                                        enum query_opcode desc_op)
 {
        const u32 tag = hba->reserved_slot;
-       struct ufshcd_lrb *lrbp;
+       struct ufshcd_lrb *lrbp = &hba->lrb[tag];
        int err = 0;
        u8 upiu_flags;
 
        /* Protects use of hba->reserved_slot. */
        lockdep_assert_held(&hba->dev_cmd.lock);
 
-       lrbp = &hba->lrb[tag];
-       lrbp->cmd = NULL;
-       lrbp->task_tag = tag;
-       lrbp->lun = 0;
-       lrbp->intr_cmd = true;
-       ufshcd_prepare_lrbp_crypto(NULL, lrbp);
-       hba->dev_cmd.type = cmd_type;
+       ufshcd_setup_dev_cmd(hba, lrbp, cmd_type, 0, tag);
 
        if (hba->ufs_version <= ufshci_version(1, 1))
                lrbp->command_type = UTP_CMD_TYPE_DEV_MANAGE;
@@ -7373,7 +7373,7 @@ int ufshcd_advanced_rpmb_req_handler(struct ufs_hba *hba, struct utp_upiu_req *r
                         enum dma_data_direction dir)
 {
        const u32 tag = hba->reserved_slot;
-       struct ufshcd_lrb *lrbp;
+       struct ufshcd_lrb *lrbp = &hba->lrb[tag];
        int err = 0;
        int result;
        u8 upiu_flags;
@@ -7383,14 +7383,7 @@ int ufshcd_advanced_rpmb_req_handler(struct ufs_hba *hba, struct utp_upiu_req *r
        /* Protects use of hba->reserved_slot. */
        ufshcd_dev_man_lock(hba);
 
-       lrbp = &hba->lrb[tag];
-       lrbp->cmd = NULL;
-       lrbp->task_tag = tag;
-       lrbp->lun = UFS_UPIU_RPMB_WLUN;
-
-       lrbp->intr_cmd = true;
-       ufshcd_prepare_lrbp_crypto(NULL, lrbp);
-       hba->dev_cmd.type = DEV_CMD_TYPE_RPMB;
+       ufshcd_setup_dev_cmd(hba, lrbp, DEV_CMD_TYPE_RPMB, UFS_UPIU_RPMB_WLUN, tag);
 
        /* Advanced RPMB starts from UFS 4.0, so its command type is UTP_CMD_TYPE_UFS_STORAGE */
        lrbp->command_type = UTP_CMD_TYPE_UFS_STORAGE;