123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116 |
- /*
- * Copyright (c) 2019, ARM Limited and Contributors. All rights reserved.
- *
- * SPDX-License-Identifier: BSD-3-Clause
- */
- #ifndef MCSI_H
- #define MCSI_H
- #define SLAVE_IFACE7_OFFSET 0x1700
- #define SLAVE_IFACE6_OFFSET 0x1600
- #define SLAVE_IFACE5_OFFSET 0x1500
- #define SLAVE_IFACE4_OFFSET 0x1400
- #define SLAVE_IFACE3_OFFSET 0x1300
- #define SLAVE_IFACE2_OFFSET 0x1200
- #define SLAVE_IFACE1_OFFSET 0x1100
- #define SLAVE_IFACE0_OFFSET 0x1000
- #define SLAVE_IFACE_OFFSET(index) (SLAVE_IFACE0_OFFSET + \
- (0x100 * (index)))
- /* Control and ID register offsets */
- #define CENTRAL_CTRL_REG 0x0
- #define ERR_FLAG_REG 0x4
- #define SF_INIT_REG 0x10
- #define SF_CTRL_REG 0x14
- #define DCM_CTRL_REG 0x18
- #define ERR_FLAG2_REG 0x20
- #define SNP_PENDING_REG 0x28
- #define ACP_PENDING_REG 0x2c
- #define FLUSH_SF 0x500
- #define SYS_CCE_CTRL 0x2000
- #define MST1_CTRL 0x2100
- #define MTS2_CTRL 0x2200
- #define XBAR_ARAW_ARB 0x3000
- #define XBAR_R_ARB 0x3004
- /* Slave interface register offsets */
- #define SNOOP_CTRL_REG 0x0
- #define QOS_CTRL_REG 0x4
- #define QOS_OVERRIDE_REG 0x8
- #define QOS_TARGET_REG 0xc
- #define BD_CTRL_REG 0x40
- /* Snoop Control register bit definitions */
- #define DVM_SUPPORT (1U << 31)
- #define SNP_SUPPORT (1 << 30)
- #define SHAREABLE_OVWRT (1 << 2)
- #define DVM_EN_BIT (1 << 1)
- #define SNOOP_EN_BIT (1 << 0)
- #define SF2_INIT_DONE (1 << 17)
- #define SF1_INIT_DONE (1 << 16)
- #define TRIG_SF2_INIT (1 << 1)
- #define TRIG_SF1_INIT (1 << 0)
- /* Status register bit definitions */
- #define SNP_PENDING 31
- /* Status bit */
- #define NS_ACC 1
- #define S_ACC 0
- /* Central control register bit definitions */
- #define PMU_SECURE_ACC_EN (1 << 4)
- #define INT_EN (1 << 3)
- #define SECURE_ACC_EN (1 << 2)
- #define DVM_DIS (1 << 1)
- #define SNOOP_DIS (1 << 0)
- #define MSCI_MEMORY_SZ (0x10000)
- #define MCSI_REG_ACCESS_READ (0x0)
- #define MCSI_REG_ACCESS_WRITE (0x1)
- #define MCSI_REG_ACCESS_SET_BITMASK (0x2)
- #define MCSI_REG_ACCESS_CLEAR_BITMASK (0x3)
- #define NR_MAX_SLV (7)
- /* ICCS */
- #define CACHE_INSTR_EN (1 << 2)
- #define IDLE_CACHE (1 << 3)
- #define USE_SHARED_CACHE (1 << 4)
- #define CACHE_SHARED_PRE_EN (1 << 5)
- #define CACHE_SHARED_POST_EN (1 << 6)
- #define ACP_PENDING_MASK (0x1007f)
- #define CCI_CLK_CTRL (MCUCFG_BASE + 0x660)
- #ifndef __ASSEMBLER__
- #include <plat/common/common_def.h>
- #include <stdint.h>
- /* Function declarations */
- /*
- * The MCSI driver must be initialized with the base address of the
- * MCSI device in the platform memory map, and the cluster indices for
- * the MCSI slave interfaces 3 and 4 respectively. These are the fully
- * coherent ACE slave interfaces of MCSI.
- * The cluster indices must either be 0 or 1, corresponding to the level 1
- * affinity instance of the mpidr representing the cluster. A negative cluster
- * index indicates that no cluster is present on that slave interface.
- */
- void mcsi_init(unsigned long cci_base,
- unsigned int num_cci_masters);
- void mcsi_cache_flush(void);
- void cci_enable_cluster_coherency(unsigned long mpidr);
- void cci_disable_cluster_coherency(unsigned long mpidr);
- void cci_secure_switch(unsigned int ns);
- void cci_init_sf(void);
- unsigned long cci_reg_access(unsigned int op, unsigned long offset, unsigned long val);
- #endif /* __ASSEMBLER__ */
- #endif /* MCSI_H */
|