mirror of
https://github.com/ARM-software/arm-trusted-firmware.git
synced 2025-04-15 09:04:17 +00:00

BL2_AT_EL3 is an overloaded macro which has two uses: 1. When BL2 is entry point into TF-A(no BL1) 2. When BL2 is running at EL3 exception level These two scenarios are not exactly same even though first implicitly means second to be true. To distinguish between these two use cases we introduce new macros. BL2_AT_EL3 is renamed to RESET_TO_BL2 to better convey both 1. and 2. Additional macro BL2_RUNS_AT_EL3 is added to cover all scenarious where BL2 runs at EL3 (including four world systems). BREAKING CHANGE: BL2_AT_EL3 renamed to RESET_TO_BL2 across the repository. Change-Id: I477e1d0f843b44b799c216670e028fcb3509fb72 Signed-off-by: Arvind Ram Prakash <arvind.ramprakash@arm.com> Signed-off-by: Maksims Svecovs <maksims.svecovs@arm.com>
92 lines
1.8 KiB
ArmAsm
92 lines
1.8 KiB
ArmAsm
/*
|
|
* Copyright 2018-2022 NXP
|
|
*
|
|
* SPDX-License-Identifier: BSD-3-Clause
|
|
*
|
|
*/
|
|
|
|
#include <arch.h>
|
|
#include <asm_macros.S>
|
|
|
|
#include <platform_def.h>
|
|
|
|
.globl plat_secondary_cold_boot_setup
|
|
.globl plat_is_my_cpu_primary
|
|
.globl plat_reset_handler
|
|
.globl platform_mem_init
|
|
|
|
func platform_mem1_init
|
|
ret
|
|
endfunc platform_mem1_init
|
|
|
|
func platform_mem_init
|
|
ret
|
|
endfunc platform_mem_init
|
|
|
|
func l2_mem_init
|
|
/* Initialize the L2 RAM latency */
|
|
mrs x1, S3_1_c11_c0_2
|
|
mov x0, #0x1C7
|
|
/* Clear L2 Tag RAM latency and L2 Data RAM latency */
|
|
bic x1, x1, x0
|
|
/* Set L2 data ram latency bits [2:0] */
|
|
orr x1, x1, #0x2
|
|
/* set L2 tag ram latency bits [8:6] */
|
|
orr x1, x1, #0x80
|
|
msr S3_1_c11_c0_2, x1
|
|
isb
|
|
ret
|
|
endfunc l2_mem_init
|
|
|
|
func apply_platform_errata
|
|
ret
|
|
endfunc apply_platform_errata
|
|
|
|
func plat_reset_handler
|
|
mov x29, x30
|
|
#if (defined(IMAGE_BL2) && RESET_TO_BL2)
|
|
bl l2_mem_init
|
|
#endif
|
|
bl apply_platform_errata
|
|
|
|
#if defined(IMAGE_BL31)
|
|
ldr x0, =POLICY_SMMU_PAGESZ_64K
|
|
cbz x0, 1f
|
|
/* Set the SMMU page size in the SACR register */
|
|
bl _set_smmu_pagesz_64
|
|
#endif
|
|
1:
|
|
/*
|
|
* May be cntfrq_el0 needs to be assigned
|
|
* the value COUNTER_FREQUENCY
|
|
*/
|
|
mov x30, x29
|
|
ret
|
|
endfunc plat_reset_handler
|
|
|
|
/*
|
|
* void plat_secondary_cold_boot_setup (void);
|
|
*
|
|
* This function performs any platform specific actions
|
|
* needed for a secondary cpu after a cold reset e.g
|
|
* mark the cpu's presence, mechanism to place it in a
|
|
* holding pen etc.
|
|
*/
|
|
func plat_secondary_cold_boot_setup
|
|
/* ls1046a does not do cold boot for secondary CPU */
|
|
cb_panic:
|
|
b cb_panic
|
|
endfunc plat_secondary_cold_boot_setup
|
|
|
|
/*
|
|
* unsigned int plat_is_my_cpu_primary (void);
|
|
*
|
|
* Find out whether the current cpu is the primary cpu.
|
|
*/
|
|
func plat_is_my_cpu_primary
|
|
mrs x0, mpidr_el1
|
|
and x0, x0, #(MPIDR_CLUSTER_MASK | MPIDR_CPU_MASK)
|
|
cmp x0, 0x0
|
|
cset w0, eq
|
|
ret
|
|
endfunc plat_is_my_cpu_primary
|