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