cputable.c 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197
  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. /* We only set the altivec features if the kernel was compiled with altivec
  34. * support
  35. */
  36. #ifdef CONFIG_ALTIVEC
  37. #define CPU_FTR_ALTIVEC_COMP CPU_FTR_ALTIVEC
  38. #define PPC_FEATURE_HAS_ALTIVEC_COMP PPC_FEATURE_HAS_ALTIVEC
  39. #else
  40. #define CPU_FTR_ALTIVEC_COMP 0
  41. #define PPC_FEATURE_HAS_ALTIVEC_COMP 0
  42. #endif
  43. struct cpu_spec cpu_specs[] = {
  44. { /* Power3 */
  45. 0xffff0000, 0x00400000, "POWER3 (630)",
  46. CPU_FTR_SPLIT_ID_CACHE | CPU_FTR_USE_TB | CPU_FTR_HPTE_TABLE |
  47. CPU_FTR_IABR | CPU_FTR_PMC8,
  48. COMMON_USER_PPC64,
  49. 128, 128,
  50. __setup_cpu_power3,
  51. COMMON_PPC64_FW
  52. },
  53. { /* Power3+ */
  54. 0xffff0000, 0x00410000, "POWER3 (630+)",
  55. CPU_FTR_SPLIT_ID_CACHE | CPU_FTR_USE_TB | CPU_FTR_HPTE_TABLE |
  56. CPU_FTR_IABR | CPU_FTR_PMC8,
  57. COMMON_USER_PPC64,
  58. 128, 128,
  59. __setup_cpu_power3,
  60. COMMON_PPC64_FW
  61. },
  62. { /* Northstar */
  63. 0xffff0000, 0x00330000, "RS64-II (northstar)",
  64. CPU_FTR_SPLIT_ID_CACHE | CPU_FTR_USE_TB | CPU_FTR_HPTE_TABLE |
  65. CPU_FTR_IABR | CPU_FTR_PMC8 | CPU_FTR_MMCRA,
  66. COMMON_USER_PPC64,
  67. 128, 128,
  68. __setup_cpu_power3,
  69. COMMON_PPC64_FW
  70. },
  71. { /* Pulsar */
  72. 0xffff0000, 0x00340000, "RS64-III (pulsar)",
  73. CPU_FTR_SPLIT_ID_CACHE | CPU_FTR_USE_TB | CPU_FTR_HPTE_TABLE |
  74. CPU_FTR_IABR | CPU_FTR_PMC8 | CPU_FTR_MMCRA,
  75. COMMON_USER_PPC64,
  76. 128, 128,
  77. __setup_cpu_power3,
  78. COMMON_PPC64_FW
  79. },
  80. { /* I-star */
  81. 0xffff0000, 0x00360000, "RS64-III (icestar)",
  82. CPU_FTR_SPLIT_ID_CACHE | CPU_FTR_USE_TB | CPU_FTR_HPTE_TABLE |
  83. CPU_FTR_IABR | CPU_FTR_PMC8 | CPU_FTR_MMCRA,
  84. COMMON_USER_PPC64,
  85. 128, 128,
  86. __setup_cpu_power3,
  87. COMMON_PPC64_FW
  88. },
  89. { /* S-star */
  90. 0xffff0000, 0x00370000, "RS64-IV (sstar)",
  91. CPU_FTR_SPLIT_ID_CACHE | CPU_FTR_USE_TB | CPU_FTR_HPTE_TABLE |
  92. CPU_FTR_IABR | CPU_FTR_PMC8 | CPU_FTR_MMCRA,
  93. COMMON_USER_PPC64,
  94. 128, 128,
  95. __setup_cpu_power3,
  96. COMMON_PPC64_FW
  97. },
  98. { /* Power4 */
  99. 0xffff0000, 0x00350000, "POWER4 (gp)",
  100. CPU_FTR_SPLIT_ID_CACHE | CPU_FTR_USE_TB | CPU_FTR_HPTE_TABLE |
  101. CPU_FTR_PPCAS_ARCH_V2 | CPU_FTR_PMC8 | CPU_FTR_MMCRA,
  102. COMMON_USER_PPC64,
  103. 128, 128,
  104. __setup_cpu_power4,
  105. COMMON_PPC64_FW
  106. },
  107. { /* Power4+ */
  108. 0xffff0000, 0x00380000, "POWER4+ (gq)",
  109. CPU_FTR_SPLIT_ID_CACHE | CPU_FTR_USE_TB | CPU_FTR_HPTE_TABLE |
  110. CPU_FTR_PPCAS_ARCH_V2 | CPU_FTR_PMC8 | CPU_FTR_MMCRA,
  111. COMMON_USER_PPC64,
  112. 128, 128,
  113. __setup_cpu_power4,
  114. COMMON_PPC64_FW
  115. },
  116. { /* PPC970 */
  117. 0xffff0000, 0x00390000, "PPC970",
  118. CPU_FTR_SPLIT_ID_CACHE | CPU_FTR_USE_TB | CPU_FTR_HPTE_TABLE |
  119. CPU_FTR_PPCAS_ARCH_V2 | CPU_FTR_ALTIVEC_COMP |
  120. CPU_FTR_CAN_NAP | CPU_FTR_PMC8 | CPU_FTR_MMCRA,
  121. COMMON_USER_PPC64 | PPC_FEATURE_HAS_ALTIVEC_COMP,
  122. 128, 128,
  123. __setup_cpu_ppc970,
  124. COMMON_PPC64_FW
  125. },
  126. { /* PPC970FX */
  127. 0xffff0000, 0x003c0000, "PPC970FX",
  128. CPU_FTR_SPLIT_ID_CACHE | CPU_FTR_USE_TB | CPU_FTR_HPTE_TABLE |
  129. CPU_FTR_PPCAS_ARCH_V2 | CPU_FTR_ALTIVEC_COMP |
  130. CPU_FTR_CAN_NAP | CPU_FTR_PMC8 | CPU_FTR_MMCRA,
  131. COMMON_USER_PPC64 | PPC_FEATURE_HAS_ALTIVEC_COMP,
  132. 128, 128,
  133. __setup_cpu_ppc970,
  134. COMMON_PPC64_FW
  135. },
  136. { /* Power5 */
  137. 0xffff0000, 0x003a0000, "POWER5 (gr)",
  138. CPU_FTR_SPLIT_ID_CACHE | CPU_FTR_USE_TB | CPU_FTR_HPTE_TABLE |
  139. CPU_FTR_PPCAS_ARCH_V2 | CPU_FTR_MMCRA | CPU_FTR_SMT |
  140. CPU_FTR_COHERENT_ICACHE | CPU_FTR_LOCKLESS_TLBIE |
  141. CPU_FTR_MMCRA_SIHV,
  142. COMMON_USER_PPC64,
  143. 128, 128,
  144. __setup_cpu_power4,
  145. COMMON_PPC64_FW
  146. },
  147. { /* Power5 */
  148. 0xffff0000, 0x003b0000, "POWER5 (gs)",
  149. CPU_FTR_SPLIT_ID_CACHE | CPU_FTR_USE_TB | CPU_FTR_HPTE_TABLE |
  150. CPU_FTR_PPCAS_ARCH_V2 | CPU_FTR_MMCRA | CPU_FTR_SMT |
  151. CPU_FTR_COHERENT_ICACHE | CPU_FTR_LOCKLESS_TLBIE |
  152. CPU_FTR_MMCRA_SIHV,
  153. COMMON_USER_PPC64,
  154. 128, 128,
  155. __setup_cpu_power4,
  156. COMMON_PPC64_FW
  157. },
  158. { /* default match */
  159. 0x00000000, 0x00000000, "POWER4 (compatible)",
  160. CPU_FTR_SPLIT_ID_CACHE | CPU_FTR_USE_TB | CPU_FTR_HPTE_TABLE |
  161. CPU_FTR_PPCAS_ARCH_V2,
  162. COMMON_USER_PPC64,
  163. 128, 128,
  164. __setup_cpu_power4,
  165. COMMON_PPC64_FW
  166. }
  167. };
  168. firmware_feature_t firmware_features_table[FIRMWARE_MAX_FEATURES] = {
  169. {FW_FEATURE_PFT, "hcall-pft"},
  170. {FW_FEATURE_TCE, "hcall-tce"},
  171. {FW_FEATURE_SPRG0, "hcall-sprg0"},
  172. {FW_FEATURE_DABR, "hcall-dabr"},
  173. {FW_FEATURE_COPY, "hcall-copy"},
  174. {FW_FEATURE_ASR, "hcall-asr"},
  175. {FW_FEATURE_DEBUG, "hcall-debug"},
  176. {FW_FEATURE_PERF, "hcall-perf"},
  177. {FW_FEATURE_DUMP, "hcall-dump"},
  178. {FW_FEATURE_INTERRUPT, "hcall-interrupt"},
  179. {FW_FEATURE_MIGRATE, "hcall-migrate"},
  180. {FW_FEATURE_PERFMON, "hcall-perfmon"},
  181. {FW_FEATURE_CRQ, "hcall-crq"},
  182. {FW_FEATURE_VIO, "hcall-vio"},
  183. {FW_FEATURE_RDMA, "hcall-rdma"},
  184. {FW_FEATURE_LLAN, "hcall-lLAN"},
  185. {FW_FEATURE_BULK, "hcall-bulk"},
  186. {FW_FEATURE_XDABR, "hcall-xdabr"},
  187. {FW_FEATURE_MULTITCE, "hcall-multi-tce"},
  188. {FW_FEATURE_SPLPAR, "hcall-splpar"},
  189. };