void XPm_ClientWakeup(const struct XPm_Master *const master) { u32 cpuid = pm_get_cpuid(master->node_id); if (UNDEFINED_CPUID != cpuid) { u32 val = pm_read(MASTER_PWRCTL); val &= ~(master->pwrdn_mask); pm_write(MASTER_PWRCTL, val); } }
/** * pm_client_wakeup() - Client-specific wakeup actions * * This function should contain any PU-specific actions * required for waking up another APU core */ void pm_client_wakeup(const struct pm_proc *proc) { unsigned int cpuid = pm_get_cpuid(proc->node_id); if (cpuid == UNDEFINED_CPUID) return; bakery_lock_get(&pm_client_secure_lock); /* clear powerdown bit for affected cpu */ uint32_t val = mmio_read_32(APU_PWRCTL); val &= ~(proc->pwrdn_mask); mmio_write_32(APU_PWRCTL, val); bakery_lock_release(&pm_client_secure_lock); }