| f185a542 | 29-Sep-2025 |
Boyan Karatotev <boyan.karatotev@arm.com> |
fix(fvp): do not unregister the console on system suspend
On PSCI SYSTEM_SUSPEND, Arm platforms will call arm_system_pwr_domain_save() which will call arm_console_runtime_end(). Usually (eg CSS), th
fix(fvp): do not unregister the console on system suspend
On PSCI SYSTEM_SUSPEND, Arm platforms will call arm_system_pwr_domain_save() which will call arm_console_runtime_end(). Usually (eg CSS), that's just a flush, but on FVP that also unregisters the console. On HW_ASSISTED_COHERENCY=0 builds, this has the potential to break and prevent any EL3 output after a SYSTEM_SUSPEND.
This happens because the calls to console_unregister()/console_register() will overwrite the value of the console_list variable in drivers/console/multi_console.c. They are only called on a system level suspend. The bug happens when the core wakes up. The console will be registered again as part of the pwr_domain_suspend_finish() call. However, this call happens before the data caches have been enabled in psci_do_pwrup_cache_maintenance(). As a result, the write to console_list will not be reflected in the L2 cache and other cores will not be able to read the new value.
The fix is to not unregister the console like other Arm platforms - we don't need to reinitialise the console so there's nothing to do.
A nice side effect is that arm_console_runtime_end() no longer needs to be weak.
Change-Id: Ibbdd4b22bad0d8f1dbd63c60ee0294d889a349a4 Signed-off-by: Boyan Karatotev <boyan.karatotev@arm.com>
show more ...
|