> -----Original Message----- > From: Stanley Chu <stanley....@mediatek.com> > Sent: Tuesday, April 28, 2020 1:14 PM > To: linux-s...@vger.kernel.org; martin.peter...@oracle.com; > avri.alt...@wdc.com; alim.akh...@samsung.com; j...@linux.ibm.com; > asuto...@codeaurora.org > Cc: Bean Huo (beanhuo) <bean...@micron.com>; c...@codeaurora.org; > matthias....@gmail.com; bvanass...@acm.org; linux- > media...@lists.infradead.org; linux-arm-ker...@lists.infradead.org; linux- > ker...@vger.kernel.org; kuohong.w...@mediatek.com; > peter.w...@mediatek.com; chun-hung...@mediatek.com; > andy.t...@mediatek.com; Stanley Chu <stanley....@mediatek.com> > Subject: [EXT] [PATCH v1 1/4] scsi: ufs: allow legacy UFS devices to enable > WriteBooster > > WriteBooster feature may be supported by some legacy UFS devices (i.e., < 3.1) > by upgrading firmware. > > To enable WriteBooster feature in such devices, relax the entrance condition > of > ufshcd_wb_probe() to allow host driver to check those devices' WriteBooster > capability. > > WriteBooster feature can be available if below both conditions are satisfied, > > 1. Device descriptor has dExtendedUFSFeaturesSupport field. > 2. WriteBooster support is specified in above field. > > Signed-off-by: Stanley Chu <stanley....@mediatek.com> > --- > drivers/scsi/ufs/ufshcd.c | 19 +++++++++++++------ > 1 file changed, 13 insertions(+), 6 deletions(-) > > diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c index > 915e963398c4..111812c5304a 100644 > --- a/drivers/scsi/ufs/ufshcd.c > +++ b/drivers/scsi/ufs/ufshcd.c > @@ -6800,9 +6800,16 @@ static int ufshcd_scsi_add_wlus(struct ufs_hba *hba) > > static void ufshcd_wb_probe(struct ufs_hba *hba, u8 *desc_buf) { > + if (hba->desc_size.dev_desc <= > DEVICE_DESC_PARAM_EXT_UFS_FEATURE_SUP) > + goto wb_disabled; > + > hba->dev_info.d_ext_ufs_feature_sup = > get_unaligned_be32(desc_buf + > > DEVICE_DESC_PARAM_EXT_UFS_FEATURE_SUP); > + > + if (!(hba->dev_info.d_ext_ufs_feature_sup & > UFS_DEV_WRITE_BOOSTER_SUP)) > + goto wb_disabled; > + > /* > * WB may be supported but not configured while provisioning. > * The spec says, in dedicated wb buffer mode, @@ -6818,11 +6825,12 > @@ static void ufshcd_wb_probe(struct ufs_hba *hba, u8 *desc_buf) > hba->dev_info.b_presrv_uspc_en = > desc_buf[DEVICE_DESC_PARAM_WB_PRESRV_USRSPC_EN]; > > - if (!((hba->dev_info.d_ext_ufs_feature_sup & > - UFS_DEV_WRITE_BOOSTER_SUP) && > - hba->dev_info.b_wb_buffer_type && > + if (!(hba->dev_info.b_wb_buffer_type && > hba->dev_info.d_wb_alloc_units)) > - hba->caps &= ~UFSHCD_CAP_WB_EN; > + goto wb_disabled; > + > +wb_disabled: > + hba->caps &= ~UFSHCD_CAP_WB_EN; > } > > static int ufs_get_device_desc(struct ufs_hba *hba) @@ -6862,8 +6870,7 @@ > static int ufs_get_device_desc(struct ufs_hba *hba) > > model_index = desc_buf[DEVICE_DESC_PARAM_PRDCT_NAME]; > > - /* Enable WB only for UFS-3.1 */ > - if (dev_info->wspecversion >= 0x310) > + if (ufshcd_is_wb_allowed(hba)) > ufshcd_wb_probe(hba, desc_buf); > > err = ufshcd_read_string_desc(hba, model_index, > -- > 2.18.0
Reviewed-by: Bean Huo <bean...@micron.com>