/* SPDX-License-Identifier: BSD-2-Clause */ /* * Copyright 2017-2019 NXP * * Peng Fan */ /* * Entry points for the A7 init. * It is assume no stack is available when these routines are called. * It is assume each routine is called with return address in LR * and with ARM registers R0, R1, R2, R3 being scratchable. */ #include #include #include #include #include .section .text .balign 4 .code 32 /* * Cortex A7 configuration early configuration * * Use scratables registers R0-R3. * No stack usage. * LR store return address. * Trap CPU in case of error. */ FUNC plat_cpu_reset_early , : UNWIND( .fnstart) /* * DDI: Disable dual issue [bit28=0] * DDVM: Disable Distributed Virtual Memory transactions [bit15=0] * L1PCTL: L1 Data prefetch control [bit14:13=2b11] * L1RADIS: L1 Data Cache read-allocate mode disable [bit12=0] * L2RADIS: L2 Data Cache read-allocate mode disable [bit11=0] * DODMBS: Disable optimized data memory barrier behavior [bit10=0] * SMP: Enables coherent requests to the processor [bit6=0] */ mov_imm r0, 0x00006040 write_actlr r0 mov_imm r0, 0x00040C00 write_nsacr r0 bx lr UNWIND( .fnend) END_FUNC plat_cpu_reset_early FUNC get_core_pos_mpidr , : UNWIND( .fnstart) /* Drop ClusterId. There is no SoCs with more than 4 A7 Cores. */ and r0, r0, #MPIDR_CPU_MASK bx lr UNWIND( .fnend) END_FUNC get_core_pos_mpidr