0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032 #ifndef __CVMX_BOOTINFO_H__
0033 #define __CVMX_BOOTINFO_H__
0034
0035 #include "cvmx-coremask.h"
0036
0037
0038
0039
0040
0041
0042
0043 #define CVMX_BOOTINFO_MAJ_VER 1
0044 #define CVMX_BOOTINFO_MIN_VER 4
0045
0046 #if (CVMX_BOOTINFO_MAJ_VER == 1)
0047 #define CVMX_BOOTINFO_OCTEON_SERIAL_LEN 20
0048
0049
0050
0051
0052
0053
0054
0055
0056
0057 struct cvmx_bootinfo {
0058 #ifdef __BIG_ENDIAN_BITFIELD
0059 uint32_t major_version;
0060 uint32_t minor_version;
0061
0062 uint64_t stack_top;
0063 uint64_t heap_base;
0064 uint64_t heap_end;
0065 uint64_t desc_vaddr;
0066
0067 uint32_t exception_base_addr;
0068 uint32_t stack_size;
0069 uint32_t flags;
0070 uint32_t core_mask;
0071
0072 uint32_t dram_size;
0073
0074 uint32_t phy_mem_desc_addr;
0075
0076 uint32_t debugger_flags_base_addr;
0077
0078
0079 uint32_t eclock_hz;
0080
0081
0082 uint32_t dclock_hz;
0083
0084 uint32_t reserved0;
0085 uint16_t board_type;
0086 uint8_t board_rev_major;
0087 uint8_t board_rev_minor;
0088 uint16_t reserved1;
0089 uint8_t reserved2;
0090 uint8_t reserved3;
0091 char board_serial_number[CVMX_BOOTINFO_OCTEON_SERIAL_LEN];
0092 uint8_t mac_addr_base[6];
0093 uint8_t mac_addr_count;
0094 #if (CVMX_BOOTINFO_MIN_VER >= 1)
0095
0096
0097
0098
0099
0100
0101
0102
0103 uint64_t compact_flash_common_base_addr;
0104 uint64_t compact_flash_attribute_base_addr;
0105
0106
0107
0108
0109 uint64_t led_display_base_addr;
0110 #endif
0111 #if (CVMX_BOOTINFO_MIN_VER >= 2)
0112
0113 uint32_t dfa_ref_clock_hz;
0114
0115
0116
0117
0118
0119
0120 uint32_t config_flags;
0121 #endif
0122 #if (CVMX_BOOTINFO_MIN_VER >= 3)
0123
0124
0125
0126
0127 uint64_t fdt_addr;
0128 #endif
0129 #if (CVMX_BOOTINFO_MIN_VER >= 4)
0130
0131
0132
0133
0134 struct cvmx_coremask ext_core_mask;
0135 #endif
0136 #else
0137
0138
0139
0140
0141
0142 uint32_t minor_version;
0143 uint32_t major_version;
0144
0145 uint64_t stack_top;
0146 uint64_t heap_base;
0147 uint64_t heap_end;
0148 uint64_t desc_vaddr;
0149
0150 uint32_t stack_size;
0151 uint32_t exception_base_addr;
0152
0153 uint32_t core_mask;
0154 uint32_t flags;
0155
0156 uint32_t phy_mem_desc_addr;
0157 uint32_t dram_size;
0158
0159 uint32_t eclock_hz;
0160 uint32_t debugger_flags_base_addr;
0161
0162 uint32_t reserved0;
0163 uint32_t dclock_hz;
0164
0165 uint8_t reserved3;
0166 uint8_t reserved2;
0167 uint16_t reserved1;
0168 uint8_t board_rev_minor;
0169 uint8_t board_rev_major;
0170 uint16_t board_type;
0171
0172 char board_serial_number[CVMX_BOOTINFO_OCTEON_SERIAL_LEN];
0173 uint8_t mac_addr_base[6];
0174 uint8_t mac_addr_count;
0175 uint8_t pad[5];
0176
0177 #if (CVMX_BOOTINFO_MIN_VER >= 1)
0178 uint64_t compact_flash_common_base_addr;
0179 uint64_t compact_flash_attribute_base_addr;
0180 uint64_t led_display_base_addr;
0181 #endif
0182 #if (CVMX_BOOTINFO_MIN_VER >= 2)
0183 uint32_t config_flags;
0184 uint32_t dfa_ref_clock_hz;
0185 #endif
0186 #if (CVMX_BOOTINFO_MIN_VER >= 3)
0187 uint64_t fdt_addr;
0188 #endif
0189 #if (CVMX_BOOTINFO_MIN_VER >= 4)
0190 struct cvmx_coremask ext_core_mask;
0191 #endif
0192 #endif
0193 };
0194
0195 #define CVMX_BOOTINFO_CFG_FLAG_PCI_HOST (1ull << 0)
0196 #define CVMX_BOOTINFO_CFG_FLAG_PCI_TARGET (1ull << 1)
0197 #define CVMX_BOOTINFO_CFG_FLAG_DEBUG (1ull << 2)
0198 #define CVMX_BOOTINFO_CFG_FLAG_NO_MAGIC (1ull << 3)
0199
0200
0201 #define CVMX_BOOTINFO_CFG_FLAG_OVERSIZE_TLB_MAPPING (1ull << 4)
0202 #define CVMX_BOOTINFO_CFG_FLAG_BREAK (1ull << 5)
0203
0204 #endif
0205
0206
0207 enum cvmx_board_types_enum {
0208 CVMX_BOARD_TYPE_NULL = 0,
0209 CVMX_BOARD_TYPE_SIM = 1,
0210 CVMX_BOARD_TYPE_EBT3000 = 2,
0211 CVMX_BOARD_TYPE_KODAMA = 3,
0212 CVMX_BOARD_TYPE_NIAGARA = 4,
0213 CVMX_BOARD_TYPE_NAC38 = 5,
0214 CVMX_BOARD_TYPE_THUNDER = 6,
0215 CVMX_BOARD_TYPE_TRANTOR = 7,
0216 CVMX_BOARD_TYPE_EBH3000 = 8,
0217 CVMX_BOARD_TYPE_EBH3100 = 9,
0218 CVMX_BOARD_TYPE_HIKARI = 10,
0219 CVMX_BOARD_TYPE_CN3010_EVB_HS5 = 11,
0220 CVMX_BOARD_TYPE_CN3005_EVB_HS5 = 12,
0221 CVMX_BOARD_TYPE_KBP = 13,
0222
0223 CVMX_BOARD_TYPE_CN3020_EVB_HS5 = 14,
0224 CVMX_BOARD_TYPE_EBT5800 = 15,
0225 CVMX_BOARD_TYPE_NICPRO2 = 16,
0226 CVMX_BOARD_TYPE_EBH5600 = 17,
0227 CVMX_BOARD_TYPE_EBH5601 = 18,
0228 CVMX_BOARD_TYPE_EBH5200 = 19,
0229 CVMX_BOARD_TYPE_BBGW_REF = 20,
0230 CVMX_BOARD_TYPE_NIC_XLE_4G = 21,
0231 CVMX_BOARD_TYPE_EBT5600 = 22,
0232 CVMX_BOARD_TYPE_EBH5201 = 23,
0233 CVMX_BOARD_TYPE_EBT5200 = 24,
0234 CVMX_BOARD_TYPE_CB5600 = 25,
0235 CVMX_BOARD_TYPE_CB5601 = 26,
0236 CVMX_BOARD_TYPE_CB5200 = 27,
0237
0238 CVMX_BOARD_TYPE_GENERIC = 28,
0239 CVMX_BOARD_TYPE_EBH5610 = 29,
0240 CVMX_BOARD_TYPE_LANAI2_A = 30,
0241 CVMX_BOARD_TYPE_LANAI2_U = 31,
0242 CVMX_BOARD_TYPE_EBB5600 = 32,
0243 CVMX_BOARD_TYPE_EBB6300 = 33,
0244 CVMX_BOARD_TYPE_NIC_XLE_10G = 34,
0245 CVMX_BOARD_TYPE_LANAI2_G = 35,
0246 CVMX_BOARD_TYPE_EBT5810 = 36,
0247 CVMX_BOARD_TYPE_NIC10E = 37,
0248 CVMX_BOARD_TYPE_EP6300C = 38,
0249 CVMX_BOARD_TYPE_EBB6800 = 39,
0250 CVMX_BOARD_TYPE_NIC4E = 40,
0251 CVMX_BOARD_TYPE_NIC2E = 41,
0252 CVMX_BOARD_TYPE_EBB6600 = 42,
0253 CVMX_BOARD_TYPE_REDWING = 43,
0254 CVMX_BOARD_TYPE_NIC68_4 = 44,
0255 CVMX_BOARD_TYPE_NIC10E_66 = 45,
0256 CVMX_BOARD_TYPE_SNIC10E = 50,
0257 CVMX_BOARD_TYPE_MAX,
0258
0259
0260
0261
0262
0263
0264
0265
0266
0267
0268
0269 CVMX_BOARD_TYPE_CUST_DEFINED_MIN = 10000,
0270 CVMX_BOARD_TYPE_CUST_WSX16 = 10001,
0271 CVMX_BOARD_TYPE_CUST_NS0216 = 10002,
0272 CVMX_BOARD_TYPE_CUST_NB5 = 10003,
0273 CVMX_BOARD_TYPE_CUST_WMR500 = 10004,
0274 CVMX_BOARD_TYPE_CUST_ITB101 = 10005,
0275 CVMX_BOARD_TYPE_CUST_NTE102 = 10006,
0276 CVMX_BOARD_TYPE_CUST_AGS103 = 10007,
0277 CVMX_BOARD_TYPE_CUST_GST104 = 10008,
0278 CVMX_BOARD_TYPE_CUST_GCT105 = 10009,
0279 CVMX_BOARD_TYPE_CUST_AGS106 = 10010,
0280 CVMX_BOARD_TYPE_CUST_SGM107 = 10011,
0281 CVMX_BOARD_TYPE_CUST_GCT108 = 10012,
0282 CVMX_BOARD_TYPE_CUST_AGS109 = 10013,
0283 CVMX_BOARD_TYPE_CUST_GCT110 = 10014,
0284 CVMX_BOARD_TYPE_CUST_L2_AIR_SENDER = 10015,
0285 CVMX_BOARD_TYPE_CUST_L2_AIR_RECEIVER = 10016,
0286 CVMX_BOARD_TYPE_CUST_L2_ACCTON2_TX = 10017,
0287 CVMX_BOARD_TYPE_CUST_L2_ACCTON2_RX = 10018,
0288 CVMX_BOARD_TYPE_CUST_L2_WSTRNSNIC_TX = 10019,
0289 CVMX_BOARD_TYPE_CUST_L2_WSTRNSNIC_RX = 10020,
0290 CVMX_BOARD_TYPE_CUST_L2_ZINWELL = 10021,
0291 CVMX_BOARD_TYPE_CUST_DEFINED_MAX = 20000,
0292
0293
0294
0295
0296
0297 CVMX_BOARD_TYPE_CUST_PRIVATE_MIN = 20001,
0298 CVMX_BOARD_TYPE_UBNT_E100 = 20002,
0299 CVMX_BOARD_TYPE_UBNT_E200 = 20003,
0300 CVMX_BOARD_TYPE_UBNT_E220 = 20005,
0301 CVMX_BOARD_TYPE_CUST_DSR1000N = 20006,
0302 CVMX_BOARD_TYPE_UBNT_E300 = 20300,
0303 CVMX_BOARD_TYPE_KONTRON_S1901 = 21901,
0304 CVMX_BOARD_TYPE_CUST_PRIVATE_MAX = 30000,
0305
0306
0307 };
0308
0309 enum cvmx_chip_types_enum {
0310 CVMX_CHIP_TYPE_NULL = 0,
0311 CVMX_CHIP_SIM_TYPE_DEPRECATED = 1,
0312 CVMX_CHIP_TYPE_OCTEON_SAMPLE = 2,
0313 CVMX_CHIP_TYPE_MAX,
0314 };
0315
0316
0317
0318 #define CVMX_BOARD_TYPE_NAO38 CVMX_BOARD_TYPE_NAC38
0319
0320
0321 #define ENUM_BRD_TYPE_CASE(x) \
0322 case x: return (&#x[16]);
0323 static inline const char *cvmx_board_type_to_string(enum
0324 cvmx_board_types_enum type)
0325 {
0326 switch (type) {
0327 ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_NULL)
0328 ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_SIM)
0329 ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_EBT3000)
0330 ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_KODAMA)
0331 ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_NIAGARA)
0332 ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_NAC38)
0333 ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_THUNDER)
0334 ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_TRANTOR)
0335 ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_EBH3000)
0336 ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_EBH3100)
0337 ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_HIKARI)
0338 ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CN3010_EVB_HS5)
0339 ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CN3005_EVB_HS5)
0340 ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_KBP)
0341 ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CN3020_EVB_HS5)
0342 ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_EBT5800)
0343 ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_NICPRO2)
0344 ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_EBH5600)
0345 ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_EBH5601)
0346 ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_EBH5200)
0347 ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_BBGW_REF)
0348 ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_NIC_XLE_4G)
0349 ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_EBT5600)
0350 ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_EBH5201)
0351 ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_EBT5200)
0352 ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CB5600)
0353 ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CB5601)
0354 ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CB5200)
0355 ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_GENERIC)
0356 ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_EBH5610)
0357 ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_LANAI2_A)
0358 ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_LANAI2_U)
0359 ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_EBB5600)
0360 ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_EBB6300)
0361 ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_NIC_XLE_10G)
0362 ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_LANAI2_G)
0363 ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_EBT5810)
0364 ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_NIC10E)
0365 ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_EP6300C)
0366 ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_EBB6800)
0367 ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_NIC4E)
0368 ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_NIC2E)
0369 ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_EBB6600)
0370 ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_REDWING)
0371 ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_NIC68_4)
0372 ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_NIC10E_66)
0373 ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_SNIC10E)
0374 ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_MAX)
0375
0376
0377 ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_DEFINED_MIN)
0378 ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_WSX16)
0379 ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_NS0216)
0380 ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_NB5)
0381 ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_WMR500)
0382 ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_ITB101)
0383 ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_NTE102)
0384 ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_AGS103)
0385 ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_GST104)
0386 ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_GCT105)
0387 ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_AGS106)
0388 ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_SGM107)
0389 ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_GCT108)
0390 ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_AGS109)
0391 ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_GCT110)
0392 ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_L2_AIR_SENDER)
0393 ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_L2_AIR_RECEIVER)
0394 ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_L2_ACCTON2_TX)
0395 ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_L2_ACCTON2_RX)
0396 ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_L2_WSTRNSNIC_TX)
0397 ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_L2_WSTRNSNIC_RX)
0398 ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_L2_ZINWELL)
0399 ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_DEFINED_MAX)
0400
0401
0402 ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_PRIVATE_MIN)
0403 ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_UBNT_E100)
0404 ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_UBNT_E200)
0405 ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_UBNT_E220)
0406 ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_DSR1000N)
0407 ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_UBNT_E300)
0408 ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_KONTRON_S1901)
0409 ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_PRIVATE_MAX)
0410 }
0411 return NULL;
0412 }
0413
0414 #define ENUM_CHIP_TYPE_CASE(x) \
0415 case x: return (&#x[15]);
0416 static inline const char *cvmx_chip_type_to_string(enum
0417 cvmx_chip_types_enum type)
0418 {
0419 switch (type) {
0420 ENUM_CHIP_TYPE_CASE(CVMX_CHIP_TYPE_NULL)
0421 ENUM_CHIP_TYPE_CASE(CVMX_CHIP_SIM_TYPE_DEPRECATED)
0422 ENUM_CHIP_TYPE_CASE(CVMX_CHIP_TYPE_OCTEON_SAMPLE)
0423 ENUM_CHIP_TYPE_CASE(CVMX_CHIP_TYPE_MAX)
0424 }
0425 return "Unsupported Chip";
0426 }
0427
0428 #endif