Message ID | 20220614141655.14409-8-stanley.chu@mediatek.com (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | scsi: ufs: Fix PMC and low-power mode on MediaTek UFS platforms | expand |
On 6/14/22 07:16, Stanley Chu wrote: > From: Alice Chao <alice.chao@mediatek.com> > > Provide flexible number of parameters for UFS SMC calls to be > easily used for future SMC usages. How far in the future? Please only introduce what is needed for this patch series. > +/* > + * SMC call wapper function ^^^^^^ typo > + */ > +#define _ufs_mtk_smc(cmd, res, v1, v2, v3, v4, v5, v6) \ > + arm_smccc_smc(MTK_SIP_UFS_CONTROL, \ > + cmd, v1, v2, v3, v4, v5, v6, &(res)) > + > +#define _ufs_mtk_smc_0(cmd, res) \ > + _ufs_mtk_smc(cmd, res, 0, 0, 0, 0, 0, 0) > + > +#define _ufs_mtk_smc_1(cmd, res, v1) \ > + _ufs_mtk_smc(cmd, res, v1, 0, 0, 0, 0, 0) > + > +#define _ufs_mtk_smc_2(cmd, res, v1, v2) \ > + _ufs_mtk_smc(cmd, res, v1, v2, 0, 0, 0, 0) > + > +#define _ufs_mtk_smc_3(cmd, res, v1, v2, v3) \ > + _ufs_mtk_smc(cmd, res, v1, v2, v3, 0, 0, 0) > + > +#define _ufs_mtk_smc_4(cmd, res, v1, v2, v3, v4) \ > + _ufs_mtk_smc(cmd, res, v1, v2, v3, v4, 0, 0) > + > +#define _ufs_mtk_smc_5(cmd, res, v1, v2, v3, v4, v5) \ > + _ufs_mtk_smc(cmd, res, v1, v2, v3, v4, v5, 0) > + > +#define _ufs_mtk_smc_6(cmd, res, v1, v2, v3, v4, v5, v6) \ > + _ufs_mtk_smc(cmd, res, v1, v2, v3, v4, v5, v6) > + > +#define _ufs_mtk_smc_selector(cmd, res, v1, v2, v3, v4, v5, v6, FUNC, ...) FUNC > + > +#define ufs_mtk_smc(...) \ > + _ufs_mtk_smc_selector(__VA_ARGS__, \ > + _ufs_mtk_smc_6(__VA_ARGS__), \ > + _ufs_mtk_smc_5(__VA_ARGS__), \ > + _ufs_mtk_smc_4(__VA_ARGS__), \ > + _ufs_mtk_smc_3(__VA_ARGS__), \ > + _ufs_mtk_smc_2(__VA_ARGS__), \ > + _ufs_mtk_smc_1(__VA_ARGS__), \ > + _ufs_mtk_smc_0(__VA_ARGS__) \ > + ) If _ufs_mtk_smc() would be modified to accept an struct _ufs_mtk_args as its only argument, would that allow to simplify the above into the following? #define ufs_mtk_smc(...) \ _ufs_mtk_smc((struct _ufs_mtk_args){__VA_ARGS__}) > +/* > + * Sip kernel interface > + */ What is "Sip"? Should it perhaps be spelled as "SIP"? Thanks, Bart.
Hi Bart, On Tue, 2022-06-14 at 09:28 -0700, Bart Van Assche wrote: > On 6/14/22 07:16, Stanley Chu wrote: > > From: Alice Chao <alice.chao@mediatek.com> > > > > Provide flexible number of parameters for UFS SMC calls to be > > easily used for future SMC usages. > > How far in the future? Please only introduce what is needed for this > patch series. Sure, I just rewrote and simplified SMC call macros according to your good suggestions in v4. > > > +/* > > + * SMC call wapper function > > ^^^^^^ > typo Fixed in v4. > > > + */ > > +#define _ufs_mtk_smc(cmd, res, v1, v2, v3, v4, v5, v6) \ > > + arm_smccc_smc(MTK_SIP_UFS_CONTROL, \ > > + cmd, v1, v2, v3, v4, v5, v6, &(res)) > > + > > +#define _ufs_mtk_smc_0(cmd, res) \ > > + _ufs_mtk_smc(cmd, res, 0, 0, 0, 0, 0, 0) > > + > > +#define _ufs_mtk_smc_1(cmd, res, v1) \ > > + _ufs_mtk_smc(cmd, res, v1, 0, 0, 0, 0, 0) > > + > > +#define _ufs_mtk_smc_2(cmd, res, v1, v2) \ > > + _ufs_mtk_smc(cmd, res, v1, v2, 0, 0, 0, 0) > > + > > +#define _ufs_mtk_smc_3(cmd, res, v1, v2, v3) \ > > + _ufs_mtk_smc(cmd, res, v1, v2, v3, 0, 0, 0) > > + > > +#define _ufs_mtk_smc_4(cmd, res, v1, v2, v3, v4) \ > > + _ufs_mtk_smc(cmd, res, v1, v2, v3, v4, 0, 0) > > + > > +#define _ufs_mtk_smc_5(cmd, res, v1, v2, v3, v4, v5) \ > > + _ufs_mtk_smc(cmd, res, v1, v2, v3, v4, v5, 0) > > + > > +#define _ufs_mtk_smc_6(cmd, res, v1, v2, v3, v4, v5, v6) \ > > + _ufs_mtk_smc(cmd, res, v1, v2, v3, v4, v5, v6) > > + > > +#define _ufs_mtk_smc_selector(cmd, res, v1, v2, v3, v4, v5, v6, > > FUNC, ...) FUNC > > + > > +#define ufs_mtk_smc(...) \ > > + _ufs_mtk_smc_selector(__VA_ARGS__, \ > > + _ufs_mtk_smc_6(__VA_ARGS__), \ > > + _ufs_mtk_smc_5(__VA_ARGS__), \ > > + _ufs_mtk_smc_4(__VA_ARGS__), \ > > + _ufs_mtk_smc_3(__VA_ARGS__), \ > > + _ufs_mtk_smc_2(__VA_ARGS__), \ > > + _ufs_mtk_smc_1(__VA_ARGS__), \ > > + _ufs_mtk_smc_0(__VA_ARGS__) \ > > + ) > > If _ufs_mtk_smc() would be modified to accept an struct _ufs_mtk_args > as > its only argument, would that allow to simplify the above into the > following? > > #define ufs_mtk_smc(...) \ > _ufs_mtk_smc((struct _ufs_mtk_args){__VA_ARGS__}) > > > +/* > > + * Sip kernel interface > > + */ > > What is "Sip"? Should it perhaps be spelled as "SIP"? > > Thanks, > > Bart.
diff --git a/drivers/ufs/host/ufs-mediatek.c b/drivers/ufs/host/ufs-mediatek.c index 178043ab837c..9337ce27329b 100755 --- a/drivers/ufs/host/ufs-mediatek.c +++ b/drivers/ufs/host/ufs-mediatek.c @@ -30,22 +30,6 @@ #define CREATE_TRACE_POINTS #include "ufs-mediatek-trace.h" -#define ufs_mtk_smc(cmd, val, res) \ - arm_smccc_smc(MTK_SIP_UFS_CONTROL, \ - cmd, val, 0, 0, 0, 0, 0, &(res)) - -#define ufs_mtk_va09_pwr_ctrl(res, on) \ - ufs_mtk_smc(UFS_MTK_SIP_VA09_PWR_CTRL, on, res) - -#define ufs_mtk_crypto_ctrl(res, enable) \ - ufs_mtk_smc(UFS_MTK_SIP_CRYPTO_CTRL, enable, res) - -#define ufs_mtk_ref_clk_notify(on, res) \ - ufs_mtk_smc(UFS_MTK_SIP_REF_CLK_NOTIFICATION, on, res) - -#define ufs_mtk_device_reset_ctrl(high, res) \ - ufs_mtk_smc(UFS_MTK_SIP_DEVICE_RESET, high, res) - static const struct ufs_dev_quirk ufs_mtk_dev_fixups[] = { { .wmanufacturerid = UFS_VENDOR_MICRON, .model = UFS_ANY_MODEL, diff --git a/drivers/ufs/host/ufs-mediatek.h b/drivers/ufs/host/ufs-mediatek.h index 7e1913769671..9117427ca6c4 100755 --- a/drivers/ufs/host/ufs-mediatek.h +++ b/drivers/ufs/host/ufs-mediatek.h @@ -143,4 +143,60 @@ struct ufs_mtk_host { u32 ip_ver; }; +/* + * SMC call wapper function + */ +#define _ufs_mtk_smc(cmd, res, v1, v2, v3, v4, v5, v6) \ + arm_smccc_smc(MTK_SIP_UFS_CONTROL, \ + cmd, v1, v2, v3, v4, v5, v6, &(res)) + +#define _ufs_mtk_smc_0(cmd, res) \ + _ufs_mtk_smc(cmd, res, 0, 0, 0, 0, 0, 0) + +#define _ufs_mtk_smc_1(cmd, res, v1) \ + _ufs_mtk_smc(cmd, res, v1, 0, 0, 0, 0, 0) + +#define _ufs_mtk_smc_2(cmd, res, v1, v2) \ + _ufs_mtk_smc(cmd, res, v1, v2, 0, 0, 0, 0) + +#define _ufs_mtk_smc_3(cmd, res, v1, v2, v3) \ + _ufs_mtk_smc(cmd, res, v1, v2, v3, 0, 0, 0) + +#define _ufs_mtk_smc_4(cmd, res, v1, v2, v3, v4) \ + _ufs_mtk_smc(cmd, res, v1, v2, v3, v4, 0, 0) + +#define _ufs_mtk_smc_5(cmd, res, v1, v2, v3, v4, v5) \ + _ufs_mtk_smc(cmd, res, v1, v2, v3, v4, v5, 0) + +#define _ufs_mtk_smc_6(cmd, res, v1, v2, v3, v4, v5, v6) \ + _ufs_mtk_smc(cmd, res, v1, v2, v3, v4, v5, v6) + +#define _ufs_mtk_smc_selector(cmd, res, v1, v2, v3, v4, v5, v6, FUNC, ...) FUNC + +#define ufs_mtk_smc(...) \ + _ufs_mtk_smc_selector(__VA_ARGS__, \ + _ufs_mtk_smc_6(__VA_ARGS__), \ + _ufs_mtk_smc_5(__VA_ARGS__), \ + _ufs_mtk_smc_4(__VA_ARGS__), \ + _ufs_mtk_smc_3(__VA_ARGS__), \ + _ufs_mtk_smc_2(__VA_ARGS__), \ + _ufs_mtk_smc_1(__VA_ARGS__), \ + _ufs_mtk_smc_0(__VA_ARGS__) \ + ) + +/* + * Sip kernel interface + */ +#define ufs_mtk_va09_pwr_ctrl(res, on) \ + ufs_mtk_smc(UFS_MTK_SIP_VA09_PWR_CTRL, res, on) + +#define ufs_mtk_crypto_ctrl(res, enable) \ + ufs_mtk_smc(UFS_MTK_SIP_CRYPTO_CTRL, res, enable) + +#define ufs_mtk_ref_clk_notify(on, res) \ + ufs_mtk_smc(UFS_MTK_SIP_REF_CLK_NOTIFICATION, res, on) + +#define ufs_mtk_device_reset_ctrl(high, res) \ + ufs_mtk_smc(UFS_MTK_SIP_DEVICE_RESET, res, high) + #endif /* !_UFS_MEDIATEK_H */