diff --git a/src/soc/nvidia/tegra124/bootblock.c b/src/soc/nvidia/tegra124/bootblock.c index 2698611fba..3355ce34c2 100644 --- a/src/soc/nvidia/tegra124/bootblock.c +++ b/src/soc/nvidia/tegra124/bootblock.c @@ -63,5 +63,5 @@ void main(void) if (entry) clock_cpu0_config_and_reset(entry); - hlt(); + clock_halt_avp(); } diff --git a/src/soc/nvidia/tegra124/clock.c b/src/soc/nvidia/tegra124/clock.c index e1494c80c9..2cf5b77c0a 100644 --- a/src/soc/nvidia/tegra124/clock.c +++ b/src/soc/nvidia/tegra124/clock.c @@ -372,6 +372,15 @@ void clock_cpu0_config_and_reset(void *entry) &clk_rst->rst_cpug_cmplx_clr); } +void clock_halt_avp(void) +{ + for (;;) { + write32(FLOW_EVENT_JTAG | FLOW_EVENT_LIC_IRQ | + FLOW_EVENT_GIC_IRQ | FLOW_MODE_WAITEVENT, + &flow->halt_cop_events); + } +} + void clock_init(void) { u32 osc = clock_get_osc_bits(); diff --git a/src/soc/nvidia/tegra124/include/soc/clock.h b/src/soc/nvidia/tegra124/include/soc/clock.h index 3eec82c733..3ec36080c7 100644 --- a/src/soc/nvidia/tegra124/include/soc/clock.h +++ b/src/soc/nvidia/tegra124/include/soc/clock.h @@ -248,6 +248,7 @@ int clock_get_osc_khz(void); void clock_early_uart(void); void clock_external_output(int clk_id); void clock_cpu0_config_and_reset(void * entry); +void clock_halt_avp(void); void clock_enable_clear_reset(u32 l, u32 h, u32 u, u32 v, u32 w, u32 x); void clock_init(void); void clock_init_arm_generic_timer(void);