Message ID | 20230908102113.547-3-luhongfei@vivo.com |
---|---|
State | New |
Headers | show |
Series | scsi: ufs: core: support WB buffer resize function | expand |
Hi Lu, kernel test robot noticed the following build warnings: https://git-scm.com/docs/git-format-patch#_base_tree_information] url: https://github.com/intel-lab-lkp/linux/commits/Lu-Hongfei/scsi-ufs-core-add-wb-buffer-resize-related-attr_idn/20230908-182656 base: https://git.kernel.org/pub/scm/linux/kernel/git/mkp/scsi.git for-next patch link: https://lore.kernel.org/r/20230908102113.547-3-luhongfei%40vivo.com patch subject: [PATCH v2 2/3] scsi: ufs: core: Add ufshcd_wb_buf_resize function to enable WB buffer resize config: i386-randconfig-141-20230909 (https://download.01.org/0day-ci/archive/20230909/202309091536.TRk3mftu-lkp@intel.com/config) compiler: gcc-12 (Debian 12.2.0-14) 12.2.0 reproduce: (https://download.01.org/0day-ci/archive/20230909/202309091536.TRk3mftu-lkp@intel.com/reproduce) If you fix the issue in a separate patch/commit (i.e. not just a new version of the same patch/commit), kindly add following tags | Reported-by: kernel test robot <lkp@intel.com> | Reported-by: Dan Carpenter <dan.carpenter@linaro.org> | Closes: https://lore.kernel.org/r/202309091536.TRk3mftu-lkp@intel.com/ New smatch warnings: drivers/ufs/core/ufshcd.c:6067 ufshcd_wb_buf_resize() error: uninitialized symbol 'ret'. Old smatch warnings: drivers/ufs/core/ufshcd.c:5353 ufshcd_uic_cmd_compl() error: we previously assumed 'hba->active_uic_cmd' could be null (see line 5341) vim +/ret +6067 drivers/ufs/core/ufshcd.c 7b70b34c503067 drivers/ufs/core/ufshcd.c Lu Hongfei 2023-09-08 6049 int ufshcd_wb_buf_resize(struct ufs_hba *hba, u32 resize_op) 7b70b34c503067 drivers/ufs/core/ufshcd.c Lu Hongfei 2023-09-08 6050 { 7b70b34c503067 drivers/ufs/core/ufshcd.c Lu Hongfei 2023-09-08 6051 int ret; 7b70b34c503067 drivers/ufs/core/ufshcd.c Lu Hongfei 2023-09-08 6052 u8 index; 7b70b34c503067 drivers/ufs/core/ufshcd.c Lu Hongfei 2023-09-08 6053 7b70b34c503067 drivers/ufs/core/ufshcd.c Lu Hongfei 2023-09-08 6054 ufshcd_scsi_block_requests(hba); 7b70b34c503067 drivers/ufs/core/ufshcd.c Lu Hongfei 2023-09-08 6055 if (ufshcd_wait_for_doorbell_clr(hba, 1 * USEC_PER_SEC)) 7b70b34c503067 drivers/ufs/core/ufshcd.c Lu Hongfei 2023-09-08 6056 goto out; ret is unitialized. 7b70b34c503067 drivers/ufs/core/ufshcd.c Lu Hongfei 2023-09-08 6057 7b70b34c503067 drivers/ufs/core/ufshcd.c Lu Hongfei 2023-09-08 6058 index = ufshcd_wb_get_query_index(hba); 7b70b34c503067 drivers/ufs/core/ufshcd.c Lu Hongfei 2023-09-08 6059 ret = ufshcd_query_attr_retry(hba, UPIU_QUERY_OPCODE_WRITE_ATTR, 7b70b34c503067 drivers/ufs/core/ufshcd.c Lu Hongfei 2023-09-08 6060 QUERY_ATTR_IDN_WB_BUF_RESIZE_EN, index, 0, &resize_op); 7b70b34c503067 drivers/ufs/core/ufshcd.c Lu Hongfei 2023-09-08 6061 if (ret) 7b70b34c503067 drivers/ufs/core/ufshcd.c Lu Hongfei 2023-09-08 6062 dev_err(hba->dev, 7b70b34c503067 drivers/ufs/core/ufshcd.c Lu Hongfei 2023-09-08 6063 "%s: Enable WB buf resize operation failed %d\n", 7b70b34c503067 drivers/ufs/core/ufshcd.c Lu Hongfei 2023-09-08 6064 __func__, ret); 7b70b34c503067 drivers/ufs/core/ufshcd.c Lu Hongfei 2023-09-08 6065 out: 7b70b34c503067 drivers/ufs/core/ufshcd.c Lu Hongfei 2023-09-08 6066 ufshcd_scsi_unblock_requests(hba); 7b70b34c503067 drivers/ufs/core/ufshcd.c Lu Hongfei 2023-09-08 @6067 return ret; ^^^ 7b70b34c503067 drivers/ufs/core/ufshcd.c Lu Hongfei 2023-09-08 6068 }
diff --git a/drivers/ufs/core/ufshcd-priv.h b/drivers/ufs/core/ufshcd-priv.h index f42d99ce5bf1..85caefa421f7 100644 --- a/drivers/ufs/core/ufshcd-priv.h +++ b/drivers/ufs/core/ufshcd-priv.h @@ -98,6 +98,7 @@ int ufshcd_exec_raw_upiu_cmd(struct ufs_hba *hba, enum query_opcode desc_op); int ufshcd_wb_toggle(struct ufs_hba *hba, bool enable); +int ufshcd_wb_buf_resize(struct ufs_hba *hba, u32 resize_op); /* Wrapper functions for safely calling variant operations */ static inline const char *ufshcd_get_var_name(struct ufs_hba *hba) diff --git a/drivers/ufs/core/ufshcd.c b/drivers/ufs/core/ufshcd.c index 93417518c04d..7e4461360cbd 100644 --- a/drivers/ufs/core/ufshcd.c +++ b/drivers/ufs/core/ufshcd.c @@ -6045,6 +6045,27 @@ static bool ufshcd_wb_need_flush(struct ufs_hba *hba) return ufshcd_wb_presrv_usrspc_keep_vcc_on(hba, avail_buf); } +int ufshcd_wb_buf_resize(struct ufs_hba *hba, u32 resize_op) +{ + int ret; + u8 index; + + ufshcd_scsi_block_requests(hba); + if (ufshcd_wait_for_doorbell_clr(hba, 1 * USEC_PER_SEC)) + goto out; + + index = ufshcd_wb_get_query_index(hba); + ret = ufshcd_query_attr_retry(hba, UPIU_QUERY_OPCODE_WRITE_ATTR, + QUERY_ATTR_IDN_WB_BUF_RESIZE_EN, index, 0, &resize_op); + if (ret) + dev_err(hba->dev, + "%s: Enable WB buf resize operation failed %d\n", + __func__, ret); +out: + ufshcd_scsi_unblock_requests(hba); + return ret; +} + static void ufshcd_rpm_dev_flush_recheck_work(struct work_struct *work) { struct ufs_hba *hba = container_of(to_delayed_work(work), diff --git a/include/ufs/ufshcd.h b/include/ufs/ufshcd.h index 7d07b256e906..7dd560dc22c6 100644 --- a/include/ufs/ufshcd.h +++ b/include/ufs/ufshcd.h @@ -1381,6 +1381,7 @@ int ufshcd_advanced_rpmb_req_handler(struct ufs_hba *hba, struct utp_upiu_req *r struct ufs_ehs *ehs_rsp, int sg_cnt, struct scatterlist *sg_list, enum dma_data_direction dir); int ufshcd_wb_toggle(struct ufs_hba *hba, bool enable); +int ufshcd_wb_buf_resize(struct ufs_hba *hba, u32 resize_op); int ufshcd_wb_toggle_buf_flush(struct ufs_hba *hba, bool enable); int ufshcd_suspend_prepare(struct device *dev); int __ufshcd_suspend_prepare(struct device *dev, bool rpm_ok_for_spm);
ufshcd_wb_buf_resize is used to enable WB buffer resize. It first blocks the upper layer from issuing reqs, then waits for the cmd queue to be empty, and then issues the command to enable WB buffer resize. It may be called anywhere, such as ufs-sysfs.c, so it needs to be declared in the header files. Signed-off-by: Lu Hongfei <luhongfei@vivo.com> --- drivers/ufs/core/ufshcd-priv.h | 1 + drivers/ufs/core/ufshcd.c | 21 +++++++++++++++++++++ include/ufs/ufshcd.h | 1 + 3 files changed, 23 insertions(+)