1*91f16700Schasinglulu /* 2*91f16700Schasinglulu * Copyright (c) 2019, ARM Limited and Contributors. All rights reserved. 3*91f16700Schasinglulu * 4*91f16700Schasinglulu * SPDX-License-Identifier: BSD-3-Clause 5*91f16700Schasinglulu */ 6*91f16700Schasinglulu 7*91f16700Schasinglulu #ifndef MCSI_H 8*91f16700Schasinglulu #define MCSI_H 9*91f16700Schasinglulu 10*91f16700Schasinglulu #define SLAVE_IFACE7_OFFSET 0x1700 11*91f16700Schasinglulu #define SLAVE_IFACE6_OFFSET 0x1600 12*91f16700Schasinglulu #define SLAVE_IFACE5_OFFSET 0x1500 13*91f16700Schasinglulu #define SLAVE_IFACE4_OFFSET 0x1400 14*91f16700Schasinglulu #define SLAVE_IFACE3_OFFSET 0x1300 15*91f16700Schasinglulu #define SLAVE_IFACE2_OFFSET 0x1200 16*91f16700Schasinglulu #define SLAVE_IFACE1_OFFSET 0x1100 17*91f16700Schasinglulu #define SLAVE_IFACE0_OFFSET 0x1000 18*91f16700Schasinglulu #define SLAVE_IFACE_OFFSET(index) (SLAVE_IFACE0_OFFSET + \ 19*91f16700Schasinglulu (0x100 * (index))) 20*91f16700Schasinglulu /* Control and ID register offsets */ 21*91f16700Schasinglulu #define CENTRAL_CTRL_REG 0x0 22*91f16700Schasinglulu #define ERR_FLAG_REG 0x4 23*91f16700Schasinglulu #define SF_INIT_REG 0x10 24*91f16700Schasinglulu #define SF_CTRL_REG 0x14 25*91f16700Schasinglulu #define DCM_CTRL_REG 0x18 26*91f16700Schasinglulu #define ERR_FLAG2_REG 0x20 27*91f16700Schasinglulu #define SNP_PENDING_REG 0x28 28*91f16700Schasinglulu #define ACP_PENDING_REG 0x2c 29*91f16700Schasinglulu #define FLUSH_SF 0x500 30*91f16700Schasinglulu #define SYS_CCE_CTRL 0x2000 31*91f16700Schasinglulu #define MST1_CTRL 0x2100 32*91f16700Schasinglulu #define MTS2_CTRL 0x2200 33*91f16700Schasinglulu #define XBAR_ARAW_ARB 0x3000 34*91f16700Schasinglulu #define XBAR_R_ARB 0x3004 35*91f16700Schasinglulu 36*91f16700Schasinglulu /* Slave interface register offsets */ 37*91f16700Schasinglulu #define SNOOP_CTRL_REG 0x0 38*91f16700Schasinglulu #define QOS_CTRL_REG 0x4 39*91f16700Schasinglulu #define QOS_OVERRIDE_REG 0x8 40*91f16700Schasinglulu #define QOS_TARGET_REG 0xc 41*91f16700Schasinglulu #define BD_CTRL_REG 0x40 42*91f16700Schasinglulu 43*91f16700Schasinglulu /* Snoop Control register bit definitions */ 44*91f16700Schasinglulu #define DVM_SUPPORT (1U << 31) 45*91f16700Schasinglulu #define SNP_SUPPORT (1 << 30) 46*91f16700Schasinglulu #define SHAREABLE_OVWRT (1 << 2) 47*91f16700Schasinglulu #define DVM_EN_BIT (1 << 1) 48*91f16700Schasinglulu #define SNOOP_EN_BIT (1 << 0) 49*91f16700Schasinglulu #define SF2_INIT_DONE (1 << 17) 50*91f16700Schasinglulu #define SF1_INIT_DONE (1 << 16) 51*91f16700Schasinglulu #define TRIG_SF2_INIT (1 << 1) 52*91f16700Schasinglulu #define TRIG_SF1_INIT (1 << 0) 53*91f16700Schasinglulu 54*91f16700Schasinglulu /* Status register bit definitions */ 55*91f16700Schasinglulu #define SNP_PENDING 31 56*91f16700Schasinglulu 57*91f16700Schasinglulu /* Status bit */ 58*91f16700Schasinglulu #define NS_ACC 1 59*91f16700Schasinglulu #define S_ACC 0 60*91f16700Schasinglulu 61*91f16700Schasinglulu /* Central control register bit definitions */ 62*91f16700Schasinglulu #define PMU_SECURE_ACC_EN (1 << 4) 63*91f16700Schasinglulu #define INT_EN (1 << 3) 64*91f16700Schasinglulu #define SECURE_ACC_EN (1 << 2) 65*91f16700Schasinglulu #define DVM_DIS (1 << 1) 66*91f16700Schasinglulu #define SNOOP_DIS (1 << 0) 67*91f16700Schasinglulu 68*91f16700Schasinglulu #define MSCI_MEMORY_SZ (0x10000) 69*91f16700Schasinglulu 70*91f16700Schasinglulu #define MCSI_REG_ACCESS_READ (0x0) 71*91f16700Schasinglulu #define MCSI_REG_ACCESS_WRITE (0x1) 72*91f16700Schasinglulu #define MCSI_REG_ACCESS_SET_BITMASK (0x2) 73*91f16700Schasinglulu #define MCSI_REG_ACCESS_CLEAR_BITMASK (0x3) 74*91f16700Schasinglulu 75*91f16700Schasinglulu #define NR_MAX_SLV (7) 76*91f16700Schasinglulu 77*91f16700Schasinglulu /* ICCS */ 78*91f16700Schasinglulu #define CACHE_INSTR_EN (1 << 2) 79*91f16700Schasinglulu #define IDLE_CACHE (1 << 3) 80*91f16700Schasinglulu #define USE_SHARED_CACHE (1 << 4) 81*91f16700Schasinglulu #define CACHE_SHARED_PRE_EN (1 << 5) 82*91f16700Schasinglulu #define CACHE_SHARED_POST_EN (1 << 6) 83*91f16700Schasinglulu 84*91f16700Schasinglulu #define ACP_PENDING_MASK (0x1007f) 85*91f16700Schasinglulu 86*91f16700Schasinglulu #define CCI_CLK_CTRL (MCUCFG_BASE + 0x660) 87*91f16700Schasinglulu 88*91f16700Schasinglulu #ifndef __ASSEMBLER__ 89*91f16700Schasinglulu 90*91f16700Schasinglulu #include <plat/common/common_def.h> 91*91f16700Schasinglulu #include <stdint.h> 92*91f16700Schasinglulu 93*91f16700Schasinglulu /* Function declarations */ 94*91f16700Schasinglulu 95*91f16700Schasinglulu /* 96*91f16700Schasinglulu * The MCSI driver must be initialized with the base address of the 97*91f16700Schasinglulu * MCSI device in the platform memory map, and the cluster indices for 98*91f16700Schasinglulu * the MCSI slave interfaces 3 and 4 respectively. These are the fully 99*91f16700Schasinglulu * coherent ACE slave interfaces of MCSI. 100*91f16700Schasinglulu * The cluster indices must either be 0 or 1, corresponding to the level 1 101*91f16700Schasinglulu * affinity instance of the mpidr representing the cluster. A negative cluster 102*91f16700Schasinglulu * index indicates that no cluster is present on that slave interface. 103*91f16700Schasinglulu */ 104*91f16700Schasinglulu void mcsi_init(unsigned long cci_base, 105*91f16700Schasinglulu unsigned int num_cci_masters); 106*91f16700Schasinglulu void mcsi_cache_flush(void); 107*91f16700Schasinglulu 108*91f16700Schasinglulu void cci_enable_cluster_coherency(unsigned long mpidr); 109*91f16700Schasinglulu void cci_disable_cluster_coherency(unsigned long mpidr); 110*91f16700Schasinglulu 111*91f16700Schasinglulu void cci_secure_switch(unsigned int ns); 112*91f16700Schasinglulu void cci_init_sf(void); 113*91f16700Schasinglulu unsigned long cci_reg_access(unsigned int op, unsigned long offset, unsigned long val); 114*91f16700Schasinglulu 115*91f16700Schasinglulu #endif /* __ASSEMBLER__ */ 116*91f16700Schasinglulu #endif /* MCSI_H */ 117