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