xref: /rk3399_ARM-atf/lib/cpus/aarch64/generic.S (revision 0d020822ae88b8623fa6c9c55973f0045194dcef)
11994e562SJavier Almansa Sobrino/*
23fb52e41SRyan Everett * Copyright (c) 2020-2024, 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
141994e562SJavier Almansa Sobrino	/* ---------------------------------------------
151994e562SJavier Almansa Sobrino	 * Disable L1 data cache and unified L2 cache
161994e562SJavier Almansa Sobrino	 * ---------------------------------------------
171994e562SJavier Almansa Sobrino	 */
181994e562SJavier Almansa Sobrinofunc generic_disable_dcache
191994e562SJavier Almansa Sobrino	mrs	x1, sctlr_el3
201994e562SJavier Almansa Sobrino	bic	x1, x1, #SCTLR_C_BIT
211994e562SJavier Almansa Sobrino	msr	sctlr_el3, x1
221994e562SJavier Almansa Sobrino	isb
231994e562SJavier Almansa Sobrino	ret
241994e562SJavier Almansa Sobrinoendfunc generic_disable_dcache
251994e562SJavier Almansa Sobrino
261994e562SJavier Almansa Sobrinofunc generic_core_pwr_dwn
271994e562SJavier Almansa Sobrino	mov	x18, x30
281994e562SJavier Almansa Sobrino
291994e562SJavier Almansa Sobrino	/* ---------------------------------------------
301994e562SJavier Almansa Sobrino	 * Turn off caches.
311994e562SJavier Almansa Sobrino	 * ---------------------------------------------
321994e562SJavier Almansa Sobrino	 */
331994e562SJavier Almansa Sobrino	bl	generic_disable_dcache
341994e562SJavier Almansa Sobrino
351994e562SJavier Almansa Sobrino	/* ---------------------------------------------
361994e562SJavier Almansa Sobrino	 * Flush L1 caches.
371994e562SJavier Almansa Sobrino	 * ---------------------------------------------
381994e562SJavier Almansa Sobrino	 */
391994e562SJavier Almansa Sobrino	mov	x0, #DCCISW
401994e562SJavier Almansa Sobrino	bl	dcsw_op_level1
411994e562SJavier Almansa Sobrino
421994e562SJavier Almansa Sobrino	ret	x18
431994e562SJavier Almansa Sobrinoendfunc generic_core_pwr_dwn
441994e562SJavier Almansa Sobrino
451994e562SJavier Almansa Sobrinofunc generic_cluster_pwr_dwn
461994e562SJavier Almansa Sobrino	mov	x18, x30
471994e562SJavier Almansa Sobrino
481994e562SJavier Almansa Sobrino	/* ---------------------------------------------
491994e562SJavier Almansa Sobrino	 * Turn off caches.
501994e562SJavier Almansa Sobrino	 * ---------------------------------------------
511994e562SJavier Almansa Sobrino	 */
521994e562SJavier Almansa Sobrino	bl	generic_disable_dcache
531994e562SJavier Almansa Sobrino
541994e562SJavier Almansa Sobrino	/* ---------------------------------------------
551994e562SJavier Almansa Sobrino	 * Flush L1 caches.
561994e562SJavier Almansa Sobrino	 * ---------------------------------------------
571994e562SJavier Almansa Sobrino	 */
581994e562SJavier Almansa Sobrino	mov	x0, #DCCISW
591994e562SJavier Almansa Sobrino	bl	dcsw_op_level1
601994e562SJavier Almansa Sobrino
611994e562SJavier Almansa Sobrino	/* ---------------------------------------------
621994e562SJavier Almansa Sobrino	 * Disable the optional ACP.
631994e562SJavier Almansa Sobrino	 * ---------------------------------------------
641994e562SJavier Almansa Sobrino	 */
651994e562SJavier Almansa Sobrino	bl	plat_disable_acp
661994e562SJavier Almansa Sobrino
671994e562SJavier Almansa Sobrino	/* ---------------------------------------------
681994e562SJavier Almansa Sobrino	 * Flush L2 caches.
691994e562SJavier Almansa Sobrino	 * ---------------------------------------------
701994e562SJavier Almansa Sobrino	 */
711994e562SJavier Almansa Sobrino	mov	x0, #DCCISW
721994e562SJavier Almansa Sobrino	bl	dcsw_op_level2
731994e562SJavier Almansa Sobrino
741994e562SJavier Almansa Sobrino	ret	x18
751994e562SJavier Almansa Sobrino
761994e562SJavier Almansa Sobrinoendfunc generic_cluster_pwr_dwn
771994e562SJavier Almansa Sobrino
781994e562SJavier Almansa Sobrino/* ---------------------------------------------
791994e562SJavier Almansa Sobrino * Unimplemented functions.
801994e562SJavier Almansa Sobrino * ---------------------------------------------
811994e562SJavier Almansa Sobrino */
821994e562SJavier Almansa Sobrino.equ	generic_cpu_reg_dump,		0
83*0d020822SBoyan Karatotev
84*0d020822SBoyan Karatotevcpu_reset_func_start generic
85*0d020822SBoyan Karatotevcpu_reset_func_end generic
861994e562SJavier Almansa Sobrino
871994e562SJavier Almansa Sobrinodeclare_cpu_ops generic, AARCH64_GENERIC_MIDR, \
881994e562SJavier Almansa Sobrino	generic_reset_func, \
891994e562SJavier Almansa Sobrino	generic_core_pwr_dwn, \
901994e562SJavier Almansa Sobrino	generic_cluster_pwr_dwn
91