xref: /rk3399_ARM-atf/plat/hisilicon/poplar/aarch64/poplar_helpers.S (revision dfe577a817d8384c313f0a184be75efeb3cd8445)
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