diff options
author | Sandrine Bailleux <sandrine.bailleux@arm.com> | 2018-11-08 14:10:18 +0100 |
---|---|---|
committer | Sandrine Bailleux <sandrine.bailleux@arm.com> | 2018-12-13 16:07:05 +0100 |
commit | 750b7cca6af02a35e52eaf012b32f1f11dc18ceb (patch) | |
tree | 857aab92ded199a089919bb4fb6e519483dcf11d /lib | |
parent | 411a6b26f73dfb85143603cdad09588b8e159b04 (diff) |
Do not print CPU MPID in mp_printf()
mp_printf() should just be an MP-safe version of printf(), i.e. one
that takes the console lock before printing. It should not be
responsible for printing the CPU MPID as well, this decision should be
left to the caller.
Also make Cactus and Ivy use mp_printf(). Before that, they could not
call this function because they couldn't access the MPIDR_EL1 as
S-EL0 images.
Change-Id: I4eafee01ffc279296395b94dd4a07cfbb8e858e2
Signed-off-by: Sandrine Bailleux <sandrine.bailleux@arm.com>
Diffstat (limited to 'lib')
-rw-r--r-- | lib/utils/mp_printf.c | 47 |
1 files changed, 4 insertions, 43 deletions
diff --git a/lib/utils/mp_printf.c b/lib/utils/mp_printf.c index 27a93ac..777c736 100644 --- a/lib/utils/mp_printf.c +++ b/lib/utils/mp_printf.c @@ -4,8 +4,6 @@ * SPDX-License-Identifier: BSD-3-Clause */ -#include <arch_helpers.h> -#include <platform.h> #include <spinlock.h> #include <stdarg.h> #include <stdio.h> @@ -13,51 +11,14 @@ /* Lock to avoid concurrent accesses to the serial console */ static spinlock_t printf_lock; -/* - * Print the MPID header, e.g.: [cpu 0x0100] - * - * If SHELL_COLOR == 1, this also prints shell's color escape sequences to ease - * identifying which CPU displays the message. There are 8 standard colors so - * if the platform has more than 8 CPUs, some colors will be reused. - */ -#if SHELL_COLOR -#define PRINT_MPID_HDR(_mpid) \ - do { \ - unsigned int linear_id = platform_get_core_pos(_mpid); \ - printf("\033[1;%u;40m", 30 + (linear_id & 0x7)); \ - printf("[cpu 0x%.4x] ", _mpid); \ - printf("\033[0m"); \ - } while (0) -#else -#define PRINT_MPID_HDR(_mpid) \ - printf("[cpu 0x%.4x] ", _mpid) -#endif /* SHELL_COLOR */ - void mp_printf(const char *fmt, ...) { - /* - * As part of testing Firmware Update feature on Cortex-A57 CPU, an - * issue was discovered while printing in NS_BL1U stage. The issue - * appears when the second call to `NOTICE()` is made in the - * `ns_bl1u_main()`. As a result of this issue the CPU hangs and the - * debugger is also not able to connect anymore. - * - * After further debugging and experiments it was found that if - * `read_mpidr_el1()` is avoided or volatile qualifier is used for - * reading the mpidr, this issue gets resolved. - * - * NOTE: The actual/real reason why this happens is still not known. - * Moreover this problem is not encountered on Cortex-A53 CPU. - */ - volatile unsigned int mpid = read_mpidr_el1() & 0xFFFF; - - va_list ap; - va_start(ap, fmt); + va_list args; + va_start(args, fmt); spin_lock(&printf_lock); - PRINT_MPID_HDR(mpid); - vprintf(fmt, ap); + vprintf(fmt, args); spin_unlock(&printf_lock); - va_end(ap); + va_end(args); } |