scsi: ufs: pass device information to apply_dev_quirks
authorStanley Chu <stanley.chu@mediatek.com>
Sat, 11 Jan 2020 07:11:46 +0000 (15:11 +0800)
committerMartin K. Petersen <martin.petersen@oracle.com>
Thu, 16 Jan 2020 03:23:13 +0000 (22:23 -0500)
Pass UFS device information to vendor-specific variant callback
"apply_dev_quirks" because some platform vendors need to know such
information to apply special handling or quirks in specific devices.

At the same time, modify existing vendor implementations according to the
new interface for those vendor drivers which will be built-in or built as a
module alone with UFS core driver.

[mkp: clarified commit desc]

Cc: Alim Akhtar <alim.akhtar@samsung.com>
Cc: Asutosh Das <asutoshd@codeaurora.org>
Cc: Avri Altman <avri.altman@wdc.com>
Cc: Bart Van Assche <bvanassche@acm.org>
Cc: Bean Huo <beanhuo@micron.com>
Cc: Can Guo <cang@codeaurora.org>
Cc: Matthias Brugger <matthias.bgg@gmail.com>
Link: https://lore.kernel.org/r/1578726707-6596-2-git-send-email-stanley.chu@mediatek.com
Reviewed-by: Avri Altman <avri.altman@wdc.com>
Reviewed-by: Bean Huo <beanhuo@micron.com>
Signed-off-by: Stanley Chu <stanley.chu@mediatek.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/scsi/ufs/ufs-qcom.c
drivers/scsi/ufs/ufshcd.c
drivers/scsi/ufs/ufshcd.h

index c69c29a1ceb904814c77a3fb6dd0c4295cdf46ff..ebb5c66e069fa48c30f81acde6d410900d7cec76 100644 (file)
@@ -949,7 +949,8 @@ out:
        return err;
 }
 
-static int ufs_qcom_apply_dev_quirks(struct ufs_hba *hba)
+static int ufs_qcom_apply_dev_quirks(struct ufs_hba *hba,
+                                    struct ufs_dev_desc *card)
 {
        int err = 0;
 
index d847426507e72bff8472cbb9125be08be22504c9..bea036ab189a2f57e11c4dc31acde1cc304923b0 100644 (file)
@@ -6804,7 +6804,8 @@ out:
        return ret;
 }
 
-static void ufshcd_tune_unipro_params(struct ufs_hba *hba)
+static void ufshcd_tune_unipro_params(struct ufs_hba *hba,
+                                     struct ufs_dev_desc *card)
 {
        if (ufshcd_is_unipro_pa_params_tuning_req(hba)) {
                ufshcd_tune_pa_tactivate(hba);
@@ -6818,7 +6819,7 @@ static void ufshcd_tune_unipro_params(struct ufs_hba *hba)
        if (hba->dev_quirks & UFS_DEVICE_QUIRK_HOST_PA_TACTIVATE)
                ufshcd_quirk_tune_host_pa_tactivate(hba);
 
-       ufshcd_vops_apply_dev_quirks(hba);
+       ufshcd_vops_apply_dev_quirks(hba, card);
 }
 
 static void ufshcd_clear_dbg_ufs_stats(struct ufs_hba *hba)
@@ -6981,10 +6982,9 @@ static int ufshcd_probe_hba(struct ufs_hba *hba)
        }
 
        ufs_fixup_device_setup(hba, &card);
+       ufshcd_tune_unipro_params(hba, &card);
        ufs_put_device_desc(&card);
 
-       ufshcd_tune_unipro_params(hba);
-
        /* UFS device is also active now */
        ufshcd_set_ufs_dev_active(hba);
        ufshcd_force_reset_auto_bkops(hba);
index de1be6a862b0ed9b2e248689cce76bb3217a6264..b1a1c65be8b16fbc4ba4f8acca4947b7dee0bd19 100644 (file)
@@ -320,7 +320,7 @@ struct ufs_hba_variant_ops {
        void    (*setup_task_mgmt)(struct ufs_hba *, int, u8);
        void    (*hibern8_notify)(struct ufs_hba *, enum uic_cmd_dme,
                                        enum ufs_notify_change_status);
-       int     (*apply_dev_quirks)(struct ufs_hba *);
+       int     (*apply_dev_quirks)(struct ufs_hba *, struct ufs_dev_desc *);
        int     (*suspend)(struct ufs_hba *, enum ufs_pm_op);
        int     (*resume)(struct ufs_hba *, enum ufs_pm_op);
        void    (*dbg_register_dump)(struct ufs_hba *hba);
@@ -1054,10 +1054,11 @@ static inline void ufshcd_vops_hibern8_notify(struct ufs_hba *hba,
                return hba->vops->hibern8_notify(hba, cmd, status);
 }
 
-static inline int ufshcd_vops_apply_dev_quirks(struct ufs_hba *hba)
+static inline int ufshcd_vops_apply_dev_quirks(struct ufs_hba *hba,
+                                              struct ufs_dev_desc *card)
 {
        if (hba->vops && hba->vops->apply_dev_quirks)
-               return hba->vops->apply_dev_quirks(hba);
+               return hba->vops->apply_dev_quirks(hba, card);
        return 0;
 }