mb/system76/cml-u/dt: Make use of chipset devicetree
[coreboot.git] / src / soc / intel / braswell / chip.c
blob407b6ea0184848f6e97d806caddda6e4ffda6375
1 /* SPDX-License-Identifier: GPL-2.0-only */
3 #include <console/console.h>
4 #include <device/device.h>
5 #include <device/pci.h>
6 #include <device/pci_ops.h>
7 #include <fsp/util.h>
8 #include <soc/pci_devs.h>
9 #include <soc/ramstage.h>
11 #include "chip.h"
13 static struct device_operations pci_domain_ops = {
14 .read_resources = pci_domain_read_resources,
15 .set_resources = pci_domain_set_resources,
16 .scan_bus = pci_host_bridge_scan_bus,
19 static struct device_operations cpu_bus_ops = {
20 .read_resources = noop_read_resources,
21 .set_resources = noop_set_resources,
22 .init = mp_cpu_bus_init,
25 static void enable_dev(struct device *dev)
27 /* Set the operations if it is a special bus type */
28 if (dev->path.type == DEVICE_PATH_DOMAIN) {
29 dev->ops = &pci_domain_ops;
31 } else if (dev->path.type == DEVICE_PATH_CPU_CLUSTER) {
32 dev->ops = &cpu_bus_ops;
34 } else if (dev->path.type == DEVICE_PATH_PCI) {
35 /* Handle south cluster enablement. */
36 if (PCI_SLOT(dev->path.pci.devfn) > GFX_DEV &&
37 (dev->ops == NULL || dev->ops->enable == NULL)) {
38 southcluster_enable_dev(dev);
43 __weak void board_silicon_USB2_override(SILICON_INIT_UPD *params)
47 void soc_silicon_init_params(SILICON_INIT_UPD *params)
49 struct device *dev = pcidev_on_root(LPC_DEV, LPC_FUNC);
50 struct soc_intel_braswell_config *config;
52 if (!dev) {
53 printk(BIOS_ERR, "Error! Device (%s) not found, %s!\n",
54 dev_path(dev), __func__);
55 return;
58 config = config_of(dev);
60 /* Set the parameters for SiliconInit */
61 printk(BIOS_DEBUG, "Updating UPD values for SiliconInit\n");
62 params->PcdSdcardMode = config->PcdSdcardMode;
63 params->PcdEnableHsuart0 = config->PcdEnableHsuart0;
64 params->PcdEnableHsuart1 = config->PcdEnableHsuart1;
65 params->PcdEnableAzalia = config->PcdEnableAzalia;
66 params->PcdEnableSata = config->PcdEnableSata;
67 params->PcdEnableXhci = config->PcdEnableXhci;
68 params->PcdEnableLpe = config->PcdEnableLpe;
69 params->PcdEnableDma0 = config->PcdEnableDma0;
70 params->PcdEnableDma1 = config->PcdEnableDma1;
71 params->PcdEnableI2C0 = config->PcdEnableI2C0;
72 params->PcdEnableI2C1 = config->PcdEnableI2C1;
73 params->PcdEnableI2C2 = config->PcdEnableI2C2;
74 params->PcdEnableI2C3 = config->PcdEnableI2C3;
75 params->PcdEnableI2C4 = config->PcdEnableI2C4;
76 params->PcdEnableI2C5 = config->PcdEnableI2C5;
77 params->PcdEnableI2C6 = config->PcdEnableI2C6;
78 params->GraphicsConfigPtr = 0;
79 params->AzaliaConfigPtr = 0;
80 params->PunitPwrConfigDisable = config->PunitPwrConfigDisable;
81 params->ChvSvidConfig = config->ChvSvidConfig;
82 params->DptfDisable = !is_devfn_enabled(PCI_DEVFN(PUNIT_DEV, 0));
83 params->PcdEmmcMode = config->PcdEmmcMode;
84 params->PcdUsb3ClkSsc = 1;
85 params->PcdDispClkSsc = 1;
86 params->PcdSataClkSsc = 1;
88 params->Usb2Port0PerPortPeTxiSet = config->Usb2Port0PerPortPeTxiSet;
89 params->Usb2Port0PerPortTxiSet = config->Usb2Port0PerPortTxiSet;
90 params->Usb2Port0IUsbTxEmphasisEn = config->Usb2Port0IUsbTxEmphasisEn;
91 params->Usb2Port0PerPortTxPeHalf = config->Usb2Port0PerPortTxPeHalf;
93 params->Usb2Port1PerPortPeTxiSet = config->Usb2Port1PerPortPeTxiSet;
94 params->Usb2Port1PerPortTxiSet = config->Usb2Port1PerPortTxiSet;
95 params->Usb2Port1IUsbTxEmphasisEn = config->Usb2Port1IUsbTxEmphasisEn;
96 params->Usb2Port1PerPortTxPeHalf = config->Usb2Port1PerPortTxPeHalf;
98 params->Usb2Port2PerPortPeTxiSet = config->Usb2Port2PerPortPeTxiSet;
99 params->Usb2Port2PerPortTxiSet = config->Usb2Port2PerPortTxiSet;
100 params->Usb2Port2IUsbTxEmphasisEn = config->Usb2Port2IUsbTxEmphasisEn;
101 params->Usb2Port2PerPortTxPeHalf = config->Usb2Port2PerPortTxPeHalf;
103 params->Usb2Port3PerPortPeTxiSet = config->Usb2Port3PerPortPeTxiSet;
104 params->Usb2Port3PerPortTxiSet = config->Usb2Port3PerPortTxiSet;
105 params->Usb2Port3IUsbTxEmphasisEn = config->Usb2Port3IUsbTxEmphasisEn;
106 params->Usb2Port3PerPortTxPeHalf = config->Usb2Port3PerPortTxPeHalf;
108 params->Usb2Port4PerPortPeTxiSet = config->Usb2Port4PerPortPeTxiSet;
109 params->Usb2Port4PerPortTxiSet = config->Usb2Port4PerPortTxiSet;
110 params->Usb2Port4IUsbTxEmphasisEn = config->Usb2Port4IUsbTxEmphasisEn;
111 params->Usb2Port4PerPortTxPeHalf = config->Usb2Port4PerPortTxPeHalf;
113 params->Usb3Lane0Ow2tapgen2deemph3p5 = config->Usb3Lane0Ow2tapgen2deemph3p5;
114 params->Usb3Lane1Ow2tapgen2deemph3p5 = config->Usb3Lane1Ow2tapgen2deemph3p5;
115 params->Usb3Lane2Ow2tapgen2deemph3p5 = config->Usb3Lane2Ow2tapgen2deemph3p5;
116 params->Usb3Lane3Ow2tapgen2deemph3p5 = config->Usb3Lane3Ow2tapgen2deemph3p5;
118 params->PcdSataInterfaceSpeed = 3;
119 params->PcdPchUsbSsicPort = config->PcdPchUsbSsicPort;
120 params->PcdPchUsbHsicPort = config->PcdPchUsbHsicPort;
121 params->PcdPcieRootPortSpeed = 0;
122 params->PcdPchSsicEnable = config->PcdPchSsicEnable;
123 params->PcdRtcLock = 0;
124 params->PMIC_I2CBus = config->PMIC_I2CBus;
125 params->ISPEnable = config->ISPEnable;
126 params->ISPPciDevConfig = config->ISPPciDevConfig;
127 params->PcdSdDetectChk = config->PcdSdDetectChk;
128 params->I2C0Frequency = config->I2C0Frequency;
129 params->I2C1Frequency = config->I2C1Frequency;
130 params->I2C2Frequency = config->I2C2Frequency;
131 params->I2C3Frequency = config->I2C3Frequency;
132 params->I2C4Frequency = config->I2C4Frequency;
133 params->I2C5Frequency = config->I2C5Frequency;
134 params->I2C6Frequency = config->I2C6Frequency;
136 board_silicon_USB2_override(params);
139 void soc_display_silicon_init_params(const SILICON_INIT_UPD *old, SILICON_INIT_UPD *new)
141 /* Display the parameters for SiliconInit */
142 printk(BIOS_SPEW, "UPD values for SiliconInit:\n");
144 fsp_display_upd_value("PcdSdcardMode", 1,
145 old->PcdSdcardMode,
146 new->PcdSdcardMode);
147 fsp_display_upd_value("PcdEnableHsuart0", 1,
148 old->PcdEnableHsuart0,
149 new->PcdEnableHsuart0);
150 fsp_display_upd_value("PcdEnableHsuart1", 1,
151 old->PcdEnableHsuart1,
152 new->PcdEnableHsuart1);
153 fsp_display_upd_value("PcdEnableAzalia", 1,
154 old->PcdEnableAzalia,
155 new->PcdEnableAzalia);
156 fsp_display_upd_value("AzaliaConfigPtr", 4,
157 (uint32_t)old->AzaliaConfigPtr,
158 (uint32_t)new->AzaliaConfigPtr);
160 fsp_display_upd_value("PcdEnableSata", 1, old->PcdEnableSata, new->PcdEnableSata);
161 fsp_display_upd_value("PcdEnableXhci", 1, old->PcdEnableXhci, new->PcdEnableXhci);
162 fsp_display_upd_value("PcdEnableLpe", 1, old->PcdEnableLpe, new->PcdEnableLpe);
163 fsp_display_upd_value("PcdEnableDma0", 1, old->PcdEnableDma0, new->PcdEnableDma0);
164 fsp_display_upd_value("PcdEnableDma1", 1, old->PcdEnableDma1, new->PcdEnableDma1);
165 fsp_display_upd_value("PcdEnableI2C0", 1, old->PcdEnableI2C0, new->PcdEnableI2C0);
166 fsp_display_upd_value("PcdEnableI2C1", 1, old->PcdEnableI2C1, new->PcdEnableI2C1);
167 fsp_display_upd_value("PcdEnableI2C2", 1, old->PcdEnableI2C2, new->PcdEnableI2C2);
168 fsp_display_upd_value("PcdEnableI2C3", 1, old->PcdEnableI2C3, new->PcdEnableI2C3);
169 fsp_display_upd_value("PcdEnableI2C4", 1, old->PcdEnableI2C4, new->PcdEnableI2C4);
170 fsp_display_upd_value("PcdEnableI2C5", 1, old->PcdEnableI2C5, new->PcdEnableI2C5);
171 fsp_display_upd_value("PcdEnableI2C6", 1, old->PcdEnableI2C6, new->PcdEnableI2C6);
173 fsp_display_upd_value("PcdGraphicsConfigPtr", 4,
174 old->GraphicsConfigPtr,
175 new->GraphicsConfigPtr);
176 fsp_display_upd_value("GpioFamilyInitTablePtr", 4,
177 (uint32_t)old->GpioFamilyInitTablePtr,
178 (uint32_t)new->GpioFamilyInitTablePtr);
179 fsp_display_upd_value("GpioPadInitTablePtr", 4,
180 (uint32_t)old->GpioPadInitTablePtr,
181 (uint32_t)new->GpioPadInitTablePtr);
182 fsp_display_upd_value("PunitPwrConfigDisable", 1,
183 old->PunitPwrConfigDisable,
184 new->PunitPwrConfigDisable);
186 fsp_display_upd_value("ChvSvidConfig", 1, old->ChvSvidConfig, new->ChvSvidConfig);
187 fsp_display_upd_value("DptfDisable", 1, old->DptfDisable, new->DptfDisable);
188 fsp_display_upd_value("PcdEmmcMode", 1, old->PcdEmmcMode, new->PcdEmmcMode);
189 fsp_display_upd_value("PcdUsb3ClkSsc", 1, old->PcdUsb3ClkSsc, new->PcdUsb3ClkSsc);
190 fsp_display_upd_value("PcdDispClkSsc", 1, old->PcdDispClkSsc, new->PcdDispClkSsc);
191 fsp_display_upd_value("PcdSataClkSsc", 1, old->PcdSataClkSsc, new->PcdSataClkSsc);
193 fsp_display_upd_value("Usb2Port0PerPortPeTxiSet", 1,
194 old->Usb2Port0PerPortPeTxiSet,
195 new->Usb2Port0PerPortPeTxiSet);
196 fsp_display_upd_value("Usb2Port0PerPortTxiSet", 1,
197 old->Usb2Port0PerPortTxiSet,
198 new->Usb2Port0PerPortTxiSet);
199 fsp_display_upd_value("Usb2Port0IUsbTxEmphasisEn", 1,
200 old->Usb2Port0IUsbTxEmphasisEn,
201 new->Usb2Port0IUsbTxEmphasisEn);
202 fsp_display_upd_value("Usb2Port0PerPortTxPeHalf", 1,
203 old->Usb2Port0PerPortTxPeHalf,
204 new->Usb2Port0PerPortTxPeHalf);
205 fsp_display_upd_value("Usb2Port1PerPortPeTxiSet", 1,
206 old->Usb2Port1PerPortPeTxiSet,
207 new->Usb2Port1PerPortPeTxiSet);
208 fsp_display_upd_value("Usb2Port1PerPortTxiSet", 1,
209 old->Usb2Port1PerPortTxiSet,
210 new->Usb2Port1PerPortTxiSet);
211 fsp_display_upd_value("Usb2Port1IUsbTxEmphasisEn", 1,
212 old->Usb2Port1IUsbTxEmphasisEn,
213 new->Usb2Port1IUsbTxEmphasisEn);
214 fsp_display_upd_value("Usb2Port1PerPortTxPeHalf", 1,
215 old->Usb2Port1PerPortTxPeHalf,
216 new->Usb2Port1PerPortTxPeHalf);
217 fsp_display_upd_value("Usb2Port2PerPortPeTxiSet", 1,
218 old->Usb2Port2PerPortPeTxiSet,
219 new->Usb2Port2PerPortPeTxiSet);
220 fsp_display_upd_value("Usb2Port2PerPortTxiSet", 1,
221 old->Usb2Port2PerPortTxiSet,
222 new->Usb2Port2PerPortTxiSet);
223 fsp_display_upd_value("Usb2Port2IUsbTxEmphasisEn", 1,
224 old->Usb2Port2IUsbTxEmphasisEn,
225 new->Usb2Port2IUsbTxEmphasisEn);
226 fsp_display_upd_value("Usb2Port2PerPortTxPeHalf", 1,
227 old->Usb2Port2PerPortTxPeHalf,
228 new->Usb2Port2PerPortTxPeHalf);
229 fsp_display_upd_value("Usb2Port3PerPortPeTxiSet", 1,
230 old->Usb2Port3PerPortPeTxiSet,
231 new->Usb2Port3PerPortPeTxiSet);
232 fsp_display_upd_value("Usb2Port3PerPortTxiSet", 1,
233 old->Usb2Port3PerPortTxiSet,
234 new->Usb2Port3PerPortTxiSet);
235 fsp_display_upd_value("Usb2Port3IUsbTxEmphasisEn", 1,
236 old->Usb2Port3IUsbTxEmphasisEn,
237 new->Usb2Port3IUsbTxEmphasisEn);
238 fsp_display_upd_value("Usb2Port3PerPortTxPeHalf", 1,
239 old->Usb2Port3PerPortTxPeHalf,
240 new->Usb2Port3PerPortTxPeHalf);
241 fsp_display_upd_value("Usb2Port4PerPortPeTxiSet", 1,
242 old->Usb2Port4PerPortPeTxiSet,
243 new->Usb2Port4PerPortPeTxiSet);
244 fsp_display_upd_value("Usb2Port4PerPortTxiSet", 1,
245 old->Usb2Port4PerPortTxiSet,
246 new->Usb2Port4PerPortTxiSet);
247 fsp_display_upd_value("Usb2Port4IUsbTxEmphasisEn", 1,
248 old->Usb2Port4IUsbTxEmphasisEn,
249 new->Usb2Port4IUsbTxEmphasisEn);
250 fsp_display_upd_value("Usb2Port4PerPortTxPeHalf", 1,
251 old->Usb2Port4PerPortTxPeHalf,
252 new->Usb2Port4PerPortTxPeHalf);
253 fsp_display_upd_value("Usb3Lane0Ow2tapgen2deemph3p5", 1,
254 old->Usb3Lane0Ow2tapgen2deemph3p5,
255 new->Usb3Lane0Ow2tapgen2deemph3p5);
256 fsp_display_upd_value("Usb3Lane1Ow2tapgen2deemph3p5", 1,
257 old->Usb3Lane1Ow2tapgen2deemph3p5,
258 new->Usb3Lane1Ow2tapgen2deemph3p5);
259 fsp_display_upd_value("Usb3Lane2Ow2tapgen2deemph3p5", 1,
260 old->Usb3Lane2Ow2tapgen2deemph3p5,
261 new->Usb3Lane2Ow2tapgen2deemph3p5);
262 fsp_display_upd_value("Usb3Lane3Ow2tapgen2deemph3p5", 1,
263 old->Usb3Lane3Ow2tapgen2deemph3p5,
264 new->Usb3Lane3Ow2tapgen2deemph3p5);
265 fsp_display_upd_value("PcdSataInterfaceSpeed", 1,
266 old->PcdSataInterfaceSpeed,
267 new->PcdSataInterfaceSpeed);
268 fsp_display_upd_value("PcdPchUsbSsicPort", 1,
269 old->PcdPchUsbSsicPort,
270 new->PcdPchUsbSsicPort);
271 fsp_display_upd_value("PcdPchUsbHsicPort", 1,
272 old->PcdPchUsbHsicPort,
273 new->PcdPchUsbHsicPort);
274 fsp_display_upd_value("PcdPcieRootPortSpeed", 1,
275 old->PcdPcieRootPortSpeed,
276 new->PcdPcieRootPortSpeed);
277 fsp_display_upd_value("PcdPchSsicEnable", 1,
278 old->PcdPchSsicEnable,
279 new->PcdPchSsicEnable);
281 fsp_display_upd_value("PcdLogoPtr", 4, old->PcdLogoPtr, new->PcdLogoPtr);
282 fsp_display_upd_value("PcdLogoSize", 4, old->PcdLogoSize, new->PcdLogoSize);
283 fsp_display_upd_value("PcdRtcLock", 1, old->PcdRtcLock, new->PcdRtcLock);
284 fsp_display_upd_value("PMIC_I2CBus", 1, old->PMIC_I2CBus, new->PMIC_I2CBus);
285 fsp_display_upd_value("ISPEnable", 1, old->ISPEnable, new->ISPEnable);
286 fsp_display_upd_value("ISPPciDevConfig", 1, old->ISPPciDevConfig, new->ISPPciDevConfig);
287 fsp_display_upd_value("PcdSdDetectChk", 1, old->PcdSdDetectChk, new->PcdSdDetectChk);
290 /* Called at BS_DEV_INIT_CHIPS time -- very early. Just after BS_PRE_DEVICE. */
291 static void soc_init(void *chip_info)
293 soc_init_pre_device(chip_info);
296 struct chip_operations soc_intel_braswell_ops = {
297 .name = "Intel Braswell SoC",
298 .enable_dev = enable_dev,
299 .init = soc_init,
302 struct pci_operations soc_pci_ops = {
303 .set_subsystem = &pci_dev_set_subsystem,
307 Return SoC stepping type
309 @retval SOC_STEPPING SoC stepping type
311 int SocStepping(void)
313 struct device *dev = pcidev_on_root(LPC_DEV, LPC_FUNC);
314 const u8 revid = pci_read_config8(dev, 0x8);
316 switch (revid & B_PCH_LPC_RID_STEPPING_MASK) {
317 case V_PCH_LPC_RID_A0:
318 return SocA0;
319 case V_PCH_LPC_RID_A1:
320 return SocA1;
321 case V_PCH_LPC_RID_A2:
322 return SocA2;
323 case V_PCH_LPC_RID_A3:
324 return SocA3;
325 case V_PCH_LPC_RID_A4:
326 return SocA4;
327 case V_PCH_LPC_RID_A5:
328 return SocA5;
329 case V_PCH_LPC_RID_A6:
330 return SocA6;
331 case V_PCH_LPC_RID_A7:
332 return SocA7;
333 case V_PCH_LPC_RID_B0:
334 return SocB0;
335 case V_PCH_LPC_RID_B1:
336 return SocB1;
337 case V_PCH_LPC_RID_B2:
338 return SocB2;
339 case V_PCH_LPC_RID_B3:
340 return SocB3;
341 case V_PCH_LPC_RID_B4:
342 return SocB4;
343 case V_PCH_LPC_RID_B5:
344 return SocB5;
345 case V_PCH_LPC_RID_B6:
346 return SocB6;
347 case V_PCH_LPC_RID_B7:
348 return SocB7;
349 case V_PCH_LPC_RID_C0:
350 return SocC0;
351 case V_PCH_LPC_RID_C1:
352 return SocC1;
353 case V_PCH_LPC_RID_C2:
354 return SocC2;
355 case V_PCH_LPC_RID_C3:
356 return SocC3;
357 case V_PCH_LPC_RID_C4:
358 return SocC4;
359 case V_PCH_LPC_RID_C5:
360 return SocC5;
361 case V_PCH_LPC_RID_C6:
362 return SocC6;
363 case V_PCH_LPC_RID_C7:
364 return SocC7;
365 case V_PCH_LPC_RID_D0:
366 return SocD0;
367 case V_PCH_LPC_RID_D1:
368 return SocD1;
369 case V_PCH_LPC_RID_D2:
370 return SocD2;
371 case V_PCH_LPC_RID_D3:
372 return SocD3;
373 case V_PCH_LPC_RID_D4:
374 return SocD4;
375 case V_PCH_LPC_RID_D5:
376 return SocD5;
377 case V_PCH_LPC_RID_D6:
378 return SocD6;
379 case V_PCH_LPC_RID_D7:
380 return SocD7;
381 default:
382 return SocSteppingMax;