[PATCH v2 1/2] scsi: ufs: core: Move the device initialization sequence into a new function
Shawn Lin
shawn.lin at rock-chips.com
Wed Oct 28 18:48:38 PDT 2026
Move the link startup and device initialization steps from ufshcd_init()
into a new function ufshcd_full_device_init(), so that the sequence can
be retried as a unit. No functional change intended.
Signed-off-by: Shawn Lin <shawn.lin at rock-chips.com>
---
(no changes since v1)
drivers/ufs/core/ufshcd.c | 84 +++++++++++++++++++++++----------------
1 file changed, 50 insertions(+), 34 deletions(-)
diff --git a/drivers/ufs/core/ufshcd.c b/drivers/ufs/core/ufshcd.c
index ee643830a57a..f1e54d719537 100644
--- a/drivers/ufs/core/ufshcd.c
+++ b/drivers/ufs/core/ufshcd.c
@@ -11207,6 +11207,55 @@ static int ufshcd_add_scsi_host(struct ufs_hba *hba)
return err;
}
+/**
+ * ufshcd_full_device_init - Link startup and full device initialization
+ * @hba: per-adapter instance
+ *
+ * Execute the whole device initialization sequence used during driver
+ * probe: link startup, MCQ configuration, device verification, device
+ * initialization completion and device parameter setup.
+ *
+ * Return: 0 upon success; < 0 upon failure.
+ */
+static int ufshcd_full_device_init(struct ufs_hba *hba)
+{
+ int err;
+
+ hba->ufshcd_state = UFSHCD_STATE_RESET;
+
+ err = ufshcd_link_startup(hba);
+ if (err)
+ return err;
+
+ if (hba->mcq_enabled)
+ ufshcd_config_mcq(hba);
+
+ if (hba->quirks & UFSHCD_QUIRK_SKIP_PH_CONFIGURATION)
+ return 0;
+
+ /* Debug counters initialization */
+ ufshcd_clear_dbg_ufs_stats(hba);
+
+ /* UniPro link is active now */
+ ufshcd_set_link_active(hba);
+
+ /* Verify device initialization by sending NOP OUT UPIU */
+ err = ufshcd_verify_dev_init(hba);
+ if (err)
+ return err;
+
+ /* Initiate UFS initialization, and waiting until completion */
+ err = ufshcd_complete_dev_init(hba);
+ if (err)
+ return err;
+
+ err = ufshcd_device_params_init(hba);
+ if (err)
+ return err;
+
+ return ufshcd_post_device_init(hba);
+}
+
/**
* ufshcd_init - Driver initialization routine
* @hba: per-adapter instance
@@ -11420,41 +11469,8 @@ int ufshcd_init(struct ufs_hba *hba, void __iomem *mmio_base, unsigned int irq)
/* Initialize hba, detect and initialize UFS device */
ktime_t probe_start = ktime_get();
- hba->ufshcd_state = UFSHCD_STATE_RESET;
-
- err = ufshcd_link_startup(hba);
- if (err)
- goto out_release;
-
- if (hba->mcq_enabled)
- ufshcd_config_mcq(hba);
-
- if (hba->quirks & UFSHCD_QUIRK_SKIP_PH_CONFIGURATION)
- goto initialized;
-
- /* Debug counters initialization */
- ufshcd_clear_dbg_ufs_stats(hba);
-
- /* UniPro link is active now */
- ufshcd_set_link_active(hba);
-
- /* Verify device initialization by sending NOP OUT UPIU */
- err = ufshcd_verify_dev_init(hba);
- if (err)
- goto out_release;
-
- /* Initiate UFS initialization, and waiting until completion */
- err = ufshcd_complete_dev_init(hba);
- if (err)
- goto out_release;
-
- err = ufshcd_device_params_init(hba);
- if (err)
- goto out_release;
-
- err = ufshcd_post_device_init(hba);
+ err = ufshcd_full_device_init(hba);
-initialized:
ufshcd_process_probe_result(hba, probe_start, err);
if (err)
goto out_release;
--
2.25.1
More information about the Linux-rockchip
mailing list