> -----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>

Reply via email to