xref: /arm-trusted-firmware/plat/mediatek/mt8183/drivers/mcsi/mcsi.h (revision 91f16700b400a8c0651d24a598fc48ee2997a0d7)
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