xref: /aosp_15_r20/external/coreboot/src/vendorcode/cavium/include/bdk/libbdk-hal/bdk-config.h (revision b9411a12aaaa7e1e6a6fb7c5e057f44ee179a49c)
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