blob: 5694c0aef61364c9d1c6f39fe81e54cf29d9ec97 [file] [view]
# Zephyr CrOS Board Information (CBI) Configuration
[TOC]
## Overview
CrOS Board Info [`CBI`] is used to store static board information,
such as BOARD_VERSION, SKU_ID and configuration information. This
information allows a single firmware image to support multiple
hardware variants.
### Storage Backends
CBI data can be stored in several ways:
* **EC Flash (Recommended):** On recent devices, CBI data is stored in a
reserved region of the EC's internal flash memory. This approach
simplifies the hardware design and reduces cost by eliminating the
need for an external EEPROM chip. For detailed information, see the
[`CBI In Flash`] documentation.
* **External EEPROM (Deprecated):** Older devices stored CBI data in a
dedicated external EEPROM chip on the I2C bus. While this provides more
storage than GPIOs, it adds to the BOM cost and hardware complexity.
See the [`EEPROM`] documentation for details.
* **GPIO Strapping (Deprecated):** The simplest method, used on some
older cost-sensitive devices, involves reading GPIO values (strapping
resistors) to determine a limited set of information, typically just
the BOARD_VERSION and SKU_ID. This method is highly constrained in the
amount of data it can store.
### Firmware-Relevant Configuration
The CBI contains information that the firmware uses at runtime to adapt its
behavior to the specific hardware present on a device. Different mechanisms
exist depending on the age of the device platform.
#### Legacy FW_CONFIG and SSFC
Legacy devices utilize two distinct mechanisms for firmware configuration:
* **Firmware Configuration ([`FW_CONFIG`]):** A 32-bit field that stores
non-probeable characteristics tied to a specific SKU, such as the
presence of a backlit keyboard.
* **Second Source Factory Cache ([`SSFC`]):** A 32-bit field used to handle
probeable, second-source components (e.g., different codecs, sensors)
that do not affect the device's SKU.
#### Unified Firmware and Second-source Configuration (UFSC)
Newer devices use a new unified system called **Unified Firmware and
Second-source Configuration ([`UFSC`])**. This system replaces the separate
`FW_CONFIG` and `SSFC` fields with a single, schema-driven 128-bit (4-DWORD)
value.
## Kconfig Options
Refer to [`Kconfig.cbi`] for all the Kconfig options that control [`CBI`]
behavior. The appropriate configuration system (UFSC, FW_CONFIG, or SSFC) is
typically enabled automatically based on the devicetree configuration.
## Testing and Debugging
The [`ectool cbi`] command can be run from the kernel to get/set [`FW_CONFIG`]
and [`SSFC`] values. The console has a "cbi" command that can be used to do
the same thing from the EC console.
[`CBI`]: https://chromium.googlesource.com/chromiumos/docs/+/HEAD/design_docs/cros_board_info.md
[`ectool cbi`]: ./zephyr_cbi.md#testing-and-debugging
[`EEPROM`]: ./zephyr_eeprom.md
[`CBI In Flash`]: ./zephyr_cbi_flash.md
[`FW_CONFIG`]: ./zephyr_fw_config.md
[`SSFC`]: ./zephyr_ssfc.md
[`UFSC`]: ./zephyr_ufsc.md
[`Kconfig.cbi`]: https://source.chromium.org/chromiumos/chromiumos/codesearch/+/main:src/platform/ec/zephyr/Kconfig.cbi