aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWill Wong <willw@xilinx.com>2020-11-22 23:45:21 -0800
committerMadhukar Pappireddy <madhukar.pappireddy@arm.com>2021-01-12 16:59:55 +0000
commit0a67923b99e1b1108ac0543e28ba9b9f4ccef1cc (patch)
tree8162f27799b1460300b2245f4092c191c32848f4
parent1f64caeac896b805daf23ec3b6a8b3e406d2c89f (diff)
downloadtrusted-firmware-a-0a67923b99e1b1108ac0543e28ba9b9f4ccef1cc.tar.gz
zynqmp: pm: Add support for PS and system reset on WDT restart
Add ability to support PS and System reset after idling the APU, by reading the restart scope from the PMU. Signed-off-by: Will Wong <willw@xilinx.com> Signed-off-by: Rajan Vaja <rajan.vaja@xilinx.com> Change-Id: I23c01725d8ebb71ad34be02ab204411b93620702
-rw-r--r--plat/xilinx/zynqmp/include/zynqmp_def.h3
-rw-r--r--plat/xilinx/zynqmp/pm_service/pm_svc_main.c7
2 files changed, 8 insertions, 2 deletions
diff --git a/plat/xilinx/zynqmp/include/zynqmp_def.h b/plat/xilinx/zynqmp/include/zynqmp_def.h
index b492210b00..f47463000d 100644
--- a/plat/xilinx/zynqmp/include/zynqmp_def.h
+++ b/plat/xilinx/zynqmp/include/zynqmp_def.h
@@ -345,6 +345,9 @@
#define PMU_GLOBAL_GEN_STORAGE4 (GGS_BASEADDR + 0x10)
/* Warm restart boot health status mask */
#define PM_BOOT_HEALTH_STATUS_MASK U(0x01)
+/* WDT restart scope shift and mask */
+#define RESTART_SCOPE_SHIFT (3)
+#define RESTART_SCOPE_MASK (0x3U << RESTART_SCOPE_SHIFT)
/*AFI registers */
#define AFIFM6_WRCTRL U(13)
diff --git a/plat/xilinx/zynqmp/pm_service/pm_svc_main.c b/plat/xilinx/zynqmp/pm_service/pm_svc_main.c
index 49824c70d2..a49bda8d29 100644
--- a/plat/xilinx/zynqmp/pm_service/pm_svc_main.c
+++ b/plat/xilinx/zynqmp/pm_service/pm_svc_main.c
@@ -142,6 +142,8 @@ static uint64_t __unused __dead2 zynqmp_sgi7_irq(uint32_t id, uint32_t flags,
void *handle, void *cookie)
{
int i;
+ uint32_t value;
+
/* enter wfi and stay there */
INFO("Entering wfi\n");
@@ -156,8 +158,9 @@ static uint64_t __unused __dead2 zynqmp_sgi7_irq(uint32_t id, uint32_t flags,
spin_unlock(&inc_lock);
if (active_cores == 0) {
- pm_system_shutdown(PMF_SHUTDOWN_TYPE_RESET,
- PMF_SHUTDOWN_SUBTYPE_SUBSYSTEM);
+ pm_mmio_read(PMU_GLOBAL_GEN_STORAGE4, &value);
+ value = (value & RESTART_SCOPE_MASK) >> RESTART_SCOPE_SHIFT;
+ pm_system_shutdown(PMF_SHUTDOWN_TYPE_RESET, value);
}
/* enter wfi and stay there */