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