summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--board/cr50/board.c14
-rw-r--r--board/cr50/board.h2
-rw-r--r--chip/g/sps.c9
-rw-r--r--common/i2cs_tpm.c7
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)
{