diff options
-rw-r--r-- | plat/xilinx/zynqmp/plat_psci.c | 6 | ||||
-rw-r--r-- | plat/xilinx/zynqmp/pm_service/pm_api_sys.c | 4 | ||||
-rw-r--r-- | plat/xilinx/zynqmp/pm_service/pm_api_sys.h | 2 | ||||
-rw-r--r-- | plat/xilinx/zynqmp/pm_service/pm_defs.h | 11 | ||||
-rw-r--r-- | plat/xilinx/zynqmp/pm_service/pm_svc_main.c | 2 |
5 files changed, 19 insertions, 6 deletions
diff --git a/plat/xilinx/zynqmp/plat_psci.c b/plat/xilinx/zynqmp/plat_psci.c index 55227ea9..7f7e0322 100644 --- a/plat/xilinx/zynqmp/plat_psci.c +++ b/plat/xilinx/zynqmp/plat_psci.c @@ -270,7 +270,8 @@ static void __dead2 zynqmp_system_off(void) plat_arm_interconnect_exit_coherency(); /* Send the power down request to the PMU */ - pm_system_shutdown(0); + pm_system_shutdown(PMF_SHUTDOWN_TYPE_SHUTDOWN, + PMF_SHUTDOWN_SUBTYPE_SUBSYSTEM); while (1) wfi(); @@ -304,7 +305,8 @@ static void __dead2 zynqmp_system_reset(void) plat_arm_interconnect_exit_coherency(); /* Send the system reset request to the PMU */ - pm_system_shutdown(1); + pm_system_shutdown(PMF_SHUTDOWN_TYPE_RESET, + PMF_SHUTDOWN_SUBTYPE_SUBSYSTEM); while (1) wfi(); diff --git a/plat/xilinx/zynqmp/pm_service/pm_api_sys.c b/plat/xilinx/zynqmp/pm_service/pm_api_sys.c index b9906060..94160169 100644 --- a/plat/xilinx/zynqmp/pm_service/pm_api_sys.c +++ b/plat/xilinx/zynqmp/pm_service/pm_api_sys.c @@ -243,11 +243,11 @@ enum pm_ret_status pm_set_wakeup_source(enum pm_node_id target, * * @return Returns status, either success or error+reason */ -enum pm_ret_status pm_system_shutdown(unsigned int restart) +enum pm_ret_status pm_system_shutdown(unsigned int type, unsigned int subtype) { uint32_t payload[PAYLOAD_ARG_CNT]; - PM_PACK_PAYLOAD2(payload, PM_SYSTEM_SHUTDOWN, restart); + PM_PACK_PAYLOAD3(payload, PM_SYSTEM_SHUTDOWN, type, subtype); return pm_ipi_send(primary_proc, payload); } diff --git a/plat/xilinx/zynqmp/pm_service/pm_api_sys.h b/plat/xilinx/zynqmp/pm_service/pm_api_sys.h index 1f681180..8cbd13b2 100644 --- a/plat/xilinx/zynqmp/pm_service/pm_api_sys.h +++ b/plat/xilinx/zynqmp/pm_service/pm_api_sys.h @@ -61,7 +61,7 @@ enum pm_ret_status pm_set_wakeup_source(enum pm_node_id target, enum pm_node_id wkup_node, unsigned int enable); -enum pm_ret_status pm_system_shutdown(unsigned int restart); +enum pm_ret_status pm_system_shutdown(unsigned int type, unsigned int subtype); enum pm_ret_status pm_init_suspend_cb(enum pm_suspend_reason reason, unsigned int latency, diff --git a/plat/xilinx/zynqmp/pm_service/pm_defs.h b/plat/xilinx/zynqmp/pm_service/pm_defs.h index aec335a5..0c071c1f 100644 --- a/plat/xilinx/zynqmp/pm_service/pm_defs.h +++ b/plat/xilinx/zynqmp/pm_service/pm_defs.h @@ -225,4 +225,15 @@ enum pm_boot_status { PM_BOOT_ERROR, }; +enum pm_shutdown_type { + PMF_SHUTDOWN_TYPE_SHUTDOWN, + PMF_SHUTDOWN_TYPE_RESET, +}; + +enum pm_shutdown_subtype { + PMF_SHUTDOWN_SUBTYPE_SUBSYSTEM, + PMF_SHUTDOWN_SUBTYPE_PS_ONLY, + PMF_SHUTDOWN_SUBTYPE_SYSTEM, +}; + #endif /* _PM_DEFS_H_ */ diff --git a/plat/xilinx/zynqmp/pm_service/pm_svc_main.c b/plat/xilinx/zynqmp/pm_service/pm_svc_main.c index d6355834..c062392e 100644 --- a/plat/xilinx/zynqmp/pm_service/pm_svc_main.c +++ b/plat/xilinx/zynqmp/pm_service/pm_svc_main.c @@ -152,7 +152,7 @@ uint64_t pm_smc_handler(uint32_t smc_fid, uint64_t x1, uint64_t x2, uint64_t x3, SMC_RET1(handle, (uint64_t)ret); case PM_SYSTEM_SHUTDOWN: - ret = pm_system_shutdown(pm_arg[0]); + ret = pm_system_shutdown(pm_arg[0], pm_arg[1]); SMC_RET1(handle, (uint64_t)ret); case PM_REQ_NODE: |