mt_smi.h 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222
  1. #ifndef _MTK_SMI_H_
  2. #define _MTK_SMI_H_
  3. #define MTK_SMI_MAJOR_NUMBER 190
  4. #define MTK_IOW(num, dtype) _IOW('O', num, dtype)
  5. #define MTK_IOR(num, dtype) _IOR('O', num, dtype)
  6. #define MTK_IOWR(num, dtype) _IOWR('O', num, dtype)
  7. #define MTK_IO(num) _IO('O', num)
  8. /* -------------------------------------------------------------------------- */
  9. #define MTK_CONFIG_MM_MAU MTK_IOW(10, unsigned long)
  10. typedef struct {
  11. int larb; /* 0~4: the larb you want to monitor */
  12. int entry; /* 0~2: the mau entry to use */
  13. unsigned int port_msk; /* port mask to be monitored */
  14. int virt; /* 1: monitor va (this port is using m4u); */
  15. /* 0: monitor pa (this port is not using m4u) */
  16. int monitor_read; /* monitor read transaction 1-enable, 0-disable */
  17. int monitor_write; /* monitor write transaction 1-enable, 0-disable */
  18. unsigned int start; /* start address to monitor */
  19. unsigned int end; /* end address to monitor */
  20. } MTK_MAU_CONFIG;
  21. int mau_config(MTK_MAU_CONFIG *pMauConf);
  22. int mau_dump_status(int larb);
  23. /* --------------------------------------------------------------------------- */
  24. typedef enum {
  25. SMI_BWC_SCEN_NORMAL,
  26. SMI_BWC_SCEN_VR,
  27. SMI_BWC_SCEN_SWDEC_VP,
  28. SMI_BWC_SCEN_VP,
  29. SMI_BWC_SCEN_VR_SLOW,
  30. SMI_BWC_SCEN_MM_GPU,
  31. SMI_BWC_SCEN_WFD,
  32. SMI_BWC_SCEN_VENC,
  33. SMI_BWC_SCEN_ICFP,
  34. SMI_BWC_SCEN_UI_IDLE,
  35. SMI_BWC_SCEN_VSS,
  36. SMI_BWC_SCEN_FORCE_MMDVFS,
  37. SMI_BWC_SCEN_HDMI,
  38. SMI_BWC_SCEN_HDMI4K,
  39. SMI_BWC_SCEN_CNT
  40. } MTK_SMI_BWC_SCEN;
  41. /* MMDVFS */
  42. typedef enum {
  43. MMDVFS_VOLTAGE_DEFAULT,
  44. MMDVFS_VOLTAGE_0 = MMDVFS_VOLTAGE_DEFAULT,
  45. MMDVFS_VOLTAGE_LOW = MMDVFS_VOLTAGE_0,
  46. MMDVFS_VOLTAGE_1,
  47. MMDVFS_VOLTAGE_HIGH = MMDVFS_VOLTAGE_1,
  48. MMDVFS_VOLTAGE_DEFAULT_STEP,
  49. MMDVFS_VOLTAGE_COUNT
  50. } mmdvfs_voltage_enum;
  51. typedef struct {
  52. int scenario;
  53. int b_on_off; /* 0 : exit this scenario , 1 : enter this scenario */
  54. } MTK_SMI_BWC_CONFIG;
  55. typedef struct {
  56. unsigned int *hwc_max_pixel; /* : exit this scenario , 1 : enter this scenario */
  57. } MTK_SMI_BWC_STATE;
  58. typedef struct {
  59. unsigned int address;
  60. unsigned int value;
  61. } MTK_SMI_BWC_REGISTER_SET;
  62. typedef struct {
  63. unsigned int address;
  64. unsigned int *return_address;
  65. } MTK_SMI_BWC_REGISTER_GET;
  66. #define MMDVFS_CAMERA_MODE_FLAG_DEFAULT 1
  67. #define MMDVFS_CAMERA_MODE_FLAG_PIP (1 << 1)
  68. #define MMDVFS_CAMERA_MODE_FLAG_VFB (1 << 2)
  69. #define MMDVFS_CAMERA_MODE_FLAG_EIS_2_0 (1 << 3)
  70. #define MMDVFS_CAMERA_MODE_FLAG_IVHDR (1 << 4)
  71. #define MMDVFS_CAMERA_MODE_FLAG_STEREO (1 << 5)
  72. typedef struct {
  73. unsigned int type;
  74. MTK_SMI_BWC_SCEN scen;
  75. unsigned int sensor_size;
  76. unsigned int sensor_fps;
  77. unsigned int camera_mode;
  78. unsigned int venc_size;
  79. unsigned int ret;
  80. } MTK_MMDVFS_CMD;
  81. #define MTK_MMDVFS_CMD_TYPE_SET 0
  82. #define MTK_MMDVFS_CMD_TYPE_QUERY 1
  83. #define MTK_MMDVFS_CMD_TYPE_MMSYS_SET 2
  84. typedef enum {
  85. SMI_BWC_INFO_CON_PROFILE = 0,
  86. SMI_BWC_INFO_SENSOR_SIZE,
  87. SMI_BWC_INFO_VIDEO_RECORD_SIZE,
  88. SMI_BWC_INFO_DISP_SIZE,
  89. SMI_BWC_INFO_TV_OUT_SIZE,
  90. SMI_BWC_INFO_FPS,
  91. SMI_BWC_INFO_VIDEO_ENCODE_CODEC,
  92. SMI_BWC_INFO_VIDEO_DECODE_CODEC,
  93. SMI_BWC_INFO_HW_OVL_LIMIT,
  94. SMI_BWC_INFO_CNT
  95. } MTK_SMI_BWC_INFO_ID;
  96. typedef struct {
  97. int property;
  98. int value1;
  99. int value2;
  100. } MTK_SMI_BWC_INFO_SET;
  101. typedef struct {
  102. unsigned int flag; /* Reserved */
  103. int concurrent_profile;
  104. int sensor_size[2];
  105. int video_record_size[2];
  106. int display_size[2];
  107. int tv_out_size[2];
  108. int fps;
  109. int video_encode_codec;
  110. int video_decode_codec;
  111. int hw_ovl_limit;
  112. } MTK_SMI_BWC_MM_INFO;
  113. #define MTK_IOC_SPC_CONFIG MTK_IOW(20, unsigned long)
  114. #define MTK_IOC_SPC_DUMP_REG MTK_IOW(21, unsigned long)
  115. #define MTK_IOC_SPC_DUMP_STA MTK_IOW(22, unsigned long)
  116. #define MTK_IOC_SPC_CMD MTK_IOW(23, unsigned long)
  117. #define MTK_IOC_SMI_BWC_CONFIG MTK_IOW(24, MTK_SMI_BWC_CONFIG)
  118. #define MTK_IOC_SMI_BWC_STATE MTK_IOWR(25, MTK_SMI_BWC_STATE)
  119. #define MTK_IOC_SMI_BWC_REGISTER_SET MTK_IOWR(26, MTK_SMI_BWC_REGISTER_SET)
  120. #define MTK_IOC_SMI_BWC_REGISTER_GET MTK_IOWR(27, MTK_SMI_BWC_REGISTER_GET)
  121. /* For BWC.MM property setting */
  122. #define MTK_IOC_SMI_BWC_INFO_SET MTK_IOWR(28, MTK_SMI_BWC_INFO_SET)
  123. /* For BWC.MM property get */
  124. #define MTK_IOC_SMI_BWC_INFO_GET MTK_IOWR(29, MTK_SMI_BWC_MM_INFO)
  125. /* GMP end */
  126. #define MTK_IOC_SMI_DUMP_LARB MTK_IOWR(66, unsigned int)
  127. #define MTK_IOC_SMI_DUMP_COMMON MTK_IOWR(67, unsigned int)
  128. #define MTK_IOC_MMDVFS_CMD MTK_IOW(88, MTK_MMDVFS_CMD)
  129. typedef enum {
  130. SPC_PROT_NO_PROT = 0,
  131. SPC_PROT_SEC_RW_ONLY,
  132. SPC_PROT_SEC_RW_NONSEC_R,
  133. SPC_PROT_NO_ACCESS,
  134. } SPC_PROT_T;
  135. typedef struct {
  136. SPC_PROT_T domain_0_prot;
  137. SPC_PROT_T domain_1_prot;
  138. SPC_PROT_T domain_2_prot;
  139. SPC_PROT_T domain_3_prot;
  140. unsigned int start; /* start address to monitor */
  141. unsigned int end; /* end address to monitor */
  142. } MTK_SPC_CONFIG;
  143. void spc_config(MTK_SPC_CONFIG *pCfg);
  144. unsigned int spc_status_check(void);
  145. unsigned int spc_dump_reg(void);
  146. unsigned int spc_register_isr(void *dev);
  147. unsigned int spc_clear_irq(void);
  148. int spc_test(int code);
  149. int MTK_SPC_Init(void *dev);
  150. #define MMDVFS_ENABLE_DEFAULT_STEP_QUERY
  151. #define MMDVFS_MMCLOCK_NOTIFICATION
  152. /* MMDVFS kernel API */
  153. extern int mmdvfs_set_step(MTK_SMI_BWC_SCEN scenario, mmdvfs_voltage_enum step);
  154. extern int mmdvfs_is_default_step_need_perf(void);
  155. extern void mmdvfs_mm_clock_switch_notify(int is_before, int is_to_high);
  156. #ifdef CONFIG_MTK_SMI_VARIANT
  157. /* Enable the power-domain and the clocks of the larb.
  158. *
  159. * larb: larb id
  160. * pm: if true, this function will help enable larb's power-domain.
  161. * if false, please make sure the larb's power-domain has been enabled.
  162. * some h/w may reset if the sequence is not good while
  163. * smi-larb enable power-domain.
  164. * please call them in non-atmoic context.
  165. * Return : 0 is successful, Others is failed.
  166. */
  167. int mtk_smi_larb_clock_on(int larb, bool pm);
  168. void mtk_smi_larb_clock_off(int larb, bool pm);
  169. /* Return 0 is failed */
  170. unsigned long mtk_smi_larb_get_base(int larbid);
  171. #else
  172. static inline int mtk_smi_larb_clock_on(int larb, bool pm)
  173. {
  174. return 0;
  175. }
  176. static inline void mtk_smi_larb_clock_off(int larb, bool pm) {}
  177. static inline unsigned long mtk_smi_larb_get_base(int larbid)
  178. {
  179. return 0;
  180. }
  181. #endif
  182. #endif