]> git.baikalelectronics.ru Git - arm-tf.git/commitdiff
plat/arm: css: Turn ON/OFF redistributor in sync with GIC CPU interface ON/OFF
authorJagadeesh Ujja <jagadeesh.ujja@arm.com>
Tue, 5 Jan 2021 16:31:24 +0000 (22:01 +0530)
committerjagadeesh.ujja <jagadeesh.ujja@arm.com>
Wed, 20 Jan 2021 13:31:16 +0000 (13:31 +0000)
Turn ON/OFF GIC redistributor in sync with GIC CPU interface ON/OFF.

Issue :
The Linux prompt hangs when all the cores in a cluster are turned OFF
and we try to turn ON a core in that cluster. Previously when TF-A turns
ON a core, TF-A first turns ON the redistributor followed by the core.
This did not match the flow when turning OFF a core, as TF-A did not
turn OFF redistributor when the corresponding core[s] are disabled.
This hang is resolved by disabling redistributor as cores are disabled,
keeping them in sync.

Signed-off-by: Jagadeesh Ujja <jagadeesh.ujja@arm.com>
Change-Id: Ifd04fdcfd47b45e00f874f15b098471883d023f0

plat/arm/css/common/css_pm.c

index 8e74526346cc409dc46d6e01ea47ba77f4af5b5c..926b8ec7cd838c0778e1ae44bc47208980acc77d 100644 (file)
@@ -123,6 +123,9 @@ static void css_power_down_common(const psci_power_state_t *target_state)
        /* Prevent interrupts from spuriously waking up this cpu */
        plat_arm_gic_cpuif_disable();
 
+       /* Turn redistributor off */
+       plat_arm_gic_redistif_off();
+
        /* Cluster is to be turned off, so disable coherency */
        if (CSS_CLUSTER_PWR_STATE(target_state) == ARM_LOCAL_STATE_OFF) {
                plat_arm_interconnect_exit_coherency();