cvmx-app-init.h revision 212844
1210284Sjmallett/***********************license start*************** 2210284Sjmallett * Copyright (c) 2003-2008 Cavium Networks (support@cavium.com). All rights 3210284Sjmallett * reserved. 4210284Sjmallett * 5210284Sjmallett * 6210284Sjmallett * Redistribution and use in source and binary forms, with or without 7210284Sjmallett * modification, are permitted provided that the following conditions are 8210284Sjmallett * met: 9210284Sjmallett * 10210284Sjmallett * * Redistributions of source code must retain the above copyright 11210284Sjmallett * notice, this list of conditions and the following disclaimer. 12210284Sjmallett * 13210284Sjmallett * * Redistributions in binary form must reproduce the above 14210284Sjmallett * copyright notice, this list of conditions and the following 15210284Sjmallett * disclaimer in the documentation and/or other materials provided 16210284Sjmallett * with the distribution. 17210284Sjmallett * 18210284Sjmallett * * Neither the name of Cavium Networks nor the names of 19210284Sjmallett * its contributors may be used to endorse or promote products 20210284Sjmallett * derived from this software without specific prior written 21210284Sjmallett * permission. 22210284Sjmallett * 23210284Sjmallett * TO THE MAXIMUM EXTENT PERMITTED BY LAW, THE SOFTWARE IS PROVIDED "AS IS" 24210284Sjmallett * AND WITH ALL FAULTS AND CAVIUM NETWORKS MAKES NO PROMISES, REPRESENTATIONS 25210284Sjmallett * OR WARRANTIES, EITHER EXPRESS, IMPLIED, STATUTORY, OR OTHERWISE, WITH 26210284Sjmallett * RESPECT TO THE SOFTWARE, INCLUDING ITS CONDITION, ITS CONFORMITY TO ANY 27210284Sjmallett * REPRESENTATION OR DESCRIPTION, OR THE EXISTENCE OF ANY LATENT OR PATENT 28210284Sjmallett * DEFECTS, AND CAVIUM SPECIFICALLY DISCLAIMS ALL IMPLIED (IF ANY) WARRANTIES 29210284Sjmallett * OF TITLE, MERCHANTABILITY, NONINFRINGEMENT, FITNESS FOR A PARTICULAR 30210284Sjmallett * PURPOSE, LACK OF VIRUSES, ACCURACY OR COMPLETENESS, QUIET ENJOYMENT, QUIET 31210284Sjmallett * POSSESSION OR CORRESPONDENCE TO DESCRIPTION. THE ENTIRE RISK ARISING OUT 32210284Sjmallett * OF USE OR PERFORMANCE OF THE SOFTWARE LIES WITH YOU. 33210284Sjmallett * 34210284Sjmallett * 35210284Sjmallett * For any questions regarding licensing please contact marketing@caviumnetworks.com 36210284Sjmallett * 37210284Sjmallett ***********************license end**************************************/ 38210284Sjmallett 39210284Sjmallett 40210284Sjmallett 41210284Sjmallett 42210284Sjmallett 43210284Sjmallett/** 44210284Sjmallett * @file 45210284Sjmallett * Header file for simple executive application initialization. This defines 46210284Sjmallett * part of the ABI between the bootloader and the application. 47210284Sjmallett * <hr>$Revision: 41586 $<hr> 48210284Sjmallett * 49210284Sjmallett */ 50210284Sjmallett 51210284Sjmallett#ifndef __CVMX_APP_INIT_H__ 52210284Sjmallett#define __CVMX_APP_INIT_H__ 53210284Sjmallett 54210284Sjmallett#ifdef __cplusplus 55210284Sjmallettextern "C" { 56210284Sjmallett#endif 57210284Sjmallett 58210284Sjmallett 59210284Sjmallett/* Current major and minor versions of the CVMX bootinfo block that is passed 60210284Sjmallett** from the bootloader to the application. This is versioned so that applications 61210284Sjmallett** can properly handle multiple bootloader versions. */ 62210284Sjmallett#define CVMX_BOOTINFO_MAJ_VER 1 63210284Sjmallett#define CVMX_BOOTINFO_MIN_VER 2 64210284Sjmallett 65210284Sjmallett 66210284Sjmallett#if (CVMX_BOOTINFO_MAJ_VER == 1) 67210284Sjmallett#define CVMX_BOOTINFO_OCTEON_SERIAL_LEN 20 68210284Sjmallett/* This structure is populated by the bootloader. For binary 69210284Sjmallett** compatibility the only changes that should be made are 70210284Sjmallett** adding members to the end of the structure, and the minor 71210284Sjmallett** version should be incremented at that time. 72210284Sjmallett** If an incompatible change is made, the major version 73210284Sjmallett** must be incremented, and the minor version should be reset 74210284Sjmallett** to 0. 75210284Sjmallett*/ 76210284Sjmalletttypedef struct 77210284Sjmallett{ 78210284Sjmallett uint32_t major_version; 79210284Sjmallett uint32_t minor_version; 80210284Sjmallett 81210284Sjmallett uint64_t stack_top; 82210284Sjmallett uint64_t heap_base; 83210284Sjmallett uint64_t heap_end; 84210284Sjmallett uint64_t desc_vaddr; 85210284Sjmallett 86210284Sjmallett uint32_t exception_base_addr; 87210284Sjmallett uint32_t stack_size; 88210284Sjmallett uint32_t flags; 89210284Sjmallett uint32_t core_mask; 90210284Sjmallett uint32_t dram_size; /**< DRAM size in megabytes */ 91210284Sjmallett uint32_t phy_mem_desc_addr; /**< physical address of free memory descriptor block*/ 92210284Sjmallett uint32_t debugger_flags_base_addr; /**< used to pass flags from app to debugger */ 93210284Sjmallett uint32_t eclock_hz; /**< CPU clock speed, in hz */ 94210284Sjmallett uint32_t dclock_hz; /**< DRAM clock speed, in hz */ 95210284Sjmallett uint32_t reserved0; 96210284Sjmallett uint16_t board_type; 97210284Sjmallett uint8_t board_rev_major; 98210284Sjmallett uint8_t board_rev_minor; 99210284Sjmallett uint16_t reserved1; 100210284Sjmallett uint8_t reserved2; 101210284Sjmallett uint8_t reserved3; 102210284Sjmallett char board_serial_number[CVMX_BOOTINFO_OCTEON_SERIAL_LEN]; 103210284Sjmallett uint8_t mac_addr_base[6]; 104210284Sjmallett uint8_t mac_addr_count; 105210284Sjmallett#if (CVMX_BOOTINFO_MIN_VER >= 1) 106210284Sjmallett /* Several boards support compact flash on the Octeon boot bus. The CF 107210284Sjmallett ** memory spaces may be mapped to different addresses on different boards. 108210284Sjmallett ** These are the physical addresses, so care must be taken to use the correct 109210284Sjmallett ** XKPHYS/KSEG0 addressing depending on the application's ABI. 110210284Sjmallett ** These values will be 0 if CF is not present */ 111210284Sjmallett uint64_t compact_flash_common_base_addr; 112210284Sjmallett uint64_t compact_flash_attribute_base_addr; 113210284Sjmallett /* Base address of the LED display (as on EBT3000 board) 114210284Sjmallett ** This will be 0 if LED display not present. */ 115210284Sjmallett uint64_t led_display_base_addr; 116210284Sjmallett#endif 117210284Sjmallett#if (CVMX_BOOTINFO_MIN_VER >= 2) 118210284Sjmallett uint32_t dfa_ref_clock_hz; /**< DFA reference clock in hz (if applicable)*/ 119210284Sjmallett uint32_t config_flags; /**< flags indicating various configuration options. These flags supercede 120210284Sjmallett ** the 'flags' variable and should be used instead if available */ 121210284Sjmallett#endif 122210284Sjmallett 123210284Sjmallett 124210284Sjmallett} cvmx_bootinfo_t; 125210284Sjmallett 126210284Sjmallett#define CVMX_BOOTINFO_CFG_FLAG_PCI_HOST (1ull << 0) 127210284Sjmallett#define CVMX_BOOTINFO_CFG_FLAG_PCI_TARGET (1ull << 1) 128210284Sjmallett#define CVMX_BOOTINFO_CFG_FLAG_DEBUG (1ull << 2) 129210284Sjmallett#define CVMX_BOOTINFO_CFG_FLAG_NO_MAGIC (1ull << 3) 130210284Sjmallett/* This flag is set if the TLB mappings are not contained in the 131210284Sjmallett** 0x10000000 - 0x20000000 boot bus region. */ 132210284Sjmallett#define CVMX_BOOTINFO_CFG_FLAG_OVERSIZE_TLB_MAPPING (1ull << 4) 133210284Sjmallett#define CVMX_BOOTINFO_CFG_FLAG_BREAK (1ull << 5) 134210284Sjmallett 135210284Sjmallett#endif /* (CVMX_BOOTINFO_MAJ_VER == 1) */ 136210284Sjmallett 137210284Sjmallett 138210284Sjmallett/* Type defines for board and chip types */ 139210284Sjmallettenum cvmx_board_types_enum { 140210284Sjmallett CVMX_BOARD_TYPE_NULL = 0, 141210284Sjmallett CVMX_BOARD_TYPE_SIM = 1, 142210284Sjmallett CVMX_BOARD_TYPE_EBT3000 = 2, 143210284Sjmallett CVMX_BOARD_TYPE_KODAMA = 3, 144210284Sjmallett CVMX_BOARD_TYPE_NIAGARA = 4, /* Obsolete, no longer supported */ 145210284Sjmallett CVMX_BOARD_TYPE_NAC38 = 5, /* formerly NAO38 */ 146210284Sjmallett CVMX_BOARD_TYPE_THUNDER = 6, 147210284Sjmallett CVMX_BOARD_TYPE_TRANTOR = 7, /* Obsolete, no longer supported */ 148210284Sjmallett CVMX_BOARD_TYPE_EBH3000 = 8, 149210284Sjmallett CVMX_BOARD_TYPE_EBH3100 = 9, 150210284Sjmallett CVMX_BOARD_TYPE_HIKARI = 10, 151210284Sjmallett CVMX_BOARD_TYPE_CN3010_EVB_HS5 = 11, 152210284Sjmallett CVMX_BOARD_TYPE_CN3005_EVB_HS5 = 12, 153210284Sjmallett CVMX_BOARD_TYPE_KBP = 13, 154210284Sjmallett CVMX_BOARD_TYPE_CN3020_EVB_HS5 = 14, /* Deprecated, CVMX_BOARD_TYPE_CN3010_EVB_HS5 supports the CN3020 */ 155210284Sjmallett CVMX_BOARD_TYPE_EBT5800 = 15, 156210284Sjmallett CVMX_BOARD_TYPE_NICPRO2 = 16, 157210284Sjmallett CVMX_BOARD_TYPE_EBH5600 = 17, 158210284Sjmallett CVMX_BOARD_TYPE_EBH5601 = 18, 159210284Sjmallett CVMX_BOARD_TYPE_EBH5200 = 19, 160210284Sjmallett CVMX_BOARD_TYPE_BBGW_REF = 20, 161210284Sjmallett CVMX_BOARD_TYPE_NIC_XLE_4G = 21, 162210284Sjmallett CVMX_BOARD_TYPE_EBT5600 = 22, 163210284Sjmallett CVMX_BOARD_TYPE_EBH5201 = 23, 164210284Sjmallett CVMX_BOARD_TYPE_EBT5200 = 24, 165210284Sjmallett CVMX_BOARD_TYPE_CB5600 = 25, 166210284Sjmallett CVMX_BOARD_TYPE_CB5601 = 26, 167210284Sjmallett CVMX_BOARD_TYPE_CB5200 = 27, 168210284Sjmallett CVMX_BOARD_TYPE_GENERIC = 28, /* Special 'generic' board type, supports many boards */ 169210284Sjmallett CVMX_BOARD_TYPE_MAX, 170210284Sjmallett 171210284Sjmallett /* The range from CVMX_BOARD_TYPE_MAX to CVMX_BOARD_TYPE_CUST_DEFINED_MIN is reserved 172210284Sjmallett ** for future SDK use. */ 173210284Sjmallett 174210284Sjmallett /* Set aside a range for customer boards. These numbers are managed 175210284Sjmallett ** by Cavium. 176210284Sjmallett */ 177210284Sjmallett CVMX_BOARD_TYPE_CUST_DEFINED_MIN = 10000, 178210284Sjmallett CVMX_BOARD_TYPE_CUST_WSX16 = 10001, 179210284Sjmallett CVMX_BOARD_TYPE_CUST_NS0216 = 10002, 180210284Sjmallett CVMX_BOARD_TYPE_CUST_NB5 = 10003, 181210284Sjmallett CVMX_BOARD_TYPE_CUST_WMR500 = 10004, 182210284Sjmallett CVMX_BOARD_TYPE_CUST_ITB101 = 10005, 183210284Sjmallett CVMX_BOARD_TYPE_CUST_NTE102 = 10006, 184210284Sjmallett CVMX_BOARD_TYPE_CUST_AGS103 = 10007, 185212844Sjmallett#if !defined(OCTEON_VENDOR_LANNER) 186210284Sjmallett CVMX_BOARD_TYPE_CUST_GST104 = 10008, 187212844Sjmallett#else 188212844Sjmallett CVMX_BOARD_TYPE_CUST_LANNER_MR955= 10008, 189212844Sjmallett#endif 190210284Sjmallett CVMX_BOARD_TYPE_CUST_GCT105 = 10009, 191210284Sjmallett CVMX_BOARD_TYPE_CUST_AGS106 = 10010, 192210284Sjmallett CVMX_BOARD_TYPE_CUST_SGM107 = 10011, 193210284Sjmallett CVMX_BOARD_TYPE_CUST_GCT108 = 10012, 194210284Sjmallett CVMX_BOARD_TYPE_CUST_AGS109 = 10013, 195210284Sjmallett CVMX_BOARD_TYPE_CUST_GCT110 = 10014, 196210284Sjmallett CVMX_BOARD_TYPE_CUST_DEFINED_MAX = 20000, 197210284Sjmallett 198210284Sjmallett /* Set aside a range for customer private use. The SDK won't 199210284Sjmallett ** use any numbers in this range. */ 200210284Sjmallett CVMX_BOARD_TYPE_CUST_PRIVATE_MIN = 20001, 201210311Sjmallett#if defined(OCTEON_VENDOR_LANNER) 202210311Sjmallett CVMX_BOARD_TYPE_CUST_LANNER_MR320= 20002, 203210311Sjmallett#endif 204210284Sjmallett CVMX_BOARD_TYPE_CUST_PRIVATE_MAX = 30000, 205210284Sjmallett 206210284Sjmallett /* The remaining range is reserved for future use. */ 207210284Sjmallett}; 208210284Sjmallettenum cvmx_chip_types_enum { 209210284Sjmallett CVMX_CHIP_TYPE_NULL = 0, 210210284Sjmallett CVMX_CHIP_SIM_TYPE_DEPRECATED = 1, 211210284Sjmallett CVMX_CHIP_TYPE_OCTEON_SAMPLE = 2, 212210284Sjmallett CVMX_CHIP_TYPE_MAX, 213210284Sjmallett}; 214210284Sjmallett 215210284Sjmallett/* Compatability alias for NAC38 name change, planned to be removed from SDK 1.7 */ 216210284Sjmallett#define CVMX_BOARD_TYPE_NAO38 CVMX_BOARD_TYPE_NAC38 217210284Sjmallett 218210284Sjmallett/* Functions to return string based on type */ 219210284Sjmallett#define ENUM_BRD_TYPE_CASE(x) case x: return(#x + 16); /* Skip CVMX_BOARD_TYPE_ */ 220210284Sjmallettstatic inline const char *cvmx_board_type_to_string(enum cvmx_board_types_enum type) 221210284Sjmallett{ 222210284Sjmallett switch (type) 223210284Sjmallett { 224210284Sjmallett ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_NULL) 225210284Sjmallett ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_SIM) 226210284Sjmallett ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_EBT3000) 227210284Sjmallett ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_KODAMA) 228210284Sjmallett ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_NIAGARA) 229210284Sjmallett ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_NAC38) 230210284Sjmallett ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_THUNDER) 231210284Sjmallett ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_TRANTOR) 232210284Sjmallett ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_EBH3000) 233210284Sjmallett ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_EBH3100) 234210284Sjmallett ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_HIKARI) 235210284Sjmallett ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CN3010_EVB_HS5) 236210284Sjmallett ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CN3005_EVB_HS5) 237210284Sjmallett ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_KBP) 238210284Sjmallett ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CN3020_EVB_HS5) 239210284Sjmallett ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_EBT5800) 240210284Sjmallett ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_NICPRO2) 241210284Sjmallett ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_EBH5600) 242210284Sjmallett ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_EBH5601) 243210284Sjmallett ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_EBH5200) 244210284Sjmallett ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_BBGW_REF) 245210284Sjmallett ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_NIC_XLE_4G) 246210284Sjmallett ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_EBT5600) 247210284Sjmallett ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_EBH5201) 248210284Sjmallett ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_EBT5200) 249210284Sjmallett ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CB5600) 250210284Sjmallett ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CB5601) 251210284Sjmallett ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CB5200) 252210284Sjmallett ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_GENERIC) 253210284Sjmallett ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_MAX) 254210284Sjmallett 255210284Sjmallett /* Customer boards listed here */ 256210284Sjmallett ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_DEFINED_MIN) 257210284Sjmallett ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_WSX16) 258210284Sjmallett ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_NS0216) 259210284Sjmallett ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_NB5) 260210284Sjmallett ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_WMR500) 261210284Sjmallett ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_ITB101) 262210284Sjmallett ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_NTE102) 263210284Sjmallett ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_AGS103) 264212844Sjmallett#if !defined(OCTEON_VENDOR_LANNER) 265210284Sjmallett ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_GST104) 266212844Sjmallett#else 267212844Sjmallett ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_LANNER_MR955) 268212844Sjmallett#endif 269210284Sjmallett ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_GCT105) 270210284Sjmallett ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_AGS106) 271210284Sjmallett ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_SGM107) 272210284Sjmallett ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_GCT108) 273210284Sjmallett ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_AGS109) 274210284Sjmallett ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_GCT110) 275210284Sjmallett ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_DEFINED_MAX) 276210284Sjmallett 277210284Sjmallett /* Customer private range */ 278210284Sjmallett ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_PRIVATE_MIN) 279210311Sjmallett#if defined(OCTEON_VENDOR_LANNER) 280210311Sjmallett ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_LANNER_MR320) 281210311Sjmallett#endif 282210284Sjmallett ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_PRIVATE_MAX) 283210284Sjmallett } 284210284Sjmallett return "Unsupported Board"; 285210284Sjmallett} 286210284Sjmallett 287210284Sjmallett#define ENUM_CHIP_TYPE_CASE(x) case x: return(#x + 15); /* Skip CVMX_CHIP_TYPE */ 288210284Sjmallettstatic inline const char *cvmx_chip_type_to_string(enum cvmx_chip_types_enum type) 289210284Sjmallett{ 290210284Sjmallett switch (type) 291210284Sjmallett { 292210284Sjmallett ENUM_CHIP_TYPE_CASE(CVMX_CHIP_TYPE_NULL) 293210284Sjmallett ENUM_CHIP_TYPE_CASE(CVMX_CHIP_SIM_TYPE_DEPRECATED) 294210284Sjmallett ENUM_CHIP_TYPE_CASE(CVMX_CHIP_TYPE_OCTEON_SAMPLE) 295210284Sjmallett ENUM_CHIP_TYPE_CASE(CVMX_CHIP_TYPE_MAX) 296210284Sjmallett } 297210284Sjmallett return "Unsupported Chip"; 298210284Sjmallett} 299210284Sjmallett 300210284Sjmallett 301210284Sjmallettextern int cvmx_debug_uart; 302210284Sjmallett 303210284Sjmallett 304210284Sjmallett 305210284Sjmallett#ifdef __cplusplus 306210284Sjmallett} 307210284Sjmallett#endif 308210284Sjmallett 309210284Sjmallett#endif /* __CVMX_APP_INIT_H__ */ 310