scsi: ufs: Select INITIAL ADAPT type for HS Gear4
authorCan Guo <cang@codeaurora.org>
Wed, 12 Feb 2020 05:38:29 +0000 (21:38 -0800)
committerMartin K. Petersen <martin.petersen@oracle.com>
Thu, 13 Feb 2020 00:34:22 +0000 (19:34 -0500)
ADAPT is added specifically for HS Gear4 mode only. Select INITIAL ADAPT
before power mode change to G4 and select NO ADAPT before switch to non-G4
modes.

[mkp: fixed typo in header file]

Link: https://lore.kernel.org/r/1581485910-8307-3-git-send-email-cang@codeaurora.org
Signed-off-by: Can Guo <cang@codeaurora.org>
Reviewed-by: Avri Altman <avri.altman@wdc.com>
Reviewed-by: Asutosh Das <asutoshd@codeaurora.org>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/scsi/ufs/ufs-qcom.c
drivers/scsi/ufs/unipro.h

index c2e703d58f630b14420137c86197cb251b7a4aed..78849fd097d479b750a94bed5e11c1620b126d6f 100644 (file)
@@ -896,6 +896,20 @@ static int ufs_qcom_pwr_change_notify(struct ufs_hba *hba,
                if (!ufshcd_is_hs_mode(&hba->pwr_info) &&
                        ufshcd_is_hs_mode(dev_req_params))
                        ufs_qcom_dev_ref_clk_ctrl(host, true);
+
+               if (host->hw_ver.major >= 0x4) {
+                       if (dev_req_params->gear_tx == UFS_HS_G4) {
+                               /* INITIAL ADAPT */
+                               ufshcd_dme_set(hba,
+                                              UIC_ARG_MIB(PA_TXHSADAPTTYPE),
+                                              PA_INITIAL_ADAPT);
+                       } else {
+                               /* NO ADAPT */
+                               ufshcd_dme_set(hba,
+                                              UIC_ARG_MIB(PA_TXHSADAPTTYPE),
+                                              PA_NO_ADAPT);
+                       }
+               }
                break;
        case POST_CHANGE:
                if (ufs_qcom_cfg_timers(hba, dev_req_params->gear_rx,
index 3dc4d8b7650939895b785dd5b0b0d56792a34c1c..766d551df3fc8232631c4187fbdad890d2c5b64f 100644 (file)
 #define PA_SLEEPNOCONFIGTIME   0x15A2
 #define PA_STALLNOCONFIGTIME   0x15A3
 #define PA_SAVECONFIGTIME      0x15A4
+#define PA_TXHSADAPTTYPE       0x15D4
+
+/* Adpat type for PA_TXHSADAPTTYPE attribute */
+#define PA_REFRESH_ADAPT       0x00
+#define PA_INITIAL_ADAPT       0x01
+#define PA_NO_ADAPT            0x03
 
 #define PA_TACTIVATE_TIME_UNIT_US      10
 #define PA_HIBERN8_TIME_UNIT_US                100
@@ -203,6 +209,7 @@ enum ufs_hs_gear_tag {
        UFS_HS_G1,              /* HS Gear 1 (default for reset) */
        UFS_HS_G2,              /* HS Gear 2 */
        UFS_HS_G3,              /* HS Gear 3 */
+       UFS_HS_G4,              /* HS Gear 4 */
 };
 
 enum ufs_unipro_ver {