summaryrefslogtreecommitdiff
path: root/baseboard
diff options
context:
space:
mode:
authorRob Barnes <robbarnes@google.com>2021-05-19 14:24:39 -0600
committerCommit Bot <commit-bot@chromium.org>2021-05-21 16:07:43 +0000
commitf5c49a72d38eb141511adfeb2f89b4ba20d1f1fb (patch)
tree1eda50b82c8373309b559d29147fbf1e6eb3b4ec /baseboard
parent5bd7f9db4a51b995810894e72ebd218077a5059a (diff)
downloadchrome-ec-f5c49a72d38eb141511adfeb2f89b4ba20d1f1fb.tar.gz
guybrush: Add CBI utility functions
Add CBI utility functions. All values are cached. cbi_init prints the values and initializes the cache. Each function will also opportunistically initialize the cache in case it's accessed before cbi_init. BUG=None TEST=Boot guybrush, see CBI values printed BRANCH=None Signed-off-by: Rob Barnes <robbarnes@google.com> Change-Id: I3e21a6792f4f0897019872201b2392f634c134ef Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2906313 Commit-Queue: Diana Z <dzigterman@chromium.org> Reviewed-by: Diana Z <dzigterman@chromium.org>
Diffstat (limited to 'baseboard')
-rw-r--r--baseboard/guybrush/baseboard.c14
-rw-r--r--baseboard/guybrush/baseboard.h7
-rw-r--r--baseboard/guybrush/build.mk3
-rw-r--r--baseboard/guybrush/cbi.c96
4 files changed, 105 insertions, 15 deletions
diff --git a/baseboard/guybrush/baseboard.c b/baseboard/guybrush/baseboard.c
index 564133c55f..4a370143b7 100644
--- a/baseboard/guybrush/baseboard.c
+++ b/baseboard/guybrush/baseboard.c
@@ -956,17 +956,3 @@ void baseboard_en_pwr_s0(enum gpio_signal signal)
/* Now chain off to the normal power signal interrupt handler. */
power_signal_interrupt(signal);
}
-
-int get_fw_config_field(uint8_t offset, uint8_t width)
-{
- static uint32_t cached_fw_config = UNINITIALIZED_FW_CONFIG;
-
- if (cached_fw_config == UNINITIALIZED_FW_CONFIG) {
- uint32_t val;
-
- if (cbi_get_fw_config(&val) != EC_SUCCESS)
- return -1;
- cached_fw_config = val;
- }
- return (cached_fw_config >> offset) & ((1 << width) - 1);
-}
diff --git a/baseboard/guybrush/baseboard.h b/baseboard/guybrush/baseboard.h
index aaaa7f895f..84a65e8508 100644
--- a/baseboard/guybrush/baseboard.h
+++ b/baseboard/guybrush/baseboard.h
@@ -348,6 +348,13 @@ void sbu_fault_interrupt(enum ioex_signal signal);
void baseboard_en_pwr_pcore_s0(enum gpio_signal signal);
void baseboard_en_pwr_s0(enum gpio_signal signal);
+/* CBI utility functions */
+uint32_t get_sku_id(void);
+uint32_t get_board_version(void);
+uint32_t get_fw_config(void);
+/* Board callback after CBI has been initialized */
+__overridable void board_cbi_init(void);
+
#endif /* !__ASSEMBLER__ */
#endif /* __CROS_EC_BASEBOARD_H */
diff --git a/baseboard/guybrush/build.mk b/baseboard/guybrush/build.mk
index e1ccef48d9..d6849d3029 100644
--- a/baseboard/guybrush/build.mk
+++ b/baseboard/guybrush/build.mk
@@ -11,4 +11,5 @@ CHIP_FAMILY:=npcx9
CHIP_VARIANT:=npcx9m3f
baseboard-y=baseboard.o
-baseboard-$(CONFIG_USB_POWER_DELIVERY)+=usb_pd_policy.o \ No newline at end of file
+baseboard-$(CONFIG_USB_POWER_DELIVERY)+=usb_pd_policy.o
+baseboard-$(CONFIG_CROS_BOARD_INFO)+=cbi.o \ No newline at end of file
diff --git a/baseboard/guybrush/cbi.c b/baseboard/guybrush/cbi.c
new file mode 100644
index 0000000000..6d66b826dc
--- /dev/null
+++ b/baseboard/guybrush/cbi.c
@@ -0,0 +1,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);