Message ID | 20210917065436.145629-2-chanho61.park@samsung.com (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | [v3,01/17] scsi: ufs: add quirk to handle broken UIC command | expand |
Hi Chanho >-----Original Message----- >From: Chanho Park [mailto:chanho61.park@samsung.com] >Sent: Friday, September 17, 2021 12:24 PM >To: Alim Akhtar <alim.akhtar@samsung.com>; Avri Altman ><avri.altman@wdc.com>; James E . J . Bottomley <jejb@linux.ibm.com>; Martin >K . Petersen <martin.petersen@oracle.com>; Krzysztof Kozlowski ><krzysztof.kozlowski@canonical.com> >Cc: Bean Huo <beanhuo@micron.com>; Bart Van Assche ><bvanassche@acm.org>; Adrian Hunter <adrian.hunter@intel.com>; Christoph >Hellwig <hch@infradead.org>; Can Guo <cang@codeaurora.org>; Jaegeuk Kim ><jaegeuk@kernel.org>; Gyunghoon Kwon <goodjob.kwon@samsung.com>; >linux-samsung-soc@vger.kernel.org; linux-scsi@vger.kernel.org; jongmin jeong ><jjmin.jeong@samsung.com>; Chanho Park <chanho61.park@samsung.com> >Subject: [PATCH v3 01/17] scsi: ufs: add quirk to handle broken UIC command > >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> >Signed-off-by: jongmin jeong <jjmin.jeong@samsung.com> >Signed-off-by: Chanho Park <chanho61.park@samsung.com> >--- Reviewed-by: Alim Akhtar <alim.akhtar@samsung.com> > drivers/scsi/ufs/ufshcd.c | 3 +++ > drivers/scsi/ufs/ufshcd.h | 6 ++++++ > 2 files changed, 9 insertions(+) > >diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c index >3841ab49f556..8a45e8c05965 100644 >--- a/drivers/scsi/ufs/ufshcd.c >+++ b/drivers/scsi/ufs/ufshcd.c >@@ -2324,6 +2324,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 >52ea6f350b18..e1d8fd432614 100644 >--- a/drivers/scsi/ufs/ufshcd.h >+++ b/drivers/scsi/ufs/ufshcd.h >@@ -588,6 +588,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 { >-- >2.33.0
diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c index 3841ab49f556..8a45e8c05965 100644 --- a/drivers/scsi/ufs/ufshcd.c +++ b/drivers/scsi/ufs/ufshcd.c @@ -2324,6 +2324,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 52ea6f350b18..e1d8fd432614 100644 --- a/drivers/scsi/ufs/ufshcd.h +++ b/drivers/scsi/ufs/ufshcd.h @@ -588,6 +588,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 {