Skip to content

Commit e75ff63

Browse files
avri-altman-sndkmartinkpetersen
authored andcommitted
scsi: ufs: core: Maximum RTT supported by the host driver
Allow platform vendors to take precedence having their own max rtt support. This makes sense because the host controller's nortt characteristic may vary among vendors. while at it, set this value for Mediatek, as requested by Peter - https://lore.kernel.org/all/[email protected]/ Signed-off-by: Avri Altman <[email protected]> Link: https://lore.kernel.org/r/[email protected] Reviewed-by: Peter Wang <[email protected]> Reviewed-by: Bart Van Assche <[email protected]> Signed-off-by: Martin K. Petersen <[email protected]>
1 parent 9ec5493 commit e75ff63

File tree

4 files changed

+10
-1
lines changed

4 files changed

+10
-1
lines changed

drivers/ufs/core/ufshcd.c

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8131,6 +8131,8 @@ static void ufshcd_set_rtt(struct ufs_hba *hba)
81318131
struct ufs_dev_info *dev_info = &hba->dev_info;
81328132
u32 rtt = 0;
81338133
u32 dev_rtt = 0;
8134+
int host_rtt_cap = hba->vops && hba->vops->max_num_rtt ?
8135+
hba->vops->max_num_rtt : hba->nortt;
81348136

81358137
/* RTT override makes sense only for UFS-4.0 and above */
81368138
if (dev_info->wspecversion < 0x400)
@@ -8146,7 +8148,8 @@ static void ufshcd_set_rtt(struct ufs_hba *hba)
81468148
if (dev_rtt != DEFAULT_MAX_NUM_RTT)
81478149
return;
81488150

8149-
rtt = min_t(int, dev_info->rtt_cap, hba->nortt);
8151+
rtt = min_t(int, dev_info->rtt_cap, host_rtt_cap);
8152+
81508153
if (rtt == dev_rtt)
81518154
return;
81528155

drivers/ufs/host/ufs-mediatek.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1785,6 +1785,7 @@ static int ufs_mtk_config_esi(struct ufs_hba *hba)
17851785
*/
17861786
static const struct ufs_hba_variant_ops ufs_hba_mtk_vops = {
17871787
.name = "mediatek.ufshci",
1788+
.max_num_rtt = MTK_MAX_NUM_RTT,
17881789
.init = ufs_mtk_init,
17891790
.get_ufs_hci_version = ufs_mtk_get_ufs_hci_version,
17901791
.setup_clocks = ufs_mtk_setup_clocks,

drivers/ufs/host/ufs-mediatek.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -189,4 +189,7 @@ struct ufs_mtk_host {
189189
/* MTK delay of autosuspend: 500 ms */
190190
#define MTK_RPM_AUTOSUSPEND_DELAY_MS 500
191191

192+
/* MTK RTT support number */
193+
#define MTK_MAX_NUM_RTT 2
194+
192195
#endif /* !_UFS_MEDIATEK_H */

include/ufs/ufshcd.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -295,6 +295,7 @@ struct ufs_pwr_mode_info {
295295
/**
296296
* struct ufs_hba_variant_ops - variant specific callbacks
297297
* @name: variant name
298+
* @max_num_rtt: maximum RTT supported by the host
298299
* @init: called when the driver is initialized
299300
* @exit: called to cleanup everything done in init
300301
* @get_ufs_hci_version: called to get UFS HCI version
@@ -332,6 +333,7 @@ struct ufs_pwr_mode_info {
332333
*/
333334
struct ufs_hba_variant_ops {
334335
const char *name;
336+
int max_num_rtt;
335337
int (*init)(struct ufs_hba *);
336338
void (*exit)(struct ufs_hba *);
337339
u32 (*get_ufs_hci_version)(struct ufs_hba *);

0 commit comments

Comments
 (0)