]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
scsi: ufs: core: Add a quirk to suppress link_startup_again
authorAdrian Hunter <adrian.hunter@intel.com>
Fri, 24 Oct 2025 08:59:16 +0000 (11:59 +0300)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 13 Nov 2025 20:37:48 +0000 (15:37 -0500)
commit d34caa89a132cd69efc48361d4772251546fdb88 upstream.

ufshcd_link_startup() has a facility (link_startup_again) to issue
DME_LINKSTARTUP a 2nd time even though the 1st time was successful.

Some older hardware benefits from that, however the behaviour is
non-standard, and has been found to cause link startup to be unreliable
for some Intel Alder Lake based host controllers.

Add UFSHCD_QUIRK_PERFORM_LINK_STARTUP_ONCE to suppress
link_startup_again, in preparation for setting the quirk for affected
controllers.

Fixes: 7dc9fb47bc9a ("scsi: ufs: ufs-pci: Add support for Intel ADL")
Cc: stable@vger.kernel.org
Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
Reviewed-by: Bart Van Assche <bvanassche@acm.org>
Link: https://patch.msgid.link/20251024085918.31825-3-adrian.hunter@intel.com
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/ufs/core/ufshcd.c
include/ufs/ufshcd.h

index 9e10287d5d6beaf728b24b8ed27062a9bd535eba..e8fc80c41a43cc025ab45fa9176275627aa731ac 100644 (file)
@@ -5060,7 +5060,8 @@ static int ufshcd_link_startup(struct ufs_hba *hba)
         * If UFS device isn't active then we will have to issue link startup
         * 2 times to make sure the device state move to active.
         */
-       if (!ufshcd_is_ufs_dev_active(hba))
+       if (!(hba->quirks & UFSHCD_QUIRK_PERFORM_LINK_STARTUP_ONCE) &&
+           !ufshcd_is_ufs_dev_active(hba))
                link_startup_again = true;
 
 link_startup:
index a060fa71b2b1bb68029a8f48ffa5359e94d9a6da..ace8b9c33f1f96fbed4a95fb85becaedf1362bc4 100644 (file)
@@ -689,6 +689,13 @@ enum ufshcd_quirks {
         * single doorbell mode.
         */
        UFSHCD_QUIRK_BROKEN_LSDBS_CAP                   = 1 << 25,
+
+       /*
+        * This quirk indicates that DME_LINKSTARTUP should not be issued a 2nd
+        * time (refer link_startup_again) after the 1st time was successful,
+        * because it causes link startup to become unreliable.
+        */
+       UFSHCD_QUIRK_PERFORM_LINK_STARTUP_ONCE          = 1 << 26,
 };
 
 enum ufshcd_caps {