Files
OpenCellular/firmware
Randall Spangler a80a79f9f5 2lib: Add support for 64-byte nvstorage record
The calling firmware can set ctx->flags VB2_CONTEXT_NVDATA_V2 to tell
vboot that nvdata is a 64-byte record instead of a 16-byte record, or
equivalently, set the VBSD_NVDATA_V2 flag if calling the old vboot1
API.

If calling firmware does not (which is the current coreboot and
depthcharge default), then the 16-byte record is used, and V2 fields
return explicit default values.

Added the fw_max_rollforward V2 field, which defaults to 0xfffffffe on
V1.  This will be used by a subsequent CL.

Added unit tests to verify all that.

Added crossystem support, though it will only work with the current
16-byte records until firmware sets the VBSD flag and mosys supports
larger records.

(Note that because coreboot/depthcharge do not yet set the new context
flag, this CL should not change ToT firmware behavior.)

See go/vboot-nvstorage for design doc.

BUG=chromium:789276
BRANCH=none
TEST=make runtests

Change-Id: I43072ef153dfa016c051f560892af1fbb3508e3a
Signed-off-by: Randall Spangler <rspangler@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/942031
2018-03-07 16:55:15 -08:00
..
2018-01-05 21:14:12 -08:00
2018-01-05 21:14:12 -08:00
2018-01-09 14:14:17 -08:00

Here's what's what in the firmware/ directory.

bdb/

  Code for managing Boot Descriptor Blocks (BDB).

include/
lib/

  These are the original structures and APIs used in the earliest
  Chromebooks and continuing through 2014. It never had a version as such to
  begin with, but we now refer to this implementation as "vboot1" or
  "vboot version 1.0".

linktest/
stub/

  These are stubs used to link the vboot1 libraries into host-side test
  executables so we can run some tests on the build machine instead of a
  Chromebook.

2lib/

  In 2014 we began work on a new vboot API. The first step was just a
  refactoring and renaming of the verification API. The public functions and
  external headers that are exported for use by the Chrome OS firmware (or
  anything else that wants to use vboot) live in here. The internal
  structures and implementations go elsewhere.

lib20/

  This is an early implementation of the public (2lib/) API. It is
  binary-compatible with vboot1, so although the interface details are
  different, any existing on-device structures or signatures created by the
  vboot1 tools can be validated using this implementation.

  This was deployed slightly before it was ready. That's not a problem,
  thanks to the binary compatibility, but this directory will be abandoned
  Real Soon Now, except for the product support branches.

lib21/

  This is where the current development of the second-generation vboot API
  is taking place. It uses the public (2lib/) API, but will NOT be binary
  compatible with vboot1 structs. Because of the early release of the lib20
  stuff, we're actually calling this lib21.