]> 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>
Mon, 10 Nov 2025 11:58:57 +0000 (06:58 -0500)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sat, 6 Dec 2025 21:12:36 +0000 (06:12 +0900)
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 d78ac2817c1ff31ffd2f43a446d31074739c27f9..1120e83f781ebdf9f9fbc7e530c3c1675378cbb2 100644 (file)
@@ -4778,7 +4778,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 0a56374064856d5296cca3df360f4ef2c85f224c..54bcbfe66163ec56763a7f2e5550dab23e4a88f8 100644 (file)
@@ -592,6 +592,13 @@ enum ufshcd_quirks {
         * auto-hibernate capability but it's FASTAUTO only.
         */
        UFSHCD_QUIRK_HIBERN_FASTAUTO                    = 1 << 18,
+
+       /*
+        * 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 << 19,
 };
 
 enum ufshcd_caps {