diff options
-rw-r--r-- | board/cr50/board.c | 14 | ||||
-rw-r--r-- | board/cr50/board.h | 2 | ||||
-rw-r--r-- | chip/g/sps.c | 9 | ||||
-rw-r--r-- | common/i2cs_tpm.c | 7 |
4 files changed, 18 insertions, 14 deletions
diff --git a/board/cr50/board.c b/board/cr50/board.c index 3c73181cc5..e20810cd42 100644 --- a/board/cr50/board.c +++ b/board/cr50/board.c @@ -763,6 +763,15 @@ static void maybe_trigger_ite_sync(void) generate_ite_sync(); } +static void process_board_cfg(void) +{ + uint32_t tpm_board_cfg = board_cfg_reg_read(); + + if (tpm_board_cfg & BOARD_CFG_LONG_INT_AP_BIT) + int_ap_extension_enable(); +} +DECLARE_DEFERRED(process_board_cfg); + /* Initialize board. */ static void board_init(void) { @@ -856,6 +865,8 @@ static void board_init(void) * machines run in HOOK_SECOND, which first triggers right after * HOOK_INIT, not at +1.0 seconds. */ + + process_board_cfg(); } DECLARE_HOOK(HOOK_INIT, board_init, HOOK_PRIO_INIT_CR50_BOARD); @@ -1803,6 +1814,9 @@ void board_cfg_reg_write(uint32_t value) /* Store the tpm_board_cfg in power-down scratch. */ GREG32(PMU, PWRDN_SCRATCH21) = value|BOARD_CFG_LOCKED_BIT; + + /* Process board_configuration change in a deferred function */ + hook_call_deferred(&process_board_cfg_data, 0); } uint32_t board_cfg_reg_read(void) diff --git a/board/cr50/board.h b/board/cr50/board.h index 67cd0f7faf..9f6833e5f1 100644 --- a/board/cr50/board.h +++ b/board/cr50/board.h @@ -409,6 +409,8 @@ int board_in_prod_mode(void); /* Bit masks for each bit in TPM_BOARD_CFG register */ enum board_cfg_reg_bitmask { + BOARD_CFG_LONG_INT_AP_BIT = BIT(0), + BOARD_CFG_LOCKED_BIT = BIT(31), }; diff --git a/chip/g/sps.c b/chip/g/sps.c index 0387f8640e..5e26459dfc 100644 --- a/chip/g/sps.c +++ b/chip/g/sps.c @@ -284,15 +284,8 @@ static void sps_init(void) gpio_set_wakepin(GPIO_STRAP_B1, GPIO_HIB_WAKE_FALLING); int_ap_register(sps_int_ap_extension_enable_); - - /* - * TODO: if TPM_BOARD_CFG has INT_AP extension enabled, then call - * int_ap_extension_enable(). - */ } -DECLARE_HOOK(HOOK_INIT, sps_init, HOOK_PRIO_DEFAULT); - - +DECLARE_HOOK(HOOK_INIT, sps_init, HOOK_PRIO_INIT_CR50_BOARD - 1); /*****************************************************************************/ /* Interrupt handler stuff */ diff --git a/common/i2cs_tpm.c b/common/i2cs_tpm.c index edbe7aa967..27ee944c3c 100644 --- a/common/i2cs_tpm.c +++ b/common/i2cs_tpm.c @@ -258,13 +258,8 @@ static void i2cs_if_register(void) i2cs_write_error_count = 0; int_ap_register(i2cs_int_ap_extension_enable_); - - /* - * TODO: if TPM_BOARD_CFG has INT_AP extension enabled, then call - * int_ap_extension_enable(), and set int_ap_extension_enabled_ true. - */ } -DECLARE_HOOK(HOOK_INIT, i2cs_if_register, HOOK_PRIO_LAST); +DECLARE_HOOK(HOOK_INIT, i2cs_if_register, HOOK_PRIO_INIT_CR50_BOARD - 1); static int command_i2cs(int argc, char **argv) { |