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>
5
#include <
ec/google/chromeec/ec.h
>
6
#include <
drivers/vpd/vpd.h
>
7
#include <soc/cpu.h>
8
#include <
soc/intel/apollolake/chip.h
>
9
10
/* SKU ID enumeration */
11
enum
snappy_sku
{
12
SKU_UNKNOWN
= -1,
13
SKU_RESERVED0
,
14
SKU_RESERVED1
,
15
SKU_BIGDADDY_KBDBKLIGHT
,
16
SKU_RESERVED3
,
17
SKU_RESERVED4
,
18
SKU_BIGDADDY
,
19
SKU_RESERVED6
,
20
SKU_ALAN
,
21
SKU_SNAPPY
,
22
};
23
24
void
variant_board_ec_set_skuid
(
void
)
25
{
26
google_chromeec_set_sku_id
(
variant_board_sku
());
27
}
28
29
/*
30
* override SKU ID by VPD definition
31
*/
32
uint8_t
variant_board_sku
(
void
)
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
70
void
mainboard_devtree_update
(
struct
device
*dev)
71
{
72
/* Override dev tree settings per board */
73
struct
soc_intel_apollolake_config
*cfg = dev->
chip_info
;
74
uint8_t
sku_id
;
75
76
sku_id
=
variant_board_sku
();
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
;
90
case
SKU_BIGDADDY_KBDBKLIGHT
:
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
}
ARRAY_SIZE
#define ARRAY_SIZE(a)
Definition:
helpers.h:12
vpd.h
VPD_RO_THEN_RW
@ VPD_RO_THEN_RW
Definition:
vpd.h:13
CONFIG
@ CONFIG
Definition:
dsi_common.h:201
google_chromeec_set_sku_id
int google_chromeec_set_sku_id(uint32_t skuid)
Definition:
ec.c:753
ec.h
variant_board_sku
uint8_t __weak variant_board_sku(void)
Definition:
mainboard.c:172
sku_id
uint32_t sku_id(void)
Definition:
mainboard.c:11
mainboard_devtree_update
void mainboard_devtree_update(struct device *dev)
Definition:
mainboard.c:230
sku_strapping_value
uint8_t sku_strapping_value(void)
Definition:
mainboard.c:52
variant_board_ec_set_skuid
void __weak variant_board_ec_set_skuid(void)
Definition:
mainboard.c:73
snappy_sku
snappy_sku
Definition:
mainboard.c:11
SKU_RESERVED1
@ SKU_RESERVED1
Definition:
mainboard.c:14
SKU_RESERVED6
@ SKU_RESERVED6
Definition:
mainboard.c:19
SKU_BIGDADDY
@ SKU_BIGDADDY
Definition:
mainboard.c:18
SKU_ALAN
@ SKU_ALAN
Definition:
mainboard.c:20
SKU_RESERVED3
@ SKU_RESERVED3
Definition:
mainboard.c:16
SKU_RESERVED4
@ SKU_RESERVED4
Definition:
mainboard.c:17
SKU_BIGDADDY_KBDBKLIGHT
@ SKU_BIGDADDY_KBDBKLIGHT
Definition:
mainboard.c:15
SKU_UNKNOWN
@ SKU_UNKNOWN
Definition:
mainboard.c:12
SKU_SNAPPY
@ SKU_SNAPPY
Definition:
mainboard.c:21
SKU_RESERVED0
@ SKU_RESERVED0
Definition:
mainboard.c:13
ch
static struct dramc_channel const ch[2]
Definition:
dramc_register.h:503
chip.h
uint8_t
unsigned char uint8_t
Definition:
stdint.h:8
string.h
strlen
size_t strlen(const char *src)
Definition:
string.c:42
device
Definition:
device.h:107
device::chip_info
DEVTREE_CONST void * chip_info
Definition:
device.h:164
soc_intel_apollolake_config
Definition:
chip.h:28
soc_intel_apollolake_config::usb2eye
struct usb2_eye_per_port usb2eye[APOLLOLAKE_USB2_PORT_MAX]
Definition:
chip.h:136
usb2_eye_per_port::Usb20IUsbTxEmphasisEn
uint8_t Usb20IUsbTxEmphasisEn
Definition:
usb.h:21
usb2_eye_per_port::Usb20PerPortTxPeHalf
uint8_t Usb20PerPortTxPeHalf
Definition:
usb.h:17
usb2_eye_per_port::Usb20PerPortTxiSet
uint8_t Usb20PerPortTxiSet
Definition:
usb.h:19
usb2_eye_per_port::Usb20PerPortPeTxiSet
uint8_t Usb20PerPortPeTxiSet
Definition:
usb.h:18
vpd_gets
char * vpd_gets(const char *key, char *buffer, int size, enum vpd_region region)
Definition:
vpd.c:229
src
mainboard
google
reef
variants
snappy
mainboard.c
Generated by
1.9.1