All of lore.kernel.org
 help / color / mirror / Atom feed
From: Alim Akhtar <alim.akhtar@samsung.com>
To: linux-scsi@vger.kernel.org, linux-kernel@vger.kernel.org
Cc: JBottomley@odin.com, vinholikatti@gmail.com,
	amit.daniel@samsung.com, essuuj@gmail.com,
	devicetree@vger.kernel.org, alim.akhtar@samsung.com,
	arnd@arndb.de
Subject: [PATCH v4 04/11] scsi: ufs: add quirk to fix mishandling utrlclr/utmrlclr
Date: Wed, 14 Oct 2015 18:25:44 +0530	[thread overview]
Message-ID: <1444827351-24128-5-git-send-email-alim.akhtar@samsung.com> (raw)
In-Reply-To: <1444827351-24128-1-git-send-email-alim.akhtar@samsung.com>

From: Seungwon Jeon <essuuj@gmail.com>

In the right behavior, setting the bit to '0' indicates clear and
'1' indicates no change. If host contoller handles this the other way,
UFSHCI_QUIRK_BROKEN_REQ_LIST_CLR can be used.

Signed-off-by: Seungwon Jeon <essuuj@gmail.com>
Signed-off-by: Alim Akhtar <alim.akhtar@samsung.com>
---
 drivers/scsi/ufs/ufshcd.c |   21 +++++++++++++++++++--
 drivers/scsi/ufs/ufshcd.h |    5 +++++
 2 files changed, 24 insertions(+), 2 deletions(-)

diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c
index 587a9c8fbfe9..2b16eb363203 100644
--- a/drivers/scsi/ufs/ufshcd.c
+++ b/drivers/scsi/ufs/ufshcd.c
@@ -356,7 +356,24 @@ static inline void ufshcd_put_tm_slot(struct ufs_hba *hba, int slot)
  */
 static inline void ufshcd_utrl_clear(struct ufs_hba *hba, u32 pos)
 {
-	ufshcd_writel(hba, ~(1 << pos), REG_UTP_TRANSFER_REQ_LIST_CLEAR);
+	if (hba->quirks & UFSHCI_QUIRK_BROKEN_REQ_LIST_CLR)
+		ufshcd_writel(hba, (1 << pos), REG_UTP_TRANSFER_REQ_LIST_CLEAR);
+	else
+		ufshcd_writel(hba, ~(1 << pos),
+				REG_UTP_TRANSFER_REQ_LIST_CLEAR);
+}
+
+/**
+ * ufshcd_utmrl_clear - Clear a bit in UTRMLCLR register
+ * @hba: per adapter instance
+ * @pos: position of the bit to be cleared
+ */
+static inline void ufshcd_utmrl_clear(struct ufs_hba *hba, u32 pos)
+{
+	if (hba->quirks & UFSHCI_QUIRK_BROKEN_REQ_LIST_CLR)
+		ufshcd_writel(hba, (1 << pos), REG_UTP_TASK_REQ_LIST_CLEAR);
+	else
+		ufshcd_writel(hba, ~(1 << pos), REG_UTP_TASK_REQ_LIST_CLEAR);
 }
 
 /**
@@ -3685,7 +3702,7 @@ static int ufshcd_clear_tm_cmd(struct ufs_hba *hba, int tag)
 		goto out;
 
 	spin_lock_irqsave(hba->host->host_lock, flags);
-	ufshcd_writel(hba, ~(1 << tag), REG_UTP_TASK_REQ_LIST_CLEAR);
+	ufshcd_utmrl_clear(hba, tag);
 	spin_unlock_irqrestore(hba->host->host_lock, flags);
 
 	/* poll for max. 1 sec to clear door bell register by h/w */
