1*91f16700Schasinglulu/* 2*91f16700Schasinglulu * Copyright (c) 2016-2020, ARM Limited and Contributors. All rights reserved. 3*91f16700Schasinglulu * 4*91f16700Schasinglulu * SPDX-License-Identifier: BSD-3-Clause 5*91f16700Schasinglulu */ 6*91f16700Schasinglulu#include <asm_macros.S> 7*91f16700Schasinglulu#include <platform_def.h> 8*91f16700Schasinglulu 9*91f16700Schasinglulu .weak plat_arm_calc_core_pos 10*91f16700Schasinglulu .weak plat_my_core_pos 11*91f16700Schasinglulu .globl plat_crash_console_init 12*91f16700Schasinglulu .globl plat_crash_console_putc 13*91f16700Schasinglulu .globl plat_crash_console_flush 14*91f16700Schasinglulu 15*91f16700Schasinglulu /* ----------------------------------------------------- 16*91f16700Schasinglulu * unsigned int plat_my_core_pos(void) 17*91f16700Schasinglulu * This function uses the plat_arm_calc_core_pos() 18*91f16700Schasinglulu * definition to get the index of the calling CPU. 19*91f16700Schasinglulu * ----------------------------------------------------- 20*91f16700Schasinglulu */ 21*91f16700Schasinglulufunc plat_my_core_pos 22*91f16700Schasinglulu ldcopr r0, MPIDR 23*91f16700Schasinglulu b plat_arm_calc_core_pos 24*91f16700Schasingluluendfunc plat_my_core_pos 25*91f16700Schasinglulu 26*91f16700Schasinglulu /* ----------------------------------------------------- 27*91f16700Schasinglulu * unsigned int plat_arm_calc_core_pos(uint64_t mpidr) 28*91f16700Schasinglulu * Helper function to calculate the core position. 29*91f16700Schasinglulu * With this function: CorePos = (ClusterId * 4) + 30*91f16700Schasinglulu * CoreId 31*91f16700Schasinglulu * ----------------------------------------------------- 32*91f16700Schasinglulu */ 33*91f16700Schasinglulufunc plat_arm_calc_core_pos 34*91f16700Schasinglulu and r1, r0, #MPIDR_CPU_MASK 35*91f16700Schasinglulu and r0, r0, #MPIDR_CLUSTER_MASK 36*91f16700Schasinglulu add r0, r1, r0, LSR #6 37*91f16700Schasinglulu bx lr 38*91f16700Schasingluluendfunc plat_arm_calc_core_pos 39*91f16700Schasinglulu 40*91f16700Schasinglulu /* --------------------------------------------- 41*91f16700Schasinglulu * int plat_crash_console_init(void) 42*91f16700Schasinglulu * Function to initialize the crash console 43*91f16700Schasinglulu * without a C Runtime to print crash report. 44*91f16700Schasinglulu * Clobber list : r0 - r3 45*91f16700Schasinglulu * --------------------------------------------- 46*91f16700Schasinglulu */ 47*91f16700Schasinglulufunc plat_crash_console_init 48*91f16700Schasinglulu ldr r0, =PLAT_ARM_CRASH_UART_BASE 49*91f16700Schasinglulu ldr r1, =PLAT_ARM_CRASH_UART_CLK_IN_HZ 50*91f16700Schasinglulu ldr r2, =ARM_CONSOLE_BAUDRATE 51*91f16700Schasinglulu b console_pl011_core_init 52*91f16700Schasingluluendfunc plat_crash_console_init 53*91f16700Schasinglulu 54*91f16700Schasinglulu /* --------------------------------------------- 55*91f16700Schasinglulu * int plat_crash_console_putc(int c) 56*91f16700Schasinglulu * Function to print a character on the crash 57*91f16700Schasinglulu * console without a C Runtime. 58*91f16700Schasinglulu * Clobber list : r1 - r2 59*91f16700Schasinglulu * --------------------------------------------- 60*91f16700Schasinglulu */ 61*91f16700Schasinglulufunc plat_crash_console_putc 62*91f16700Schasinglulu ldr r1, =PLAT_ARM_CRASH_UART_BASE 63*91f16700Schasinglulu b console_pl011_core_putc 64*91f16700Schasingluluendfunc plat_crash_console_putc 65*91f16700Schasinglulu 66*91f16700Schasinglulu /* --------------------------------------------- 67*91f16700Schasinglulu * void plat_crash_console_flush() 68*91f16700Schasinglulu * Function to force a write of all buffered 69*91f16700Schasinglulu * data that hasn't been output. 70*91f16700Schasinglulu * Out : void. 71*91f16700Schasinglulu * Clobber list : r0 72*91f16700Schasinglulu * --------------------------------------------- 73*91f16700Schasinglulu */ 74*91f16700Schasinglulufunc plat_crash_console_flush 75*91f16700Schasinglulu ldr r0, =PLAT_ARM_CRASH_UART_BASE 76*91f16700Schasinglulu b console_pl011_core_flush 77*91f16700Schasingluluendfunc plat_crash_console_flush 78