From: Alim Akhtar <alim.akhtar@samsung.com>
To: amit daniel kachhap <amit.daniel@samsung.com>
Cc: linux-scsi@vger.kernel.org,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
vinholikatti@gmail.com, JBottomley@odin.com,
Seungwon Jeon <tgih.jun@samsung.com>
Subject: Re: [PATCH 02/10] scsi: ufs: add quirk to contain unconformable utrd field
Date: Fri, 28 Aug 2015 15:03:33 +0530 [thread overview]
Message-ID: <55E02AED.8060209@samsung.com> (raw)
In-Reply-To: <CADGdYn4NFms4bjOf+EBnzH3umz4wSPSn9dGGnVgNbs3v6u4m+g@mail.gmail.com>
Hi Amit,
Thanks for your review comments.
On 08/26/2015 11:43 AM, amit daniel kachhap wrote:
> Few minor comments below,
>
> On Fri, Aug 21, 2015 at 2:57 PM, Alim Akhtar <alim.akhtar@samsung.com> wrote:
>> From: Seungwon Jeon <tgih.jun@samsung.com>
>>
>> UTRD(UTP Transfer Request Descriptor)'s field such as offset/length,
>> especially response's has DWORD expression. This quirk can be specified
>> for host controller not to conform standard.
>>
>> Signed-off-by: Seungwon Jeon <tgih.jun@samsung.com>
>> Signed-off-by: Alim Akhtar <alim.akhtar@samsung.com>
>> ---
>> drivers/scsi/ufs/ufshcd.c | 28 +++++++++++++++++++++-------
>> drivers/scsi/ufs/ufshcd.h | 7 +++++++
>> 2 files changed, 28 insertions(+), 7 deletions(-)
>>
>> diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c
>> index b0ade73..f882bf0 100644
>> --- a/drivers/scsi/ufs/ufshcd.c
>> +++ b/drivers/scsi/ufs/ufshcd.c
>> @@ -1009,7 +1009,7 @@ ufshcd_send_uic_cmd(struct ufs_hba *hba, struct uic_command *uic_cmd)
>> *
>> * Returns 0 in case of success, non-zero value in case of failure
>> */
>> -static int ufshcd_map_sg(struct ufshcd_lrb *lrbp)
>> +static int ufshcd_map_sg(struct ufs_hba *hba, struct ufshcd_lrb *lrbp)
>> {
>> struct ufshcd_sg_entry *prd_table;
>> struct scatterlist *sg;
>> @@ -1023,8 +1023,13 @@ static int ufshcd_map_sg(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 & UFSHCI_QUIRK_BROKEN_UTRD)
>> + 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));
>>
>> prd_table = (struct ufshcd_sg_entry *)lrbp->ucd_prdt_ptr;
>>
>> @@ -1347,7 +1352,7 @@ static int ufshcd_queuecommand(struct Scsi_Host *host, struct scsi_cmnd *cmd)
>>
>> /* form UPIU before issuing the command */
>> ufshcd_compose_upiu(hba, lrbp);
>> - err = ufshcd_map_sg(lrbp);
>> + err = ufshcd_map_sg(hba, lrbp);
>> if (err) {
>> lrbp->cmd = NULL;
>> clear_bit_unlock(tag, &hba->lrb_in_use);
>> @@ -2035,12 +2040,21 @@ static void ufshcd_host_memory_configure(struct ufs_hba *hba)
>> cpu_to_le32(upper_32_bits(cmd_desc_element_addr));
>>
>> /* Response upiu and prdt offset should be in double words */
> This comment can be moved below for the else case.
ok
>> - utrdlp[i].response_upiu_offset =
>> + if (hba->quirks & UFSHCI_QUIRK_BROKEN_UTRD) {
>> + utrdlp[i].response_upiu_offset =
>> + cpu_to_le16(response_offset);
>> + utrdlp[i].prd_table_offset =
>> + cpu_to_le16(prdt_offset);
>> + utrdlp[i].response_upiu_length =
>> + cpu_to_le16(ALIGNED_UPIU_SIZE);
>> + } else {
>> + utrdlp[i].response_upiu_offset =
>> cpu_to_le16((response_offset >> 2));
>> - utrdlp[i].prd_table_offset =
>> + utrdlp[i].prd_table_offset =
>> cpu_to_le16((prdt_offset >> 2));
>> - utrdlp[i].response_upiu_length =
>> + utrdlp[i].response_upiu_length =
>> cpu_to_le16(ALIGNED_UPIU_SIZE >> 2);
>> + }
>>
>> hba->lrb[i].utr_descriptor_ptr = (utrdlp + i);
>> hba->lrb[i].ucd_req_ptr =
>> diff --git a/drivers/scsi/ufs/ufshcd.h b/drivers/scsi/ufs/ufshcd.h
>> index c40a0e7..1fa5ac1 100644
>> --- a/drivers/scsi/ufs/ufshcd.h
>> +++ b/drivers/scsi/ufs/ufshcd.h
>> @@ -459,6 +459,13 @@ struct ufs_hba {
>> */
>> #define UFSHCD_QUIRK_BROKEN_UFS_HCI_VERSION UFS_BIT(5)
>>
>> + /*
>> + * This quirk needs to be enabled if host controller doesn't conform
>> + * with UTRD. Some fields such as offset/length might not be in double word,
>> + * but in byte.
>> + */
>> + #define UFSHCI_QUIRK_BROKEN_UTRD UFS_BIT(6)
> This macro name may be given more meaningful name such as
> UFSHCI_QUIRK_BYTE_ALIGN_UTRD or something similar.
ok, will change
>> +
>> unsigned int quirks; /* Deviations from standard UFSHCI spec. */
>>
>> wait_queue_head_t tm_wq;
>> --
>> 1.7.10.4
>>
>> --
>> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
>> the body of a message to majordomo@vger.kernel.org
>> More majordomo info at http://vger.kernel.org/majordomo-info.html
>> Please read the FAQ at http://www.tux.org/lkml/
>
next prev parent reply other threads:[~2015-08-28 9:33 UTC|newest]
Thread overview: 29+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-08-21 9:27 [PATCH 00/10] exynos-ufs: add support for Exynos Alim Akhtar
2015-08-21 9:27 ` [PATCH 01/10] phy: exynos-ufs: add UFS PHY driver for EXYNOS SoC Alim Akhtar
2015-08-23 22:45 ` Alexey Klimov
2015-08-28 13:01 ` Alim Akhtar
2015-08-26 6:09 ` amit daniel kachhap
2015-09-18 5:35 ` Kishon Vijay Abraham I
2015-09-18 5:35 ` Kishon Vijay Abraham I
2015-10-01 4:28 ` Alim Akhtar
2015-08-21 9:27 ` [PATCH 02/10] scsi: ufs: add quirk to contain unconformable utrd field Alim Akhtar
2015-08-26 6:13 ` amit daniel kachhap
2015-08-28 9:33 ` Alim Akhtar [this message]
2015-08-21 9:27 ` [PATCH 03/10] scsi: ufs: add quirk to fix mishandling utrlclr/utmrlclr Alim Akhtar
2015-08-21 9:27 ` [PATCH 04/10] scsi: ufs: add quirk not to allow reset of interrupt aggregation Alim Akhtar
2015-08-26 6:16 ` amit daniel kachhap
2015-09-17 8:30 ` Alim Akhtar
2015-08-21 9:27 ` [PATCH 05/10] scsi: ufs: add quirk to enable host controller without hce Alim Akhtar
2015-08-21 9:27 ` [PATCH 06/10] scsi: ufs: add specific callback for nexus type Alim Akhtar
2015-08-21 9:27 ` [PATCH 07/10] scsi: ufs: add add specific callback for hibern8 Alim Akhtar
2015-08-26 6:21 ` amit daniel kachhap
2015-09-17 8:31 ` Alim Akhtar
2015-08-21 9:27 ` [PATCH 08/10] scsi: ufs: make ufshcd_config_pwr_mode of non-static func Alim Akhtar
2015-08-26 6:23 ` amit daniel kachhap
2015-09-17 8:33 ` Alim Akhtar
2015-08-21 9:28 ` [PATCH 09/10] scsi: ufs: return value of pwr_change_notify Alim Akhtar
2015-08-26 6:25 ` amit daniel kachhap
2015-09-17 8:33 ` Alim Akhtar
2015-08-21 9:28 ` [PATCH 10/10] scsi: ufs-exynos: add UFS host support for Exynos SoCs Alim Akhtar
2015-08-26 6:42 ` amit daniel kachhap
2015-09-17 5:34 ` Alim Akhtar
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=55E02AED.8060209@samsung.com \
--to=alim.akhtar@samsung.com \
--cc=JBottomley@odin.com \
--cc=amit.daniel@samsung.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-scsi@vger.kernel.org \
--cc=tgih.jun@samsung.com \
--cc=vinholikatti@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.