diff options
Diffstat (limited to 'board/zinger/board.c')
-rw-r--r-- | board/zinger/board.c | 106 |
1 files changed, 0 insertions, 106 deletions
diff --git a/board/zinger/board.c b/board/zinger/board.c deleted file mode 100644 index b3784fde33..0000000000 --- a/board/zinger/board.c +++ /dev/null @@ -1,106 +0,0 @@ -/* Copyright 2014 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. - */ -/* Tiny charger configuration */ - -#include "common.h" -#include "cros_version.h" -#include "debug_printf.h" -#include "ec_commands.h" -#include "registers.h" -#include "rsa.h" -#include "rwsig.h" -#include "sha256.h" -#include "system.h" -#include "task.h" -#include "usb_pd.h" -#include "util.h" - -/* Large 768-Byte buffer for RSA computation : could be re-use afterwards... */ -static uint32_t rsa_workbuf[3 * RSANUMWORDS]; - -extern void pd_rx_handler(void); - -/* RW firmware reset vector */ -static uint32_t * const rw_rst = - (uint32_t *)(CONFIG_PROGRAM_MEMORY_BASE+CONFIG_RW_MEM_OFF+4); - -/* External interrupt EXTINT7 for external comparator on PA7 */ -void pd_rx_interrupt(void) -{ - /* trigger reception handling */ - pd_rx_handler(); -} -DECLARE_IRQ(STM32_IRQ_EXTI4_15, pd_rx_interrupt, 1); - -static void jump_to_rw(void) -{ - void (*jump_rw_rst)(void) = (void *)*rw_rst; - - debug_printf("Jump to RW\n"); - /* Disable interrupts */ - asm volatile("cpsid i"); - /* Call RW firmware reset vector */ - jump_rw_rst(); -} - -int is_ro_mode(void) -{ - return (uint32_t)&jump_to_rw < (uint32_t)rw_rst; -} - -static int check_rw_valid(void *rw_hash) -{ - int good; - - /* Check if we have a RW firmware flashed */ - if (*rw_rst == 0xffffffff) - return 0; - - good = rsa_verify((const struct rsa_public_key *)CONFIG_RO_PUBKEY_ADDR, - (const uint8_t *)CONFIG_RW_SIG_ADDR, - rw_hash, rsa_workbuf); - if (!good) { - debug_printf("RSA FAILED\n"); - pd_log_event(PD_EVENT_ACC_RW_FAIL, 0, 0, NULL); - return 0; - } - - return 1; -} - -extern void pd_task(void *u); - -int main(void) -{ - void *rw_hash; - - hardware_init(); - debug_printf("%s started\n", - is_ro_mode() ? "RO" : "RW"); - - /* the RO partition protection is not enabled : do it */ - if (!flash_physical_is_permanently_protected()) - flash_physical_permanent_protect(); - - /* - * calculate the hash of the RW partition - * - * Also pre-cache it so we can answer Discover Identity VDM - * fast enough (in less than 30ms). - */ - rw_hash = flash_hash_rw(); - - /* Verify RW firmware and use it if valid */ - if (is_ro_mode() && check_rw_valid(rw_hash)) - jump_to_rw(); - - /* background loop for PD events */ - pd_task(NULL); - - debug_printf("EXIT!\n"); - /* we should never reach that point */ - system_reset(0); - return 0; -} |