From 6d3b4cd61c8a517d664a361add79c16812cbcbcd Mon Sep 17 00:00:00 2001
From: Lionel Debieve <lionel.debieve@st.com>
Date: Thu, 12 Nov 2020 10:44:51 +0100
Subject: [PATCH] reset: stm32mp1_reset: add system reset management

Add the system reset management into the stm32mp
reset driver.

Signed-off-by: Lionel Debieve <lionel.debieve@st.com>
Change-Id: I748f10de2398e1323160f479f99e92abd2f65dca
Reviewed-on: https://gerrit.st.com/c/mpu/oe/st/tf-a/+/184412
Reviewed-by: CITOOLS <smet-aci-reviews@lists.codex.cro.st.com>
Reviewed-by: Gabriel FERNANDEZ <gabriel.fernandez@st.com>
Reviewed-by: Yann GAUTIER <yann.gautier@st.com>
---
 drivers/st/reset/stm32mp1_reset.c  | 13 +++++++++++++
 include/drivers/st/stm32mp_reset.h |  5 +++++
 2 files changed, 18 insertions(+)

diff --git a/drivers/st/reset/stm32mp1_reset.c b/drivers/st/reset/stm32mp1_reset.c
index 287d398ab..a803923fc 100644
--- a/drivers/st/reset/stm32mp1_reset.c
+++ b/drivers/st/reset/stm32mp1_reset.c
@@ -83,3 +83,16 @@ void stm32mp_reset_assert_deassert_to_mcu(bool assert_not_deassert)
 		mmio_setbits_32(rcc_base + RCC_MP_GCR, RCC_MP_GCR_BOOT_MCU);
 	}
 }
+
+void __dead2 stm32mp_system_reset(void)
+{
+	uintptr_t rcc_base = stm32mp_rcc_base();
+
+	mmio_setbits_32(rcc_base + RCC_MP_GRSTCSETR,
+			RCC_MP_GRSTCSETR_MPSYSRST);
+
+	/* Loop in case system reset is not immediately caught */
+	for ( ; ; ) {
+		;
+	}
+}
diff --git a/include/drivers/st/stm32mp_reset.h b/include/drivers/st/stm32mp_reset.h
index 397079801..8c43c0b5b 100644
--- a/include/drivers/st/stm32mp_reset.h
+++ b/include/drivers/st/stm32mp_reset.h
@@ -54,4 +54,9 @@ static inline void stm32mp_reset_release(uint32_t reset_id)
  */
 void stm32mp_reset_assert_deassert_to_mcu(bool assert_not_deassert);
 
+/*
+ * Manage system reset control
+ */
+void __dead2 stm32mp_system_reset(void);
+
 #endif /* STM32MP_RESET_H */
-- 
GitLab