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