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