diff --git a/lib/sw_apps/zynqmp_pmufw/src/pm_master.c b/lib/sw_apps/zynqmp_pmufw/src/pm_master.c index dd3a50e1..5c5507ed 100644 --- a/lib/sw_apps/zynqmp_pmufw/src/pm_master.c +++ b/lib/sw_apps/zynqmp_pmufw/src/pm_master.c @@ -596,12 +596,23 @@ done: * PmEnableProxyWake() - Enable scheduled wake-up sources in GIC Proxy * @master Pointer to master whose scheduled wake-up sources should be enabled * - * When FPD is powered down, wake-up sources are enabled in GIC Proxy + * When FPD is powered down, wake-up sources should be enabled in GIC Proxy, + * if APU's primary processor is gently put into a sleep. If APU is forced to + * power down, this function will return without enabling GIC Proxy, because + * after forced power down the processor can only be woken-up by an explicit + * wake-up request through PM API. The check whether the processor is in sleep + * state is performed in this function and not in pm_power from where this + * function is called in order to keep pm_power independent from (not-aware of) + * processor states. */ void PmEnableProxyWake(PmMaster* const master) { u32 i; + if (master->procs->node.currState != PM_PROC_STATE_SLEEP) { + goto done; + } + PmDbg("%s\n", PmStrNode(master->procs->node.nodeId)); for (i = 0; i < master->reqsCnt; i++) { @@ -609,6 +620,9 @@ void PmEnableProxyWake(PmMaster* const master) PmSlaveWakeEnable(master->reqs[i].slave); } } + +done: + return; } /** diff --git a/lib/sw_apps/zynqmp_pmufw/src/xpfw_version.h b/lib/sw_apps/zynqmp_pmufw/src/xpfw_version.h index a6ed72b4..8c79c136 100644 --- a/lib/sw_apps/zynqmp_pmufw/src/xpfw_version.h +++ b/lib/sw_apps/zynqmp_pmufw/src/xpfw_version.h @@ -1,4 +1,4 @@ #ifndef ZYNQMP_XPFW_VERSION__H_ #define ZYNQMP_XPFW_VERSION__H_ - #define ZYNQMP_XPFW_VERSION "2015.1-swbeta2-17-gf10e9915f4bb" + #define ZYNQMP_XPFW_VERSION "2015.1-swbeta2-23-g052cc0819981" #endif