xref: /arm-trusted-firmware/plat/marvell/armada/a8k/common/include/a8k_plat_def.h (revision 91f16700b400a8c0651d24a598fc48ee2997a0d7)
1*91f16700Schasinglulu /*
2*91f16700Schasinglulu  * Copyright (C) 2018 Marvell International Ltd.
3*91f16700Schasinglulu  *
4*91f16700Schasinglulu  * SPDX-License-Identifier:     BSD-3-Clause
5*91f16700Schasinglulu  * https://spdx.org/licenses
6*91f16700Schasinglulu  */
7*91f16700Schasinglulu 
8*91f16700Schasinglulu #ifndef A8K_PLAT_DEF_H
9*91f16700Schasinglulu #define A8K_PLAT_DEF_H
10*91f16700Schasinglulu 
11*91f16700Schasinglulu #include <marvell_def.h>
12*91f16700Schasinglulu 
13*91f16700Schasinglulu #define MVEBU_PRIMARY_CPU		0x0
14*91f16700Schasinglulu #define MVEBU_AP0			0x0
15*91f16700Schasinglulu 
16*91f16700Schasinglulu /* APN806 revision ID */
17*91f16700Schasinglulu #define MVEBU_CSS_GWD_CTRL_IIDR2_REG	(MVEBU_REGS_BASE + 0x610FCC)
18*91f16700Schasinglulu #define GWD_IIDR2_REV_ID_OFFSET		12
19*91f16700Schasinglulu #define GWD_IIDR2_REV_ID_MASK		0xF
20*91f16700Schasinglulu #define GWD_IIDR2_CHIP_ID_OFFSET	20
21*91f16700Schasinglulu #define GWD_IIDR2_CHIP_ID_MASK		(0xFFFu << GWD_IIDR2_CHIP_ID_OFFSET)
22*91f16700Schasinglulu 
23*91f16700Schasinglulu #define CHIP_ID_AP806			0x806
24*91f16700Schasinglulu #define CHIP_ID_AP807			0x807
25*91f16700Schasinglulu 
26*91f16700Schasinglulu #define COUNTER_FREQUENCY		25000000
27*91f16700Schasinglulu 
28*91f16700Schasinglulu #define MVEBU_REGS_BASE			0xF0000000
29*91f16700Schasinglulu #define MVEBU_REGS_BASE_MASK		0xF0000000
30*91f16700Schasinglulu #define MVEBU_REGS_BASE_AP(ap)		MVEBU_REGS_BASE
31*91f16700Schasinglulu #define MVEBU_AP_IO_BASE(ap)		0xF2000000
32*91f16700Schasinglulu #define MVEBU_CP_OFFSET			0x2000000
33*91f16700Schasinglulu #define MVEBU_CP_REGS_BASE(cp_index)	(MVEBU_AP_IO_BASE(0) + \
34*91f16700Schasinglulu 						(cp_index) * MVEBU_CP_OFFSET)
35*91f16700Schasinglulu #define MVEBU_RFU_BASE			(MVEBU_REGS_BASE + 0x6F0000)
36*91f16700Schasinglulu #define MVEBU_IO_WIN_BASE(ap_index)	(MVEBU_RFU_BASE)
37*91f16700Schasinglulu #define MVEBU_IO_WIN_GCR_OFFSET		(0x70)
38*91f16700Schasinglulu #define MVEBU_IO_WIN_MAX_WINS		(7)
39*91f16700Schasinglulu 
40*91f16700Schasinglulu /* Misc SoC configurations Base */
41*91f16700Schasinglulu #define MVEBU_MISC_SOC_BASE		(MVEBU_REGS_BASE + 0x6F4300)
42*91f16700Schasinglulu 
43*91f16700Schasinglulu #define MVEBU_CCU_BASE(ap_index)	(MVEBU_REGS_BASE + 0x4000)
44*91f16700Schasinglulu #define MVEBU_CCU_MAX_WINS		(8)
45*91f16700Schasinglulu 
46*91f16700Schasinglulu #define MVEBU_LLC_BASE(ap_index)	(MVEBU_REGS_BASE + 0x8000)
47*91f16700Schasinglulu #define MVEBU_DRAM_MAC_BASE		(MVEBU_REGS_BASE + 0x20000)
48*91f16700Schasinglulu #define MVEBU_DRAM_PHY_BASE		(MVEBU_REGS_BASE + 0x20000)
49*91f16700Schasinglulu #define MVEBU_SMMU_BASE			(MVEBU_REGS_BASE + 0x100000)
50*91f16700Schasinglulu #define MVEBU_CP_MPP_REGS(cp_index, n)	(MVEBU_CP_REGS_BASE(cp_index) + \
51*91f16700Schasinglulu 						0x440000 + ((n) << 2))
52*91f16700Schasinglulu #define MVEBU_PM_MPP_REGS(cp_index, n)	(MVEBU_CP_REGS_BASE(cp_index) + \
53*91f16700Schasinglulu 						0x440000 + ((n / 8) << 2))
54*91f16700Schasinglulu #define MVEBU_CP_GPIO_DATA_OUT(cp_index, n) \
55*91f16700Schasinglulu 					(MVEBU_CP_REGS_BASE(cp_index) + \
56*91f16700Schasinglulu 					0x440100 + ((n > 31) ? 0x40 : 0x00))
57*91f16700Schasinglulu #define MVEBU_CP_GPIO_DATA_OUT_EN(cp_index, n) \
58*91f16700Schasinglulu 					(MVEBU_CP_REGS_BASE(cp_index) + \
59*91f16700Schasinglulu 					0x440104 + ((n > 31) ? 0x40 : 0x00))
60*91f16700Schasinglulu #define MVEBU_CP_GPIO_DATA_IN(cp_index, n) (MVEBU_CP_REGS_BASE(cp_index) + \
61*91f16700Schasinglulu 					0x440110 + ((n > 31) ? 0x40 : 0x00))
62*91f16700Schasinglulu #define MVEBU_AP_MPP_REGS(n)		(MVEBU_RFU_BASE + 0x4000 + ((n) << 2))
63*91f16700Schasinglulu #define MVEBU_AP_GPIO_REGS		(MVEBU_RFU_BASE + 0x5040)
64*91f16700Schasinglulu #define MVEBU_AP_GPIO_DATA_IN		(MVEBU_AP_GPIO_REGS + 0x10)
65*91f16700Schasinglulu #define MVEBU_AP_I2C_BASE		(MVEBU_REGS_BASE + 0x511000)
66*91f16700Schasinglulu #define MVEBU_CP0_I2C_BASE		(MVEBU_CP_REGS_BASE(0) + 0x701000)
67*91f16700Schasinglulu #define MVEBU_AP_GEN_MGMT_BASE		(MVEBU_RFU_BASE + 0x8000)
68*91f16700Schasinglulu #define MVEBU_AP_EXT_TSEN_BASE		(MVEBU_AP_GEN_MGMT_BASE + 0x84)
69*91f16700Schasinglulu 
70*91f16700Schasinglulu #define MVEBU_AP_MC_TRUSTZONE_REG_LOW(ap, win)	(MVEBU_REGS_BASE_AP(ap) + \
71*91f16700Schasinglulu 							0x20080 + ((win) * 0x8))
72*91f16700Schasinglulu #define MVEBU_AP_MC_TRUSTZONE_REG_HIGH(ap, win)	(MVEBU_REGS_BASE_AP(ap) + \
73*91f16700Schasinglulu 							0x20084 + ((win) * 0x8))
74*91f16700Schasinglulu 
75*91f16700Schasinglulu /* MCI indirect access definitions */
76*91f16700Schasinglulu #define MCI_MAX_UNIT_ID				2
77*91f16700Schasinglulu /* SoC RFU / IHBx4 Control */
78*91f16700Schasinglulu #define MCIX4_REG_START_ADDRESS_REG(unit_id)	(MVEBU_RFU_BASE + \
79*91f16700Schasinglulu 						0x4218 + (unit_id * 0x20))
80*91f16700Schasinglulu #define MCI_REMAP_OFF_SHIFT			8
81*91f16700Schasinglulu 
82*91f16700Schasinglulu #define MVEBU_MCI_REG_BASE_REMAP(index)		(0xFD000000 + \
83*91f16700Schasinglulu 						((index) * 0x1000000))
84*91f16700Schasinglulu 
85*91f16700Schasinglulu #define MVEBU_PCIE_X4_MAC_BASE(x)	(MVEBU_CP_REGS_BASE(x) + 0x600000)
86*91f16700Schasinglulu #define MVEBU_COMPHY_BASE(x)		(MVEBU_CP_REGS_BASE(x) + 0x441000)
87*91f16700Schasinglulu #define MVEBU_HPIPE_BASE(x)		(MVEBU_CP_REGS_BASE(x) + 0x120000)
88*91f16700Schasinglulu #define MVEBU_CP_DFX_OFFSET		(0x400200)
89*91f16700Schasinglulu 
90*91f16700Schasinglulu /*****************************************************************************
91*91f16700Schasinglulu  * MVEBU memory map related constants
92*91f16700Schasinglulu  *****************************************************************************
93*91f16700Schasinglulu  */
94*91f16700Schasinglulu /* Aggregate of all devices in the first GB */
95*91f16700Schasinglulu #define DEVICE0_BASE			MVEBU_REGS_BASE
96*91f16700Schasinglulu #define DEVICE0_SIZE			0x10000000
97*91f16700Schasinglulu 
98*91f16700Schasinglulu /*****************************************************************************
99*91f16700Schasinglulu  * GIC-400 & interrupt handling related constants
100*91f16700Schasinglulu  *****************************************************************************
101*91f16700Schasinglulu  */
102*91f16700Schasinglulu /* Base MVEBU compatible GIC memory map */
103*91f16700Schasinglulu #define MVEBU_GICD_BASE			0x210000
104*91f16700Schasinglulu #define MVEBU_GICC_BASE			0x220000
105*91f16700Schasinglulu 
106*91f16700Schasinglulu 
107*91f16700Schasinglulu /*****************************************************************************
108*91f16700Schasinglulu  * AXI Configuration
109*91f16700Schasinglulu  *****************************************************************************
110*91f16700Schasinglulu  */
111*91f16700Schasinglulu #define MVEBU_AXI_ATTR_ARCACHE_OFFSET		4
112*91f16700Schasinglulu #define MVEBU_AXI_ATTR_ARCACHE_MASK		(0xF << \
113*91f16700Schasinglulu 						 MVEBU_AXI_ATTR_ARCACHE_OFFSET)
114*91f16700Schasinglulu #define MVEBU_AXI_ATTR_ARDOMAIN_OFFSET		12
115*91f16700Schasinglulu #define MVEBU_AXI_ATTR_ARDOMAIN_MASK		(0x3 << \
116*91f16700Schasinglulu 						 MVEBU_AXI_ATTR_ARDOMAIN_OFFSET)
117*91f16700Schasinglulu #define MVEBU_AXI_ATTR_AWCACHE_OFFSET		20
118*91f16700Schasinglulu #define MVEBU_AXI_ATTR_AWCACHE_MASK		(0xF << \
119*91f16700Schasinglulu 						 MVEBU_AXI_ATTR_AWCACHE_OFFSET)
120*91f16700Schasinglulu #define MVEBU_AXI_ATTR_AWDOMAIN_OFFSET		28
121*91f16700Schasinglulu #define MVEBU_AXI_ATTR_AWDOMAIN_MASK		(0x3 << \
122*91f16700Schasinglulu 						 MVEBU_AXI_ATTR_AWDOMAIN_OFFSET)
123*91f16700Schasinglulu 
124*91f16700Schasinglulu /* SATA MBUS to AXI configuration */
125*91f16700Schasinglulu #define MVEBU_SATA_M2A_AXI_ARCACHE_OFFSET	1
126*91f16700Schasinglulu #define MVEBU_SATA_M2A_AXI_ARCACHE_MASK		(0xF << \
127*91f16700Schasinglulu 					MVEBU_SATA_M2A_AXI_ARCACHE_OFFSET)
128*91f16700Schasinglulu #define MVEBU_SATA_M2A_AXI_AWCACHE_OFFSET	5
129*91f16700Schasinglulu #define MVEBU_SATA_M2A_AXI_AWCACHE_MASK		(0xF << \
130*91f16700Schasinglulu 					MVEBU_SATA_M2A_AXI_AWCACHE_OFFSET)
131*91f16700Schasinglulu 
132*91f16700Schasinglulu /* ARM cache attributes */
133*91f16700Schasinglulu #define CACHE_ATTR_BUFFERABLE			0x1
134*91f16700Schasinglulu #define CACHE_ATTR_CACHEABLE			0x2
135*91f16700Schasinglulu #define CACHE_ATTR_READ_ALLOC			0x4
136*91f16700Schasinglulu #define CACHE_ATTR_WRITE_ALLOC			0x8
137*91f16700Schasinglulu /* Domain */
138*91f16700Schasinglulu #define DOMAIN_NON_SHAREABLE			0x0
139*91f16700Schasinglulu #define DOMAIN_INNER_SHAREABLE			0x1
140*91f16700Schasinglulu #define DOMAIN_OUTER_SHAREABLE			0x2
141*91f16700Schasinglulu #define DOMAIN_SYSTEM_SHAREABLE			0x3
142*91f16700Schasinglulu 
143*91f16700Schasinglulu /************************************************************************
144*91f16700Schasinglulu  * Required platform porting definitions common to all
145*91f16700Schasinglulu  * Management Compute SubSystems (MSS)
146*91f16700Schasinglulu  ************************************************************************
147*91f16700Schasinglulu  */
148*91f16700Schasinglulu /*
149*91f16700Schasinglulu  * Load address of SCP_BL2
150*91f16700Schasinglulu  * SCP_BL2 is loaded to the same place as BL31.
151*91f16700Schasinglulu  * Once SCP_BL2 is transferred to the SCP,
152*91f16700Schasinglulu  * it is discarded and BL31 is loaded over the top.
153*91f16700Schasinglulu  */
154*91f16700Schasinglulu #ifdef SCP_IMAGE
155*91f16700Schasinglulu #define SCP_BL2_BASE			BL31_BASE
156*91f16700Schasinglulu #define SCP_BL2_SIZE			BL31_LIMIT
157*91f16700Schasinglulu #endif
158*91f16700Schasinglulu 
159*91f16700Schasinglulu #ifndef __ASSEMBLER__
160*91f16700Schasinglulu enum ap806_sar_target_dev {
161*91f16700Schasinglulu 	SAR_PIDI_MCIX2		= 0x0,
162*91f16700Schasinglulu 	SAR_MCIX4		= 0x1,
163*91f16700Schasinglulu 	SAR_SPI			= 0x2,
164*91f16700Schasinglulu 	SAR_SD			= 0x3,
165*91f16700Schasinglulu 	SAR_PIDI_MCIX2_BD	= 0x4, /* BootRom disabled */
166*91f16700Schasinglulu 	SAR_MCIX4_DB		= 0x5, /* BootRom disabled */
167*91f16700Schasinglulu 	SAR_SPI_DB		= 0x6, /* BootRom disabled */
168*91f16700Schasinglulu 	SAR_EMMC		= 0x7
169*91f16700Schasinglulu };
170*91f16700Schasinglulu 
171*91f16700Schasinglulu enum io_win_target_ids {
172*91f16700Schasinglulu 	MCI_0_TID	 = 0x0,
173*91f16700Schasinglulu 	MCI_1_TID	 = 0x1,
174*91f16700Schasinglulu 	MCI_2_TID	 = 0x2,
175*91f16700Schasinglulu 	PIDI_TID	 = 0x3,
176*91f16700Schasinglulu 	SPI_TID		 = 0x4,
177*91f16700Schasinglulu 	STM_TID		 = 0x5,
178*91f16700Schasinglulu 	BOOTROM_TID	 = 0x6,
179*91f16700Schasinglulu 	IO_WIN_MAX_TID
180*91f16700Schasinglulu };
181*91f16700Schasinglulu 
182*91f16700Schasinglulu enum ccu_target_ids {
183*91f16700Schasinglulu 	IO_0_TID        = 0x00,
184*91f16700Schasinglulu 	DRAM_0_TID      = 0x03,
185*91f16700Schasinglulu 	IO_1_TID        = 0x0F,
186*91f16700Schasinglulu 	CFG_REG_TID     = 0x10,
187*91f16700Schasinglulu 	RAR_TID         = 0x20,
188*91f16700Schasinglulu 	SRAM_TID        = 0x40,
189*91f16700Schasinglulu 	DRAM_1_TID      = 0xC0,
190*91f16700Schasinglulu 	CCU_MAX_TID,
191*91f16700Schasinglulu 	INVALID_TID     = 0xFF
192*91f16700Schasinglulu };
193*91f16700Schasinglulu #endif /* __ASSEMBLER__ */
194*91f16700Schasinglulu 
195*91f16700Schasinglulu #endif /* A8K_PLAT_DEF_H */
196