Message ID | 20201215230519.15158-6-huobean@gmail.com |
---|---|
State | New |
Headers | show |
Series | Several changes for UFS WriteBooster | expand |
On 2020-12-16 07:05, Bean Huo wrote: > From: Bean Huo <beanhuo@micron.com> > > UFS device-related flags should be grouped in ufs_dev_info. Take > wb_enabled and wb_buf_flush_enabled out from the struct ufs_hba, > group them to struct ufs_dev_info, and align the names of the structure > members vertically. > Reviewed-by: Can Guo <cang@codeaurora.org> > Signed-off-by: Bean Huo <beanhuo@micron.com> > --- > drivers/scsi/ufs/ufs-sysfs.c | 2 +- > drivers/scsi/ufs/ufs.h | 27 ++++++++++++++++----------- > drivers/scsi/ufs/ufshcd.c | 21 ++++++++++----------- > drivers/scsi/ufs/ufshcd.h | 4 +--- > 4 files changed, 28 insertions(+), 26 deletions(-) > > diff --git a/drivers/scsi/ufs/ufs-sysfs.c > b/drivers/scsi/ufs/ufs-sysfs.c > index f3ca3d6b82c4..9a9acc722a37 100644 > --- a/drivers/scsi/ufs/ufs-sysfs.c > +++ b/drivers/scsi/ufs/ufs-sysfs.c > @@ -194,7 +194,7 @@ static ssize_t wb_on_show(struct device *dev, > struct device_attribute *attr, > { > struct ufs_hba *hba = dev_get_drvdata(dev); > > - return sysfs_emit(buf, "%d\n", hba->wb_enabled); > + return sysfs_emit(buf, "%d\n", hba->dev_info.wb_enabled); > } > > static ssize_t wb_on_store(struct device *dev, struct device_attribute > *attr, > diff --git a/drivers/scsi/ufs/ufs.h b/drivers/scsi/ufs/ufs.h > index a789e074ae3f..ec74cf360b1f 100644 > --- a/drivers/scsi/ufs/ufs.h > +++ b/drivers/scsi/ufs/ufs.h > @@ -527,20 +527,25 @@ struct ufs_vreg_info { > }; > > struct ufs_dev_info { > - bool f_power_on_wp_en; > + bool f_power_on_wp_en; > /* Keeps information if any of the LU is power on write protected */ > - bool is_lu_power_on_wp; > + bool is_lu_power_on_wp; > /* Maximum number of general LU supported by the UFS device */ > - u8 max_lu_supported; > - u8 wb_dedicated_lu; > - u16 wmanufacturerid; > + u8 max_lu_supported; > + u16 wmanufacturerid; > /*UFS device Product Name */ > - u8 *model; > - u16 wspecversion; > - u32 clk_gating_wait_us; > - u8 b_wb_buffer_type; > - bool b_rpm_dev_flush_capable; > - u8 b_presrv_uspc_en; > + u8 *model; > + u16 wspecversion; > + u32 clk_gating_wait_us; > + > + /* UFS WB related flags */ > + bool wb_enabled; > + bool wb_buf_flush_enabled; > + u8 wb_dedicated_lu; > + u8 wb_buffer_type; > + > + bool b_rpm_dev_flush_capable; > + u8 b_presrv_uspc_en; > }; > > /** > diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c > index 5f08f4a59a17..466a85051d54 100644 > --- a/drivers/scsi/ufs/ufshcd.c > +++ b/drivers/scsi/ufs/ufshcd.c > @@ -589,8 +589,8 @@ static void ufshcd_device_reset(struct ufs_hba > *hba) > if (!err) { > ufshcd_set_ufs_dev_active(hba); > if (ufshcd_is_wb_allowed(hba)) { > - hba->wb_enabled = false; > - hba->wb_buf_flush_enabled = false; > + hba->dev_info.wb_enabled = false; > + hba->dev_info.wb_buf_flush_enabled = false; > } > } > if (err != -EOPNOTSUPP) > @@ -5359,7 +5359,7 @@ int ufshcd_wb_ctrl(struct ufs_hba *hba, bool > enable) > if (!ufshcd_is_wb_allowed(hba)) > return 0; > > - if (!(enable ^ hba->wb_enabled)) > + if (!(enable ^ hba->dev_info.wb_enabled)) > return 0; > if (enable) > opcode = UPIU_QUERY_OPCODE_SET_FLAG; > @@ -5375,7 +5375,7 @@ int ufshcd_wb_ctrl(struct ufs_hba *hba, bool > enable) > return ret; > } > > - hba->wb_enabled = enable; > + hba->dev_info.wb_enabled = enable; > dev_dbg(hba->dev, "%s write booster %s %d\n", > __func__, enable ? "enable" : "disable", ret); > > @@ -5415,7 +5415,7 @@ static int ufshcd_wb_buf_flush_enable(struct > ufs_hba *hba) > int ret; > u8 index; > > - if (!ufshcd_is_wb_allowed(hba) || hba->wb_buf_flush_enabled) > + if (!ufshcd_is_wb_allowed(hba) || hba->dev_info.wb_buf_flush_enabled) > return 0; > > index = ufshcd_wb_get_query_index(hba); > @@ -5426,7 +5426,7 @@ static int ufshcd_wb_buf_flush_enable(struct > ufs_hba *hba) > dev_err(hba->dev, "%s WB - buf flush enable failed %d\n", > __func__, ret); > else > - hba->wb_buf_flush_enabled = true; > + hba->dev_info.wb_buf_flush_enabled = true; > > dev_dbg(hba->dev, "WB - Flush enabled: %d\n", ret); > return ret; > @@ -5437,7 +5437,7 @@ static int ufshcd_wb_buf_flush_disable(struct > ufs_hba *hba) > int ret; > u8 index; > > - if (!ufshcd_is_wb_allowed(hba) || !hba->wb_buf_flush_enabled) > + if (!ufshcd_is_wb_allowed(hba) || > !hba->dev_info.wb_buf_flush_enabled) > return 0; > > index = ufshcd_wb_get_query_index(hba); > @@ -5448,7 +5448,7 @@ static int ufshcd_wb_buf_flush_disable(struct > ufs_hba *hba) > dev_warn(hba->dev, "%s: WB - buf flush disable failed %d\n", > __func__, ret); > } else { > - hba->wb_buf_flush_enabled = false; > + hba->dev_info.wb_buf_flush_enabled = false; > dev_dbg(hba->dev, "WB - Flush disabled: %d\n", ret); > } > > @@ -7236,13 +7236,12 @@ static void ufshcd_wb_probe(struct ufs_hba > *hba, u8 *desc_buf) > * says, in dedicated wb buffer mode, a max of 1 lun would have wb > * buffer configured. > */ > - dev_info->b_wb_buffer_type = > - desc_buf[DEVICE_DESC_PARAM_WB_TYPE]; > + dev_info->wb_buffer_type = desc_buf[DEVICE_DESC_PARAM_WB_TYPE]; > > dev_info->b_presrv_uspc_en = > desc_buf[DEVICE_DESC_PARAM_WB_PRESRV_USRSPC_EN]; > > - if (dev_info->b_wb_buffer_type == WB_BUF_MODE_SHARED) { > + if (dev_info->wb_buffer_type == WB_BUF_MODE_SHARED) { > if (!get_unaligned_be32(desc_buf + > DEVICE_DESC_PARAM_WB_SHARED_ALLOC_UNITS)) > goto wb_disabled; > diff --git a/drivers/scsi/ufs/ufshcd.h b/drivers/scsi/ufs/ufshcd.h > index 2a97006a2c93..ee97068158e2 100644 > --- a/drivers/scsi/ufs/ufshcd.h > +++ b/drivers/scsi/ufs/ufshcd.h > @@ -805,8 +805,6 @@ struct ufs_hba { > > struct device bsg_dev; > struct request_queue *bsg_queue; > - bool wb_buf_flush_enabled; > - bool wb_enabled; > struct delayed_work rpm_dev_flush_recheck_work; > > #ifdef CONFIG_SCSI_UFS_CRYPTO > @@ -946,7 +944,7 @@ static inline bool > ufshcd_keep_autobkops_enabled_except_suspend( > > static inline u8 ufshcd_wb_get_query_index(struct ufs_hba *hba) > { > - if (hba->dev_info.b_wb_buffer_type == WB_BUF_MODE_LU_DEDICATED) > + if (hba->dev_info.wb_buffer_type == WB_BUF_MODE_LU_DEDICATED) > return hba->dev_info.wb_dedicated_lu; > return 0; > }
diff --git a/drivers/scsi/ufs/ufs-sysfs.c b/drivers/scsi/ufs/ufs-sysfs.c index f3ca3d6b82c4..9a9acc722a37 100644 --- a/drivers/scsi/ufs/ufs-sysfs.c +++ b/drivers/scsi/ufs/ufs-sysfs.c @@ -194,7 +194,7 @@ static ssize_t wb_on_show(struct device *dev, struct device_attribute *attr, { struct ufs_hba *hba = dev_get_drvdata(dev); - return sysfs_emit(buf, "%d\n", hba->wb_enabled); + return sysfs_emit(buf, "%d\n", hba->dev_info.wb_enabled); } static ssize_t wb_on_store(struct device *dev, struct device_attribute *attr, diff --git a/drivers/scsi/ufs/ufs.h b/drivers/scsi/ufs/ufs.h index a789e074ae3f..ec74cf360b1f 100644 --- a/drivers/scsi/ufs/ufs.h +++ b/drivers/scsi/ufs/ufs.h @@ -527,20 +527,25 @@ struct ufs_vreg_info { }; struct ufs_dev_info { - bool f_power_on_wp_en; + bool f_power_on_wp_en; /* Keeps information if any of the LU is power on write protected */ - bool is_lu_power_on_wp; + bool is_lu_power_on_wp; /* Maximum number of general LU supported by the UFS device */ - u8 max_lu_supported; - u8 wb_dedicated_lu; - u16 wmanufacturerid; + u8 max_lu_supported; + u16 wmanufacturerid; /*UFS device Product Name */ - u8 *model; - u16 wspecversion; - u32 clk_gating_wait_us; - u8 b_wb_buffer_type; - bool b_rpm_dev_flush_capable; - u8 b_presrv_uspc_en; + u8 *model; + u16 wspecversion; + u32 clk_gating_wait_us; + + /* UFS WB related flags */ + bool wb_enabled; + bool wb_buf_flush_enabled; + u8 wb_dedicated_lu; + u8 wb_buffer_type; + + bool b_rpm_dev_flush_capable; + u8 b_presrv_uspc_en; }; /** diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c index 5f08f4a59a17..466a85051d54 100644 --- a/drivers/scsi/ufs/ufshcd.c +++ b/drivers/scsi/ufs/ufshcd.c @@ -589,8 +589,8 @@ static void ufshcd_device_reset(struct ufs_hba *hba) if (!err) { ufshcd_set_ufs_dev_active(hba); if (ufshcd_is_wb_allowed(hba)) { - hba->wb_enabled = false; - hba->wb_buf_flush_enabled = false; + hba->dev_info.wb_enabled = false; + hba->dev_info.wb_buf_flush_enabled = false; } } if (err != -EOPNOTSUPP) @@ -5359,7 +5359,7 @@ int ufshcd_wb_ctrl(struct ufs_hba *hba, bool enable) if (!ufshcd_is_wb_allowed(hba)) return 0; - if (!(enable ^ hba->wb_enabled)) + if (!(enable ^ hba->dev_info.wb_enabled)) return 0; if (enable) opcode = UPIU_QUERY_OPCODE_SET_FLAG; @@ -5375,7 +5375,7 @@ int ufshcd_wb_ctrl(struct ufs_hba *hba, bool enable) return ret; } - hba->wb_enabled = enable; + hba->dev_info.wb_enabled = enable; dev_dbg(hba->dev, "%s write booster %s %d\n", __func__, enable ? "enable" : "disable", ret); @@ -5415,7 +5415,7 @@ static int ufshcd_wb_buf_flush_enable(struct ufs_hba *hba) int ret; u8 index; - if (!ufshcd_is_wb_allowed(hba) || hba->wb_buf_flush_enabled) + if (!ufshcd_is_wb_allowed(hba) || hba->dev_info.wb_buf_flush_enabled) return 0; index = ufshcd_wb_get_query_index(hba); @@ -5426,7 +5426,7 @@ static int ufshcd_wb_buf_flush_enable(struct ufs_hba *hba) dev_err(hba->dev, "%s WB - buf flush enable failed %d\n", __func__, ret); else - hba->wb_buf_flush_enabled = true; + hba->dev_info.wb_buf_flush_enabled = true; dev_dbg(hba->dev, "WB - Flush enabled: %d\n", ret); return ret; @@ -5437,7 +5437,7 @@ static int ufshcd_wb_buf_flush_disable(struct ufs_hba *hba) int ret; u8 index; - if (!ufshcd_is_wb_allowed(hba) || !hba->wb_buf_flush_enabled) + if (!ufshcd_is_wb_allowed(hba) || !hba->dev_info.wb_buf_flush_enabled) return 0; index = ufshcd_wb_get_query_index(hba); @@ -5448,7 +5448,7 @@ static int ufshcd_wb_buf_flush_disable(struct ufs_hba *hba) dev_warn(hba->dev, "%s: WB - buf flush disable failed %d\n", __func__, ret); } else { - hba->wb_buf_flush_enabled = false; + hba->dev_info.wb_buf_flush_enabled = false; dev_dbg(hba->dev, "WB - Flush disabled: %d\n", ret); } @@ -7236,13 +7236,12 @@ static void ufshcd_wb_probe(struct ufs_hba *hba, u8 *desc_buf) * says, in dedicated wb buffer mode, a max of 1 lun would have wb * buffer configured. */ - dev_info->b_wb_buffer_type = - desc_buf[DEVICE_DESC_PARAM_WB_TYPE]; + dev_info->wb_buffer_type = desc_buf[DEVICE_DESC_PARAM_WB_TYPE]; dev_info->b_presrv_uspc_en = desc_buf[DEVICE_DESC_PARAM_WB_PRESRV_USRSPC_EN]; - if (dev_info->b_wb_buffer_type == WB_BUF_MODE_SHARED) { + if (dev_info->wb_buffer_type == WB_BUF_MODE_SHARED) { if (!get_unaligned_be32(desc_buf + DEVICE_DESC_PARAM_WB_SHARED_ALLOC_UNITS)) goto wb_disabled; diff --git a/drivers/scsi/ufs/ufshcd.h b/drivers/scsi/ufs/ufshcd.h index 2a97006a2c93..ee97068158e2 100644 --- a/drivers/scsi/ufs/ufshcd.h +++ b/drivers/scsi/ufs/ufshcd.h @@ -805,8 +805,6 @@ struct ufs_hba { struct device bsg_dev; struct request_queue *bsg_queue; - bool wb_buf_flush_enabled; - bool wb_enabled; struct delayed_work rpm_dev_flush_recheck_work; #ifdef CONFIG_SCSI_UFS_CRYPTO @@ -946,7 +944,7 @@ static inline bool ufshcd_keep_autobkops_enabled_except_suspend( static inline u8 ufshcd_wb_get_query_index(struct ufs_hba *hba) { - if (hba->dev_info.b_wb_buffer_type == WB_BUF_MODE_LU_DEDICATED) + if (hba->dev_info.wb_buffer_type == WB_BUF_MODE_LU_DEDICATED) return hba->dev_info.wb_dedicated_lu; return 0; }