blob: 6d66b826dcf771970f2c4c880647cdc17dda3b9b (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
|
/* Copyright 2021 The Chromium OS Authors. All rights reserved.
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
/* Guybrush CrOS Board Info(CBI) utilities */
#include "base_fw_config.h"
#include "console.h"
#include "common.h"
#include "cros_board_info.h"
#include "hooks.h"
uint32_t get_sku_id(void)
{
static uint32_t sku_id;
if (sku_id == 0) {
uint32_t val;
if (cbi_get_sku_id(&val) != EC_SUCCESS)
return 0;
sku_id = val;
}
return sku_id;
}
uint32_t get_board_version(void)
{
static uint32_t board_version;
if (board_version == 0) {
uint32_t val;
if (cbi_get_board_version(&val) != EC_SUCCESS)
return -1;
board_version = val;
}
return board_version;
}
uint32_t get_fw_config(void)
{
static uint32_t fw_config = UNINITIALIZED_FW_CONFIG;
if (fw_config == UNINITIALIZED_FW_CONFIG) {
uint32_t val;
if (cbi_get_fw_config(&val) != EC_SUCCESS)
return UNINITIALIZED_FW_CONFIG;
fw_config = val;
}
return fw_config;
}
int get_fw_config_field(uint8_t offset, uint8_t width)
{
uint32_t fw_config = get_fw_config();
if (fw_config == UNINITIALIZED_FW_CONFIG)
return -1;
return (fw_config >> offset) & ((1 << width) - 1);
}
__overridable void board_cbi_init(void)
{
}
static void cbi_init(void)
{
uint32_t board_ver = get_board_version();
uint32_t sku_id = get_sku_id();
uint32_t fw_config = get_fw_config();
if (board_ver != 0)
ccprints("Board Version: %d (0x%x)", board_ver, board_ver);
else
ccprints("Board Version: not set in cbi");
if (sku_id != 0)
ccprints("SKU ID: %d (0x%x)", sku_id, sku_id);
else
ccprints("SKU ID: not set in cbi");
if (fw_config != UNINITIALIZED_FW_CONFIG)
ccprints("FW Config: %d (0x%x)", fw_config, fw_config);
else
ccprints("FW Config: not set in cbi");
/* Allow the board project to make runtime changes based on CBI data */
board_cbi_init();
}
DECLARE_HOOK(HOOK_INIT, cbi_init, HOOK_PRIO_INIT_I2C + 1);
|