1 /* 2 * Copyright (c) 2016, ARM Limited and Contributors. All rights reserved. 3 * 4 * SPDX-License-Identifier: BSD-3-Clause 5 */ 6 7 #include <arch.h> 8 #include <cci.h> 9 #include <plat_arm.h> 10 #include <platform_def.h> 11 #include <utils.h> 12 13 static const int cci_map[] = { 14 PLAT_ARM_CCI_CLUSTER0_SL_IFACE_IX, 15 PLAT_ARM_CCI_CLUSTER1_SL_IFACE_IX 16 }; 17 18 /****************************************************************************** 19 * The following functions are defined as weak to allow a platform to override 20 * the way ARM CCI driver is initialised and used. 21 *****************************************************************************/ 22 #pragma weak plat_arm_interconnect_init 23 #pragma weak plat_arm_interconnect_enter_coherency 24 #pragma weak plat_arm_interconnect_exit_coherency 25 26 27 /****************************************************************************** 28 * Helper function to initialize ARM CCI driver. 29 *****************************************************************************/ plat_arm_interconnect_init(void)30void plat_arm_interconnect_init(void) 31 { 32 cci_init(PLAT_ARM_CCI_BASE, cci_map, ARRAY_SIZE(cci_map)); 33 } 34 35 /****************************************************************************** 36 * Helper function to place current master into coherency 37 *****************************************************************************/ plat_arm_interconnect_enter_coherency(void)38void plat_arm_interconnect_enter_coherency(void) 39 { 40 cci_enable_snoop_dvm_reqs(MPIDR_AFFLVL1_VAL(read_mpidr_el1())); 41 } 42 43 /****************************************************************************** 44 * Helper function to remove current master from coherency 45 *****************************************************************************/ plat_arm_interconnect_exit_coherency(void)46void plat_arm_interconnect_exit_coherency(void) 47 { 48 cci_disable_snoop_dvm_reqs(MPIDR_AFFLVL1_VAL(read_mpidr_el1())); 49 } 50