On Tue, Nov 22, 2022 at 08:10:16PM -0800, Asutosh Das wrote: > Add support to check for MCQ capability in the UFSHC. > Add a module parameter to disable MCQ if needed. > > Co-developed-by: Can Guo <quic_cang@xxxxxxxxxxx> > Signed-off-by: Can Guo <quic_cang@xxxxxxxxxxx> > Signed-off-by: Asutosh Das <quic_asutoshd@xxxxxxxxxxx> Couple of nitpicks below, with those addressed: Reviewed-by: Manivannan Sadhasivam <mani@xxxxxxxxxx> > --- > drivers/ufs/core/ufshcd.c | 31 +++++++++++++++++++++++++++++++ > include/ufs/ufshcd.h | 2 ++ > 2 files changed, 33 insertions(+) > > diff --git a/drivers/ufs/core/ufshcd.c b/drivers/ufs/core/ufshcd.c > index 66b797f..08be8ad 100644 > --- a/drivers/ufs/core/ufshcd.c > +++ b/drivers/ufs/core/ufshcd.c > @@ -89,6 +89,33 @@ > /* Polling time to wait for fDeviceInit */ > #define FDEVICEINIT_COMPL_TIMEOUT 1500 /* millisecs */ > > +/* UFSHC 4.0 compliant HC support this mode, refer param_set_mcq_mode() */ > +static bool use_mcq_mode = true; > + > +static inline bool is_mcq_supported(struct ufs_hba *hba) Please get rid of inline keyword and let the compiler handle it. > +{ > + return hba->mcq_sup && use_mcq_mode; > +} > + > +static int param_set_mcq_mode(const char *val, const struct kernel_param *kp) > +{ > + int ret; > + > + ret = param_set_bool(val, kp); > + if (ret) > + return ret; > + > + return 0; > +} > + > +static const struct kernel_param_ops mcq_mode_ops = { > + .set = param_set_mcq_mode, > + .get = param_get_bool, > +}; > + > +module_param_cb(use_mcq_mode, &mcq_mode_ops, &use_mcq_mode, 0644); > +MODULE_PARM_DESC(mcq_mode, "Control MCQ mode for UFSHCI 4.0 controllers"); Is it ok to mention only 4.0? What about future revisions? Thanks, Mani > + > #define ufshcd_toggle_vreg(_dev, _vreg, _on) \ > ({ \ > int _ret; \ > @@ -2258,6 +2285,10 @@ static inline int ufshcd_hba_capabilities(struct ufs_hba *hba) > if (err) > dev_err(hba->dev, "crypto setup failed\n"); > > + hba->mcq_sup = FIELD_GET(MASK_MCQ_SUPPORT, hba->capabilities); > + if (!hba->mcq_sup) > + return err; > + > hba->mcq_capabilities = ufshcd_readl(hba, REG_MCQCAP); > hba->ext_iid_sup = FIELD_GET(MASK_EXT_IID_SUPPORT, > hba->mcq_capabilities); > diff --git a/include/ufs/ufshcd.h b/include/ufs/ufshcd.h > index aec37cb9..70c0f9f 100644 > --- a/include/ufs/ufshcd.h > +++ b/include/ufs/ufshcd.h > @@ -832,6 +832,7 @@ struct ufs_hba_monitor { > * @complete_put: whether or not to call ufshcd_rpm_put() from inside > * ufshcd_resume_complete() > * @ext_iid_sup: is EXT_IID is supported by UFSHC > + * @mcq_sup: is mcq supported by UFSHC > */ > struct ufs_hba { > void __iomem *mmio_base; > @@ -982,6 +983,7 @@ struct ufs_hba { > u32 luns_avail; > bool complete_put; > bool ext_iid_sup; > + bool mcq_sup; > }; > > /* Returns true if clocks can be gated. Otherwise false */ > -- > 2.7.4 > -- மணிவண்ணன் சதாசிவம்