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 #include <plat/arm/common/plat_arm.h> 13 14 static const int cci_map[] = { 15 PLAT_ARM_CCI_CLUSTER0_SL_IFACE_IX, 16 PLAT_ARM_CCI_CLUSTER1_SL_IFACE_IX 17 }; 18 19 /****************************************************************************** 20 * The following functions are defined as weak to allow a platform to override 21 * the way ARM CCI driver is initialised and used. 22 *****************************************************************************/ 23 #pragma weak plat_arm_interconnect_init 24 #pragma weak plat_arm_interconnect_enter_coherency 25 #pragma weak plat_arm_interconnect_exit_coherency 26 27 28 /****************************************************************************** 29 * Helper function to initialize ARM CCI driver. 30 *****************************************************************************/ plat_arm_interconnect_init(void)31void __init plat_arm_interconnect_init(void) 32 { 33 cci_init(PLAT_ARM_CCI_BASE, cci_map, ARRAY_SIZE(cci_map)); 34 } 35 36 /****************************************************************************** 37 * Helper function to place current master into coherency 38 *****************************************************************************/ plat_arm_interconnect_enter_coherency(void)39void plat_arm_interconnect_enter_coherency(void) 40 { 41 cci_enable_snoop_dvm_reqs(MPIDR_AFFLVL1_VAL(read_mpidr_el1())); 42 } 43 44 /****************************************************************************** 45 * Helper function to remove current master from coherency 46 *****************************************************************************/ plat_arm_interconnect_exit_coherency(void)47void plat_arm_interconnect_exit_coherency(void) 48 { 49 cci_disable_snoop_dvm_reqs(MPIDR_AFFLVL1_VAL(read_mpidr_el1())); 50 } 51