From 0a67923b99e1b1108ac0543e28ba9b9f4ccef1cc Mon Sep 17 00:00:00 2001 From: Will Wong Date: Sun, 22 Nov 2020 23:45:21 -0800 Subject: [PATCH] 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 Signed-off-by: Rajan Vaja Change-Id: I23c01725d8ebb71ad34be02ab204411b93620702 --- plat/xilinx/zynqmp/include/zynqmp_def.h | 3 +++ plat/xilinx/zynqmp/pm_service/pm_svc_main.c | 7 +++++-- 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 b492210b0..f47463000 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 49824c70d..a49bda8d2 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 */