Message ID | 20211007080934.108804-2-chanho61.park@samsung.com (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | [v4,01/16] scsi: ufs: add quirk to handle broken UIC command | expand |
> > 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> You forgot to set this quirk / opt for ufs-samsung. Thanks, Avri > --- > 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 > 188de6f91050..7cf8e688aec8 100644 > --- a/drivers/scsi/ufs/ufshcd.c > +++ b/drivers/scsi/ufs/ufshcd.c > @@ -2322,6 +2322,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 > f0da5d3db1fa..5d485d65591f 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 188de6f91050..7cf8e688aec8 100644 --- a/drivers/scsi/ufs/ufshcd.c +++ b/drivers/scsi/ufs/ufshcd.c @@ -2322,6 +2322,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 f0da5d3db1fa..5d485d65591f 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 {