xref: /rk3399_ARM-atf/lib/cpus/aarch64/generic.S (revision 89dba82dfa85fea03e7b2f6ad6a90fcd0aecce55)
11994e562SJavier Almansa Sobrino/*
2*89dba82dSBoyan Karatotev * Copyright (c) 2020-2025, Arm Limited. All rights reserved.
31994e562SJavier Almansa Sobrino *
41994e562SJavier Almansa Sobrino * SPDX-License-Identifier: BSD-3-Clause
51994e562SJavier Almansa Sobrino */
61994e562SJavier Almansa Sobrino
71994e562SJavier Almansa Sobrino#include <arch.h>
81994e562SJavier Almansa Sobrino#include <asm_macros.S>
91994e562SJavier Almansa Sobrino#include <common/bl_common.h>
101994e562SJavier Almansa Sobrino#include <generic.h>
111994e562SJavier Almansa Sobrino#include <cpu_macros.S>
121994e562SJavier Almansa Sobrino#include <plat_macros.S>
131994e562SJavier Almansa Sobrino
14*89dba82dSBoyan Karatotevcpu_reset_prologue generic
15*89dba82dSBoyan Karatotev
161994e562SJavier Almansa Sobrino	/* ---------------------------------------------
171994e562SJavier Almansa Sobrino	 * Disable L1 data cache and unified L2 cache
181994e562SJavier Almansa Sobrino	 * ---------------------------------------------
191994e562SJavier Almansa Sobrino	 */
201994e562SJavier Almansa Sobrinofunc generic_disable_dcache
211994e562SJavier Almansa Sobrino	mrs	x1, sctlr_el3
221994e562SJavier Almansa Sobrino	bic	x1, x1, #SCTLR_C_BIT
231994e562SJavier Almansa Sobrino	msr	sctlr_el3, x1
241994e562SJavier Almansa Sobrino	isb
251994e562SJavier Almansa Sobrino	ret
261994e562SJavier Almansa Sobrinoendfunc generic_disable_dcache
271994e562SJavier Almansa Sobrino
281994e562SJavier Almansa Sobrinofunc generic_core_pwr_dwn
291994e562SJavier Almansa Sobrino	mov	x18, x30
301994e562SJavier Almansa Sobrino
311994e562SJavier Almansa Sobrino	/* ---------------------------------------------
321994e562SJavier Almansa Sobrino	 * Turn off caches.
331994e562SJavier Almansa Sobrino	 * ---------------------------------------------
341994e562SJavier Almansa Sobrino	 */
351994e562SJavier Almansa Sobrino	bl	generic_disable_dcache
361994e562SJavier Almansa Sobrino
371994e562SJavier Almansa Sobrino	/* ---------------------------------------------
381994e562SJavier Almansa Sobrino	 * Flush L1 caches.
391994e562SJavier Almansa Sobrino	 * ---------------------------------------------
401994e562SJavier Almansa Sobrino	 */
411994e562SJavier Almansa Sobrino	mov	x0, #DCCISW
421994e562SJavier Almansa Sobrino	bl	dcsw_op_level1
431994e562SJavier Almansa Sobrino
441994e562SJavier Almansa Sobrino	ret	x18
451994e562SJavier Almansa Sobrinoendfunc generic_core_pwr_dwn
461994e562SJavier Almansa Sobrino
471994e562SJavier Almansa Sobrinofunc generic_cluster_pwr_dwn
481994e562SJavier Almansa Sobrino	mov	x18, x30
491994e562SJavier Almansa Sobrino
501994e562SJavier Almansa Sobrino	/* ---------------------------------------------
511994e562SJavier Almansa Sobrino	 * Turn off caches.
521994e562SJavier Almansa Sobrino	 * ---------------------------------------------
531994e562SJavier Almansa Sobrino	 */
541994e562SJavier Almansa Sobrino	bl	generic_disable_dcache
551994e562SJavier Almansa Sobrino
561994e562SJavier Almansa Sobrino	/* ---------------------------------------------
571994e562SJavier Almansa Sobrino	 * Flush L1 caches.
581994e562SJavier Almansa Sobrino	 * ---------------------------------------------
591994e562SJavier Almansa Sobrino	 */
601994e562SJavier Almansa Sobrino	mov	x0, #DCCISW
611994e562SJavier Almansa Sobrino	bl	dcsw_op_level1
621994e562SJavier Almansa Sobrino
631994e562SJavier Almansa Sobrino	/* ---------------------------------------------
641994e562SJavier Almansa Sobrino	 * Disable the optional ACP.
651994e562SJavier Almansa Sobrino	 * ---------------------------------------------
661994e562SJavier Almansa Sobrino	 */
671994e562SJavier Almansa Sobrino	bl	plat_disable_acp
681994e562SJavier Almansa Sobrino
691994e562SJavier Almansa Sobrino	/* ---------------------------------------------
701994e562SJavier Almansa Sobrino	 * Flush L2 caches.
711994e562SJavier Almansa Sobrino	 * ---------------------------------------------
721994e562SJavier Almansa Sobrino	 */
731994e562SJavier Almansa Sobrino	mov	x0, #DCCISW
741994e562SJavier Almansa Sobrino	bl	dcsw_op_level2
751994e562SJavier Almansa Sobrino
761994e562SJavier Almansa Sobrino	ret	x18
771994e562SJavier Almansa Sobrino
781994e562SJavier Almansa Sobrinoendfunc generic_cluster_pwr_dwn
791994e562SJavier Almansa Sobrino
801994e562SJavier Almansa Sobrino/* ---------------------------------------------
811994e562SJavier Almansa Sobrino * Unimplemented functions.
821994e562SJavier Almansa Sobrino * ---------------------------------------------
831994e562SJavier Almansa Sobrino */
841994e562SJavier Almansa Sobrino.equ	generic_cpu_reg_dump,		0
850d020822SBoyan Karatotev
860d020822SBoyan Karatotevcpu_reset_func_start generic
870d020822SBoyan Karatotevcpu_reset_func_end generic
881994e562SJavier Almansa Sobrino
891994e562SJavier Almansa Sobrinodeclare_cpu_ops generic, AARCH64_GENERIC_MIDR, \
901994e562SJavier Almansa Sobrino	generic_reset_func, \
911994e562SJavier Almansa Sobrino	generic_core_pwr_dwn, \
921994e562SJavier Almansa Sobrino	generic_cluster_pwr_dwn
93