1 /*
2  * Copyright (c) 2014, ARM Limited and Contributors. All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions are met:
6  *
7  * Redistributions of source code must retain the above copyright notice, this
8  * list of conditions and the following disclaimer.
9  *
10  * Redistributions in binary form must reproduce the above copyright notice,
11  * this list of conditions and the following disclaimer in the documentation
12  * and/or other materials provided with the distribution.
13  *
14  * Neither the name of ARM nor the names of its contributors may be used
15  * to endorse or promote products derived from this software without specific
16  * prior written permission.
17  *
18  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
19  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
22  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
23  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
24  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
25  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
26  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
27  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
28  * POSSIBILITY OF SUCH DAMAGE.
29  */
30 
31 #ifndef __JUNO_DEF_H__
32 #define __JUNO_DEF_H__
33 
34 /* Special value used to verify platform parameters from BL2 to BL3-1 */
35 #define JUNO_BL31_PLAT_PARAM_VAL	0x0f1e2d3c4b5a6978ULL
36 
37 /*******************************************************************************
38  * Juno memory map related constants
39  ******************************************************************************/
40 #define FLASH_BASE		0x08000000
41 #define FLASH_SIZE		0x04000000
42 
43 /* Bypass offset from start of NOR flash */
44 #define BL1_ROM_BYPASS_OFFSET	0x03EC0000
45 
46 #ifndef TZROM_BASE
47 /* Use the bypass address */
48 #define TZROM_BASE		FLASH_BASE + BL1_ROM_BYPASS_OFFSET
49 #endif
50 /* Actual ROM size on Juno is 64 KB, but TBB requires at least 80 KB in debug
51  * mode. We can test TBB on Juno bypassing the ROM and using 128 KB of flash */
52 #if TRUSTED_BOARD_BOOT
53 #define TZROM_SIZE		0x00020000
54 #else
55 #define TZROM_SIZE		0x00010000
56 #endif
57 
58 #define TZRAM_BASE		0x04001000
59 #define TZRAM_SIZE		0x0003F000
60 
61 #define PLAT_TRUSTED_SRAM_ID	0
62 #define PLAT_DRAM_ID		1
63 
64 #define MHU_SECURE_BASE		0x04000000
65 #define MHU_SECURE_SIZE		0x00001000
66 
67 #define MHU_PAYLOAD_CACHED	0
68 
69 #define TRUSTED_MAILBOXES_BASE	MHU_SECURE_BASE
70 #define TRUSTED_MAILBOX_SHIFT	4
71 
72 #define EMMC_BASE		0x0c000000
73 #define EMMC_SIZE		0x04000000
74 
75 #define PSRAM_BASE		0x14000000
76 #define PSRAM_SIZE		0x02000000
77 
78 #define IOFPGA_BASE		0x1c000000
79 #define IOFPGA_SIZE		0x03000000
80 
81 #define NSROM_BASE		0x1f000000
82 #define NSROM_SIZE		0x00001000
83 
84 /* Following covers Columbus Peripherals excluding NSROM and NSRAM  */
85 #define DEVICE0_BASE		0x20000000
86 #define DEVICE0_SIZE		0x0e000000
87 #define MHU_BASE		0x2b1f0000
88 
89 #define NSRAM_BASE		0x2e000000
90 #define NSRAM_SIZE		0x00008000
91 
92 /* Following covers Juno Peripherals and PCIe expansion area */
93 #define DEVICE1_BASE		0x40000000
94 #define DEVICE1_SIZE		0x40000000
95 #define PCIE_CONTROL_BASE	0x7ff20000
96 
97 #define DRAM_BASE		0x80000000
98 #define DRAM_SIZE		0x80000000
99 
100 /*
101  * DRAM at 0x8000_0000 is divided in two regions:
102  *   - Secure DRAM (default is the top 16MB except for the last 2MB, which are
103  *     used by the SCP for DDR retraining)
104  *   - Non-Secure DRAM (remaining DRAM starting at DRAM_BASE)
105  */
106 
107 #define DRAM_SCP_SIZE		0x00200000
108 #define DRAM_SCP_BASE		(DRAM_BASE + DRAM_SIZE - DRAM_SCP_SIZE)
109 
110 #define DRAM_SEC_SIZE		0x00E00000
111 #define DRAM_SEC_BASE		(DRAM_SCP_BASE - DRAM_SEC_SIZE)
112 
113 #define DRAM_NS_BASE		DRAM_BASE
114 #define DRAM_NS_SIZE		(DRAM_SIZE - DRAM_SCP_SIZE - DRAM_SEC_SIZE)
115 
116 /* Second region of DRAM */
117 #define DRAM2_BASE		0x880000000
118 #define DRAM2_SIZE		0x180000000
119 
120 /* Memory mapped Generic timer interfaces  */
121 #define SYS_CNTCTL_BASE		0x2a430000
122 #define SYS_CNTREAD_BASE	0x2a800000
123 #define SYS_TIMCTL_BASE		0x2a810000
124 
125 /* V2M motherboard system registers & offsets */
126 #define VE_SYSREGS_BASE		0x1c010000
127 #define V2M_SYS_LED		0x8
128 
129 /*
130  * V2M sysled bit definitions. The values written to this
131  * register are defined in arch.h & runtime_svc.h. Only
132  * used by the primary cpu to diagnose any cold boot issues.
133  *
134  * SYS_LED[0]   - Security state (S=0/NS=1)
135  * SYS_LED[2:1] - Exception Level (EL3-EL0)
136  * SYS_LED[7:3] - Exception Class (Sync/Async & origin)
137  *
138  */
139 #define SYS_LED_SS_SHIFT		0x0
140 #define SYS_LED_EL_SHIFT		0x1
141 #define SYS_LED_EC_SHIFT		0x3
142 
143 /*******************************************************************************
144  * GIC-400 & interrupt handling related constants
145  ******************************************************************************/
146 #define GICD_BASE			0x2c010000
147 #define GICC_BASE			0x2c02f000
148 #define GICH_BASE			0x2c04f000
149 #define GICV_BASE			0x2c06f000
150 
151 #define IRQ_MHU			69
152 #define IRQ_GPU_SMMU_0		71
153 #define IRQ_GPU_SMMU_1		73
154 #define IRQ_ETR_SMMU		75
155 #define IRQ_TZC400		80
156 #define IRQ_TZ_WDOG		86
157 
158 #define IRQ_SEC_PHY_TIMER		29
159 #define IRQ_SEC_SGI_0			8
160 #define IRQ_SEC_SGI_1			9
161 #define IRQ_SEC_SGI_2			10
162 #define IRQ_SEC_SGI_3			11
163 #define IRQ_SEC_SGI_4			12
164 #define IRQ_SEC_SGI_5			13
165 #define IRQ_SEC_SGI_6			14
166 #define IRQ_SEC_SGI_7			15
167 
168 /*******************************************************************************
169  * PL011 related constants
170  ******************************************************************************/
171 /* FPGA UART0 */
172 #define PL011_UART0_BASE		0x1c090000
173 /* FPGA UART1 */
174 #define PL011_UART1_BASE		0x1c0a0000
175 /* SoC UART0 */
176 #define PL011_UART2_BASE		0x7ff80000
177 /* SoC UART1 */
178 #define PL011_UART3_BASE		0x7ff70000
179 
180 #define PL011_BAUDRATE			115200
181 
182 #define PL011_UART0_CLK_IN_HZ		24000000
183 #define PL011_UART1_CLK_IN_HZ		24000000
184 #define PL011_UART2_CLK_IN_HZ		7273800
185 #define PL011_UART3_CLK_IN_HZ		7273800
186 
187 /*******************************************************************************
188  * NIC-400 related constants
189  ******************************************************************************/
190 
191 /* CSS NIC-400 Global Programmers View (GPV) */
192 #define CSS_NIC400_BASE		0x2a000000
193 
194 /* The slave_bootsecure controls access to GPU, DMC and CS. */
195 #define CSS_NIC400_SLAVE_BOOTSECURE		8
196 
197 /* SoC NIC-400 Global Programmers View (GPV) */
198 #define SOC_NIC400_BASE		0x7fd00000
199 
200 #define SOC_NIC400_USB_EHCI	0
201 #define SOC_NIC400_TLX_MASTER	1
202 #define SOC_NIC400_USB_OHCI	2
203 #define SOC_NIC400_PL354_SMC	3
204 /*
205  * The apb4_bridge controls access to:
206  *   - the PCIe configuration registers
207  *   - the MMU units for USB, HDLCD and DMA
208  */
209 #define SOC_NIC400_APB4_BRIDGE	4
210 /*
211  * The bootsec_bridge controls access to a bunch of peripherals, e.g. the UARTs.
212  */
213 #define SOC_NIC400_BOOTSEC_BRIDGE		5
214 #define SOC_NIC400_BOOTSEC_BRIDGE_UART1         (1 << 12)
215 
216 /*******************************************************************************
217  * TZC-400 related constants
218  ******************************************************************************/
219 #define TZC400_BASE		0x2a4a0000
220 
221 #define TZC400_NSAID_CCI400	0  /* Note: Same as default NSAID!! */
222 #define TZC400_NSAID_PCIE	1
223 #define TZC400_NSAID_HDLCD0	2
224 #define TZC400_NSAID_HDLCD1	3
225 #define TZC400_NSAID_USB	4
226 #define TZC400_NSAID_DMA330	5
227 #define TZC400_NSAID_THINLINKS	6
228 #define TZC400_NSAID_AP		9
229 #define TZC400_NSAID_GPU	10
230 #define TZC400_NSAID_SCP	11
231 #define TZC400_NSAID_CORESIGHT	12
232 
233 /*******************************************************************************
234  * CCI-400 related constants
235  ******************************************************************************/
236 #define CCI400_BASE			0x2c090000
237 #define CCI400_SL_IFACE3_CLUSTER_IX	1
238 #define CCI400_SL_IFACE4_CLUSTER_IX	0
239 
240 /*******************************************************************************
241  * SCP <=> AP boot configuration
242  ******************************************************************************/
243 #define SCP_BOOT_CFG_ADDR	0x04000080
244 #define PRIMARY_CPU_SHIFT	8
245 #define PRIMARY_CPU_MASK	0xf
246 
247 #endif /* __JUNO_DEF_H__ */
248