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 <string.h>
4 #include <baseboard/variants.h>
6 #include <drivers/vpd/vpd.h>
7 #include <soc/cpu.h>
9 
10 /* SKU ID enumeration */
11 enum snappy_sku {
22 };
23 
25 {
27 }
28 
29 /*
30  * override SKU ID by VPD definition
31  */
33 {
34  static int board_sku_num = -1;
35  int vpd_sku_num;
36  char vpd_skuid[] = "skuid";
37  char vpd_buffer[4];
38  int vpd_len;
39  int i;
40 
41  if (board_sku_num != -1)
42  return board_sku_num;
43 
44  board_sku_num = sku_strapping_value();
45 
46  if (!CONFIG(CHROMEOS))
47  return board_sku_num;
48 
49  if (!vpd_gets(vpd_skuid, vpd_buffer, ARRAY_SIZE(vpd_buffer), VPD_RO_THEN_RW))
50  return board_sku_num;
51 
52  vpd_len = strlen(vpd_buffer);
53 
54  vpd_sku_num = 0;
55  for (i = 0; i < vpd_len; i++) {
56  char ch = vpd_buffer[i];
57  if ((ch < '0') || (ch > '9')) {
58  vpd_sku_num = -1;
59  break;
60  }
61  vpd_sku_num = vpd_sku_num * 10 + (ch - '0');
62  }
63 
64  if (vpd_sku_num != -1)
65  board_sku_num = vpd_sku_num;
66 
67  return board_sku_num;
68 }
69 
71 {
72  /* Override dev tree settings per board */
73  struct soc_intel_apollolake_config *cfg = dev->chip_info;
75 
77 
78  switch (sku_id) {
79  case SKU_ALAN:
80  cfg->usb2eye[2].Usb20PerPortPeTxiSet = 4;
81  cfg->usb2eye[2].Usb20PerPortTxiSet = 4;
82  cfg->usb2eye[2].Usb20IUsbTxEmphasisEn = 1;
83  cfg->usb2eye[2].Usb20PerPortTxPeHalf = 0;
84 
85  cfg->usb2eye[4].Usb20PerPortPeTxiSet = 7;
86  cfg->usb2eye[4].Usb20PerPortTxiSet = 7;
87  cfg->usb2eye[4].Usb20IUsbTxEmphasisEn = 1;
88  cfg->usb2eye[4].Usb20PerPortTxPeHalf = 0;
89  break;
91  case SKU_BIGDADDY:
92  cfg->usb2eye[1].Usb20PerPortPeTxiSet = 7;
93  cfg->usb2eye[1].Usb20PerPortTxiSet = 1;
94  cfg->usb2eye[1].Usb20IUsbTxEmphasisEn = 3;
95  cfg->usb2eye[1].Usb20PerPortTxPeHalf = 0;
96 
97  cfg->usb2eye[2].Usb20PerPortPeTxiSet = 4;
98  cfg->usb2eye[2].Usb20PerPortTxiSet = 4;
99  cfg->usb2eye[2].Usb20IUsbTxEmphasisEn = 1;
100  cfg->usb2eye[2].Usb20PerPortTxPeHalf = 0;
101 
102  cfg->usb2eye[4].Usb20PerPortPeTxiSet = 7;
103  cfg->usb2eye[4].Usb20PerPortTxiSet = 7;
104  cfg->usb2eye[4].Usb20IUsbTxEmphasisEn = 1;
105  cfg->usb2eye[4].Usb20PerPortTxPeHalf = 0;
106  break;
107  default:
108  break;
109  }
110 }
#define ARRAY_SIZE(a)
Definition: helpers.h:12
@ VPD_RO_THEN_RW
Definition: vpd.h:13
@ CONFIG
Definition: dsi_common.h:201
int google_chromeec_set_sku_id(uint32_t skuid)
Definition: ec.c:753
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
uint8_t sku_strapping_value(void)
Definition: mainboard.c:52
void __weak variant_board_ec_set_skuid(void)
Definition: mainboard.c:73
snappy_sku
Definition: mainboard.c:11
@ SKU_RESERVED1
Definition: mainboard.c:14
@ SKU_RESERVED6
Definition: mainboard.c:19
@ SKU_BIGDADDY
Definition: mainboard.c:18
@ SKU_ALAN
Definition: mainboard.c:20
@ SKU_RESERVED3
Definition: mainboard.c:16
@ SKU_RESERVED4
Definition: mainboard.c:17
@ SKU_BIGDADDY_KBDBKLIGHT
Definition: mainboard.c:15
@ SKU_UNKNOWN
Definition: mainboard.c:12
@ SKU_SNAPPY
Definition: mainboard.c:21
@ SKU_RESERVED0
Definition: mainboard.c:13
static struct dramc_channel const ch[2]
unsigned char uint8_t
Definition: stdint.h:8
size_t strlen(const char *src)
Definition: string.c:42
Definition: device.h:107
DEVTREE_CONST void * chip_info
Definition: device.h:164
struct usb2_eye_per_port usb2eye[APOLLOLAKE_USB2_PORT_MAX]
Definition: chip.h:136
uint8_t Usb20IUsbTxEmphasisEn
Definition: usb.h:21
uint8_t Usb20PerPortTxPeHalf
Definition: usb.h:17
uint8_t Usb20PerPortTxiSet
Definition: usb.h:19
uint8_t Usb20PerPortPeTxiSet
Definition: usb.h:18
char * vpd_gets(const char *key, char *buffer, int size, enum vpd_region region)
Definition: vpd.c:229