diff --git a/arch/arm/mach-imx/common.h b/arch/arm/mach-imx/common.h index e875ade2c9eb..d410b4cc425c 100644 --- a/arch/arm/mach-imx/common.h +++ b/arch/arm/mach-imx/common.h @@ -90,6 +90,7 @@ void mcc_receive_from_mu_buffer(unsigned int index, unsigned int *data); void mcc_send_via_mu_buffer(unsigned int index, unsigned int data); bool imx_mu_is_m4_in_low_freq(void); bool imx_mu_is_m4_in_stop(void); +void imx_mu_set_m4_run_mode(void); int imx_mu_lpm_ready(bool ready); enum mxc_cpu_pwr_mode { diff --git a/arch/arm/mach-imx/mu.c b/arch/arm/mach-imx/mu.c index 7dbe3bfe24f3..ae502d9f6428 100644 --- a/arch/arm/mach-imx/mu.c +++ b/arch/arm/mach-imx/mu.c @@ -68,6 +68,11 @@ struct irq_domain *domain; static bool m4_in_stop; +void imx_mu_set_m4_run_mode(void) +{ + m4_in_stop = false; +} + bool imx_mu_is_m4_in_stop(void) { return m4_in_stop; diff --git a/arch/arm/mach-imx/pm-imx7.c b/arch/arm/mach-imx/pm-imx7.c index 0e9e920ced7d..f832b1e0b3e5 100644 --- a/arch/arm/mach-imx/pm-imx7.c +++ b/arch/arm/mach-imx/pm-imx7.c @@ -754,6 +754,8 @@ static int imx7_pm_enter(suspend_state_t state) pm_info->src_base.vbase + M4RCR); /* offset high bus count for m4 image */ request_bus_freq(BUS_FREQ_HIGH); + /* restore M4 to run mode */ + imx_mu_set_m4_run_mode(); /* gpc wakeup */ imx_mu_lpm_ready(true); }