Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

scsi: ufs: pass device information to apply_dev_quirks

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>

authored by

Stanley Chu and committed by
Martin K. Petersen
c40ad6b7 43622697

+10 -8
+2 -1
drivers/scsi/ufs/ufs-qcom.c
··· 949 949 return err; 950 950 } 951 951 952 - static int ufs_qcom_apply_dev_quirks(struct ufs_hba *hba) 952 + static int ufs_qcom_apply_dev_quirks(struct ufs_hba *hba, 953 + struct ufs_dev_desc *card) 953 954 { 954 955 int err = 0; 955 956
+4 -4
drivers/scsi/ufs/ufshcd.c
··· 6804 6804 return ret; 6805 6805 } 6806 6806 6807 - static void ufshcd_tune_unipro_params(struct ufs_hba *hba) 6807 + static void ufshcd_tune_unipro_params(struct ufs_hba *hba, 6808 + struct ufs_dev_desc *card) 6808 6809 { 6809 6810 if (ufshcd_is_unipro_pa_params_tuning_req(hba)) { 6810 6811 ufshcd_tune_pa_tactivate(hba); ··· 6819 6818 if (hba->dev_quirks & UFS_DEVICE_QUIRK_HOST_PA_TACTIVATE) 6820 6819 ufshcd_quirk_tune_host_pa_tactivate(hba); 6821 6820 6822 - ufshcd_vops_apply_dev_quirks(hba); 6821 + ufshcd_vops_apply_dev_quirks(hba, card); 6823 6822 } 6824 6823 6825 6824 static void ufshcd_clear_dbg_ufs_stats(struct ufs_hba *hba) ··· 6982 6981 } 6983 6982 6984 6983 ufs_fixup_device_setup(hba, &card); 6984 + ufshcd_tune_unipro_params(hba, &card); 6985 6985 ufs_put_device_desc(&card); 6986 - 6987 - ufshcd_tune_unipro_params(hba); 6988 6986 6989 6987 /* UFS device is also active now */ 6990 6988 ufshcd_set_ufs_dev_active(hba);
+4 -3
drivers/scsi/ufs/ufshcd.h
··· 320 320 void (*setup_task_mgmt)(struct ufs_hba *, int, u8); 321 321 void (*hibern8_notify)(struct ufs_hba *, enum uic_cmd_dme, 322 322 enum ufs_notify_change_status); 323 - int (*apply_dev_quirks)(struct ufs_hba *); 323 + int (*apply_dev_quirks)(struct ufs_hba *, struct ufs_dev_desc *); 324 324 int (*suspend)(struct ufs_hba *, enum ufs_pm_op); 325 325 int (*resume)(struct ufs_hba *, enum ufs_pm_op); 326 326 void (*dbg_register_dump)(struct ufs_hba *hba); ··· 1054 1054 return hba->vops->hibern8_notify(hba, cmd, status); 1055 1055 } 1056 1056 1057 - static inline int ufshcd_vops_apply_dev_quirks(struct ufs_hba *hba) 1057 + static inline int ufshcd_vops_apply_dev_quirks(struct ufs_hba *hba, 1058 + struct ufs_dev_desc *card) 1058 1059 { 1059 1060 if (hba->vops && hba->vops->apply_dev_quirks) 1060 - return hba->vops->apply_dev_quirks(hba); 1061 + return hba->vops->apply_dev_quirks(hba, card); 1061 1062 return 0; 1062 1063 } 1063 1064