xref: /rk3399_ARM-atf/plat/brcm/board/common/bcm_console.c (revision 717448d622b13233e15aa43767fc8aa2f007486c)
1*717448d6SSheetal Tigadoli /*
2*717448d6SSheetal Tigadoli  * Copyright (c) 2018-2020, ARM Limited and Contributors. All rights reserved.
3*717448d6SSheetal Tigadoli  *
4*717448d6SSheetal Tigadoli  * SPDX-License-Identifier: BSD-3-Clause
5*717448d6SSheetal Tigadoli  */
6*717448d6SSheetal Tigadoli 
7*717448d6SSheetal Tigadoli #include <assert.h>
8*717448d6SSheetal Tigadoli 
9*717448d6SSheetal Tigadoli #include <common/debug.h>
10*717448d6SSheetal Tigadoli #include <drivers/console.h>
11*717448d6SSheetal Tigadoli #include <drivers/ti/uart/uart_16550.h>
12*717448d6SSheetal Tigadoli 
13*717448d6SSheetal Tigadoli #include <platform_def.h>
14*717448d6SSheetal Tigadoli 
15*717448d6SSheetal Tigadoli /*******************************************************************************
16*717448d6SSheetal Tigadoli  * Functions that set up the console
17*717448d6SSheetal Tigadoli  ******************************************************************************/
18*717448d6SSheetal Tigadoli static console_t bcm_boot_console;
19*717448d6SSheetal Tigadoli static console_t bcm_runtime_console;
20*717448d6SSheetal Tigadoli 
21*717448d6SSheetal Tigadoli /* Initialize the console to provide early debug support */
22*717448d6SSheetal Tigadoli void bcm_console_boot_init(void)
23*717448d6SSheetal Tigadoli {
24*717448d6SSheetal Tigadoli 	int rc = console_16550_register(PLAT_BRCM_BOOT_UART_BASE,
25*717448d6SSheetal Tigadoli 					PLAT_BRCM_BOOT_UART_CLK_IN_HZ,
26*717448d6SSheetal Tigadoli 					BRCM_CONSOLE_BAUDRATE,
27*717448d6SSheetal Tigadoli 					&bcm_boot_console);
28*717448d6SSheetal Tigadoli 	if (rc == 0) {
29*717448d6SSheetal Tigadoli 		/*
30*717448d6SSheetal Tigadoli 		 * The crash console doesn't use the multi console API, it uses
31*717448d6SSheetal Tigadoli 		 * the core console functions directly. It is safe to call panic
32*717448d6SSheetal Tigadoli 		 * and let it print debug information.
33*717448d6SSheetal Tigadoli 		 */
34*717448d6SSheetal Tigadoli 		panic();
35*717448d6SSheetal Tigadoli 	}
36*717448d6SSheetal Tigadoli 
37*717448d6SSheetal Tigadoli 	console_set_scope(&bcm_boot_console, CONSOLE_FLAG_BOOT);
38*717448d6SSheetal Tigadoli }
39*717448d6SSheetal Tigadoli 
40*717448d6SSheetal Tigadoli void bcm_console_boot_end(void)
41*717448d6SSheetal Tigadoli {
42*717448d6SSheetal Tigadoli 	(void)console_flush();
43*717448d6SSheetal Tigadoli 
44*717448d6SSheetal Tigadoli 	(void)console_unregister(&bcm_boot_console);
45*717448d6SSheetal Tigadoli }
46*717448d6SSheetal Tigadoli 
47*717448d6SSheetal Tigadoli /* Initialize the runtime console */
48*717448d6SSheetal Tigadoli void bcm_console_runtime_init(void)
49*717448d6SSheetal Tigadoli {
50*717448d6SSheetal Tigadoli 	int rc = console_16550_register(PLAT_BRCM_BL31_RUN_UART_BASE,
51*717448d6SSheetal Tigadoli 					PLAT_BRCM_BL31_RUN_UART_CLK_IN_HZ,
52*717448d6SSheetal Tigadoli 					BRCM_CONSOLE_BAUDRATE,
53*717448d6SSheetal Tigadoli 					&bcm_runtime_console);
54*717448d6SSheetal Tigadoli 	if (rc == 0)
55*717448d6SSheetal Tigadoli 		panic();
56*717448d6SSheetal Tigadoli 
57*717448d6SSheetal Tigadoli 	console_set_scope(&bcm_runtime_console, CONSOLE_FLAG_RUNTIME);
58*717448d6SSheetal Tigadoli }
59*717448d6SSheetal Tigadoli 
60*717448d6SSheetal Tigadoli void bcm_console_runtime_end(void)
61*717448d6SSheetal Tigadoli {
62*717448d6SSheetal Tigadoli 	(void)console_flush();
63*717448d6SSheetal Tigadoli 
64*717448d6SSheetal Tigadoli 	(void)console_unregister(&bcm_runtime_console);
65*717448d6SSheetal Tigadoli }
66