1 #ifndef __CB_BDK_CONFIG_H__ 2 #define __CB_BDK_CONFIG_H__ 3 /***********************license start*********************************** 4 * Copyright (c) 2003-2017 Cavium Inc. ([email protected]). All rights 5 * reserved. 6 * 7 * 8 * Redistribution and use in source and binary forms, with or without 9 * modification, are permitted provided that the following conditions are 10 * met: 11 * 12 * * Redistributions of source code must retain the above copyright 13 * notice, this list of conditions and the following disclaimer. 14 * 15 * * Redistributions in binary form must reproduce the above 16 * copyright notice, this list of conditions and the following 17 * disclaimer in the documentation and/or other materials provided 18 * with the distribution. 19 * 20 * * Neither the name of Cavium Inc. nor the names of 21 * its contributors may be used to endorse or promote products 22 * derived from this software without specific prior written 23 * permission. 24 * 25 * This Software, including technical data, may be subject to U.S. export 26 * control laws, including the U.S. Export Administration Act and its 27 * associated regulations, and may be subject to export or import 28 * regulations in other countries. 29 * 30 * TO THE MAXIMUM EXTENT PERMITTED BY LAW, THE SOFTWARE IS PROVIDED "AS IS" 31 * AND WITH ALL FAULTS AND CAVIUM INC. MAKES NO PROMISES, REPRESENTATIONS OR 32 * WARRANTIES, EITHER EXPRESS, IMPLIED, STATUTORY, OR OTHERWISE, WITH RESPECT 33 * TO THE SOFTWARE, INCLUDING ITS CONDITION, ITS CONFORMITY TO ANY 34 * REPRESENTATION OR DESCRIPTION, OR THE EXISTENCE OF ANY LATENT OR PATENT 35 * DEFECTS, AND CAVIUM SPECIFICALLY DISCLAIMS ALL IMPLIED (IF ANY) WARRANTIES 36 * OF TITLE, MERCHANTABILITY, NONINFRINGEMENT, FITNESS FOR A PARTICULAR 37 * PURPOSE, LACK OF VIRUSES, ACCURACY OR COMPLETENESS, QUIET ENJOYMENT, 38 * QUIET POSSESSION OR CORRESPONDENCE TO DESCRIPTION. THE ENTIRE RISK 39 * ARISING OUT OF USE OR PERFORMANCE OF THE SOFTWARE LIES WITH YOU. 40 ***********************license end**************************************/ 41 42 #include <stdint.h> 43 #include <bdk-devicetree.h> 44 45 /** 46 * @file 47 * 48 * Functions for controlling the system configuration. 49 * 50 * <hr>$Revision: 49448 $<hr> 51 * 52 * @addtogroup hal 53 * @{ 54 */ 55 56 #define BDK_CONFIG_MANUFACTURING_ADDRESS 0xff0000 /* 16MB - 64KB */ 57 58 typedef enum 59 { 60 /* Board manufacturing data */ 61 BDK_CONFIG_BOARD_MODEL, /* No parameters */ 62 BDK_CONFIG_BOARD_REVISION, /* No parameters */ 63 BDK_CONFIG_BOARD_SERIAL, /* No parameters */ 64 BDK_CONFIG_MAC_ADDRESS, /* No parameters */ 65 BDK_CONFIG_MAC_ADDRESS_NUM, /* No parameters */ 66 BDK_CONFIG_MAC_ADDRESS_NUM_OVERRIDE, /* No parameters */ 67 68 /* Board generic */ 69 BDK_CONFIG_BMC_TWSI, /* No parameters */ 70 BDK_CONFIG_WATCHDOG_TIMEOUT, /* No parameters */ 71 BDK_CONFIG_TWSI_WRITE, /* Parameters: Write number */ 72 BDK_CONFIG_MDIO_WRITE, /* Parameters: Write number */ 73 74 /* Board wiring of network ports and PHYs */ 75 BDK_CONFIG_PHY_ADDRESS, /* Parameters: Node, Interface, Port */ 76 BDK_CONFIG_BGX_ENABLE, /* Parameters: Node, BGX, Port */ 77 /* Non-EBB specific SFF8104 board and alike */ 78 BDK_CONFIG_AQUANTIA_PHY, /* Parameters: Node, BGX, Port */ 79 80 /* BDK Configuration params */ 81 BDK_CONFIG_VERSION, 82 BDK_CONFIG_NUM_PACKET_BUFFERS, 83 BDK_CONFIG_PACKET_BUFFER_SIZE, 84 BDK_CONFIG_SHOW_LINK_STATUS, 85 BDK_CONFIG_COREMASK, 86 BDK_CONFIG_BOOT_MENU_TIMEOUT, 87 BDK_CONFIG_BOOT_PATH_OPTION, 88 BDK_CONFIG_BOOT_NEXT_STAGE, 89 BDK_CONFIG_TRACE, 90 91 /* Chip feature items */ 92 BDK_CONFIG_MULTI_NODE, /* No parameters */ 93 BDK_CONFIG_PCIE_EA, /* No parameters */ 94 BDK_CONFIG_PCIE_ORDERING, /* No parameters */ 95 BDK_CONFIG_PCIE_PRESET_REQUEST_VECTOR, /* Parameters: Node, Port */ 96 BDK_CONFIG_PCIE_WIDTH, /* Parameters: Node, Port */ 97 BDK_CONFIG_PCIE_PHYSICAL_SLOT, /* Parameters: Node, Port */ 98 BDK_CONFIG_PCIE_SKIP_LINK_TRAIN, /* Parameters: Node, Port */ 99 BDK_CONFIG_PCIE_FLASH, /* Parameters: Node, Port */ 100 BDK_CONFIG_CCPI_LANE_REVERSE, /* No parameters */ 101 BDK_CONFIG_CHIP_SKU, /* Parameter: Node */ 102 BDK_CONFIG_CHIP_SERIAL, /* Parameter: Node */ 103 BDK_CONFIG_CHIP_UNIQUE_ID, /* Parameter: Node */ 104 105 /* QLM related config */ 106 BDK_CONFIG_QLM_AUTO_CONFIG, /* Parameters: Node */ 107 /* SFF8104 related QLM config */ 108 BDK_CONFIG_QLM_DIP_AUTO_CONFIG, /* Parameters: Node */ 109 BDK_CONFIG_QLM_MODE, /* Parameters: Node, QLM */ 110 BDK_CONFIG_QLM_FREQ, /* Parameters: Node, QLM */ 111 BDK_CONFIG_QLM_CLK, /* Parameters: Node, QLM */ 112 BDK_CONFIG_QLM_TUNING_TX_SWING, /* Parameters: Node, QLM, Lane */ 113 BDK_CONFIG_QLM_TUNING_TX_PREMPTAP, /* Parameters: Node, QLM, Lane */ 114 BDK_CONFIG_QLM_TUNING_TX_GAIN, /* Parameters: Node, QLM, Lane */ 115 BDK_CONFIG_QLM_TUNING_TX_VBOOST, /* Parameters: Node, QLM, Lane */ 116 BDK_CONFIG_QLM_CHANNEL_LOSS, /* Parameters: Node, QLM */ 117 118 /* DRAM configuration options */ 119 BDK_CONFIG_DDR_SPEED, /* Parameters: Node */ 120 BDK_CONFIG_DDR_ALT_REFCLK, /* Parameters: Node */ 121 BDK_CONFIG_DDR_SPD_ADDR, /* Parameters: DIMM, LMC, Node */ 122 BDK_CONFIG_DDR_SPD_DATA, /* Parameters: DIMM, LMC, Node */ 123 BDK_CONFIG_DDR_RANKS_DQX_CTL, /* Parameters: Num Ranks, Num DIMMs, LMC, Node */ 124 BDK_CONFIG_DDR_RANKS_WODT_MASK, /* Parameters: Num Ranks, Num DIMMs, LMC, Node */ 125 BDK_CONFIG_DDR_RANKS_MODE1_PASR, /* Parameters: Num Ranks, Num DIMMs, Rank, LMC, Node */ 126 BDK_CONFIG_DDR_RANKS_MODE1_ASR, /* Parameters: Num Ranks, Num DIMMs, Rank, LMC, Node */ 127 BDK_CONFIG_DDR_RANKS_MODE1_SRT, /* Parameters: Num Ranks, Num DIMMs, Rank, LMC, Node */ 128 BDK_CONFIG_DDR_RANKS_MODE1_RTT_WR, /* Parameters: Num Ranks, Num DIMMs, Rank, LMC, Node */ 129 BDK_CONFIG_DDR_RANKS_MODE1_DIC, /* Parameters: Num Ranks, Num DIMMs, Rank, LMC, Node */ 130 BDK_CONFIG_DDR_RANKS_MODE1_RTT_NOM, /* Parameters: Num Ranks, Num DIMMs, Rank, LMC, Node */ 131 BDK_CONFIG_DDR_RANKS_MODE1_DB_OUTPUT_IMPEDANCE, /* Parameters: Num Ranks, Num DIMMs, LMC, Node */ 132 BDK_CONFIG_DDR_RANKS_MODE2_RTT_PARK, /* Parameters: Num Ranks, Num DIMMs, Rank, LMC, Node */ 133 BDK_CONFIG_DDR_RANKS_MODE2_VREF_VALUE, /* Parameters: Num Ranks, Num DIMMs, Rank, LMC, Node */ 134 BDK_CONFIG_DDR_RANKS_MODE2_VREF_RANGE, /* Parameters: Num Ranks, Num DIMMs, Rank, LMC, Node */ 135 BDK_CONFIG_DDR_RANKS_MODE2_VREFDQ_TRAIN_EN, /* Parameters: Num Ranks, Num DIMMs, LMC, Node */ 136 BDK_CONFIG_DDR_RANKS_RODT_CTL, /* Parameters: Num Ranks, Num DIMMs, LMC, Node */ 137 BDK_CONFIG_DDR_RANKS_RODT_MASK, /* Parameters: Num Ranks, Num DIMMs, LMC, Node */ 138 BDK_CONFIG_DDR_CUSTOM_MIN_RTT_NOM_IDX, /* Parameters: LMC, Node */ 139 BDK_CONFIG_DDR_CUSTOM_MAX_RTT_NOM_IDX, /* Parameters: LMC, Node */ 140 BDK_CONFIG_DDR_CUSTOM_MIN_RODT_CTL, /* Parameters: LMC, Node */ 141 BDK_CONFIG_DDR_CUSTOM_MAX_RODT_CTL, /* Parameters: LMC, Node */ 142 BDK_CONFIG_DDR_CUSTOM_CK_CTL, /* Parameters: LMC, Node */ 143 BDK_CONFIG_DDR_CUSTOM_CMD_CTL, /* Parameters: LMC, Node */ 144 BDK_CONFIG_DDR_CUSTOM_CTL_CTL, /* Parameters: LMC, Node */ 145 BDK_CONFIG_DDR_CUSTOM_MIN_CAS_LATENCY, /* Parameters: LMC, Node */ 146 BDK_CONFIG_DDR_CUSTOM_OFFSET_EN, /* Parameters: LMC, Node */ 147 BDK_CONFIG_DDR_CUSTOM_OFFSET, /* Parameters: Type(UDIMM,RDIMM), LMC, Node */ 148 BDK_CONFIG_DDR_CUSTOM_RLEVEL_COMPUTE, /* Parameters: LMC, Node */ 149 BDK_CONFIG_DDR_CUSTOM_RLEVEL_COMP_OFFSET, /* Parameters: Type(UDIMM,RDIMM), LMC, Node */ 150 BDK_CONFIG_DDR_CUSTOM_DDR2T, /* Parameters: Type(UDIMM,RDIMM), LMC, Node */ 151 BDK_CONFIG_DDR_CUSTOM_DISABLE_SEQUENTIAL_DELAY_CHECK, /* Parameters: LMC, Node */ 152 BDK_CONFIG_DDR_CUSTOM_MAXIMUM_ADJACENT_RLEVEL_DELAY_INCREMENT, /* Parameters: LMC, Node */ 153 BDK_CONFIG_DDR_CUSTOM_PARITY, /* Parameters: LMC, Node */ 154 BDK_CONFIG_DDR_CUSTOM_FPRCH2, /* Parameters: LMC, Node */ 155 BDK_CONFIG_DDR_CUSTOM_MODE32B, /* Parameters: LMC, Node */ 156 BDK_CONFIG_DDR_CUSTOM_MEASURED_VREF, /* Parameters: LMC, Node */ 157 BDK_CONFIG_DDR_CUSTOM_DLL_WRITE_OFFSET, /* Parameters: Byte, LMC, Node */ 158 BDK_CONFIG_DDR_CUSTOM_DLL_READ_OFFSET, /* Parameters: Byte, LMC, Node */ 159 160 /* High level DRAM options */ 161 BDK_CONFIG_DRAM_VERBOSE, /* Parameters: Node */ 162 BDK_CONFIG_DRAM_BOOT_TEST, /* Parameters: Node */ 163 BDK_CONFIG_DRAM_CONFIG_GPIO, /* No parameters */ 164 BDK_CONFIG_DRAM_SCRAMBLE, /* No parameters */ 165 166 /* USB */ 167 BDK_CONFIG_USB_PWR_GPIO, /* Parameters: Node, Port */ 168 BDK_CONFIG_USB_PWR_GPIO_POLARITY, /* Parameters: Node, Port */ 169 BDK_CONFIG_USB_REFCLK_SRC, /* Parameters: Node, Port */ 170 171 /* Nitrox reset - For CN88XX SC and SNT part. High drives Nitrox DC_OK high */ 172 BDK_CONFIG_NITROX_GPIO, /* Parameters: Node */ 173 174 /* How EYE diagrams are captured from a QLM */ 175 BDK_CONFIG_EYE_ZEROS, /* No parameters */ 176 BDK_CONFIG_EYE_SAMPLE_TIME, /* No parameters */ 177 BDK_CONFIG_EYE_SETTLE_TIME, /* No parameters */ 178 179 /* SGPIO */ 180 BDK_CONFIG_SGPIO_SCLOCK_FREQ, /* Parameters: Node */ 181 BDK_CONFIG_SGPIO_PIN_POWER, /* Parameters: Node */ 182 BDK_CONFIG_SGPIO_PIN_SCLOCK, /* Parameters: Node */ 183 BDK_CONFIG_SGPIO_PIN_SLOAD, /* Parameters: Node */ 184 BDK_CONFIG_SGPIO_PIN_SDATAOUT, /* Parameters: Node, Dataline */ 185 186 /* VRM temperature throttling */ 187 BDK_CONFIG_VRM_TEMP_TRIP, /* Parameters: Node */ 188 BDK_CONFIG_VRM_TEMP_HIGH, /* Parameters: Node */ 189 BDK_CONFIG_VRM_TEMP_LOW, /* Parameters: Node */ 190 BDK_CONFIG_VRM_THROTTLE_NORMAL, /* Parameters: Node */ 191 BDK_CONFIG_VRM_THROTTLE_THERM, /* Parameters: Node */ 192 193 /* Generic GPIO, unrelated to a specific block */ 194 BDK_CONFIG_GPIO_PIN_SELECT, /* Parameters: GPIO, Node */ 195 BDK_CONFIG_GPIO_POLARITY, /* Parameters: GPIO, Node */ 196 197 /* PBUS */ 198 BDK_CONFIG_PBUS_CFG, /* Parameters: Region, Node */ 199 BDK_CONFIG_PBUS_TIM, /* Parameters: Region, Node */ 200 201 /* Trusted boot information */ 202 BDK_CONFIG_TRUST_CSIB, /* No parameters */ 203 BDK_CONFIG_TRUST_ROT_ADDR, /* No parameters */ 204 BDK_CONFIG_TRUST_BSSK_ADDR, /* No parameters */ 205 206 __BDK_CONFIG_END 207 } bdk_config_t; 208 209 /** 210 * Get an integer configuration item 211 * 212 * @param cfg_item Config item to get. If the item takes parameters (see bdk_config_t), then the 213 * parameters are listed following cfg_item. 214 * 215 * @return The value of the configuration item, or def_value if the item is not set 216 */ 217 int64_t bdk_config_get_int(bdk_config_t cfg_item, ...); 218 219 /** 220 * Set an integer configuration item. Note this only sets the item in memory, 221 * persistent storage is not updated. 222 * 223 * @param value Configuration item value 224 * @param cfg_item Config item to set. If the item takes parameters (see bdk_config_t), then the 225 * parameters are listed following cfg_item. 226 */ 227 void bdk_config_set_int(int64_t value, bdk_config_t cfg_item, ...); 228 229 /** 230 * Get a string configuration item 231 * 232 * @param cfg_item Config item to get. If the item takes parameters (see bdk_config_t), then the 233 * parameters are listed following cfg_item. 234 * 235 * @return The value of the configuration item, or def_value if the item is not set 236 */ 237 const char *bdk_config_get_str(bdk_config_t cfg_item, ...); 238 239 /** 240 * Set the device tree used for configuration 241 * 242 * @param fdt Device tree to use. Memory is assumed to be from malloc() and bdk_config takes 243 * over ownership on success 244 * 245 * @return Zero on success, negative on failure 246 */ 247 int bdk_config_set_fdt(const struct bdk_devicetree_key_value *fdt); 248 249 typedef enum 250 { 251 BDK_CONFIG_TYPE_INT, 252 BDK_CONFIG_TYPE_STR, 253 BDK_CONFIG_TYPE_STR_LIST, 254 BDK_CONFIG_TYPE_BINARY, 255 } bdk_config_type_t; 256 257 typedef struct 258 { 259 const char *format; /* Printf style format string to create the item name */ 260 const bdk_config_type_t ctype;/* Type of this item */ 261 int64_t default_value; /* Default value when no present. String defaults are cast to pointers from this */ 262 const int64_t min_value;/* Minimum valid value for INT parameters. Unused for Strings */ 263 const int64_t max_value;/* Maximum valid value for INT parameters. Unused for Strings */ 264 } bdk_config_info_t; 265 266 extern bdk_config_info_t config_info[]; 267 268 /** @} */ 269 #endif /* !__CB_BDK_CONFIG_H__ */ 270