diff --git a/plat/xilinx/zynqmp/pm_service/pm_api_sys.c b/plat/xilinx/zynqmp/pm_service/pm_api_sys.c index e84c4547e2fbe0edfb854e9958bbe50340cf6e1b..d746c286579a5d4fff8daea573bea7cde24dc024 100644 --- a/plat/xilinx/zynqmp/pm_service/pm_api_sys.c +++ b/plat/xilinx/zynqmp/pm_service/pm_api_sys.c @@ -338,6 +338,22 @@ enum pm_ret_status pm_set_configuration(unsigned int phys_addr) return PM_RET_ERROR_NOTSUPPORTED; } +/** + * pm_init_finalize() - Call to notify PMU firmware that master has power + * management enabled and that it has finished its + * initialization + * + * @return Status returned by the PMU firmware + */ +enum pm_ret_status pm_init_finalize(void) +{ + uint32_t payload[PAYLOAD_ARG_CNT]; + + /* Send request to the PMU */ + PM_PACK_PAYLOAD1(payload, PM_INIT_FINALIZE); + return pm_ipi_send_sync(primary_proc, payload, NULL, 0); +} + /** * pm_get_node_status() - PM call to request a node's current status * @nid Node id diff --git a/plat/xilinx/zynqmp/pm_service/pm_api_sys.h b/plat/xilinx/zynqmp/pm_service/pm_api_sys.h index bdb0eac52606cd5cfd0d34db5ab34a03194ac933..135bcc800c275807bcf4a2ff7b27229f5cc27cb4 100644 --- a/plat/xilinx/zynqmp/pm_service/pm_api_sys.h +++ b/plat/xilinx/zynqmp/pm_service/pm_api_sys.h @@ -76,6 +76,7 @@ enum pm_ret_status pm_set_max_latency(enum pm_node_id nid, /* Miscellaneous API functions */ enum pm_ret_status pm_get_api_version(unsigned int *version); enum pm_ret_status pm_set_configuration(unsigned int phys_addr); +enum pm_ret_status pm_init_finalize(void); enum pm_ret_status pm_get_node_status(enum pm_node_id node, uint32_t *ret_buff); enum pm_ret_status pm_register_notifier(enum pm_node_id nid, diff --git a/plat/xilinx/zynqmp/pm_service/pm_svc_main.c b/plat/xilinx/zynqmp/pm_service/pm_svc_main.c index 02d2f2d2f03f14350627bfac4d4a07ac2d17c187..5a4da90ebce294a328f143f7100ed686efb14150 100644 --- a/plat/xilinx/zynqmp/pm_service/pm_svc_main.c +++ b/plat/xilinx/zynqmp/pm_service/pm_svc_main.c @@ -183,6 +183,10 @@ uint64_t pm_smc_handler(uint32_t smc_fid, uint64_t x1, uint64_t x2, uint64_t x3, ret = pm_set_configuration(pm_arg[0]); SMC_RET1(handle, (uint64_t)ret); + case PM_INIT_FINALIZE: + ret = pm_init_finalize(); + SMC_RET1(handle, (uint64_t)ret); + case PM_GET_NODE_STATUS: { uint32_t buff[3];