diff mbox series

[v5,01/15] scsi: ufs: add quirk to handle broken UIC command

Message ID 20211018124216.153072-2-chanho61.park@samsung.com (mailing list archive)
State Not Applicable
Headers show
Series introduce exynosauto v9 ufs driver | expand

Commit Message

Chanho Park Oct. 18, 2021, 12:42 p.m. UTC
From: jongmin jeong <jjmin.jeong@samsung.com>

samsung ExynosAuto9 SoC has two types of host controller interface to
support the virtualization of UFS Device.
One is the physical host(PH) that the same as conventaional UFSHCI,
and the other is the virtual host(VH) that support data transfer function
only.

In this structure, the virtual host does not support UIC command.
To support this, we add the quirk and return 0 when the UIC command
send function is called.

Cc: Alim Akhtar <alim.akhtar@samsung.com>
Cc: James E.J. Bottomley <jejb@linux.ibm.com>
Cc: Martin K. Petersen <martin.petersen@oracle.com>
Cc: Bart Van Assche <bvanassche@acm.org>
Reviewed-by: Alim Akhtar <alim.akhtar@samsung.com>
Signed-off-by: jongmin jeong <jjmin.jeong@samsung.com>
Signed-off-by: Chanho Park <chanho61.park@samsung.com>
---
 drivers/scsi/ufs/ufshcd.c | 3 +++
 drivers/scsi/ufs/ufshcd.h | 6 ++++++
 2 files changed, 9 insertions(+)

Comments

Martin K. Petersen Oct. 28, 2021, 3:18 a.m. UTC | #1
Chanho,

> samsung ExynosAuto9 SoC has two types of host controller interface to
> support the virtualization of UFS Device.  One is the physical
> host(PH) that the same as conventaional UFSHCI, and the other is the
> virtual host(VH) that support data transfer function only.

Applied to 5.16/scsi-staging, thanks! I skipped the dt-bindings patches
since the relevant yaml file is not yet upstream.
Chanho Park Oct. 28, 2021, 4:32 a.m. UTC | #2
> Applied to 5.16/scsi-staging, thanks! I skipped the dt-bindings patches
> since the relevant yaml file is not yet upstream.

Thanks. It has a dependency with the exynos,ufs dt-binding patch of Rob's
tree.

https://git.kernel.org/pub/scm/linux/kernel/git/robh/linux.git/commit/?h=dt/
linus&id=e22e509c1cd90b48ae31099905418de74515e56f

Dear Rob,
Could you pick them up on your tree?

https://lore.kernel.org/linux-scsi/20211018124216.153072-1-chanho61.park@sam
sung.com/T/#m16a3920d16ae8843a78fdbefbb402bd321e5ab31
https://lore.kernel.org/linux-scsi/20211018124216.153072-1-chanho61.park@sam
sung.com/T/#mc9380270b1cdab2be6660444fd2f318b29caf182

Best Regards,
Chanho Park
diff mbox series

Patch

diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c
index bd5a088f12c4..3dbfae32599c 100644
--- a/drivers/scsi/ufs/ufshcd.c
+++ b/drivers/scsi/ufs/ufshcd.c
@@ -2323,6 +2323,9 @@  int ufshcd_send_uic_cmd(struct ufs_hba *hba, struct uic_command *uic_cmd)
 	int ret;
 	unsigned long flags;
 
+	if (hba->quirks & UFSHCD_QUIRK_BROKEN_UIC_CMD)
+		return 0;
+
 	ufshcd_hold(hba, false);
 	mutex_lock(&hba->uic_cmd_mutex);
 	ufshcd_add_delay_before_dme_cmd(hba);
diff --git a/drivers/scsi/ufs/ufshcd.h b/drivers/scsi/ufs/ufshcd.h
index 64ce723327b9..5d39aeb2bccb 100644
--- a/drivers/scsi/ufs/ufshcd.h
+++ b/drivers/scsi/ufs/ufshcd.h
@@ -589,6 +589,12 @@  enum ufshcd_quirks {
 	 * This quirk allows only sg entries aligned with page size.
 	 */
 	UFSHCD_QUIRK_ALIGN_SG_WITH_PAGE_SIZE		= 1 << 14,
+
+	/*
+	 * This quirk needs to be enabled if the host controller does not
+	 * support UIC command
+	 */
+	UFSHCD_QUIRK_BROKEN_UIC_CMD			= 1 << 15,
 };
 
 enum ufshcd_caps {