diff --git a/drivers/scsi/ufs/ufshcd.h b/drivers/scsi/ufs/ufshcd.h
index 6cd542a803d5..d625d01110b0 100644
--- a/drivers/scsi/ufs/ufshcd.h
+++ b/drivers/scsi/ufs/ufshcd.h
@@ -474,6 +474,11 @@ struct ufs_hba {
 	 */
 	#define UFSHCI_QUIRK_BYTE_ALIGN_UTRD			UFS_BIT(6)
 
+	/*
+	 * Cleaer handling for transfer/task request list is just opposite.
+	 */
+	#define UFSHCI_QUIRK_BROKEN_REQ_LIST_CLR		UFS_BIT(7)
+
 	unsigned int quirks;	/* Deviations from standard UFSHCI spec. */
 
 	wait_queue_head_t tm_wq;
-- 
1.7.10.4


  parent reply	other threads:[~2015-10-14 13:08 UTC|newest]

Thread overview: 29+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-10-14 12:55 [PATCH v4 00/11] exynos-ufs: add support for Exynos Alim Akhtar
2015-10-14 12:55 ` [PATCH v4 01/11] Documentation: samsung-phy: Add dt bindings for UFS Alim Akhtar
2015-10-14 12:55 ` [PATCH v4 02/11] phy: exynos-ufs: add UFS PHY driver for EXYNOS SoC Alim Akhtar
2015-10-14 12:55   ` Alim Akhtar
2015-10-14 16:01   ` Kishon Vijay Abraham I
2015-10-14 16:01     ` Kishon Vijay Abraham I
2015-10-14 16:13     ` Alim Akhtar
2015-10-14 16:22       ` Kishon Vijay Abraham I
2015-10-14 16:22         ` Kishon Vijay Abraham I
2015-10-14 12:55 ` [PATCH v4 03/11] scsi: ufs: add quirk to contain unconformable utrd field Alim Akhtar
2015-10-14 12:55 ` Alim Akhtar [this message]
2015-10-14 12:55 ` [PATCH v4 05/11] scsi: ufs: add quirk not to allow reset of interrupt aggregation Alim Akhtar
2015-10-14 12:55 ` [PATCH v4 06/11] scsi: ufs: add quirk to enable host controller without hce Alim Akhtar
2015-10-14 12:55   ` Alim Akhtar
2015-10-14 12:55 ` [PATCH v4 07/11] scsi: ufs: add specific callback for nexus type Alim Akhtar
2015-10-14 12:55 ` [PATCH v4 08/11] scsi: ufs: add add specific callback for hibern8 Alim Akhtar
2015-10-14 12:55 ` [PATCH v4 09/11] scsi: ufs: make ufshcd_config_pwr_mode of non-static func Alim Akhtar
2015-10-14 12:55 ` [PATCH v4 10/11] Documentation: devicetree: ufs: Add DT bindings for exynos UFS host controller Alim Akhtar
2015-10-14 12:55 ` [PATCH v4 11/11] scsi: ufs-exynos: add UFS host support for Exynos SoCs Alim Akhtar
2015-10-15  3:08   ` Alim Akhtar
2015-10-23 15:18     ` Kishon Vijay Abraham I
2015-10-23 15:18       ` Kishon Vijay Abraham I
2015-10-25 12:04       ` Alim Akhtar
2015-10-25 12:04         ` Alim Akhtar
2015-10-28 12:53         ` Kishon Vijay Abraham I
2015-10-28 12:53           ` Kishon Vijay Abraham I
2015-11-03 11:44           ` Alim Akhtar
2015-11-03 11:44             ` Alim Akhtar
2015-10-22  4:24 ` [PATCH v4 00/11] exynos-ufs: add support for Exynos 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=1444827351-24128-5-git-send-email-alim.akhtar@samsung.com \
    --to=alim.akhtar@samsung.com \
    --cc=JBottomley@odin.com \
    --cc=amit.daniel@samsung.com \
    --cc=arnd@arndb.de \
    --cc=devicetree@vger.kernel.org \
    --cc=essuuj@gmail.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-scsi@vger.kernel.org \
    --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.