xref: /rk3399_ARM-atf/include/drivers/arm/cci.h (revision ee37db50c018e6f590e795a9f3537f37aa026f33)
123e47edeSVikram Kanigiri /*
24213e9baSAntonio Nino Diaz  * Copyright (c) 2015-2018, ARM Limited and Contributors. All rights reserved.
323e47edeSVikram Kanigiri  *
482cb2c1aSdp-arm  * SPDX-License-Identifier: BSD-3-Clause
523e47edeSVikram Kanigiri  */
623e47edeSVikram Kanigiri 
7c3cf06f1SAntonio Nino Diaz #ifndef CCI_H
8c3cf06f1SAntonio Nino Diaz #define CCI_H
923e47edeSVikram Kanigiri 
1009d40e0eSAntonio Nino Diaz #include <lib/utils_def.h>
114213e9baSAntonio Nino Diaz 
1223e47edeSVikram Kanigiri /* Slave interface offsets from PERIPHBASE */
134213e9baSAntonio Nino Diaz #define SLAVE_IFACE6_OFFSET		UL(0x7000)
144213e9baSAntonio Nino Diaz #define SLAVE_IFACE5_OFFSET		UL(0x6000)
154213e9baSAntonio Nino Diaz #define SLAVE_IFACE4_OFFSET		UL(0x5000)
164213e9baSAntonio Nino Diaz #define SLAVE_IFACE3_OFFSET		UL(0x4000)
174213e9baSAntonio Nino Diaz #define SLAVE_IFACE2_OFFSET		UL(0x3000)
184213e9baSAntonio Nino Diaz #define SLAVE_IFACE1_OFFSET		UL(0x2000)
194213e9baSAntonio Nino Diaz #define SLAVE_IFACE0_OFFSET		UL(0x1000)
2023e47edeSVikram Kanigiri #define SLAVE_IFACE_OFFSET(index)	(SLAVE_IFACE0_OFFSET + \
214213e9baSAntonio Nino Diaz 					(UL(0x1000) * (index)))
2223e47edeSVikram Kanigiri 
2323e47edeSVikram Kanigiri /* Slave interface event and count register offsets from PERIPHBASE */
244213e9baSAntonio Nino Diaz #define EVENT_SELECT7_OFFSET		UL(0x80000)
254213e9baSAntonio Nino Diaz #define EVENT_SELECT6_OFFSET		UL(0x70000)
264213e9baSAntonio Nino Diaz #define EVENT_SELECT5_OFFSET		UL(0x60000)
274213e9baSAntonio Nino Diaz #define EVENT_SELECT4_OFFSET		UL(0x50000)
284213e9baSAntonio Nino Diaz #define EVENT_SELECT3_OFFSET		UL(0x40000)
294213e9baSAntonio Nino Diaz #define EVENT_SELECT2_OFFSET		UL(0x30000)
304213e9baSAntonio Nino Diaz #define EVENT_SELECT1_OFFSET		UL(0x20000)
314213e9baSAntonio Nino Diaz #define EVENT_SELECT0_OFFSET		UL(0x10000)
3223e47edeSVikram Kanigiri #define EVENT_OFFSET(index)		(EVENT_SELECT0_OFFSET + \
334213e9baSAntonio Nino Diaz 					(UL(0x10000) * (index)))
3423e47edeSVikram Kanigiri 
3523e47edeSVikram Kanigiri /* Control and ID register offsets */
364213e9baSAntonio Nino Diaz #define CTRL_OVERRIDE_REG		U(0x0)
374213e9baSAntonio Nino Diaz #define SECURE_ACCESS_REG		U(0x8)
384213e9baSAntonio Nino Diaz #define STATUS_REG			U(0xc)
394213e9baSAntonio Nino Diaz #define IMPRECISE_ERR_REG		U(0x10)
404213e9baSAntonio Nino Diaz #define PERFMON_CTRL_REG		U(0x100)
414213e9baSAntonio Nino Diaz #define IFACE_MON_CTRL_REG		U(0x104)
4223e47edeSVikram Kanigiri 
4323e47edeSVikram Kanigiri /* Component and peripheral ID registers */
444213e9baSAntonio Nino Diaz #define PERIPHERAL_ID0			U(0xFE0)
454213e9baSAntonio Nino Diaz #define PERIPHERAL_ID1			U(0xFE4)
464213e9baSAntonio Nino Diaz #define PERIPHERAL_ID2			U(0xFE8)
474213e9baSAntonio Nino Diaz #define PERIPHERAL_ID3			U(0xFEC)
484213e9baSAntonio Nino Diaz #define PERIPHERAL_ID4			U(0xFD0)
494213e9baSAntonio Nino Diaz #define PERIPHERAL_ID5			U(0xFD4)
504213e9baSAntonio Nino Diaz #define PERIPHERAL_ID6			U(0xFD8)
514213e9baSAntonio Nino Diaz #define PERIPHERAL_ID7			U(0xFDC)
5223e47edeSVikram Kanigiri 
534213e9baSAntonio Nino Diaz #define COMPONENT_ID0			U(0xFF0)
544213e9baSAntonio Nino Diaz #define COMPONENT_ID1			U(0xFF4)
554213e9baSAntonio Nino Diaz #define COMPONENT_ID2			U(0xFF8)
564213e9baSAntonio Nino Diaz #define COMPONENT_ID3			U(0xFFC)
574213e9baSAntonio Nino Diaz #define COMPONENT_ID4			U(0x1000)
584213e9baSAntonio Nino Diaz #define COMPONENT_ID5			U(0x1004)
594213e9baSAntonio Nino Diaz #define COMPONENT_ID6			U(0x1008)
604213e9baSAntonio Nino Diaz #define COMPONENT_ID7			U(0x100C)
6123e47edeSVikram Kanigiri 
6223e47edeSVikram Kanigiri /* Slave interface register offsets */
634213e9baSAntonio Nino Diaz #define SNOOP_CTRL_REG			U(0x0)
644213e9baSAntonio Nino Diaz #define SH_OVERRIDE_REG			U(0x4)
654213e9baSAntonio Nino Diaz #define READ_CHNL_QOS_VAL_OVERRIDE_REG	U(0x100)
664213e9baSAntonio Nino Diaz #define WRITE_CHNL_QOS_VAL_OVERRIDE_REG	U(0x104)
674213e9baSAntonio Nino Diaz #define MAX_OT_REG			U(0x110)
6823e47edeSVikram Kanigiri 
6923e47edeSVikram Kanigiri /* Snoop Control register bit definitions */
704213e9baSAntonio Nino Diaz #define DVM_EN_BIT			BIT_32(1)
714213e9baSAntonio Nino Diaz #define SNOOP_EN_BIT			BIT_32(0)
724213e9baSAntonio Nino Diaz #define SUPPORT_SNOOPS			BIT_32(30)
734213e9baSAntonio Nino Diaz #define SUPPORT_DVM			BIT_32(31)
7423e47edeSVikram Kanigiri 
7523e47edeSVikram Kanigiri /* Status register bit definitions */
764213e9baSAntonio Nino Diaz #define CHANGE_PENDING_BIT		BIT_32(0)
7723e47edeSVikram Kanigiri 
7823e47edeSVikram Kanigiri /* Event and count register offsets */
794213e9baSAntonio Nino Diaz #define EVENT_SELECT_REG		U(0x0)
804213e9baSAntonio Nino Diaz #define EVENT_COUNT_REG			U(0x4)
814213e9baSAntonio Nino Diaz #define COUNT_CNTRL_REG			U(0x8)
824213e9baSAntonio Nino Diaz #define COUNT_OVERFLOW_REG		U(0xC)
8323e47edeSVikram Kanigiri 
8423e47edeSVikram Kanigiri /* Slave interface monitor registers */
854213e9baSAntonio Nino Diaz #define INT_MON_REG_SI0			U(0x90000)
864213e9baSAntonio Nino Diaz #define INT_MON_REG_SI1			U(0x90004)
874213e9baSAntonio Nino Diaz #define INT_MON_REG_SI2			U(0x90008)
884213e9baSAntonio Nino Diaz #define INT_MON_REG_SI3			U(0x9000C)
894213e9baSAntonio Nino Diaz #define INT_MON_REG_SI4			U(0x90010)
904213e9baSAntonio Nino Diaz #define INT_MON_REG_SI5			U(0x90014)
914213e9baSAntonio Nino Diaz #define INT_MON_REG_SI6			U(0x90018)
9223e47edeSVikram Kanigiri 
9323e47edeSVikram Kanigiri /* Master interface monitor registers */
944213e9baSAntonio Nino Diaz #define INT_MON_REG_MI0			U(0x90100)
954213e9baSAntonio Nino Diaz #define INT_MON_REG_MI1			U(0x90104)
964213e9baSAntonio Nino Diaz #define INT_MON_REG_MI2			U(0x90108)
974213e9baSAntonio Nino Diaz #define INT_MON_REG_MI3			U(0x9010c)
984213e9baSAntonio Nino Diaz #define INT_MON_REG_MI4			U(0x90110)
994213e9baSAntonio Nino Diaz #define INT_MON_REG_MI5			U(0x90114)
10023e47edeSVikram Kanigiri 
10123e47edeSVikram Kanigiri #define SLAVE_IF_UNUSED			-1
10223e47edeSVikram Kanigiri 
103d5dfdeb6SJulius Werner #ifndef __ASSEMBLER__
10423e47edeSVikram Kanigiri 
105*3d7caf47SMaheedhar Bollapalli #include <stddef.h>
10623e47edeSVikram Kanigiri #include <stdint.h>
10723e47edeSVikram Kanigiri 
10823e47edeSVikram Kanigiri /* Function declarations */
10923e47edeSVikram Kanigiri 
11023e47edeSVikram Kanigiri /*
11123e47edeSVikram Kanigiri  * The ARM CCI driver needs the following:
112e33fd445SJeenu Viswambharan  * 1. Base address of the CCI product
11323e47edeSVikram Kanigiri  * 2. An array  of map between AMBA 4 master ids and ACE/ACE lite slave
11423e47edeSVikram Kanigiri  *    interfaces.
11523e47edeSVikram Kanigiri  * 3. Size of the array.
11623e47edeSVikram Kanigiri  *
11723e47edeSVikram Kanigiri  * SLAVE_IF_UNUSED should be used in the map to represent no AMBA 4 master exists
11823e47edeSVikram Kanigiri  * for that interface.
11923e47edeSVikram Kanigiri  */
120*3d7caf47SMaheedhar Bollapalli void cci_init(uintptr_t base, const int *map, size_t num_cci_masters);
12123e47edeSVikram Kanigiri 
122*3d7caf47SMaheedhar Bollapalli void cci_enable_snoop_dvm_reqs(size_t master_id);
123*3d7caf47SMaheedhar Bollapalli void cci_disable_snoop_dvm_reqs(size_t master_id);
12423e47edeSVikram Kanigiri 
125d5dfdeb6SJulius Werner #endif /* __ASSEMBLER__ */
126c3cf06f1SAntonio Nino Diaz #endif /* CCI_H */
127