1*91f16700Schasinglulu /* 2*91f16700Schasinglulu * Copyright (c) 2015-2018, ARM Limited and Contributors. All rights reserved. 3*91f16700Schasinglulu * 4*91f16700Schasinglulu * SPDX-License-Identifier: BSD-3-Clause 5*91f16700Schasinglulu */ 6*91f16700Schasinglulu 7*91f16700Schasinglulu #ifndef CCI_H 8*91f16700Schasinglulu #define CCI_H 9*91f16700Schasinglulu 10*91f16700Schasinglulu #include <lib/utils_def.h> 11*91f16700Schasinglulu 12*91f16700Schasinglulu /* Slave interface offsets from PERIPHBASE */ 13*91f16700Schasinglulu #define SLAVE_IFACE6_OFFSET UL(0x7000) 14*91f16700Schasinglulu #define SLAVE_IFACE5_OFFSET UL(0x6000) 15*91f16700Schasinglulu #define SLAVE_IFACE4_OFFSET UL(0x5000) 16*91f16700Schasinglulu #define SLAVE_IFACE3_OFFSET UL(0x4000) 17*91f16700Schasinglulu #define SLAVE_IFACE2_OFFSET UL(0x3000) 18*91f16700Schasinglulu #define SLAVE_IFACE1_OFFSET UL(0x2000) 19*91f16700Schasinglulu #define SLAVE_IFACE0_OFFSET UL(0x1000) 20*91f16700Schasinglulu #define SLAVE_IFACE_OFFSET(index) (SLAVE_IFACE0_OFFSET + \ 21*91f16700Schasinglulu (UL(0x1000) * (index))) 22*91f16700Schasinglulu 23*91f16700Schasinglulu /* Slave interface event and count register offsets from PERIPHBASE */ 24*91f16700Schasinglulu #define EVENT_SELECT7_OFFSET UL(0x80000) 25*91f16700Schasinglulu #define EVENT_SELECT6_OFFSET UL(0x70000) 26*91f16700Schasinglulu #define EVENT_SELECT5_OFFSET UL(0x60000) 27*91f16700Schasinglulu #define EVENT_SELECT4_OFFSET UL(0x50000) 28*91f16700Schasinglulu #define EVENT_SELECT3_OFFSET UL(0x40000) 29*91f16700Schasinglulu #define EVENT_SELECT2_OFFSET UL(0x30000) 30*91f16700Schasinglulu #define EVENT_SELECT1_OFFSET UL(0x20000) 31*91f16700Schasinglulu #define EVENT_SELECT0_OFFSET UL(0x10000) 32*91f16700Schasinglulu #define EVENT_OFFSET(index) (EVENT_SELECT0_OFFSET + \ 33*91f16700Schasinglulu (UL(0x10000) * (index))) 34*91f16700Schasinglulu 35*91f16700Schasinglulu /* Control and ID register offsets */ 36*91f16700Schasinglulu #define CTRL_OVERRIDE_REG U(0x0) 37*91f16700Schasinglulu #define SECURE_ACCESS_REG U(0x8) 38*91f16700Schasinglulu #define STATUS_REG U(0xc) 39*91f16700Schasinglulu #define IMPRECISE_ERR_REG U(0x10) 40*91f16700Schasinglulu #define PERFMON_CTRL_REG U(0x100) 41*91f16700Schasinglulu #define IFACE_MON_CTRL_REG U(0x104) 42*91f16700Schasinglulu 43*91f16700Schasinglulu /* Component and peripheral ID registers */ 44*91f16700Schasinglulu #define PERIPHERAL_ID0 U(0xFE0) 45*91f16700Schasinglulu #define PERIPHERAL_ID1 U(0xFE4) 46*91f16700Schasinglulu #define PERIPHERAL_ID2 U(0xFE8) 47*91f16700Schasinglulu #define PERIPHERAL_ID3 U(0xFEC) 48*91f16700Schasinglulu #define PERIPHERAL_ID4 U(0xFD0) 49*91f16700Schasinglulu #define PERIPHERAL_ID5 U(0xFD4) 50*91f16700Schasinglulu #define PERIPHERAL_ID6 U(0xFD8) 51*91f16700Schasinglulu #define PERIPHERAL_ID7 U(0xFDC) 52*91f16700Schasinglulu 53*91f16700Schasinglulu #define COMPONENT_ID0 U(0xFF0) 54*91f16700Schasinglulu #define COMPONENT_ID1 U(0xFF4) 55*91f16700Schasinglulu #define COMPONENT_ID2 U(0xFF8) 56*91f16700Schasinglulu #define COMPONENT_ID3 U(0xFFC) 57*91f16700Schasinglulu #define COMPONENT_ID4 U(0x1000) 58*91f16700Schasinglulu #define COMPONENT_ID5 U(0x1004) 59*91f16700Schasinglulu #define COMPONENT_ID6 U(0x1008) 60*91f16700Schasinglulu #define COMPONENT_ID7 U(0x100C) 61*91f16700Schasinglulu 62*91f16700Schasinglulu /* Slave interface register offsets */ 63*91f16700Schasinglulu #define SNOOP_CTRL_REG U(0x0) 64*91f16700Schasinglulu #define SH_OVERRIDE_REG U(0x4) 65*91f16700Schasinglulu #define READ_CHNL_QOS_VAL_OVERRIDE_REG U(0x100) 66*91f16700Schasinglulu #define WRITE_CHNL_QOS_VAL_OVERRIDE_REG U(0x104) 67*91f16700Schasinglulu #define MAX_OT_REG U(0x110) 68*91f16700Schasinglulu 69*91f16700Schasinglulu /* Snoop Control register bit definitions */ 70*91f16700Schasinglulu #define DVM_EN_BIT BIT_32(1) 71*91f16700Schasinglulu #define SNOOP_EN_BIT BIT_32(0) 72*91f16700Schasinglulu #define SUPPORT_SNOOPS BIT_32(30) 73*91f16700Schasinglulu #define SUPPORT_DVM BIT_32(31) 74*91f16700Schasinglulu 75*91f16700Schasinglulu /* Status register bit definitions */ 76*91f16700Schasinglulu #define CHANGE_PENDING_BIT BIT_32(0) 77*91f16700Schasinglulu 78*91f16700Schasinglulu /* Event and count register offsets */ 79*91f16700Schasinglulu #define EVENT_SELECT_REG U(0x0) 80*91f16700Schasinglulu #define EVENT_COUNT_REG U(0x4) 81*91f16700Schasinglulu #define COUNT_CNTRL_REG U(0x8) 82*91f16700Schasinglulu #define COUNT_OVERFLOW_REG U(0xC) 83*91f16700Schasinglulu 84*91f16700Schasinglulu /* Slave interface monitor registers */ 85*91f16700Schasinglulu #define INT_MON_REG_SI0 U(0x90000) 86*91f16700Schasinglulu #define INT_MON_REG_SI1 U(0x90004) 87*91f16700Schasinglulu #define INT_MON_REG_SI2 U(0x90008) 88*91f16700Schasinglulu #define INT_MON_REG_SI3 U(0x9000C) 89*91f16700Schasinglulu #define INT_MON_REG_SI4 U(0x90010) 90*91f16700Schasinglulu #define INT_MON_REG_SI5 U(0x90014) 91*91f16700Schasinglulu #define INT_MON_REG_SI6 U(0x90018) 92*91f16700Schasinglulu 93*91f16700Schasinglulu /* Master interface monitor registers */ 94*91f16700Schasinglulu #define INT_MON_REG_MI0 U(0x90100) 95*91f16700Schasinglulu #define INT_MON_REG_MI1 U(0x90104) 96*91f16700Schasinglulu #define INT_MON_REG_MI2 U(0x90108) 97*91f16700Schasinglulu #define INT_MON_REG_MI3 U(0x9010c) 98*91f16700Schasinglulu #define INT_MON_REG_MI4 U(0x90110) 99*91f16700Schasinglulu #define INT_MON_REG_MI5 U(0x90114) 100*91f16700Schasinglulu 101*91f16700Schasinglulu #define SLAVE_IF_UNUSED -1 102*91f16700Schasinglulu 103*91f16700Schasinglulu #ifndef __ASSEMBLER__ 104*91f16700Schasinglulu 105*91f16700Schasinglulu #include <stdint.h> 106*91f16700Schasinglulu 107*91f16700Schasinglulu /* Function declarations */ 108*91f16700Schasinglulu 109*91f16700Schasinglulu /* 110*91f16700Schasinglulu * The ARM CCI driver needs the following: 111*91f16700Schasinglulu * 1. Base address of the CCI product 112*91f16700Schasinglulu * 2. An array of map between AMBA 4 master ids and ACE/ACE lite slave 113*91f16700Schasinglulu * interfaces. 114*91f16700Schasinglulu * 3. Size of the array. 115*91f16700Schasinglulu * 116*91f16700Schasinglulu * SLAVE_IF_UNUSED should be used in the map to represent no AMBA 4 master exists 117*91f16700Schasinglulu * for that interface. 118*91f16700Schasinglulu */ 119*91f16700Schasinglulu void cci_init(uintptr_t base, const int *map, unsigned int num_cci_masters); 120*91f16700Schasinglulu 121*91f16700Schasinglulu void cci_enable_snoop_dvm_reqs(unsigned int master_id); 122*91f16700Schasinglulu void cci_disable_snoop_dvm_reqs(unsigned int master_id); 123*91f16700Schasinglulu 124*91f16700Schasinglulu #endif /* __ASSEMBLER__ */ 125*91f16700Schasinglulu #endif /* CCI_H */ 126