proc.c 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500
  1. // SPDX-License-Identifier: GPL-2.0-only
  2. /*
  3. * This file defines C prototypes for the low-level processor assembly functions
  4. * and creates a reference for CFI. This needs to be done for every assembly
  5. * processor ("proc") function that is called from C but does not have a
  6. * corresponding C implementation.
  7. *
  8. * Processors are listed in the order they appear in the Makefile.
  9. *
  10. * Functions are listed if and only if they see use on the target CPU, and in
  11. * the order they are defined in struct processor.
  12. */
  13. #include <asm/proc-fns.h>
  14. #ifdef CONFIG_CPU_ARM7TDMI
  15. void cpu_arm7tdmi_proc_init(void);
  16. __ADDRESSABLE(cpu_arm7tdmi_proc_init);
  17. void cpu_arm7tdmi_proc_fin(void);
  18. __ADDRESSABLE(cpu_arm7tdmi_proc_fin);
  19. void cpu_arm7tdmi_reset(unsigned long addr, bool hvc);
  20. __ADDRESSABLE(cpu_arm7tdmi_reset);
  21. int cpu_arm7tdmi_do_idle(void);
  22. __ADDRESSABLE(cpu_arm7tdmi_do_idle);
  23. void cpu_arm7tdmi_dcache_clean_area(void *addr, int size);
  24. __ADDRESSABLE(cpu_arm7tdmi_dcache_clean_area);
  25. void cpu_arm7tdmi_switch_mm(phys_addr_t pgd_phys, struct mm_struct *mm);
  26. __ADDRESSABLE(cpu_arm7tdmi_switch_mm);
  27. #endif
  28. #ifdef CONFIG_CPU_ARM720T
  29. void cpu_arm720_proc_init(void);
  30. __ADDRESSABLE(cpu_arm720_proc_init);
  31. void cpu_arm720_proc_fin(void);
  32. __ADDRESSABLE(cpu_arm720_proc_fin);
  33. void cpu_arm720_reset(unsigned long addr, bool hvc);
  34. __ADDRESSABLE(cpu_arm720_reset);
  35. int cpu_arm720_do_idle(void);
  36. __ADDRESSABLE(cpu_arm720_do_idle);
  37. void cpu_arm720_dcache_clean_area(void *addr, int size);
  38. __ADDRESSABLE(cpu_arm720_dcache_clean_area);
  39. void cpu_arm720_switch_mm(phys_addr_t pgd_phys, struct mm_struct *mm);
  40. __ADDRESSABLE(cpu_arm720_switch_mm);
  41. void cpu_arm720_set_pte_ext(pte_t *ptep, pte_t pte, unsigned int ext);
  42. __ADDRESSABLE(cpu_arm720_set_pte_ext);
  43. #endif
  44. #ifdef CONFIG_CPU_ARM740T
  45. void cpu_arm740_proc_init(void);
  46. __ADDRESSABLE(cpu_arm740_proc_init);
  47. void cpu_arm740_proc_fin(void);
  48. __ADDRESSABLE(cpu_arm740_proc_fin);
  49. void cpu_arm740_reset(unsigned long addr, bool hvc);
  50. __ADDRESSABLE(cpu_arm740_reset);
  51. int cpu_arm740_do_idle(void);
  52. __ADDRESSABLE(cpu_arm740_do_idle);
  53. void cpu_arm740_dcache_clean_area(void *addr, int size);
  54. __ADDRESSABLE(cpu_arm740_dcache_clean_area);
  55. void cpu_arm740_switch_mm(phys_addr_t pgd_phys, struct mm_struct *mm);
  56. __ADDRESSABLE(cpu_arm740_switch_mm);
  57. #endif
  58. #ifdef CONFIG_CPU_ARM9TDMI
  59. void cpu_arm9tdmi_proc_init(void);
  60. __ADDRESSABLE(cpu_arm9tdmi_proc_init);
  61. void cpu_arm9tdmi_proc_fin(void);
  62. __ADDRESSABLE(cpu_arm9tdmi_proc_fin);
  63. void cpu_arm9tdmi_reset(unsigned long addr, bool hvc);
  64. __ADDRESSABLE(cpu_arm9tdmi_reset);
  65. int cpu_arm9tdmi_do_idle(void);
  66. __ADDRESSABLE(cpu_arm9tdmi_do_idle);
  67. void cpu_arm9tdmi_dcache_clean_area(void *addr, int size);
  68. __ADDRESSABLE(cpu_arm9tdmi_dcache_clean_area);
  69. void cpu_arm9tdmi_switch_mm(phys_addr_t pgd_phys, struct mm_struct *mm);
  70. __ADDRESSABLE(cpu_arm9tdmi_switch_mm);
  71. #endif
  72. #ifdef CONFIG_CPU_ARM920T
  73. void cpu_arm920_proc_init(void);
  74. __ADDRESSABLE(cpu_arm920_proc_init);
  75. void cpu_arm920_proc_fin(void);
  76. __ADDRESSABLE(cpu_arm920_proc_fin);
  77. void cpu_arm920_reset(unsigned long addr, bool hvc);
  78. __ADDRESSABLE(cpu_arm920_reset);
  79. int cpu_arm920_do_idle(void);
  80. __ADDRESSABLE(cpu_arm920_do_idle);
  81. void cpu_arm920_dcache_clean_area(void *addr, int size);
  82. __ADDRESSABLE(cpu_arm920_dcache_clean_area);
  83. void cpu_arm920_switch_mm(phys_addr_t pgd_phys, struct mm_struct *mm);
  84. __ADDRESSABLE(cpu_arm920_switch_mm);
  85. void cpu_arm920_set_pte_ext(pte_t *ptep, pte_t pte, unsigned int ext);
  86. __ADDRESSABLE(cpu_arm920_set_pte_ext);
  87. #ifdef CONFIG_ARM_CPU_SUSPEND
  88. void cpu_arm920_do_suspend(void *);
  89. __ADDRESSABLE(cpu_arm920_do_suspend);
  90. void cpu_arm920_do_resume(void *);
  91. __ADDRESSABLE(cpu_arm920_do_resume);
  92. #endif /* CONFIG_ARM_CPU_SUSPEND */
  93. #endif /* CONFIG_CPU_ARM920T */
  94. #ifdef CONFIG_CPU_ARM922T
  95. void cpu_arm922_proc_init(void);
  96. __ADDRESSABLE(cpu_arm922_proc_init);
  97. void cpu_arm922_proc_fin(void);
  98. __ADDRESSABLE(cpu_arm922_proc_fin);
  99. void cpu_arm922_reset(unsigned long addr, bool hvc);
  100. __ADDRESSABLE(cpu_arm922_reset);
  101. int cpu_arm922_do_idle(void);
  102. __ADDRESSABLE(cpu_arm922_do_idle);
  103. void cpu_arm922_dcache_clean_area(void *addr, int size);
  104. __ADDRESSABLE(cpu_arm922_dcache_clean_area);
  105. void cpu_arm922_switch_mm(phys_addr_t pgd_phys, struct mm_struct *mm);
  106. __ADDRESSABLE(cpu_arm922_switch_mm);
  107. void cpu_arm922_set_pte_ext(pte_t *ptep, pte_t pte, unsigned int ext);
  108. __ADDRESSABLE(cpu_arm922_set_pte_ext);
  109. #endif
  110. #ifdef CONFIG_CPU_ARM925T
  111. void cpu_arm925_proc_init(void);
  112. __ADDRESSABLE(cpu_arm925_proc_init);
  113. void cpu_arm925_proc_fin(void);
  114. __ADDRESSABLE(cpu_arm925_proc_fin);
  115. void cpu_arm925_reset(unsigned long addr, bool hvc);
  116. __ADDRESSABLE(cpu_arm925_reset);
  117. int cpu_arm925_do_idle(void);
  118. __ADDRESSABLE(cpu_arm925_do_idle);
  119. void cpu_arm925_dcache_clean_area(void *addr, int size);
  120. __ADDRESSABLE(cpu_arm925_dcache_clean_area);
  121. void cpu_arm925_switch_mm(phys_addr_t pgd_phys, struct mm_struct *mm);
  122. __ADDRESSABLE(cpu_arm925_switch_mm);
  123. void cpu_arm925_set_pte_ext(pte_t *ptep, pte_t pte, unsigned int ext);
  124. __ADDRESSABLE(cpu_arm925_set_pte_ext);
  125. #endif
  126. #ifdef CONFIG_CPU_ARM926T
  127. void cpu_arm926_proc_init(void);
  128. __ADDRESSABLE(cpu_arm926_proc_init);
  129. void cpu_arm926_proc_fin(void);
  130. __ADDRESSABLE(cpu_arm926_proc_fin);
  131. void cpu_arm926_reset(unsigned long addr, bool hvc);
  132. __ADDRESSABLE(cpu_arm926_reset);
  133. int cpu_arm926_do_idle(void);
  134. __ADDRESSABLE(cpu_arm926_do_idle);
  135. void cpu_arm926_dcache_clean_area(void *addr, int size);
  136. __ADDRESSABLE(cpu_arm926_dcache_clean_area);
  137. void cpu_arm926_switch_mm(phys_addr_t pgd_phys, struct mm_struct *mm);
  138. __ADDRESSABLE(cpu_arm926_switch_mm);
  139. void cpu_arm926_set_pte_ext(pte_t *ptep, pte_t pte, unsigned int ext);
  140. __ADDRESSABLE(cpu_arm926_set_pte_ext);
  141. #ifdef CONFIG_ARM_CPU_SUSPEND
  142. void cpu_arm926_do_suspend(void *);
  143. __ADDRESSABLE(cpu_arm926_do_suspend);
  144. void cpu_arm926_do_resume(void *);
  145. __ADDRESSABLE(cpu_arm926_do_resume);
  146. #endif /* CONFIG_ARM_CPU_SUSPEND */
  147. #endif /* CONFIG_CPU_ARM926T */
  148. #ifdef CONFIG_CPU_ARM940T
  149. void cpu_arm940_proc_init(void);
  150. __ADDRESSABLE(cpu_arm940_proc_init);
  151. void cpu_arm940_proc_fin(void);
  152. __ADDRESSABLE(cpu_arm940_proc_fin);
  153. void cpu_arm940_reset(unsigned long addr, bool hvc);
  154. __ADDRESSABLE(cpu_arm940_reset);
  155. int cpu_arm940_do_idle(void);
  156. __ADDRESSABLE(cpu_arm940_do_idle);
  157. void cpu_arm940_dcache_clean_area(void *addr, int size);
  158. __ADDRESSABLE(cpu_arm940_dcache_clean_area);
  159. void cpu_arm940_switch_mm(phys_addr_t pgd_phys, struct mm_struct *mm);
  160. __ADDRESSABLE(cpu_arm940_switch_mm);
  161. #endif
  162. #ifdef CONFIG_CPU_ARM946E
  163. void cpu_arm946_proc_init(void);
  164. __ADDRESSABLE(cpu_arm946_proc_init);
  165. void cpu_arm946_proc_fin(void);
  166. __ADDRESSABLE(cpu_arm946_proc_fin);
  167. void cpu_arm946_reset(unsigned long addr, bool hvc);
  168. __ADDRESSABLE(cpu_arm946_reset);
  169. int cpu_arm946_do_idle(void);
  170. __ADDRESSABLE(cpu_arm946_do_idle);
  171. void cpu_arm946_dcache_clean_area(void *addr, int size);
  172. __ADDRESSABLE(cpu_arm946_dcache_clean_area);
  173. void cpu_arm946_switch_mm(phys_addr_t pgd_phys, struct mm_struct *mm);
  174. __ADDRESSABLE(cpu_arm946_switch_mm);
  175. #endif
  176. #ifdef CONFIG_CPU_FA526
  177. void cpu_fa526_proc_init(void);
  178. __ADDRESSABLE(cpu_fa526_proc_init);
  179. void cpu_fa526_proc_fin(void);
  180. __ADDRESSABLE(cpu_fa526_proc_fin);
  181. void cpu_fa526_reset(unsigned long addr, bool hvc);
  182. __ADDRESSABLE(cpu_fa526_reset);
  183. int cpu_fa526_do_idle(void);
  184. __ADDRESSABLE(cpu_fa526_do_idle);
  185. void cpu_fa526_dcache_clean_area(void *addr, int size);
  186. __ADDRESSABLE(cpu_fa526_dcache_clean_area);
  187. void cpu_fa526_switch_mm(phys_addr_t pgd_phys, struct mm_struct *mm);
  188. __ADDRESSABLE(cpu_fa526_switch_mm);
  189. void cpu_fa526_set_pte_ext(pte_t *ptep, pte_t pte, unsigned int ext);
  190. __ADDRESSABLE(cpu_fa526_set_pte_ext);
  191. #endif
  192. #ifdef CONFIG_CPU_ARM1020
  193. void cpu_arm1020_proc_init(void);
  194. __ADDRESSABLE(cpu_arm1020_proc_init);
  195. void cpu_arm1020_proc_fin(void);
  196. __ADDRESSABLE(cpu_arm1020_proc_fin);
  197. void cpu_arm1020_reset(unsigned long addr, bool hvc);
  198. __ADDRESSABLE(cpu_arm1020_reset);
  199. int cpu_arm1020_do_idle(void);
  200. __ADDRESSABLE(cpu_arm1020_do_idle);
  201. void cpu_arm1020_dcache_clean_area(void *addr, int size);
  202. __ADDRESSABLE(cpu_arm1020_dcache_clean_area);
  203. void cpu_arm1020_switch_mm(phys_addr_t pgd_phys, struct mm_struct *mm);
  204. __ADDRESSABLE(cpu_arm1020_switch_mm);
  205. void cpu_arm1020_set_pte_ext(pte_t *ptep, pte_t pte, unsigned int ext);
  206. __ADDRESSABLE(cpu_arm1020_set_pte_ext);
  207. #endif
  208. #ifdef CONFIG_CPU_ARM1020E
  209. void cpu_arm1020e_proc_init(void);
  210. __ADDRESSABLE(cpu_arm1020e_proc_init);
  211. void cpu_arm1020e_proc_fin(void);
  212. __ADDRESSABLE(cpu_arm1020e_proc_fin);
  213. void cpu_arm1020e_reset(unsigned long addr, bool hvc);
  214. __ADDRESSABLE(cpu_arm1020e_reset);
  215. int cpu_arm1020e_do_idle(void);
  216. __ADDRESSABLE(cpu_arm1020e_do_idle);
  217. void cpu_arm1020e_dcache_clean_area(void *addr, int size);
  218. __ADDRESSABLE(cpu_arm1020e_dcache_clean_area);
  219. void cpu_arm1020e_switch_mm(phys_addr_t pgd_phys, struct mm_struct *mm);
  220. __ADDRESSABLE(cpu_arm1020e_switch_mm);
  221. void cpu_arm1020e_set_pte_ext(pte_t *ptep, pte_t pte, unsigned int ext);
  222. __ADDRESSABLE(cpu_arm1020e_set_pte_ext);
  223. #endif
  224. #ifdef CONFIG_CPU_ARM1022
  225. void cpu_arm1022_proc_init(void);
  226. __ADDRESSABLE(cpu_arm1022_proc_init);
  227. void cpu_arm1022_proc_fin(void);
  228. __ADDRESSABLE(cpu_arm1022_proc_fin);
  229. void cpu_arm1022_reset(unsigned long addr, bool hvc);
  230. __ADDRESSABLE(cpu_arm1022_reset);
  231. int cpu_arm1022_do_idle(void);
  232. __ADDRESSABLE(cpu_arm1022_do_idle);
  233. void cpu_arm1022_dcache_clean_area(void *addr, int size);
  234. __ADDRESSABLE(cpu_arm1022_dcache_clean_area);
  235. void cpu_arm1022_switch_mm(phys_addr_t pgd_phys, struct mm_struct *mm);
  236. __ADDRESSABLE(cpu_arm1022_switch_mm);
  237. void cpu_arm1022_set_pte_ext(pte_t *ptep, pte_t pte, unsigned int ext);
  238. __ADDRESSABLE(cpu_arm1022_set_pte_ext);
  239. #endif
  240. #ifdef CONFIG_CPU_ARM1026
  241. void cpu_arm1026_proc_init(void);
  242. __ADDRESSABLE(cpu_arm1026_proc_init);
  243. void cpu_arm1026_proc_fin(void);
  244. __ADDRESSABLE(cpu_arm1026_proc_fin);
  245. void cpu_arm1026_reset(unsigned long addr, bool hvc);
  246. __ADDRESSABLE(cpu_arm1026_reset);
  247. int cpu_arm1026_do_idle(void);
  248. __ADDRESSABLE(cpu_arm1026_do_idle);
  249. void cpu_arm1026_dcache_clean_area(void *addr, int size);
  250. __ADDRESSABLE(cpu_arm1026_dcache_clean_area);
  251. void cpu_arm1026_switch_mm(phys_addr_t pgd_phys, struct mm_struct *mm);
  252. __ADDRESSABLE(cpu_arm1026_switch_mm);
  253. void cpu_arm1026_set_pte_ext(pte_t *ptep, pte_t pte, unsigned int ext);
  254. __ADDRESSABLE(cpu_arm1026_set_pte_ext);
  255. #endif
  256. #ifdef CONFIG_CPU_SA110
  257. void cpu_sa110_proc_init(void);
  258. __ADDRESSABLE(cpu_sa110_proc_init);
  259. void cpu_sa110_proc_fin(void);
  260. __ADDRESSABLE(cpu_sa110_proc_fin);
  261. void cpu_sa110_reset(unsigned long addr, bool hvc);
  262. __ADDRESSABLE(cpu_sa110_reset);
  263. int cpu_sa110_do_idle(void);
  264. __ADDRESSABLE(cpu_sa110_do_idle);
  265. void cpu_sa110_dcache_clean_area(void *addr, int size);
  266. __ADDRESSABLE(cpu_sa110_dcache_clean_area);
  267. void cpu_sa110_switch_mm(phys_addr_t pgd_phys, struct mm_struct *mm);
  268. __ADDRESSABLE(cpu_sa110_switch_mm);
  269. void cpu_sa110_set_pte_ext(pte_t *ptep, pte_t pte, unsigned int ext);
  270. __ADDRESSABLE(cpu_sa110_set_pte_ext);
  271. #endif
  272. #ifdef CONFIG_CPU_SA1100
  273. void cpu_sa1100_proc_init(void);
  274. __ADDRESSABLE(cpu_sa1100_proc_init);
  275. void cpu_sa1100_proc_fin(void);
  276. __ADDRESSABLE(cpu_sa1100_proc_fin);
  277. void cpu_sa1100_reset(unsigned long addr, bool hvc);
  278. __ADDRESSABLE(cpu_sa1100_reset);
  279. int cpu_sa1100_do_idle(void);
  280. __ADDRESSABLE(cpu_sa1100_do_idle);
  281. void cpu_sa1100_dcache_clean_area(void *addr, int size);
  282. __ADDRESSABLE(cpu_sa1100_dcache_clean_area);
  283. void cpu_sa1100_switch_mm(phys_addr_t pgd_phys, struct mm_struct *mm);
  284. __ADDRESSABLE(cpu_sa1100_switch_mm);
  285. void cpu_sa1100_set_pte_ext(pte_t *ptep, pte_t pte, unsigned int ext);
  286. __ADDRESSABLE(cpu_sa1100_set_pte_ext);
  287. #ifdef CONFIG_ARM_CPU_SUSPEND
  288. void cpu_sa1100_do_suspend(void *);
  289. __ADDRESSABLE(cpu_sa1100_do_suspend);
  290. void cpu_sa1100_do_resume(void *);
  291. __ADDRESSABLE(cpu_sa1100_do_resume);
  292. #endif /* CONFIG_ARM_CPU_SUSPEND */
  293. #endif /* CONFIG_CPU_SA1100 */
  294. #ifdef CONFIG_CPU_XSCALE
  295. void cpu_xscale_proc_init(void);
  296. __ADDRESSABLE(cpu_xscale_proc_init);
  297. void cpu_xscale_proc_fin(void);
  298. __ADDRESSABLE(cpu_xscale_proc_fin);
  299. void cpu_xscale_reset(unsigned long addr, bool hvc);
  300. __ADDRESSABLE(cpu_xscale_reset);
  301. int cpu_xscale_do_idle(void);
  302. __ADDRESSABLE(cpu_xscale_do_idle);
  303. void cpu_xscale_dcache_clean_area(void *addr, int size);
  304. __ADDRESSABLE(cpu_xscale_dcache_clean_area);
  305. void cpu_xscale_switch_mm(phys_addr_t pgd_phys, struct mm_struct *mm);
  306. __ADDRESSABLE(cpu_xscale_switch_mm);
  307. void cpu_xscale_set_pte_ext(pte_t *ptep, pte_t pte, unsigned int ext);
  308. __ADDRESSABLE(cpu_xscale_set_pte_ext);
  309. #ifdef CONFIG_ARM_CPU_SUSPEND
  310. void cpu_xscale_do_suspend(void *);
  311. __ADDRESSABLE(cpu_xscale_do_suspend);
  312. void cpu_xscale_do_resume(void *);
  313. __ADDRESSABLE(cpu_xscale_do_resume);
  314. #endif /* CONFIG_ARM_CPU_SUSPEND */
  315. #endif /* CONFIG_CPU_XSCALE */
  316. #ifdef CONFIG_CPU_XSC3
  317. void cpu_xsc3_proc_init(void);
  318. __ADDRESSABLE(cpu_xsc3_proc_init);
  319. void cpu_xsc3_proc_fin(void);
  320. __ADDRESSABLE(cpu_xsc3_proc_fin);
  321. void cpu_xsc3_reset(unsigned long addr, bool hvc);
  322. __ADDRESSABLE(cpu_xsc3_reset);
  323. int cpu_xsc3_do_idle(void);
  324. __ADDRESSABLE(cpu_xsc3_do_idle);
  325. void cpu_xsc3_dcache_clean_area(void *addr, int size);
  326. __ADDRESSABLE(cpu_xsc3_dcache_clean_area);
  327. void cpu_xsc3_switch_mm(phys_addr_t pgd_phys, struct mm_struct *mm);
  328. __ADDRESSABLE(cpu_xsc3_switch_mm);
  329. void cpu_xsc3_set_pte_ext(pte_t *ptep, pte_t pte, unsigned int ext);
  330. __ADDRESSABLE(cpu_xsc3_set_pte_ext);
  331. #ifdef CONFIG_ARM_CPU_SUSPEND
  332. void cpu_xsc3_do_suspend(void *);
  333. __ADDRESSABLE(cpu_xsc3_do_suspend);
  334. void cpu_xsc3_do_resume(void *);
  335. __ADDRESSABLE(cpu_xsc3_do_resume);
  336. #endif /* CONFIG_ARM_CPU_SUSPEND */
  337. #endif /* CONFIG_CPU_XSC3 */
  338. #ifdef CONFIG_CPU_MOHAWK
  339. void cpu_mohawk_proc_init(void);
  340. __ADDRESSABLE(cpu_mohawk_proc_init);
  341. void cpu_mohawk_proc_fin(void);
  342. __ADDRESSABLE(cpu_mohawk_proc_fin);
  343. void cpu_mohawk_reset(unsigned long addr, bool hvc);
  344. __ADDRESSABLE(cpu_mohawk_reset);
  345. int cpu_mohawk_do_idle(void);
  346. __ADDRESSABLE(cpu_mohawk_do_idle);
  347. void cpu_mohawk_dcache_clean_area(void *addr, int size);
  348. __ADDRESSABLE(cpu_mohawk_dcache_clean_area);
  349. void cpu_mohawk_switch_mm(phys_addr_t pgd_phys, struct mm_struct *mm);
  350. __ADDRESSABLE(cpu_mohawk_switch_mm);
  351. void cpu_mohawk_set_pte_ext(pte_t *ptep, pte_t pte, unsigned int ext);
  352. __ADDRESSABLE(cpu_mohawk_set_pte_ext);
  353. #ifdef CONFIG_ARM_CPU_SUSPEND
  354. void cpu_mohawk_do_suspend(void *);
  355. __ADDRESSABLE(cpu_mohawk_do_suspend);
  356. void cpu_mohawk_do_resume(void *);
  357. __ADDRESSABLE(cpu_mohawk_do_resume);
  358. #endif /* CONFIG_ARM_CPU_SUSPEND */
  359. #endif /* CONFIG_CPU_MOHAWK */
  360. #ifdef CONFIG_CPU_FEROCEON
  361. void cpu_feroceon_proc_init(void);
  362. __ADDRESSABLE(cpu_feroceon_proc_init);
  363. void cpu_feroceon_proc_fin(void);
  364. __ADDRESSABLE(cpu_feroceon_proc_fin);
  365. void cpu_feroceon_reset(unsigned long addr, bool hvc);
  366. __ADDRESSABLE(cpu_feroceon_reset);
  367. int cpu_feroceon_do_idle(void);
  368. __ADDRESSABLE(cpu_feroceon_do_idle);
  369. void cpu_feroceon_dcache_clean_area(void *addr, int size);
  370. __ADDRESSABLE(cpu_feroceon_dcache_clean_area);
  371. void cpu_feroceon_switch_mm(phys_addr_t pgd_phys, struct mm_struct *mm);
  372. __ADDRESSABLE(cpu_feroceon_switch_mm);
  373. void cpu_feroceon_set_pte_ext(pte_t *ptep, pte_t pte, unsigned int ext);
  374. __ADDRESSABLE(cpu_feroceon_set_pte_ext);
  375. #ifdef CONFIG_ARM_CPU_SUSPEND
  376. void cpu_feroceon_do_suspend(void *);
  377. __ADDRESSABLE(cpu_feroceon_do_suspend);
  378. void cpu_feroceon_do_resume(void *);
  379. __ADDRESSABLE(cpu_feroceon_do_resume);
  380. #endif /* CONFIG_ARM_CPU_SUSPEND */
  381. #endif /* CONFIG_CPU_FEROCEON */
  382. #if defined(CONFIG_CPU_V6) || defined(CONFIG_CPU_V6K)
  383. void cpu_v6_proc_init(void);
  384. __ADDRESSABLE(cpu_v6_proc_init);
  385. void cpu_v6_proc_fin(void);
  386. __ADDRESSABLE(cpu_v6_proc_fin);
  387. void cpu_v6_reset(unsigned long addr, bool hvc);
  388. __ADDRESSABLE(cpu_v6_reset);
  389. int cpu_v6_do_idle(void);
  390. __ADDRESSABLE(cpu_v6_do_idle);
  391. void cpu_v6_dcache_clean_area(void *addr, int size);
  392. __ADDRESSABLE(cpu_v6_dcache_clean_area);
  393. void cpu_v6_switch_mm(phys_addr_t pgd_phys, struct mm_struct *mm);
  394. __ADDRESSABLE(cpu_v6_switch_mm);
  395. void cpu_v6_set_pte_ext(pte_t *ptep, pte_t pte, unsigned int ext);
  396. __ADDRESSABLE(cpu_v6_set_pte_ext);
  397. #ifdef CONFIG_ARM_CPU_SUSPEND
  398. void cpu_v6_do_suspend(void *);
  399. __ADDRESSABLE(cpu_v6_do_suspend);
  400. void cpu_v6_do_resume(void *);
  401. __ADDRESSABLE(cpu_v6_do_resume);
  402. #endif /* CONFIG_ARM_CPU_SUSPEND */
  403. #endif /* CPU_V6 */
  404. #ifdef CONFIG_CPU_V7
  405. void cpu_v7_proc_init(void);
  406. __ADDRESSABLE(cpu_v7_proc_init);
  407. void cpu_v7_proc_fin(void);
  408. __ADDRESSABLE(cpu_v7_proc_fin);
  409. void cpu_v7_reset(unsigned long addr, bool hvc);
  410. __ADDRESSABLE(cpu_v7_reset);
  411. int cpu_v7_do_idle(void);
  412. __ADDRESSABLE(cpu_v7_do_idle);
  413. #ifdef CONFIG_PJ4B_ERRATA_4742
  414. int cpu_pj4b_do_idle(void);
  415. __ADDRESSABLE(cpu_pj4b_do_idle);
  416. #endif
  417. void cpu_v7_dcache_clean_area(void *addr, int size);
  418. __ADDRESSABLE(cpu_v7_dcache_clean_area);
  419. void cpu_v7_switch_mm(phys_addr_t pgd_phys, struct mm_struct *mm);
  420. /* Special switch_mm() callbacks to work around bugs in v7 */
  421. __ADDRESSABLE(cpu_v7_switch_mm);
  422. void cpu_v7_iciallu_switch_mm(phys_addr_t pgd_phys, struct mm_struct *mm);
  423. __ADDRESSABLE(cpu_v7_iciallu_switch_mm);
  424. void cpu_v7_bpiall_switch_mm(phys_addr_t pgd_phys, struct mm_struct *mm);
  425. __ADDRESSABLE(cpu_v7_bpiall_switch_mm);
  426. #ifdef CONFIG_ARM_LPAE
  427. void cpu_v7_set_pte_ext(pte_t *ptep, pte_t pte);
  428. #else
  429. void cpu_v7_set_pte_ext(pte_t *ptep, pte_t pte, unsigned int ext);
  430. #endif
  431. __ADDRESSABLE(cpu_v7_set_pte_ext);
  432. #ifdef CONFIG_ARM_CPU_SUSPEND
  433. void cpu_v7_do_suspend(void *);
  434. __ADDRESSABLE(cpu_v7_do_suspend);
  435. void cpu_v7_do_resume(void *);
  436. __ADDRESSABLE(cpu_v7_do_resume);
  437. /* Special versions of suspend and resume for the CA9MP cores */
  438. void cpu_ca9mp_do_suspend(void *);
  439. __ADDRESSABLE(cpu_ca9mp_do_suspend);
  440. void cpu_ca9mp_do_resume(void *);
  441. __ADDRESSABLE(cpu_ca9mp_do_resume);
  442. /* Special versions of suspend and resume for the Marvell PJ4B cores */
  443. #ifdef CONFIG_CPU_PJ4B
  444. void cpu_pj4b_do_suspend(void *);
  445. __ADDRESSABLE(cpu_pj4b_do_suspend);
  446. void cpu_pj4b_do_resume(void *);
  447. __ADDRESSABLE(cpu_pj4b_do_resume);
  448. #endif /* CONFIG_CPU_PJ4B */
  449. #endif /* CONFIG_ARM_CPU_SUSPEND */
  450. #endif /* CONFIG_CPU_V7 */
  451. #ifdef CONFIG_CPU_V7M
  452. void cpu_v7m_proc_init(void);
  453. __ADDRESSABLE(cpu_v7m_proc_init);
  454. void cpu_v7m_proc_fin(void);
  455. __ADDRESSABLE(cpu_v7m_proc_fin);
  456. void cpu_v7m_reset(unsigned long addr, bool hvc);
  457. __ADDRESSABLE(cpu_v7m_reset);
  458. int cpu_v7m_do_idle(void);
  459. __ADDRESSABLE(cpu_v7m_do_idle);
  460. void cpu_v7m_dcache_clean_area(void *addr, int size);
  461. __ADDRESSABLE(cpu_v7m_dcache_clean_area);
  462. void cpu_v7m_switch_mm(phys_addr_t pgd_phys, struct mm_struct *mm);
  463. __ADDRESSABLE(cpu_v7m_switch_mm);
  464. void cpu_v7m_set_pte_ext(pte_t *ptep, pte_t pte, unsigned int ext);
  465. __ADDRESSABLE(cpu_v7m_set_pte_ext);
  466. #ifdef CONFIG_ARM_CPU_SUSPEND
  467. void cpu_v7m_do_suspend(void *);
  468. __ADDRESSABLE(cpu_v7m_do_suspend);
  469. void cpu_v7m_do_resume(void *);
  470. __ADDRESSABLE(cpu_v7m_do_resume);
  471. #endif /* CONFIG_ARM_CPU_SUSPEND */
  472. void cpu_cm7_proc_fin(void);
  473. __ADDRESSABLE(cpu_cm7_proc_fin);
  474. void cpu_cm7_dcache_clean_area(void *addr, int size);
  475. __ADDRESSABLE(cpu_cm7_dcache_clean_area);
  476. #endif /* CONFIG_CPU_V7M */