spm_md_mtcmos.c 39 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993
  1. /* Copyright Statement:
  2. *
  3. * This software/firmware and related documentation ("MediaTek Software") are
  4. * protected under relevant copyright laws. The information contained herein
  5. * is confidential and proprietary to MediaTek Inc. and/or its licensors.
  6. * Without the prior written permission of MediaTek inc. and/or its licensors,
  7. * any reproduction, modification, use or disclosure of MediaTek Software,
  8. * and information contained herein, in whole or in part, shall be strictly prohibited.
  9. */
  10. /* MediaTek Inc. (C) 2015. All rights reserved.
  11. *
  12. * BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
  13. * THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
  14. * RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER ON
  15. * AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
  16. * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
  17. * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
  18. * NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
  19. * SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
  20. * SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES TO LOOK ONLY TO SUCH
  21. * THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. RECEIVER EXPRESSLY ACKNOWLEDGES
  22. * THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES
  23. * CONTAINED IN MEDIATEK SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK
  24. * SOFTWARE RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
  25. * STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND
  26. * CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
  27. * AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
  28. * OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY RECEIVER TO
  29. * MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
  30. */
  31. #include <platform/spm.h>
  32. int spm_mtcmos_ctrl_md1(int state)
  33. {
  34. int err = 0;
  35. /* TINFO="enable SPM register control" */
  36. spm_write(POWERON_CONFIG_EN, (SPM_PROJECT_CODE << 16) | (0x1 << 0));
  37. if (state == STA_POWER_DOWN) {
  38. /* TINFO="Start to turn off MD1" */
  39. /* TINFO="Set bus protect - step1 : 0" */
  40. spm_write(INFRA_TOPAXI_PROTECTEN_SET, MD1_PROT_STEP1_0_MASK);
  41. #ifndef IGNORE_MTCMOS_CHECK
  42. while ((spm_read(INFRA_TOPAXI_PROTECTEN_STA1) & MD1_PROT_STEP1_0_ACK_MASK) != MD1_PROT_STEP1_0_ACK_MASK) {
  43. }
  44. #endif
  45. /* TINFO="Set bus protect - step2 : 0" */
  46. spm_write(INFRA_TOPAXI_PROTECTEN_INFRA_VDNR_SET, MD1_PROT_STEP2_0_MASK);
  47. #ifndef IGNORE_MTCMOS_CHECK
  48. while ((spm_read(INFRA_TOPAXI_PROTECTEN_INFRA_VDNR_STA1) & MD1_PROT_STEP2_0_ACK_MASK) != MD1_PROT_STEP2_0_ACK_MASK) {
  49. }
  50. #endif
  51. /* TINFO="Set PWR_ON = 0" */
  52. spm_write(MD1_PWR_CON, spm_read(MD1_PWR_CON) & ~PWR_ON);
  53. #ifndef IGNORE_MTCMOS_CHECK
  54. /* TINFO="Wait until MD1_PWR_STA_MASK = 0" */
  55. while (spm_read(PWR_STATUS) & MD1_PWR_STA_MASK) {
  56. /* No logic between pwr_on and pwr_ack. Print SRAM / MTCMOS control and PWR_ACK for debug. */
  57. }
  58. #endif
  59. /* TINFO="MD_EXT_BUCK_ISO_CON[0]=1"*/
  60. spm_write(MD_EXT_BUCK_ISO_CON, spm_read(MD_EXT_BUCK_ISO_CON) | (0x1 << 0));
  61. /* TINFO="MD_EXT_BUCK_ISO_CON[1]=1"*/
  62. spm_write(MD_EXT_BUCK_ISO_CON, spm_read(MD_EXT_BUCK_ISO_CON) | (0x1 << 1));
  63. /* TINFO="Set PWR_RST_B = 0" */
  64. spm_write(MD1_PWR_CON, spm_read(MD1_PWR_CON) & ~PWR_RST_B);
  65. /* TINFO="Finish to turn off MD1" */
  66. } else { /* STA_POWER_ON */
  67. /* TINFO="Start to turn on MD1" */
  68. /* TINFO="MD_EXT_BUCK_ISO_CON[0]=0"*/
  69. spm_write(MD_EXT_BUCK_ISO_CON, spm_read(MD_EXT_BUCK_ISO_CON) & ~(0x1 << 0));
  70. /* TINFO="MD_EXT_BUCK_ISO_CON[1]=0"*/
  71. spm_write(MD_EXT_BUCK_ISO_CON, spm_read(MD_EXT_BUCK_ISO_CON) & ~(0x1 << 1));
  72. /* TINFO="Set PWR_RST_B = 1" */
  73. spm_write(MD1_PWR_CON, spm_read(MD1_PWR_CON) | PWR_RST_B);
  74. /* TINFO="Set PWR_ON = 1" */
  75. spm_write(MD1_PWR_CON, spm_read(MD1_PWR_CON) | PWR_ON);
  76. #ifndef IGNORE_MTCMOS_CHECK
  77. /* TINFO="Wait until MD1_PWR_STA_MASK = 1" */
  78. while ((spm_read(PWR_STATUS) & MD1_PWR_STA_MASK) != MD1_PWR_STA_MASK) {
  79. /* No logic between pwr_on and pwr_ack. Print SRAM / MTCMOS control and PWR_ACK for debug. */
  80. }
  81. #endif
  82. /* TINFO="Release bus protect - step2 : 0" */
  83. spm_write(INFRA_TOPAXI_PROTECTEN_INFRA_VDNR_CLR, MD1_PROT_STEP2_0_MASK);
  84. #ifndef IGNORE_MTCMOS_CHECK
  85. /* Note that this protect ack check after releasing protect has been ignored */
  86. #endif
  87. /* TINFO="Release bus protect - step1 : 0" */
  88. spm_write(INFRA_TOPAXI_PROTECTEN_CLR, MD1_PROT_STEP1_0_MASK);
  89. #ifndef IGNORE_MTCMOS_CHECK
  90. /* Note that this protect ack check after releasing protect has been ignored */
  91. #endif
  92. /* TINFO="Finish to turn on MD1" */
  93. }
  94. return err;
  95. }
  96. int spm_mtcmos_ctrl_mdp(int state)
  97. {
  98. int err = 0;
  99. /* TINFO="enable SPM register control" */
  100. spm_write(POWERON_CONFIG_EN, (SPM_PROJECT_CODE << 16) | (0x1 << 0));
  101. if (state == STA_POWER_DOWN) {
  102. /* TINFO="Start to turn off MDP" */
  103. /* TINFO="Set bus protect - step1 : 0" */
  104. spm_write(INFRA_TOPAXI_PROTECTEN_MM_2_SET, MDP_PROT_STEP1_0_MASK);
  105. #ifndef IGNORE_MTCMOS_CHECK
  106. while ((spm_read(INFRA_TOPAXI_PROTECTEN_MM_2_STA1) & MDP_PROT_STEP1_0_ACK_MASK) != MDP_PROT_STEP1_0_ACK_MASK) {
  107. }
  108. #endif
  109. /* TINFO="Set SRAM_PDN = 1" */
  110. spm_write(MDP_PWR_CON, spm_read(MDP_PWR_CON) | MDP_SRAM_PDN);
  111. #ifndef IGNORE_MTCMOS_CHECK
  112. /* TINFO="Wait until MDP_SRAM_PDN_ACK = 1" */
  113. while ((spm_read(MDP_PWR_CON) & MDP_SRAM_PDN_ACK) != MDP_SRAM_PDN_ACK) {
  114. /* Need hf_fmm_ck for SRAM PDN delay IP. */
  115. }
  116. #endif
  117. /* TINFO="Set PWR_ISO = 1" */
  118. spm_write(MDP_PWR_CON, spm_read(MDP_PWR_CON) | PWR_ISO);
  119. /* TINFO="Set PWR_CLK_DIS = 1" */
  120. spm_write(MDP_PWR_CON, spm_read(MDP_PWR_CON) | PWR_CLK_DIS);
  121. /* TINFO="Set PWR_RST_B = 0" */
  122. spm_write(MDP_PWR_CON, spm_read(MDP_PWR_CON) & ~PWR_RST_B);
  123. /* TINFO="Set PWR_ON = 0" */
  124. spm_write(MDP_PWR_CON, spm_read(MDP_PWR_CON) & ~PWR_ON);
  125. /* TINFO="Set PWR_ON_2ND = 0" */
  126. spm_write(MDP_PWR_CON, spm_read(MDP_PWR_CON) & ~PWR_ON_2ND);
  127. #ifndef IGNORE_MTCMOS_CHECK
  128. /* TINFO="Wait until PWR_STATUS = 0 and PWR_STATUS_2ND = 0" */
  129. while ((spm_read(PWR_STATUS) & MDP_PWR_STA_MASK)
  130. || (spm_read(PWR_STATUS_2ND) & MDP_PWR_STA_MASK)) {
  131. /* No logic between pwr_on and pwr_ack. Print SRAM / MTCMOS control and PWR_ACK for debug. */
  132. }
  133. #endif
  134. /* TINFO="Finish to turn off MDP" */
  135. } else { /* STA_POWER_ON */
  136. /* TINFO="Start to turn on MDP" */
  137. /* TINFO="Set PWR_ON = 1" */
  138. spm_write(MDP_PWR_CON, spm_read(MDP_PWR_CON) | PWR_ON);
  139. /* TINFO="Set PWR_ON_2ND = 1" */
  140. spm_write(MDP_PWR_CON, spm_read(MDP_PWR_CON) | PWR_ON_2ND);
  141. #ifndef IGNORE_MTCMOS_CHECK
  142. /* TINFO="Wait until PWR_STATUS = 1 and PWR_STATUS_2ND = 1" */
  143. while (((spm_read(PWR_STATUS) & MDP_PWR_STA_MASK) != MDP_PWR_STA_MASK)
  144. || ((spm_read(PWR_STATUS_2ND) & MDP_PWR_STA_MASK) != MDP_PWR_STA_MASK)) {
  145. /* No logic between pwr_on and pwr_ack. Print SRAM / MTCMOS control and PWR_ACK for debug. */
  146. }
  147. #endif
  148. /* TINFO="Set PWR_CLK_DIS = 0" */
  149. spm_write(MDP_PWR_CON, spm_read(MDP_PWR_CON) & ~PWR_CLK_DIS);
  150. /* TINFO="Set PWR_ISO = 0" */
  151. spm_write(MDP_PWR_CON, spm_read(MDP_PWR_CON) & ~PWR_ISO);
  152. /* TINFO="Set PWR_RST_B = 1" */
  153. spm_write(MDP_PWR_CON, spm_read(MDP_PWR_CON) | PWR_RST_B);
  154. /* TINFO="Set SRAM_PDN = 0" */
  155. spm_write(MDP_PWR_CON, spm_read(MDP_PWR_CON) & ~(0x1 << 8));
  156. #ifndef IGNORE_MTCMOS_CHECK
  157. /* TINFO="Wait until MDP_SRAM_PDN_ACK_BIT0 = 0" */
  158. while (spm_read(MDP_PWR_CON) & MDP_SRAM_PDN_ACK_BIT0) {
  159. /* Need hf_fmm_ck for SRAM PDN delay IP. */
  160. }
  161. #endif
  162. /* TINFO="Release bus protect - step1 : 0" */
  163. spm_write(INFRA_TOPAXI_PROTECTEN_MM_2_CLR, MDP_PROT_STEP1_0_MASK);
  164. #ifndef IGNORE_MTCMOS_CHECK
  165. /* Note that this protect ack check after releasing protect has been ignored */
  166. #endif
  167. /* TINFO="Finish to turn on MDP" */
  168. }
  169. return err;
  170. }
  171. int spm_mtcmos_ctrl_dis(int state)
  172. {
  173. int err = 0;
  174. /* TINFO="enable SPM register control" */
  175. spm_write(POWERON_CONFIG_EN, (SPM_PROJECT_CODE << 16) | (0x1 << 0));
  176. if (state == STA_POWER_DOWN) {
  177. /* TINFO="Start to turn off DIS" */
  178. /* TINFO="Set bus protect - step1 : 0" */
  179. spm_write(INFRA_TOPAXI_PROTECTEN_MM_SET, DIS_PROT_STEP1_0_MASK);
  180. #ifndef IGNORE_MTCMOS_CHECK
  181. while ((spm_read(INFRA_TOPAXI_PROTECTEN_MM_STA1) & DIS_PROT_STEP1_0_ACK_MASK) != DIS_PROT_STEP1_0_ACK_MASK) {
  182. }
  183. #endif
  184. /* TINFO="Set bus protect - step2 : 0" */
  185. spm_write(INFRA_TOPAXI_PROTECTEN_SET, DIS_PROT_STEP2_0_MASK);
  186. #ifndef IGNORE_MTCMOS_CHECK
  187. while ((spm_read(INFRA_TOPAXI_PROTECTEN_STA1) & DIS_PROT_STEP2_0_ACK_MASK) != DIS_PROT_STEP2_0_ACK_MASK) {
  188. }
  189. #endif
  190. /* TINFO="Set bus protect - step2 : 1" */
  191. spm_write(INFRA_TOPAXI_PROTECTEN_MM_SET, DIS_PROT_STEP2_1_MASK);
  192. #ifndef IGNORE_MTCMOS_CHECK
  193. while ((spm_read(INFRA_TOPAXI_PROTECTEN_MM_STA1) & DIS_PROT_STEP2_1_ACK_MASK) != DIS_PROT_STEP2_1_ACK_MASK) {
  194. }
  195. #endif
  196. /* TINFO="Set bus protect - step2 : 2" */
  197. spm_write(INFRA_TOPAXI_PROTECTEN_MM_2_SET, DIS_PROT_STEP2_2_MASK);
  198. #ifndef IGNORE_MTCMOS_CHECK
  199. while ((spm_read(INFRA_TOPAXI_PROTECTEN_MM_2_STA1) & DIS_PROT_STEP2_2_ACK_MASK) != DIS_PROT_STEP2_2_ACK_MASK) {
  200. }
  201. #endif
  202. /* TINFO="Set SRAM_PDN = 1" */
  203. spm_write(DIS_PWR_CON, spm_read(DIS_PWR_CON) | DIS_SRAM_PDN);
  204. #ifndef IGNORE_MTCMOS_CHECK
  205. /* TINFO="Wait until DIS_SRAM_PDN_ACK = 1" */
  206. while ((spm_read(DIS_PWR_CON) & DIS_SRAM_PDN_ACK) != DIS_SRAM_PDN_ACK) {
  207. /* Need hf_fmm_ck for SRAM PDN delay IP. */
  208. }
  209. #endif
  210. /* TINFO="Set PWR_ISO = 1" */
  211. spm_write(DIS_PWR_CON, spm_read(DIS_PWR_CON) | PWR_ISO);
  212. /* TINFO="Set PWR_CLK_DIS = 1" */
  213. spm_write(DIS_PWR_CON, spm_read(DIS_PWR_CON) | PWR_CLK_DIS);
  214. /* TINFO="Set PWR_RST_B = 0" */
  215. spm_write(DIS_PWR_CON, spm_read(DIS_PWR_CON) & ~PWR_RST_B);
  216. /* TINFO="Set PWR_ON = 0" */
  217. spm_write(DIS_PWR_CON, spm_read(DIS_PWR_CON) & ~PWR_ON);
  218. /* TINFO="Set PWR_ON_2ND = 0" */
  219. spm_write(DIS_PWR_CON, spm_read(DIS_PWR_CON) & ~PWR_ON_2ND);
  220. #ifndef IGNORE_MTCMOS_CHECK
  221. /* TINFO="Wait until PWR_STATUS = 0 and PWR_STATUS_2ND = 0" */
  222. while ((spm_read(PWR_STATUS) & DIS_PWR_STA_MASK)
  223. || (spm_read(PWR_STATUS_2ND) & DIS_PWR_STA_MASK)) {
  224. /* No logic between pwr_on and pwr_ack. Print SRAM / MTCMOS control and PWR_ACK for debug. */
  225. }
  226. #endif
  227. /* TINFO="Finish to turn off DIS" */
  228. } else { /* STA_POWER_ON */
  229. /* TINFO="Start to turn on DIS" */
  230. /* TINFO="Set PWR_ON = 1" */
  231. spm_write(DIS_PWR_CON, spm_read(DIS_PWR_CON) | PWR_ON);
  232. /* TINFO="Set PWR_ON_2ND = 1" */
  233. spm_write(DIS_PWR_CON, spm_read(DIS_PWR_CON) | PWR_ON_2ND);
  234. #ifndef IGNORE_MTCMOS_CHECK
  235. /* TINFO="Wait until PWR_STATUS = 1 and PWR_STATUS_2ND = 1" */
  236. while (((spm_read(PWR_STATUS) & DIS_PWR_STA_MASK) != DIS_PWR_STA_MASK)
  237. || ((spm_read(PWR_STATUS_2ND) & DIS_PWR_STA_MASK) != DIS_PWR_STA_MASK)) {
  238. /* No logic between pwr_on and pwr_ack. Print SRAM / MTCMOS control and PWR_ACK for debug. */
  239. }
  240. #endif
  241. /* TINFO="Set PWR_CLK_DIS = 0" */
  242. spm_write(DIS_PWR_CON, spm_read(DIS_PWR_CON) & ~PWR_CLK_DIS);
  243. /* TINFO="Set PWR_ISO = 0" */
  244. spm_write(DIS_PWR_CON, spm_read(DIS_PWR_CON) & ~PWR_ISO);
  245. /* TINFO="Set PWR_RST_B = 1" */
  246. spm_write(DIS_PWR_CON, spm_read(DIS_PWR_CON) | PWR_RST_B);
  247. /* TINFO="Set SRAM_PDN = 0" */
  248. spm_write(DIS_PWR_CON, spm_read(DIS_PWR_CON) & ~(0x1 << 8));
  249. #ifndef IGNORE_MTCMOS_CHECK
  250. /* TINFO="Wait until DIS_SRAM_PDN_ACK_BIT0 = 0" */
  251. while (spm_read(DIS_PWR_CON) & DIS_SRAM_PDN_ACK_BIT0) {
  252. /* Need hf_fmm_ck for SRAM PDN delay IP. */
  253. }
  254. #endif
  255. /* TINFO="Release bus protect - step2 : 0" */
  256. spm_write(INFRA_TOPAXI_PROTECTEN_CLR, DIS_PROT_STEP2_0_MASK);
  257. #ifndef IGNORE_MTCMOS_CHECK
  258. /* Note that this protect ack check after releasing protect has been ignored */
  259. #endif
  260. /* TINFO="Release bus protect - step2 : 1" */
  261. spm_write(INFRA_TOPAXI_PROTECTEN_MM_CLR, DIS_PROT_STEP2_1_MASK);
  262. #ifndef IGNORE_MTCMOS_CHECK
  263. /* Note that this protect ack check after releasing protect has been ignored */
  264. #endif
  265. /* TINFO="Release bus protect - step2 : 2" */
  266. spm_write(INFRA_TOPAXI_PROTECTEN_MM_2_CLR, DIS_PROT_STEP2_2_MASK);
  267. #ifndef IGNORE_MTCMOS_CHECK
  268. /* Note that this protect ack check after releasing protect has been ignored */
  269. #endif
  270. /* TINFO="Release bus protect - step1 : 0" */
  271. spm_write(INFRA_TOPAXI_PROTECTEN_MM_CLR, DIS_PROT_STEP1_0_MASK);
  272. #ifndef IGNORE_MTCMOS_CHECK
  273. /* Note that this protect ack check after releasing protect has been ignored */
  274. #endif
  275. /* TINFO="Finish to turn on DIS" */
  276. }
  277. return err;
  278. }
  279. int spm_mtcmos_ctrl_adsp_shut_down(int state)
  280. {
  281. int err = 0;
  282. /* TINFO="enable SPM register control" */
  283. spm_write(POWERON_CONFIG_EN, (SPM_PROJECT_CODE << 16) | (0x1 << 0));
  284. if (state == STA_POWER_DOWN) {
  285. /* TINFO="Start to turn off ADSP" */
  286. /* TINFO="Set bus protect - step1 : 0" */
  287. spm_write(INFRA_TOPAXI_PROTECTEN_2_SET, ADSP_PROT_STEP1_0_MASK);
  288. #ifndef IGNORE_MTCMOS_CHECK
  289. while ((spm_read(INFRA_TOPAXI_PROTECTEN_STA1_2) & ADSP_PROT_STEP1_0_ACK_MASK) != ADSP_PROT_STEP1_0_ACK_MASK) {
  290. }
  291. #endif
  292. /* TINFO="Set SRAM_CKISO = 1" */
  293. spm_write(ADSP_PWR_CON, spm_read(ADSP_PWR_CON) | SRAM_CKISO);
  294. /* TINFO="Set SRAM_ISOINT_B = 0" */
  295. spm_write(ADSP_PWR_CON, spm_read(ADSP_PWR_CON) & ~SRAM_ISOINT_B);
  296. /* TINFO="Delay 1us" */
  297. udelay(1);
  298. /* TINFO="Set SRAM_PDN = 1" */
  299. spm_write(ADSP_PWR_CON, spm_read(ADSP_PWR_CON) | ADSP_SRAM_PDN);
  300. #ifndef IGNORE_MTCMOS_CHECK
  301. /* TINFO="Wait until ADSP_SRAM_PDN_ACK = 1" */
  302. while ((spm_read(ADSP_PWR_CON) & ADSP_SRAM_PDN_ACK) != ADSP_SRAM_PDN_ACK) {
  303. /* Need f_f26M_aud_ck for SRAM PDN delay IP. */
  304. }
  305. #endif
  306. /* TINFO="Set PWR_ISO = 1" */
  307. spm_write(ADSP_PWR_CON, spm_read(ADSP_PWR_CON) | PWR_ISO);
  308. /* TINFO="Set PWR_CLK_DIS = 1" */
  309. spm_write(ADSP_PWR_CON, spm_read(ADSP_PWR_CON) | PWR_CLK_DIS);
  310. /* TINFO="Set PWR_RST_B = 0" */
  311. spm_write(ADSP_PWR_CON, spm_read(ADSP_PWR_CON) & ~PWR_RST_B);
  312. /* TINFO="Set PWR_ON = 0" */
  313. spm_write(ADSP_PWR_CON, spm_read(ADSP_PWR_CON) & ~PWR_ON);
  314. /* TINFO="Set PWR_ON_2ND = 0" */
  315. spm_write(ADSP_PWR_CON, spm_read(ADSP_PWR_CON) & ~PWR_ON_2ND);
  316. #ifndef IGNORE_MTCMOS_CHECK
  317. /* TINFO="Wait until PWR_STATUS = 0 and PWR_STATUS_2ND = 0" */
  318. while ((spm_read(PWR_STATUS) & ADSP_PWR_STA_MASK)
  319. || (spm_read(PWR_STATUS_2ND) & ADSP_PWR_STA_MASK)) {
  320. /* No logic between pwr_on and pwr_ack. Print SRAM / MTCMOS control and PWR_ACK for debug. */
  321. }
  322. #endif
  323. /* TINFO="Finish to turn off ADSP" */
  324. } else { /* STA_POWER_ON */
  325. spm_write(EXT_BUCK_ISO, spm_read(EXT_BUCK_ISO) & (~(0x1 << 2)));
  326. /* TINFO="Start to turn on ADSP" */
  327. /* TINFO="Set PWR_ON = 1" */
  328. spm_write(ADSP_PWR_CON, spm_read(ADSP_PWR_CON) | PWR_ON);
  329. /* TINFO="Set PWR_ON_2ND = 1" */
  330. spm_write(ADSP_PWR_CON, spm_read(ADSP_PWR_CON) | PWR_ON_2ND);
  331. #ifndef IGNORE_MTCMOS_CHECK
  332. /* TINFO="Wait until PWR_STATUS = 1 and PWR_STATUS_2ND = 1" */
  333. while (((spm_read(PWR_STATUS) & ADSP_PWR_STA_MASK) != ADSP_PWR_STA_MASK)
  334. || ((spm_read(PWR_STATUS_2ND) & ADSP_PWR_STA_MASK) != ADSP_PWR_STA_MASK)) {
  335. /* No logic between pwr_on and pwr_ack. Print SRAM / MTCMOS control and PWR_ACK for debug. */
  336. }
  337. #endif
  338. /* TINFO="Set PWR_CLK_DIS = 0" */
  339. spm_write(ADSP_PWR_CON, spm_read(ADSP_PWR_CON) & ~PWR_CLK_DIS);
  340. /* TINFO="Set PWR_ISO = 0" */
  341. spm_write(ADSP_PWR_CON, spm_read(ADSP_PWR_CON) & ~PWR_ISO);
  342. /* TINFO="Set PWR_RST_B = 1" */
  343. spm_write(ADSP_PWR_CON, spm_read(ADSP_PWR_CON) | PWR_RST_B);
  344. /* TINFO="Set SRAM_PDN = 0" */
  345. spm_write(ADSP_PWR_CON, spm_read(ADSP_PWR_CON) & ~(0x1 << 8));
  346. #ifndef IGNORE_MTCMOS_CHECK
  347. /* TINFO="Wait until ADSP_SRAM_PDN_ACK_BIT0 = 0" */
  348. while (spm_read(ADSP_PWR_CON) & ADSP_SRAM_PDN_ACK_BIT0) {
  349. /* Need f_f26M_aud_ck for SRAM PDN delay IP. */
  350. }
  351. #endif
  352. /* TINFO="Delay 1us" */
  353. udelay(1);
  354. /* TINFO="Set SRAM_ISOINT_B = 1" */
  355. spm_write(ADSP_PWR_CON, spm_read(ADSP_PWR_CON) | SRAM_ISOINT_B);
  356. /* TINFO="Delay 1us" */
  357. udelay(1);
  358. /* TINFO="Set SRAM_CKISO = 0" */
  359. spm_write(ADSP_PWR_CON, spm_read(ADSP_PWR_CON) & ~SRAM_CKISO);
  360. /* TINFO="Release bus protect - step1 : 0" */
  361. spm_write(INFRA_TOPAXI_PROTECTEN_2_CLR, ADSP_PROT_STEP1_0_MASK);
  362. #ifndef IGNORE_MTCMOS_CHECK
  363. /* Note that this protect ack check after releasing protect has been ignored */
  364. #endif
  365. /* TINFO="Finish to turn on ADSP" */
  366. }
  367. return err;
  368. }
  369. int spm_mtcmos_ctrl_adsp_dormant(int state)
  370. {
  371. int err = 0;
  372. /* TINFO="enable SPM register control" */
  373. spm_write(POWERON_CONFIG_EN, (SPM_PROJECT_CODE << 16) | (0x1 << 0));
  374. if (state == STA_POWER_DOWN) {
  375. /* TINFO="Start to turn off ADSP" */
  376. /* TINFO="Set bus protect - step1 : 0" */
  377. spm_write(INFRA_TOPAXI_PROTECTEN_2_SET, ADSP_PROT_STEP1_0_MASK);
  378. #ifndef IGNORE_MTCMOS_CHECK
  379. while ((spm_read(INFRA_TOPAXI_PROTECTEN_STA1_2) & ADSP_PROT_STEP1_0_ACK_MASK) != ADSP_PROT_STEP1_0_ACK_MASK) {
  380. }
  381. #endif
  382. /* TINFO="Set SRAM_CKISO = 1" */
  383. spm_write(ADSP_PWR_CON, spm_read(ADSP_PWR_CON) | SRAM_CKISO);
  384. /* TINFO="Set SRAM_ISOINT_B = 0" */
  385. spm_write(ADSP_PWR_CON, spm_read(ADSP_PWR_CON) & ~SRAM_ISOINT_B);
  386. /* TINFO="Delay 1us" */
  387. udelay(1);
  388. /* TINFO="Set SRAM_SLEEP_B = 0" */
  389. spm_write(ADSP_PWR_CON, spm_read(ADSP_PWR_CON) & ~ADSP_SRAM_SLEEP_B);
  390. #ifndef IGNORE_MTCMOS_CHECK
  391. /* TINFO="Wait until ADSP_SRAM_SLEEP_B_ACK = 0" */
  392. while (spm_read(ADSP_PWR_CON) & ADSP_SRAM_SLEEP_B_ACK) {
  393. /* n/a */
  394. }
  395. #endif
  396. /* TINFO="Set PWR_ISO = 1" */
  397. spm_write(ADSP_PWR_CON, spm_read(ADSP_PWR_CON) | PWR_ISO);
  398. /* TINFO="Set PWR_CLK_DIS = 1" */
  399. spm_write(ADSP_PWR_CON, spm_read(ADSP_PWR_CON) | PWR_CLK_DIS);
  400. /* TINFO="Set PWR_RST_B = 0" */
  401. spm_write(ADSP_PWR_CON, spm_read(ADSP_PWR_CON) & ~PWR_RST_B);
  402. /* TINFO="Set PWR_ON = 0" */
  403. spm_write(ADSP_PWR_CON, spm_read(ADSP_PWR_CON) & ~PWR_ON);
  404. /* TINFO="Set PWR_ON_2ND = 0" */
  405. spm_write(ADSP_PWR_CON, spm_read(ADSP_PWR_CON) & ~PWR_ON_2ND);
  406. #ifndef IGNORE_MTCMOS_CHECK
  407. /* TINFO="Wait until PWR_STATUS = 0 and PWR_STATUS_2ND = 0" */
  408. while ((spm_read(PWR_STATUS) & ADSP_PWR_STA_MASK)
  409. || (spm_read(PWR_STATUS_2ND) & ADSP_PWR_STA_MASK)) {
  410. /* No logic between pwr_on and pwr_ack. Print SRAM / MTCMOS control and PWR_ACK for debug. */
  411. }
  412. #endif
  413. /* TINFO="Finish to turn off ADSP" */
  414. } else { /* STA_POWER_ON */
  415. /* TINFO="Start to turn on ADSP" */
  416. spm_write(EXT_BUCK_ISO, spm_read(EXT_BUCK_ISO) & (~(0x1 << 2)));
  417. /* TINFO="Set PWR_ON = 1" */
  418. spm_write(ADSP_PWR_CON, spm_read(ADSP_PWR_CON) | PWR_ON);
  419. /* TINFO="Set PWR_ON_2ND = 1" */
  420. spm_write(ADSP_PWR_CON, spm_read(ADSP_PWR_CON) | PWR_ON_2ND);
  421. #ifndef IGNORE_MTCMOS_CHECK
  422. /* TINFO="Wait until PWR_STATUS = 1 and PWR_STATUS_2ND = 1" */
  423. while (((spm_read(PWR_STATUS) & ADSP_PWR_STA_MASK) != ADSP_PWR_STA_MASK)
  424. || ((spm_read(PWR_STATUS_2ND) & ADSP_PWR_STA_MASK) != ADSP_PWR_STA_MASK)) {
  425. /* No logic between pwr_on and pwr_ack. Print SRAM / MTCMOS control and PWR_ACK for debug. */
  426. }
  427. #endif
  428. /* TINFO="Set PWR_CLK_DIS = 0" */
  429. spm_write(ADSP_PWR_CON, spm_read(ADSP_PWR_CON) & ~PWR_CLK_DIS);
  430. /* TINFO="Set PWR_ISO = 0" */
  431. spm_write(ADSP_PWR_CON, spm_read(ADSP_PWR_CON) & ~PWR_ISO);
  432. /* TINFO="Set PWR_RST_B = 1" */
  433. spm_write(ADSP_PWR_CON, spm_read(ADSP_PWR_CON) | PWR_RST_B);
  434. /* TINFO="Set SRAM_SLEEP_B = 1" */
  435. spm_write(ADSP_PWR_CON, spm_read(ADSP_PWR_CON) | (0x1 << 9));
  436. #ifndef IGNORE_MTCMOS_CHECK
  437. /* TINFO="Wait until ADSP_SRAM_SLEEP_B_ACK_BIT0 = 1" */
  438. while ((spm_read(ADSP_PWR_CON) & ADSP_SRAM_SLEEP_B_ACK_BIT0) != ADSP_SRAM_SLEEP_B_ACK_BIT0) {
  439. /* n/a */
  440. }
  441. #endif
  442. /* TINFO="Delay 1us" */
  443. udelay(1);
  444. /* TINFO="Set SRAM_ISOINT_B = 1" */
  445. spm_write(ADSP_PWR_CON, spm_read(ADSP_PWR_CON) | SRAM_ISOINT_B);
  446. /* TINFO="Delay 1us" */
  447. udelay(1);
  448. /* TINFO="Set SRAM_CKISO = 0" */
  449. spm_write(ADSP_PWR_CON, spm_read(ADSP_PWR_CON) & ~SRAM_CKISO);
  450. /* TINFO="Release bus protect - step1 : 0" */
  451. spm_write(INFRA_TOPAXI_PROTECTEN_2_CLR, ADSP_PROT_STEP1_0_MASK);
  452. #ifndef IGNORE_MTCMOS_CHECK
  453. /* Note that this protect ack check after releasing protect has been ignored */
  454. #endif
  455. /* TINFO="Finish to turn on ADSP" */
  456. }
  457. return err;
  458. }
  459. int spm_mtcmos_ctrl_audio(int state)
  460. {
  461. return 0;
  462. }
  463. int spm_mtcmos_ctrl_mfg0(int state)
  464. {
  465. int err = 0;
  466. /* TINFO="enable SPM register control" */
  467. spm_write(POWERON_CONFIG_EN, (SPM_PROJECT_CODE << 16) | (0x1 << 0));
  468. if (state == STA_POWER_DOWN) {
  469. /* TINFO="Start to turn off MFG0" */
  470. /* TINFO="Set SRAM_PDN = 1" */
  471. spm_write(MFG0_PWR_CON, spm_read(MFG0_PWR_CON) | MFG0_SRAM_PDN);
  472. #ifndef IGNORE_MTCMOS_CHECK
  473. /* TINFO="Wait until MFG0_SRAM_PDN_ACK = 1" */
  474. while ((spm_read(MFG0_PWR_CON) & MFG0_SRAM_PDN_ACK) != MFG0_SRAM_PDN_ACK) {
  475. /* Need f_fmfg_core_ck for SRAM PDN delay IP. */
  476. }
  477. #endif
  478. /* TINFO="Set PWR_ISO = 1" */
  479. spm_write(MFG0_PWR_CON, spm_read(MFG0_PWR_CON) | PWR_ISO);
  480. /* TINFO="Set PWR_CLK_DIS = 1" */
  481. spm_write(MFG0_PWR_CON, spm_read(MFG0_PWR_CON) | PWR_CLK_DIS);
  482. /* TINFO="Set PWR_RST_B = 0" */
  483. spm_write(MFG0_PWR_CON, spm_read(MFG0_PWR_CON) & ~PWR_RST_B);
  484. /* TINFO="Set PWR_ON = 0" */
  485. spm_write(MFG0_PWR_CON, spm_read(MFG0_PWR_CON) & ~PWR_ON);
  486. /* TINFO="Set PWR_ON_2ND = 0" */
  487. spm_write(MFG0_PWR_CON, spm_read(MFG0_PWR_CON) & ~PWR_ON_2ND);
  488. #ifndef IGNORE_MTCMOS_CHECK
  489. /* TINFO="Wait until PWR_STATUS = 0 and PWR_STATUS_2ND = 0" */
  490. while ((spm_read(PWR_STATUS) & MFG0_PWR_STA_MASK)
  491. || (spm_read(PWR_STATUS_2ND) & MFG0_PWR_STA_MASK)) {
  492. /* No logic between pwr_on and pwr_ack. Print SRAM / MTCMOS control and PWR_ACK for debug. */
  493. }
  494. #endif
  495. /* TINFO="Finish to turn off MFG0" */
  496. } else { /* STA_POWER_ON */
  497. /* TINFO="Start to turn on MFG0" */
  498. /* TINFO="Set PWR_ON = 1" */
  499. spm_write(MFG0_PWR_CON, spm_read(MFG0_PWR_CON) | PWR_ON);
  500. /* TINFO="Set PWR_ON_2ND = 1" */
  501. spm_write(MFG0_PWR_CON, spm_read(MFG0_PWR_CON) | PWR_ON_2ND);
  502. #ifndef IGNORE_MTCMOS_CHECK
  503. /* TINFO="Wait until PWR_STATUS = 1 and PWR_STATUS_2ND = 1" */
  504. while (((spm_read(PWR_STATUS) & MFG0_PWR_STA_MASK) != MFG0_PWR_STA_MASK)
  505. || ((spm_read(PWR_STATUS_2ND) & MFG0_PWR_STA_MASK) != MFG0_PWR_STA_MASK)) {
  506. /* No logic between pwr_on and pwr_ack. Print SRAM / MTCMOS control and PWR_ACK for debug. */
  507. }
  508. #endif
  509. /* TINFO="Set PWR_CLK_DIS = 0" */
  510. spm_write(MFG0_PWR_CON, spm_read(MFG0_PWR_CON) & ~PWR_CLK_DIS);
  511. /* TINFO="Set PWR_ISO = 0" */
  512. spm_write(MFG0_PWR_CON, spm_read(MFG0_PWR_CON) & ~PWR_ISO);
  513. /* TINFO="Set PWR_RST_B = 1" */
  514. spm_write(MFG0_PWR_CON, spm_read(MFG0_PWR_CON) | PWR_RST_B);
  515. /* TINFO="Set SRAM_PDN = 0" */
  516. spm_write(MFG0_PWR_CON, spm_read(MFG0_PWR_CON) & ~(0x1 << 8));
  517. #ifndef IGNORE_MTCMOS_CHECK
  518. /* TINFO="Wait until MFG0_SRAM_PDN_ACK_BIT0 = 0" */
  519. while (spm_read(MFG0_PWR_CON) & MFG0_SRAM_PDN_ACK_BIT0) {
  520. /* Need f_fmfg_core_ck for SRAM PDN delay IP. */
  521. }
  522. #endif
  523. /* TINFO="Finish to turn on MFG0" */
  524. }
  525. return err;
  526. }
  527. int spm_mtcmos_ctrl_mfg1(int state)
  528. {
  529. int err = 0;
  530. /* TINFO="enable SPM register control" */
  531. spm_write(POWERON_CONFIG_EN, (SPM_PROJECT_CODE << 16) | (0x1 << 0));
  532. if (state == STA_POWER_DOWN) {
  533. /* TINFO="Start to turn off MFG1" */
  534. /* TINFO="Set bus protect - step1 : 0" */
  535. spm_write(INFRA_TOPAXI_PROTECTEN_1_SET, MFG1_PROT_STEP1_0_MASK);
  536. #ifndef IGNORE_MTCMOS_CHECK
  537. while ((spm_read(INFRA_TOPAXI_PROTECTEN_STA1_1) & MFG1_PROT_STEP1_0_ACK_MASK) != MFG1_PROT_STEP1_0_ACK_MASK) {
  538. }
  539. #endif
  540. /* TINFO="Set bus protect - step1 : 1" */
  541. spm_write(INFRA_TOPAXI_PROTECTEN_2_SET, MFG1_PROT_STEP1_1_MASK);
  542. #ifndef IGNORE_MTCMOS_CHECK
  543. while ((spm_read(INFRA_TOPAXI_PROTECTEN_STA1_2) & MFG1_PROT_STEP1_1_ACK_MASK) != MFG1_PROT_STEP1_1_ACK_MASK) {
  544. }
  545. #endif
  546. /* TINFO="Set bus protect - step2 : 0" */
  547. spm_write(INFRA_TOPAXI_PROTECTEN_SET, MFG1_PROT_STEP2_0_MASK);
  548. #ifndef IGNORE_MTCMOS_CHECK
  549. while ((spm_read(INFRA_TOPAXI_PROTECTEN_STA1) & MFG1_PROT_STEP2_0_ACK_MASK) != MFG1_PROT_STEP2_0_ACK_MASK) {
  550. }
  551. #endif
  552. /* TINFO="Set bus protect - step2 : 1" */
  553. spm_write(INFRA_TOPAXI_PROTECTEN_2_SET, MFG1_PROT_STEP2_1_MASK);
  554. #ifndef IGNORE_MTCMOS_CHECK
  555. while ((spm_read(INFRA_TOPAXI_PROTECTEN_STA1_2) & MFG1_PROT_STEP2_1_ACK_MASK) != MFG1_PROT_STEP2_1_ACK_MASK) {
  556. }
  557. #endif
  558. /* TINFO="Set SRAM_PDN = 1" */
  559. spm_write(MFG1_PWR_CON, spm_read(MFG1_PWR_CON) | MFG1_SRAM_PDN);
  560. #ifndef IGNORE_MTCMOS_CHECK
  561. /* TINFO="Wait until MFG1_SRAM_PDN_ACK = 1" */
  562. while ((spm_read(MFG1_PWR_CON) & MFG1_SRAM_PDN_ACK) != MFG1_SRAM_PDN_ACK) {
  563. /* */
  564. }
  565. #endif
  566. /* TINFO="Set PWR_ISO = 1" */
  567. spm_write(MFG1_PWR_CON, spm_read(MFG1_PWR_CON) | PWR_ISO);
  568. /* TINFO="Set PWR_CLK_DIS = 1" */
  569. spm_write(MFG1_PWR_CON, spm_read(MFG1_PWR_CON) | PWR_CLK_DIS);
  570. /* TINFO="Set PWR_RST_B = 0" */
  571. spm_write(MFG1_PWR_CON, spm_read(MFG1_PWR_CON) & ~PWR_RST_B);
  572. /* TINFO="Set PWR_ON = 0" */
  573. spm_write(MFG1_PWR_CON, spm_read(MFG1_PWR_CON) & ~PWR_ON);
  574. /* TINFO="Set PWR_ON_2ND = 0" */
  575. spm_write(MFG1_PWR_CON, spm_read(MFG1_PWR_CON) & ~PWR_ON_2ND);
  576. #ifndef IGNORE_MTCMOS_CHECK
  577. /* TINFO="Wait until PWR_STATUS = 0 and PWR_STATUS_2ND = 0" */
  578. while ((spm_read(PWR_STATUS) & MFG1_PWR_STA_MASK)
  579. || (spm_read(PWR_STATUS_2ND) & MFG1_PWR_STA_MASK)) {
  580. /* No logic between pwr_on and pwr_ack. Print SRAM / MTCMOS control and PWR_ACK for debug. */
  581. }
  582. #endif
  583. /* TINFO="Finish to turn off MFG1" */
  584. } else { /* STA_POWER_ON */
  585. /* TINFO="Start to turn on MFG1" */
  586. /* TINFO="Set PWR_ON = 1" */
  587. spm_write(MFG1_PWR_CON, spm_read(MFG1_PWR_CON) | PWR_ON);
  588. /* TINFO="Set PWR_ON_2ND = 1" */
  589. spm_write(MFG1_PWR_CON, spm_read(MFG1_PWR_CON) | PWR_ON_2ND);
  590. #ifndef IGNORE_MTCMOS_CHECK
  591. /* TINFO="Wait until PWR_STATUS = 1 and PWR_STATUS_2ND = 1" */
  592. while (((spm_read(PWR_STATUS) & MFG1_PWR_STA_MASK) != MFG1_PWR_STA_MASK)
  593. || ((spm_read(PWR_STATUS_2ND) & MFG1_PWR_STA_MASK) != MFG1_PWR_STA_MASK)) {
  594. /* No logic between pwr_on and pwr_ack. Print SRAM / MTCMOS control and PWR_ACK for debug. */
  595. }
  596. #endif
  597. /* TINFO="Set PWR_CLK_DIS = 0" */
  598. spm_write(MFG1_PWR_CON, spm_read(MFG1_PWR_CON) & ~PWR_CLK_DIS);
  599. /* TINFO="Set PWR_ISO = 0" */
  600. spm_write(MFG1_PWR_CON, spm_read(MFG1_PWR_CON) & ~PWR_ISO);
  601. /* TINFO="Set PWR_RST_B = 1" */
  602. spm_write(MFG1_PWR_CON, spm_read(MFG1_PWR_CON) | PWR_RST_B);
  603. /* TINFO="Set SRAM_PDN = 0" */
  604. spm_write(MFG1_PWR_CON, spm_read(MFG1_PWR_CON) & ~(0x1 << 8));
  605. #ifndef IGNORE_MTCMOS_CHECK
  606. /* TINFO="Wait until MFG1_SRAM_PDN_ACK_BIT0 = 0" */
  607. while (spm_read(MFG1_PWR_CON) & MFG1_SRAM_PDN_ACK_BIT0) {
  608. /* */
  609. }
  610. #endif
  611. /* TINFO="Release bus protect - step2 : 0" */
  612. spm_write(INFRA_TOPAXI_PROTECTEN_CLR, MFG1_PROT_STEP2_0_MASK);
  613. #ifndef IGNORE_MTCMOS_CHECK
  614. /* Note that this protect ack check after releasing protect has been ignored */
  615. #endif
  616. /* TINFO="Release bus protect - step2 : 1" */
  617. spm_write(INFRA_TOPAXI_PROTECTEN_2_CLR, MFG1_PROT_STEP2_1_MASK);
  618. #ifndef IGNORE_MTCMOS_CHECK
  619. /* Note that this protect ack check after releasing protect has been ignored */
  620. #endif
  621. /* TINFO="Release bus protect - step1 : 0" */
  622. spm_write(INFRA_TOPAXI_PROTECTEN_1_CLR, MFG1_PROT_STEP1_0_MASK);
  623. #ifndef IGNORE_MTCMOS_CHECK
  624. /* Note that this protect ack check after releasing protect has been ignored */
  625. #endif
  626. /* TINFO="Release bus protect - step1 : 1" */
  627. spm_write(INFRA_TOPAXI_PROTECTEN_2_CLR, MFG1_PROT_STEP1_1_MASK);
  628. #ifndef IGNORE_MTCMOS_CHECK
  629. /* Note that this protect ack check after releasing protect has been ignored */
  630. #endif
  631. /* TINFO="Finish to turn on MFG1" */
  632. }
  633. return err;
  634. }
  635. int spm_mtcmos_ctrl_mfg2(int state)
  636. {
  637. int err = 0;
  638. /* TINFO="enable SPM register control" */
  639. spm_write(POWERON_CONFIG_EN, (SPM_PROJECT_CODE << 16) | (0x1 << 0));
  640. if (state == STA_POWER_DOWN) {
  641. /* TINFO="Start to turn off MFG2" */
  642. /* TINFO="Set SRAM_PDN = 1" */
  643. spm_write(MFG2_PWR_CON, spm_read(MFG2_PWR_CON) | MFG2_SRAM_PDN);
  644. #ifndef IGNORE_MTCMOS_CHECK
  645. /* TINFO="Wait until MFG2_SRAM_PDN_ACK = 1" */
  646. while ((spm_read(MFG2_PWR_CON) & MFG2_SRAM_PDN_ACK) != MFG2_SRAM_PDN_ACK) {
  647. /* */
  648. }
  649. #endif
  650. /* TINFO="Set PWR_ISO = 1" */
  651. spm_write(MFG2_PWR_CON, spm_read(MFG2_PWR_CON) | PWR_ISO);
  652. /* TINFO="Set PWR_CLK_DIS = 1" */
  653. spm_write(MFG2_PWR_CON, spm_read(MFG2_PWR_CON) | PWR_CLK_DIS);
  654. /* TINFO="Set PWR_RST_B = 0" */
  655. spm_write(MFG2_PWR_CON, spm_read(MFG2_PWR_CON) & ~PWR_RST_B);
  656. /* TINFO="Set PWR_ON = 0" */
  657. spm_write(MFG2_PWR_CON, spm_read(MFG2_PWR_CON) & ~PWR_ON);
  658. /* TINFO="Set PWR_ON_2ND = 0" */
  659. spm_write(MFG2_PWR_CON, spm_read(MFG2_PWR_CON) & ~PWR_ON_2ND);
  660. #ifndef IGNORE_MTCMOS_CHECK
  661. /* TINFO="Wait until PWR_STATUS = 0 and PWR_STATUS_2ND = 0" */
  662. while ((spm_read(PWR_STATUS) & MFG2_PWR_STA_MASK)
  663. || (spm_read(PWR_STATUS_2ND) & MFG2_PWR_STA_MASK)) {
  664. /* No logic between pwr_on and pwr_ack. Print SRAM / MTCMOS control and PWR_ACK for debug. */
  665. }
  666. #endif
  667. /* TINFO="Finish to turn off MFG2" */
  668. } else { /* STA_POWER_ON */
  669. /* TINFO="Start to turn on MFG2" */
  670. /* TINFO="Set PWR_ON = 1" */
  671. spm_write(MFG2_PWR_CON, spm_read(MFG2_PWR_CON) | PWR_ON);
  672. /* TINFO="Set PWR_ON_2ND = 1" */
  673. spm_write(MFG2_PWR_CON, spm_read(MFG2_PWR_CON) | PWR_ON_2ND);
  674. #ifndef IGNORE_MTCMOS_CHECK
  675. /* TINFO="Wait until PWR_STATUS = 1 and PWR_STATUS_2ND = 1" */
  676. while (((spm_read(PWR_STATUS) & MFG2_PWR_STA_MASK) != MFG2_PWR_STA_MASK)
  677. || ((spm_read(PWR_STATUS_2ND) & MFG2_PWR_STA_MASK) != MFG2_PWR_STA_MASK)) {
  678. /* No logic between pwr_on and pwr_ack. Print SRAM / MTCMOS control and PWR_ACK for debug. */
  679. }
  680. #endif
  681. /* TINFO="Set PWR_CLK_DIS = 0" */
  682. spm_write(MFG2_PWR_CON, spm_read(MFG2_PWR_CON) & ~PWR_CLK_DIS);
  683. /* TINFO="Set PWR_ISO = 0" */
  684. spm_write(MFG2_PWR_CON, spm_read(MFG2_PWR_CON) & ~PWR_ISO);
  685. /* TINFO="Set PWR_RST_B = 1" */
  686. spm_write(MFG2_PWR_CON, spm_read(MFG2_PWR_CON) | PWR_RST_B);
  687. /* TINFO="Set SRAM_PDN = 0" */
  688. spm_write(MFG2_PWR_CON, spm_read(MFG2_PWR_CON) & ~(0x1 << 8));
  689. #ifndef IGNORE_MTCMOS_CHECK
  690. /* TINFO="Wait until MFG2_SRAM_PDN_ACK_BIT0 = 0" */
  691. while (spm_read(MFG2_PWR_CON) & MFG2_SRAM_PDN_ACK_BIT0) {
  692. /* */
  693. }
  694. #endif
  695. /* TINFO="Finish to turn on MFG2" */
  696. }
  697. return err;
  698. }
  699. int spm_mtcmos_ctrl_mfg3(int state)
  700. {
  701. int err = 0;
  702. /* TINFO="enable SPM register control" */
  703. spm_write(POWERON_CONFIG_EN, (SPM_PROJECT_CODE << 16) | (0x1 << 0));
  704. if (state == STA_POWER_DOWN) {
  705. /* TINFO="Start to turn off MFG3" */
  706. /* TINFO="Set SRAM_PDN = 1" */
  707. spm_write(MFG3_PWR_CON, spm_read(MFG3_PWR_CON) | MFG3_SRAM_PDN);
  708. #ifndef IGNORE_MTCMOS_CHECK
  709. /* TINFO="Wait until MFG3_SRAM_PDN_ACK = 1" */
  710. while ((spm_read(MFG3_PWR_CON) & MFG3_SRAM_PDN_ACK) != MFG3_SRAM_PDN_ACK) {
  711. /* */
  712. }
  713. #endif
  714. /* TINFO="Set PWR_ISO = 1" */
  715. spm_write(MFG3_PWR_CON, spm_read(MFG3_PWR_CON) | PWR_ISO);
  716. /* TINFO="Set PWR_CLK_DIS = 1" */
  717. spm_write(MFG3_PWR_CON, spm_read(MFG3_PWR_CON) | PWR_CLK_DIS);
  718. /* TINFO="Set PWR_RST_B = 0" */
  719. spm_write(MFG3_PWR_CON, spm_read(MFG3_PWR_CON) & ~PWR_RST_B);
  720. /* TINFO="Set PWR_ON = 0" */
  721. spm_write(MFG3_PWR_CON, spm_read(MFG3_PWR_CON) & ~PWR_ON);
  722. /* TINFO="Set PWR_ON_2ND = 0" */
  723. spm_write(MFG3_PWR_CON, spm_read(MFG3_PWR_CON) & ~PWR_ON_2ND);
  724. #ifndef IGNORE_MTCMOS_CHECK
  725. /* TINFO="Wait until PWR_STATUS = 0 and PWR_STATUS_2ND = 0" */
  726. while ((spm_read(PWR_STATUS) & MFG3_PWR_STA_MASK)
  727. || (spm_read(PWR_STATUS_2ND) & MFG3_PWR_STA_MASK)) {
  728. /* No logic between pwr_on and pwr_ack. Print SRAM / MTCMOS control and PWR_ACK for debug. */
  729. }
  730. #endif
  731. /* TINFO="Finish to turn off MFG3" */
  732. } else { /* STA_POWER_ON */
  733. /* TINFO="Start to turn on MFG3" */
  734. /* TINFO="Set PWR_ON = 1" */
  735. spm_write(MFG3_PWR_CON, spm_read(MFG3_PWR_CON) | PWR_ON);
  736. /* TINFO="Set PWR_ON_2ND = 1" */
  737. spm_write(MFG3_PWR_CON, spm_read(MFG3_PWR_CON) | PWR_ON_2ND);
  738. #ifndef IGNORE_MTCMOS_CHECK
  739. /* TINFO="Wait until PWR_STATUS = 1 and PWR_STATUS_2ND = 1" */
  740. while (((spm_read(PWR_STATUS) & MFG3_PWR_STA_MASK) != MFG3_PWR_STA_MASK)
  741. || ((spm_read(PWR_STATUS_2ND) & MFG3_PWR_STA_MASK) != MFG3_PWR_STA_MASK)) {
  742. /* No logic between pwr_on and pwr_ack. Print SRAM / MTCMOS control and PWR_ACK for debug. */
  743. }
  744. #endif
  745. /* TINFO="Set PWR_CLK_DIS = 0" */
  746. spm_write(MFG3_PWR_CON, spm_read(MFG3_PWR_CON) & ~PWR_CLK_DIS);
  747. /* TINFO="Set PWR_ISO = 0" */
  748. spm_write(MFG3_PWR_CON, spm_read(MFG3_PWR_CON) & ~PWR_ISO);
  749. /* TINFO="Set PWR_RST_B = 1" */
  750. spm_write(MFG3_PWR_CON, spm_read(MFG3_PWR_CON) | PWR_RST_B);
  751. /* TINFO="Set SRAM_PDN = 0" */
  752. spm_write(MFG3_PWR_CON, spm_read(MFG3_PWR_CON) & ~(0x1 << 8));
  753. #ifndef IGNORE_MTCMOS_CHECK
  754. /* TINFO="Wait until MFG3_SRAM_PDN_ACK_BIT0 = 0" */
  755. while (spm_read(MFG3_PWR_CON) & MFG3_SRAM_PDN_ACK_BIT0) {
  756. /* */
  757. }
  758. #endif
  759. /* TINFO="Finish to turn on MFG3" */
  760. }
  761. return err;
  762. }
  763. int spm_mtcmos_ctrl_mfg4(int state)
  764. {
  765. int err = 0;
  766. /* TINFO="enable SPM register control" */
  767. spm_write(POWERON_CONFIG_EN, (SPM_PROJECT_CODE << 16) | (0x1 << 0));
  768. if (state == STA_POWER_DOWN) {
  769. /* TINFO="Start to turn off MFG4" */
  770. /* TINFO="Set SRAM_PDN = 1" */
  771. spm_write(MFG4_PWR_CON, spm_read(MFG4_PWR_CON) | MFG4_SRAM_PDN);
  772. #ifndef IGNORE_MTCMOS_CHECK
  773. /* TINFO="Wait until MFG4_SRAM_PDN_ACK = 1" */
  774. while ((spm_read(MFG4_PWR_CON) & MFG4_SRAM_PDN_ACK) != MFG4_SRAM_PDN_ACK) {
  775. /* */
  776. }
  777. #endif
  778. /* TINFO="Set PWR_ISO = 1" */
  779. spm_write(MFG4_PWR_CON, spm_read(MFG4_PWR_CON) | PWR_ISO);
  780. /* TINFO="Set PWR_CLK_DIS = 1" */
  781. spm_write(MFG4_PWR_CON, spm_read(MFG4_PWR_CON) | PWR_CLK_DIS);
  782. /* TINFO="Set PWR_RST_B = 0" */
  783. spm_write(MFG4_PWR_CON, spm_read(MFG4_PWR_CON) & ~PWR_RST_B);
  784. /* TINFO="Set PWR_ON = 0" */
  785. spm_write(MFG4_PWR_CON, spm_read(MFG4_PWR_CON) & ~PWR_ON);
  786. /* TINFO="Set PWR_ON_2ND = 0" */
  787. spm_write(MFG4_PWR_CON, spm_read(MFG4_PWR_CON) & ~PWR_ON_2ND);
  788. #ifndef IGNORE_MTCMOS_CHECK
  789. /* TINFO="Wait until PWR_STATUS = 0 and PWR_STATUS_2ND = 0" */
  790. while ((spm_read(PWR_STATUS) & MFG4_PWR_STA_MASK)
  791. || (spm_read(PWR_STATUS_2ND) & MFG4_PWR_STA_MASK)) {
  792. /* No logic between pwr_on and pwr_ack. Print SRAM / MTCMOS control and PWR_ACK for debug. */
  793. }
  794. #endif
  795. /* TINFO="Finish to turn off MFG4" */
  796. } else { /* STA_POWER_ON */
  797. /* TINFO="Start to turn on MFG4" */
  798. /* TINFO="Set PWR_ON = 1" */
  799. spm_write(MFG4_PWR_CON, spm_read(MFG4_PWR_CON) | PWR_ON);
  800. /* TINFO="Set PWR_ON_2ND = 1" */
  801. spm_write(MFG4_PWR_CON, spm_read(MFG4_PWR_CON) | PWR_ON_2ND);
  802. #ifndef IGNORE_MTCMOS_CHECK
  803. /* TINFO="Wait until PWR_STATUS = 1 and PWR_STATUS_2ND = 1" */
  804. while (((spm_read(PWR_STATUS) & MFG4_PWR_STA_MASK) != MFG4_PWR_STA_MASK)
  805. || ((spm_read(PWR_STATUS_2ND) & MFG4_PWR_STA_MASK) != MFG4_PWR_STA_MASK)) {
  806. /* No logic between pwr_on and pwr_ack. Print SRAM / MTCMOS control and PWR_ACK for debug. */
  807. }
  808. #endif
  809. /* TINFO="Set PWR_CLK_DIS = 0" */
  810. spm_write(MFG4_PWR_CON, spm_read(MFG4_PWR_CON) & ~PWR_CLK_DIS);
  811. /* TINFO="Set PWR_ISO = 0" */
  812. spm_write(MFG4_PWR_CON, spm_read(MFG4_PWR_CON) & ~PWR_ISO);
  813. /* TINFO="Set PWR_RST_B = 1" */
  814. spm_write(MFG4_PWR_CON, spm_read(MFG4_PWR_CON) | PWR_RST_B);
  815. /* TINFO="Set SRAM_PDN = 0" */
  816. spm_write(MFG4_PWR_CON, spm_read(MFG4_PWR_CON) & ~(0x1 << 8));
  817. #ifndef IGNORE_MTCMOS_CHECK
  818. /* TINFO="Wait until MFG4_SRAM_PDN_ACK_BIT0 = 0" */
  819. while (spm_read(MFG4_PWR_CON) & MFG4_SRAM_PDN_ACK_BIT0) {
  820. /* */
  821. }
  822. #endif
  823. /* TINFO="Finish to turn on MFG4" */
  824. }
  825. return err;
  826. }
  827. int spm_mtcmos_ctrl_mfg5(int state)
  828. {
  829. int err = 0;
  830. /* TINFO="enable SPM register control" */
  831. spm_write(POWERON_CONFIG_EN, (SPM_PROJECT_CODE << 16) | (0x1 << 0));
  832. if (state == STA_POWER_DOWN) {
  833. /* TINFO="Start to turn off MFG5" */
  834. /* TINFO="Set SRAM_PDN = 1" */
  835. spm_write(MFG5_PWR_CON, spm_read(MFG5_PWR_CON) | MFG5_SRAM_PDN);
  836. #ifndef IGNORE_MTCMOS_CHECK
  837. /* TINFO="Wait until MFG5_SRAM_PDN_ACK = 1" */
  838. while ((spm_read(MFG5_PWR_CON) & MFG5_SRAM_PDN_ACK) != MFG5_SRAM_PDN_ACK) {
  839. /* */
  840. }
  841. #endif
  842. /* TINFO="Set PWR_ISO = 1" */
  843. spm_write(MFG5_PWR_CON, spm_read(MFG5_PWR_CON) | PWR_ISO);
  844. /* TINFO="Set PWR_CLK_DIS = 1" */
  845. spm_write(MFG5_PWR_CON, spm_read(MFG5_PWR_CON) | PWR_CLK_DIS);
  846. /* TINFO="Set PWR_RST_B = 0" */
  847. spm_write(MFG5_PWR_CON, spm_read(MFG5_PWR_CON) & ~PWR_RST_B);
  848. /* TINFO="Set PWR_ON = 0" */
  849. spm_write(MFG5_PWR_CON, spm_read(MFG5_PWR_CON) & ~PWR_ON);
  850. /* TINFO="Set PWR_ON_2ND = 0" */
  851. spm_write(MFG5_PWR_CON, spm_read(MFG5_PWR_CON) & ~PWR_ON_2ND);
  852. #ifndef IGNORE_MTCMOS_CHECK
  853. /* TINFO="Wait until PWR_STATUS = 0 and PWR_STATUS_2ND = 0" */
  854. while ((spm_read(PWR_STATUS) & MFG5_PWR_STA_MASK)
  855. || (spm_read(PWR_STATUS_2ND) & MFG5_PWR_STA_MASK)) {
  856. /* No logic between pwr_on and pwr_ack. Print SRAM / MTCMOS control and PWR_ACK for debug. */
  857. }
  858. #endif
  859. /* TINFO="Finish to turn off MFG5" */
  860. } else { /* STA_POWER_ON */
  861. /* TINFO="Start to turn on MFG5" */
  862. /* TINFO="Set PWR_ON = 1" */
  863. spm_write(MFG5_PWR_CON, spm_read(MFG5_PWR_CON) | PWR_ON);
  864. /* TINFO="Set PWR_ON_2ND = 1" */
  865. spm_write(MFG5_PWR_CON, spm_read(MFG5_PWR_CON) | PWR_ON_2ND);
  866. #ifndef IGNORE_MTCMOS_CHECK
  867. /* TINFO="Wait until PWR_STATUS = 1 and PWR_STATUS_2ND = 1" */
  868. while (((spm_read(PWR_STATUS) & MFG5_PWR_STA_MASK) != MFG5_PWR_STA_MASK)
  869. || ((spm_read(PWR_STATUS_2ND) & MFG5_PWR_STA_MASK) != MFG5_PWR_STA_MASK)) {
  870. /* No logic between pwr_on and pwr_ack. Print SRAM / MTCMOS control and PWR_ACK for debug. */
  871. }
  872. #endif
  873. /* TINFO="Set PWR_CLK_DIS = 0" */
  874. spm_write(MFG5_PWR_CON, spm_read(MFG5_PWR_CON) & ~PWR_CLK_DIS);
  875. /* TINFO="Set PWR_ISO = 0" */
  876. spm_write(MFG5_PWR_CON, spm_read(MFG5_PWR_CON) & ~PWR_ISO);
  877. /* TINFO="Set PWR_RST_B = 1" */
  878. spm_write(MFG5_PWR_CON, spm_read(MFG5_PWR_CON) | PWR_RST_B);
  879. /* TINFO="Set SRAM_PDN = 0" */
  880. spm_write(MFG5_PWR_CON, spm_read(MFG5_PWR_CON) & ~(0x1 << 8));
  881. #ifndef IGNORE_MTCMOS_CHECK
  882. /* TINFO="Wait until MFG5_SRAM_PDN_ACK_BIT0 = 0" */
  883. while (spm_read(MFG5_PWR_CON) & MFG5_SRAM_PDN_ACK_BIT0) {
  884. /* */
  885. }
  886. #endif
  887. /* TINFO="Finish to turn on MFG5" */
  888. }
  889. return err;
  890. }
  891. int spm_mtcmos_ctrl_mfg6(int state)
  892. {
  893. int err = 0;
  894. /* TINFO="enable SPM register control" */
  895. spm_write(POWERON_CONFIG_EN, (SPM_PROJECT_CODE << 16) | (0x1 << 0));
  896. if (state == STA_POWER_DOWN) {
  897. /* TINFO="Start to turn off MFG6" */
  898. /* TINFO="Set SRAM_PDN = 1" */
  899. spm_write(MFG6_PWR_CON, spm_read(MFG6_PWR_CON) | MFG6_SRAM_PDN);
  900. #ifndef IGNORE_MTCMOS_CHECK
  901. /* TINFO="Wait until MFG6_SRAM_PDN_ACK = 1" */
  902. while ((spm_read(MFG6_PWR_CON) & MFG6_SRAM_PDN_ACK) != MFG6_SRAM_PDN_ACK) {
  903. /* n/a */
  904. }
  905. #endif
  906. /* TINFO="Set PWR_ISO = 1" */
  907. spm_write(MFG6_PWR_CON, spm_read(MFG6_PWR_CON) | PWR_ISO);
  908. /* TINFO="Set PWR_CLK_DIS = 1" */
  909. spm_write(MFG6_PWR_CON, spm_read(MFG6_PWR_CON) | PWR_CLK_DIS);
  910. /* TINFO="Set PWR_RST_B = 0" */
  911. spm_write(MFG6_PWR_CON, spm_read(MFG6_PWR_CON) & ~PWR_RST_B);
  912. /* TINFO="Set PWR_ON = 0" */
  913. spm_write(MFG6_PWR_CON, spm_read(MFG6_PWR_CON) & ~PWR_ON);
  914. /* TINFO="Set PWR_ON_2ND = 0" */
  915. spm_write(MFG6_PWR_CON, spm_read(MFG6_PWR_CON) & ~PWR_ON_2ND);
  916. #ifndef IGNORE_MTCMOS_CHECK
  917. /* TINFO="Wait until PWR_STATUS = 0 and PWR_STATUS_2ND = 0" */
  918. while ((spm_read(PWR_STATUS) & MFG6_PWR_STA_MASK)
  919. || (spm_read(PWR_STATUS_2ND) & MFG6_PWR_STA_MASK)) {
  920. /* No logic between pwr_on and pwr_ack. Print SRAM / MTCMOS control and PWR_ACK for debug. */
  921. }
  922. #endif
  923. /* TINFO="Finish to turn off MFG6" */
  924. } else { /* STA_POWER_ON */
  925. /* TINFO="Start to turn on MFG6" */
  926. /* TINFO="Set PWR_ON = 1" */
  927. spm_write(MFG6_PWR_CON, spm_read(MFG6_PWR_CON) | PWR_ON);
  928. /* TINFO="Set PWR_ON_2ND = 1" */
  929. spm_write(MFG6_PWR_CON, spm_read(MFG6_PWR_CON) | PWR_ON_2ND);
  930. #ifndef IGNORE_MTCMOS_CHECK
  931. /* TINFO="Wait until PWR_STATUS = 1 and PWR_STATUS_2ND = 1" */
  932. while (((spm_read(PWR_STATUS) & MFG6_PWR_STA_MASK) != MFG6_PWR_STA_MASK)
  933. || ((spm_read(PWR_STATUS_2ND) & MFG6_PWR_STA_MASK) != MFG6_PWR_STA_MASK)) {
  934. /* No logic between pwr_on and pwr_ack. Print SRAM / MTCMOS control and PWR_ACK for debug. */
  935. }
  936. #endif
  937. /* TINFO="Set PWR_CLK_DIS = 0" */
  938. spm_write(MFG6_PWR_CON, spm_read(MFG6_PWR_CON) & ~PWR_CLK_DIS);
  939. /* TINFO="Set PWR_ISO = 0" */
  940. spm_write(MFG6_PWR_CON, spm_read(MFG6_PWR_CON) & ~PWR_ISO);
  941. /* TINFO="Set PWR_RST_B = 1" */
  942. spm_write(MFG6_PWR_CON, spm_read(MFG6_PWR_CON) | PWR_RST_B);
  943. /* TINFO="Set SRAM_PDN = 0" */
  944. spm_write(MFG6_PWR_CON, spm_read(MFG6_PWR_CON) & ~(0x1 << 8));
  945. #ifndef IGNORE_MTCMOS_CHECK
  946. /* TINFO="Wait until MFG6_SRAM_PDN_ACK_BIT0 = 0" */
  947. while (spm_read(MFG6_PWR_CON) & MFG6_SRAM_PDN_ACK_BIT0) {
  948. /* n/a */
  949. }
  950. #endif
  951. /* TINFO="Finish to turn on MFG6" */
  952. }
  953. return err;
  954. }