ufs-mediatek-sip.h 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. /* SPDX-License-Identifier: GPL-2.0 */
  2. /*
  3. * Copyright (C) 2022 MediaTek Inc.
  4. */
  5. #ifndef _UFS_MEDIATEK_SIP_H
  6. #define _UFS_MEDIATEK_SIP_H
  7. #include <linux/soc/mediatek/mtk_sip_svc.h>
  8. /*
  9. * SiP (Slicon Partner) commands
  10. */
  11. #define MTK_SIP_UFS_CONTROL MTK_SIP_SMC_CMD(0x276)
  12. #define UFS_MTK_SIP_VA09_PWR_CTRL BIT(0)
  13. #define UFS_MTK_SIP_DEVICE_RESET BIT(1)
  14. #define UFS_MTK_SIP_CRYPTO_CTRL BIT(2)
  15. #define UFS_MTK_SIP_REF_CLK_NOTIFICATION BIT(3)
  16. #define UFS_MTK_SIP_SRAM_PWR_CTRL BIT(5)
  17. #define UFS_MTK_SIP_GET_VCC_NUM BIT(6)
  18. #define UFS_MTK_SIP_DEVICE_PWR_CTRL BIT(7)
  19. #define UFS_MTK_SIP_MPHY_CTRL BIT(8)
  20. #define UFS_MTK_SIP_MTCMOS_CTRL BIT(9)
  21. /*
  22. * Multi-VCC by Numbering
  23. */
  24. enum ufs_mtk_vcc_num {
  25. UFS_VCC_NONE = 0,
  26. UFS_VCC_1,
  27. UFS_VCC_2,
  28. UFS_VCC_MAX
  29. };
  30. enum ufs_mtk_mphy_op {
  31. UFS_MPHY_BACKUP = 0,
  32. UFS_MPHY_RESTORE
  33. };
  34. /*
  35. * SMC call wrapper function
  36. */
  37. struct ufs_mtk_smc_arg {
  38. unsigned long cmd;
  39. struct arm_smccc_res *res;
  40. unsigned long v1;
  41. unsigned long v2;
  42. unsigned long v3;
  43. unsigned long v4;
  44. unsigned long v5;
  45. unsigned long v6;
  46. unsigned long v7;
  47. };
  48. static inline void _ufs_mtk_smc(struct ufs_mtk_smc_arg s)
  49. {
  50. arm_smccc_smc(MTK_SIP_UFS_CONTROL,
  51. s.cmd,
  52. s.v1, s.v2, s.v3, s.v4, s.v5, s.v6, s.res);
  53. }
  54. #define ufs_mtk_smc(...) \
  55. _ufs_mtk_smc((struct ufs_mtk_smc_arg) {__VA_ARGS__})
  56. /* Sip kernel interface */
  57. #define ufs_mtk_va09_pwr_ctrl(res, on) \
  58. ufs_mtk_smc(UFS_MTK_SIP_VA09_PWR_CTRL, &(res), on)
  59. #define ufs_mtk_crypto_ctrl(res, enable) \
  60. ufs_mtk_smc(UFS_MTK_SIP_CRYPTO_CTRL, &(res), enable)
  61. #define ufs_mtk_ref_clk_notify(on, stage, res) \
  62. ufs_mtk_smc(UFS_MTK_SIP_REF_CLK_NOTIFICATION, &(res), on, stage)
  63. #define ufs_mtk_device_reset_ctrl(high, res) \
  64. ufs_mtk_smc(UFS_MTK_SIP_DEVICE_RESET, &(res), high)
  65. #define ufs_mtk_sram_pwr_ctrl(on, res) \
  66. ufs_mtk_smc(UFS_MTK_SIP_SRAM_PWR_CTRL, &(res), on)
  67. #define ufs_mtk_get_vcc_num(res) \
  68. ufs_mtk_smc(UFS_MTK_SIP_GET_VCC_NUM, &(res))
  69. #define ufs_mtk_device_pwr_ctrl(on, ufs_version, res) \
  70. ufs_mtk_smc(UFS_MTK_SIP_DEVICE_PWR_CTRL, &(res), on, ufs_version)
  71. #define ufs_mtk_mphy_ctrl(op, res) \
  72. ufs_mtk_smc(UFS_MTK_SIP_MPHY_CTRL, &(res), op)
  73. #define ufs_mtk_mtcmos_ctrl(op, res) \
  74. ufs_mtk_smc(UFS_MTK_SIP_MTCMOS_CTRL, &(res), op)
  75. #endif /* !_UFS_MEDIATEK_SIP_H */