xref: /optee_os/core/arch/arm/plat-stm/tz_a9init.S (revision a97bc4a084f1292c3a2cfd0c4593183b2f873e67)
1/* SPDX-License-Identifier: BSD-2-Clause */
2/*
3 * Copyright (c) 2014-2016, STMicroelectronics International N.V.
4 */
5
6#include <arm32.h>
7#include <arm32_macros.S>
8#include <arm32_macros_cortex_a9.S>
9#include <asm.S>
10#include <kernel/tz_ssvce_def.h>
11#include <kernel/unwind.h>
12#include <platform_config.h>
13
14.section .text
15.balign 4
16.code 32
17
18/*
19 * void arm_cl2_enable(vaddr_t pl310_base) - Memory Cache Level2 Enable Function
20 *
21 * If PL310 supports FZLW, enable also FZL in A9 core
22 *
23 * Use scratables registers R0-R3.
24 * No stack usage.
25 * LR store return address.
26 * Trap CPU in case of error.
27 * TODO: to be moved to PL310 code (tz_svce_pl310.S ?)
28 */
29FUNC arm_cl2_enable , :
30UNWIND(	.fnstart)
31
32	/* Enable PL310 ctrl -> only set lsb bit */
33	mov  r1, #0x1
34	str  r1, [r0, #PL310_CTRL]
35
36	/* if L2 FLZW enable, enable in L1 */
37	ldr  r1, [r0, #PL310_AUX_CTRL]
38	tst  r1, #(1 << 0) /* test AUX_CTRL[FLZ] */
39	read_actlr r0
40	orrne r0, r0, #(1 << 3) /* enable ACTLR[FLZW] */
41	write_actlr r0
42
43	mov pc, lr
44
45UNWIND(	.fnend)
46END_FUNC arm_cl2_enable
47
48/*
49 * Cortex A9 configuration early configuration
50 *
51 * Use scratables registers R0-R3.
52 * No stack usage.
53 * LR store return address.
54 * Trap CPU in case of error.
55 */
56FUNC plat_cpu_reset_early , :
57UNWIND(	.fnstart)
58
59	mov_imm r0, CPU_SCTLR_INIT
60	write_sctlr r0
61
62	mov_imm r0, CPU_ACTLR_INIT
63	write_actlr r0
64
65	mov_imm r0, CPU_NSACR_INIT
66	write_nsacr r0
67
68	mov_imm r0, CPU_PCR_INIT
69	write_pcr r0
70
71	mov pc, lr
72
73UNWIND(	.fnend)
74END_FUNC plat_cpu_reset_early
75
76