mt_spm_dpidle.c 62 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381
  1. #include <linux/init.h>
  2. #include <linux/module.h>
  3. #include <linux/kernel.h>
  4. #include <linux/spinlock.h>
  5. #include <linux/delay.h>
  6. #include <linux/of_fdt.h>
  7. #include <linux/lockdep.h>
  8. #include <linux/irqchip/mt-gic.h>
  9. #ifdef CONFIG_OF
  10. #include <linux/of.h>
  11. #include <linux/of_irq.h>
  12. #include <linux/of_address.h>
  13. #endif
  14. #include <mach/wd_api.h>
  15. #if defined(CONFIG_ARCH_MT6753)
  16. #include <mach/mt_secure_api.h>
  17. #endif
  18. #include <mt-plat/upmu_common.h>
  19. #include <mt-plat/mt_cirq.h>
  20. #include <mt-plat/mt_ccci_common.h>
  21. #include "mt_spm_idle.h"
  22. #include "mt_cpufreq.h"
  23. #include "mt_cpuidle.h"
  24. #include "mt_spm_internal.h"
  25. /*
  26. * only for internal debug
  27. */
  28. #define DPIDLE_TAG "[DP] "
  29. #define dpidle_dbg(fmt, args...) pr_debug(DPIDLE_TAG fmt, ##args)
  30. #define SPM_PWAKE_EN 0
  31. #define SPM_BYPASS_SYSPWREQ 1
  32. #if defined(CONFIG_ARCH_MT6735)
  33. #define WAKE_SRC_FOR_DPIDLE \
  34. (WAKE_SRC_KP | WAKE_SRC_GPT | WAKE_SRC_EINT | WAKE_SRC_CONN_WDT | \
  35. WAKE_SRC_CCIF0_MD | WAKE_SRC_CCIF1_MD | WAKE_SRC_CONN2AP | WAKE_SRC_USB_CD | \
  36. WAKE_SRC_USB_PDN | WAKE_SRC_SEJ | WAKE_SRC_AFE | WAKE_SRC_CIRQ | WAKE_SRC_MD1_VRF18_WAKE | \
  37. WAKE_SRC_SYSPWREQ | WAKE_SRC_MD_WDT | WAKE_SRC_C2K_WDT | WAKE_SRC_CLDMA_MD)
  38. #elif defined(CONFIG_ARCH_MT6735M)
  39. #define WAKE_SRC_FOR_DPIDLE \
  40. (WAKE_SRC_KP | WAKE_SRC_GPT | WAKE_SRC_EINT | WAKE_SRC_CONN_WDT | \
  41. WAKE_SRC_CCIF0_MD | WAKE_SRC_CCIF1_MD | WAKE_SRC_CONN2AP | WAKE_SRC_USB_CD | \
  42. WAKE_SRC_USB_PDN | WAKE_SRC_SEJ | WAKE_SRC_AFE | WAKE_SRC_CIRQ | WAKE_SRC_MD1_VRF18_WAKE | \
  43. WAKE_SRC_SYSPWREQ | WAKE_SRC_MD_WDT | WAKE_SRC_CLDMA_MD)
  44. #elif defined(CONFIG_ARCH_MT6753)
  45. #if defined(CONFIG_MICROTRUST_TEE_SUPPORT)
  46. #define WAKE_SRC_FOR_DPIDLE \
  47. (WAKE_SRC_KP | WAKE_SRC_GPT | WAKE_SRC_EINT | WAKE_SRC_CONN_WDT | \
  48. WAKE_SRC_CCIF0_MD | WAKE_SRC_CCIF1_MD | WAKE_SRC_CONN2AP | WAKE_SRC_USB_CD | \
  49. WAKE_SRC_USB_PDN | WAKE_SRC_AFE | WAKE_SRC_CIRQ | WAKE_SRC_MD1_VRF18_WAKE | \
  50. WAKE_SRC_SYSPWREQ | WAKE_SRC_MD_WDT | WAKE_SRC_C2K_WDT | WAKE_SRC_CLDMA_MD)
  51. #else
  52. #define WAKE_SRC_FOR_DPIDLE \
  53. (WAKE_SRC_KP | WAKE_SRC_GPT | WAKE_SRC_EINT | WAKE_SRC_CONN_WDT | \
  54. WAKE_SRC_CCIF0_MD | WAKE_SRC_CCIF1_MD | WAKE_SRC_CONN2AP | WAKE_SRC_USB_CD | \
  55. WAKE_SRC_USB_PDN | WAKE_SRC_SEJ | WAKE_SRC_AFE | WAKE_SRC_CIRQ | WAKE_SRC_MD1_VRF18_WAKE | \
  56. WAKE_SRC_SYSPWREQ | WAKE_SRC_MD_WDT | WAKE_SRC_C2K_WDT | WAKE_SRC_CLDMA_MD)
  57. #endif
  58. #elif defined(CONFIG_ARCH_MT6580)
  59. #define WAKE_SRC_FOR_DPIDLE \
  60. (WAKE_SRC_KP | WAKE_SRC_GPT | WAKE_SRC_EINT | WAKE_SRC_CONN_WDT| \
  61. WAKE_SRC_CCIF0_MD | WAKE_SRC_CONN2AP | WAKE_SRC_USB_CD | WAKE_SRC_USB_PDN | \
  62. WAKE_SRC_AFE | WAKE_SRC_SYSPWREQ | WAKE_SRC_MD1_WDT | WAKE_SRC_SEJ)
  63. #else
  64. #error "Does not support!"
  65. #endif
  66. #define WAKE_SRC_FOR_MD32 0
  67. #define I2C_CHANNEL 2
  68. #define spm_is_wakesrc_invalid(wakesrc) (!!((u32)(wakesrc) & 0xc0003803))
  69. #if defined(CONFIG_ARCH_MT6753)
  70. #define reg_read(addr) __raw_readl(IOMEM(addr))
  71. #define reg_write(addr, val) mt_reg_sync_writel((val), ((void *)addr))
  72. #if defined(CONFIG_OF)
  73. #define MCUCFG_NODE "mediatek,MCUCFG"
  74. static unsigned long mcucfg_base;
  75. static unsigned long mcucfg_phys_base;
  76. #undef MCUCFG_BASE
  77. #define MCUCFG_BASE (mcucfg_base)
  78. #else /* #if defined(CONFIG_OF) */
  79. #undef MCUCFG_BASE
  80. #define MCUCFG_BASE 0xF0200000
  81. #endif /* #if defined(CONFIG_OF) */
  82. /* MCUCFG registers */
  83. #define MP0_AXI_CONFIG (MCUCFG_BASE + 0x2C)
  84. #define MP0_AXI_CONFIG_PHYS (mcucfg_phys_base + 0x2C)
  85. #define MP1_AXI_CONFIG (MCUCFG_BASE + 0x22C)
  86. #define MP1_AXI_CONFIG_PHYS (mcucfg_phys_base + 0x22C)
  87. #define ACINACTM (1 << 4)
  88. #if defined(CONFIG_ARM_PSCI) || defined(CONFIG_MTK_PSCI)
  89. #define MCUSYS_SMC_WRITE(addr, val) mcusys_smc_write_phy(addr##_PHYS, val)
  90. #else
  91. #define MCUSYS_SMC_WRITE(addr, val) mcusys_smc_write(addr, val)
  92. #endif
  93. #endif /* #if defined(CONFIG_ARCH_MT6753) */
  94. #ifdef CONFIG_MTK_RAM_CONSOLE
  95. #define SPM_AEE_RR_REC 1
  96. #else
  97. #define SPM_AEE_RR_REC 0
  98. #endif
  99. #define SPM_USE_TWAM_DEBUG 0
  100. #define DPIDLE_LOG_PRINT_TIMEOUT_CRITERIA 20
  101. #define DPIDLE_LOG_DISCARD_CRITERIA 5000 /* ms */
  102. #if SPM_AEE_RR_REC
  103. enum spm_deepidle_step {
  104. SPM_DEEPIDLE_ENTER = 0,
  105. SPM_DEEPIDLE_ENTER_UART_SLEEP,
  106. SPM_DEEPIDLE_ENTER_WFI,
  107. SPM_DEEPIDLE_LEAVE_WFI,
  108. SPM_DEEPIDLE_ENTER_UART_AWAKE,
  109. SPM_DEEPIDLE_LEAVE
  110. };
  111. #endif
  112. #if defined(CONFIG_ARCH_MT6735)
  113. /*
  114. * PCM code for deep idle
  115. */
  116. static const u32 dpidle_binary[] = {
  117. 0x81429801, 0xd80001e5, 0x17c07c1f, 0x18c0001f, 0x10001138, 0x1910001f,
  118. 0x10001138, 0xa1108404, 0xe0c00004, 0x1910001f, 0x10001138, 0x1a00001f,
  119. 0x10006604, 0xc0c03580, 0xe2200007, 0x1a00001f, 0x100062c4, 0x1890001f,
  120. 0x100062c4, 0xa0940402, 0x1b00001f, 0x10000001, 0x1910001f, 0x10006310,
  121. 0x80c39001, 0xd8200443, 0xe2000002, 0x80c10001, 0x1b00001f, 0xbf7ce7ff,
  122. 0xd8200443, 0x17c07c1f, 0x1b00001f, 0x7f7ce7ff, 0xf0000000, 0x17c07c1f,
  123. 0x81429801, 0xd8000665, 0x17c07c1f, 0x18c0001f, 0x10001138, 0x1910001f,
  124. 0x10001138, 0x81308404, 0xe0c00004, 0x1910001f, 0x10001138, 0x1a00001f,
  125. 0x10006604, 0xc0c03580, 0xe2200007, 0x1a00001f, 0x100062c4, 0x1890001f,
  126. 0x100062c4, 0x80b40402, 0x1b00001f, 0x00801001, 0x1910001f, 0x10006310,
  127. 0x80c39001, 0xd82008c3, 0xe2000002, 0x80c10001, 0x1b00001f, 0x6ffcf7ff,
  128. 0xd80008c3, 0x17c07c1f, 0x1b00001f, 0xaffce7ff, 0xf0000000, 0x17c07c1f,
  129. 0x81459801, 0xd8000a05, 0x17c07c1f, 0x1a00001f, 0x10006604, 0xe2200002,
  130. 0xc0c03580, 0x17c07c1f, 0x80328400, 0xc2803480, 0x1290041f, 0x1b00001f,
  131. 0x6ffcf7ff, 0xf0000000, 0x17c07c1f, 0x1b00001f, 0x2f7ce7ff, 0x1b80001f,
  132. 0x20000004, 0xd8000d4c, 0x17c07c1f, 0xa0128400, 0xc2803480, 0x1290841f,
  133. 0x81459801, 0xd8000d05, 0x17c07c1f, 0x1a00001f, 0x10006604, 0xe2200005,
  134. 0xc0c03580, 0x17c07c1f, 0x1b00001f, 0x2f7cefff, 0xf0000000, 0x17c07c1f,
  135. 0x18c0001f, 0x102135cc, 0x1910001f, 0x102135cc, 0x813f8404, 0xe0c00004,
  136. 0x1910001f, 0x102135cc, 0x81411801, 0xd8000fa5, 0x17c07c1f, 0x18c0001f,
  137. 0x10006240, 0xe0e00016, 0xe0e0001e, 0xe0e0000e, 0xe0e0000f, 0x803e0400,
  138. 0x1b80001f, 0x20000222, 0x80380400, 0x1b80001f, 0x20000280, 0x803b0400,
  139. 0x1b80001f, 0x2000001a, 0x803d0400, 0x1b80001f, 0x20000208, 0x80340400,
  140. 0x80310400, 0x1b80001f, 0x2000000a, 0x18c0001f, 0x10006240, 0xe0e0000d,
  141. 0xd80015c5, 0x17c07c1f, 0x1b80001f, 0x20000020, 0x18c0001f, 0x102130f0,
  142. 0x1910001f, 0x102130f0, 0xa9000004, 0x10000000, 0xe0c00004, 0x1b80001f,
  143. 0x2000000a, 0x89000004, 0xefffffff, 0xe0c00004, 0x18c0001f, 0x102140f4,
  144. 0x1910001f, 0x102140f4, 0xa9000004, 0x02000000, 0xe0c00004, 0x1b80001f,
  145. 0x2000000a, 0x89000004, 0xfdffffff, 0xe0c00004, 0x1910001f, 0x102140f4,
  146. 0x81fa0407, 0x81f08407, 0xe8208000, 0x10006354, 0x001fdaa3, 0xa1d80407,
  147. 0xa1de8407, 0xa1df0407, 0xc2803480, 0x1291041f, 0x1b00001f, 0xbf7ce7ff,
  148. 0x1950001f, 0x100062c4, 0x80c41401, 0xd8001823, 0x17c07c1f, 0x1b00001f,
  149. 0xaffce7ff, 0xf0000000, 0x17c07c1f, 0x1b80001f, 0x20000fdf, 0x1a50001f,
  150. 0x10006608, 0x80c9a401, 0x810ba401, 0x10920c1f, 0xa0979002, 0x80ca2401,
  151. 0xa0938c02, 0x8080080d, 0xd8201ca2, 0x17c07c1f, 0x81f08407, 0xa1d80407,
  152. 0xa1de8407, 0xa1df0407, 0x1b00001f, 0x2f7ce7ff, 0x1b80001f, 0x20000004,
  153. 0xd800232c, 0x17c07c1f, 0x1b00001f, 0xbf7ce7ff, 0x1950001f, 0x100062c4,
  154. 0x80c41401, 0xd8002323, 0x17c07c1f, 0x1b00001f, 0xaffce7ff, 0xd0002320,
  155. 0x17c07c1f, 0x81f80407, 0x81fe8407, 0x81ff0407, 0x1900001f, 0x40000000,
  156. 0x18d0001f, 0x40000000, 0xe1000003, 0xc0c03660, 0x1080041f, 0x1880001f,
  157. 0x10006320, 0xc0c02cc0, 0xe080000f, 0xd8001a03, 0x17c07c1f, 0xe080001f,
  158. 0xa1da0407, 0xa0110400, 0xa0140400, 0xa0180400, 0xa01b0400, 0xa01d0400,
  159. 0x1b80001f, 0x20000068, 0xa01e0400, 0x1b80001f, 0x20000104, 0x18c0001f,
  160. 0x102135cc, 0x1910001f, 0x102135cc, 0xa11f8404, 0xe0c00004, 0x81411801,
  161. 0xd80021c5, 0x17c07c1f, 0x18c0001f, 0x10006240, 0xc0c02c00, 0x17c07c1f,
  162. 0xc2803480, 0x1291841f, 0x1b00001f, 0x6ffcf7ff, 0x1950001f, 0x100062c4,
  163. 0x80c41401, 0xd8202323, 0x17c07c1f, 0x1b00001f, 0x7f7ce7ff, 0xf0000000,
  164. 0x17c07c1f, 0x81441801, 0xd8202585, 0x17c07c1f, 0x1a00001f, 0x10006604,
  165. 0xc0c03580, 0xe2200004, 0xc0c03660, 0x1093041f, 0xc0c03580, 0xe2200003,
  166. 0xc0c03660, 0x1093041f, 0xc0c03580, 0xe2200002, 0xc0c03660, 0x1093041f,
  167. 0x1a00001f, 0x100062c4, 0x1890001f, 0x100062c4, 0xa0908402, 0xe2000002,
  168. 0x1b00001f, 0x00801001, 0xf0000000, 0x17c07c1f, 0x1a00001f, 0x100062c4,
  169. 0x1890001f, 0x100062c4, 0x80b08402, 0xe2000002, 0x81441801, 0xd82029a5,
  170. 0x17c07c1f, 0x1a00001f, 0x10006604, 0xc0c03580, 0xe2200003, 0xc0c03660,
  171. 0x1093041f, 0xc0c03580, 0xe2200004, 0xc0c03660, 0x1093041f, 0xc0c03580,
  172. 0xe2200005, 0xc0c03660, 0x1093041f, 0x1b00001f, 0x00000801, 0xf0000000,
  173. 0x17c07c1f, 0xe0f07f16, 0x1380201f, 0xe0f07f1e, 0x1380201f, 0xe0f07f0e,
  174. 0x1b80001f, 0x20000100, 0xe0f07f0c, 0xe0f07f0d, 0xe0f07e0d, 0xe0f07c0d,
  175. 0xe0f0780d, 0xe0f0700d, 0xf0000000, 0x17c07c1f, 0xe0f07f0d, 0xe0f07f0f,
  176. 0xe0f07f1e, 0xe0f07f12, 0xf0000000, 0x17c07c1f, 0x1112841f, 0xa1d08407,
  177. 0xd8202d84, 0x80eab401, 0xd8002d03, 0x01200404, 0x1a00001f, 0x10006814,
  178. 0xe2000003, 0xf0000000, 0x17c07c1f, 0xa1d00407, 0x1b80001f, 0x20000100,
  179. 0x80ea3401, 0x1a00001f, 0x10006814, 0xe2000003, 0xf0000000, 0x17c07c1f,
  180. 0xd800304a, 0x17c07c1f, 0xe2e00036, 0x17c07c1f, 0x17c07c1f, 0xe2e0003e,
  181. 0x1380201f, 0xe2e0003c, 0xd820318a, 0x17c07c1f, 0x1b80001f, 0x20000018,
  182. 0xe2e0007c, 0x1b80001f, 0x20000003, 0xe2e0005c, 0xe2e0004c, 0xe2e0004d,
  183. 0xf0000000, 0x17c07c1f, 0xa1d10407, 0x1b80001f, 0x20000020, 0xf0000000,
  184. 0x17c07c1f, 0xa1d40407, 0x1391841f, 0xa1d90407, 0xf0000000, 0x17c07c1f,
  185. 0xd80033aa, 0x17c07c1f, 0xe2e0004f, 0xe2e0006f, 0xe2e0002f, 0xd820344a,
  186. 0x17c07c1f, 0xe2e0002e, 0xe2e0003e, 0xe2e00032, 0xf0000000, 0x17c07c1f,
  187. 0x18c0001f, 0x10006b18, 0x1910001f, 0x10006b18, 0xa1002804, 0xe0c00004,
  188. 0xf0000000, 0x17c07c1f, 0x18d0001f, 0x10006604, 0x10cf8c1f, 0xd8203583,
  189. 0x17c07c1f, 0xf0000000, 0x17c07c1f, 0x81499801, 0xd82037c5, 0x17c07c1f,
  190. 0xd8203ce2, 0x17c07c1f, 0x18d0001f, 0x40000000, 0x18d0001f, 0x70000000,
  191. 0xd80036c2, 0x00a00402, 0x814a1801, 0xd8203925, 0x17c07c1f, 0xd8203ce2,
  192. 0x17c07c1f, 0x18d0001f, 0x40000000, 0x18d0001f, 0x80000000, 0xd8003822,
  193. 0x00a00402, 0x814a9801, 0xd8203a85, 0x17c07c1f, 0xd8203ce2, 0x17c07c1f,
  194. 0x18d0001f, 0x40000000, 0x18d0001f, 0xc0000000, 0xd8003982, 0x00a00402,
  195. 0x814c1801, 0xd8203be5, 0x17c07c1f, 0xd8203ce2, 0x17c07c1f, 0x18d0001f,
  196. 0x40000000, 0x18d0001f, 0xa0000000, 0xd8003ae2, 0x00a00402, 0xd8203ce2,
  197. 0x17c07c1f, 0x18d0001f, 0x40000000, 0x18d0001f, 0x40000000, 0xd8003be2,
  198. 0x00a00402, 0xf0000000, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
  199. 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
  200. 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
  201. 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
  202. 0x17c07c1f, 0x17c07c1f, 0x1840001f, 0x00000001, 0xa1d48407, 0x1990001f,
  203. 0x10006b08, 0xe8208000, 0x10006b18, 0x00000000, 0x81441801, 0xd8204565,
  204. 0x17c07c1f, 0x1910001f, 0x100062c4, 0x80849001, 0x1a00001f, 0x10006b0c,
  205. 0x1950001f, 0x10006b0c, 0xa1508805, 0xe2000005, 0x18c0001f, 0x2f7ce7ff,
  206. 0x80809001, 0x81600801, 0xa0d59403, 0xa0d60803, 0xd8004465, 0x17c07c1f,
  207. 0x80841001, 0x81600801, 0xa0db9403, 0xa0de0803, 0xd8004465, 0x17c07c1f,
  208. 0x80f60403, 0xe8208000, 0x10006310, 0x0b160c38, 0x13000c1f, 0x1b80001f,
  209. 0xd00f0000, 0xd00045a0, 0x17c07c1f, 0x1b00001f, 0x2f7ce7ff, 0x81469801,
  210. 0xd8204705, 0x17c07c1f, 0x1b80001f, 0xd00f0000, 0x8880000c, 0x2f7ce7ff,
  211. 0xd8006502, 0x17c07c1f, 0xd0004740, 0x17c07c1f, 0x1b80001f, 0x500f0000,
  212. 0xe8208000, 0x10006354, 0x001fdaa3, 0xc0c031c0, 0x81401801, 0xd8004c65,
  213. 0x17c07c1f, 0x81f60407, 0x18c0001f, 0x10006200, 0xc0c03300, 0x12807c1f,
  214. 0xe8208000, 0x1000625c, 0x00000001, 0x1b80001f, 0x20000080, 0xc0c03300,
  215. 0x1280041f, 0x18c0001f, 0x10006208, 0xc0c03300, 0x12807c1f, 0xe8208000,
  216. 0x10006248, 0x00000000, 0x1b80001f, 0x20000080, 0xc0c03300, 0x1280041f,
  217. 0x18c0001f, 0x10006290, 0xc0c03300, 0x12807c1f, 0xc0c03300, 0x1280041f,
  218. 0x18c0001f, 0x100062dc, 0xe0c00001, 0xc2803480, 0x1292041f, 0x81469801,
  219. 0xd8004d45, 0x17c07c1f, 0x8880000c, 0x2f7ce7ff, 0xd8006062, 0x17c07c1f,
  220. 0xc0c03260, 0x17c07c1f, 0x18c0001f, 0x10006294, 0xe0f07fff, 0xe0e00fff,
  221. 0xe0e000ff, 0x81449801, 0xd8005065, 0x17c07c1f, 0x1a00001f, 0x10006604,
  222. 0xe2200006, 0xc0c03580, 0x17c07c1f, 0x1a00001f, 0x10006604, 0xe2200001,
  223. 0xc0c03580, 0x17c07c1f, 0x18c0001f, 0x10001130, 0x1910001f, 0x10006b14,
  224. 0xe0c00004, 0xa1d38407, 0xa1d98407, 0xa0108400, 0xa0120400, 0xa0148400,
  225. 0xa0150400, 0xa0158400, 0xa01b8400, 0xa01c0400, 0xa01c8400, 0xa0188400,
  226. 0xa0190400, 0xa0198400, 0x81441801, 0xd8205465, 0x17c07c1f, 0x1910001f,
  227. 0x10006b0c, 0x1a00001f, 0x100062c4, 0x1950001f, 0x100062c4, 0x80809001,
  228. 0x81748405, 0xa1548805, 0xe2000005, 0x1a00001f, 0x10006b0c, 0x80c51801,
  229. 0x81308404, 0xa1108c04, 0xe2000004, 0xe8208000, 0x10006310, 0x0b1603f8,
  230. 0x1950001f, 0x100062c4, 0x80841401, 0x81600801, 0x18c0001f, 0xaf7ce7ff,
  231. 0xa0de0803, 0xa0db9403, 0x13000c1f, 0x1b80001f, 0x90100000, 0x80c28001,
  232. 0xc8c00903, 0x17c07c1f, 0x80c10001, 0xc8c00d83, 0x17c07c1f, 0x1a00001f,
  233. 0x100062c4, 0x1890001f, 0x100062c4, 0xa0908402, 0xe2000002, 0x18d0001f,
  234. 0x10006284, 0x80810c01, 0xd8205b02, 0x17c07c1f, 0x18d0001f, 0x100062c4,
  235. 0x80840c01, 0xd8005b02, 0x17c07c1f, 0x18c0001f, 0x10001138, 0x1910001f,
  236. 0x10001138, 0xa1108404, 0xe0c00004, 0x1910001f, 0x10001138, 0x1a00001f,
  237. 0x10006604, 0xe2200007, 0x1a00001f, 0x100062c4, 0x1890001f, 0x100062c4,
  238. 0xa0940402, 0xe2000002, 0x1b00001f, 0x2f7ce7ff, 0x18c0001f, 0x10006294,
  239. 0xe0e001fe, 0xe0e003fc, 0xe0e007f8, 0xe0e00ff0, 0x1b80001f, 0x20000020,
  240. 0xe0f07ff0, 0xe0f07f00, 0x81449801, 0xd8005de5, 0x17c07c1f, 0x1a00001f,
  241. 0x10006604, 0xe2200006, 0xc0c03580, 0x17c07c1f, 0xe2200000, 0xc0c03580,
  242. 0x17c07c1f, 0x80388400, 0x80390400, 0x80398400, 0x1b80001f, 0x20000300,
  243. 0x803b8400, 0x803c0400, 0x803c8400, 0x1b80001f, 0x20000300, 0x80348400,
  244. 0x80350400, 0x80358400, 0x1b80001f, 0x20000104, 0x10007c1f, 0x81f38407,
  245. 0x81f98407, 0x81f90407, 0x81f40407, 0x81401801, 0xd8006505, 0x17c07c1f,
  246. 0x18c0001f, 0x100062dc, 0xe0c0001f, 0x18c0001f, 0x10006290, 0x1212841f,
  247. 0xc0c02f40, 0x12807c1f, 0xc0c02f40, 0x1280041f, 0x18c0001f, 0x10006208,
  248. 0x1212841f, 0xc0c02f40, 0x12807c1f, 0xe8208000, 0x10006248, 0x00000001,
  249. 0x1b80001f, 0x20000080, 0xc0c02f40, 0x1280041f, 0x18c0001f, 0x10006200,
  250. 0x1212841f, 0xc0c02f40, 0x12807c1f, 0xe8208000, 0x1000625c, 0x00000000,
  251. 0x1b80001f, 0x20000080, 0xc0c02f40, 0x1280041f, 0x19c0001f, 0x60415820,
  252. 0xe8208000, 0x10006310, 0x0b160008, 0xc2803480, 0x1293841f, 0x18c0001f,
  253. 0x10006b14, 0xe0c0000c, 0x18c0001f, 0x10006b68, 0x1950001f, 0x100063c0,
  254. 0xe0c00005, 0x81441801, 0xd8206b05, 0x10c0041f, 0x1910001f, 0x100062c4,
  255. 0x80849001, 0x1a00001f, 0x10006b0c, 0x1910001f, 0x10006b0c, 0xa0908804,
  256. 0xe2000002, 0x81441801, 0xd8206b05, 0x10c0041f, 0x1910001f, 0x100062c4,
  257. 0x80809001, 0x81600801, 0xa0d59403, 0xa0d60803, 0xd8006aa5, 0x17c07c1f,
  258. 0x80841001, 0x81600801, 0xa0db9403, 0xa0de0803, 0xd8006aa5, 0x17c07c1f,
  259. 0x80f60403, 0xe8208000, 0x10006310, 0x0b160c38, 0x13000c1f, 0x1b80001f,
  260. 0x900a0000, 0x88900001, 0x10006814, 0xd8206862, 0x17c07c1f, 0x18d0001f,
  261. 0x10006b6c, 0x78a00003, 0x0000beef, 0xd8006d22, 0x17c07c1f, 0xc0c06f80,
  262. 0x17c07c1f, 0xd0006860, 0x17c07c1f, 0x1910001f, 0x10006b0c, 0x1a00001f,
  263. 0x100062c4, 0x1950001f, 0x100062c4, 0x80809001, 0x81748405, 0xa1548805,
  264. 0xe2000005, 0x80841401, 0xd8006f02, 0x8204b401, 0xc8c00008, 0x17c07c1f,
  265. 0x1ac0001f, 0x55aa55aa, 0x10007c1f, 0xf0000000, 0x1900001f, 0x10006014,
  266. 0x1950001f, 0x10006014, 0xa1508405, 0xe1000005, 0x1900001f, 0x10006814,
  267. 0xe100001f, 0x812ab401, 0xd80070a4, 0x17c07c1f, 0x1880001f, 0x10006284,
  268. 0x18d0001f, 0x10006284, 0x80f20403, 0xe0800003, 0x80f08403, 0xe0800003,
  269. 0x1900001f, 0x10006014, 0x1950001f, 0x10006014, 0x81708405, 0xe1000005,
  270. 0x1900001f, 0x10006b6c, 0xe100001f, 0x81441801, 0xd80074e5, 0x17c07c1f,
  271. 0x18c0001f, 0x10001138, 0x1910001f, 0x10001138, 0xa1108404, 0xe0c00004,
  272. 0x1910001f, 0x10001138, 0x1a00001f, 0x10006604, 0xe2200007, 0xf0000000,
  273. 0x17c07c1f
  274. };
  275. static struct pcm_desc dpidle_pcm = {
  276. .version = "pcm_deepidle_v28.10.10.5.4_20160125-dummy_read",
  277. .base = dpidle_binary,
  278. .size = 937,
  279. .sess = 2,
  280. .replace = 0,
  281. .vec0 = EVENT_VEC(23, 1, 0, 0), /* FUNC_MD_VRF18_WAKEUP */
  282. .vec1 = EVENT_VEC(28, 1, 0, 36), /* FUNC_MD_VRF18_SLEEP */
  283. .vec2 = EVENT_VEC(11, 1, 0, 72), /* FUNC_26M_WAKEUP */
  284. .vec3 = EVENT_VEC(12, 1, 0, 87), /* FUNC_26M_SLEEP */
  285. .vec4 = EVENT_VEC(30, 1, 0, 108), /* FUNC_APSRC_WAKEUP */
  286. .vec5 = EVENT_VEC(31, 1, 0, 195), /* FUNC_APSRC_SLEEP */
  287. .vec6 = EVENT_VEC(11, 1, 0, 283), /* FUNC_VCORE_HIGH */
  288. .vec7 = EVENT_VEC(12, 1, 0, 310), /* FUNC_VCORE_LOW */
  289. };
  290. static struct pwr_ctrl dpidle_ctrl = {
  291. .wake_src = WAKE_SRC_FOR_DPIDLE,
  292. .wake_src_md32 = WAKE_SRC_FOR_MD32,
  293. .r0_ctrl_en = 1,
  294. .r7_ctrl_en = 1,
  295. .infra_dcm_lock = 1,
  296. .wfi_op = WFI_OP_AND,
  297. .ca15_wfi0_en = 1,
  298. .ca15_wfi1_en = 1,
  299. .ca15_wfi2_en = 1,
  300. .ca15_wfi3_en = 1,
  301. .ca7_wfi0_en = 1,
  302. .ca7_wfi1_en = 1,
  303. .ca7_wfi2_en = 1,
  304. .ca7_wfi3_en = 1,
  305. .disp_req_mask = 1,
  306. .mfg_req_mask = 1,
  307. .lte_mask = 1,
  308. .syspwreq_mask = 1,
  309. };
  310. #elif defined(CONFIG_ARCH_MT6735M)
  311. /*
  312. * PCM code for deep idle
  313. */
  314. static const u32 dpidle_binary[] = {
  315. 0x81429801, 0xd80001e5, 0x17c07c1f, 0x18c0001f, 0x10001124, 0x1910001f,
  316. 0x10001124, 0xa1108404, 0xe0c00004, 0x1910001f, 0x10001124, 0x1a00001f,
  317. 0x10006604, 0xc0c035a0, 0xe2200007, 0x1a00001f, 0x100062c4, 0x1890001f,
  318. 0x100062c4, 0xa0940402, 0x1b00001f, 0x10000001, 0x1910001f, 0x10006310,
  319. 0x80c39001, 0xd8200443, 0xe2000002, 0x80c10001, 0x1b00001f, 0xbf7ce7ff,
  320. 0xd8200443, 0x17c07c1f, 0x1b00001f, 0x7f7ce7ff, 0xf0000000, 0x17c07c1f,
  321. 0x81429801, 0xd8000665, 0x17c07c1f, 0x18c0001f, 0x10001124, 0x1910001f,
  322. 0x10001124, 0x81308404, 0xe0c00004, 0x1910001f, 0x10001124, 0x1a00001f,
  323. 0x10006604, 0xc0c035a0, 0xe2200007, 0x1a00001f, 0x100062c4, 0x1890001f,
  324. 0x100062c4, 0x80b40402, 0x1b00001f, 0x00801001, 0x1910001f, 0x10006310,
  325. 0x80c39001, 0xd82008c3, 0xe2000002, 0x80c10001, 0x1b00001f, 0x6ffcf7ff,
  326. 0xd80008c3, 0x17c07c1f, 0x1b00001f, 0xaffce7ff, 0xf0000000, 0x17c07c1f,
  327. 0x81459801, 0xd8000a05, 0x17c07c1f, 0x1a00001f, 0x10006604, 0xe2200002,
  328. 0xc0c035a0, 0x17c07c1f, 0x80328400, 0x80318400, 0xc28034a0, 0x1290041f,
  329. 0x1b00001f, 0x6ffcf7ff, 0xf0000000, 0x17c07c1f, 0x1b00001f, 0x2f7ce7ff,
  330. 0x1b80001f, 0x20000004, 0xd8000d6c, 0x17c07c1f, 0xa0128400, 0xc28034a0,
  331. 0x1290841f, 0x81459801, 0xd8000d25, 0x17c07c1f, 0x1a00001f, 0x10006604,
  332. 0xe2200005, 0xc0c035a0, 0x17c07c1f, 0x1b00001f, 0x2f7cefff, 0xf0000000,
  333. 0x17c07c1f, 0x18c0001f, 0x102135cc, 0x1910001f, 0x102135cc, 0x813f8404,
  334. 0xe0c00004, 0x1910001f, 0x102135cc, 0x81411801, 0xd8000fc5, 0x17c07c1f,
  335. 0x18c0001f, 0x10006240, 0xe0e00016, 0xe0e0001e, 0xe0e0000e, 0xe0e0000f,
  336. 0x803e0400, 0x1b80001f, 0x20000222, 0x80380400, 0x1b80001f, 0x20000280,
  337. 0x803b0400, 0x1b80001f, 0x2000001a, 0x803d0400, 0x1b80001f, 0x20000208,
  338. 0x80340400, 0x80310400, 0x1b80001f, 0x2000000a, 0x18c0001f, 0x10006240,
  339. 0xe0e0000d, 0xd80015e5, 0x17c07c1f, 0x1b80001f, 0x20000020, 0x18c0001f,
  340. 0x102130f0, 0x1910001f, 0x102130f0, 0xa9000004, 0x10000000, 0xe0c00004,
  341. 0x1b80001f, 0x2000000a, 0x89000004, 0xefffffff, 0xe0c00004, 0x18c0001f,
  342. 0x102140f4, 0x1910001f, 0x102140f4, 0xa9000004, 0x02000000, 0xe0c00004,
  343. 0x1b80001f, 0x2000000a, 0x89000004, 0xfdffffff, 0xe0c00004, 0x1910001f,
  344. 0x102140f4, 0x81fa0407, 0x81f08407, 0xe8208000, 0x10006354, 0x001fdaa3,
  345. 0xa1d80407, 0xa1de8407, 0xa1df0407, 0xc28034a0, 0x1291041f, 0x1b00001f,
  346. 0xbf7ce7ff, 0x1950001f, 0x100062c4, 0x80c41401, 0xd8001843, 0x17c07c1f,
  347. 0x1b00001f, 0xaffce7ff, 0xf0000000, 0x17c07c1f, 0x1b80001f, 0x20000fdf,
  348. 0x1a50001f, 0x10006608, 0x80c9a401, 0x810ba401, 0x10920c1f, 0xa0979002,
  349. 0x80ca2401, 0xa0938c02, 0x8080080d, 0xd8201cc2, 0x17c07c1f, 0x81f08407,
  350. 0xa1d80407, 0xa1de8407, 0xa1df0407, 0x1b00001f, 0x2f7ce7ff, 0x1b80001f,
  351. 0x20000004, 0xd800234c, 0x17c07c1f, 0x1b00001f, 0xbf7ce7ff, 0x1950001f,
  352. 0x100062c4, 0x80c41401, 0xd8002343, 0x17c07c1f, 0x1b00001f, 0xaffce7ff,
  353. 0xd0002340, 0x17c07c1f, 0x81f80407, 0x81fe8407, 0x81ff0407, 0x1900001f,
  354. 0x40000000, 0x18d0001f, 0x40000000, 0xe1000003, 0xc0c03680, 0x1080041f,
  355. 0x1880001f, 0x10006320, 0xc0c02ce0, 0xe080000f, 0xd8001a23, 0x17c07c1f,
  356. 0xe080001f, 0xa1da0407, 0xa0110400, 0xa0140400, 0xa0180400, 0xa01b0400,
  357. 0xa01d0400, 0x1b80001f, 0x20000068, 0xa01e0400, 0x1b80001f, 0x20000104,
  358. 0x18c0001f, 0x102135cc, 0x1910001f, 0x102135cc, 0xa11f8404, 0xe0c00004,
  359. 0x81411801, 0xd80021e5, 0x17c07c1f, 0x18c0001f, 0x10006240, 0xc0c02c20,
  360. 0x17c07c1f, 0xc28034a0, 0x1291841f, 0x1b00001f, 0x6ffcf7ff, 0x1950001f,
  361. 0x100062c4, 0x80c41401, 0xd8202343, 0x17c07c1f, 0x1b00001f, 0x7f7ce7ff,
  362. 0xf0000000, 0x17c07c1f, 0x81441801, 0xd82025a5, 0x17c07c1f, 0x1a00001f,
  363. 0x10006604, 0xc0c035a0, 0xe2200004, 0xc0c03680, 0x1093041f, 0xc0c035a0,
  364. 0xe2200003, 0xc0c03680, 0x1093041f, 0xc0c035a0, 0xe2200002, 0xc0c03680,
  365. 0x1093041f, 0x1a00001f, 0x100062c4, 0x1890001f, 0x100062c4, 0xa0908402,
  366. 0xe2000002, 0x1b00001f, 0x00801001, 0xf0000000, 0x17c07c1f, 0x1a00001f,
  367. 0x100062c4, 0x1890001f, 0x100062c4, 0x80b08402, 0xe2000002, 0x81441801,
  368. 0xd82029c5, 0x17c07c1f, 0x1a00001f, 0x10006604, 0xc0c035a0, 0xe2200003,
  369. 0xc0c03680, 0x1093041f, 0xc0c035a0, 0xe2200004, 0xc0c03680, 0x1093041f,
  370. 0xc0c035a0, 0xe2200005, 0xc0c03680, 0x1093041f, 0x1b00001f, 0x00000801,
  371. 0xf0000000, 0x17c07c1f, 0xe0f07f16, 0x1380201f, 0xe0f07f1e, 0x1380201f,
  372. 0xe0f07f0e, 0x1b80001f, 0x20000100, 0xe0f07f0c, 0xe0f07f0d, 0xe0f07e0d,
  373. 0xe0f07c0d, 0xe0f0780d, 0xe0f0700d, 0xf0000000, 0x17c07c1f, 0xe0f07f0d,
  374. 0xe0f07f0f, 0xe0f07f1e, 0xe0f07f12, 0xf0000000, 0x17c07c1f, 0x1112841f,
  375. 0xa1d08407, 0xd8202da4, 0x80eab401, 0xd8002d23, 0x01200404, 0x1a00001f,
  376. 0x10006814, 0xe2000003, 0xf0000000, 0x17c07c1f, 0xa1d00407, 0x1b80001f,
  377. 0x20000100, 0x80ea3401, 0x1a00001f, 0x10006814, 0xe2000003, 0xf0000000,
  378. 0x17c07c1f, 0xd800306a, 0x17c07c1f, 0xe2e00036, 0x17c07c1f, 0x17c07c1f,
  379. 0xe2e0003e, 0x1380201f, 0xe2e0003c, 0xd82031aa, 0x17c07c1f, 0x1b80001f,
  380. 0x20000018, 0xe2e0007c, 0x1b80001f, 0x20000003, 0xe2e0005c, 0xe2e0004c,
  381. 0xe2e0004d, 0xf0000000, 0x17c07c1f, 0xa1d10407, 0x1b80001f, 0x20000020,
  382. 0xf0000000, 0x17c07c1f, 0xa1d40407, 0x1391841f, 0xa1d90407, 0xf0000000,
  383. 0x17c07c1f, 0xd80033ca, 0x17c07c1f, 0xe2e0004f, 0xe2e0006f, 0xe2e0002f,
  384. 0xd820346a, 0x17c07c1f, 0xe2e0002e, 0xe2e0003e, 0xe2e00032, 0xf0000000,
  385. 0x17c07c1f, 0x18c0001f, 0x10006b18, 0x1910001f, 0x10006b18, 0xa1002804,
  386. 0xe0c00004, 0xf0000000, 0x17c07c1f, 0x18d0001f, 0x10006604, 0x10cf8c1f,
  387. 0xd82035a3, 0x17c07c1f, 0xf0000000, 0x17c07c1f, 0x81499801, 0xd82037e5,
  388. 0x17c07c1f, 0xd8203d02, 0x17c07c1f, 0x18d0001f, 0x40000000, 0x18d0001f,
  389. 0x70000000, 0xd80036e2, 0x00a00402, 0x814a1801, 0xd8203945, 0x17c07c1f,
  390. 0xd8203d02, 0x17c07c1f, 0x18d0001f, 0x40000000, 0x18d0001f, 0x80000000,
  391. 0xd8003842, 0x00a00402, 0x814a9801, 0xd8203aa5, 0x17c07c1f, 0xd8203d02,
  392. 0x17c07c1f, 0x18d0001f, 0x40000000, 0x18d0001f, 0xc0000000, 0xd80039a2,
  393. 0x00a00402, 0x814c1801, 0xd8203c05, 0x17c07c1f, 0xd8203d02, 0x17c07c1f,
  394. 0x18d0001f, 0x40000000, 0x18d0001f, 0xa0000000, 0xd8003b02, 0x00a00402,
  395. 0xd8203d02, 0x17c07c1f, 0x18d0001f, 0x40000000, 0x18d0001f, 0x40000000,
  396. 0xd8003c02, 0x00a00402, 0xf0000000, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
  397. 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
  398. 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
  399. 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
  400. 0x17c07c1f, 0x17c07c1f, 0x1840001f, 0x00000001, 0xa1d48407, 0x1990001f,
  401. 0x10006b08, 0xe8208000, 0x10006b18, 0x00000000, 0x81441801, 0xd8204565,
  402. 0x17c07c1f, 0x1910001f, 0x100062c4, 0x80849001, 0x1a00001f, 0x10006b0c,
  403. 0x1950001f, 0x10006b0c, 0xa1508805, 0xe2000005, 0x18c0001f, 0x2f7ce7ff,
  404. 0x80809001, 0x81600801, 0xa0d59403, 0xa0d60803, 0xd8004465, 0x17c07c1f,
  405. 0x80841001, 0x81600801, 0xa0db9403, 0xa0de0803, 0xd8004465, 0x17c07c1f,
  406. 0x80f60403, 0xe8208000, 0x10006310, 0x0b160c38, 0x13000c1f, 0x1b80001f,
  407. 0xd00f0000, 0xd00045a0, 0x17c07c1f, 0x1b00001f, 0x2f7ce7ff, 0x81469801,
  408. 0xd8204705, 0x17c07c1f, 0x1b80001f, 0xd00f0000, 0x8880000c, 0x2f7ce7ff,
  409. 0xd8006502, 0x17c07c1f, 0xd0004740, 0x17c07c1f, 0x1b80001f, 0x500f0000,
  410. 0xe8208000, 0x10006354, 0x001fdaa3, 0xc0c031e0, 0x81401801, 0xd8004c65,
  411. 0x17c07c1f, 0x81f60407, 0x18c0001f, 0x10006200, 0xc0c03320, 0x12807c1f,
  412. 0xe8208000, 0x1000625c, 0x00000001, 0x1b80001f, 0x20000080, 0xc0c03320,
  413. 0x1280041f, 0x18c0001f, 0x10006208, 0xc0c03320, 0x12807c1f, 0xe8208000,
  414. 0x10006248, 0x00000000, 0x1b80001f, 0x20000080, 0xc0c03320, 0x1280041f,
  415. 0x18c0001f, 0x10006290, 0xc0c03320, 0x12807c1f, 0xc0c03320, 0x1280041f,
  416. 0x18c0001f, 0x100062dc, 0xe0c00001, 0xc28034a0, 0x1292041f, 0x81469801,
  417. 0xd8004d45, 0x17c07c1f, 0x8880000c, 0x2f7ce7ff, 0xd8006062, 0x17c07c1f,
  418. 0xc0c03280, 0x17c07c1f, 0x18c0001f, 0x10006294, 0xe0f07fff, 0xe0e00fff,
  419. 0xe0e000ff, 0x81449801, 0xd8005065, 0x17c07c1f, 0x1a00001f, 0x10006604,
  420. 0xe2200006, 0xc0c035a0, 0x17c07c1f, 0x1a00001f, 0x10006604, 0xe2200001,
  421. 0xc0c035a0, 0x17c07c1f, 0x18c0001f, 0x1000111c, 0x1910001f, 0x10006b14,
  422. 0xe0c00004, 0xa1d38407, 0xa1d98407, 0xa0108400, 0xa0120400, 0xa0148400,
  423. 0xa0150400, 0xa0158400, 0xa01b8400, 0xa01c0400, 0xa01c8400, 0xa0188400,
  424. 0xa0190400, 0xa0198400, 0x81441801, 0xd8205465, 0x17c07c1f, 0x1910001f,
  425. 0x10006b0c, 0x1a00001f, 0x100062c4, 0x1950001f, 0x100062c4, 0x80809001,
  426. 0x81748405, 0xa1548805, 0xe2000005, 0x1a00001f, 0x10006b0c, 0x80c51801,
  427. 0x81308404, 0xa1108c04, 0xe2000004, 0xe8208000, 0x10006310, 0x0b1603f8,
  428. 0x1950001f, 0x100062c4, 0x80841401, 0x81600801, 0x18c0001f, 0xaf7ce7ff,
  429. 0xa0de0803, 0xa0db9403, 0x13000c1f, 0x1b80001f, 0x90100000, 0x80c28001,
  430. 0xc8c00903, 0x17c07c1f, 0x80c10001, 0xc8c00da3, 0x17c07c1f, 0x1a00001f,
  431. 0x100062c4, 0x1890001f, 0x100062c4, 0xa0908402, 0xe2000002, 0x18d0001f,
  432. 0x10006284, 0x80810c01, 0xd8205b02, 0x17c07c1f, 0x18d0001f, 0x100062c4,
  433. 0x80840c01, 0xd8005b02, 0x17c07c1f, 0x18c0001f, 0x10001124, 0x1910001f,
  434. 0x10001124, 0xa1108404, 0xe0c00004, 0x1910001f, 0x10001124, 0x1a00001f,
  435. 0x10006604, 0xe2200007, 0x1a00001f, 0x100062c4, 0x1890001f, 0x100062c4,
  436. 0xa0940402, 0xe2000002, 0x1b00001f, 0x2f7ce7ff, 0x18c0001f, 0x10006294,
  437. 0xe0e001fe, 0xe0e003fc, 0xe0e007f8, 0xe0e00ff0, 0x1b80001f, 0x20000020,
  438. 0xe0f07ff0, 0xe0f07f00, 0x81449801, 0xd8005de5, 0x17c07c1f, 0x1a00001f,
  439. 0x10006604, 0xe2200006, 0xc0c035a0, 0x17c07c1f, 0xe2200000, 0xc0c035a0,
  440. 0x17c07c1f, 0x80388400, 0x80390400, 0x80398400, 0x1b80001f, 0x20000300,
  441. 0x803b8400, 0x803c0400, 0x803c8400, 0x1b80001f, 0x20000300, 0x80348400,
  442. 0x80350400, 0x80358400, 0x1b80001f, 0x20000104, 0x10007c1f, 0x81f38407,
  443. 0x81f98407, 0x81f90407, 0x81f40407, 0x81401801, 0xd8006505, 0x17c07c1f,
  444. 0x18c0001f, 0x100062dc, 0xe0c0001f, 0x18c0001f, 0x10006290, 0x1212841f,
  445. 0xc0c02f60, 0x12807c1f, 0xc0c02f60, 0x1280041f, 0x18c0001f, 0x10006208,
  446. 0x1212841f, 0xc0c02f60, 0x12807c1f, 0xe8208000, 0x10006248, 0x00000001,
  447. 0x1b80001f, 0x20000080, 0xc0c02f60, 0x1280041f, 0x18c0001f, 0x10006200,
  448. 0x1212841f, 0xc0c02f60, 0x12807c1f, 0xe8208000, 0x1000625c, 0x00000000,
  449. 0x1b80001f, 0x20000080, 0xc0c02f60, 0x1280041f, 0x19c0001f, 0x60415820,
  450. 0xe8208000, 0x10006310, 0x0b160008, 0xc28034a0, 0x1293841f, 0x18c0001f,
  451. 0x10006b14, 0xe0c0000c, 0x18c0001f, 0x10006b68, 0x1950001f, 0x100063c0,
  452. 0xe0c00005, 0x81441801, 0xd8206b05, 0x10c0041f, 0x1910001f, 0x100062c4,
  453. 0x80849001, 0x1a00001f, 0x10006b0c, 0x1910001f, 0x10006b0c, 0xa0908804,
  454. 0xe2000002, 0x81441801, 0xd8206b05, 0x10c0041f, 0x1910001f, 0x100062c4,
  455. 0x80809001, 0x81600801, 0xa0d59403, 0xa0d60803, 0xd8006aa5, 0x17c07c1f,
  456. 0x80841001, 0x81600801, 0xa0db9403, 0xa0de0803, 0xd8006aa5, 0x17c07c1f,
  457. 0x80f60403, 0xe8208000, 0x10006310, 0x0b160c38, 0x13000c1f, 0x1b80001f,
  458. 0x900a0000, 0x88900001, 0x10006814, 0xd8206862, 0x17c07c1f, 0x18d0001f,
  459. 0x10006b6c, 0x78a00003, 0x0000beef, 0xd8006d22, 0x17c07c1f, 0xc0c06f80,
  460. 0x17c07c1f, 0xd0006860, 0x17c07c1f, 0x1910001f, 0x10006b0c, 0x1a00001f,
  461. 0x100062c4, 0x1950001f, 0x100062c4, 0x80809001, 0x81748405, 0xa1548805,
  462. 0xe2000005, 0x80841401, 0xd8006f02, 0x8204b401, 0xc8c00008, 0x17c07c1f,
  463. 0x1ac0001f, 0x55aa55aa, 0x10007c1f, 0xf0000000, 0x1900001f, 0x10006014,
  464. 0x1950001f, 0x10006014, 0xa1508405, 0xe1000005, 0x1900001f, 0x10006814,
  465. 0xe100001f, 0x812ab401, 0xd80070a4, 0x17c07c1f, 0x1880001f, 0x10006284,
  466. 0x18d0001f, 0x10006284, 0x80f20403, 0xe0800003, 0x80f08403, 0xe0800003,
  467. 0x1900001f, 0x10006014, 0x1950001f, 0x10006014, 0x81708405, 0xe1000005,
  468. 0x1900001f, 0x10006b6c, 0xe100001f, 0x81441801, 0xd80074e5, 0x17c07c1f,
  469. 0x18c0001f, 0x10001124, 0x1910001f, 0x10001124, 0xa1108404, 0xe0c00004,
  470. 0x1910001f, 0x10001124, 0x1a00001f, 0x10006604, 0xe2200007, 0xf0000000,
  471. 0x17c07c1f
  472. };
  473. static struct pcm_desc dpidle_pcm = {
  474. .version = "pcm_deepidle_v0.5.10.3_20160311-dummy_read",
  475. .base = dpidle_binary,
  476. .size = 937,
  477. .sess = 2,
  478. .replace = 0,
  479. .vec0 = EVENT_VEC(23, 1, 0, 0), /* FUNC_MD_VRF18_WAKEUP */
  480. .vec1 = EVENT_VEC(28, 1, 0, 36), /* FUNC_MD_VRF18_SLEEP */
  481. .vec2 = EVENT_VEC(11, 1, 0, 72), /* FUNC_26M_WAKEUP */
  482. .vec3 = EVENT_VEC(12, 1, 0, 88), /* FUNC_26M_SLEEP */
  483. .vec4 = EVENT_VEC(30, 1, 0, 109), /* FUNC_APSRC_WAKEUP */
  484. .vec5 = EVENT_VEC(31, 1, 0, 196), /* FUNC_APSRC_SLEEP */
  485. .vec6 = EVENT_VEC(11, 1, 0, 284), /* FUNC_VCORE_HIGH */
  486. .vec7 = EVENT_VEC(12, 1, 0, 311), /* FUNC_VCORE_LOW */
  487. };
  488. static struct pwr_ctrl dpidle_ctrl = {
  489. .wake_src = WAKE_SRC_FOR_DPIDLE,
  490. .wake_src_md32 = WAKE_SRC_FOR_MD32,
  491. .r0_ctrl_en = 1,
  492. .r7_ctrl_en = 1,
  493. .infra_dcm_lock = 1,
  494. .wfi_op = WFI_OP_AND,
  495. .ca15_wfi0_en = 1,
  496. .ca15_wfi1_en = 1,
  497. .ca15_wfi2_en = 1,
  498. .ca15_wfi3_en = 1,
  499. .ca7_wfi0_en = 1,
  500. .ca7_wfi1_en = 1,
  501. .ca7_wfi2_en = 1,
  502. .ca7_wfi3_en = 1,
  503. .md2_req_mask = 1,
  504. .disp_req_mask = 1,
  505. .mfg_req_mask = 1,
  506. .lte_mask = 1,
  507. .syspwreq_mask = 1,
  508. };
  509. #elif defined(CONFIG_ARCH_MT6753)
  510. /*
  511. * PCM code for deep idle
  512. */
  513. static const u32 dpidle_binary[] = {
  514. 0x81429801, 0xd80000e5, 0x17c07c1f, 0x1a00001f, 0x10006604, 0xc0c03700,
  515. 0xe2200007, 0x1a00001f, 0x100062c4, 0x1890001f, 0x100062c4, 0xa0940402,
  516. 0xe2000002, 0x10c0041f, 0x81008801, 0x81601001, 0xa0d59403, 0xa0d61003,
  517. 0xa0de0403, 0x1910001f, 0x10006310, 0x81439001, 0xd82003e5, 0x13000c1f,
  518. 0x80c10001, 0x1b00001f, 0xbf7ce7ff, 0xd82003e3, 0x17c07c1f, 0x1b00001f,
  519. 0x7f7ce7ff, 0xf0000000, 0x17c07c1f, 0x81429801, 0xd8000505, 0x17c07c1f,
  520. 0x1a00001f, 0x10006604, 0xc0c03700, 0xe2200009, 0x1a00001f, 0x100062c4,
  521. 0x1890001f, 0x100062c4, 0x80b40402, 0xe2000002, 0x10c0041f, 0x81008801,
  522. 0x81601001, 0xa0d59403, 0xa0d61003, 0xa0db8403, 0x1910001f, 0x10006310,
  523. 0x81439001, 0xd8200805, 0x13000c1f, 0x80c10001, 0x1b00001f, 0x6ffcf7ff,
  524. 0xd8000803, 0x17c07c1f, 0x1b00001f, 0xaffce7ff, 0xf0000000, 0x17c07c1f,
  525. 0x81459801, 0xd8000a05, 0x17c07c1f, 0x1a00001f, 0x10006604, 0xc0c03700,
  526. 0xe2200005, 0x1950001f, 0x100062c4, 0x80809401, 0xd8200a02, 0x17c07c1f,
  527. 0xc0c03700, 0xe2200002, 0x80328400, 0x80318400, 0xc2803600, 0x1290041f,
  528. 0x1b00001f, 0x6ffcf7ff, 0xf0000000, 0x17c07c1f, 0x1b00001f, 0x2f7ce7ff,
  529. 0x1b80001f, 0x20000004, 0xd8000d8c, 0x17c07c1f, 0xa0118400, 0xa0128400,
  530. 0xc2803600, 0x1290841f, 0x81459801, 0xd8000d45, 0x17c07c1f, 0x1a00001f,
  531. 0x10006604, 0xe220000a, 0xc0c03700, 0x17c07c1f, 0x1b00001f, 0x2f7cefff,
  532. 0xf0000000, 0x17c07c1f, 0x18c0001f, 0x102135cc, 0x1910001f, 0x102135cc,
  533. 0x813f8404, 0xe0c00004, 0x1910001f, 0x102135cc, 0x81411801, 0xd8000fe5,
  534. 0x17c07c1f, 0x18c0001f, 0x10006240, 0xe0e00016, 0xe0e0001e, 0xe0e0000e,
  535. 0xe0e0000f, 0x803e0400, 0x1b80001f, 0x20000222, 0x80380400, 0x1b80001f,
  536. 0x20000280, 0x803b0400, 0x1b80001f, 0x2000001a, 0x803d0400, 0x1b80001f,
  537. 0x20000208, 0x80340400, 0x80310400, 0x1b80001f, 0x2000000a, 0x18c0001f,
  538. 0x10006240, 0xe0e0000d, 0xd8001605, 0x17c07c1f, 0x1b80001f, 0x20000020,
  539. 0x18c0001f, 0x102130f0, 0x1910001f, 0x102130f0, 0xa9000004, 0x10000000,
  540. 0xe0c00004, 0x1b80001f, 0x2000000a, 0x89000004, 0xefffffff, 0xe0c00004,
  541. 0x18c0001f, 0x102140f4, 0x1910001f, 0x102140f4, 0xa9000004, 0x02000000,
  542. 0xe0c00004, 0x1b80001f, 0x2000000a, 0x89000004, 0xfdffffff, 0xe0c00004,
  543. 0x1910001f, 0x102140f4, 0x81fa0407, 0x81f08407, 0xe8208000, 0x10006354,
  544. 0x001fdaa3, 0xa1d80407, 0xa1de8407, 0xa1df0407, 0xc2803600, 0x1291041f,
  545. 0x1b00001f, 0xbf7ce7ff, 0x1950001f, 0x100062c4, 0x80c41401, 0xd8001863,
  546. 0x17c07c1f, 0x1b00001f, 0xaffce7ff, 0xf0000000, 0x17c07c1f, 0x1b80001f,
  547. 0x20000fdf, 0x1a50001f, 0x10006608, 0x80c9a401, 0x810ba401, 0x10920c1f,
  548. 0xa0979002, 0x80ca2401, 0xa0938c02, 0x8080080d, 0xd8201ce2, 0x17c07c1f,
  549. 0x81f08407, 0xa1d80407, 0xa1de8407, 0xa1df0407, 0x1b00001f, 0x2f7ce7ff,
  550. 0x1b80001f, 0x20000004, 0xd800236c, 0x17c07c1f, 0x1b00001f, 0xbf7ce7ff,
  551. 0x1950001f, 0x100062c4, 0x80c41401, 0xd8002363, 0x17c07c1f, 0x1b00001f,
  552. 0xaffce7ff, 0xd0002360, 0x17c07c1f, 0x81f80407, 0x81fe8407, 0x81ff0407,
  553. 0x1900001f, 0x40000000, 0x18d0001f, 0x40000000, 0xe1000003, 0xc0c037e0,
  554. 0x1080041f, 0x1880001f, 0x10006320, 0xc0c02e40, 0xe080000f, 0xd8001a43,
  555. 0x17c07c1f, 0xe080001f, 0xa1da0407, 0xa0110400, 0xa0140400, 0xa0180400,
  556. 0xa01b0400, 0xa01d0400, 0x1b80001f, 0x20000068, 0xa01e0400, 0x1b80001f,
  557. 0x20000104, 0x18c0001f, 0x102135cc, 0x1910001f, 0x102135cc, 0xa11f8404,
  558. 0xe0c00004, 0x81411801, 0xd8002205, 0x17c07c1f, 0x18c0001f, 0x10006240,
  559. 0xc0c02d80, 0x17c07c1f, 0xc2803600, 0x1291841f, 0x1b00001f, 0x6ffcf7ff,
  560. 0x1950001f, 0x100062c4, 0x80c41401, 0xd8202363, 0x17c07c1f, 0x1b00001f,
  561. 0x7f7ce7ff, 0xf0000000, 0x17c07c1f, 0x81441801, 0xd82025c5, 0x17c07c1f,
  562. 0x1a00001f, 0x10006604, 0xc0c03700, 0xe2200004, 0xc0c037e0, 0x1093041f,
  563. 0xc0c03700, 0xe2200003, 0xc0c037e0, 0x1093041f, 0xc0c03700, 0xe2200002,
  564. 0xc0c037e0, 0x1093041f, 0x1a00001f, 0x100062c4, 0x1890001f, 0x100062c4,
  565. 0xa0908402, 0xe2000002, 0x10c0041f, 0x81040801, 0x81601001, 0xa0db9403,
  566. 0xa0de1003, 0xa0d60403, 0x13000c1f, 0xf0000000, 0x17c07c1f, 0x1a00001f,
  567. 0x100062c4, 0x1890001f, 0x100062c4, 0x80b08402, 0xe2000002, 0x81441801,
  568. 0xd8202a85, 0x17c07c1f, 0x1a00001f, 0x10006604, 0xc0c03700, 0xe2200003,
  569. 0xc0c037e0, 0x1093041f, 0xc0c03700, 0xe2200004, 0xc0c037e0, 0x1093041f,
  570. 0xc0c03700, 0xe2200005, 0xc0c037e0, 0x1093041f, 0x10c0041f, 0x81040801,
  571. 0x81601001, 0xa0db9403, 0xa0de1003, 0xa0d58403, 0x13000c1f, 0xf0000000,
  572. 0x17c07c1f, 0xe0f07f16, 0x1380201f, 0xe0f07f1e, 0x1380201f, 0xe0f07f0e,
  573. 0x1b80001f, 0x20000100, 0xe0f07f0c, 0xe0f07f0d, 0xe0f07e0d, 0xe0f07c0d,
  574. 0xe0f0780d, 0xe0f0700d, 0xf0000000, 0x17c07c1f, 0xe0f07f0d, 0xe0f07f0f,
  575. 0xe0f07f1e, 0xe0f07f12, 0xf0000000, 0x17c07c1f, 0x1112841f, 0xa1d08407,
  576. 0xd8202f04, 0x80eab401, 0xd8002e83, 0x01200404, 0x1a00001f, 0x10006814,
  577. 0xe2000003, 0xf0000000, 0x17c07c1f, 0xa1d00407, 0x1b80001f, 0x20000100,
  578. 0x80ea3401, 0x1a00001f, 0x10006814, 0xe2000003, 0xf0000000, 0x17c07c1f,
  579. 0xd80031ca, 0x17c07c1f, 0xe2e00036, 0x17c07c1f, 0x17c07c1f, 0xe2e0003e,
  580. 0x1380201f, 0xe2e0003c, 0xd820330a, 0x17c07c1f, 0x1b80001f, 0x20000018,
  581. 0xe2e0007c, 0x1b80001f, 0x20000003, 0xe2e0005c, 0xe2e0004c, 0xe2e0004d,
  582. 0xf0000000, 0x17c07c1f, 0xa1d10407, 0x1b80001f, 0x20000020, 0xf0000000,
  583. 0x17c07c1f, 0xa1d40407, 0x1391841f, 0xa1d90407, 0xf0000000, 0x17c07c1f,
  584. 0xd800352a, 0x17c07c1f, 0xe2e0004f, 0xe2e0006f, 0xe2e0002f, 0xd82035ca,
  585. 0x17c07c1f, 0xe2e0002e, 0xe2e0003e, 0xe2e00032, 0xf0000000, 0x17c07c1f,
  586. 0x18c0001f, 0x10006b18, 0x1910001f, 0x10006b18, 0xa1002804, 0xe0c00004,
  587. 0xf0000000, 0x17c07c1f, 0x18d0001f, 0x10006604, 0x10cf8c1f, 0xd8203703,
  588. 0x17c07c1f, 0xf0000000, 0x17c07c1f, 0x81499801, 0xd8203945, 0x17c07c1f,
  589. 0xd8203e62, 0x17c07c1f, 0x18d0001f, 0x40000000, 0x18d0001f, 0x70000000,
  590. 0xd8003842, 0x00a00402, 0x814a1801, 0xd8203aa5, 0x17c07c1f, 0xd8203e62,
  591. 0x17c07c1f, 0x18d0001f, 0x40000000, 0x18d0001f, 0x80000000, 0xd80039a2,
  592. 0x00a00402, 0x814a9801, 0xd8203c05, 0x17c07c1f, 0xd8203e62, 0x17c07c1f,
  593. 0x18d0001f, 0x40000000, 0x18d0001f, 0xc0000000, 0xd8003b02, 0x00a00402,
  594. 0x814c1801, 0xd8203d65, 0x17c07c1f, 0xd8203e62, 0x17c07c1f, 0x18d0001f,
  595. 0x40000000, 0x18d0001f, 0xa0000000, 0xd8003c62, 0x00a00402, 0xd8203e62,
  596. 0x17c07c1f, 0x18d0001f, 0x40000000, 0x18d0001f, 0x40000000, 0xd8003d62,
  597. 0x00a00402, 0xf0000000, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
  598. 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
  599. 0x17c07c1f, 0x17c07c1f, 0x1840001f, 0x00000001, 0xa1d48407, 0x1990001f,
  600. 0x10006b08, 0xe8208000, 0x10006b18, 0x00000000, 0x81441801, 0xd82046c5,
  601. 0x17c07c1f, 0x1910001f, 0x100062c4, 0x80849001, 0x1a00001f, 0x10006b0c,
  602. 0x1950001f, 0x10006b0c, 0x1900001f, 0x10006b14, 0xe1000005, 0xa1508805,
  603. 0xe2000005, 0x89000005, 0xfffffe43, 0xe2000004, 0x1940001f, 0x10006b68,
  604. 0x1a00001f, 0x10006608, 0x1890001f, 0x10006608, 0xe1400002, 0x89000002,
  605. 0xfd67ffff, 0xe2000004, 0x18c0001f, 0x2f7ce7ff, 0x80809001, 0x81600801,
  606. 0xa0d59403, 0xa0d60803, 0x80841001, 0x81600801, 0xa0db9403, 0xa0de0803,
  607. 0xe8208000, 0x10006310, 0x0b160c38, 0x13000c1f, 0x1b80001f, 0xd00f0000,
  608. 0xd0004700, 0x17c07c1f, 0x1b00001f, 0x2f7ce7ff, 0x81469801, 0xd8204865,
  609. 0x17c07c1f, 0x1b80001f, 0xd00f0000, 0x8880000c, 0x2f7ce7ff, 0xd8006802,
  610. 0x17c07c1f, 0xd00048a0, 0x17c07c1f, 0x1b80001f, 0x500f0000, 0xe8208000,
  611. 0x10006354, 0x001fdaa3, 0xc0c03340, 0x81401801, 0xd8004dc5, 0x17c07c1f,
  612. 0x81f60407, 0x18c0001f, 0x10006200, 0xc0c03480, 0x12807c1f, 0xe8208000,
  613. 0x1000625c, 0x00000001, 0x1b80001f, 0x20000080, 0xc0c03480, 0x1280041f,
  614. 0x18c0001f, 0x10006208, 0xc0c03480, 0x12807c1f, 0xe8208000, 0x10006248,
  615. 0x00000000, 0x1b80001f, 0x20000080, 0xc0c03480, 0x1280041f, 0x18c0001f,
  616. 0x10006290, 0xc0c03480, 0x12807c1f, 0xc0c03480, 0x1280041f, 0x18c0001f,
  617. 0x100062dc, 0xe0c00001, 0xc2803600, 0x1292041f, 0x81469801, 0xd8004ea5,
  618. 0x17c07c1f, 0x8880000c, 0x2f7ce7ff, 0xd8006362, 0x17c07c1f, 0xc0c033e0,
  619. 0x17c07c1f, 0x18c0001f, 0x10006294, 0xe0f07fff, 0xe0e00fff, 0xe0e000ff,
  620. 0x81449801, 0xd8005225, 0x17c07c1f, 0x1a00001f, 0x10006604, 0x814d1801,
  621. 0xd82051a5, 0x17c07c1f, 0xe220000b, 0xc0c07880, 0x12807c1f, 0xc0c03700,
  622. 0x17c07c1f, 0xc2803600, 0x1294041f, 0xd0005220, 0x17c07c1f, 0xc0c03700,
  623. 0xe2200006, 0xc0c03700, 0xe2200001, 0xa1d38407, 0xa1d98407, 0xa0108400,
  624. 0xa0120400, 0xa0148400, 0xa0150400, 0xa0158400, 0xa01b8400, 0xa01c0400,
  625. 0xa01c8400, 0xa0188400, 0xa0190400, 0xa0198400, 0x81441801, 0xd8205765,
  626. 0x17c07c1f, 0x1910001f, 0x10006b0c, 0x1a00001f, 0x100062c4, 0x1950001f,
  627. 0x100062c4, 0x80809001, 0x81748405, 0xa1548805, 0xe2000005, 0x1910001f,
  628. 0x10006b14, 0x1a00001f, 0x10006b0c, 0xe2000004, 0x1950001f, 0x10006b68,
  629. 0x1a00001f, 0x10006608, 0xe2000005, 0x1a00001f, 0x10006b0c, 0x80c51801,
  630. 0x81308404, 0xa1108c04, 0xe2000004, 0xe8208000, 0x10006310, 0x0b1603f8,
  631. 0x1950001f, 0x100062c4, 0x80841401, 0x81600801, 0x18c0001f, 0xaf7ce7ff,
  632. 0xa0de0803, 0xa0db9403, 0x13000c1f, 0x1b80001f, 0x90100000, 0x80c18001,
  633. 0xc8c00843, 0x17c07c1f, 0x80c10001, 0xc8c00dc3, 0x17c07c1f, 0x18d0001f,
  634. 0x10006284, 0x80810c01, 0xd8205c42, 0x17c07c1f, 0x18d0001f, 0x100062c4,
  635. 0x80840c01, 0xd8005c42, 0x17c07c1f, 0x1a00001f, 0x10006604, 0xe2200007,
  636. 0x1a00001f, 0x100062c4, 0x1890001f, 0x100062c4, 0xa0940402, 0xe2000002,
  637. 0x1b00001f, 0x2f7ce7ff, 0x18c0001f, 0x10006294, 0xe0e001fe, 0xe0e003fc,
  638. 0xe0e007f8, 0xe0e00ff0, 0x1b80001f, 0x20000020, 0xe0f07ff0, 0xe0f07f00,
  639. 0x80388400, 0x80390400, 0x80398400, 0x1b80001f, 0x20000300, 0x803b8400,
  640. 0x803c0400, 0x803c8400, 0x1b80001f, 0x20000300, 0x80348400, 0x80350400,
  641. 0x80358400, 0x1b80001f, 0x20000104, 0x10007c1f, 0x81f38407, 0x81f98407,
  642. 0x81f90407, 0x81f40407, 0x81449801, 0xd8006365, 0x17c07c1f, 0x1a00001f,
  643. 0x10006604, 0x814d1801, 0xd82062a5, 0x17c07c1f, 0x1b80001f, 0x2000001a,
  644. 0xe220000c, 0xc0c07880, 0x1280041f, 0xc0c03700, 0x17c07c1f, 0x1b80001f,
  645. 0x20000618, 0xd0006360, 0x17c07c1f, 0xc0c03700, 0xe2200008, 0xc0c03700,
  646. 0xe2200000, 0x1b80001f, 0x2000049c, 0x81401801, 0xd8006805, 0x17c07c1f,
  647. 0x18c0001f, 0x100062dc, 0xe0c0001f, 0x18c0001f, 0x10006290, 0x1212841f,
  648. 0xc0c030c0, 0x12807c1f, 0xc0c030c0, 0x1280041f, 0x18c0001f, 0x10006208,
  649. 0x1212841f, 0xc0c030c0, 0x12807c1f, 0xe8208000, 0x10006248, 0x00000001,
  650. 0x1b80001f, 0x20000080, 0xc0c030c0, 0x1280041f, 0x18c0001f, 0x10006200,
  651. 0x1212841f, 0xc0c030c0, 0x12807c1f, 0xe8208000, 0x1000625c, 0x00000000,
  652. 0x1b80001f, 0x20000080, 0xc0c030c0, 0x1280041f, 0x19c0001f, 0x60415820,
  653. 0xe8208000, 0x10006310, 0x0b160008, 0xc2803600, 0x1293841f, 0x18c0001f,
  654. 0x10006b14, 0xe0c0000c, 0x18c0001f, 0x10006b68, 0x1950001f, 0x100063c0,
  655. 0xe0c00005, 0x81441801, 0xd8206ea5, 0x10c0041f, 0x1910001f, 0x100062c4,
  656. 0x80849001, 0x1a00001f, 0x10006b0c, 0x1910001f, 0x10006b0c, 0xa0908804,
  657. 0xe2000002, 0x89000002, 0xfffffe43, 0xe2000004, 0x1a00001f, 0x10006608,
  658. 0x1890001f, 0x10006608, 0x89000002, 0xfd67ffff, 0xe2000004, 0x81441801,
  659. 0xd8206ea5, 0x10c0041f, 0x1910001f, 0x100062c4, 0x80809001, 0x81600801,
  660. 0xa0d59403, 0xa0d60803, 0x80841001, 0x81600801, 0xa0db9403, 0xa0de0803,
  661. 0xe8208000, 0x10006310, 0x0b160c38, 0x81469801, 0xd8206f65, 0x17c07c1f,
  662. 0xe8208000, 0x100063e0, 0x00000001, 0x13000c1f, 0x1b80001f, 0x900a0000,
  663. 0x88900001, 0x10006814, 0xd8206ca2, 0x17c07c1f, 0x18d0001f, 0x10006b6c,
  664. 0x78a00003, 0x0000beef, 0xd8007182, 0x17c07c1f, 0xc0c073e0, 0x17c07c1f,
  665. 0xd0006ca0, 0x17c07c1f, 0x1910001f, 0x10006b0c, 0x1a00001f, 0x100062c4,
  666. 0x1950001f, 0x100062c4, 0x80809001, 0x81748405, 0xa1548805, 0xe2000005,
  667. 0x80841401, 0xd8007362, 0x8204b401, 0xc8c00008, 0x17c07c1f, 0x1ac0001f,
  668. 0x55aa55aa, 0x10007c1f, 0xf0000000, 0x1900001f, 0x10006014, 0x1950001f,
  669. 0x10006014, 0xa1508405, 0xe1000005, 0x1900001f, 0x10006814, 0xe100001f,
  670. 0x812ab401, 0xd8007504, 0x17c07c1f, 0x1880001f, 0x10006284, 0x18d0001f,
  671. 0x10006284, 0x80f20403, 0xe0800003, 0x80f08403, 0xe0800003, 0x1900001f,
  672. 0x10006014, 0x1950001f, 0x10006014, 0x81708405, 0xe1000005, 0x1900001f,
  673. 0x10006b6c, 0xe100001f, 0x81441801, 0xd8007845, 0x17c07c1f, 0x1a00001f,
  674. 0x10006604, 0xe2200007, 0xf0000000, 0x17c07c1f, 0xe8208000, 0x11012014,
  675. 0x00000002, 0xe8208000, 0x11012020, 0x00000001, 0xe8208000, 0x11012004,
  676. 0x000000d6, 0xe8208000, 0x11012040, 0x00000000, 0x1a00001f, 0x11012000,
  677. 0xd8207baa, 0x17c07c1f, 0xe2200088, 0xe2200002, 0xe8208000, 0x11012024,
  678. 0x00000001, 0x1b80001f, 0x20000158, 0xd0007c80, 0x17c07c1f, 0xe2200088,
  679. 0xe2200000, 0xe8208000, 0x11012024, 0x00000001, 0x1b80001f, 0x20000158,
  680. 0xf0000000, 0x17c07c1f
  681. };
  682. static struct pcm_desc dpidle_pcm = {
  683. .version = "pcm_deepidle_v0.2.5.6.4.1_20160311-dummy_read",
  684. .base = dpidle_binary,
  685. .size = 998,
  686. .sess = 2,
  687. .replace = 0,
  688. .vec0 = EVENT_VEC(23, 1, 0, 0), /* FUNC_MD_VRF18_WAKEUP */
  689. .vec1 = EVENT_VEC(28, 1, 0, 33), /* FUNC_MD_VRF18_SLEEP */
  690. .vec2 = EVENT_VEC(11, 1, 0, 66), /* FUNC_26M_WAKEUP */
  691. .vec3 = EVENT_VEC(12, 1, 0, 88), /* FUNC_26M_SLEEP */
  692. .vec4 = EVENT_VEC(30, 1, 0, 110), /* FUNC_APSRC_WAKEUP */
  693. .vec5 = EVENT_VEC(31, 1, 0, 197), /* FUNC_APSRC_SLEEP */
  694. .vec6 = EVENT_VEC(11, 1, 0, 285), /* FUNC_VCORE_HIGH */
  695. .vec7 = EVENT_VEC(12, 1, 0, 317), /* FUNC_VCORE_LOW */
  696. };
  697. static struct pwr_ctrl dpidle_ctrl = {
  698. .wake_src = WAKE_SRC_FOR_DPIDLE,
  699. .wake_src_md32 = WAKE_SRC_FOR_MD32,
  700. .r0_ctrl_en = 1,
  701. .r7_ctrl_en = 1,
  702. .infra_dcm_lock = 1,
  703. .wfi_op = WFI_OP_AND,
  704. .ca15_wfi0_en = 1,
  705. .ca15_wfi1_en = 1,
  706. .ca15_wfi2_en = 1,
  707. .ca15_wfi3_en = 1,
  708. .ca7_wfi0_en = 1,
  709. .ca7_wfi1_en = 1,
  710. .ca7_wfi2_en = 1,
  711. .ca7_wfi3_en = 1,
  712. .disp_req_mask = 1,
  713. .mfg_req_mask = 1,
  714. .lte_mask = 1,
  715. .syspwreq_mask = 1,
  716. .pcm_apsrc_req = 0,
  717. .md1_req_mask = 0,
  718. .md2_req_mask = 0,
  719. };
  720. #elif defined(CONFIG_ARCH_MT6580)
  721. /**********************************************************
  722. * PCM code for deep idle
  723. **********************************************************/
  724. static const u32 dpidle_binary[] = {
  725. 0x80318400, 0x80328400, 0xc2802e80, 0x1290041f, 0x1b00001f, 0x7fffd7ff,
  726. 0xf0000000, 0x17c07c1f, 0x1b00001f, 0x3fffc7ff, 0x1b80001f, 0x20000004,
  727. 0xd80002cc, 0x17c07c1f, 0xa0128400, 0xa0118400, 0xc2802e80, 0x1290841f,
  728. 0xc2802e80, 0x129f041f, 0x1b00001f, 0x3fffcfff, 0xf0000000, 0x17c07c1f,
  729. 0x81449801, 0xd8000405, 0x17c07c1f, 0x1a00001f, 0x10006604, 0xe2200000,
  730. 0xc0c02da0, 0x17c07c1f, 0x81491801, 0xd8000565, 0x17c07c1f, 0x18c0001f,
  731. 0x102085cc, 0x1910001f, 0x102085cc, 0x813f8404, 0xe0c00004, 0x1910001f,
  732. 0x102085cc, 0x81411801, 0xd8000685, 0x17c07c1f, 0x18c0001f, 0x10006240,
  733. 0xe0e00016, 0xe0e0001e, 0xe0e0000e, 0xe0e0000f, 0x803e0400, 0x1b80001f,
  734. 0x20000222, 0x80380400, 0x1b80001f, 0x20000280, 0x803b0400, 0x1b80001f,
  735. 0x2000001a, 0x803d0400, 0x1b80001f, 0x20000208, 0x80340400, 0x80310400,
  736. 0x1b80001f, 0x2000000a, 0x18c0001f, 0x10006240, 0xe0e0000d, 0xd8000ca5,
  737. 0x17c07c1f, 0x1b80001f, 0x20000020, 0x18c0001f, 0x102080f0, 0x1910001f,
  738. 0x102080f0, 0xa9000004, 0x10000000, 0xe0c00004, 0x1b80001f, 0x2000000a,
  739. 0x89000004, 0xefffffff, 0xe0c00004, 0x18c0001f, 0x102070f4, 0x1910001f,
  740. 0x102070f4, 0xa9000004, 0x02000000, 0xe0c00004, 0x1b80001f, 0x2000000a,
  741. 0x89000004, 0xfdffffff, 0xe0c00004, 0x1910001f, 0x102070f4, 0x81fa0407,
  742. 0x81f08407, 0xe8208000, 0x10006354, 0xfffffc23, 0xa1d80407, 0xa1df0407,
  743. 0xc2802e80, 0x1291041f, 0x81491801, 0xd8000f25, 0x17c07c1f, 0x18c0001f,
  744. 0x102085cc, 0x1910001f, 0x102085cc, 0xa11f8404, 0xe0c00004, 0x1910001f,
  745. 0x102085cc, 0x1b00001f, 0xbfffc7ff, 0xf0000000, 0x17c07c1f, 0x1b80001f,
  746. 0x20000fdf, 0x1a50001f, 0x10006608, 0x80c9a401, 0x810ba401, 0x10920c1f,
  747. 0xa0979002, 0x8080080d, 0xd82012a2, 0x17c07c1f, 0x81f08407, 0xa1d80407,
  748. 0xa1df0407, 0x1b00001f, 0x3fffc7ff, 0x1b80001f, 0x20000004, 0xd8001b4c,
  749. 0x17c07c1f, 0x1b00001f, 0xbfffc7ff, 0xd0001b40, 0x17c07c1f, 0x81f80407,
  750. 0x81ff0407, 0x1880001f, 0x10006320, 0xc0c02640, 0xe080000f, 0xd8001103,
  751. 0x17c07c1f, 0xe080001f, 0xa1da0407, 0x18c0001f, 0x110040d8, 0x1910001f,
  752. 0x110040d8, 0xa11f8404, 0xe0c00004, 0x1910001f, 0x110040d8, 0x81491801,
  753. 0xd8001645, 0x17c07c1f, 0x18c0001f, 0x102085cc, 0x1910001f, 0x102085cc,
  754. 0x813f8404, 0xe0c00004, 0x1910001f, 0x102085cc, 0xa0110400, 0xa0140400,
  755. 0xa0180400, 0xa01b0400, 0xa01d0400, 0x17c07c1f, 0x17c07c1f, 0xa01e0400,
  756. 0x17c07c1f, 0x17c07c1f, 0x81491801, 0xd80018e5, 0x17c07c1f, 0x18c0001f,
  757. 0x102085cc, 0x1910001f, 0x102085cc, 0xa11f8404, 0xe0c00004, 0x1910001f,
  758. 0x102085cc, 0x81411801, 0xd80019c5, 0x17c07c1f, 0x18c0001f, 0x10006240,
  759. 0xc0c025a0, 0x17c07c1f, 0x81449801, 0xd8001ac5, 0x17c07c1f, 0x1a00001f,
  760. 0x10006604, 0xe2200001, 0xc0c02da0, 0x17c07c1f, 0xc2802e80, 0x1291841f,
  761. 0x1b00001f, 0x7fffd7ff, 0xf0000000, 0x17c07c1f, 0x18c0001f, 0x10006b6c,
  762. 0xe0f03eef, 0x80318400, 0x80328400, 0xa1de0407, 0x80390400, 0x1b80001f,
  763. 0x20000300, 0x803c0400, 0x1b80001f, 0x20000300, 0x80350400, 0x1b80001f,
  764. 0x20000104, 0x81f40407, 0x18c0001f, 0x111403a8, 0xe0c00001, 0x18c0001f,
  765. 0x10006810, 0x1910001f, 0x10006810, 0x81308404, 0xe0c00004, 0x1b00001f,
  766. 0x7fffcfff, 0xf0000000, 0x17c07c1f, 0x81fe0407, 0x18c0001f, 0x10006810,
  767. 0x1910001f, 0x10006810, 0xa1108404, 0xe0c00004, 0x18c0001f, 0x10006b6c,
  768. 0xe0f05ead, 0x1b00001f, 0xffffcfff, 0x80dd040d, 0xd82020a3, 0x17c07c1f,
  769. 0xc0c02ba0, 0x17c07c1f, 0xa0150400, 0xa01c0400, 0xa0190400, 0xf0000000,
  770. 0x17c07c1f, 0xe0f07f16, 0x1380201f, 0xe0f07f1e, 0x1380201f, 0xe0f07f0e,
  771. 0x1b80001f, 0x20000100, 0xe0f07f0c, 0xe0f07f0d, 0xe0f07e0d, 0xe0f07c0d,
  772. 0xe0f0780d, 0xe0f0700d, 0xf0000000, 0x17c07c1f, 0xe0f07f0d, 0xe0f07f0f,
  773. 0xe0f07f1e, 0xe0f07f12, 0xf0000000, 0x17c07c1f, 0xe0e00016, 0x1380201f,
  774. 0xe0e0001e, 0x1380201f, 0xe0e0000e, 0xe0e0000c, 0xe0e0000d, 0xf0000000,
  775. 0x17c07c1f, 0xe0e0000f, 0xe0e0001e, 0xe0e00012, 0xf0000000, 0x17c07c1f,
  776. 0x1112841f, 0xa1d08407, 0xd8202704, 0x80eab401, 0xd8002683, 0x01200404,
  777. 0x1a00001f, 0x10006814, 0xe2000003, 0xf0000000, 0x17c07c1f, 0xa1d00407,
  778. 0x1b80001f, 0x20000100, 0x80ea3401, 0x1a00001f, 0x10006814, 0xe2000003,
  779. 0xf0000000, 0x17c07c1f, 0xd800298a, 0x17c07c1f, 0xe2e00036, 0xe2e0003e,
  780. 0x1380201f, 0xe2e0003c, 0xd8202aca, 0x17c07c1f, 0x1b80001f, 0x20000018,
  781. 0xe2e0007c, 0x1b80001f, 0x20000003, 0xe2e0005c, 0xe2e0004c, 0xe2e0004d,
  782. 0xf0000000, 0x17c07c1f, 0xa1d10407, 0x1b80001f, 0x20000020, 0xf0000000,
  783. 0x17c07c1f, 0xa1d40407, 0x1391841f, 0xf0000000, 0x17c07c1f, 0xd8002cca,
  784. 0x17c07c1f, 0xe2e0004f, 0xe2e0006f, 0xe2e0002f, 0xd8202d6a, 0x17c07c1f,
  785. 0xe2e0002e, 0xe2e0003e, 0xe2e00032, 0xf0000000, 0x17c07c1f, 0x18d0001f,
  786. 0x10006604, 0x10cf8c1f, 0xd8202da3, 0x17c07c1f, 0xf0000000, 0x17c07c1f,
  787. 0x18c0001f, 0x10006b18, 0x1910001f, 0x10006b18, 0xa1002804, 0xe0c00004,
  788. 0xf0000000, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
  789. 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
  790. 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
  791. 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
  792. 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
  793. 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
  794. 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
  795. 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
  796. 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
  797. 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
  798. 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
  799. 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
  800. 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
  801. 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
  802. 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
  803. 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
  804. 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
  805. 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
  806. 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
  807. 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
  808. 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
  809. 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f, 0x17c07c1f,
  810. 0x17c07c1f, 0x17c07c1f, 0x1840001f, 0x00000001, 0xa1d48407, 0x1990001f,
  811. 0x10006b08, 0xe8208000, 0x10006b18, 0x00000000, 0x1b00001f, 0x3fffc7ff,
  812. 0x1b80001f, 0xd00f0000, 0x8880000c, 0x3fffc7ff, 0xd8005522, 0x17c07c1f,
  813. 0xe8208000, 0x10006354, 0xfffffc23, 0xc0c02b00, 0x81401801, 0xd80046c5,
  814. 0x17c07c1f, 0x81f60407, 0x18c0001f, 0x10006200, 0xc0c02c20, 0x12807c1f,
  815. 0xe8208000, 0x1000625c, 0x00000001, 0x1b80001f, 0x20000080, 0xc0c02c20,
  816. 0x1280041f, 0x18c0001f, 0x10006208, 0xc0c02c20, 0x12807c1f, 0xe8208000,
  817. 0x10006248, 0x00000000, 0x1b80001f, 0x20000080, 0xc0c02c20, 0x1280041f,
  818. 0x18c0001f, 0x10006290, 0xc0c02c20, 0x12807c1f, 0xc0c02c20, 0x1280041f,
  819. 0xc2802e80, 0x1292041f, 0x18c0001f, 0x10006294, 0xe0f07fff, 0xe0e00fff,
  820. 0xe0e000ff, 0xc0c02ba0, 0x17c07c1f, 0xa1d38407, 0xa1d98407, 0x18c0001f,
  821. 0x11004078, 0x1910001f, 0x11004078, 0xa11f8404, 0xe0c00004, 0x1910001f,
  822. 0x11004078, 0x18c0001f, 0x11004098, 0x1910001f, 0x11004098, 0xa11f8404,
  823. 0xe0c00004, 0x1910001f, 0x11004098, 0xa0108400, 0xa0120400, 0xa0148400,
  824. 0xa0150400, 0xa0158400, 0xa01b8400, 0xa01c0400, 0xa01c8400, 0xa0188400,
  825. 0xa0190400, 0xa0198400, 0xe8208000, 0x10006310, 0x0b1600f8, 0x1b00001f,
  826. 0xbfffc7ff, 0x1b80001f, 0x90100000, 0x80c18001, 0xc8c00003, 0x17c07c1f,
  827. 0x80c10001, 0xc8c00303, 0x17c07c1f, 0x1b00001f, 0x3fffc7ff, 0x18c0001f,
  828. 0x10006294, 0xe0e001fe, 0xe0e003fc, 0xe0e007f8, 0xe0e00ff0, 0x1b80001f,
  829. 0x20000020, 0xe0f07ff0, 0xe0f07f00, 0x80388400, 0x80390400, 0x80398400,
  830. 0x1b80001f, 0x20000300, 0x803b8400, 0x803c0400, 0x803c8400, 0x1b80001f,
  831. 0x20000300, 0x80348400, 0x80350400, 0x80358400, 0x1b80001f, 0x20000104,
  832. 0x80308400, 0x80320400, 0x81f38407, 0x81f98407, 0x81f40407, 0x81401801,
  833. 0xd8005525, 0x17c07c1f, 0x18c0001f, 0x10006290, 0x1212841f, 0xc0c028c0,
  834. 0x12807c1f, 0xc0c028c0, 0x1280041f, 0x18c0001f, 0x10006208, 0x1212841f,
  835. 0xc0c028c0, 0x12807c1f, 0xe8208000, 0x10006248, 0x00000001, 0x1b80001f,
  836. 0x20000080, 0xc0c028c0, 0x1280041f, 0x18c0001f, 0x10006200, 0x1212841f,
  837. 0xc0c028c0, 0x12807c1f, 0xe8208000, 0x1000625c, 0x00000000, 0x1b80001f,
  838. 0x20000080, 0xc0c028c0, 0x1280041f, 0x81f10407, 0x81f48407, 0xa1d60407,
  839. 0x1ac0001f, 0x55aa55aa, 0x10007c1f, 0xf0000000
  840. };
  841. static struct pcm_desc dpidle_pcm = {
  842. .version = "pcm_deepidle_v14.0_new",
  843. .base = dpidle_binary,
  844. .size = 688,
  845. .sess = 2,
  846. .replace = 0,
  847. .vec0 = EVENT_VEC(11, 1, 0, 0), /* FUNC_26M_WAKEUP */
  848. .vec1 = EVENT_VEC(12, 1, 0, 8), /* FUNC_26M_SLEEP */
  849. .vec2 = EVENT_VEC(30, 1, 0, 24), /* FUNC_APSRC_WAKEUP */
  850. .vec3 = EVENT_VEC(31, 1, 0, 125), /* FUNC_APSRC_SLEEP */
  851. .vec4 = EVENT_VEC(20, 1, 0, 220), /* FUNC_AUDIO_REQ_WAKEUP */
  852. .vec5 = EVENT_VEC(1, 1, 0, 249), /* FUNC_AUDIO_REQ_SLEEP */
  853. };
  854. static struct pwr_ctrl dpidle_ctrl = {
  855. .wake_src = WAKE_SRC_FOR_DPIDLE,
  856. .wake_src_md32 = WAKE_SRC_FOR_MD32,
  857. .r0_ctrl_en = 1,
  858. .r7_ctrl_en = 1,
  859. .infra_dcm_lock = 1,
  860. .wfi_op = WFI_OP_AND,
  861. .ca15_wfi0_en = 1,
  862. .ca15_wfi1_en = 1,
  863. .ca15_wfi2_en = 1,
  864. .ca15_wfi3_en = 1,
  865. .ca7_wfi0_en = 1,
  866. .ca7_wfi1_en = 1,
  867. .ca7_wfi2_en = 1,
  868. .ca7_wfi3_en = 1,
  869. .disp_req_mask = 1,
  870. .mfg_req_mask = 1,
  871. .lte_mask = 1,
  872. .syspwreq_mask = 1,
  873. };
  874. #else
  875. #error "Does not support!"
  876. #endif
  877. static unsigned int dpidle_log_discard_cnt;
  878. static unsigned int dpidle_log_print_prev_time;
  879. struct spm_lp_scen __spm_dpidle = {
  880. .pcmdesc = &dpidle_pcm,
  881. .pwrctrl = &dpidle_ctrl,
  882. };
  883. int __attribute__ ((weak)) request_uart_to_sleep(void)
  884. {
  885. return 0;
  886. }
  887. int __attribute__ ((weak)) request_uart_to_wakeup(void)
  888. {
  889. return 0;
  890. }
  891. #if SPM_AEE_RR_REC
  892. void __attribute__ ((weak)) aee_rr_rec_deepidle_val(u32 val)
  893. {
  894. }
  895. u32 __attribute__ ((weak)) aee_rr_curr_deepidle_val(void)
  896. {
  897. return 0;
  898. }
  899. #endif
  900. void __attribute__ ((weak)) mt_cirq_clone_gic(void)
  901. {
  902. }
  903. void __attribute__ ((weak)) mt_cirq_enable(void)
  904. {
  905. }
  906. void __attribute__ ((weak)) mt_cirq_flush(void)
  907. {
  908. }
  909. void __attribute__ ((weak)) mt_cirq_disable(void)
  910. {
  911. }
  912. int __attribute__ ((weak)) exec_ccci_kern_func_by_md_id(int md_id, unsigned int id, char *buf,
  913. unsigned int len)
  914. {
  915. return 0;
  916. }
  917. u32 __attribute__ ((weak)) spm_get_sleep_wakesrc(void)
  918. {
  919. return 0;
  920. }
  921. void __attribute__ ((weak)) mt_cpufreq_set_pmic_phase(enum pmic_wrap_phase_id phase)
  922. {
  923. }
  924. static long int idle_get_current_time_ms(void)
  925. {
  926. struct timeval t;
  927. do_gettimeofday(&t);
  928. return ((t.tv_sec & 0xFFF) * 1000000 + t.tv_usec) / 1000;
  929. }
  930. static void spm_trigger_wfi_for_dpidle(struct pwr_ctrl *pwrctrl)
  931. {
  932. #if defined(CONFIG_ARCH_MT6753)
  933. u32 v0, v1;
  934. #endif
  935. if (is_cpu_pdn(pwrctrl->pcm_flags)) {
  936. mt_cpu_dormant(CPU_DEEPIDLE_MODE);
  937. } else {
  938. /*
  939. * MT6735/MT6735M: Mp0_axi_config[4] is one by default. No need to program it before entering deepidle.
  940. * MT6753: Have to program it before entering deepidle.
  941. */
  942. #if defined(CONFIG_ARM_MT6735) || defined(CONFIG_ARM_MT6735M) || defined(CONFIG_ARCH_MT6580)
  943. wfi_with_sync();
  944. #elif defined(CONFIG_ARCH_MT6753)
  945. /* backup MPx_AXI_CONFIG */
  946. v0 = reg_read(MP0_AXI_CONFIG);
  947. v1 = reg_read(MP1_AXI_CONFIG);
  948. /* disable snoop function */
  949. MCUSYS_SMC_WRITE(MP0_AXI_CONFIG, v0 | ACINACTM);
  950. MCUSYS_SMC_WRITE(MP1_AXI_CONFIG, v1 | ACINACTM);
  951. wfi_with_sync();
  952. /* restore MP0_AXI_CONFIG */
  953. MCUSYS_SMC_WRITE(MP0_AXI_CONFIG, v0);
  954. MCUSYS_SMC_WRITE(MP1_AXI_CONFIG, v1);
  955. #endif
  956. }
  957. }
  958. /*
  959. * wakesrc: WAKE_SRC_XXX
  960. * enable : enable or disable @wakesrc
  961. * replace: if true, will replace the default setting
  962. */
  963. int spm_set_dpidle_wakesrc(u32 wakesrc, bool enable, bool replace)
  964. {
  965. unsigned long flags;
  966. if (spm_is_wakesrc_invalid(wakesrc))
  967. return -EINVAL;
  968. spin_lock_irqsave(&__spm_lock, flags);
  969. if (enable) {
  970. if (replace)
  971. __spm_dpidle.pwrctrl->wake_src = wakesrc;
  972. else
  973. __spm_dpidle.pwrctrl->wake_src |= wakesrc;
  974. } else {
  975. if (replace)
  976. __spm_dpidle.pwrctrl->wake_src = 0;
  977. else
  978. __spm_dpidle.pwrctrl->wake_src &= ~wakesrc;
  979. }
  980. spin_unlock_irqrestore(&__spm_lock, flags);
  981. return 0;
  982. }
  983. static wake_reason_t spm_output_wake_reason(struct wake_status *wakesta, struct pcm_desc *pcmdesc, u32 dump_log)
  984. {
  985. wake_reason_t wr = WR_NONE;
  986. unsigned long int dpidle_log_print_curr_time = 0;
  987. bool log_print = false;
  988. static bool timer_out_too_short;
  989. if (dump_log == DEEPIDLE_LOG_FULL) {
  990. wr = __spm_output_wake_reason(wakesta, pcmdesc, false);
  991. } else if (dump_log == DEEPIDLE_LOG_REDUCED) {
  992. /* Determine print SPM log or not */
  993. dpidle_log_print_curr_time = idle_get_current_time_ms();
  994. if (wakesta->assert_pc != 0)
  995. log_print = true;
  996. #if 0
  997. /* Not wakeup by GPT */
  998. else if ((wakesta->r12 & (0x1 << 4)) == 0)
  999. log_print = true;
  1000. else if (wakesta->timer_out <= DPIDLE_LOG_PRINT_TIMEOUT_CRITERIA)
  1001. log_print = true;
  1002. #endif
  1003. else if ((dpidle_log_print_curr_time - dpidle_log_print_prev_time) >
  1004. DPIDLE_LOG_DISCARD_CRITERIA)
  1005. log_print = true;
  1006. if (wakesta->timer_out <= DPIDLE_LOG_PRINT_TIMEOUT_CRITERIA)
  1007. timer_out_too_short = true;
  1008. /* Print SPM log */
  1009. if (log_print == true) {
  1010. dpidle_dbg("dpidle_log_discard_cnt = %d, timer_out_too_short = %d\n",
  1011. dpidle_log_discard_cnt,
  1012. timer_out_too_short);
  1013. wr = __spm_output_wake_reason(wakesta, pcmdesc, false);
  1014. dpidle_log_print_prev_time = dpidle_log_print_curr_time;
  1015. dpidle_log_discard_cnt = 0;
  1016. timer_out_too_short = false;
  1017. } else {
  1018. dpidle_log_discard_cnt++;
  1019. wr = WR_NONE;
  1020. }
  1021. }
  1022. #if !defined(CONFIG_ARCH_MT6580)
  1023. if (wakesta->r12 & WAKE_SRC_CLDMA_MD)
  1024. exec_ccci_kern_func_by_md_id(0, ID_GET_MD_WAKEUP_SRC, NULL, 0);
  1025. #endif
  1026. return wr;
  1027. }
  1028. #if defined(CONFIG_ARM_MT6735) || defined(CONFIG_ARM_MT6735M) || defined(CONFIG_ARCH_MT6753)
  1029. static u32 vsram_vosel_on_lb;
  1030. #endif
  1031. static void spm_dpidle_pre_process(void)
  1032. {
  1033. /* set PMIC WRAP table for deepidle power control */
  1034. mt_cpufreq_set_pmic_phase(PMIC_WRAP_PHASE_DEEPIDLE);
  1035. #if defined(CONFIG_ARM_MT6735) || defined(CONFIG_ARM_MT6735M) || defined(CONFIG_ARCH_MT6753)
  1036. vsram_vosel_on_lb = __spm_dpidle_sodi_set_pmic_setting();
  1037. #endif
  1038. }
  1039. static void spm_dpidle_post_process(void)
  1040. {
  1041. #if defined(CONFIG_ARM_MT6735) || defined(CONFIG_ARM_MT6735M) || defined(CONFIG_ARCH_MT6753)
  1042. __spm_dpidle_sodi_restore_pmic_setting(vsram_vosel_on_lb);
  1043. #endif
  1044. /* set PMIC WRAP table for normal power control */
  1045. mt_cpufreq_set_pmic_phase(PMIC_WRAP_PHASE_NORMAL);
  1046. }
  1047. wake_reason_t spm_go_to_dpidle(u32 spm_flags, u32 spm_data, u32 dump_log)
  1048. {
  1049. struct wake_status wakesta;
  1050. unsigned long flags;
  1051. struct mtk_irq_mask mask;
  1052. wake_reason_t wr = WR_NONE;
  1053. struct pcm_desc *pcmdesc = __spm_dpidle.pcmdesc;
  1054. struct pwr_ctrl *pwrctrl = __spm_dpidle.pwrctrl;
  1055. #if SPM_AEE_RR_REC
  1056. aee_rr_rec_deepidle_val(1 << SPM_DEEPIDLE_ENTER);
  1057. #endif
  1058. set_pwrctrl_pcm_flags(pwrctrl, spm_flags);
  1059. spm_dpidle_before_wfi();
  1060. lockdep_off();
  1061. spin_lock_irqsave(&__spm_lock, flags);
  1062. mt_irq_mask_all(&mask);
  1063. mt_irq_unmask_for_sleep(SPM_IRQ0_ID);
  1064. mt_cirq_clone_gic();
  1065. mt_cirq_enable();
  1066. #if defined(CONFIG_ARCH_MT6753)
  1067. __spm_enable_i2c4_clk();
  1068. #endif
  1069. #if SPM_AEE_RR_REC
  1070. aee_rr_rec_deepidle_val(aee_rr_curr_deepidle_val() | (1 << SPM_DEEPIDLE_ENTER_UART_SLEEP));
  1071. #endif
  1072. #if !defined(CONFIG_ARCH_MT6580)
  1073. if (request_uart_to_sleep()) {
  1074. wr = WR_UART_BUSY;
  1075. goto RESTORE_IRQ;
  1076. }
  1077. #endif
  1078. __spm_reset_and_init_pcm(pcmdesc);
  1079. __spm_kick_im_to_fetch(pcmdesc);
  1080. __spm_init_pcm_register();
  1081. __spm_init_event_vector(pcmdesc);
  1082. __spm_set_power_control(pwrctrl);
  1083. __spm_set_wakeup_event(pwrctrl);
  1084. spm_dpidle_pre_process();
  1085. __spm_kick_pcm_to_run(pwrctrl);
  1086. #if SPM_AEE_RR_REC
  1087. aee_rr_rec_deepidle_val(aee_rr_curr_deepidle_val() | (1 << SPM_DEEPIDLE_ENTER_WFI));
  1088. #endif
  1089. #ifdef SPM_DEEPIDLE_PROFILE_TIME
  1090. gpt_get_cnt(SPM_PROFILE_APXGPT, &dpidle_profile[1]);
  1091. #endif
  1092. #if defined(CONFIG_ARCH_MT6580)
  1093. gic_set_primask();
  1094. #endif
  1095. spm_trigger_wfi_for_dpidle(pwrctrl);
  1096. #if defined(CONFIG_ARCH_MT6580)
  1097. gic_clear_primask();
  1098. #endif
  1099. #ifdef SPM_DEEPIDLE_PROFILE_TIME
  1100. gpt_get_cnt(SPM_PROFILE_APXGPT, &dpidle_profile[2]);
  1101. #endif
  1102. #if SPM_AEE_RR_REC
  1103. aee_rr_rec_deepidle_val(aee_rr_curr_deepidle_val() | (1 << SPM_DEEPIDLE_LEAVE_WFI));
  1104. #endif
  1105. spm_dpidle_post_process();
  1106. __spm_get_wakeup_status(&wakesta);
  1107. __spm_clean_after_wakeup();
  1108. #if SPM_AEE_RR_REC
  1109. aee_rr_rec_deepidle_val(aee_rr_curr_deepidle_val() | (1 << SPM_DEEPIDLE_ENTER_UART_AWAKE));
  1110. #endif
  1111. #if !defined(CONFIG_ARCH_MT6580)
  1112. request_uart_to_wakeup();
  1113. #endif
  1114. wr = spm_output_wake_reason(&wakesta, pcmdesc, dump_log);
  1115. #if defined(CONFIG_ARCH_MT6753)
  1116. __spm_disable_i2c4_clk();
  1117. #endif
  1118. #if !defined(CONFIG_ARCH_MT6580)
  1119. RESTORE_IRQ:
  1120. #endif
  1121. mt_cirq_flush();
  1122. mt_cirq_disable();
  1123. mt_irq_mask_restore(&mask);
  1124. spin_unlock_irqrestore(&__spm_lock, flags);
  1125. lockdep_on();
  1126. spm_dpidle_after_wfi();
  1127. #if SPM_AEE_RR_REC
  1128. aee_rr_rec_deepidle_val(0);
  1129. #endif
  1130. return wr;
  1131. }
  1132. /*
  1133. * cpu_pdn:
  1134. * true = CPU dormant
  1135. * false = CPU standby
  1136. * pwrlevel:
  1137. * 0 = AXI is off
  1138. * 1 = AXI is 26M
  1139. * pwake_time:
  1140. * >= 0 = specific wakeup period
  1141. */
  1142. wake_reason_t spm_go_to_sleep_dpidle(u32 spm_flags, u32 spm_data)
  1143. {
  1144. u32 sec = 0;
  1145. int wd_ret;
  1146. struct wake_status wakesta;
  1147. unsigned long flags;
  1148. struct mtk_irq_mask mask;
  1149. struct wd_api *wd_api;
  1150. static wake_reason_t last_wr = WR_NONE;
  1151. struct pcm_desc *pcmdesc = __spm_dpidle.pcmdesc;
  1152. struct pwr_ctrl *pwrctrl = __spm_dpidle.pwrctrl;
  1153. set_pwrctrl_pcm_flags(pwrctrl, spm_flags);
  1154. #if SPM_PWAKE_EN
  1155. sec = spm_get_wake_period(-1 /* FIXME */ , last_wr);
  1156. #endif
  1157. pwrctrl->timer_val = sec * 32768;
  1158. pwrctrl->wake_src = spm_get_sleep_wakesrc();
  1159. wd_ret = get_wd_api(&wd_api);
  1160. if (!wd_ret)
  1161. wd_api->wd_suspend_notify();
  1162. spin_lock_irqsave(&__spm_lock, flags);
  1163. mt_irq_mask_all(&mask);
  1164. mt_irq_unmask_for_sleep(SPM_IRQ0_ID);
  1165. mt_cirq_clone_gic();
  1166. mt_cirq_enable();
  1167. /* set PMIC WRAP table for deepidle power control */
  1168. mt_cpufreq_set_pmic_phase(PMIC_WRAP_PHASE_DEEPIDLE);
  1169. spm_crit2("sleep_deepidle, sec = %u, wakesrc = 0x%x [%u]\n",
  1170. sec, pwrctrl->wake_src, is_cpu_pdn(pwrctrl->pcm_flags));
  1171. __spm_reset_and_init_pcm(pcmdesc);
  1172. __spm_kick_im_to_fetch(pcmdesc);
  1173. if (request_uart_to_sleep()) {
  1174. last_wr = WR_UART_BUSY;
  1175. goto RESTORE_IRQ;
  1176. }
  1177. __spm_init_pcm_register();
  1178. __spm_init_event_vector(pcmdesc);
  1179. __spm_set_power_control(pwrctrl);
  1180. __spm_set_wakeup_event(pwrctrl);
  1181. __spm_kick_pcm_to_run(pwrctrl);
  1182. spm_dpidle_pre_process();
  1183. spm_trigger_wfi_for_dpidle(pwrctrl);
  1184. spm_dpidle_post_process();
  1185. __spm_get_wakeup_status(&wakesta);
  1186. __spm_clean_after_wakeup();
  1187. request_uart_to_wakeup();
  1188. last_wr = __spm_output_wake_reason(&wakesta, pcmdesc, true);
  1189. RESTORE_IRQ:
  1190. /* set PMIC WRAP table for normal power control */
  1191. mt_cpufreq_set_pmic_phase(PMIC_WRAP_PHASE_NORMAL);
  1192. mt_cirq_flush();
  1193. mt_cirq_disable();
  1194. mt_irq_mask_restore(&mask);
  1195. spin_unlock_irqrestore(&__spm_lock, flags);
  1196. if (!wd_ret)
  1197. wd_api->wd_resume_notify();
  1198. return last_wr;
  1199. }
  1200. #if SPM_USE_TWAM_DEBUG
  1201. #define SPM_TWAM_MONITOR_TICK 333333
  1202. static void twam_handler(struct twam_sig *twamsig)
  1203. {
  1204. spm_crit("sig_high = %u%% %u%% %u%% %u%%, r13 = 0x%x\n",
  1205. get_percent(twamsig->sig0, SPM_TWAM_MONITOR_TICK),
  1206. get_percent(twamsig->sig1, SPM_TWAM_MONITOR_TICK),
  1207. get_percent(twamsig->sig2, SPM_TWAM_MONITOR_TICK),
  1208. get_percent(twamsig->sig3, SPM_TWAM_MONITOR_TICK), spm_read(SPM_PCM_REG13_DATA));
  1209. }
  1210. #endif
  1211. void spm_deepidle_init(void)
  1212. {
  1213. #if defined(CONFIG_ARCH_MT6753)
  1214. #if defined(CONFIG_OF)
  1215. struct device_node *node;
  1216. struct resource r;
  1217. /* mcucfg */
  1218. node = of_find_compatible_node(NULL, NULL, MCUCFG_NODE);
  1219. if (!node) {
  1220. spm_err("error: cannot find node " MCUCFG_NODE);
  1221. BUG();
  1222. }
  1223. mcucfg_base = (unsigned long)of_iomap(node, 0);
  1224. if (!mcucfg_base) {
  1225. spm_err("error: cannot iomap " MCUCFG_NODE);
  1226. BUG();
  1227. }
  1228. if (of_address_to_resource(node, 0, &r)) {
  1229. spm_err("error: cannot get phys addr" MCUCFG_NODE);
  1230. BUG();
  1231. }
  1232. mcucfg_phys_base = r.start;
  1233. pr_debug("[%s] mcucfg_base = 0x%u\n", __func__, (unsigned int)mcucfg_base);
  1234. #endif
  1235. #endif
  1236. #if SPM_USE_TWAM_DEBUG
  1237. unsigned long flags;
  1238. struct twam_sig twamsig = {
  1239. .sig0 = 26, /* md1_srcclkena */
  1240. .sig1 = 22, /* md_apsrc_req_mux */
  1241. .sig2 = 25, /* md2_srcclkena */
  1242. .sig3 = 21, /* md2_apsrc_req_mux */
  1243. };
  1244. spm_twam_register_handler(twam_handler);
  1245. spm_twam_enable_monitor(&twamsig, false, SPM_TWAM_MONITOR_TICK);
  1246. #endif
  1247. }
  1248. MODULE_DESCRIPTION("SPM-DPIdle Driver v0.1");