blob: 6505b9174f45010cc9fd62d41f1599e5d8a8c7a8 [file] [log] [blame]
Vikram Kanigirifbb13012016-02-15 11:54:14 +00001/*
Daniel Boulby844b4872018-09-18 13:36:39 +01002 * Copyright (c) 2016-2018, ARM Limited and Contributors. All rights reserved.
Vikram Kanigirifbb13012016-02-15 11:54:14 +00003 *
dp-armfa3cf0b2017-05-03 09:38:09 +01004 * SPDX-License-Identifier: BSD-3-Clause
Vikram Kanigirifbb13012016-02-15 11:54:14 +00005 */
6
7#include <arch.h>
8#include <cci.h>
9#include <plat_arm.h>
10#include <platform_def.h>
Sandrine Bailleux7659a262016-07-05 09:55:03 +010011#include <utils.h>
Vikram Kanigirifbb13012016-02-15 11:54:14 +000012
13static 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 *****************************************************************************/
Daniel Boulby844b4872018-09-18 13:36:39 +010030void __init plat_arm_interconnect_init(void)
Vikram Kanigirifbb13012016-02-15 11:54:14 +000031{
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 *****************************************************************************/
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 *****************************************************************************/
46void plat_arm_interconnect_exit_coherency(void)
47{
48 cci_disable_snoop_dvm_reqs(MPIDR_AFFLVL1_VAL(read_mpidr_el1()));
49}