]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
scsi: ufs: core: Add a quirk for extended TX EQTR Adapt L0L1L2L3 length
authorCan Guo <can.guo@oss.qualcomm.com>
Fri, 1 May 2026 13:16:40 +0000 (06:16 -0700)
committerMartin K. Petersen <martin.petersen@oracle.com>
Sat, 23 May 2026 01:14:59 +0000 (21:14 -0400)
Add a quirk to support TX Equalization Training (EQTR) using Adapt
L0L1L2L3 length which is larger than what is allowed by M-PHY spec ver
6.0.

Signed-off-by: Can Guo <can.guo@oss.qualcomm.com>
Reviewed-by: Bean Huo <beanhuo@micron.com>
Reviewed-by: Bart Van Assche <bvanassche@acm.org>
Reviewed-by: Peter Wang <peter.wang@mediatek.com>
Reviewed-by: Ziqi Chen <ziqi.chen@oss.qualcomm.com>
Link: https://patch.msgid.link/20260501131641.826258-2-can.guo@oss.qualcomm.com
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/ufs/core/ufs-txeq.c
include/ufs/ufshcd.h

index 4b264adfdf49a278a64753a7497977f0542afc0c..aa64f2bf4f1efc4b438984b41ad44d1deb77c5ff 100644 (file)
@@ -885,7 +885,9 @@ static int ufshcd_setup_tx_eqtr_adapt_length(struct ufs_hba *hba,
                if (adapt_l0l1l2l3_cap_local > ADAPT_L0L1L2L3_LENGTH_MAX) {
                        dev_err(hba->dev, "local RX_HS_G%u_ADAPT_INITIAL_L0L1L2L3_CAP (0x%x) exceeds MAX\n",
                                gear, adapt_l0l1l2l3_cap_local);
-                       return -EINVAL;
+
+                       if (!(hba->quirks & UFSHCD_QUIRK_EXTENDED_TX_EQTR_ADAPT_LENGTH_L0L1L2L3))
+                               return -EINVAL;
                }
 
                ret = ufshcd_dme_get(hba, UIC_ARG_MIB(PA_PEERRXHSG6ADAPTINITIALL0L1L2L3),
@@ -896,7 +898,9 @@ static int ufshcd_setup_tx_eqtr_adapt_length(struct ufs_hba *hba,
                if (adapt_l0l1l2l3_cap_peer > ADAPT_L0L1L2L3_LENGTH_MAX) {
                        dev_err(hba->dev, "peer RX_HS_G%u_ADAPT_INITIAL_L0L1L2L3_CAP (0x%x) exceeds MAX\n",
                                gear, adapt_l0l1l2l3_cap_peer);
-                       return -EINVAL;
+
+                       if (!(hba->quirks & UFSHCD_QUIRK_EXTENDED_TX_EQTR_ADAPT_LENGTH_L0L1L2L3))
+                               return -EINVAL;
                }
 
                t_adapt_l0l1l2l3_local = adapt_cap_to_t_adapt_l0l1l2l3(adapt_l0l1l2l3_cap_local);
index f48d6416e299377665b0fb728b169f242148a808..3eaae082329c95d4b70dda9924f768af1732ff6d 100644 (file)
@@ -806,6 +806,13 @@ enum ufshcd_quirks {
         * delay after enabling VCC to ensure it's stable.
         */
        UFSHCD_QUIRK_VCC_ON_DELAY                       = 1 << 27,
+
+       /*
+        * This quirk indicates that Host supports TX Equalization Training
+        * (EQTR) using Adapt L0L1L2L3 length which is larger than what is
+        * allowed by M-PHY spec ver 6.0.
+        */
+       UFSHCD_QUIRK_EXTENDED_TX_EQTR_ADAPT_LENGTH_L0L1L2L3     = 1 << 28,
 };
 
 enum ufshcd_caps {