From 7a3d4bdeefe361d8b88d0a62251df768a73684b3 Mon Sep 17 00:00:00 2001 From: Soby Mathew Date: Fri, 9 Sep 2016 11:33:58 +0100 Subject: Flush `psci_plat_pm_ops` after initialization The `psci_plat_pm_ops` global pointer is initialized during cold boot by the primary CPU and will be accessed by the secondary CPUs before enabling data cache during warm boot. This patch adds a missing data cache flush of `psci_plat_psci_ops` after initialization during psci_setup() so that secondaries can see the updated `psci_plat_psci_ops` pointer. Fixes ARM-software/tf-issues#424 Change-Id: Id4554800b5646302b944115a33be69507d53cedb --- lib/psci/psci_setup.c | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'lib') diff --git a/lib/psci/psci_setup.c b/lib/psci/psci_setup.c index 20d06352..aa2ed510 100644 --- a/lib/psci/psci_setup.c +++ b/lib/psci/psci_setup.c @@ -238,6 +238,13 @@ int psci_setup(uintptr_t mailbox_ep) plat_setup_psci_ops(mailbox_ep, &psci_plat_pm_ops); assert(psci_plat_pm_ops); + /* + * Flush `psci_plat_pm_ops` as it will be accessed by secondary CPUs + * during warm boot before data cache is enabled. + */ + flush_dcache_range((uintptr_t)&psci_plat_pm_ops, + sizeof(psci_plat_pm_ops)); + /* Initialize the psci capability */ psci_caps = PSCI_GENERIC_CAP; -- cgit