From 394a65aa96d6ce8cd55c0a824dc112d60ef97835 Mon Sep 17 00:00:00 2001 From: Tejas Patel Date: Wed, 27 Feb 2019 18:44:57 +0530 Subject: [PATCH] xilinx: versal: Remove no_pmc ops to ON power domain Add PMC ops for power domain ON and remove no_pmc ops. Signed-off-by: Tejas Patel Signed-off-by: Rajan Vaja Signed-off-by: Jolly Shah Change-Id: Id4308dfe124b60a751765beb3397d1b0071f14fc --- plat/xilinx/versal/plat_psci.c | 51 ++++++++++------------------------ 1 file changed, 15 insertions(+), 36 deletions(-) diff --git a/plat/xilinx/versal/plat_psci.c b/plat/xilinx/versal/plat_psci.c index de581bd0b..5e3b6f7fc 100644 --- a/plat/xilinx/versal/plat_psci.c +++ b/plat/xilinx/versal/plat_psci.c @@ -5,56 +5,35 @@ */ #include +#include #include #include #include #include +#include "pm_api_sys.h" +#include "pm_client.h" + static uintptr_t versal_sec_entry; -static int versal_nopmc_pwr_domain_on(u_register_t mpidr) +static int versal_pwr_domain_on(u_register_t mpidr) { - uint32_t r; unsigned int cpu_id = plat_core_pos_by_mpidr(mpidr); + const struct pm_proc *proc; VERBOSE("%s: mpidr: 0x%lx\n", __func__, mpidr); if (cpu_id == -1) return PSCI_E_INTERN_FAIL; - /* - * program RVBAR - */ - mmio_write_32(FPD_APU_RVBAR_L_0 + (cpu_id << 3), versal_sec_entry); - mmio_write_32(FPD_APU_RVBAR_H_0 + (cpu_id << 3), versal_sec_entry >> 32); - - /* - * clear VINITHI - */ - r = mmio_read_32(FPD_APU_CONFIG_0); - r &= ~(1 << FPD_APU_CONFIG_0_VINITHI_SHIFT << cpu_id); - mmio_write_32(FPD_APU_CONFIG_0, r); - - /* - * FIXME: Add power up sequence, By default it works - * now without the need of it as it was powered up by - * default. - */ - - /* - * clear power down request - */ - r = mmio_read_32(FPD_APU_PWRCTL); - r &= ~(1 << cpu_id); - mmio_write_32(FPD_APU_PWRCTL, r); - - /* - * release core reset - */ - r = mmio_read_32(CRF_RST_APU); - r &= ~((CRF_RST_APU_ACPU_PWRON_RESET | - CRF_RST_APU_ACPU_RESET) << cpu_id); - mmio_write_32(CRF_RST_APU, r); + proc = pm_get_proc(cpu_id); + + /* Send request to PMC to wake up selected ACPU core */ + pm_req_wakeup(proc->node_id, (versal_sec_entry & 0xFFFFFFFF) | 0x1, + versal_sec_entry >> 32, 0); + + /* Clear power down request */ + pm_client_wakeup(proc); return PSCI_E_SUCCESS; } @@ -69,7 +48,7 @@ void versal_pwr_domain_on_finish(const psci_power_state_t *target_state) } static const struct plat_psci_ops versal_nopmc_psci_ops = { - .pwr_domain_on = versal_nopmc_pwr_domain_on, + .pwr_domain_on = versal_pwr_domain_on, .pwr_domain_on_finish = versal_pwr_domain_on_finish, }; -- GitLab