xref: /arm-trusted-firmware/include/plat/arm/board/common/v2m_def.h (revision 91f16700b400a8c0651d24a598fc48ee2997a0d7)
1*91f16700Schasinglulu /*
2*91f16700Schasinglulu  * Copyright (c) 2015-2021, ARM Limited and Contributors. All rights reserved.
3*91f16700Schasinglulu  *
4*91f16700Schasinglulu  * SPDX-License-Identifier: BSD-3-Clause
5*91f16700Schasinglulu  */
6*91f16700Schasinglulu #ifndef V2M_DEF_H
7*91f16700Schasinglulu #define V2M_DEF_H
8*91f16700Schasinglulu 
9*91f16700Schasinglulu #include <lib/utils_def.h>
10*91f16700Schasinglulu 
11*91f16700Schasinglulu /* Base address of all V2M */
12*91f16700Schasinglulu #ifdef PLAT_V2M_OFFSET
13*91f16700Schasinglulu #define V2M_OFFSET			PLAT_V2M_OFFSET
14*91f16700Schasinglulu #else
15*91f16700Schasinglulu #define V2M_OFFSET			UL(0)
16*91f16700Schasinglulu #endif
17*91f16700Schasinglulu 
18*91f16700Schasinglulu /* V2M motherboard system registers & offsets */
19*91f16700Schasinglulu #define V2M_SYSREGS_BASE		UL(0x1c010000)
20*91f16700Schasinglulu #define V2M_SYS_ID			UL(0x0)
21*91f16700Schasinglulu #define V2M_SYS_SWITCH			UL(0x4)
22*91f16700Schasinglulu #define V2M_SYS_LED			UL(0x8)
23*91f16700Schasinglulu #define V2M_SYS_NVFLAGS			UL(0x38)
24*91f16700Schasinglulu #define V2M_SYS_NVFLAGSSET		UL(0x38)
25*91f16700Schasinglulu #define V2M_SYS_NVFLAGSCLR		UL(0x3c)
26*91f16700Schasinglulu #define V2M_SYS_CFGDATA			UL(0xa0)
27*91f16700Schasinglulu #define V2M_SYS_CFGCTRL			UL(0xa4)
28*91f16700Schasinglulu #define V2M_SYS_CFGSTATUS		UL(0xa8)
29*91f16700Schasinglulu 
30*91f16700Schasinglulu #define V2M_CFGCTRL_START		BIT_32(31)
31*91f16700Schasinglulu #define V2M_CFGCTRL_RW			BIT_32(30)
32*91f16700Schasinglulu #define V2M_CFGCTRL_FUNC_SHIFT		20
33*91f16700Schasinglulu #define V2M_CFGCTRL_FUNC(fn)		((fn) << V2M_CFGCTRL_FUNC_SHIFT)
34*91f16700Schasinglulu #define V2M_FUNC_CLK_GEN		U(0x01)
35*91f16700Schasinglulu #define V2M_FUNC_TEMP			U(0x04)
36*91f16700Schasinglulu #define V2M_FUNC_DB_RESET		U(0x05)
37*91f16700Schasinglulu #define V2M_FUNC_SCC_CFG		U(0x06)
38*91f16700Schasinglulu #define V2M_FUNC_SHUTDOWN		U(0x08)
39*91f16700Schasinglulu #define V2M_FUNC_REBOOT			U(0x09)
40*91f16700Schasinglulu 
41*91f16700Schasinglulu /* NVFLAGS in the V2M motherboard which is preserved after a watchdog reset */
42*91f16700Schasinglulu  #define V2M_SYS_NVFLAGS_ADDR		(V2M_SYSREGS_BASE + V2M_SYS_NVFLAGS)
43*91f16700Schasinglulu 
44*91f16700Schasinglulu /*
45*91f16700Schasinglulu  * V2M sysled bit definitions. The values written to this
46*91f16700Schasinglulu  * register are defined in arch.h & runtime_svc.h. Only
47*91f16700Schasinglulu  * used by the primary cpu to diagnose any cold boot issues.
48*91f16700Schasinglulu  *
49*91f16700Schasinglulu  * SYS_LED[0]   - Security state (S=0/NS=1)
50*91f16700Schasinglulu  * SYS_LED[2:1] - Exception Level (EL3-EL0)
51*91f16700Schasinglulu  * SYS_LED[7:3] - Exception Class (Sync/Async & origin)
52*91f16700Schasinglulu  *
53*91f16700Schasinglulu  */
54*91f16700Schasinglulu #define V2M_SYS_LED_SS_SHIFT		0x0
55*91f16700Schasinglulu #define V2M_SYS_LED_EL_SHIFT		0x1
56*91f16700Schasinglulu #define V2M_SYS_LED_EC_SHIFT		0x3
57*91f16700Schasinglulu 
58*91f16700Schasinglulu #define V2M_SYS_LED_SS_MASK		U(0x1)
59*91f16700Schasinglulu #define V2M_SYS_LED_EL_MASK		U(0x3)
60*91f16700Schasinglulu #define V2M_SYS_LED_EC_MASK		U(0x1f)
61*91f16700Schasinglulu 
62*91f16700Schasinglulu /* V2M sysid register bits */
63*91f16700Schasinglulu #define V2M_SYS_ID_REV_SHIFT		28
64*91f16700Schasinglulu #define V2M_SYS_ID_HBI_SHIFT		16
65*91f16700Schasinglulu #define V2M_SYS_ID_BLD_SHIFT		12
66*91f16700Schasinglulu #define V2M_SYS_ID_ARCH_SHIFT		8
67*91f16700Schasinglulu #define V2M_SYS_ID_FPGA_SHIFT		0
68*91f16700Schasinglulu 
69*91f16700Schasinglulu #define V2M_SYS_ID_REV_MASK		U(0xf)
70*91f16700Schasinglulu #define V2M_SYS_ID_HBI_MASK		U(0xfff)
71*91f16700Schasinglulu #define V2M_SYS_ID_BLD_MASK		U(0xf)
72*91f16700Schasinglulu #define V2M_SYS_ID_ARCH_MASK		U(0xf)
73*91f16700Schasinglulu #define V2M_SYS_ID_FPGA_MASK		U(0xff)
74*91f16700Schasinglulu 
75*91f16700Schasinglulu #define V2M_SYS_ID_BLD_LENGTH		4
76*91f16700Schasinglulu 
77*91f16700Schasinglulu 
78*91f16700Schasinglulu /* NOR Flash */
79*91f16700Schasinglulu #define V2M_FLASH0_BASE			(V2M_OFFSET + UL(0x08000000))
80*91f16700Schasinglulu #define V2M_FLASH0_SIZE			UL(0x04000000)
81*91f16700Schasinglulu #define V2M_FLASH_BLOCK_SIZE		UL(0x00040000) /* 256 KB */
82*91f16700Schasinglulu 
83*91f16700Schasinglulu #define V2M_IOFPGA_BASE			(V2M_OFFSET + UL(0x1c000000))
84*91f16700Schasinglulu #define V2M_IOFPGA_SIZE			UL(0x03000000)
85*91f16700Schasinglulu 
86*91f16700Schasinglulu /* PL011 UART related constants */
87*91f16700Schasinglulu #define V2M_IOFPGA_UART0_BASE		(V2M_OFFSET + UL(0x1c090000))
88*91f16700Schasinglulu #define V2M_IOFPGA_UART1_BASE		(V2M_OFFSET + UL(0x1c0a0000))
89*91f16700Schasinglulu #define V2M_IOFPGA_UART2_BASE		(V2M_OFFSET + UL(0x1c0b0000))
90*91f16700Schasinglulu #define V2M_IOFPGA_UART3_BASE		(V2M_OFFSET + UL(0x1c0c0000))
91*91f16700Schasinglulu 
92*91f16700Schasinglulu #define V2M_IOFPGA_UART0_CLK_IN_HZ	24000000
93*91f16700Schasinglulu #define V2M_IOFPGA_UART1_CLK_IN_HZ	24000000
94*91f16700Schasinglulu #define V2M_IOFPGA_UART2_CLK_IN_HZ	24000000
95*91f16700Schasinglulu #define V2M_IOFPGA_UART3_CLK_IN_HZ	24000000
96*91f16700Schasinglulu 
97*91f16700Schasinglulu /* SP804 timer related constants */
98*91f16700Schasinglulu #define V2M_SP804_TIMER0_BASE		(V2M_OFFSET + UL(0x1C110000))
99*91f16700Schasinglulu #define V2M_SP804_TIMER1_BASE		(V2M_OFFSET + UL(0x1C120000))
100*91f16700Schasinglulu 
101*91f16700Schasinglulu /* SP810 controller */
102*91f16700Schasinglulu #define V2M_SP810_BASE			(V2M_OFFSET + UL(0x1c020000))
103*91f16700Schasinglulu #define V2M_SP810_CTRL_TIM0_SEL		BIT_32(15)
104*91f16700Schasinglulu #define V2M_SP810_CTRL_TIM1_SEL		BIT_32(17)
105*91f16700Schasinglulu #define V2M_SP810_CTRL_TIM2_SEL		BIT_32(19)
106*91f16700Schasinglulu #define V2M_SP810_CTRL_TIM3_SEL		BIT_32(21)
107*91f16700Schasinglulu 
108*91f16700Schasinglulu /*
109*91f16700Schasinglulu  * The flash can be mapped either as read-only or read-write.
110*91f16700Schasinglulu  *
111*91f16700Schasinglulu  * If it is read-write then it should also be mapped as device memory because
112*91f16700Schasinglulu  * NOR flash programming involves sending a fixed, ordered sequence of commands.
113*91f16700Schasinglulu  *
114*91f16700Schasinglulu  * If it is read-only then it should also be mapped as:
115*91f16700Schasinglulu  * - Normal memory, because reading from NOR flash is transparent, it is like
116*91f16700Schasinglulu  *   reading from RAM.
117*91f16700Schasinglulu  * - Non-executable by default. If some parts of the flash need to be executable
118*91f16700Schasinglulu  *   then platform code is responsible for re-mapping the appropriate portion
119*91f16700Schasinglulu  *   of it as executable.
120*91f16700Schasinglulu  */
121*91f16700Schasinglulu #define V2M_MAP_FLASH0_RW		MAP_REGION_FLAT(V2M_FLASH0_BASE,\
122*91f16700Schasinglulu 						V2M_FLASH0_SIZE,	\
123*91f16700Schasinglulu 						MT_DEVICE | MT_RW | MT_SECURE)
124*91f16700Schasinglulu 
125*91f16700Schasinglulu #define V2M_MAP_FLASH0_RO		MAP_REGION_FLAT(V2M_FLASH0_BASE,\
126*91f16700Schasinglulu 						V2M_FLASH0_SIZE,	\
127*91f16700Schasinglulu 						MT_RO_DATA | MT_SECURE)
128*91f16700Schasinglulu 
129*91f16700Schasinglulu #define V2M_MAP_IOFPGA			MAP_REGION_FLAT(V2M_IOFPGA_BASE,\
130*91f16700Schasinglulu 						V2M_IOFPGA_SIZE,		\
131*91f16700Schasinglulu 						MT_DEVICE | MT_RW | MT_SECURE)
132*91f16700Schasinglulu 
133*91f16700Schasinglulu /* Region equivalent to V2M_MAP_IOFPGA suitable for mapping at EL0 */
134*91f16700Schasinglulu #define V2M_MAP_IOFPGA_EL0		MAP_REGION_FLAT(		\
135*91f16700Schasinglulu 						V2M_IOFPGA_BASE,	\
136*91f16700Schasinglulu 						V2M_IOFPGA_SIZE,	\
137*91f16700Schasinglulu 						MT_DEVICE | MT_RW | MT_SECURE | MT_USER)
138*91f16700Schasinglulu 
139*91f16700Schasinglulu 
140*91f16700Schasinglulu #endif /* V2M_DEF_H */
141