Commit d34caa89 authored by Adrian Hunter's avatar Adrian Hunter Committed by Martin K. Petersen
Browse files

scsi: ufs: core: Add a quirk to suppress link_startup_again



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: 7dc9fb47 ("scsi: ufs: ufs-pci: Add support for Intel ADL")
Cc: stable@vger.kernel.org
Signed-off-by: default avatarAdrian Hunter <adrian.hunter@intel.com>
Reviewed-by: default avatarBart Van Assche <bvanassche@acm.org>
Link: https://patch.msgid.link/20251024085918.31825-3-adrian.hunter@intel.com


Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
parent bb44826c
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -5066,7 +5066,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:
+7 −0
Original line number Diff line number Diff line
@@ -688,6 +688,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 {