cvmx-bootinfo.h 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347
  1. /***********************license start***************
  2. * Author: Cavium Networks
  3. *
  4. * Contact: support@caviumnetworks.com
  5. * This file is part of the OCTEON SDK
  6. *
  7. * Copyright (c) 2003-2008 Cavium Networks
  8. *
  9. * This file is free software; you can redistribute it and/or modify
  10. * it under the terms of the GNU General Public License, Version 2, as
  11. * published by the Free Software Foundation.
  12. *
  13. * This file is distributed in the hope that it will be useful, but
  14. * AS-IS and WITHOUT ANY WARRANTY; without even the implied warranty
  15. * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE, TITLE, or
  16. * NONINFRINGEMENT. See the GNU General Public License for more
  17. * details.
  18. *
  19. * You should have received a copy of the GNU General Public License
  20. * along with this file; if not, write to the Free Software
  21. * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
  22. * or visit http://www.gnu.org/licenses/.
  23. *
  24. * This file may also be available under a different license from Cavium.
  25. * Contact Cavium Networks for more information
  26. ***********************license end**************************************/
  27. /*
  28. * Header file containing the ABI with the bootloader.
  29. */
  30. #ifndef __CVMX_BOOTINFO_H__
  31. #define __CVMX_BOOTINFO_H__
  32. /*
  33. * Current major and minor versions of the CVMX bootinfo block that is
  34. * passed from the bootloader to the application. This is versioned
  35. * so that applications can properly handle multiple bootloader
  36. * versions.
  37. */
  38. #define CVMX_BOOTINFO_MAJ_VER 1
  39. #define CVMX_BOOTINFO_MIN_VER 3
  40. #if (CVMX_BOOTINFO_MAJ_VER == 1)
  41. #define CVMX_BOOTINFO_OCTEON_SERIAL_LEN 20
  42. /*
  43. * This structure is populated by the bootloader. For binary
  44. * compatibility the only changes that should be made are
  45. * adding members to the end of the structure, and the minor
  46. * version should be incremented at that time.
  47. * If an incompatible change is made, the major version
  48. * must be incremented, and the minor version should be reset
  49. * to 0.
  50. */
  51. struct cvmx_bootinfo {
  52. uint32_t major_version;
  53. uint32_t minor_version;
  54. uint64_t stack_top;
  55. uint64_t heap_base;
  56. uint64_t heap_end;
  57. uint64_t desc_vaddr;
  58. uint32_t exception_base_addr;
  59. uint32_t stack_size;
  60. uint32_t flags;
  61. uint32_t core_mask;
  62. /* DRAM size in megabytes */
  63. uint32_t dram_size;
  64. /* physical address of free memory descriptor block*/
  65. uint32_t phy_mem_desc_addr;
  66. /* used to pass flags from app to debugger */
  67. uint32_t debugger_flags_base_addr;
  68. /* CPU clock speed, in hz */
  69. uint32_t eclock_hz;
  70. /* DRAM clock speed, in hz */
  71. uint32_t dclock_hz;
  72. uint32_t reserved0;
  73. uint16_t board_type;
  74. uint8_t board_rev_major;
  75. uint8_t board_rev_minor;
  76. uint16_t reserved1;
  77. uint8_t reserved2;
  78. uint8_t reserved3;
  79. char board_serial_number[CVMX_BOOTINFO_OCTEON_SERIAL_LEN];
  80. uint8_t mac_addr_base[6];
  81. uint8_t mac_addr_count;
  82. #if (CVMX_BOOTINFO_MIN_VER >= 1)
  83. /*
  84. * Several boards support compact flash on the Octeon boot
  85. * bus. The CF memory spaces may be mapped to different
  86. * addresses on different boards. These are the physical
  87. * addresses, so care must be taken to use the correct
  88. * XKPHYS/KSEG0 addressing depending on the application's
  89. * ABI. These values will be 0 if CF is not present.
  90. */
  91. uint64_t compact_flash_common_base_addr;
  92. uint64_t compact_flash_attribute_base_addr;
  93. /*
  94. * Base address of the LED display (as on EBT3000 board)
  95. * This will be 0 if LED display not present.
  96. */
  97. uint64_t led_display_base_addr;
  98. #endif
  99. #if (CVMX_BOOTINFO_MIN_VER >= 2)
  100. /* DFA reference clock in hz (if applicable)*/
  101. uint32_t dfa_ref_clock_hz;
  102. /*
  103. * flags indicating various configuration options. These
  104. * flags supercede the 'flags' variable and should be used
  105. * instead if available.
  106. */
  107. uint32_t config_flags;
  108. #endif
  109. #if (CVMX_BOOTINFO_MIN_VER >= 3)
  110. /*
  111. * Address of the OF Flattened Device Tree structure
  112. * describing the board.
  113. */
  114. uint64_t fdt_addr;
  115. #endif
  116. };
  117. #define CVMX_BOOTINFO_CFG_FLAG_PCI_HOST (1ull << 0)
  118. #define CVMX_BOOTINFO_CFG_FLAG_PCI_TARGET (1ull << 1)
  119. #define CVMX_BOOTINFO_CFG_FLAG_DEBUG (1ull << 2)
  120. #define CVMX_BOOTINFO_CFG_FLAG_NO_MAGIC (1ull << 3)
  121. /* This flag is set if the TLB mappings are not contained in the
  122. * 0x10000000 - 0x20000000 boot bus region. */
  123. #define CVMX_BOOTINFO_CFG_FLAG_OVERSIZE_TLB_MAPPING (1ull << 4)
  124. #define CVMX_BOOTINFO_CFG_FLAG_BREAK (1ull << 5)
  125. #endif /* (CVMX_BOOTINFO_MAJ_VER == 1) */
  126. /* Type defines for board and chip types */
  127. enum cvmx_board_types_enum {
  128. CVMX_BOARD_TYPE_NULL = 0,
  129. CVMX_BOARD_TYPE_SIM = 1,
  130. CVMX_BOARD_TYPE_EBT3000 = 2,
  131. CVMX_BOARD_TYPE_KODAMA = 3,
  132. CVMX_BOARD_TYPE_NIAGARA = 4,
  133. CVMX_BOARD_TYPE_NAC38 = 5, /* formerly NAO38 */
  134. CVMX_BOARD_TYPE_THUNDER = 6,
  135. CVMX_BOARD_TYPE_TRANTOR = 7,
  136. CVMX_BOARD_TYPE_EBH3000 = 8,
  137. CVMX_BOARD_TYPE_EBH3100 = 9,
  138. CVMX_BOARD_TYPE_HIKARI = 10,
  139. CVMX_BOARD_TYPE_CN3010_EVB_HS5 = 11,
  140. CVMX_BOARD_TYPE_CN3005_EVB_HS5 = 12,
  141. CVMX_BOARD_TYPE_KBP = 13,
  142. /* Deprecated, CVMX_BOARD_TYPE_CN3010_EVB_HS5 supports the CN3020 */
  143. CVMX_BOARD_TYPE_CN3020_EVB_HS5 = 14,
  144. CVMX_BOARD_TYPE_EBT5800 = 15,
  145. CVMX_BOARD_TYPE_NICPRO2 = 16,
  146. CVMX_BOARD_TYPE_EBH5600 = 17,
  147. CVMX_BOARD_TYPE_EBH5601 = 18,
  148. CVMX_BOARD_TYPE_EBH5200 = 19,
  149. CVMX_BOARD_TYPE_BBGW_REF = 20,
  150. CVMX_BOARD_TYPE_NIC_XLE_4G = 21,
  151. CVMX_BOARD_TYPE_EBT5600 = 22,
  152. CVMX_BOARD_TYPE_EBH5201 = 23,
  153. CVMX_BOARD_TYPE_EBT5200 = 24,
  154. CVMX_BOARD_TYPE_CB5600 = 25,
  155. CVMX_BOARD_TYPE_CB5601 = 26,
  156. CVMX_BOARD_TYPE_CB5200 = 27,
  157. /* Special 'generic' board type, supports many boards */
  158. CVMX_BOARD_TYPE_GENERIC = 28,
  159. CVMX_BOARD_TYPE_EBH5610 = 29,
  160. CVMX_BOARD_TYPE_LANAI2_A = 30,
  161. CVMX_BOARD_TYPE_LANAI2_U = 31,
  162. CVMX_BOARD_TYPE_EBB5600 = 32,
  163. CVMX_BOARD_TYPE_EBB6300 = 33,
  164. CVMX_BOARD_TYPE_NIC_XLE_10G = 34,
  165. CVMX_BOARD_TYPE_LANAI2_G = 35,
  166. CVMX_BOARD_TYPE_EBT5810 = 36,
  167. CVMX_BOARD_TYPE_NIC10E = 37,
  168. CVMX_BOARD_TYPE_EP6300C = 38,
  169. CVMX_BOARD_TYPE_EBB6800 = 39,
  170. CVMX_BOARD_TYPE_NIC4E = 40,
  171. CVMX_BOARD_TYPE_NIC2E = 41,
  172. CVMX_BOARD_TYPE_EBB6600 = 42,
  173. CVMX_BOARD_TYPE_REDWING = 43,
  174. CVMX_BOARD_TYPE_NIC68_4 = 44,
  175. CVMX_BOARD_TYPE_NIC10E_66 = 45,
  176. CVMX_BOARD_TYPE_MAX,
  177. /*
  178. * The range from CVMX_BOARD_TYPE_MAX to
  179. * CVMX_BOARD_TYPE_CUST_DEFINED_MIN is reserved for future
  180. * SDK use.
  181. */
  182. /*
  183. * Set aside a range for customer boards. These numbers are managed
  184. * by Cavium.
  185. */
  186. CVMX_BOARD_TYPE_CUST_DEFINED_MIN = 10000,
  187. CVMX_BOARD_TYPE_CUST_WSX16 = 10001,
  188. CVMX_BOARD_TYPE_CUST_NS0216 = 10002,
  189. CVMX_BOARD_TYPE_CUST_NB5 = 10003,
  190. CVMX_BOARD_TYPE_CUST_WMR500 = 10004,
  191. CVMX_BOARD_TYPE_CUST_ITB101 = 10005,
  192. CVMX_BOARD_TYPE_CUST_NTE102 = 10006,
  193. CVMX_BOARD_TYPE_CUST_AGS103 = 10007,
  194. CVMX_BOARD_TYPE_CUST_GST104 = 10008,
  195. CVMX_BOARD_TYPE_CUST_GCT105 = 10009,
  196. CVMX_BOARD_TYPE_CUST_AGS106 = 10010,
  197. CVMX_BOARD_TYPE_CUST_SGM107 = 10011,
  198. CVMX_BOARD_TYPE_CUST_GCT108 = 10012,
  199. CVMX_BOARD_TYPE_CUST_AGS109 = 10013,
  200. CVMX_BOARD_TYPE_CUST_GCT110 = 10014,
  201. CVMX_BOARD_TYPE_CUST_L2_AIR_SENDER = 10015,
  202. CVMX_BOARD_TYPE_CUST_L2_AIR_RECEIVER = 10016,
  203. CVMX_BOARD_TYPE_CUST_L2_ACCTON2_TX = 10017,
  204. CVMX_BOARD_TYPE_CUST_L2_ACCTON2_RX = 10018,
  205. CVMX_BOARD_TYPE_CUST_L2_WSTRNSNIC_TX = 10019,
  206. CVMX_BOARD_TYPE_CUST_L2_WSTRNSNIC_RX = 10020,
  207. CVMX_BOARD_TYPE_CUST_L2_ZINWELL = 10021,
  208. CVMX_BOARD_TYPE_CUST_DEFINED_MAX = 20000,
  209. /*
  210. * Set aside a range for customer private use. The SDK won't
  211. * use any numbers in this range.
  212. */
  213. CVMX_BOARD_TYPE_CUST_PRIVATE_MIN = 20001,
  214. CVMX_BOARD_TYPE_CUST_PRIVATE_MAX = 30000,
  215. /* The remaining range is reserved for future use. */
  216. };
  217. enum cvmx_chip_types_enum {
  218. CVMX_CHIP_TYPE_NULL = 0,
  219. CVMX_CHIP_SIM_TYPE_DEPRECATED = 1,
  220. CVMX_CHIP_TYPE_OCTEON_SAMPLE = 2,
  221. CVMX_CHIP_TYPE_MAX,
  222. };
  223. /* Compatibility alias for NAC38 name change, planned to be removed
  224. * from SDK 1.7 */
  225. #define CVMX_BOARD_TYPE_NAO38 CVMX_BOARD_TYPE_NAC38
  226. /* Functions to return string based on type */
  227. #define ENUM_BRD_TYPE_CASE(x) \
  228. case x: return(#x + 16); /* Skip CVMX_BOARD_TYPE_ */
  229. static inline const char *cvmx_board_type_to_string(enum
  230. cvmx_board_types_enum type)
  231. {
  232. switch (type) {
  233. ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_NULL)
  234. ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_SIM)
  235. ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_EBT3000)
  236. ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_KODAMA)
  237. ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_NIAGARA)
  238. ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_NAC38)
  239. ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_THUNDER)
  240. ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_TRANTOR)
  241. ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_EBH3000)
  242. ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_EBH3100)
  243. ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_HIKARI)
  244. ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CN3010_EVB_HS5)
  245. ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CN3005_EVB_HS5)
  246. ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_KBP)
  247. ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CN3020_EVB_HS5)
  248. ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_EBT5800)
  249. ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_NICPRO2)
  250. ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_EBH5600)
  251. ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_EBH5601)
  252. ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_EBH5200)
  253. ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_BBGW_REF)
  254. ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_NIC_XLE_4G)
  255. ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_EBT5600)
  256. ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_EBH5201)
  257. ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_EBT5200)
  258. ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CB5600)
  259. ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CB5601)
  260. ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CB5200)
  261. ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_GENERIC)
  262. ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_EBH5610)
  263. ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_LANAI2_A)
  264. ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_LANAI2_U)
  265. ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_EBB5600)
  266. ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_EBB6300)
  267. ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_NIC_XLE_10G)
  268. ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_LANAI2_G)
  269. ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_EBT5810)
  270. ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_NIC10E)
  271. ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_EP6300C)
  272. ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_EBB6800)
  273. ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_NIC4E)
  274. ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_NIC2E)
  275. ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_EBB6600)
  276. ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_REDWING)
  277. ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_NIC68_4)
  278. ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_NIC10E_66)
  279. ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_MAX)
  280. /* Customer boards listed here */
  281. ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_DEFINED_MIN)
  282. ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_WSX16)
  283. ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_NS0216)
  284. ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_NB5)
  285. ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_WMR500)
  286. ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_ITB101)
  287. ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_NTE102)
  288. ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_AGS103)
  289. ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_GST104)
  290. ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_GCT105)
  291. ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_AGS106)
  292. ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_SGM107)
  293. ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_GCT108)
  294. ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_AGS109)
  295. ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_GCT110)
  296. ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_L2_AIR_SENDER)
  297. ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_L2_AIR_RECEIVER)
  298. ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_L2_ACCTON2_TX)
  299. ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_L2_ACCTON2_RX)
  300. ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_L2_WSTRNSNIC_TX)
  301. ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_L2_WSTRNSNIC_RX)
  302. ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_L2_ZINWELL)
  303. ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_DEFINED_MAX)
  304. /* Customer private range */
  305. ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_PRIVATE_MIN)
  306. ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_PRIVATE_MAX)
  307. }
  308. return "Unsupported Board";
  309. }
  310. #define ENUM_CHIP_TYPE_CASE(x) \
  311. case x: return(#x + 15); /* Skip CVMX_CHIP_TYPE */
  312. static inline const char *cvmx_chip_type_to_string(enum
  313. cvmx_chip_types_enum type)
  314. {
  315. switch (type) {
  316. ENUM_CHIP_TYPE_CASE(CVMX_CHIP_TYPE_NULL)
  317. ENUM_CHIP_TYPE_CASE(CVMX_CHIP_SIM_TYPE_DEPRECATED)
  318. ENUM_CHIP_TYPE_CASE(CVMX_CHIP_TYPE_OCTEON_SAMPLE)
  319. ENUM_CHIP_TYPE_CASE(CVMX_CHIP_TYPE_MAX)
  320. }
  321. return "Unsupported Chip";
  322. }
  323. #endif /* __CVMX_BOOTINFO_H__ */