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