mirror of
https://github.com/Telecominfraproject/OpenCellular.git
synced 2025-12-31 02:51:26 +00:00
This patch adds vendor and console commands to read and write the
board ID space in the INFO1 block.
Current image's board ID settings are saved in the image header by the
latest codesigner.
Board ID write attempts are rejected if the board ID space is already
initialized, or if the currently running image will not be allowed to
run with the new board ID space settings.
Error codes are returned to the caller as a single byte value.
Successful read command returns 12 bytes of the board ID space
contents.
The console command always allows to read the board ID value, and
allows to write it if the image was built with debug enabled.
BUG=b:35586335
BRANCH=cr50
TEST=as follows:
- verified that board ID can be read by any image and set by debug
images.
- with the upcoming patches verified the ability to set and read
board ID values using vendor commands.
Change-Id: I35a3e2db92175a29de8011172b80091065b27414
Signed-off-by: Philip Chen <philipchen@google.com>
Signed-off-by: Vadim Bendebury <vbendeb@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/522234
Reviewed-by: Aseda Aboagye <aaboagye@chromium.org>
Reviewed-by: Mary Ruthven <mruthven@chromium.org>
69 lines
2.5 KiB
C
69 lines
2.5 KiB
C
/* Copyright 2015 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.
|
|
*/
|
|
#ifndef __CROS_EC_SIGNED_HEADER_H
|
|
#define __CROS_EC_SIGNED_HEADER_H
|
|
|
|
#include "compile_time_macros.h"
|
|
|
|
#define FUSE_PADDING 0x55555555 /* baked in hw! */
|
|
#define FUSE_IGNORE 0xa3badaac /* baked in rom! */
|
|
#define FUSE_MAX 128 /* baked in rom! */
|
|
|
|
#define INFO_MAX 128 /* baked in rom! */
|
|
#define INFO_IGNORE 0xaa3c55c3 /* baked in rom! */
|
|
|
|
/* Default value for _pad[] words */
|
|
#define SIGNED_HEADER_PADDING 0x33333333
|
|
|
|
struct SignedHeader {
|
|
uint32_t magic; /* -1 (thanks, boot_sys!) */
|
|
uint32_t signature[96];
|
|
uint32_t img_chk_; /* top 32 bit of expected img_hash */
|
|
/* --------------------- everything below is part of img_hash */
|
|
uint32_t tag[7]; /* words 0-6 of RWR/FWR */
|
|
uint32_t keyid; /* word 7 of RWR */
|
|
uint32_t key[96]; /* public key to verify signature with */
|
|
uint32_t image_size;
|
|
uint32_t ro_base; /* readonly region */
|
|
uint32_t ro_max;
|
|
uint32_t rx_base; /* executable region */
|
|
uint32_t rx_max;
|
|
uint32_t fusemap[FUSE_MAX / (8 * sizeof(uint32_t))];
|
|
uint32_t infomap[INFO_MAX / (8 * sizeof(uint32_t))];
|
|
uint32_t epoch_; /* word 7 of FWR */
|
|
uint32_t major_; /* keyladder count */
|
|
uint32_t minor_;
|
|
uint64_t timestamp_; /* time of signing */
|
|
uint32_t p4cl_;
|
|
/* bits to and with FUSE_FW_DEFINED_BROM_APPLYSEC */
|
|
uint32_t applysec_;
|
|
/* bits to mesh with FUSE_FW_DEFINED_BROM_CONFIG1 */
|
|
uint32_t config1_;
|
|
/* bits to or with FUSE_FW_DEFINED_BROM_ERR_RESPONSE */
|
|
uint32_t err_response_;
|
|
/* action to take when expectation is violated */
|
|
uint32_t expect_response_;
|
|
/*
|
|
* Padding to bring the total structure size to 1K. Note: First 17
|
|
* words of _pad[] may be used by a second FIPS-compliant signature,
|
|
* so don't put anything there.
|
|
*/
|
|
uint32_t _pad[24];
|
|
/* Board ID type, mask, flags (stored ^SIGNED_HEADER_PADDING) */
|
|
uint32_t board_id_type;
|
|
uint32_t board_id_type_mask;
|
|
uint32_t board_id_flags;
|
|
uint32_t dev_id0_; /* node id, if locked */
|
|
uint32_t dev_id1_;
|
|
uint32_t fuses_chk_; /* top 32 bit of expected fuses hash */
|
|
uint32_t info_chk_; /* top 32 bit of expected info hash */
|
|
};
|
|
|
|
BUILD_ASSERT(sizeof(struct SignedHeader) == 1024);
|
|
BUILD_ASSERT(offsetof(struct SignedHeader, info_chk_) == 1020);
|
|
#define TOP_IMAGE_SIZE_BIT (1 << \
|
|
(sizeof(((struct SignedHeader *)0)->image_size) * 8 - 1))
|
|
#endif /* __CROS_EC_SIGNED_HEADER_H */
|