1*a2847172SGrzegorz Jaszczyk /* 2*a2847172SGrzegorz Jaszczyk * Copyright (c) 2018, ARM Limited and Contributors. All rights reserved. 3*a2847172SGrzegorz Jaszczyk * 4*a2847172SGrzegorz Jaszczyk * SPDX-License-Identifier: BSD-3-Clause 5*a2847172SGrzegorz Jaszczyk */ 6*a2847172SGrzegorz Jaszczyk #include <assert.h> 7*a2847172SGrzegorz Jaszczyk 8*a2847172SGrzegorz Jaszczyk #include <platform_def.h> 9*a2847172SGrzegorz Jaszczyk 10*a2847172SGrzegorz Jaszczyk #include <common/debug.h> 11*a2847172SGrzegorz Jaszczyk #include <drivers/console.h> 12*a2847172SGrzegorz Jaszczyk 13*a2847172SGrzegorz Jaszczyk #include <plat_marvell.h> 14*a2847172SGrzegorz Jaszczyk 15*a2847172SGrzegorz Jaszczyk #ifdef PLAT_a3700 16*a2847172SGrzegorz Jaszczyk #include <drivers/marvell/uart/a3700_console.h> 17*a2847172SGrzegorz Jaszczyk #define console_marvell_register console_a3700_register 18*a2847172SGrzegorz Jaszczyk #else 19*a2847172SGrzegorz Jaszczyk #include <drivers/ti/uart/uart_16550.h> 20*a2847172SGrzegorz Jaszczyk #define console_marvell_register console_16550_register 21*a2847172SGrzegorz Jaszczyk #endif 22*a2847172SGrzegorz Jaszczyk 23*a2847172SGrzegorz Jaszczyk static console_t marvell_boot_console; 24*a2847172SGrzegorz Jaszczyk static console_t marvell_runtime_console; 25*a2847172SGrzegorz Jaszczyk 26*a2847172SGrzegorz Jaszczyk /******************************************************************************* 27*a2847172SGrzegorz Jaszczyk * Functions that set up the console 28*a2847172SGrzegorz Jaszczyk ******************************************************************************/ 29*a2847172SGrzegorz Jaszczyk 30*a2847172SGrzegorz Jaszczyk /* Initialize the console to provide early debug support */ 31*a2847172SGrzegorz Jaszczyk void marvell_console_boot_init(void) 32*a2847172SGrzegorz Jaszczyk { 33*a2847172SGrzegorz Jaszczyk int rc = 34*a2847172SGrzegorz Jaszczyk console_marvell_register(PLAT_MARVELL_BOOT_UART_BASE, 35*a2847172SGrzegorz Jaszczyk PLAT_MARVELL_BOOT_UART_CLK_IN_HZ, 36*a2847172SGrzegorz Jaszczyk MARVELL_CONSOLE_BAUDRATE, 37*a2847172SGrzegorz Jaszczyk &marvell_boot_console); 38*a2847172SGrzegorz Jaszczyk if (rc == 0) { 39*a2847172SGrzegorz Jaszczyk /* 40*a2847172SGrzegorz Jaszczyk * The crash console doesn't use the multi console API, it uses 41*a2847172SGrzegorz Jaszczyk * the core console functions directly. It is safe to call panic 42*a2847172SGrzegorz Jaszczyk * and let it print debug information. 43*a2847172SGrzegorz Jaszczyk */ 44*a2847172SGrzegorz Jaszczyk panic(); 45*a2847172SGrzegorz Jaszczyk } 46*a2847172SGrzegorz Jaszczyk 47*a2847172SGrzegorz Jaszczyk console_set_scope(&marvell_boot_console, CONSOLE_FLAG_BOOT); 48*a2847172SGrzegorz Jaszczyk } 49*a2847172SGrzegorz Jaszczyk 50*a2847172SGrzegorz Jaszczyk void marvell_console_boot_end(void) 51*a2847172SGrzegorz Jaszczyk { 52*a2847172SGrzegorz Jaszczyk (void)console_flush(); 53*a2847172SGrzegorz Jaszczyk 54*a2847172SGrzegorz Jaszczyk (void)console_unregister(&marvell_boot_console); 55*a2847172SGrzegorz Jaszczyk } 56*a2847172SGrzegorz Jaszczyk 57*a2847172SGrzegorz Jaszczyk /* Initialize the runtime console */ 58*a2847172SGrzegorz Jaszczyk void marvell_console_runtime_init(void) 59*a2847172SGrzegorz Jaszczyk { 60*a2847172SGrzegorz Jaszczyk int rc = 61*a2847172SGrzegorz Jaszczyk console_marvell_register(PLAT_MARVELL_BOOT_UART_BASE, 62*a2847172SGrzegorz Jaszczyk PLAT_MARVELL_BOOT_UART_CLK_IN_HZ, 63*a2847172SGrzegorz Jaszczyk MARVELL_CONSOLE_BAUDRATE, 64*a2847172SGrzegorz Jaszczyk &marvell_runtime_console); 65*a2847172SGrzegorz Jaszczyk if (rc == 0) 66*a2847172SGrzegorz Jaszczyk panic(); 67*a2847172SGrzegorz Jaszczyk 68*a2847172SGrzegorz Jaszczyk console_set_scope(&marvell_runtime_console, CONSOLE_FLAG_RUNTIME); 69*a2847172SGrzegorz Jaszczyk } 70*a2847172SGrzegorz Jaszczyk 71*a2847172SGrzegorz Jaszczyk void marvell_console_runtime_end(void) 72*a2847172SGrzegorz Jaszczyk { 73*a2847172SGrzegorz Jaszczyk (void)console_flush(); 74*a2847172SGrzegorz Jaszczyk 75*a2847172SGrzegorz Jaszczyk (void)console_unregister(&marvell_runtime_console); 76*a2847172SGrzegorz Jaszczyk } 77