[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20200422065414.GK20318@infradead.org>
Date: Tue, 21 Apr 2020 23:54:14 -0700
From: Christoph Hellwig <hch@...radead.org>
To: Alim Akhtar <alim.akhtar@...sung.com>
Cc: robh@...nel.org, devicetree@...r.kernel.org,
linux-scsi@...r.kernel.org, krzk@...nel.org, avri.altman@....com,
martin.petersen@...cle.com, kwmad.kim@...sung.com,
stanley.chu@...iatek.com, cang@...eaurora.org,
linux-samsung-soc@...r.kernel.org,
linux-arm-kernel@...ts.infradead.org, linux-kernel@...r.kernel.org
Subject: Re: [PATCH v6 04/10] scsi: ufs: introduce
UFSHCD_QUIRK_PRDT_BYTE_GRAN quirk
On Fri, Apr 17, 2020 at 11:29:38PM +0530, Alim Akhtar wrote:
> Some UFS host controllers may think granularities of PRDT length and
> offset as bytes, not double words.
>
> Signed-off-by: Kiwoong Kim <kwmad.kim@...sung.com>
> Signed-off-by: Alim Akhtar <alim.akhtar@...sung.com>
> ---
> drivers/scsi/ufs/ufshcd.c | 30 +++++++++++++++++++++++-------
> drivers/scsi/ufs/ufshcd.h | 6 ++++++
> 2 files changed, 29 insertions(+), 7 deletions(-)
>
> diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c
> index ee30ed6cc805..b32fcedcdcb9 100644
> --- a/drivers/scsi/ufs/ufshcd.c
> +++ b/drivers/scsi/ufs/ufshcd.c
> @@ -2151,8 +2151,14 @@ static int ufshcd_map_sg(struct ufs_hba *hba, struct ufshcd_lrb *lrbp)
> return sg_segments;
>
> if (sg_segments) {
> - lrbp->utr_descriptor_ptr->prd_table_length =
> - cpu_to_le16((u16)sg_segments);
> +
> + if (hba->quirks & UFSHCD_QUIRK_PRDT_BYTE_GRAN)
> + lrbp->utr_descriptor_ptr->prd_table_length =
> + cpu_to_le16((u16)(sg_segments *
> + sizeof(struct ufshcd_sg_entry)));
> + else
> + lrbp->utr_descriptor_ptr->prd_table_length =
> + cpu_to_le16((u16) (sg_segments));
No double words here. "Normal" UFS uses the actual segment count,
while Samsumg uses bytes. Also no need fo the u16 count in
either the old or new version.
Powered by blists - more mailing lists