]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
scsi: ufs: core: Move the MCQ scsi_add_host() call
authorBart Van Assche <bvanassche@acm.org>
Wed, 16 Oct 2024 20:12:06 +0000 (13:12 -0700)
committerMartin K. Petersen <martin.petersen@oracle.com>
Fri, 25 Oct 2024 19:30:22 +0000 (15:30 -0400)
Whether or not MCQ is used, call scsi_add_host() from
ufshcd_add_scsi_host().  For MCQ this patch swaps the order of the
scsi_add_host() and UFS device initialization. This patch prepares for
combining the two scsi_add_host() calls.

Signed-off-by: Bart Van Assche <bvanassche@acm.org>
Link: https://lore.kernel.org/r/20241016201249.2256266-11-bvanassche@acm.org
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/ufs/core/ufshcd.c

index 4103b1c9c388d02759d7e138cac0cf05c0a660f0..fd2783623a89790a3629d44c0764b267833c7213 100644 (file)
@@ -10344,8 +10344,25 @@ static int ufshcd_add_scsi_host(struct ufs_hba *hba)
 {
        int err;
 
-       if (!hba->scsi_host_added) {
-               WARN_ON_ONCE(is_mcq_supported(hba));
+       if (is_mcq_supported(hba)) {
+               ufshcd_mcq_enable(hba);
+               err = ufshcd_alloc_mcq(hba);
+               if (!err) {
+                       ufshcd_config_mcq(hba);
+               } else {
+                       /* Continue with SDB mode */
+                       ufshcd_mcq_disable(hba);
+                       use_mcq_mode = false;
+                       dev_err(hba->dev, "MCQ mode is disabled, err=%d\n",
+                               err);
+               }
+               err = scsi_add_host(hba->host, hba->dev);
+               if (err) {
+                       dev_err(hba->dev, "scsi_add_host failed\n");
+                       return err;
+               }
+               hba->scsi_host_added = true;
+       } else {
                if (!hba->lsdb_sup) {
                        dev_err(hba->dev,
                                "%s: failed to initialize (legacy doorbell mode not supported)\n",
@@ -10606,26 +10623,6 @@ int ufshcd_init(struct ufs_hba *hba, void __iomem *mmio_base, unsigned int irq)
        if (err)
                goto out_disable;
 
-       if (is_mcq_supported(hba)) {
-               ufshcd_mcq_enable(hba);
-               err = ufshcd_alloc_mcq(hba);
-               if (!err) {
-                       ufshcd_config_mcq(hba);
-               } else {
-                       /* Continue with SDB mode */
-                       ufshcd_mcq_disable(hba);
-                       use_mcq_mode = false;
-                       dev_err(hba->dev, "MCQ mode is disabled, err=%d\n",
-                               err);
-               }
-               err = scsi_add_host(host, hba->dev);
-               if (err) {
-                       dev_err(hba->dev, "scsi_add_host failed\n");
-                       goto out_disable;
-               }
-               hba->scsi_host_added = true;
-       }
-
        err = ufshcd_post_device_init(hba);
 
 initialized: