• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /* SPDX-License-Identifier: GPL-2.0-only */
2 
3 #include <stdint.h>
4 #include <drivers/intel/gma/opregion.h>
5 #include <ec/google/chromeec/ec.h>
6 #include "baseboard/variants.h"
7 #include <soc/cpu.h>
8 #include <soc/intel/apollolake/chip.h>
9 #include <soc/gpio.h>
10 
11 enum {
12 	SKU_0_ASTRONAUT = 0,
13 	SKU_1_ASTRONAUT = 1,
14 	SKU_2_SANTA = 2,
15 	SKU_3_SANTA = 3,
16 	SKU_4_LAVA = 4,
17 	SKU_5_LAVA = 5,
18 	SKU_9_LAVA = 9,
19 	SKU_10_LAVA = 10,
20 	SKU_13_EPAULETTE = 13,
21 	SKU_14_EPAULETTE = 14,
22 	SKU_15_EPAULETTE = 15,
23 	SKU_16_EPAULETTE = 16,
24 	SKU_28_RABBID_RUGGED = 28,
25 	SKU_30_BABYTIGER = 30,
26 	SKU_31_RABBID = 31,
27 	SKU_32_RABBID = 32,
28 	SKU_33_BABYTIGER = 33,
29 	SKU_52_BABYMEGA = 52,
30 	SKU_53_BABYMEGA = 53,
31 	SKU_61_ASTRONAUT = 61,
32 	SKU_62_ASTRONAUT = 62,
33 	SKU_160_NASHER = 160,
34 	SKU_161_NASHER = 161,
35 	SKU_162_NASHER = 162,
36 	SKU_163_NASHER360 = 163,
37 	SKU_164_NASHER360 = 164,
38 	SKU_165_NASHER360 = 165,
39 	SKU_166_NASHER360 = 166,
40 };
41 
variant_board_sku(void)42 uint8_t variant_board_sku(void)
43 {
44 	static int sku = -1;
45 
46 	if (sku == -1)
47 		sku = google_chromeec_get_sku_id();
48 
49 	return sku;
50 }
51 
variant_nhlt_oem_overrides(const char ** oem_id,const char ** oem_table_id,uint32_t * oem_revision)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
73 babymega_i2c_speed_config = DW_I2C_SPEED_CONFIG(FAST, 210, 107, 47);
74 
75 static const struct dw_i2c_speed_config
76 babytiger_i2c_speed_config = DW_I2C_SPEED_CONFIG(FAST, 210, 107, 47);
77 
mainboard_devtree_update(struct device * dev)78 void mainboard_devtree_update(struct device *dev)
79 {
80        /* Override dev tree settings per board */
81 	struct soc_intel_apollolake_config *cfg = dev->chip_info;
82 	uint8_t sku_id;
83 
84 	sku_id = variant_board_sku();
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;
104 	case SKU_28_RABBID_RUGGED:
105 	case SKU_31_RABBID:
106 	case SKU_32_RABBID:
107 		cfg->common_soc_config.i2c[3].speed_config[0] = rabbid_i2c_speed_config;
108 		cfg->common_soc_config.i2c[4].speed_config[0] = rabbid_i2c_speed_config;
109 		break;
110 	case SKU_30_BABYTIGER:
111 	case SKU_33_BABYTIGER:
112 		cfg->common_soc_config.i2c[3].speed_config[0] = babytiger_i2c_speed_config;
113 		cfg->common_soc_config.i2c[4].speed_config[0] = babytiger_i2c_speed_config;
114 		break;
115 	case SKU_52_BABYMEGA:
116 	case SKU_53_BABYMEGA:
117 		cfg->common_soc_config.i2c[4].speed_config[0] = babymega_i2c_speed_config;
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 }
mainboard_vbt_filename(void)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";
143 	case SKU_28_RABBID_RUGGED:
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 
variant_sku_gpio_table(size_t * num)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:
184 		*num = ARRAY_SIZE(nasher_gpio_tables);
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 }
194