blob: 70f1572966c47427b7684b42727f9ce1aa86a6df [file] [log] [blame] [view] [edit]
# AP Firmware tooling configuration guide
> ## **DO NOT ADD NEW CONFIGURATION HERE**
>
> The use of board-specific AP firmware flashing configuration in Chromite is
> ***deprecated***, do not add new config files here!
>
> AP firmware flashing prep and unprep configuration belongs in the `cpu_fw_spi`
> and `ccd_cpu_fw_spi` servod controls for the board. They will get used
> automatically by `futility --servo` *and* by `cros ap flash`. Example CL
> adding those controls for a board: https://crrev.com/c/4129143
>
> The `cros ap flash` and `cros ap read` commands are *not* deprecated, they
> will continue to wrap `futility --servo`.
This guide covers how to write configuration files for `cros ap` tooling.
If you're interested in `cros ap` tooling usage guide, please refer to
[../README.md](../README.md)
Note that it is not necessarily required to write custom config for your board.
If config for your board is missing, [generic config](generic.py) will be used,
and it should work in most cases.
## Add support for a new board
Create `${BOARD}.py` in `chromite/lib/firmware/ap_firmware_config`.
Generic config [`generic.py`](generic.py) file can be copied into place,
and used as a starting point for your config.
### Variables to define
#### Force flashrom for ssh/servo flashing
By default, `cros ap flash` will flash with `futility`.
If `futility` works for your board, there's no need to define any variables.
If there's a reason to use `flashrom` instead for SSH/Servo flashing,
set either of the following variables to true.
```
DEPLOY_SSH_FORCE_FLASHROM = True
DEPLOY_SERVO_FORCE_FLASHROM = True
```
### Functions to define:
#### Extra flags to use when flashing with futility/flashrom
You can use `deploy_extra_flags_futility` and `deploy_extra_flags_flashrom` functions to add extra flags(such as --fast or --force) to
futility and flashrom respectively while flashing.
These functions accept [`servo_lib.Servo` object](https://source.corp.google.com/chromeos_public/chromite/lib/firmware/servo_lib.py) (or `None` for SSH) and return a list of flags.
```
def deploy_extra_flags_futility(servo: Optional[servo_lib.Servo]) -> List[str]
```
```
def deploy_extra_flags_flashrom(servo: Optional[servo_lib.Servo]) -> List[str]
```
#### ServoConfig
`get_config` is the primary function to set config for flashing with Servo.
It accepts [`servo_lib.Servo` object](https://source.corp.google.com/chromeos_public/chromite/lib/firmware/servo_lib.py) and returns a [`servo_lib.ServoConfig` tuple](https://source.corp.google.com/chromeos_public/chromite/lib/firmware/servo_lib.py), which contains dut_control commands to be run before and after flashing, and programmer argument to be used for flashing.
```
def get_config(servo: servo_lib.Servo) -> servo_lib.ServoConfig
```
## Deprecated
You shouldn't use any of those:
* BUILD_PACKAGES and BUILD_WORKON_PACKAGES are not needed anymore.
* `is_fast_required()` should be specified as part of `deploy_extra_flags_futility()` or `deploy_extra_flags_flashrom()` (see above)
### Deprecated variables
```
BUILD_WORKON_PACKAGES as a list of all packages that should be cros_workon'd
before building.
BUILD_PACKAGES as a list of all packages that should be emerged during the
build process.
```
### Deprecated functions
```
is_fast_required:
Only required if it needs to return True for any cases!
Returns true if --fast is necessary to flash successfully.
Args:
use_futility (bool): True if futility is to be used, False if flashrom.
servo (str): The type name of the servo device being used.
Returns:
bool: True if fast is necessary, False otherwise.
```