1*0818e9e8SAntonio Nino Diaz/* 2*0818e9e8SAntonio Nino Diaz * Copyright (c) 2018, ARM Limited and Contributors. All rights reserved. 3*0818e9e8SAntonio Nino Diaz * 4*0818e9e8SAntonio Nino Diaz * SPDX-License-Identifier: BSD-3-Clause 5*0818e9e8SAntonio Nino Diaz */ 6*0818e9e8SAntonio Nino Diaz#include <asm_macros.S> 7*0818e9e8SAntonio Nino Diaz#include <platform_def.h> 8*0818e9e8SAntonio Nino Diaz 9*0818e9e8SAntonio Nino Diaz .globl plat_my_core_pos 10*0818e9e8SAntonio Nino Diaz .globl poplar_calc_core_pos 11*0818e9e8SAntonio Nino Diaz .globl plat_crash_console_init 12*0818e9e8SAntonio Nino Diaz .globl plat_crash_console_putc 13*0818e9e8SAntonio Nino Diaz .globl plat_crash_console_flush 14*0818e9e8SAntonio Nino Diaz .globl platform_mem_init 15*0818e9e8SAntonio Nino Diaz 16*0818e9e8SAntonio Nino Diaz /* ----------------------------------------------------- 17*0818e9e8SAntonio Nino Diaz * unsigned int plat_my_core_pos(void) 18*0818e9e8SAntonio Nino Diaz * This function uses poplar_calc_core_pos() 19*0818e9e8SAntonio Nino Diaz * definition to get the index of the calling CPU. 20*0818e9e8SAntonio Nino Diaz * ----------------------------------------------------- 21*0818e9e8SAntonio Nino Diaz */ 22*0818e9e8SAntonio Nino Diazfunc plat_my_core_pos 23*0818e9e8SAntonio Nino Diaz mrs x0, mpidr_el1 24*0818e9e8SAntonio Nino Diaz b poplar_calc_core_pos 25*0818e9e8SAntonio Nino Diazendfunc plat_my_core_pos 26*0818e9e8SAntonio Nino Diaz 27*0818e9e8SAntonio Nino Diaz /* ----------------------------------------------------- 28*0818e9e8SAntonio Nino Diaz * unsigned int poplar_calc_core_pos(u_register_t mpidr) 29*0818e9e8SAntonio Nino Diaz * Helper function to calculate the core position. 30*0818e9e8SAntonio Nino Diaz * With this function: CorePos = (ClusterId * 4) + 31*0818e9e8SAntonio Nino Diaz * CoreId 32*0818e9e8SAntonio Nino Diaz * ----------------------------------------------------- 33*0818e9e8SAntonio Nino Diaz */ 34*0818e9e8SAntonio Nino Diazfunc poplar_calc_core_pos 35*0818e9e8SAntonio Nino Diaz and x1, x0, #MPIDR_CPU_MASK 36*0818e9e8SAntonio Nino Diaz and x0, x0, #MPIDR_CLUSTER_MASK 37*0818e9e8SAntonio Nino Diaz add x0, x1, x0, LSR #6 38*0818e9e8SAntonio Nino Diaz ret 39*0818e9e8SAntonio Nino Diazendfunc poplar_calc_core_pos 40*0818e9e8SAntonio Nino Diaz 41*0818e9e8SAntonio Nino Diaz /* --------------------------------------------- 42*0818e9e8SAntonio Nino Diaz * int plat_crash_console_init(void) 43*0818e9e8SAntonio Nino Diaz * Function to initialize the crash console 44*0818e9e8SAntonio Nino Diaz * without a C Runtime to print crash report. 45*0818e9e8SAntonio Nino Diaz * Clobber list : x0 - x4 46*0818e9e8SAntonio Nino Diaz * --------------------------------------------- 47*0818e9e8SAntonio Nino Diaz */ 48*0818e9e8SAntonio Nino Diazfunc plat_crash_console_init 49*0818e9e8SAntonio Nino Diaz mov_imm x0, POPLAR_CRASH_UART_BASE 50*0818e9e8SAntonio Nino Diaz mov_imm x1, POPLAR_CRASH_UART_CLK_IN_HZ 51*0818e9e8SAntonio Nino Diaz mov_imm x2, POPLAR_CONSOLE_BAUDRATE 52*0818e9e8SAntonio Nino Diaz b console_pl011_core_init 53*0818e9e8SAntonio Nino Diazendfunc plat_crash_console_init 54*0818e9e8SAntonio Nino Diaz 55*0818e9e8SAntonio Nino Diaz /* --------------------------------------------- 56*0818e9e8SAntonio Nino Diaz * int plat_crash_console_putc(int c) 57*0818e9e8SAntonio Nino Diaz * Function to print a character on the crash 58*0818e9e8SAntonio Nino Diaz * console without a C Runtime. 59*0818e9e8SAntonio Nino Diaz * Clobber list : x1, x2 60*0818e9e8SAntonio Nino Diaz * --------------------------------------------- 61*0818e9e8SAntonio Nino Diaz */ 62*0818e9e8SAntonio Nino Diazfunc plat_crash_console_putc 63*0818e9e8SAntonio Nino Diaz mov_imm x1, POPLAR_CRASH_UART_BASE 64*0818e9e8SAntonio Nino Diaz b console_pl011_core_putc 65*0818e9e8SAntonio Nino Diazendfunc plat_crash_console_putc 66*0818e9e8SAntonio Nino Diaz 67*0818e9e8SAntonio Nino Diaz /* --------------------------------------------- 68*0818e9e8SAntonio Nino Diaz * int plat_crash_console_flush() 69*0818e9e8SAntonio Nino Diaz * Function to force a write of all buffered 70*0818e9e8SAntonio Nino Diaz * data that hasn't been output. 71*0818e9e8SAntonio Nino Diaz * Out : return -1 on error else return 0. 72*0818e9e8SAntonio Nino Diaz * Clobber list : r0 73*0818e9e8SAntonio Nino Diaz * --------------------------------------------- 74*0818e9e8SAntonio Nino Diaz */ 75*0818e9e8SAntonio Nino Diazfunc plat_crash_console_flush 76*0818e9e8SAntonio Nino Diaz mov_imm x0, POPLAR_CRASH_UART_BASE 77*0818e9e8SAntonio Nino Diaz b console_pl011_core_flush 78*0818e9e8SAntonio Nino Diazendfunc plat_crash_console_flush 79*0818e9e8SAntonio Nino Diaz 80*0818e9e8SAntonio Nino Diaz /* --------------------------------------------------------------------- 81*0818e9e8SAntonio Nino Diaz * We don't need to carry out any memory initialization on ARM 82*0818e9e8SAntonio Nino Diaz * platforms. The Secure RAM is accessible straight away. 83*0818e9e8SAntonio Nino Diaz * --------------------------------------------------------------------- 84*0818e9e8SAntonio Nino Diaz */ 85*0818e9e8SAntonio Nino Diazfunc platform_mem_init 86*0818e9e8SAntonio Nino Diaz ret 87*0818e9e8SAntonio Nino Diazendfunc platform_mem_init 88