cputable.c 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208
  1. /*
  2. * arch/ppc64/kernel/cputable.c
  3. *
  4. * Copyright (C) 2001 Ben. Herrenschmidt (benh@kernel.crashing.org)
  5. *
  6. * Modifications for ppc64:
  7. * Copyright (C) 2003 Dave Engebretsen <engebret@us.ibm.com>
  8. *
  9. * This program is free software; you can redistribute it and/or
  10. * modify it under the terms of the GNU General Public License
  11. * as published by the Free Software Foundation; either version
  12. * 2 of the License, or (at your option) any later version.
  13. */
  14. #include <linux/config.h>
  15. #include <linux/string.h>
  16. #include <linux/sched.h>
  17. #include <linux/threads.h>
  18. #include <linux/init.h>
  19. #include <linux/module.h>
  20. #include <asm/cputable.h>
  21. struct cpu_spec* cur_cpu_spec = NULL;
  22. EXPORT_SYMBOL(cur_cpu_spec);
  23. /* NOTE:
  24. * Unlike ppc32, ppc64 will only call this once for the boot CPU, it's
  25. * the responsibility of the appropriate CPU save/restore functions to
  26. * eventually copy these settings over. Those save/restore aren't yet
  27. * part of the cputable though. That has to be fixed for both ppc32
  28. * and ppc64
  29. */
  30. extern void __setup_cpu_power3(unsigned long offset, struct cpu_spec* spec);
  31. extern void __setup_cpu_power4(unsigned long offset, struct cpu_spec* spec);
  32. extern void __setup_cpu_ppc970(unsigned long offset, struct cpu_spec* spec);
  33. extern void __setup_cpu_be(unsigned long offset, struct cpu_spec* spec);
  34. /* We only set the altivec features if the kernel was compiled with altivec
  35. * support
  36. */
  37. #ifdef CONFIG_ALTIVEC
  38. #define CPU_FTR_ALTIVEC_COMP CPU_FTR_ALTIVEC
  39. #define PPC_FEATURE_HAS_ALTIVEC_COMP PPC_FEATURE_HAS_ALTIVEC
  40. #else
  41. #define CPU_FTR_ALTIVEC_COMP 0
  42. #define PPC_FEATURE_HAS_ALTIVEC_COMP 0
  43. #endif
  44. struct cpu_spec cpu_specs[] = {
  45. { /* Power3 */
  46. 0xffff0000, 0x00400000, "POWER3 (630)",
  47. CPU_FTR_SPLIT_ID_CACHE | CPU_FTR_USE_TB | CPU_FTR_HPTE_TABLE |
  48. CPU_FTR_IABR | CPU_FTR_PMC8,
  49. COMMON_USER_PPC64,
  50. 128, 128,
  51. __setup_cpu_power3,
  52. COMMON_PPC64_FW
  53. },
  54. { /* Power3+ */
  55. 0xffff0000, 0x00410000, "POWER3 (630+)",
  56. CPU_FTR_SPLIT_ID_CACHE | CPU_FTR_USE_TB | CPU_FTR_HPTE_TABLE |
  57. CPU_FTR_IABR | CPU_FTR_PMC8,
  58. COMMON_USER_PPC64,
  59. 128, 128,
  60. __setup_cpu_power3,
  61. COMMON_PPC64_FW
  62. },
  63. { /* Northstar */
  64. 0xffff0000, 0x00330000, "RS64-II (northstar)",
  65. CPU_FTR_SPLIT_ID_CACHE | CPU_FTR_USE_TB | CPU_FTR_HPTE_TABLE |
  66. CPU_FTR_IABR | CPU_FTR_PMC8 | CPU_FTR_MMCRA,
  67. COMMON_USER_PPC64,
  68. 128, 128,
  69. __setup_cpu_power3,
  70. COMMON_PPC64_FW
  71. },
  72. { /* Pulsar */
  73. 0xffff0000, 0x00340000, "RS64-III (pulsar)",
  74. CPU_FTR_SPLIT_ID_CACHE | CPU_FTR_USE_TB | CPU_FTR_HPTE_TABLE |
  75. CPU_FTR_IABR | CPU_FTR_PMC8 | CPU_FTR_MMCRA,
  76. COMMON_USER_PPC64,
  77. 128, 128,
  78. __setup_cpu_power3,
  79. COMMON_PPC64_FW
  80. },
  81. { /* I-star */
  82. 0xffff0000, 0x00360000, "RS64-III (icestar)",
  83. CPU_FTR_SPLIT_ID_CACHE | CPU_FTR_USE_TB | CPU_FTR_HPTE_TABLE |
  84. CPU_FTR_IABR | CPU_FTR_PMC8 | CPU_FTR_MMCRA,
  85. COMMON_USER_PPC64,
  86. 128, 128,
  87. __setup_cpu_power3,
  88. COMMON_PPC64_FW
  89. },
  90. { /* S-star */
  91. 0xffff0000, 0x00370000, "RS64-IV (sstar)",
  92. CPU_FTR_SPLIT_ID_CACHE | CPU_FTR_USE_TB | CPU_FTR_HPTE_TABLE |
  93. CPU_FTR_IABR | CPU_FTR_PMC8 | CPU_FTR_MMCRA,
  94. COMMON_USER_PPC64,
  95. 128, 128,
  96. __setup_cpu_power3,
  97. COMMON_PPC64_FW
  98. },
  99. { /* Power4 */
  100. 0xffff0000, 0x00350000, "POWER4 (gp)",
  101. CPU_FTR_SPLIT_ID_CACHE | CPU_FTR_USE_TB | CPU_FTR_HPTE_TABLE |
  102. CPU_FTR_PPCAS_ARCH_V2 | CPU_FTR_PMC8 | CPU_FTR_MMCRA,
  103. COMMON_USER_PPC64,
  104. 128, 128,
  105. __setup_cpu_power4,
  106. COMMON_PPC64_FW
  107. },
  108. { /* Power4+ */
  109. 0xffff0000, 0x00380000, "POWER4+ (gq)",
  110. CPU_FTR_SPLIT_ID_CACHE | CPU_FTR_USE_TB | CPU_FTR_HPTE_TABLE |
  111. CPU_FTR_PPCAS_ARCH_V2 | CPU_FTR_PMC8 | CPU_FTR_MMCRA,
  112. COMMON_USER_PPC64,
  113. 128, 128,
  114. __setup_cpu_power4,
  115. COMMON_PPC64_FW
  116. },
  117. { /* PPC970 */
  118. 0xffff0000, 0x00390000, "PPC970",
  119. CPU_FTR_SPLIT_ID_CACHE | CPU_FTR_USE_TB | CPU_FTR_HPTE_TABLE |
  120. CPU_FTR_PPCAS_ARCH_V2 | CPU_FTR_ALTIVEC_COMP |
  121. CPU_FTR_CAN_NAP | CPU_FTR_PMC8 | CPU_FTR_MMCRA,
  122. COMMON_USER_PPC64 | PPC_FEATURE_HAS_ALTIVEC_COMP,
  123. 128, 128,
  124. __setup_cpu_ppc970,
  125. COMMON_PPC64_FW
  126. },
  127. { /* PPC970FX */
  128. 0xffff0000, 0x003c0000, "PPC970FX",
  129. CPU_FTR_SPLIT_ID_CACHE | CPU_FTR_USE_TB | CPU_FTR_HPTE_TABLE |
  130. CPU_FTR_PPCAS_ARCH_V2 | CPU_FTR_ALTIVEC_COMP |
  131. CPU_FTR_CAN_NAP | CPU_FTR_PMC8 | CPU_FTR_MMCRA,
  132. COMMON_USER_PPC64 | PPC_FEATURE_HAS_ALTIVEC_COMP,
  133. 128, 128,
  134. __setup_cpu_ppc970,
  135. COMMON_PPC64_FW
  136. },
  137. { /* Power5 */
  138. 0xffff0000, 0x003a0000, "POWER5 (gr)",
  139. CPU_FTR_SPLIT_ID_CACHE | CPU_FTR_USE_TB | CPU_FTR_HPTE_TABLE |
  140. CPU_FTR_PPCAS_ARCH_V2 | CPU_FTR_MMCRA | CPU_FTR_SMT |
  141. CPU_FTR_COHERENT_ICACHE | CPU_FTR_LOCKLESS_TLBIE |
  142. CPU_FTR_MMCRA_SIHV,
  143. COMMON_USER_PPC64,
  144. 128, 128,
  145. __setup_cpu_power4,
  146. COMMON_PPC64_FW
  147. },
  148. { /* Power5 */
  149. 0xffff0000, 0x003b0000, "POWER5 (gs)",
  150. CPU_FTR_SPLIT_ID_CACHE | CPU_FTR_USE_TB | CPU_FTR_HPTE_TABLE |
  151. CPU_FTR_PPCAS_ARCH_V2 | CPU_FTR_MMCRA | CPU_FTR_SMT |
  152. CPU_FTR_COHERENT_ICACHE | CPU_FTR_LOCKLESS_TLBIE |
  153. CPU_FTR_MMCRA_SIHV,
  154. COMMON_USER_PPC64,
  155. 128, 128,
  156. __setup_cpu_power4,
  157. COMMON_PPC64_FW
  158. },
  159. { /* BE DD1.x */
  160. 0xffff0000, 0x00700000, "Broadband Engine",
  161. CPU_FTR_SPLIT_ID_CACHE | CPU_FTR_USE_TB | CPU_FTR_HPTE_TABLE |
  162. CPU_FTR_PPCAS_ARCH_V2 | CPU_FTR_ALTIVEC_COMP |
  163. CPU_FTR_SMT,
  164. COMMON_USER_PPC64 | PPC_FEATURE_HAS_ALTIVEC_COMP,
  165. 128, 128,
  166. __setup_cpu_be,
  167. COMMON_PPC64_FW
  168. },
  169. { /* default match */
  170. 0x00000000, 0x00000000, "POWER4 (compatible)",
  171. CPU_FTR_SPLIT_ID_CACHE | CPU_FTR_USE_TB | CPU_FTR_HPTE_TABLE |
  172. CPU_FTR_PPCAS_ARCH_V2,
  173. COMMON_USER_PPC64,
  174. 128, 128,
  175. __setup_cpu_power4,
  176. COMMON_PPC64_FW
  177. }
  178. };
  179. firmware_feature_t firmware_features_table[FIRMWARE_MAX_FEATURES] = {
  180. {FW_FEATURE_PFT, "hcall-pft"},
  181. {FW_FEATURE_TCE, "hcall-tce"},
  182. {FW_FEATURE_SPRG0, "hcall-sprg0"},
  183. {FW_FEATURE_DABR, "hcall-dabr"},
  184. {FW_FEATURE_COPY, "hcall-copy"},
  185. {FW_FEATURE_ASR, "hcall-asr"},
  186. {FW_FEATURE_DEBUG, "hcall-debug"},
  187. {FW_FEATURE_PERF, "hcall-perf"},
  188. {FW_FEATURE_DUMP, "hcall-dump"},
  189. {FW_FEATURE_INTERRUPT, "hcall-interrupt"},
  190. {FW_FEATURE_MIGRATE, "hcall-migrate"},
  191. {FW_FEATURE_PERFMON, "hcall-perfmon"},
  192. {FW_FEATURE_CRQ, "hcall-crq"},
  193. {FW_FEATURE_VIO, "hcall-vio"},
  194. {FW_FEATURE_RDMA, "hcall-rdma"},
  195. {FW_FEATURE_LLAN, "hcall-lLAN"},
  196. {FW_FEATURE_BULK, "hcall-bulk"},
  197. {FW_FEATURE_XDABR, "hcall-xdabr"},
  198. {FW_FEATURE_MULTITCE, "hcall-multi-tce"},
  199. {FW_FEATURE_SPLPAR, "hcall-splpar"},
  200. };