From b05d2792aec4eab096d6be1355f7134614ee92c3 Mon Sep 17 00:00:00 2001 From: Ravi Patel Date: Tue, 30 Jul 2019 04:10:07 -0700 Subject: [PATCH] xilinx: versal: Do not pass ACPU0 always in set_wakeup_source() Existing code passes ACPU0 to LibPM as node_id in set_wakeup_source() call because last suspending core will be ACPU0 in most of the case. Now it may be possible that user may disable the ACPU0 using hot-plug and after that it suspends Linux. So in that case ACPU0 will not be last suspending core. To overcome above scenario, pass the current running processor ID while calling set_wakeup_source(). Signed-off-by: Ravi Patel Signed-off-by: Rajan Vaja Change-Id: If15354c2150b5bb1305b5f93ca4e8c7a81d59f0a --- plat/xilinx/versal/pm_service/pm_client.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/plat/xilinx/versal/pm_service/pm_client.c b/plat/xilinx/versal/pm_service/pm_client.c index 5b47838e9..9ab921ee7 100644 --- a/plat/xilinx/versal/pm_service/pm_client.c +++ b/plat/xilinx/versal/pm_service/pm_client.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019, Xilinx, Inc. All rights reserved. + * Copyright (c) 2019-2020, Xilinx, Inc. All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause */ @@ -113,8 +113,9 @@ static enum pm_device_node_idx irq_to_pm_node_idx(unsigned int irq) /** * pm_client_set_wakeup_sources - Set all devices with enabled interrupts as * wake sources in the LibPM. + * @node_id: Node id of processor */ -static void pm_client_set_wakeup_sources(void) +static void pm_client_set_wakeup_sources(uint32_t node_id) { uint32_t reg_num; uint32_t device_id; @@ -147,7 +148,7 @@ static void pm_client_set_wakeup_sources(void) (!pm_wakeup_nodes_set[node_idx])) { /* Get device ID from node index */ device_id = PERIPH_DEVID(node_idx); - ret = pm_set_wakeup_source(XPM_DEVID_ACPU_0, + ret = pm_set_wakeup_source(node_id, device_id, 1); pm_wakeup_nodes_set[node_idx] = !ret; } @@ -167,7 +168,7 @@ void pm_client_suspend(const struct pm_proc *proc, unsigned int state) bakery_lock_get(&pm_client_secure_lock); if (state == PM_STATE_SUSPEND_TO_RAM) - pm_client_set_wakeup_sources(); + pm_client_set_wakeup_sources(proc->node_id); /* Set powerdown request */ mmio_write_32(FPD_APU_PWRCTL, mmio_read_32(FPD_APU_PWRCTL) |