| From 010e4ec7f9dc3c68bb0755c5344a5f357107613b Mon Sep 17 00:00:00 2001 |
| From: Stanley Chu <stanley.chu@mediatek.com> |
| Date: Sat, 11 Jan 2020 15:11:46 +0800 |
| Subject: [PATCH] scsi: ufs: pass device information to apply_dev_quirks |
| |
| commit c40ad6b7fcd35bc4d36db820c7737e1aa18d5d41 upstream. |
| |
| 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> |
| Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com> |
| |
| diff --git a/drivers/scsi/ufs/ufs-qcom.c b/drivers/scsi/ufs/ufs-qcom.c |
| index b4d1b5c22987..63413173b80e 100644 |
| --- a/drivers/scsi/ufs/ufs-qcom.c |
| +++ b/drivers/scsi/ufs/ufs-qcom.c |
| @@ -903,7 +903,8 @@ static int ufs_qcom_quirk_host_pa_saveconfigtime(struct ufs_hba *hba) |
| 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; |
| |
| diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c |
| index 1d4afdc1d5c5..60f2a989c872 100644 |
| --- a/drivers/scsi/ufs/ufshcd.c |
| +++ b/drivers/scsi/ufs/ufshcd.c |
| @@ -6641,7 +6641,8 @@ static int ufshcd_quirk_tune_host_pa_tactivate(struct ufs_hba *hba) |
| 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); |
| @@ -6655,7 +6656,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) |
| @@ -6827,7 +6828,7 @@ static int ufshcd_probe_hba(struct ufs_hba *hba) |
| } |
| |
| ufs_fixup_device_setup(hba, &card); |
| - ufshcd_tune_unipro_params(hba); |
| + ufshcd_tune_unipro_params(hba, &card); |
| |
| /* UFS device is also active now */ |
| ufshcd_set_ufs_dev_active(hba); |
| diff --git a/drivers/scsi/ufs/ufshcd.h b/drivers/scsi/ufs/ufshcd.h |
| index 8f88242b0b5d..b5b3d29eec9c 100644 |
| --- a/drivers/scsi/ufs/ufshcd.h |
| +++ b/drivers/scsi/ufs/ufshcd.h |
| @@ -321,7 +321,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); |
| @@ -1014,10 +1014,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; |
| } |
| |
| -- |
| 2.7.4 |
| |