mirror of
https://github.com/Telecominfraproject/OpenCellular.git
synced 2026-01-11 18:35:28 +00:00
Cr50: Add sysinfo vendor command
This returns the system information that is needed to determine the correct signing keys for firmware updates. BUG=chrome-os-partner:59747 BUG=chrome-os-partner:59705 BRANCH=none TEST=make buildall; test on Reef Run the "sysinfo" command on the Cr50 console: > sysinfo Reset flags: 0x00000800 (hard) Chip: g cr50 B2 RO keyid: 0x3716ee6b(dev) RW keyid: 0xb93d6539(dev) DEV_ID: 0x017950ab 0x04656742 > Send the raw command bytes from the Reef AP, observe the result: # /tmp/trunks_send --raw 80 01 00 00 00 0C 20 00 00 00 00 12 80010000001C0000000000123716EE6BB93D6539017950AB04656742 # The result contains the same information from the console command: 8001 TPM_ST_NO_SESSIONS 0000001C responseSize (28 bytes) 00000000 RC_SUCCESS 0012 vendor-specific subcommand 3716EE6B RO keyid B93D6539 RW keyid 017950AB DEV_ID0 04656742 DEV_ID1 Change-Id: I82de3ebfb3e9be3b707583bc825d2efbcf851c5c Signed-off-by: Bill Richardson <wfrichar@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/413106 Reviewed-by: Vadim Bendebury <vbendeb@chromium.org>
This commit is contained in:
committed by
chrome-bot
parent
2228b76f74
commit
94843eca31
@@ -3,12 +3,15 @@
|
||||
* found in the LICENSE file.
|
||||
*/
|
||||
|
||||
#include <endian.h>
|
||||
|
||||
#include "clock.h"
|
||||
#include "common.h"
|
||||
#include "console.h"
|
||||
#include "dcrypto/dcrypto.h"
|
||||
#include "device_state.h"
|
||||
#include "ec_version.h"
|
||||
#include "extension.h"
|
||||
#include "flash_config.h"
|
||||
#include "gpio.h"
|
||||
#include "hooks.h"
|
||||
@@ -754,3 +757,43 @@ static int command_sysinfo(int argc, char **argv)
|
||||
DECLARE_SAFE_CONSOLE_COMMAND(sysinfo, command_sysinfo,
|
||||
NULL,
|
||||
"Print system info");
|
||||
|
||||
/*
|
||||
* SysInfo command:
|
||||
* There are no input args.
|
||||
* Output is this struct, all fields in network order.
|
||||
*/
|
||||
struct sysinfo_s {
|
||||
uint32_t ro_keyid;
|
||||
uint32_t rw_keyid;
|
||||
uint32_t dev_id0;
|
||||
uint32_t dev_id1;
|
||||
} __packed;
|
||||
|
||||
static enum vendor_cmd_rc vc_sysinfo(enum vendor_cmd_cc code,
|
||||
void *buf,
|
||||
size_t input_size,
|
||||
size_t *response_size)
|
||||
{
|
||||
enum system_image_copy_t active;
|
||||
uintptr_t vaddr;
|
||||
const struct SignedHeader *h;
|
||||
struct sysinfo_s *sysinfo = buf;
|
||||
|
||||
active = system_get_ro_image_copy();
|
||||
vaddr = get_program_memory_addr(active);
|
||||
h = (const struct SignedHeader *)vaddr;
|
||||
sysinfo->ro_keyid = htobe32(h->keyid);
|
||||
|
||||
active = system_get_image_copy();
|
||||
vaddr = get_program_memory_addr(active);
|
||||
h = (const struct SignedHeader *)vaddr;
|
||||
sysinfo->rw_keyid = htobe32(h->keyid);
|
||||
|
||||
sysinfo->dev_id0 = htobe32(GREG32(FUSE, DEV_ID0));
|
||||
sysinfo->dev_id1 = htobe32(GREG32(FUSE, DEV_ID1));
|
||||
|
||||
*response_size = sizeof(*sysinfo);
|
||||
return VENDOR_RC_SUCCESS;
|
||||
}
|
||||
DECLARE_VENDOR_COMMAND(VENDOR_CC_SYSINFO, vc_sysinfo);
|
||||
|
||||
@@ -28,6 +28,7 @@ enum vendor_cmd_cc {
|
||||
/* Our TPMv2 vendor-specific command codes. 16 bits available. */
|
||||
VENDOR_CC_GET_LOCK = 16,
|
||||
VENDOR_CC_SET_LOCK = 17,
|
||||
VENDOR_CC_SYSINFO = 18,
|
||||
|
||||
LAST_VENDOR_COMMAND = 65535,
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user