10818e9e8SAntonio Nino Diaz/* 2*831b0e98SJimmy Brisson * Copyright (c) 2018-2020, ARM Limited and Contributors. All rights reserved. 30818e9e8SAntonio Nino Diaz * 40818e9e8SAntonio Nino Diaz * SPDX-License-Identifier: BSD-3-Clause 50818e9e8SAntonio Nino Diaz */ 60818e9e8SAntonio Nino Diaz#include <asm_macros.S> 70818e9e8SAntonio Nino Diaz#include <platform_def.h> 80818e9e8SAntonio Nino Diaz 90818e9e8SAntonio Nino Diaz .globl plat_my_core_pos 100818e9e8SAntonio Nino Diaz .globl poplar_calc_core_pos 110818e9e8SAntonio Nino Diaz .globl plat_crash_console_init 120818e9e8SAntonio Nino Diaz .globl plat_crash_console_putc 130818e9e8SAntonio Nino Diaz .globl plat_crash_console_flush 140818e9e8SAntonio Nino Diaz .globl platform_mem_init 150818e9e8SAntonio Nino Diaz 160818e9e8SAntonio Nino Diaz /* ----------------------------------------------------- 170818e9e8SAntonio Nino Diaz * unsigned int plat_my_core_pos(void) 180818e9e8SAntonio Nino Diaz * This function uses poplar_calc_core_pos() 190818e9e8SAntonio Nino Diaz * definition to get the index of the calling CPU. 200818e9e8SAntonio Nino Diaz * ----------------------------------------------------- 210818e9e8SAntonio Nino Diaz */ 220818e9e8SAntonio Nino Diazfunc plat_my_core_pos 230818e9e8SAntonio Nino Diaz mrs x0, mpidr_el1 240818e9e8SAntonio Nino Diaz b poplar_calc_core_pos 250818e9e8SAntonio Nino Diazendfunc plat_my_core_pos 260818e9e8SAntonio Nino Diaz 270818e9e8SAntonio Nino Diaz /* ----------------------------------------------------- 280818e9e8SAntonio Nino Diaz * unsigned int poplar_calc_core_pos(u_register_t mpidr) 290818e9e8SAntonio Nino Diaz * Helper function to calculate the core position. 300818e9e8SAntonio Nino Diaz * With this function: CorePos = (ClusterId * 4) + 310818e9e8SAntonio Nino Diaz * CoreId 320818e9e8SAntonio Nino Diaz * ----------------------------------------------------- 330818e9e8SAntonio Nino Diaz */ 340818e9e8SAntonio Nino Diazfunc poplar_calc_core_pos 350818e9e8SAntonio Nino Diaz and x1, x0, #MPIDR_CPU_MASK 360818e9e8SAntonio Nino Diaz and x0, x0, #MPIDR_CLUSTER_MASK 370818e9e8SAntonio Nino Diaz add x0, x1, x0, LSR #6 380818e9e8SAntonio Nino Diaz ret 390818e9e8SAntonio Nino Diazendfunc poplar_calc_core_pos 400818e9e8SAntonio Nino Diaz 410818e9e8SAntonio Nino Diaz /* --------------------------------------------- 420818e9e8SAntonio Nino Diaz * int plat_crash_console_init(void) 430818e9e8SAntonio Nino Diaz * Function to initialize the crash console 440818e9e8SAntonio Nino Diaz * without a C Runtime to print crash report. 450818e9e8SAntonio Nino Diaz * Clobber list : x0 - x4 460818e9e8SAntonio Nino Diaz * --------------------------------------------- 470818e9e8SAntonio Nino Diaz */ 480818e9e8SAntonio Nino Diazfunc plat_crash_console_init 490818e9e8SAntonio Nino Diaz mov_imm x0, POPLAR_CRASH_UART_BASE 500818e9e8SAntonio Nino Diaz mov_imm x1, POPLAR_CRASH_UART_CLK_IN_HZ 510818e9e8SAntonio Nino Diaz mov_imm x2, POPLAR_CONSOLE_BAUDRATE 520818e9e8SAntonio Nino Diaz b console_pl011_core_init 530818e9e8SAntonio Nino Diazendfunc plat_crash_console_init 540818e9e8SAntonio Nino Diaz 550818e9e8SAntonio Nino Diaz /* --------------------------------------------- 560818e9e8SAntonio Nino Diaz * int plat_crash_console_putc(int c) 570818e9e8SAntonio Nino Diaz * Function to print a character on the crash 580818e9e8SAntonio Nino Diaz * console without a C Runtime. 590818e9e8SAntonio Nino Diaz * Clobber list : x1, x2 600818e9e8SAntonio Nino Diaz * --------------------------------------------- 610818e9e8SAntonio Nino Diaz */ 620818e9e8SAntonio Nino Diazfunc plat_crash_console_putc 630818e9e8SAntonio Nino Diaz mov_imm x1, POPLAR_CRASH_UART_BASE 640818e9e8SAntonio Nino Diaz b console_pl011_core_putc 650818e9e8SAntonio Nino Diazendfunc plat_crash_console_putc 660818e9e8SAntonio Nino Diaz 670818e9e8SAntonio Nino Diaz /* --------------------------------------------- 68*831b0e98SJimmy Brisson * void plat_crash_console_flush() 690818e9e8SAntonio Nino Diaz * Function to force a write of all buffered 700818e9e8SAntonio Nino Diaz * data that hasn't been output. 71*831b0e98SJimmy Brisson * Out : void. 720818e9e8SAntonio Nino Diaz * Clobber list : r0 730818e9e8SAntonio Nino Diaz * --------------------------------------------- 740818e9e8SAntonio Nino Diaz */ 750818e9e8SAntonio Nino Diazfunc plat_crash_console_flush 760818e9e8SAntonio Nino Diaz mov_imm x0, POPLAR_CRASH_UART_BASE 770818e9e8SAntonio Nino Diaz b console_pl011_core_flush 780818e9e8SAntonio Nino Diazendfunc plat_crash_console_flush 790818e9e8SAntonio Nino Diaz 800818e9e8SAntonio Nino Diaz /* --------------------------------------------------------------------- 810818e9e8SAntonio Nino Diaz * We don't need to carry out any memory initialization on ARM 820818e9e8SAntonio Nino Diaz * platforms. The Secure RAM is accessible straight away. 830818e9e8SAntonio Nino Diaz * --------------------------------------------------------------------- 840818e9e8SAntonio Nino Diaz */ 850818e9e8SAntonio Nino Diazfunc platform_mem_init 860818e9e8SAntonio Nino Diaz ret 870818e9e8SAntonio Nino Diazendfunc platform_mem_init 88