From 74e31a480331d8913ade5394b011d6bf000f2d3c Mon Sep 17 00:00:00 2001 From: Yann Gautier <yann.gautier@st.com> Date: Fri, 12 Jul 2019 08:58:48 +0200 Subject: [PATCH] stm32mp1: configure wakeup interrupt for non-secure software The wakeup from STOP mode should be available even if TZEN bit is 0 in RCC. Change-Id: I4301ebf76d4a48972bfc2c3d14945a7c18249b51 Signed-off-by: Yann Gautier <yann.gautier@st.com> Reviewed-on: https://gerrit.st.com/c/mpu/oe/st/tf-a/+/138474 Reviewed-by: CITOOLS <smet-aci-reviews@lists.codex.cro.st.com> Reviewed-by: CIBUILD <smet-aci-builds@lists.codex.cro.st.com> Reviewed-by: Lionel DEBIEVE <lionel.debieve@st.com> Tested-by: Lionel DEBIEVE <lionel.debieve@st.com> --- drivers/st/clk/stm32mp1_calib.c | 16 ---------------- include/drivers/st/stm32mp1_calib.h | 3 +-- plat/st/common/stm32mp_dt.c | 5 +---- plat/st/stm32mp1/sp_min/sp_min_setup.c | 15 +++++++++++++++ plat/st/stm32mp1/stm32mp1_shared_resources.c | 2 -- 5 files changed, 17 insertions(+), 24 deletions(-) diff --git a/drivers/st/clk/stm32mp1_calib.c b/drivers/st/clk/stm32mp1_calib.c index be2d85be7..b764c971c 100644 --- a/drivers/st/clk/stm32mp1_calib.c +++ b/drivers/st/clk/stm32mp1_calib.c @@ -509,22 +509,6 @@ static void init_csi_cal(void) rcc_calibration(&stm32mp1_clk_cal_csi); } -void stm32mp1_calib_init_late(void) -{ - int irq_num; - - if (!stm32mp1_rcc_is_secure()) { - return; - } - - irq_num = fdt_rcc_enable_it("wakeup"); - if (irq_num < 0) { - panic(); - } - - plat_ic_set_interrupt_priority(irq_num, STM32MP1_IRQ_RCC_SEC_PRIO); -} - void stm32mp1_calib_init(void) { init_hsi_cal(); diff --git a/include/drivers/st/stm32mp1_calib.h b/include/drivers/st/stm32mp1_calib.h index 5f14f523b..ef69cb456 100644 --- a/include/drivers/st/stm32mp1_calib.h +++ b/include/drivers/st/stm32mp1_calib.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2018, STMicroelectronics - All Rights Reserved + * Copyright (c) 2018-2019, STMicroelectronics - All Rights Reserved * * SPDX-License-Identifier: BSD-3-Clause */ @@ -16,6 +16,5 @@ void stm32mp1_calib_it_handler(uint32_t id); int stm32mp1_calib_start_hsi_cal(void); int stm32mp1_calib_start_csi_cal(void); void stm32mp1_calib_init(void); -void stm32mp1_calib_init_late(void); #endif /* STM32MP1_CLK_H */ diff --git a/plat/st/common/stm32mp_dt.c b/plat/st/common/stm32mp_dt.c index b1132049b..a8aec50f5 100644 --- a/plat/st/common/stm32mp_dt.c +++ b/plat/st/common/stm32mp_dt.c @@ -132,12 +132,9 @@ int fdt_get_interrupt(int node, const fdt32_t **array, int *len, bool *extended) } break; - case DT_SHARED: + default: *array = fdt_getprop(fdt, node, "secure-interrupts", len); break; - - default: - return -FDT_ERR_NOTFOUND; } if (*array == NULL) { diff --git a/plat/st/stm32mp1/sp_min/sp_min_setup.c b/plat/st/stm32mp1/sp_min/sp_min_setup.c index 51ead6d6c..cc9a78fd8 100644 --- a/plat/st/stm32mp1/sp_min/sp_min_setup.c +++ b/plat/st/stm32mp1/sp_min/sp_min_setup.c @@ -25,6 +25,7 @@ #include <drivers/st/stm32_rtc.h> #include <drivers/st/stm32_tamp.h> #include <drivers/st/stm32_timer.h> +#include <drivers/st/stm32mp_clkfunc.h> #include <drivers/st/stm32mp_pmic.h> #include <drivers/st/stm32mp1_clk.h> #include <dt-bindings/clock/stm32mp1-clks.h> @@ -80,6 +81,18 @@ static void stm32_sgi1_it_handler(void) stm32mp_wait_cpu_reset(); } +static void configure_wakeup_interrupt(void) +{ + int irq_num = fdt_rcc_enable_it("wakeup"); + + if (irq_num < 0) { + ERROR("irq_num = %d\n", irq_num); + panic(); + } + + plat_ic_set_interrupt_priority(irq_num, STM32MP1_IRQ_RCC_SEC_PRIO); +} + /******************************************************************************* * Interrupt handler for FIQ (secure IRQ) ******************************************************************************/ @@ -359,6 +372,8 @@ void sp_min_platform_setup(void) panic(); } + configure_wakeup_interrupt(); + stm32mp_lock_periph_registering(); stm32mp1_init_scmi_server(); diff --git a/plat/st/stm32mp1/stm32mp1_shared_resources.c b/plat/st/stm32mp1/stm32mp1_shared_resources.c index 8279646cb..14e4fcc03 100644 --- a/plat/st/stm32mp1/stm32mp1_shared_resources.c +++ b/plat/st/stm32mp1/stm32mp1_shared_resources.c @@ -691,8 +691,6 @@ static void check_rcc_secure_configuration(void) bool mckprot = stm32mp1_rcc_is_mckprot(); bool secure = stm32mp1_rcc_is_secure(); - stm32mp1_calib_init_late(); - for (n = 0U; n < ARRAY_SIZE(shres_state); n++) { if (shres_state[n] != SHRES_SECURE) { continue; -- GitLab