diff --git a/drivers/arm/pl011/aarch64/pl011_console.S b/drivers/arm/pl011/aarch64/pl011_console.S index 6f2510a..448501a 100644 --- a/drivers/arm/pl011/aarch64/pl011_console.S +++ b/drivers/arm/pl011/aarch64/pl011_console.S @@ -6,6 +6,7 @@ #include #include #include +#include #include /* diff --git a/plat/qemu/aarch64/plat_helpers.S b/plat/qemu/aarch64/plat_helpers.S index ed55379..ca5eec6 100644 --- a/plat/qemu/aarch64/plat_helpers.S +++ b/plat/qemu/aarch64/plat_helpers.S @@ -14,12 +14,13 @@ .globl platform_mem_init .globl plat_qemu_calc_core_pos .globl plat_crash_console_init +#if MULTI_CONSOLE_API .globl plat_crash_console_putc +#endif /* MULTI_CONSOLE_API */ .globl plat_secondary_cold_boot_setup .globl plat_get_my_entrypoint .globl plat_is_my_cpu_primary - func plat_my_core_pos mrs x0, mpidr_el1 b plat_qemu_calc_core_pos @@ -96,10 +97,7 @@ * --------------------------------------------- */ func plat_crash_console_init - mov_imm x0, PLAT_QEMU_CRASH_UART_BASE - mov_imm x1, PLAT_QEMU_CRASH_UART_CLK_IN_HZ - mov_imm x2, PLAT_QEMU_CONSOLE_BAUDRATE - b console_core_init + b qemu_crash_console_init endfunc plat_crash_console_init /* --------------------------------------------- @@ -109,9 +107,10 @@ * Clobber list : x1, x2 * --------------------------------------------- */ +#if !MULTI_CONSOLE_API func plat_crash_console_putc mov_imm x1, PLAT_QEMU_CRASH_UART_BASE b console_core_putc endfunc plat_crash_console_putc - +#endif /* MULTI_CONSOLE_API */ diff --git a/plat/qemu/platform.mk b/plat/qemu/platform.mk index 5bfd48a..a9fbcd7 100644 --- a/plat/qemu/platform.mk +++ b/plat/qemu/platform.mk @@ -47,8 +47,9 @@ $(eval $(call add_define,ARM_XLAT_TABLES_LIB_V1)) -PLAT_BL_COMMON_SOURCES := plat/qemu/qemu_common.c \ - drivers/arm/pl011/${ARCH}/pl011_console.S +PLAT_BL_COMMON_SOURCES := plat/qemu/qemu_common.c \ + plat/qemu/qemu_console.c \ + drivers/arm/pl011/${ARCH}/pl011_console.S \ ifeq (${ARM_XLAT_TABLES_LIB_V1}, 1) PLAT_BL_COMMON_SOURCES += lib/xlat_tables/xlat_tables_common.c \ @@ -168,6 +169,7 @@ endif SEPARATE_CODE_AND_RODATA := 1 +MULTI_CONSOLE_API := 1 # Disable the PSCI platform compatibility layer ENABLE_PLAT_COMPAT := 0 diff --git a/plat/qemu/qemu_bl1_setup.c b/plat/qemu/qemu_bl1_setup.c index 3f617e2..556aae5 100644 --- a/plat/qemu/qemu_bl1_setup.c +++ b/plat/qemu/qemu_bl1_setup.c @@ -8,7 +8,6 @@ #include #include #include -#include #include #include "qemu_private.h" @@ -27,8 +26,7 @@ void bl1_early_platform_setup(void) { /* Initialize the console to provide early debug support */ - console_init(PLAT_QEMU_BOOT_UART_BASE, PLAT_QEMU_BOOT_UART_CLK_IN_HZ, - PLAT_QEMU_CONSOLE_BAUDRATE); + qemu_console_init(); /* Allow BL1 to see the whole Trusted RAM */ bl1_tzram_layout.total_base = BL_RAM_BASE; diff --git a/plat/qemu/qemu_bl2_setup.c b/plat/qemu/qemu_bl2_setup.c index 987c602..7650873 100644 --- a/plat/qemu/qemu_bl2_setup.c +++ b/plat/qemu/qemu_bl2_setup.c @@ -6,7 +6,6 @@ #include #include #include -#include #include #include #include @@ -123,8 +122,7 @@ void bl2_early_platform_setup(meminfo_t *mem_layout) { /* Initialize the console to provide early debug support */ - console_init(PLAT_QEMU_BOOT_UART_BASE, PLAT_QEMU_BOOT_UART_CLK_IN_HZ, - PLAT_QEMU_CONSOLE_BAUDRATE); + qemu_console_init(); /* Setup the BL2 memory layout */ bl2_tzram_layout = *mem_layout; diff --git a/plat/qemu/qemu_bl31_setup.c b/plat/qemu/qemu_bl31_setup.c index 6ded929..1e8b2ec 100644 --- a/plat/qemu/qemu_bl31_setup.c +++ b/plat/qemu/qemu_bl31_setup.c @@ -6,7 +6,6 @@ #include #include -#include #include #include #include @@ -45,8 +44,7 @@ #endif { /* Initialize the console to provide early debug support */ - console_init(PLAT_QEMU_BOOT_UART_BASE, PLAT_QEMU_BOOT_UART_CLK_IN_HZ, - PLAT_QEMU_CONSOLE_BAUDRATE); + qemu_console_init(); #if LOAD_IMAGE_V2 /* diff --git a/plat/qemu/qemu_console.c b/plat/qemu/qemu_console.c new file mode 100644 index 0000000..9c02957 --- /dev/null +++ b/plat/qemu/qemu_console.c @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2015-2018, ARM Limited and Contributors. All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ +#include +#include +#include + +static console_pl011_t console; +static console_pl011_t crash_console; + +void qemu_console_init(void) +{ +#if MULTI_CONSOLE_API + (void)console_pl011_register(PLAT_QEMU_BOOT_UART_BASE, + PLAT_QEMU_BOOT_UART_CLK_IN_HZ, + PLAT_QEMU_CONSOLE_BAUDRATE, &console); +#else + console_init(PLAT_QEMU_BOOT_UART_BASE, + PLAT_QEMU_BOOT_UART_CLK_IN_HZ, + PLAT_QEMU_CONSOLE_BAUDRATE); +#endif /* MULTI_CONSOLE_API */ +} + +void qemu_crash_console_init(void) +{ +#if MULTI_CONSOLE_API + (void)console_pl011_register(PLAT_QEMU_CRASH_UART_BASE, + PLAT_QEMU_CRASH_UART_CLK_IN_HZ, + PLAT_QEMU_CONSOLE_BAUDRATE, &crash_console); +#else + console_core_init(PLAT_QEMU_CRASH_UART_BASE, + PLAT_QEMU_CRASH_UART_CLK_IN_HZ, + PLAT_QEMU_CONSOLE_BAUDRATE); +#endif /* MULTI_CONSOLE_API */ +} diff --git a/plat/qemu/qemu_private.h b/plat/qemu/qemu_private.h index 716440f..c66d0f9 100644 --- a/plat/qemu/qemu_private.h +++ b/plat/qemu/qemu_private.h @@ -34,4 +34,7 @@ int dt_add_psci_node(void *fdt); int dt_add_psci_cpu_enable_methods(void *fdt); +void qemu_console_init(void); +void qemu_crash_console_init(void); + #endif /*__QEMU_PRIVATE_H*/