• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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)30 void 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)38 void 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)46 void plat_arm_interconnect_exit_coherency(void)
47 {
48 	cci_disable_snoop_dvm_reqs(MPIDR_AFFLVL1_VAL(read_mpidr_el1()));
49 }
50