xref: /rk3399_ARM-atf/lib/cpus/aarch64/cortex_a510.S (revision f174704bc63fe22511fec0f1640357f5177afde6)
1c6ac4df6Sjohpow01/*
2b62673c6SBoyan Karatotev * Copyright (c) 2023-2025, Arm Limited. All rights reserved.
3c6ac4df6Sjohpow01 *
4c6ac4df6Sjohpow01 * SPDX-License-Identifier: BSD-3-Clause
5c6ac4df6Sjohpow01 */
6c6ac4df6Sjohpow01
7c6ac4df6Sjohpow01#include <arch.h>
8c6ac4df6Sjohpow01#include <asm_macros.S>
9c6ac4df6Sjohpow01#include <common/bl_common.h>
10c6ac4df6Sjohpow01#include <cortex_a510.h>
11c6ac4df6Sjohpow01#include <cpu_macros.S>
12b62673c6SBoyan Karatotev#include <dsu_macros.S>
13c6ac4df6Sjohpow01#include <plat_macros.S>
14c6ac4df6Sjohpow01
15c6ac4df6Sjohpow01/* Hardware handled coherency */
16c6ac4df6Sjohpow01#if HW_ASSISTED_COHERENCY == 0
1783435637Sjohpow01#error "Cortex-A510 must be compiled with HW_ASSISTED_COHERENCY enabled"
18c6ac4df6Sjohpow01#endif
19c6ac4df6Sjohpow01
20c6ac4df6Sjohpow01/* 64-bit only core */
21c6ac4df6Sjohpow01#if CTX_INCLUDE_AARCH32_REGS == 1
2283435637Sjohpow01#error "Cortex-A510 supports only AArch64. Compile with CTX_INCLUDE_AARCH32_REGS=0"
23c6ac4df6Sjohpow01#endif
24c6ac4df6Sjohpow01
2589dba82dSBoyan Karatotevcpu_reset_prologue cortex_a510
2689dba82dSBoyan Karatotev
27d64d4215SJohn Powellworkaround_runtime_start cortex_a510, ERRATUM(2008766), ERRATA_A510_2008766
28d64d4215SJohn Powell	/* Stash ERRSELR_EL1 in x2 */
29d64d4215SJohn Powell	mrs	x2, ERRSELR_EL1
30d64d4215SJohn Powell
31d64d4215SJohn Powell	/* Select error record 0 and clear ED bit */
32d64d4215SJohn Powell	msr	ERRSELR_EL1, xzr
33d64d4215SJohn Powell	sysreg_bit_clear ERXCTLR_EL1, ERXCTLR_ED_BIT
34d64d4215SJohn Powell
35d64d4215SJohn Powell	/* Select error record 1 and clear ED bit */
36d64d4215SJohn Powell	mov	x0, #1
37d64d4215SJohn Powell	msr	ERRSELR_EL1, x0
38d64d4215SJohn Powell	sysreg_bit_clear ERXCTLR_EL1, ERXCTLR_ED_BIT
39d64d4215SJohn Powell
40d64d4215SJohn Powell	/* Select error record 2 and clear ED bit */
41d64d4215SJohn Powell	mov	x0, #2
42d64d4215SJohn Powell	msr	ERRSELR_EL1, x0
43d64d4215SJohn Powell	sysreg_bit_clear ERXCTLR_EL1, ERXCTLR_ED_BIT
44d64d4215SJohn Powell
45d64d4215SJohn Powell	/* Restore ERRSELR_EL1 from x2 */
46d64d4215SJohn Powell	msr	ERRSELR_EL1, x2
47d64d4215SJohn Powellworkaround_runtime_end cortex_a510, ERRATUM(2008766), NO_ISB
48d64d4215SJohn Powell
49d64d4215SJohn Powellcheck_erratum_ls cortex_a510, ERRATUM(2008766), CPU_REV(1, 3)
50d64d4215SJohn Powell
51ed6d4a3bSJayanth Dodderi Chidanandworkaround_reset_start cortex_a510, ERRATUM(2041909), ERRATA_A510_2041909
52e72bbe47Sjohpow01	/* Apply workaround */
53e72bbe47Sjohpow01	mov	x0, xzr
54e72bbe47Sjohpow01	msr	S3_6_C15_C4_0, x0
55e72bbe47Sjohpow01	isb
56e72bbe47Sjohpow01
57e72bbe47Sjohpow01	mov	x0, #0x8500000
58e72bbe47Sjohpow01	msr	S3_6_C15_C4_2, x0
59e72bbe47Sjohpow01
60e72bbe47Sjohpow01	mov	x0, #0x1F700000
61e72bbe47Sjohpow01	movk	x0, #0x8, lsl #32
62e72bbe47Sjohpow01	msr	S3_6_C15_C4_3, x0
63e72bbe47Sjohpow01
64e72bbe47Sjohpow01	mov	x0, #0x3F1
65e72bbe47Sjohpow01	movk	x0, #0x110, lsl #16
66e72bbe47Sjohpow01	msr	S3_6_C15_C4_1, x0
67ed6d4a3bSJayanth Dodderi Chidanandworkaround_reset_end cortex_a510, ERRATUM(2041909)
68e72bbe47Sjohpow01
69ed6d4a3bSJayanth Dodderi Chidanandcheck_erratum_range cortex_a510, ERRATUM(2041909), CPU_REV(0, 2), CPU_REV(0, 2)
70e72bbe47Sjohpow01
71ed6d4a3bSJayanth Dodderi Chidanandworkaround_reset_start cortex_a510, ERRATUM(2042739), ERRATA_A510_2042739
7232d371d3SJayanth Dodderi Chidanand	/* Apply the workaround by disabling ReadPreferUnique. */
73a29cb3c0SJayanth Dodderi Chidanand	sysreg_bitfield_insert CORTEX_A510_CPUECTLR_EL1, CORTEX_A510_CPUECTLR_EL1_READPREFERUNIQUE_DISABLE, \
74a29cb3c0SJayanth Dodderi Chidanand		CORTEX_A510_CPUECTLR_EL1_READPREFERUNIQUE_SHIFT, CORTEX_A510_CPUECTLR_EL1_READPREFERUNIQUE_WIDTH
75ed6d4a3bSJayanth Dodderi Chidanandworkaround_reset_end cortex_a510, ERRATUM(2042739)
7632d371d3SJayanth Dodderi Chidanand
77ed6d4a3bSJayanth Dodderi Chidanandcheck_erratum_ls cortex_a510, ERRATUM(2042739), CPU_REV(0, 2)
7832d371d3SJayanth Dodderi Chidanand
796e86475dSSona Mathewworkaround_reset_start cortex_a510, ERRATUM(2080326), ERRATA_A510_2080326
806e86475dSSona Mathew	/* Apply workaround */
816e86475dSSona Mathew	mov x0, #1
826e86475dSSona Mathew	msr S3_6_C15_C4_0, x0
836e86475dSSona Mathew	isb
846e86475dSSona Mathew
856e86475dSSona Mathew	mov x0, #0x0100
866e86475dSSona Mathew	movk x0, #0x0E08, lsl #16
876e86475dSSona Mathew	msr S3_6_C15_C4_2, x0
886e86475dSSona Mathew
896e86475dSSona Mathew	mov x0, #0x0300
906e86475dSSona Mathew	movk x0, #0x0F1F, lsl #16
916e86475dSSona Mathew	movk x0, #0x0008, lsl #32
926e86475dSSona Mathew	msr S3_6_C15_C4_3, x0
936e86475dSSona Mathew
946e86475dSSona Mathew	mov x0, #0x03F1
956e86475dSSona Mathew	movk x0, #0x00C0, lsl #16
966e86475dSSona Mathew	msr S3_6_C15_C4_1, x0
976e86475dSSona Mathew
986e86475dSSona Mathew	isb
996e86475dSSona Mathewworkaround_reset_end cortex_a510, ERRATUM(2080326)
1006e86475dSSona Mathew
1016e86475dSSona Mathewcheck_erratum_range cortex_a510, ERRATUM(2080326), CPU_REV(0, 2), CPU_REV(0, 2)
1026e86475dSSona Mathew
103124ff99fSJohn Powellworkaround_reset_start cortex_a510, ERRATUM(2169012), ERRATA_A510_2169012
104124ff99fSJohn Powell	sysreg_bitfield_insert CORTEX_A510_CMPXACTLR_EL1, CORTEX_A510_CMPXACTLR_EL1_SNPPREFERUNIQUE_DISABLE, \
105124ff99fSJohn Powell	CORTEX_A510_CMPXACTLR_EL1_SNPPREFERUNIQUE_SHIFT, CORTEX_A510_CMPXACTLR_EL1_SNPPREFERUNIQUE_WIDTH
106124ff99fSJohn Powellworkaround_reset_end cortex_a510, ERRATUM(2169012)
107124ff99fSJohn Powell
108124ff99fSJohn Powellcheck_erratum_ls cortex_a510, ERRATUM(2169012), CPU_REV(1, 0)
109124ff99fSJohn Powell
110ed6d4a3bSJayanth Dodderi Chidanandworkaround_reset_start cortex_a510, ERRATUM(2172148), ERRATA_A510_2172148
11132d371d3SJayanth Dodderi Chidanand	/*
11232d371d3SJayanth Dodderi Chidanand	 * Force L2 allocation of transient lines by setting
11332d371d3SJayanth Dodderi Chidanand	 * CPUECTLR_EL1.RSCTL=0b01 and CPUECTLR_EL1.NTCTL=0b01.
11432d371d3SJayanth Dodderi Chidanand	 */
11532d371d3SJayanth Dodderi Chidanand	mrs	x0, CORTEX_A510_CPUECTLR_EL1
11632d371d3SJayanth Dodderi Chidanand	mov	x1, #1
11732d371d3SJayanth Dodderi Chidanand	bfi	x0, x1, #CORTEX_A510_CPUECTLR_EL1_RSCTL_SHIFT, #2
11832d371d3SJayanth Dodderi Chidanand	bfi	x0, x1, #CORTEX_A510_CPUECTLR_EL1_NTCTL_SHIFT, #2
11932d371d3SJayanth Dodderi Chidanand	msr	CORTEX_A510_CPUECTLR_EL1, x0
120ed6d4a3bSJayanth Dodderi Chidanandworkaround_reset_end cortex_a510, ERRATUM(2172148)
12132d371d3SJayanth Dodderi Chidanand
122ed6d4a3bSJayanth Dodderi Chidanandcheck_erratum_ls cortex_a510, ERRATUM(2172148), CPU_REV(1, 0)
12332d371d3SJayanth Dodderi Chidanand
1244592f4eaSJohn Powellworkaround_reset_start cortex_a510, ERRATUM(2218134), ERRATA_A510_2218134
1254592f4eaSJohn Powell	sysreg_bit_set CORTEX_A510_CPUACTLR2_EL1, BIT(43)
1264592f4eaSJohn Powellworkaround_reset_end cortex_a510, ERRATUM(2218134)
1274592f4eaSJohn Powell
1284592f4eaSJohn Powellcheck_erratum_range cortex_a510, ERRATUM(2218134), CPU_REV(1, 0), CPU_REV(1, 0)
1294592f4eaSJohn Powell
130ed6d4a3bSJayanth Dodderi Chidanandworkaround_reset_start cortex_a510, ERRATUM(2218950), ERRATA_A510_2218950
13132d371d3SJayanth Dodderi Chidanand	/* Set bit 18 in CPUACTLR_EL1 */
132a29cb3c0SJayanth Dodderi Chidanand	sysreg_bitfield_insert CORTEX_A510_CPUACTLR_EL1, CORTEX_A510_CPUACTLR_EL1_ALIAS_LOADSTORE_DISABLE, \
133a29cb3c0SJayanth Dodderi Chidanand	CORTEX_A510_CPUACTLR_EL1_ALIAS_LOADSTORE_SHIFT, CORTEX_A510_CPUACTLR_EL1_ALIAS_LOADSTORE_WIDTH
13432d371d3SJayanth Dodderi Chidanand
13532d371d3SJayanth Dodderi Chidanand	/* Set bit 25 in CMPXACTLR_EL1 */
136a29cb3c0SJayanth Dodderi Chidanand	sysreg_bitfield_insert CORTEX_A510_CMPXACTLR_EL1, CORTEX_A510_CMPXACTLR_EL1_ALIAS_LOADSTORE_DISABLE, \
137a29cb3c0SJayanth Dodderi Chidanand	CORTEX_A510_CMPXACTLR_EL1_ALIAS_LOADSTORE_SHIFT, CORTEX_A510_CMPXACTLR_EL1_ALIAS_LOADSTORE_WIDTH
138a29cb3c0SJayanth Dodderi Chidanand
139ed6d4a3bSJayanth Dodderi Chidanandworkaround_reset_end cortex_a510, ERRATUM(2218950)
14032d371d3SJayanth Dodderi Chidanand
141ed6d4a3bSJayanth Dodderi Chidanandcheck_erratum_ls cortex_a510, ERRATUM(2218950), CPU_REV(1, 0)
14232d371d3SJayanth Dodderi Chidanand
143ed6d4a3bSJayanth Dodderi Chidanandworkaround_reset_start cortex_a510, ERRATUM(2250311), ERRATA_A510_2250311
1447f304b02Sjohpow01	/* Disable MPMM */
1457f304b02Sjohpow01	mrs	x0, CPUMPMMCR_EL3
1467f304b02Sjohpow01	bfm	x0, xzr, #0, #0 /* bfc instruction does not work in GCC */
1477f304b02Sjohpow01	msr	CPUMPMMCR_EL3, x0
148ed6d4a3bSJayanth Dodderi Chidanandworkaround_reset_end cortex_a510, ERRATUM(2250311)
1497f304b02Sjohpow01
150ed6d4a3bSJayanth Dodderi Chidanandcheck_erratum_ls cortex_a510, ERRATUM(2250311), CPU_REV(1, 0)
1517f304b02Sjohpow01
152ed6d4a3bSJayanth Dodderi Chidanandworkaround_reset_start cortex_a510, ERRATUM(2288014), ERRATA_A510_2288014
15332d371d3SJayanth Dodderi Chidanand	/* Apply the workaround by setting IMP_CPUACTLR_EL1[18] = 0b1. */
154a29cb3c0SJayanth Dodderi Chidanand	sysreg_bitfield_insert CORTEX_A510_CPUACTLR_EL1, CORTEX_A510_CPUACTLR_EL1_DATA_CORRUPT_DISABLE, \
155a29cb3c0SJayanth Dodderi Chidanand	CORTEX_A510_CPUACTLR_EL1_DATA_CORRUPT_SHIFT, CORTEX_A510_CPUACTLR_EL1_DATA_CORRUPT_WIDTH
156ed6d4a3bSJayanth Dodderi Chidanandworkaround_reset_end cortex_a510, ERRATUM(2288014)
157cc79018bSjohpow01
158ed6d4a3bSJayanth Dodderi Chidanandcheck_erratum_ls cortex_a510, ERRATUM(2288014), CPU_REV(1, 0)
159cc79018bSjohpow01
160106ca0cbSGovindraj Rajaworkaround_reset_start cortex_a510, ERRATUM(2313941), ERRATA_DSU_2313941
161106ca0cbSGovindraj Raja	errata_dsu_2313941_wa_impl
162106ca0cbSGovindraj Rajaworkaround_reset_end cortex_a510, ERRATUM(2313941)
163106ca0cbSGovindraj Raja
164106ca0cbSGovindraj Rajacheck_erratum_custom_start cortex_a510, ERRATUM(2313941)
165106ca0cbSGovindraj Raja	check_errata_dsu_2313941_impl
166106ca0cbSGovindraj Raja	ret
167106ca0cbSGovindraj Rajacheck_erratum_custom_end cortex_a510, ERRATUM(2313941)
168106ca0cbSGovindraj Raja
169ed6d4a3bSJayanth Dodderi Chidanandworkaround_reset_start cortex_a510, ERRATUM(2347730), ERRATA_A510_2347730
17011d448c9SAkram Ahmad	/*
17111d448c9SAkram Ahmad	 * Set CPUACTLR_EL1[17] to 1'b1, which disables
17211d448c9SAkram Ahmad	 * specific microarchitectural clock gating
17311d448c9SAkram Ahmad	 * behaviour.
17411d448c9SAkram Ahmad	 */
175a29cb3c0SJayanth Dodderi Chidanand	sysreg_bit_set CORTEX_A510_CPUACTLR_EL1, CORTEX_A510_CPUACTLR_EL1_BIT_17
176ed6d4a3bSJayanth Dodderi Chidanandworkaround_reset_end cortex_a510, ERRATUM(2347730)
17711d448c9SAkram Ahmad
178ed6d4a3bSJayanth Dodderi Chidanandcheck_erratum_ls cortex_a510, ERRATUM(2347730), CPU_REV(1, 1)
17911d448c9SAkram Ahmad
180ed6d4a3bSJayanth Dodderi Chidanandworkaround_reset_start cortex_a510, ERRATUM(2371937), ERRATA_A510_2371937
181a67c1b1bSAkram Ahmad	/*
182a67c1b1bSAkram Ahmad	 * Cacheable atomic operations can be forced
183a67c1b1bSAkram Ahmad	 * to be executed near by setting
184a67c1b1bSAkram Ahmad	 * IMP_CPUECTLR_EL1.ATOM=0b010. ATOM is found
185a67c1b1bSAkram Ahmad	 * in [40:38] of CPUECTLR_EL1.
186a67c1b1bSAkram Ahmad	 */
187a29cb3c0SJayanth Dodderi Chidanand	sysreg_bitfield_insert CORTEX_A510_CPUECTLR_EL1, CORTEX_A510_CPUECTLR_EL1_ATOM_EXECALLINSTRNEAR, \
188a29cb3c0SJayanth Dodderi Chidanand		CORTEX_A510_CPUECTLR_EL1_ATOM_SHIFT, CORTEX_A510_CPUECTLR_EL1_ATOM_WIDTH
189ed6d4a3bSJayanth Dodderi Chidanandworkaround_reset_end cortex_a510, ERRATUM(2371937)
190a67c1b1bSAkram Ahmad
191ed6d4a3bSJayanth Dodderi Chidanandcheck_erratum_ls cortex_a510, ERRATUM(2371937), CPU_REV(1, 1)
192a67c1b1bSAkram Ahmad
1934fb7090eSJohn Powellworkaround_reset_start cortex_a510, ERRATUM(2420992), ERRATA_A510_2420992
1944fb7090eSJohn Powell	sysreg_bit_set CORTEX_A510_CPUACTLR3_EL1, BIT(3)
1954fb7090eSJohn Powellworkaround_reset_end cortex_a510, ERRATUM(2420992)
1964fb7090eSJohn Powell
1974fb7090eSJohn Powellcheck_erratum_range cortex_a510, ERRATUM(2420992), CPU_REV(1, 0), CPU_REV(1, 1)
1984fb7090eSJohn Powell
199ed6d4a3bSJayanth Dodderi Chidanandworkaround_reset_start cortex_a510, ERRATUM(2666669), ERRATA_A510_2666669
200a29cb3c0SJayanth Dodderi Chidanand	sysreg_bit_set CORTEX_A510_CPUACTLR_EL1, CORTEX_A510_CPUACTLR_EL1_BIT_38
201ed6d4a3bSJayanth Dodderi Chidanandworkaround_reset_end cortex_a510, ERRATUM(2666669)
202afb5d069SAkram Ahmad
203ed6d4a3bSJayanth Dodderi Chidanandcheck_erratum_ls cortex_a510, ERRATUM(2666669), CPU_REV(1, 1)
204afb5d069SAkram Ahmad
205ed6d4a3bSJayanth Dodderi Chidanand.global erratum_cortex_a510_2684597_wa
206ed6d4a3bSJayanth Dodderi Chidanandworkaround_runtime_start cortex_a510, ERRATUM(2684597), ERRATA_A510_2684597, CORTEX_A510_MIDR
2077a181b7dSAndre Przywara	/*
2087a181b7dSAndre Przywara	 * Many assemblers do not yet understand the "tsb csync" mnemonic,
2097a181b7dSAndre Przywara	 * so use the equivalent hint instruction.
2107a181b7dSAndre Przywara	 */
2117a181b7dSAndre Przywara	hint	#18			/* tsb csync */
212ed6d4a3bSJayanth Dodderi Chidanandworkaround_runtime_end cortex_a510, ERRATUM(2684597)
213ed6d4a3bSJayanth Dodderi Chidanand
214ed6d4a3bSJayanth Dodderi Chidanandcheck_erratum_ls cortex_a510, ERRATUM(2684597), CPU_REV(1, 2)
215ed6d4a3bSJayanth Dodderi Chidanand
216f2bd3528SJohn Powell.global check_erratum_cortex_a510_2971420
217f2bd3528SJohn Powelladd_erratum_entry cortex_a510, ERRATUM(2971420), ERRATA_A510_2971420
218f2bd3528SJohn Powellcheck_erratum_range cortex_a510, ERRATUM(2971420), CPU_REV(0, 1), CPU_REV(1, 3)
219f2bd3528SJohn Powell
220af1fa796SJohn Powellworkaround_reset_start cortex_a510, ERRATUM(3672349), ERRATA_A510_3672349
221af1fa796SJohn Powell	/*
222af1fa796SJohn Powell	 * Disable retention control for WFI and WFE by clearing both RET_CTRL
223af1fa796SJohn Powell	 * fields in CPUPWRCTLR_EL1.
224af1fa796SJohn Powell	 */
225af1fa796SJohn Powell	sysreg_bit_clear CORTEX_A510_CPUPWRCTLR_EL1, \
226af1fa796SJohn Powell			 (CORTEX_A510_CPUPWRCTLR_EL1_WFE_RET_CTRL_BITS | \
227af1fa796SJohn Powell			 CORTEX_A510_CPUPWRCTLR_EL1_WFI_RET_CTRL_BITS)
228af1fa796SJohn Powellworkaround_reset_end cortex_a510, ERRATUM(3672349)
229af1fa796SJohn Powell
230af1fa796SJohn Powellcheck_erratum_ls cortex_a510, ERRATUM(3672349), CPU_REV(1, 3)
231af1fa796SJohn Powell
232*ea884936SJohn Powellworkaround_reset_start cortex_a510, ERRATUM(3704847), ERRATA_A510_3704847
233*ea884936SJohn Powell	sysreg_bit_set CORTEX_A510_CPUACTLR_EL1, BIT(9)
234*ea884936SJohn Powellworkaround_reset_end cortex_a510, ERRATUM(3704847)
235*ea884936SJohn Powell
236*ea884936SJohn Powellcheck_erratum_ls cortex_a510, ERRATUM(3704847), CPU_REV(1, 3)
237*ea884936SJohn Powell
238c6ac4df6Sjohpow01	/* ----------------------------------------------------
239c6ac4df6Sjohpow01	 * HW will do the cache maintenance while powering down
240c6ac4df6Sjohpow01	 * ----------------------------------------------------
241c6ac4df6Sjohpow01	 */
242c6ac4df6Sjohpow01func cortex_a510_core_pwr_dwn
243d64d4215SJohn Powell	apply_erratum cortex_a510, ERRATUM(2008766), ERRATA_A510_2008766
244d64d4215SJohn Powell	apply_erratum cortex_a510, ERRATUM(2684597), ERRATA_A510_2684597, NO_GET_CPU_REV
245c6ac4df6Sjohpow01	/* ---------------------------------------------------
246c6ac4df6Sjohpow01	 * Enable CPU power down bit in power control register
247c6ac4df6Sjohpow01	 * ---------------------------------------------------
248c6ac4df6Sjohpow01	 */
249a29cb3c0SJayanth Dodderi Chidanand	sysreg_bit_set CORTEX_A510_CPUPWRCTLR_EL1, CORTEX_A510_CPUPWRCTLR_EL1_CORE_PWRDN_BIT
250c6ac4df6Sjohpow01	isb
251c6ac4df6Sjohpow01	ret
252c6ac4df6Sjohpow01endfunc cortex_a510_core_pwr_dwn
253c6ac4df6Sjohpow01
254ed6d4a3bSJayanth Dodderi Chidanandcpu_reset_func_start cortex_a510
255c6ac4df6Sjohpow01	/* Disable speculative loads */
256c6ac4df6Sjohpow01	msr	SSBS, xzr
2572590e819SBoyan Karatotev	/* skip enabling MPMM if this erratum is present */
2582590e819SBoyan Karatotev#if ERRATA_A510_2250311
2592590e819SBoyan Karatotev	/* the cpu_rev_var is kept in x14 */
2602590e819SBoyan Karatotev	mov	x14, x0
2612590e819SBoyan Karatotev	bl	check_erratum_cortex_a510_2250311
2622590e819SBoyan Karatotev	cbz	x0, skip_mpmm
2632590e819SBoyan Karatotev#endif
2642590e819SBoyan Karatotev	enable_mpmm
2652590e819SBoyan Karatotevskip_mpmm:
266ed6d4a3bSJayanth Dodderi Chidanandcpu_reset_func_end cortex_a510
267c6ac4df6Sjohpow01
268c6ac4df6Sjohpow01	/* ---------------------------------------------
269c6ac4df6Sjohpow01	 * This function provides Cortex-A510 specific
270c6ac4df6Sjohpow01	 * register information for crash reporting.
271c6ac4df6Sjohpow01	 * It needs to return with x6 pointing to
272c6ac4df6Sjohpow01	 * a list of register names in ascii and
273c6ac4df6Sjohpow01	 * x8 - x15 having values of registers to be
274c6ac4df6Sjohpow01	 * reported.
275c6ac4df6Sjohpow01	 * ---------------------------------------------
276c6ac4df6Sjohpow01	 */
277c6ac4df6Sjohpow01.section .rodata.cortex_a510_regs, "aS"
278c6ac4df6Sjohpow01cortex_a510_regs:  /* The ascii list of register names to be reported */
279c6ac4df6Sjohpow01	.asciz	"cpuectlr_el1", ""
280c6ac4df6Sjohpow01
281c6ac4df6Sjohpow01func cortex_a510_cpu_reg_dump
282c6ac4df6Sjohpow01	adr	x6, cortex_a510_regs
283c6ac4df6Sjohpow01	mrs	x8, CORTEX_A510_CPUECTLR_EL1
284c6ac4df6Sjohpow01	ret
285c6ac4df6Sjohpow01endfunc cortex_a510_cpu_reg_dump
286c6ac4df6Sjohpow01
287c6ac4df6Sjohpow01declare_cpu_ops cortex_a510, CORTEX_A510_MIDR, \
288c6ac4df6Sjohpow01	cortex_a510_reset_func, \
289c6ac4df6Sjohpow01	cortex_a510_core_pwr_dwn
290