mt_cpufreq.h 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251
  1. /**
  2. * @file mt_cpufreq.h
  3. * @brief CPU DVFS driver interface
  4. */
  5. #ifndef __MT_CPUFREQ_H__
  6. #define __MT_CPUFREQ_H__
  7. #ifdef __cplusplus
  8. extern "C" {
  9. #endif
  10. /* configs */
  11. #ifdef CONFIG_ARCH_MT6753
  12. #ifndef __KERNEL__
  13. #include "mt6311.h"
  14. #else
  15. #include "../../../power/mt6735/mt6311.h"
  16. #endif
  17. #define CONFIG_CPU_DVFS_HAS_EXTBUCK 1 /* external PMIC related access */
  18. #endif
  19. #if 0
  20. #define CONFIG_CPU_DVFS_PERFORMANCE_TEST 1 /* fix at max freq for perf test */
  21. #define CONFIG_CPU_DVFS_FFTT_TEST 1 /* FF TT SS volt test */
  22. #endif
  23. #ifdef __KERNEL__
  24. #if 0
  25. #define CONFIG_CPU_DVFS_TURBO_MODE 1 /* turbo max freq when CPU core <= 2*/
  26. #endif
  27. #define CONFIG_CPU_DVFS_POWER_THROTTLING 1 /* power throttling features */
  28. #endif
  29. #ifdef CONFIG_MTK_RAM_CONSOLE
  30. #define CONFIG_CPU_DVFS_AEE_RR_REC 1 /* AEE SRAM debugging */
  31. #endif
  32. /*=============================================================*/
  33. /* Include files */
  34. /*=============================================================*/
  35. /* system includes */
  36. /* project includes */
  37. /* local includes */
  38. /* forward references */
  39. extern void __iomem *pwrap_base;
  40. #define PMIC_WRAP_BASE (pwrap_base)
  41. #ifdef CONFIG_CPU_DVFS_HAS_EXTBUCK
  42. /* #include "mach/mt_typedefs.h" */
  43. extern int is_ext_buck_sw_ready(void);
  44. extern int is_ext_buck_exist(void);
  45. extern void mt6311_set_vdvfs11_vosel(unsigned char val);
  46. extern void mt6311_set_vdvfs11_vosel_on(unsigned char val);
  47. extern void mt6311_set_vdvfs11_vosel_ctrl(unsigned char val);
  48. extern unsigned int mt6311_read_byte(unsigned char cmd, unsigned char *returnData);
  49. extern void mt6311_set_buck_test_mode(unsigned char val);
  50. extern unsigned int mt6311_get_chip_id(void);
  51. #endif
  52. extern u32 get_devinfo_with_index(u32 index);
  53. #ifdef CONFIG_CPU_DVFS_AEE_RR_REC
  54. extern void aee_rr_rec_cpu_dvfs_vproc_big(u8 val);
  55. extern void aee_rr_rec_cpu_dvfs_vproc_little(u8 val);
  56. extern void aee_rr_rec_cpu_dvfs_oppidx(u8 val);
  57. extern u8 aee_rr_curr_cpu_dvfs_oppidx(void);
  58. extern void aee_rr_rec_cpu_dvfs_status(u8 val);
  59. extern u8 aee_rr_curr_cpu_dvfs_status(void);
  60. #endif
  61. /*=============================================================*/
  62. /* Macro definition */
  63. /*=============================================================*/
  64. /*=============================================================*/
  65. /* Type definition */
  66. /*=============================================================*/
  67. enum mt_cpu_dvfs_id {
  68. MT_CPU_DVFS_LITTLE,
  69. NR_MT_CPU_DVFS,
  70. };
  71. enum top_ckmuxsel {
  72. TOP_CKMUXSEL_CLKSQ = 0, /* i.e. reg setting */
  73. TOP_CKMUXSEL_ARMPLL = 1,
  74. TOP_CKMUXSEL_MAINPLL = 2,
  75. NR_TOP_CKMUXSEL,
  76. };
  77. /*
  78. * PMIC_WRAP
  79. */
  80. /* Phase */
  81. enum pmic_wrap_phase_id {
  82. PMIC_WRAP_PHASE_NORMAL,
  83. PMIC_WRAP_PHASE_SUSPEND,
  84. PMIC_WRAP_PHASE_DEEPIDLE,
  85. NR_PMIC_WRAP_PHASE,
  86. };
  87. /* IDX mapping */
  88. #ifdef CONFIG_ARCH_MT6735M
  89. enum {
  90. IDX_NM_VCORE_TRANS4, /* 0 *//* PMIC_WRAP_PHASE_NORMAL */
  91. IDX_NM_VCORE_TRANS3, /* 1 */
  92. IDX_NM_VCORE_HPM, /* 2 */
  93. IDX_NM_VCORE_TRANS2, /* 3 */
  94. IDX_NM_VCORE_TRANS1, /* 4 */
  95. IDX_NM_VCORE_LPM, /* 5 */
  96. IDX_NM_VCORE_UHPM, /* 6 */
  97. IDX_NM_VRF18_0_PWR_ON, /* 7 */
  98. IDX_NM_NOT_USED, /* 8 */
  99. IDX_NM_VRF18_0_SHUTDOWN, /* 9 */
  100. NR_IDX_NM,
  101. };
  102. #else /* !CONFIG_ARCH_MT6735M */
  103. enum {
  104. IDX_NM_NOT_USED1, /* 0 *//* PMIC_WRAP_PHASE_NORMAL */
  105. IDX_NM_NOT_USED2, /* 1 */
  106. IDX_NM_VCORE_HPM, /* 2 */
  107. IDX_NM_VCORE_TRANS2, /* 3 */
  108. IDX_NM_VCORE_TRANS1, /* 4 */
  109. IDX_NM_VCORE_LPM, /* 5 */
  110. IDX_NM_VRF18_0_SHUTDOWN, /* 6 */
  111. IDX_NM_VRF18_0_PWR_ON, /* 7 */
  112. NR_IDX_NM,
  113. };
  114. #endif
  115. enum {
  116. IDX_SP_VPROC_PWR_ON, /* 0 *//* PMIC_WRAP_PHASE_SUSPEND */
  117. IDX_SP_VPROC_SHUTDOWN, /* 1 */
  118. IDX_SP_VCORE_HPM, /* 2 */
  119. IDX_SP_VCORE_TRANS2, /* 3 */
  120. IDX_SP_VCORE_TRANS1, /* 4 */
  121. IDX_SP_VCORE_LPM, /* 5 */
  122. IDX_SP_VSRAM_SHUTDOWN, /* 6 */
  123. IDX_SP_VRF18_0_PWR_ON, /* 7 */
  124. IDX_SP_VSRAM_PWR_ON, /* 8 */
  125. IDX_SP_VRF18_0_SHUTDOWN, /* 9 */
  126. NR_IDX_SP,
  127. };
  128. enum {
  129. IDX_DI_VPROC_NORMAL, /* 0 *//* PMIC_WRAP_PHASE_DEEPIDLE */
  130. IDX_DI_VPROC_SLEEP, /* 1 */
  131. IDX_DI_VCORE_HPM, /* 2 */
  132. IDX_DI_VCORE_TRANS2, /* 3 */
  133. IDX_DI_VCORE_TRANS1, /* 4 */
  134. IDX_DI_VCORE_LPM, /* 5 */
  135. IDX_DI_VSRAM_SLEEP, /* 6 */
  136. IDX_DI_VRF18_0_PWR_ON, /* 7 */
  137. IDX_DI_VSRAM_NORMAL, /* 8 */
  138. IDX_DI_VRF18_0_SHUTDOWN, /* 9 */
  139. #ifdef CONFIG_ARCH_MT6753
  140. IDX_DI_VCORE_IDLE_LPM, /* 10 */
  141. IDX_DI_VSRAM_SLEEP_FOR_TURBO, /* 11 */
  142. IDX_DI_VSRAM_NORMAL_FOR_TURBO, /* 12 */
  143. #endif
  144. NR_IDX_DI,
  145. };
  146. typedef void (*cpuVoltsampler_func) (enum mt_cpu_dvfs_id, unsigned int mv);
  147. /*=============================================================*/
  148. /* Global variable definition */
  149. /*=============================================================*/
  150. /*=============================================================*/
  151. /* Global function definition */
  152. /*=============================================================*/
  153. /* PMIC WRAP */
  154. extern void mt_cpufreq_set_pmic_phase(enum pmic_wrap_phase_id phase);
  155. extern void mt_cpufreq_set_pmic_cmd(enum pmic_wrap_phase_id phase, int idx,
  156. unsigned int cmd_wdata);
  157. extern void mt_cpufreq_apply_pmic_cmd(int idx);
  158. /* Dormant profiling */
  159. extern unsigned int mt_cpufreq_get_cur_freq(enum mt_cpu_dvfs_id id);
  160. /* PTP-OD */
  161. extern unsigned int mt_cpufreq_get_freq_by_idx(enum mt_cpu_dvfs_id id, int idx);
  162. extern int mt_cpufreq_update_volt(enum mt_cpu_dvfs_id id, unsigned int *volt_tbl,
  163. int nr_volt_tbl);
  164. extern void mt_cpufreq_restore_default_volt(enum mt_cpu_dvfs_id id);
  165. extern unsigned int mt_cpufreq_get_cur_volt(enum mt_cpu_dvfs_id id);
  166. extern void mt_cpufreq_enable_by_ptpod(enum mt_cpu_dvfs_id id);
  167. extern unsigned int mt_cpufreq_disable_by_ptpod(enum mt_cpu_dvfs_id id);
  168. extern int mt_cpufreq_set_lte_volt(int pmic_val);
  169. /* Thermal */
  170. extern void mt_cpufreq_thermal_protect(unsigned int limited_power);
  171. /* PBM */
  172. extern void mt_cpufreq_set_power_limit_by_pbm(unsigned int limited_power);
  173. extern unsigned int mt_cpufreq_get_leakage_mw(enum mt_cpu_dvfs_id id);
  174. /* for perfService kernel module */
  175. extern void mt_cpufreq_set_min_freq(enum mt_cpu_dvfs_id id, unsigned int freq);
  176. extern void mt_cpufreq_set_max_freq(enum mt_cpu_dvfs_id id, unsigned int freq);
  177. /* Generic */
  178. /* extern int mt_cpufreq_state_set(int enabled); */
  179. extern int mt_cpufreq_set_cpu_clk_src(enum mt_cpu_dvfs_id id, enum top_ckmuxsel sel);
  180. extern enum top_ckmuxsel mt_cpufreq_get_cpu_clk_src(enum mt_cpu_dvfs_id id);
  181. extern void mt_cpufreq_setvolt_registerCB(cpuVoltsampler_func pCB);
  182. extern bool mt_cpufreq_earlysuspend_status_get(void);
  183. #ifdef CONFIG_CPU_FREQ_GOV_HOTPLUG
  184. extern void mt_cpufreq_set_ramp_down_count_const(enum mt_cpu_dvfs_id id, int count);
  185. #endif
  186. #ifndef __KERNEL__
  187. extern int mt_cpufreq_pdrv_probe(void);
  188. extern int mt_cpufreq_set_opp_volt(enum mt_cpu_dvfs_id id, int idx);
  189. extern int mt_cpufreq_set_freq(enum mt_cpu_dvfs_id id, int idx);
  190. extern unsigned int dvfs_get_cpu_freq(enum mt_cpu_dvfs_id id);
  191. extern void dvfs_set_cpu_freq_FH(enum mt_cpu_dvfs_id id, int freq);
  192. extern unsigned int dvfs_get_cur_oppidx(enum mt_cpu_dvfs_id id);
  193. extern unsigned int cpu_frequency_output_slt(enum mt_cpu_dvfs_id id);
  194. extern unsigned int mt_get_cur_volt_lte(void);
  195. extern unsigned int dvfs_get_cpu_volt(enum mt_cpu_dvfs_id id);
  196. extern void dvfs_set_cpu_volt(enum mt_cpu_dvfs_id id, int volt);
  197. extern void dvfs_set_gpu_volt(int pmic_val);
  198. extern void dvfs_set_vcore_ao_volt(int pmic_val);
  199. /* extern void dvfs_set_vcore_pdn_volt(int pmic_val); */
  200. extern void dvfs_disable_by_ptpod(int id);
  201. extern void dvfs_enable_by_ptpod(int id);
  202. #endif /* ! __KERNEL__ */
  203. #ifdef __cplusplus
  204. }
  205. #endif
  206. #endif /* __MT_CPUFREQ_H__ */