diff --git a/plat/xilinx/zynqmp/pm_service/pm_svc_main.c b/plat/xilinx/zynqmp/pm_service/pm_svc_main.c index 2906a41d39af2072ca92f6ea2781d01124a78917..69e711aa24f1304bdbf0760d538c37dcb471011c 100644 --- a/plat/xilinx/zynqmp/pm_service/pm_svc_main.c +++ b/plat/xilinx/zynqmp/pm_service/pm_svc_main.c @@ -117,9 +117,16 @@ 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_REQ_WAKEUP: - ret = pm_req_wakeup(pm_arg[0], pm_arg[1], pm_arg[2], + { + /* Use address flag is encoded in the 1st bit of the low-word */ + unsigned int set_addr = pm_arg[1] & 0x1; + uint64_t address = (uint64_t)pm_arg[2] << 32; + + address |= pm_arg[1] & (~0x1); + ret = pm_req_wakeup(pm_arg[0], set_addr, address, pm_arg[3]); SMC_RET1(handle, (uint64_t)ret); + } case PM_FORCE_POWERDOWN: ret = pm_force_powerdown(pm_arg[0], pm_arg[1]);