[v5,01/16] ufs: core: Optimize duplicate code to read extended feature
Commit Message
The code to parse the extended feature is duplicated twice
in the ufs core. Replace the duplicated code with a
function.
Signed-off-by: Asutosh Das <quic_asutoshd@quicinc.com>
Reviewed-by: Bart Van Assche <bvanassche@acm.org>
---
drivers/ufs/core/ufshcd.c | 21 +++++++++++++--------
1 file changed, 13 insertions(+), 8 deletions(-)
Comments
On Tue, Nov 22, 2022 at 08:10:14PM -0800, Asutosh Das wrote:
> The code to parse the extended feature is duplicated twice
> in the ufs core. Replace the duplicated code with a
> function.
>
> Signed-off-by: Asutosh Das <quic_asutoshd@quicinc.com>
Reviewed-by: Manivannan Sadhasivam <mani@kernel.org>
Thanks,
Mani
> Reviewed-by: Bart Van Assche <bvanassche@acm.org>
> ---
> drivers/ufs/core/ufshcd.c | 21 +++++++++++++--------
> 1 file changed, 13 insertions(+), 8 deletions(-)
>
> diff --git a/drivers/ufs/core/ufshcd.c b/drivers/ufs/core/ufshcd.c
> index 768cb49..c9d7b78 100644
> --- a/drivers/ufs/core/ufshcd.c
> +++ b/drivers/ufs/core/ufshcd.c
> @@ -215,6 +215,17 @@ ufs_get_desired_pm_lvl_for_dev_link_state(enum ufs_dev_pwr_mode dev_state,
> return UFS_PM_LVL_0;
> }
>
> +static unsigned int ufs_get_ext_ufs_feature(struct ufs_hba *hba,
> + const u8 *desc_buf)
> +{
> + if (hba->desc_size[QUERY_DESC_IDN_DEVICE] <
> + DEVICE_DESC_PARAM_EXT_UFS_FEATURE_SUP + 4)
> + return 0;
> +
> + return get_unaligned_be32(desc_buf +
> + DEVICE_DESC_PARAM_EXT_UFS_FEATURE_SUP);
> +}
> +
> static const struct ufs_dev_quirk ufs_fixups[] = {
> /* UFS cards deviations table */
> { .wmanufacturerid = UFS_VENDOR_MICRON,
> @@ -7584,13 +7595,7 @@ static void ufshcd_wb_probe(struct ufs_hba *hba, const u8 *desc_buf)
> (hba->dev_quirks & UFS_DEVICE_QUIRK_SUPPORT_EXTENDED_FEATURES)))
> goto wb_disabled;
>
> - if (hba->desc_size[QUERY_DESC_IDN_DEVICE] <
> - DEVICE_DESC_PARAM_EXT_UFS_FEATURE_SUP + 4)
> - goto wb_disabled;
> -
> - ext_ufs_feature = get_unaligned_be32(desc_buf +
> - DEVICE_DESC_PARAM_EXT_UFS_FEATURE_SUP);
> -
> + ext_ufs_feature = ufs_get_ext_ufs_feature(hba, desc_buf);
> if (!(ext_ufs_feature & UFS_DEV_WRITE_BOOSTER_SUP))
> goto wb_disabled;
>
> @@ -7644,7 +7649,7 @@ static void ufshcd_temp_notif_probe(struct ufs_hba *hba, const u8 *desc_buf)
> if (!(hba->caps & UFSHCD_CAP_TEMP_NOTIF) || dev_info->wspecversion < 0x300)
> return;
>
> - ext_ufs_feature = get_unaligned_be32(desc_buf + DEVICE_DESC_PARAM_EXT_UFS_FEATURE_SUP);
> + ext_ufs_feature = ufs_get_ext_ufs_feature(hba, desc_buf);
>
> if (ext_ufs_feature & UFS_DEV_LOW_TEMP_NOTIF)
> mask |= MASK_EE_TOO_LOW_TEMP;
> --
> 2.7.4
>
@@ -215,6 +215,17 @@ ufs_get_desired_pm_lvl_for_dev_link_state(enum ufs_dev_pwr_mode dev_state,
return UFS_PM_LVL_0;
}
+static unsigned int ufs_get_ext_ufs_feature(struct ufs_hba *hba,
+ const u8 *desc_buf)
+{
+ if (hba->desc_size[QUERY_DESC_IDN_DEVICE] <
+ DEVICE_DESC_PARAM_EXT_UFS_FEATURE_SUP + 4)
+ return 0;
+
+ return get_unaligned_be32(desc_buf +
+ DEVICE_DESC_PARAM_EXT_UFS_FEATURE_SUP);
+}
+
static const struct ufs_dev_quirk ufs_fixups[] = {
/* UFS cards deviations table */
{ .wmanufacturerid = UFS_VENDOR_MICRON,
@@ -7584,13 +7595,7 @@ static void ufshcd_wb_probe(struct ufs_hba *hba, const u8 *desc_buf)
(hba->dev_quirks & UFS_DEVICE_QUIRK_SUPPORT_EXTENDED_FEATURES)))
goto wb_disabled;
- if (hba->desc_size[QUERY_DESC_IDN_DEVICE] <
- DEVICE_DESC_PARAM_EXT_UFS_FEATURE_SUP + 4)
- goto wb_disabled;
-
- ext_ufs_feature = get_unaligned_be32(desc_buf +
- DEVICE_DESC_PARAM_EXT_UFS_FEATURE_SUP);
-
+ ext_ufs_feature = ufs_get_ext_ufs_feature(hba, desc_buf);
if (!(ext_ufs_feature & UFS_DEV_WRITE_BOOSTER_SUP))
goto wb_disabled;
@@ -7644,7 +7649,7 @@ static void ufshcd_temp_notif_probe(struct ufs_hba *hba, const u8 *desc_buf)
if (!(hba->caps & UFSHCD_CAP_TEMP_NOTIF) || dev_info->wspecversion < 0x300)
return;
- ext_ufs_feature = get_unaligned_be32(desc_buf + DEVICE_DESC_PARAM_EXT_UFS_FEATURE_SUP);
+ ext_ufs_feature = ufs_get_ext_ufs_feature(hba, desc_buf);
if (ext_ufs_feature & UFS_DEV_LOW_TEMP_NOTIF)
mask |= MASK_EE_TOO_LOW_TEMP;