coreboot
coreboot is an Open Source project aimed at replacing the proprietary BIOS found in most computers.
mainboard.c
Go to the documentation of this file.
1 /* SPDX-License-Identifier: GPL-2.0-only */
2 
3 #include <stdint.h>
6 #include "baseboard/variants.h"
7 #include <soc/cpu.h>
9 #include <soc/gpio.h>
10 
11 enum {
40 };
41 
43 {
44  static int sku = -1;
45 
46  if (sku == -1)
48 
49  return sku;
50 }
51 
52 void variant_nhlt_oem_overrides(const char **oem_id,
53  const char **oem_table_id,
54  uint32_t *oem_revision)
55 {
56  *oem_id = "coral";
57  *oem_table_id = CONFIG_VARIANT_DIR;
58  *oem_revision = variant_board_sku();
59 }
60 
61 #define DW_I2C_SPEED_CONFIG(speedval, lcnt, hcnt, hold) \
62  { \
63  .speed = I2C_SPEED_ ## speedval, \
64  .scl_lcnt = (lcnt), \
65  .scl_hcnt = (hcnt), \
66  .sda_hold = (hold), \
67  }
68 
69 static const struct dw_i2c_speed_config
70 rabbid_i2c_speed_config = DW_I2C_SPEED_CONFIG(FAST, 210, 107, 47);
71 
72 static const struct dw_i2c_speed_config
74 
75 static const struct dw_i2c_speed_config
77 
79 {
80  /* Override dev tree settings per board */
81  struct soc_intel_apollolake_config *cfg = dev->chip_info;
83 
85 
86  switch (sku_id) {
87  case SKU_0_ASTRONAUT:
88  case SKU_1_ASTRONAUT:
89  cfg->usb2eye[1].Usb20PerPortPeTxiSet = 7;
90  cfg->usb2eye[1].Usb20PerPortTxiSet = 2;
91  break;
92  case SKU_2_SANTA:
93  case SKU_3_SANTA:
94  cfg->usb2eye[1].Usb20PerPortPeTxiSet = 7;
95  cfg->usb2eye[1].Usb20PerPortTxiSet = 2;
96  break;
97  case SKU_4_LAVA:
98  case SKU_5_LAVA:
99  case SKU_9_LAVA:
100  case SKU_10_LAVA:
101  cfg->usb2eye[1].Usb20PerPortPeTxiSet = 7;
102  cfg->usb2eye[1].Usb20PerPortTxiSet = 2;
103  break;
105  case SKU_31_RABBID:
106  case SKU_32_RABBID:
109  break;
110  case SKU_30_BABYTIGER:
111  case SKU_33_BABYTIGER:
114  break;
115  case SKU_52_BABYMEGA:
116  case SKU_53_BABYMEGA:
118  break;
119  case SKU_61_ASTRONAUT:
120  case SKU_62_ASTRONAUT:
121  cfg->usb2eye[1].Usb20PerPortPeTxiSet = 7;
122  cfg->usb2eye[1].Usb20PerPortTxiSet = 5;
123  break;
124  default:
125  break;
126  }
127 }
128 const char *mainboard_vbt_filename(void)
129 {
130  int sku_id = variant_board_sku();
131  switch (sku_id) {
132  case SKU_0_ASTRONAUT:
133  case SKU_1_ASTRONAUT:
134  return "vbt-astronaut.bin";
135  case SKU_2_SANTA:
136  case SKU_3_SANTA:
137  return "vbt-santa.bin";
138  case SKU_13_EPAULETTE:
139  case SKU_14_EPAULETTE:
140  case SKU_15_EPAULETTE:
141  case SKU_16_EPAULETTE:
142  return "vbt-epaulette.bin";
144  return "vbt-rabbid_rugged.bin";
145  case SKU_30_BABYTIGER:
146  case SKU_33_BABYTIGER:
147  return "vbt-babytiger.bin";
148  case SKU_52_BABYMEGA:
149  case SKU_53_BABYMEGA:
150  return "vbt-babymega.bin";
151  case SKU_160_NASHER:
152  case SKU_161_NASHER:
153  case SKU_162_NASHER:
154  case SKU_163_NASHER360:
155  case SKU_164_NASHER360:
156  case SKU_165_NASHER360:
157  case SKU_166_NASHER360:
158  return "vbt-nasher.bin";
159  default:
160  return "vbt.bin";
161  }
162 }
163 
164 static const struct pad_config nasher_gpio_tables[] = {
165  /* AVS_DMIC_CLK_A1 */
166  PAD_CFG_NF_IOSSTATE(GPIO_79, NATIVE, DEEP, NF1, Tx1RxDCRx0),
167  /* AVS_DMIC_CLK_B1 */
168  PAD_CFG_NF_IOSSTATE(GPIO_80, NATIVE, DEEP, NF1, Tx1RxDCRx0),
169 };
170 
171 const struct pad_config *variant_sku_gpio_table(size_t *num)
172 {
173  int sku_id = variant_board_sku();
174  const struct pad_config *board_gpio_tables;
175 
176  switch (sku_id) {
177  case SKU_160_NASHER:
178  case SKU_161_NASHER:
179  case SKU_162_NASHER:
180  case SKU_163_NASHER360:
181  case SKU_164_NASHER360:
182  case SKU_165_NASHER360:
183  case SKU_166_NASHER360:
185  board_gpio_tables = nasher_gpio_tables;
186  break;
187  default:
188  *num = 0;
189  board_gpio_tables = NULL;
190  break;
191  }
192  return board_gpio_tables;
193 }
#define ARRAY_SIZE(a)
Definition: helpers.h:12
uint32_t google_chromeec_get_sku_id(void)
Definition: ec.c:934
uint8_t __weak variant_board_sku(void)
Definition: mainboard.c:172
uint32_t sku_id(void)
Definition: mainboard.c:11
void mainboard_devtree_update(struct device *dev)
Definition: mainboard.c:230
enum project_sku sku
Definition: mainboard.c:51
const char * mainboard_vbt_filename(void)
Definition: mainboard.c:177
void __weak variant_nhlt_oem_overrides(const char **oem_id, const char **oem_table_id, uint32_t *oem_revision)
Definition: mainboard.c:86
const struct pad_config __weak * variant_sku_gpio_table(size_t *num)
Definition: mainboard.c:20
static const struct dw_i2c_speed_config babytiger_i2c_speed_config
Definition: mainboard.c:76
static const struct dw_i2c_speed_config babymega_i2c_speed_config
Definition: mainboard.c:73
#define DW_I2C_SPEED_CONFIG(speedval, lcnt, hcnt, hold)
Definition: mainboard.c:61
@ SKU_10_LAVA
Definition: mainboard.c:19
@ SKU_33_BABYTIGER
Definition: mainboard.c:28
@ SKU_165_NASHER360
Definition: mainboard.c:38
@ SKU_32_RABBID
Definition: mainboard.c:27
@ SKU_52_BABYMEGA
Definition: mainboard.c:29
@ SKU_15_EPAULETTE
Definition: mainboard.c:22
@ SKU_160_NASHER
Definition: mainboard.c:33
@ SKU_31_RABBID
Definition: mainboard.c:26
@ SKU_30_BABYTIGER
Definition: mainboard.c:25
@ SKU_3_SANTA
Definition: mainboard.c:15
@ SKU_1_ASTRONAUT
Definition: mainboard.c:13
@ SKU_161_NASHER
Definition: mainboard.c:34
@ SKU_13_EPAULETTE
Definition: mainboard.c:20
@ SKU_14_EPAULETTE
Definition: mainboard.c:21
@ SKU_166_NASHER360
Definition: mainboard.c:39
@ SKU_9_LAVA
Definition: mainboard.c:18
@ SKU_163_NASHER360
Definition: mainboard.c:36
@ SKU_16_EPAULETTE
Definition: mainboard.c:23
@ SKU_5_LAVA
Definition: mainboard.c:17
@ SKU_2_SANTA
Definition: mainboard.c:14
@ SKU_164_NASHER360
Definition: mainboard.c:37
@ SKU_162_NASHER
Definition: mainboard.c:35
@ SKU_61_ASTRONAUT
Definition: mainboard.c:31
@ SKU_0_ASTRONAUT
Definition: mainboard.c:12
@ SKU_62_ASTRONAUT
Definition: mainboard.c:32
@ SKU_4_LAVA
Definition: mainboard.c:16
@ SKU_53_BABYMEGA
Definition: mainboard.c:30
@ SKU_28_RABBID_RUGGED
Definition: mainboard.c:24
static const struct pad_config nasher_gpio_tables[]
Definition: mainboard.c:164
static const struct dw_i2c_speed_config rabbid_i2c_speed_config
Definition: mainboard.c:70
#define GPIO_79
Definition: gpio.h:66
#define GPIO_80
Definition: gpio.h:67
#define PAD_CFG_NF_IOSSTATE(pad, pull, rst, func, iosstate)
Definition: gpio_defs.h:220
#define NULL
Definition: stddef.h:19
unsigned int uint32_t
Definition: stdint.h:14
unsigned char uint8_t
Definition: stdint.h:8
Definition: device.h:107
DEVTREE_CONST void * chip_info
Definition: device.h:164
struct dw_i2c_speed_config speed_config[DW_I2C_SPEED_CONFIG_COUNT]
Definition: dw_i2c.h:62
struct usb2_eye_per_port usb2eye[APOLLOLAKE_USB2_PORT_MAX]
Definition: chip.h:136
struct soc_intel_common_config common_soc_config
Definition: chip.h:31
struct dw_i2c_bus_config i2c[CONFIG_SOC_INTEL_I2C_DEV_MAX]
Definition: cfg.h:24
uint8_t Usb20PerPortTxiSet
Definition: usb.h:19
uint8_t Usb20PerPortPeTxiSet
Definition: usb.h:18