xref: /rk3399_ARM-atf/plat/intel/soc/common/aarch64/plat_helpers.S (revision 2db1e7663db8f94986bea02ade171693abfbdee6)
13f7b1490SHadi Asyrafi/*
23f7b1490SHadi Asyrafi * Copyright (c) 2019, ARM Limited and Contributors. All rights reserved.
33f7b1490SHadi Asyrafi *
43f7b1490SHadi Asyrafi * SPDX-License-Identifier: BSD-3-Clause
53f7b1490SHadi Asyrafi */
63f7b1490SHadi Asyrafi
73f7b1490SHadi Asyrafi#include <arch.h>
83f7b1490SHadi Asyrafi#include <asm_macros.S>
93f7b1490SHadi Asyrafi#include <cpu_macros.S>
103f7b1490SHadi Asyrafi#include <platform_def.h>
11*2db1e766SHadi Asyrafi#include <el3_common_macros.S>
123f7b1490SHadi Asyrafi
133f7b1490SHadi Asyrafi	.globl	plat_secondary_cold_boot_setup
143f7b1490SHadi Asyrafi	.globl	platform_is_primary_cpu
153f7b1490SHadi Asyrafi	.globl	plat_is_my_cpu_primary
163f7b1490SHadi Asyrafi	.globl	plat_my_core_pos
173f7b1490SHadi Asyrafi	.globl	plat_crash_console_init
183f7b1490SHadi Asyrafi	.globl	plat_crash_console_putc
193f7b1490SHadi Asyrafi	.globl  plat_crash_console_flush
203f7b1490SHadi Asyrafi	.globl	platform_mem_init
21*2db1e766SHadi Asyrafi	.globl	plat_secondary_cpus_bl31_entry
223f7b1490SHadi Asyrafi
233f7b1490SHadi Asyrafi	.globl plat_get_my_entrypoint
243f7b1490SHadi Asyrafi
253f7b1490SHadi Asyrafi	/* -----------------------------------------------------
263f7b1490SHadi Asyrafi	 * void plat_secondary_cold_boot_setup (void);
273f7b1490SHadi Asyrafi	 *
283f7b1490SHadi Asyrafi	 * This function performs any platform specific actions
293f7b1490SHadi Asyrafi	 * needed for a secondary cpu after a cold reset e.g
303f7b1490SHadi Asyrafi	 * mark the cpu's presence, mechanism to place it in a
313f7b1490SHadi Asyrafi	 * holding pen etc.
323f7b1490SHadi Asyrafi	 * -----------------------------------------------------
333f7b1490SHadi Asyrafi	 */
343f7b1490SHadi Asyrafifunc plat_secondary_cold_boot_setup
353f7b1490SHadi Asyrafi	/* Wait until the it gets reset signal from rstmgr gets populated */
363f7b1490SHadi Asyrafipoll_mailbox:
373f7b1490SHadi Asyrafi	wfi
383f7b1490SHadi Asyrafi	mov_imm	x0, PLAT_SEC_ENTRY
393f7b1490SHadi Asyrafi	ldr	x1, [x0]
403f7b1490SHadi Asyrafi	mov_imm	x2, PLAT_CPUID_RELEASE
413f7b1490SHadi Asyrafi	ldr	x3, [x2]
423f7b1490SHadi Asyrafi	mrs	x4, mpidr_el1
433f7b1490SHadi Asyrafi	and	x4, x4, #0xff
443f7b1490SHadi Asyrafi	cmp	x3, x4
453f7b1490SHadi Asyrafi	b.ne	poll_mailbox
463f7b1490SHadi Asyrafi	br	x1
473f7b1490SHadi Asyrafiendfunc plat_secondary_cold_boot_setup
483f7b1490SHadi Asyrafi
493f7b1490SHadi Asyrafifunc platform_is_primary_cpu
503f7b1490SHadi Asyrafi	and	x0, x0, #(MPIDR_CLUSTER_MASK | MPIDR_CPU_MASK)
513f7b1490SHadi Asyrafi	cmp	x0, #PLAT_PRIMARY_CPU
523f7b1490SHadi Asyrafi	cset	x0, eq
533f7b1490SHadi Asyrafi	ret
543f7b1490SHadi Asyrafiendfunc platform_is_primary_cpu
553f7b1490SHadi Asyrafi
563f7b1490SHadi Asyrafifunc plat_is_my_cpu_primary
573f7b1490SHadi Asyrafi	mrs	x0, mpidr_el1
583f7b1490SHadi Asyrafi	b   platform_is_primary_cpu
593f7b1490SHadi Asyrafiendfunc plat_is_my_cpu_primary
603f7b1490SHadi Asyrafi
613f7b1490SHadi Asyrafifunc plat_my_core_pos
623f7b1490SHadi Asyrafi	mrs	x0, mpidr_el1
633f7b1490SHadi Asyrafi	and	x1, x0, #MPIDR_CPU_MASK
643f7b1490SHadi Asyrafi	and	x0, x0, #MPIDR_CLUSTER_MASK
653f7b1490SHadi Asyrafi	add	x0, x1, x0, LSR #6
663f7b1490SHadi Asyrafi	ret
673f7b1490SHadi Asyrafiendfunc plat_my_core_pos
683f7b1490SHadi Asyrafi
693f7b1490SHadi Asyrafifunc plat_get_my_entrypoint
703f7b1490SHadi Asyrafi	mov_imm	x1, PLAT_SEC_ENTRY
713f7b1490SHadi Asyrafi	ldr	x0, [x1]
723f7b1490SHadi Asyrafi	ret
733f7b1490SHadi Asyrafiendfunc plat_get_my_entrypoint
743f7b1490SHadi Asyrafi
753f7b1490SHadi Asyrafi	/* ---------------------------------------------
763f7b1490SHadi Asyrafi	 * int plat_crash_console_init(void)
773f7b1490SHadi Asyrafi	 * Function to initialize the crash console
783f7b1490SHadi Asyrafi	 * without a C Runtime to print crash report.
793f7b1490SHadi Asyrafi	 * Clobber list : x0, x1, x2
803f7b1490SHadi Asyrafi	 * ---------------------------------------------
813f7b1490SHadi Asyrafi	 */
823f7b1490SHadi Asyrafifunc plat_crash_console_init
833f7b1490SHadi Asyrafi	mov_imm	x0, PLAT_UART0_BASE
843f7b1490SHadi Asyrafi	mov_imm	x1, PLAT_UART_CLOCK
853f7b1490SHadi Asyrafi	mov_imm	x2, PLAT_BAUDRATE
863f7b1490SHadi Asyrafi	b	console_16550_core_init
873f7b1490SHadi Asyrafiendfunc plat_crash_console_init
883f7b1490SHadi Asyrafi
893f7b1490SHadi Asyrafi	/* ---------------------------------------------
903f7b1490SHadi Asyrafi	 * int plat_crash_console_putc(void)
913f7b1490SHadi Asyrafi	 * Function to print a character on the crash
923f7b1490SHadi Asyrafi	 * console without a C Runtime.
933f7b1490SHadi Asyrafi	 * Clobber list : x1, x2
943f7b1490SHadi Asyrafi	 * ---------------------------------------------
953f7b1490SHadi Asyrafi	 */
963f7b1490SHadi Asyrafifunc plat_crash_console_putc
973f7b1490SHadi Asyrafi	mov_imm x1, PLAT_UART0_BASE
983f7b1490SHadi Asyrafi	b	console_16550_core_putc
993f7b1490SHadi Asyrafiendfunc plat_crash_console_putc
1003f7b1490SHadi Asyrafi
1013f7b1490SHadi Asyrafifunc plat_crash_console_flush
1023f7b1490SHadi Asyrafi	mov_imm x0, CRASH_CONSOLE_BASE
1033f7b1490SHadi Asyrafi	b	console_16550_core_flush
1043f7b1490SHadi Asyrafiendfunc plat_crash_console_flush
1053f7b1490SHadi Asyrafi
1063f7b1490SHadi Asyrafi
1073f7b1490SHadi Asyrafi	/* --------------------------------------------------------
1083f7b1490SHadi Asyrafi	 * void platform_mem_init (void);
1093f7b1490SHadi Asyrafi	 *
1103f7b1490SHadi Asyrafi	 * Any memory init, relocation to be done before the
1113f7b1490SHadi Asyrafi	 * platform boots. Called very early in the boot process.
1123f7b1490SHadi Asyrafi	 * --------------------------------------------------------
1133f7b1490SHadi Asyrafi	 */
1143f7b1490SHadi Asyrafifunc platform_mem_init
1153f7b1490SHadi Asyrafi	mov	x0, #0
1163f7b1490SHadi Asyrafi	ret
1173f7b1490SHadi Asyrafiendfunc platform_mem_init
118*2db1e766SHadi Asyrafi
119*2db1e766SHadi Asyrafifunc plat_secondary_cpus_bl31_entry
120*2db1e766SHadi Asyrafi	el3_entrypoint_common                                   \
121*2db1e766SHadi Asyrafi		_init_sctlr=0                                   \
122*2db1e766SHadi Asyrafi		_warm_boot_mailbox=!PROGRAMMABLE_RESET_ADDRESS  \
123*2db1e766SHadi Asyrafi		_secondary_cold_boot=!COLD_BOOT_SINGLE_CPU      \
124*2db1e766SHadi Asyrafi		_init_memory=1                                  \
125*2db1e766SHadi Asyrafi		_init_c_runtime=1                               \
126*2db1e766SHadi Asyrafi		_exception_vectors=runtime_exceptions		\
127*2db1e766SHadi Asyrafi		_pie_fixup_size=BL31_LIMIT - BL31_BASE
128*2db1e766SHadi Asyrafiendfunc plat_secondary_cpus_bl31_entry
129