]> git.baikalelectronics.ru Git - arm-tf.git/commitdiff
fix(n1sdp): add platform-specific power domain functions
authorWerner Lewis <werner.lewis@arm.com>
Tue, 21 Feb 2023 14:40:12 +0000 (14:40 +0000)
committerManish Pandey <manish.pandey2@arm.com>
Wed, 3 May 2023 15:01:12 +0000 (17:01 +0200)
Commit 4d8c18196378824e388cf31ef991ba8fbbb09cbf added a redistributor
power off to resolve an error on N1SDP/Morello. Prior to this fix,
turning off both cores in a cluster would cause a hang when powering
back on either core. This change introduced issues on other platforms
with a different GIC implementation, and was reverted in commit
60719e4e0965aead49d927f12bf2a37bd2629012.

This commit uses the previous fix in platform-specific implementations
of power domain off/suspend functions.

Signed-off-by: Werner Lewis <werner.lewis@arm.com>
Change-Id: I52c463646c494fe931ff4ce47afb940a56978fcd

plat/arm/board/n1sdp/n1sdp_bl31_setup.c
plat/arm/board/n1sdp/n1sdp_pm.c [new file with mode: 0644]
plat/arm/board/n1sdp/n1sdp_private.h [new file with mode: 0644]
plat/arm/board/n1sdp/platform.mk

index 4941a4bd439f1a08f98bdfdd0e76c76cdd6b80d6..ec2455f827a0e5445fb32d1bd09f07ee4ddd3537 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2018-2022, Arm Limited. All rights reserved.
+ * Copyright (c) 2018-2023, Arm Limited. All rights reserved.
  *
  * SPDX-License-Identifier: BSD-3-Clause
  */
@@ -14,6 +14,7 @@
 #include <plat/arm/common/plat_arm.h>
 
 #include "n1sdp_def.h"
+#include "n1sdp_private.h"
 #include <platform_def.h>
 
 /*
@@ -69,6 +70,8 @@ scmi_channel_plat_info_t *plat_css_get_scmi_info(unsigned int channel_id)
 
 const plat_psci_ops_t *plat_arm_psci_override_pm_ops(plat_psci_ops_t *ops)
 {
+       ops->pwr_domain_off = n1sdp_pwr_domain_off;
+       ops->pwr_domain_suspend = n1sdp_pwr_domain_suspend;
        return css_scmi_override_pm_ops(ops);
 }
 
diff --git a/plat/arm/board/n1sdp/n1sdp_pm.c b/plat/arm/board/n1sdp/n1sdp_pm.c
new file mode 100644 (file)
index 0000000..e43832a
--- /dev/null
@@ -0,0 +1,29 @@
+/*
+ * Copyright (c) 2023, Arm Limited. All rights reserved.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+
+#include <lib/psci/psci.h>
+#include <plat/arm/common/plat_arm.h>
+#include <plat/arm/css/common/css_pm.h>
+
+#include "n1sdp_private.h"
+
+/*******************************************************************************
+ * N1SDP specific functions called when turning off or suspending a power
+ * domain. Both additionally disable the GIC redistributor interface as cores
+ * are disabled to let cluster-PPU state transition to completion when a
+ * cluster is powered down.
+ ******************************************************************************/
+void n1sdp_pwr_domain_off(const psci_power_state_t *target_state)
+{
+       css_pwr_domain_off(target_state);
+       plat_arm_gic_redistif_off();
+}
+
+void n1sdp_pwr_domain_suspend(const psci_power_state_t *target_state)
+{
+       css_pwr_domain_suspend(target_state);
+       plat_arm_gic_redistif_off();
+}
diff --git a/plat/arm/board/n1sdp/n1sdp_private.h b/plat/arm/board/n1sdp/n1sdp_private.h
new file mode 100644 (file)
index 0000000..7a5c51d
--- /dev/null
@@ -0,0 +1,15 @@
+/*
+ * Copyright (c) 2023, Arm Limited. All rights reserved.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+
+#ifndef N1SDP_PRIVATE_H
+#define N1SDP_PRIVATE_H
+
+#include <lib/psci/psci.h>
+
+void n1sdp_pwr_domain_off(const psci_power_state_t *target_state);
+void n1sdp_pwr_domain_suspend(const psci_power_state_t *target_state);
+
+#endif /* N1SDP_PRIVATE_H */
index 9c0cc022c2296aaedc74bbfcebe1bb06270b9369..bd62614549640c47e098dbf1f4227676c573922d 100644 (file)
@@ -47,6 +47,7 @@ BL31_SOURCES          :=      ${N1SDP_CPU_SOURCES}                    \
                                ${INTERCONNECT_SOURCES}                 \
                                ${N1SDP_GIC_SOURCES}                    \
                                ${N1SDP_BASE}/n1sdp_bl31_setup.c        \
+                               ${N1SDP_BASE}/n1sdp_pm.c                \
                                ${N1SDP_BASE}/n1sdp_topology.c          \
                                ${N1SDP_BASE}/n1sdp_security.c          \
                                drivers/arm/css/sds/sds.c