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 <baseboard/variants.h>
4 #include <chip.h>
5 #include <arch/io.h>
6 #include <device/device.h>
7 #include <device/pci_ops.h>
8 #include <smbios.h>
9 #include <string.h>
10 #include <variant/sku.h>
11 
12 #define R_PCH_OC_WDT_CTL 0x54
13 #define B_PCH_OC_WDT_CTL_FORCE_ALL BIT15
14 #define B_PCH_OC_WDT_CTL_EN BIT14
15 #define B_PCH_OC_WDT_CTL_UNXP_RESET_STS BIT22
16 
17 const char *smbios_system_sku(void)
18 {
19  static char sku_str[5]; /* sku{0-1} */
20 
21  snprintf(sku_str, sizeof(sku_str), "sku%u", variant_board_sku());
22 
23  return sku_str;
24 }
25 
26 /* Override dev tree settings per board */
28 {
30  uint16_t abase;
31  uint32_t val32;
32 
33  config_t *cfg = config_of_soc();
34 
35  switch (sku_id) {
36  case SKU_0_NAUTILUS:
37  /* Disable LTE module */
38  cfg->usb3_ports[3].enable = 0;
39 
40  /* OC_WDT has been enabled in FSP-M by enabling SaOcSupport.
41  * We should clear it to prevent turning the system off. */
42  abase = pci_read_config16(PCH_DEV_PMC, ABASE) & 0xfffc;
43  val32 = inl(abase + R_PCH_OC_WDT_CTL);
44  val32 &= ~(B_PCH_OC_WDT_CTL_EN |
47  outl(val32, abase + R_PCH_OC_WDT_CTL);
48  break;
49 
50  case SKU_1_NAUTILUS_LTE:
51  /* LTE board has different layout with Wifi sku, it need
52  new USB2 port strength settings */
53 
54  /* Configure USB2 port 0 - USB2_PORT_TYPE_C(OC1) */
55  cfg->usb2_ports[0].enable = 1;
56  cfg->usb2_ports[0].ocpin = OC1;
57  cfg->usb2_ports[0].tx_bias = USB2_BIAS_0MV;
58  cfg->usb2_ports[0].tx_emp_enable = USB2_PRE_EMP_ON;
59  cfg->usb2_ports[0].pre_emp_bias = USB2_BIAS_56MV;
60  cfg->usb2_ports[0].pre_emp_bit = USB2_HALF_BIT_PRE_EMP;
61 
62  /* Configure USB2 port 1 - USB2_PORT_LONG(OC2) */
63  cfg->usb2_ports[1].enable = 1;
64  cfg->usb2_ports[1].ocpin = OC2;
65  cfg->usb2_ports[1].tx_bias = USB2_BIAS_39MV;
66  cfg->usb2_ports[1].tx_emp_enable = USB2_PRE_EMP_ON;
67  cfg->usb2_ports[1].pre_emp_bias = USB2_BIAS_56MV;
68  cfg->usb2_ports[1].pre_emp_bit = USB2_HALF_BIT_PRE_EMP;
69 
70  /* Configure USB2 port 4 - USB2_PORT_TYPE_C(OC0) */
71  cfg->usb2_ports[4].enable = 1;
72  cfg->usb2_ports[4].ocpin = OC0;
73  cfg->usb2_ports[4].tx_bias = USB2_BIAS_0MV;
74  cfg->usb2_ports[4].tx_emp_enable = USB2_PRE_EMP_ON;
75  cfg->usb2_ports[4].pre_emp_bias = USB2_BIAS_56MV;
76  cfg->usb2_ports[4].pre_emp_bit = USB2_HALF_BIT_PRE_EMP;
77 
78  /* Override SlowSlewRate settings */
79  cfg->SlowSlewRateForIa = 0;
80  cfg->SlowSlewRateForGt = 0;
81  cfg->SlowSlewRateForSa = 0;
82  break;
83 
84  default:
85  break;
86  }
87 }
u32 inl(u16 port)
void outl(u32 val, u16 port)
void __weak variant_devtree_update(void)
Definition: mainboard.c:86
const char * smbios_system_sku(void)
Definition: mainboard.c:174
uint8_t __weak variant_board_sku(void)
Definition: mainboard.c:172
uint32_t sku_id(void)
Definition: mainboard.c:11
#define B_PCH_OC_WDT_CTL_FORCE_ALL
Definition: mainboard.c:13
#define B_PCH_OC_WDT_CTL_EN
Definition: mainboard.c:14
#define R_PCH_OC_WDT_CTL
Definition: mainboard.c:12
#define B_PCH_OC_WDT_CTL_UNXP_RESET_STS
Definition: mainboard.c:15
#define config_of_soc()
Definition: device.h:394
static __always_inline u16 pci_read_config16(const struct device *dev, u16 reg)
Definition: pci_ops.h:52
#define ABASE
Definition: pmc.h:11
#define SKU_0_NAUTILUS
Definition: sku.h:7
#define SKU_1_NAUTILUS_LTE
Definition: sku.h:8
#define PCH_DEV_PMC
Definition: pci_devs.h:236
#define USB2_HALF_BIT_PRE_EMP
Definition: usb.h:16
#define USB2_PRE_EMP_ON
Definition: usb.h:11
@ OC2
Definition: usb.h:41
@ OC0
Definition: usb.h:39
@ OC1
Definition: usb.h:40
#define USB2_BIAS_0MV
Definition: usb.h:19
#define USB2_BIAS_56MV
Definition: usb.h:22
#define USB2_BIAS_39MV
Definition: usb.h:20
unsigned short uint16_t
Definition: stdint.h:11
unsigned int uint32_t
Definition: stdint.h:14
int snprintf(char *buf, size_t size, const char *fmt,...)
Note: This file is only for POSIX compatibility, and is meant to be chain-included via string....
Definition: vsprintf.c:35