blob: a52abb77830e9fc7593a7218bdcc34dd9e77d9f7 [file] [log] [blame]
l.yangb8fdece2024-10-10 14:56:17 +08001
2#define GIC_DIST_BASE (0xF2000000)
3#define GIC_RDIST_BASE (0xF2040000)
4
5#define REAL_TXT_ADDR (CONFIG_PHYS_OFFSET + 0x8000)
6#define DTB_ADDR (CONFIG_DTB_ADDR)
7
8secure_init:
9
10#if 0
11 mov r5, r0
12 mov r6, r1
13 mov r7, r2
14#endif
15 mov r4, lr
16
17#if 1
18 /* use r0--r4 only */
19 bl get_core_id
20 mov r1, r0
21 bl get_cluster_id
22 mov r2, r0
23
24 ldr r3, =GIC_DIST_BASE
25 ldr r0, =0x50
26 str r0, [r3]
27
28 ldr r3, =GIC_RDIST_BASE
29 lsl r2, r2, #2
30 add r1, r1, r2
31 lsl r1, r1, #17
32
33 add r1, r1, r3
34 add r1, r1, #0x14
35
36 LDR R0, [R1]
37 LDR R2, =0xfffffffd
38 AND R0, R0, R2
39 STR R0, [R1]
40
41 LDR R2, = 0xFFFFFFFB
42wait:
43 LDR R0, [R1]
44 AND R0, R0, R2
45 CMP R0, #0
46 BNE wait
47
48 SUB R1, R1, #0x14
49 LDR R2, =0x10080
50 ADD R1, R1, R2
51 LDR R2, =0xFFFFFFFF
52 STR R2, [R1]
53#endif
54
55 MRS R0, CPSR
56 BIC R0, #0x1F
57 ORR R0, #0xD6
58 MSR CPSR_c, R0
59
60 MOV r3, #0xD
61 MCR p15,#0x6,r3,c12,c12,#5
62 MCR p15,0,r3,c12,c12,#5
63
64 MRC p15,0,r1,c1,c1,0
65 MOV r2, r1
66 ORR r2, #0x1
67 MCR p15,0,r2,c1,c1,0
68
69 MCR p15,#0x4,r3,c12,c9,#5
70
71 MRS R0, CPSR
72 BIC R0, #0x1F
73 ORR R0, #0xD3
74 MSR CPSR_c, R0
75
76#if 0
77 mov r0, r5
78 mov r1, r6
79 mov r2, r7
80#else
81 ldr r0, =0
82 ldr r1, =REAL_TXT_ADDR
83 ldr r2, =DTB_ADDR
84#endif
85 mov lr, r4
86
87 ret lr
88ENDPROC(secure_init)
89
90get_core_id:
91 MRC p15, 0, R0, c0, c0, 5
92 AND R0, R0, #0xFF
93 BX R14
94ENDPROC(get_core_id)
95
96get_cluster_id:
97 MRC p15, 0, r0, c0, c0, 5
98 AND r0, r0, #0xFF00
99 LSR r0, r0, #0x8
100 BX lr
101ENDPROC(get_cluster_id)