> -----Original Message----- > From: Stanley Chu <stanley.chu@xxxxxxxxxxxx> > Sent: Tuesday, April 28, 2020 1:14 PM > To: linux-scsi@xxxxxxxxxxxxxxx; martin.petersen@xxxxxxxxxx; > avri.altman@xxxxxxx; alim.akhtar@xxxxxxxxxxx; jejb@xxxxxxxxxxxxx; > asutoshd@xxxxxxxxxxxxxx > Cc: Bean Huo (beanhuo) <beanhuo@xxxxxxxxxx>; cang@xxxxxxxxxxxxxx; > matthias.bgg@xxxxxxxxx; bvanassche@xxxxxxx; linux- > mediatek@xxxxxxxxxxxxxxxxxxx; linux-arm-kernel@xxxxxxxxxxxxxxxxxxx; linux- > kernel@xxxxxxxxxxxxxxx; kuohong.wang@xxxxxxxxxxxx; > peter.wang@xxxxxxxxxxxx; chun-hung.wu@xxxxxxxxxxxx; > andy.teng@xxxxxxxxxxxx; Stanley Chu <stanley.chu@xxxxxxxxxxxx> > 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.chu@xxxxxxxxxxxx> > --- > 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 <beanhuo@xxxxxxxxxx>