diff options
author | Will Wong <willw@xilinx.com> | 2020-11-22 23:45:21 -0800 |
---|---|---|
committer | Madhukar Pappireddy <madhukar.pappireddy@arm.com> | 2021-01-12 16:59:55 +0000 |
commit | 0a67923b99e1b1108ac0543e28ba9b9f4ccef1cc (patch) | |
tree | 8162f27799b1460300b2245f4092c191c32848f4 | |
parent | 1f64caeac896b805daf23ec3b6a8b3e406d2c89f (diff) | |
download | trusted-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.h | 3 | ||||
-rw-r--r-- | 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 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 */ |