xref: /rk3399_ARM-atf/plat/mediatek/mt8183/drivers/mcsi/mcsi.h (revision d5dfdeb65ff5b7f24dded201d2945c7b74565ce8)
116b49f60Skenny liang /*
216b49f60Skenny liang  * Copyright (c) 2019, ARM Limited and Contributors. All rights reserved.
316b49f60Skenny liang  *
416b49f60Skenny liang  * SPDX-License-Identifier: BSD-3-Clause
516b49f60Skenny liang  */
616b49f60Skenny liang 
716b49f60Skenny liang #ifndef MCSI_H
816b49f60Skenny liang #define MCSI_H
916b49f60Skenny liang 
1016b49f60Skenny liang #define SLAVE_IFACE7_OFFSET		0x1700
1116b49f60Skenny liang #define SLAVE_IFACE6_OFFSET		0x1600
1216b49f60Skenny liang #define SLAVE_IFACE5_OFFSET		0x1500
1316b49f60Skenny liang #define SLAVE_IFACE4_OFFSET		0x1400
1416b49f60Skenny liang #define SLAVE_IFACE3_OFFSET		0x1300
1516b49f60Skenny liang #define SLAVE_IFACE2_OFFSET		0x1200
1616b49f60Skenny liang #define SLAVE_IFACE1_OFFSET		0x1100
1716b49f60Skenny liang #define SLAVE_IFACE0_OFFSET		0x1000
1816b49f60Skenny liang #define SLAVE_IFACE_OFFSET(index)	(SLAVE_IFACE0_OFFSET + \
1916b49f60Skenny liang 							(0x100 * (index)))
2016b49f60Skenny liang /* Control and ID register offsets */
2116b49f60Skenny liang #define CENTRAL_CTRL_REG		0x0
2216b49f60Skenny liang #define ERR_FLAG_REG			0x4
2316b49f60Skenny liang #define SF_INIT_REG			0x10
2416b49f60Skenny liang #define SF_CTRL_REG			0x14
2516b49f60Skenny liang #define DCM_CTRL_REG			0x18
2616b49f60Skenny liang #define ERR_FLAG2_REG			0x20
2716b49f60Skenny liang #define SNP_PENDING_REG			0x28
2816b49f60Skenny liang #define ACP_PENDING_REG			0x2c
2916b49f60Skenny liang #define FLUSH_SF			0x500
3016b49f60Skenny liang #define SYS_CCE_CTRL			0x2000
3116b49f60Skenny liang #define MST1_CTRL			0x2100
3216b49f60Skenny liang #define MTS2_CTRL			0x2200
3316b49f60Skenny liang #define XBAR_ARAW_ARB			0x3000
3416b49f60Skenny liang #define XBAR_R_ARB			0x3004
3516b49f60Skenny liang 
3616b49f60Skenny liang /* Slave interface register offsets */
3716b49f60Skenny liang #define SNOOP_CTRL_REG			0x0
3816b49f60Skenny liang #define QOS_CTRL_REG			0x4
3916b49f60Skenny liang #define QOS_OVERRIDE_REG		0x8
4016b49f60Skenny liang #define QOS_TARGET_REG			0xc
4116b49f60Skenny liang #define BD_CTRL_REG			0x40
4216b49f60Skenny liang 
4316b49f60Skenny liang /* Snoop Control register bit definitions */
44621d5f2aSJustin Chadwell #define DVM_SUPPORT			(1U << 31)
4516b49f60Skenny liang #define SNP_SUPPORT			(1 << 30)
4616b49f60Skenny liang #define SHAREABLE_OVWRT			(1 << 2)
4716b49f60Skenny liang #define DVM_EN_BIT			(1 << 1)
4816b49f60Skenny liang #define SNOOP_EN_BIT			(1 << 0)
4916b49f60Skenny liang #define SF2_INIT_DONE			(1 << 17)
5016b49f60Skenny liang #define SF1_INIT_DONE			(1 << 16)
5116b49f60Skenny liang #define TRIG_SF2_INIT			(1 << 1)
5216b49f60Skenny liang #define TRIG_SF1_INIT			(1 << 0)
5316b49f60Skenny liang 
5416b49f60Skenny liang /* Status register bit definitions */
5516b49f60Skenny liang #define SNP_PENDING			31
5616b49f60Skenny liang 
5716b49f60Skenny liang /* Status bit */
5816b49f60Skenny liang #define NS_ACC				1
5916b49f60Skenny liang #define S_ACC				0
6016b49f60Skenny liang 
6116b49f60Skenny liang /* Central control register bit definitions */
6216b49f60Skenny liang #define PMU_SECURE_ACC_EN		(1 << 4)
6316b49f60Skenny liang #define INT_EN				(1 << 3)
6416b49f60Skenny liang #define SECURE_ACC_EN			(1 << 2)
6516b49f60Skenny liang #define DVM_DIS				(1 << 1)
6616b49f60Skenny liang #define SNOOP_DIS			(1 << 0)
6716b49f60Skenny liang 
6816b49f60Skenny liang #define MSCI_MEMORY_SZ			(0x10000)
6916b49f60Skenny liang 
7016b49f60Skenny liang #define MCSI_REG_ACCESS_READ		(0x0)
7116b49f60Skenny liang #define MCSI_REG_ACCESS_WRITE		(0x1)
7216b49f60Skenny liang #define MCSI_REG_ACCESS_SET_BITMASK	(0x2)
7316b49f60Skenny liang #define MCSI_REG_ACCESS_CLEAR_BITMASK	(0x3)
7416b49f60Skenny liang 
7516b49f60Skenny liang #define NR_MAX_SLV			(7)
7616b49f60Skenny liang 
7716b49f60Skenny liang /* ICCS */
7816b49f60Skenny liang #define CACHE_INSTR_EN			(1 << 2)
7916b49f60Skenny liang #define IDLE_CACHE			(1 << 3)
8016b49f60Skenny liang #define USE_SHARED_CACHE		(1 << 4)
8116b49f60Skenny liang #define CACHE_SHARED_PRE_EN		(1 << 5)
8216b49f60Skenny liang #define CACHE_SHARED_POST_EN		(1 << 6)
8316b49f60Skenny liang 
8416b49f60Skenny liang #define ACP_PENDING_MASK		(0x1007f)
8516b49f60Skenny liang 
8616b49f60Skenny liang #define CCI_CLK_CTRL			(MCUCFG_BASE + 0x660)
8716b49f60Skenny liang 
88*d5dfdeb6SJulius Werner #ifndef __ASSEMBLER__
8916b49f60Skenny liang 
9016b49f60Skenny liang #include <plat/common/common_def.h>
9116b49f60Skenny liang #include <stdint.h>
9216b49f60Skenny liang 
9316b49f60Skenny liang /* Function declarations */
9416b49f60Skenny liang 
9516b49f60Skenny liang /*
9616b49f60Skenny liang  * The MCSI driver must be initialized with the base address of the
9716b49f60Skenny liang  * MCSI device in the platform memory map, and the cluster indices for
9816b49f60Skenny liang  * the MCSI slave interfaces 3 and 4 respectively. These are the fully
9916b49f60Skenny liang  * coherent ACE slave interfaces of MCSI.
10016b49f60Skenny liang  * The cluster indices must either be 0 or 1, corresponding to the level 1
10116b49f60Skenny liang  * affinity instance of the mpidr representing the cluster. A negative cluster
10216b49f60Skenny liang  * index indicates that no cluster is present on that slave interface.
10316b49f60Skenny liang  */
10416b49f60Skenny liang void mcsi_init(unsigned long cci_base,
10516b49f60Skenny liang 		unsigned int num_cci_masters);
10616b49f60Skenny liang void mcsi_cache_flush(void);
10716b49f60Skenny liang 
10816b49f60Skenny liang void cci_enable_cluster_coherency(unsigned long mpidr);
10916b49f60Skenny liang void cci_disable_cluster_coherency(unsigned long mpidr);
11016b49f60Skenny liang 
11116b49f60Skenny liang void cci_secure_switch(unsigned int ns);
11216b49f60Skenny liang void cci_init_sf(void);
11316b49f60Skenny liang unsigned long cci_reg_access(unsigned int op, unsigned long offset, unsigned long val);
11416b49f60Skenny liang 
115*d5dfdeb6SJulius Werner #endif /* __ASSEMBLER__ */
11616b49f60Skenny liang #endif /* MCSI_H */
117