xref: /rk3399_ARM-atf/lib/cpus/aarch64/generic.S (revision 1994e56221f06b47b3b38fba0a148ea505c940cd)
1*1994e562SJavier Almansa Sobrino/*
2*1994e562SJavier Almansa Sobrino * Copyright (c) 2020, Arm Limited. All rights reserved.
3*1994e562SJavier Almansa Sobrino *
4*1994e562SJavier Almansa Sobrino * SPDX-License-Identifier: BSD-3-Clause
5*1994e562SJavier Almansa Sobrino */
6*1994e562SJavier Almansa Sobrino
7*1994e562SJavier Almansa Sobrino#include <arch.h>
8*1994e562SJavier Almansa Sobrino#include <asm_macros.S>
9*1994e562SJavier Almansa Sobrino#include <common/bl_common.h>
10*1994e562SJavier Almansa Sobrino#include <generic.h>
11*1994e562SJavier Almansa Sobrino#include <cpu_macros.S>
12*1994e562SJavier Almansa Sobrino#include <plat_macros.S>
13*1994e562SJavier Almansa Sobrino
14*1994e562SJavier Almansa Sobrino	/* ---------------------------------------------
15*1994e562SJavier Almansa Sobrino	 * Disable L1 data cache and unified L2 cache
16*1994e562SJavier Almansa Sobrino	 * ---------------------------------------------
17*1994e562SJavier Almansa Sobrino	 */
18*1994e562SJavier Almansa Sobrinofunc generic_disable_dcache
19*1994e562SJavier Almansa Sobrino	mrs	x1, sctlr_el3
20*1994e562SJavier Almansa Sobrino	bic	x1, x1, #SCTLR_C_BIT
21*1994e562SJavier Almansa Sobrino	msr	sctlr_el3, x1
22*1994e562SJavier Almansa Sobrino	isb
23*1994e562SJavier Almansa Sobrino	ret
24*1994e562SJavier Almansa Sobrinoendfunc generic_disable_dcache
25*1994e562SJavier Almansa Sobrino
26*1994e562SJavier Almansa Sobrinofunc generic_core_pwr_dwn
27*1994e562SJavier Almansa Sobrino	mov	x18, x30
28*1994e562SJavier Almansa Sobrino
29*1994e562SJavier Almansa Sobrino	/* ---------------------------------------------
30*1994e562SJavier Almansa Sobrino	 * Turn off caches.
31*1994e562SJavier Almansa Sobrino	 * ---------------------------------------------
32*1994e562SJavier Almansa Sobrino	 */
33*1994e562SJavier Almansa Sobrino	bl	generic_disable_dcache
34*1994e562SJavier Almansa Sobrino
35*1994e562SJavier Almansa Sobrino	/* ---------------------------------------------
36*1994e562SJavier Almansa Sobrino	 * Flush L1 caches.
37*1994e562SJavier Almansa Sobrino	 * ---------------------------------------------
38*1994e562SJavier Almansa Sobrino	 */
39*1994e562SJavier Almansa Sobrino	mov	x0, #DCCISW
40*1994e562SJavier Almansa Sobrino	bl	dcsw_op_level1
41*1994e562SJavier Almansa Sobrino
42*1994e562SJavier Almansa Sobrino	ret	x18
43*1994e562SJavier Almansa Sobrinoendfunc generic_core_pwr_dwn
44*1994e562SJavier Almansa Sobrino
45*1994e562SJavier Almansa Sobrinofunc generic_cluster_pwr_dwn
46*1994e562SJavier Almansa Sobrino	mov	x18, x30
47*1994e562SJavier Almansa Sobrino
48*1994e562SJavier Almansa Sobrino	/* ---------------------------------------------
49*1994e562SJavier Almansa Sobrino	 * Turn off caches.
50*1994e562SJavier Almansa Sobrino	 * ---------------------------------------------
51*1994e562SJavier Almansa Sobrino	 */
52*1994e562SJavier Almansa Sobrino	bl	generic_disable_dcache
53*1994e562SJavier Almansa Sobrino
54*1994e562SJavier Almansa Sobrino	/* ---------------------------------------------
55*1994e562SJavier Almansa Sobrino	 * Flush L1 caches.
56*1994e562SJavier Almansa Sobrino	 * ---------------------------------------------
57*1994e562SJavier Almansa Sobrino	 */
58*1994e562SJavier Almansa Sobrino	mov	x0, #DCCISW
59*1994e562SJavier Almansa Sobrino	bl	dcsw_op_level1
60*1994e562SJavier Almansa Sobrino
61*1994e562SJavier Almansa Sobrino	/* ---------------------------------------------
62*1994e562SJavier Almansa Sobrino	 * Disable the optional ACP.
63*1994e562SJavier Almansa Sobrino	 * ---------------------------------------------
64*1994e562SJavier Almansa Sobrino	 */
65*1994e562SJavier Almansa Sobrino	bl	plat_disable_acp
66*1994e562SJavier Almansa Sobrino
67*1994e562SJavier Almansa Sobrino	/* ---------------------------------------------
68*1994e562SJavier Almansa Sobrino	 * Flush L2 caches.
69*1994e562SJavier Almansa Sobrino	 * ---------------------------------------------
70*1994e562SJavier Almansa Sobrino	 */
71*1994e562SJavier Almansa Sobrino	mov	x0, #DCCISW
72*1994e562SJavier Almansa Sobrino	bl	dcsw_op_level2
73*1994e562SJavier Almansa Sobrino
74*1994e562SJavier Almansa Sobrino	ret	x18
75*1994e562SJavier Almansa Sobrino
76*1994e562SJavier Almansa Sobrinoendfunc generic_cluster_pwr_dwn
77*1994e562SJavier Almansa Sobrino
78*1994e562SJavier Almansa Sobrino/* ---------------------------------------------
79*1994e562SJavier Almansa Sobrino * Unimplemented functions.
80*1994e562SJavier Almansa Sobrino * ---------------------------------------------
81*1994e562SJavier Almansa Sobrino */
82*1994e562SJavier Almansa Sobrino.equ	generic_errata_report,		0
83*1994e562SJavier Almansa Sobrino.equ	generic_cpu_reg_dump,		0
84*1994e562SJavier Almansa Sobrino.equ	generic_reset_func,		0
85*1994e562SJavier Almansa Sobrino
86*1994e562SJavier Almansa Sobrinodeclare_cpu_ops generic, AARCH64_GENERIC_MIDR, \
87*1994e562SJavier Almansa Sobrino	generic_reset_func, \
88*1994e562SJavier Almansa Sobrino	generic_core_pwr_dwn, \
89*1994e562SJavier Almansa Sobrino	generic_cluster_pwr_dwn
90