• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1/*
2 * Copyright (c) 2017, ARM Limited and Contributors. All rights reserved.
3 *
4 * SPDX-License-Identifier: BSD-3-Clause
5 */
6
7#include <arch.h>
8#include <asm_macros.S>
9#include <cortex_a53.h>
10#include <cortex_a73.h>
11#include "../hikey960_def.h"
12
13	.globl	plat_my_core_pos
14	.globl	platform_mem_init
15	.globl	plat_crash_console_init
16	.globl	plat_crash_console_putc
17	.globl	plat_report_exception
18	.globl	plat_reset_handler
19	.globl	set_retention_ticks
20	.globl	clr_retention_ticks
21	.globl	clr_ex
22	.globl	nop
23
24func plat_my_core_pos
25	mrs	x0, mpidr_el1
26	and	x1, x0, #MPIDR_CPU_MASK
27	and	x0, x0, #MPIDR_CLUSTER_MASK
28	add	x0, x1, x0, LSR #6
29	ret
30endfunc plat_my_core_pos
31
32	/* -----------------------------------------------------
33	 * void platform_mem_init(void);
34	 *
35	 * We don't need to carry out any memory initialization
36	 * on HIKEY. The Secure RAM is accessible straight away.
37	 * -----------------------------------------------------
38	 */
39func platform_mem_init
40	ret
41endfunc platform_mem_init
42
43	/* ---------------------------------------------
44	 * int plat_crash_console_init(void)
45	 * Function to initialize the crash console
46	 * without a C Runtime to print crash report.
47	 * Clobber list : x0, x1, x2
48	 * ---------------------------------------------
49	 */
50func plat_crash_console_init
51	mov_imm	x0, CRASH_CONSOLE_BASE
52	mov_imm	x1, PL011_UART_CLK_IN_HZ
53	mov_imm	x2, PL011_BAUDRATE
54	b	console_core_init
55endfunc plat_crash_console_init
56
57	/* ---------------------------------------------
58	 * int plat_crash_console_putc(int c)
59	 * Function to print a character on the crash
60	 * console without a C Runtime.
61	 * Clobber list : x1, x2
62	 * ---------------------------------------------
63	 */
64func plat_crash_console_putc
65	mov_imm	x1, CRASH_CONSOLE_BASE
66	b	console_core_putc
67endfunc plat_crash_console_putc
68
69	/* ---------------------------------------------
70	 * void plat_report_exception(unsigned int type)
71	 * Function to report an unhandled exception
72	 * with platform-specific means.
73	 * On HIKEY platform, it updates the LEDs
74	 * to indicate where we are
75	 * ---------------------------------------------
76	 */
77func plat_report_exception
78	mov	x8, x30
79
80	/* Turn on LED according to x0 (0 -- f) */
81	ldr	x2, =0xf7020000
82	and	x1, x0, #1
83	str	w1, [x2, #4]
84	and	x1, x0, #2
85	str	w1, [x2, #8]
86	and	x1, x0, #4
87	str	w1, [x2, #16]
88	and	x1, x0, #8
89	str	w1, [x2, #32]
90
91	mrs	x2, currentel
92	and	x2, x2, #0x0c
93	/* Check EL1 */
94	cmp	x2, #0x04
95	beq	plat_report_el1
96
97	adr	x4, plat_err_str
98	bl	asm_print_str
99
100	adr	x4, esr_el3_str
101	bl	asm_print_str
102
103	mrs	x4, esr_el3
104	bl	asm_print_hex
105
106	adr	x4, elr_el3_str
107	bl	asm_print_str
108
109	mrs	x4, elr_el3
110	bl	asm_print_hex
111	b	plat_report_end
112
113plat_report_el1:
114	adr	x4, plat_err_str
115	bl	asm_print_str
116
117	adr	x4, esr_el1_str
118	bl	asm_print_str
119
120	mrs	x4, esr_el1
121	bl	asm_print_hex
122
123	adr	x4, elr_el1_str
124	bl	asm_print_str
125
126	mrs	x4, elr_el1
127	bl	asm_print_hex
128plat_report_end:
129	mov	x30, x8
130	ret
131endfunc plat_report_exception
132
133	/* -----------------------------------------------------
134	 * void plat_reset_handler(void);
135	 * -----------------------------------------------------
136	 */
137func plat_reset_handler
138	ret
139endfunc plat_reset_handler
140
141	/* -----------------------------------------------------
142	 * void set_retention_ticks(unsigned int val);
143	 * Clobber list : x0
144	 * -----------------------------------------------------
145	 */
146func set_retention_ticks
147	mrs	x0, CORTEX_A53_ECTLR_EL1
148	bic	x0, x0, #CORTEX_A53_ECTLR_CPU_RET_CTRL_MASK
149	orr	x0, x0, #RETENTION_ENTRY_TICKS_8
150	msr	CORTEX_A53_ECTLR_EL1, x0
151	isb
152	dsb	sy
153	ret
154endfunc set_retention_ticks
155
156	/* -----------------------------------------------------
157	 * void clr_retention_ticks(unsigned int val);
158	 * Clobber list : x0
159	 * -----------------------------------------------------
160	 */
161func clr_retention_ticks
162	mrs	x0, CORTEX_A53_ECTLR_EL1
163	bic	x0, x0, #CORTEX_A53_ECTLR_CPU_RET_CTRL_MASK
164	msr	CORTEX_A53_ECTLR_EL1, x0
165	isb
166	dsb	sy
167	ret
168endfunc clr_retention_ticks
169
170	/* -----------------------------------------------------
171	 * void clrex(void);
172	 * -----------------------------------------------------
173	 */
174func clr_ex
175	clrex
176	ret
177endfunc clr_ex
178
179	/* -----------------------------------------------------
180	 * void nop(void);
181	 * -----------------------------------------------------
182	 */
183func nop
184	nop
185	ret
186endfunc nop
187
188.section .rodata.rev_err_str, "aS"
189plat_err_str:
190	.asciz "\nPlatform exception reporting:"
191esr_el3_str:
192	.asciz "\nESR_EL3: "
193elr_el3_str:
194	.asciz "\nELR_EL3: "
195esr_el1_str:
196	.asciz "\nESR_EL1: "
197elr_el1_str:
198	.asciz "\nELR_EL1: "
199