diff options
author | Scott Collyer <scollyer@google.com> | 2021-02-16 03:24:40 -0800 |
---|---|---|
committer | Commit Bot <commit-bot@chromium.org> | 2021-03-09 01:24:47 +0000 |
commit | 404e012c6cfad0ff06bbd4810eaff26a2bcc5c7f (patch) | |
tree | 69d0c8c0e57fed77fa28ec54d28cfe2d5fd4328f /board/quiche | |
parent | 3063fe12c711a60e10000f99c61387d3e08558a5 (diff) | |
download | chrome-ec-404e012c6cfad0ff06bbd4810eaff26a2bcc5c7f.tar.gz |
honeybuns: Add RWSIG and RO/RW split
Honeybuns does not have an AP and therefore it needs to verify its own
RW signature in RO. This functionality is enabled with RWSIG config
option and task. This CL adds support to both enable RWSIG and make
the RO and RW images asymmetric.
Note that RO only needs to enable USB-EP support for fwupd support and
support RW signature verification. Therefore, RO is limited to support
these key features.
BUG=b:167462264
BRANCH=None
TEST=verifed on both quiche and gingerbread that will boot into RO and
following RW signature verification, jump to the RW image.
Signed-off-by: Scott Collyer <scollyer@google.com>
Change-Id: I1cdf0965e06881ebb48205a517d308641e6cdb49
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2699452
Tested-by: Scott Collyer <scollyer@chromium.org>
Reviewed-by: Aseda Aboagye <aaboagye@chromium.org>
Commit-Queue: Scott Collyer <scollyer@chromium.org>
Diffstat (limited to 'board/quiche')
-rw-r--r-- | board/quiche/board.c | 24 | ||||
-rw-r--r-- | board/quiche/dev_key.pem | 39 | ||||
-rw-r--r-- | board/quiche/ec.tasklist | 5 | ||||
-rw-r--r-- | board/quiche/gpio.inc | 2 |
4 files changed, 62 insertions, 8 deletions
diff --git a/board/quiche/board.c b/board/quiche/board.c index afcd9b1443..f569611c55 100644 --- a/board/quiche/board.c +++ b/board/quiche/board.c @@ -23,6 +23,13 @@ #define CPRINTS(format, args...) cprints(CC_SYSTEM, format, ## args) #define CPRINTF(format, args...) cprintf(CC_SYSTEM, format, ## args) +#ifdef SECTION_IS_RW +#define CROS_EC_SECTION "RW" +#else +#define CROS_EC_SECTION "RO" +#endif + +#ifdef SECTION_IS_RW static void ppc_interrupt(enum gpio_signal signal) { switch (signal) { @@ -34,6 +41,7 @@ static void ppc_interrupt(enum gpio_signal signal) break; } } +#endif /* SECTION_IS_RW */ #include "gpio_list.h" /* Must come after other header files. */ @@ -69,6 +77,7 @@ const struct power_seq board_power_seq[] = { const size_t board_power_seq_count = ARRAY_SIZE(board_power_seq); +#ifdef SECTION_IS_RW /* TCPCs */ const struct tcpc_config_t tcpc_config[CONFIG_USB_PD_PORT_MAX_COUNT] = { { @@ -116,12 +125,6 @@ static void board_select_drp_mode(void) } DECLARE_DEFERRED(board_select_drp_mode); -static void board_init(void) -{ - hook_call_deferred(&board_select_drp_mode_data, 50 * MSEC); -} -DECLARE_HOOK(HOOK_INIT, board_init, HOOK_PRIO_DEFAULT); - int ppc_get_alert_status(int port) { if (port == USB_PD_PORT_HOST) @@ -134,3 +137,12 @@ void board_overcurrent_event(int port, int is_overcurrented) { /* TODO(b/174825406): check correct operation for honeybuns */ } +#endif /* SECTION_IS_RW */ + +static void board_init(void) +{ +#ifdef SECTION_IS_RW + hook_call_deferred(&board_select_drp_mode_data, 50 * MSEC); +#endif +} +DECLARE_HOOK(HOOK_INIT, board_init, HOOK_PRIO_DEFAULT); diff --git a/board/quiche/dev_key.pem b/board/quiche/dev_key.pem new file mode 100644 index 0000000000..4897ceb44e --- /dev/null +++ b/board/quiche/dev_key.pem @@ -0,0 +1,39 @@ +-----BEGIN RSA PRIVATE KEY----- +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 +-----END RSA PRIVATE KEY----- diff --git a/board/quiche/ec.tasklist b/board/quiche/ec.tasklist index 0e18704a4c..f884f8df16 100644 --- a/board/quiche/ec.tasklist +++ b/board/quiche/ec.tasklist @@ -8,7 +8,8 @@ */ #define CONFIG_TASK_LIST \ + TASK_ALWAYS_RO(RWSIG, rwsig_task, NULL, 1280) \ TASK_ALWAYS(HOOKS, hook_task, NULL, LARGER_TASK_STACK_SIZE) \ TASK_ALWAYS(CONSOLE, console_task, NULL, VENTI_TASK_STACK_SIZE) \ - TASK_ALWAYS(PD_C0, pd_task, NULL, VENTI_TASK_STACK_SIZE) \ - TASK_ALWAYS(UCPD, ucpd_task, 0, LARGER_TASK_STACK_SIZE) + TASK_ALWAYS_RW(PD_C0, pd_task, NULL, VENTI_TASK_STACK_SIZE) \ + TASK_ALWAYS_RW(UCPD, ucpd_task, 0, LARGER_TASK_STACK_SIZE) diff --git a/board/quiche/gpio.inc b/board/quiche/gpio.inc index 1b90bf9e1e..eb32f55bb0 100644 --- a/board/quiche/gpio.inc +++ b/board/quiche/gpio.inc @@ -8,7 +8,9 @@ /* Declare symbolic names for all the GPIOs that we care about. * Note: Those with interrupt handlers must be declared first. */ +#ifdef SECTION_IS_RW GPIO_INT(HOST_USBC_PPC_INT_ODL, PIN(D, 9), GPIO_INT_FALLING | GPIO_PULL_UP, ppc_interrupt) +#endif /* Power sequencing signals */ GPIO(PWR_BTN, PIN(A, 0), GPIO_INPUT) |