xref: /rk3399_ARM-atf/include/plat/arm/board/common/v2m_def.h (revision 5477fb37e61ed01f58d786d3b6b8933ee72c76a3)
1b4315306SDan Handley /*
25fb061e7SGary Morrison  * Copyright (c) 2015-2021, ARM Limited and Contributors. All rights reserved.
3b4315306SDan Handley  *
482cb2c1aSdp-arm  * SPDX-License-Identifier: BSD-3-Clause
5b4315306SDan Handley  */
6e02f469fSSathees Balya #ifndef V2M_DEF_H
7e02f469fSSathees Balya #define V2M_DEF_H
8b4315306SDan Handley 
9bd9344f6SAntonio Nino Diaz #include <lib/utils_def.h>
10b4315306SDan Handley 
115fb061e7SGary Morrison /* Base address of all V2M */
125fb061e7SGary Morrison #ifdef PLAT_V2M_OFFSET
135fb061e7SGary Morrison #define V2M_OFFSET			PLAT_V2M_OFFSET
145fb061e7SGary Morrison #else
155fb061e7SGary Morrison #define V2M_OFFSET			UL(0)
165fb061e7SGary Morrison #endif
175fb061e7SGary Morrison 
18b4315306SDan Handley /* V2M motherboard system registers & offsets */
19e02f469fSSathees Balya #define V2M_SYSREGS_BASE		UL(0x1c010000)
20*9fb76763Slevi.yun #define V2M_SYSREGS_SIZE		UL(0x00010000)
21e02f469fSSathees Balya #define V2M_SYS_ID			UL(0x0)
22e02f469fSSathees Balya #define V2M_SYS_SWITCH			UL(0x4)
23e02f469fSSathees Balya #define V2M_SYS_LED			UL(0x8)
24e02f469fSSathees Balya #define V2M_SYS_NVFLAGS			UL(0x38)
25e02f469fSSathees Balya #define V2M_SYS_NVFLAGSSET		UL(0x38)
26e02f469fSSathees Balya #define V2M_SYS_NVFLAGSCLR		UL(0x3c)
27e02f469fSSathees Balya #define V2M_SYS_CFGDATA			UL(0xa0)
28e02f469fSSathees Balya #define V2M_SYS_CFGCTRL			UL(0xa4)
29e02f469fSSathees Balya #define V2M_SYS_CFGSTATUS		UL(0xa8)
30b4315306SDan Handley 
31e02f469fSSathees Balya #define V2M_CFGCTRL_START		BIT_32(31)
32e02f469fSSathees Balya #define V2M_CFGCTRL_RW			BIT_32(30)
33b4315306SDan Handley #define V2M_CFGCTRL_FUNC_SHIFT		20
34e02f469fSSathees Balya #define V2M_CFGCTRL_FUNC(fn)		((fn) << V2M_CFGCTRL_FUNC_SHIFT)
35e02f469fSSathees Balya #define V2M_FUNC_CLK_GEN		U(0x01)
36e02f469fSSathees Balya #define V2M_FUNC_TEMP			U(0x04)
37e02f469fSSathees Balya #define V2M_FUNC_DB_RESET		U(0x05)
38e02f469fSSathees Balya #define V2M_FUNC_SCC_CFG		U(0x06)
39e02f469fSSathees Balya #define V2M_FUNC_SHUTDOWN		U(0x08)
40e02f469fSSathees Balya #define V2M_FUNC_REBOOT			U(0x09)
41b4315306SDan Handley 
424da6f6cdSSathees Balya /* NVFLAGS in the V2M motherboard which is preserved after a watchdog reset */
434da6f6cdSSathees Balya  #define V2M_SYS_NVFLAGS_ADDR		(V2M_SYSREGS_BASE + V2M_SYS_NVFLAGS)
444da6f6cdSSathees Balya 
45b4315306SDan Handley /*
46b4315306SDan Handley  * V2M sysled bit definitions. The values written to this
47b4315306SDan Handley  * register are defined in arch.h & runtime_svc.h. Only
48b4315306SDan Handley  * used by the primary cpu to diagnose any cold boot issues.
49b4315306SDan Handley  *
50b4315306SDan Handley  * SYS_LED[0]   - Security state (S=0/NS=1)
51b4315306SDan Handley  * SYS_LED[2:1] - Exception Level (EL3-EL0)
52b4315306SDan Handley  * SYS_LED[7:3] - Exception Class (Sync/Async & origin)
53b4315306SDan Handley  *
54b4315306SDan Handley  */
55b4315306SDan Handley #define V2M_SYS_LED_SS_SHIFT		0x0
56b4315306SDan Handley #define V2M_SYS_LED_EL_SHIFT		0x1
57b4315306SDan Handley #define V2M_SYS_LED_EC_SHIFT		0x3
58b4315306SDan Handley 
59f21c6321SAntonio Nino Diaz #define V2M_SYS_LED_SS_MASK		U(0x1)
60f21c6321SAntonio Nino Diaz #define V2M_SYS_LED_EL_MASK		U(0x3)
61f21c6321SAntonio Nino Diaz #define V2M_SYS_LED_EC_MASK		U(0x1f)
62b4315306SDan Handley 
63b4315306SDan Handley /* V2M sysid register bits */
64b4315306SDan Handley #define V2M_SYS_ID_REV_SHIFT		28
65b4315306SDan Handley #define V2M_SYS_ID_HBI_SHIFT		16
66b4315306SDan Handley #define V2M_SYS_ID_BLD_SHIFT		12
67b4315306SDan Handley #define V2M_SYS_ID_ARCH_SHIFT		8
68b4315306SDan Handley #define V2M_SYS_ID_FPGA_SHIFT		0
69b4315306SDan Handley 
70f21c6321SAntonio Nino Diaz #define V2M_SYS_ID_REV_MASK		U(0xf)
71f21c6321SAntonio Nino Diaz #define V2M_SYS_ID_HBI_MASK		U(0xfff)
72f21c6321SAntonio Nino Diaz #define V2M_SYS_ID_BLD_MASK		U(0xf)
73f21c6321SAntonio Nino Diaz #define V2M_SYS_ID_ARCH_MASK		U(0xf)
74f21c6321SAntonio Nino Diaz #define V2M_SYS_ID_FPGA_MASK		U(0xff)
75b4315306SDan Handley 
76b4315306SDan Handley #define V2M_SYS_ID_BLD_LENGTH		4
77b4315306SDan Handley 
78b4315306SDan Handley 
79b4315306SDan Handley /* NOR Flash */
805fb061e7SGary Morrison #define V2M_FLASH0_BASE			(V2M_OFFSET + UL(0x08000000))
81f21c6321SAntonio Nino Diaz #define V2M_FLASH0_SIZE			UL(0x04000000)
82*9fb76763Slevi.yun #define V2M_FLASH1_BASE			(V2M_OFFSET + UL(0x0c000000))
83*9fb76763Slevi.yun #define V2M_FLASH1_SIZE			UL(0x04000000)
84f21c6321SAntonio Nino Diaz #define V2M_FLASH_BLOCK_SIZE		UL(0x00040000) /* 256 KB */
85b4315306SDan Handley 
865fb061e7SGary Morrison #define V2M_IOFPGA_BASE			(V2M_OFFSET + UL(0x1c000000))
87f21c6321SAntonio Nino Diaz #define V2M_IOFPGA_SIZE			UL(0x03000000)
88b4315306SDan Handley 
89b4315306SDan Handley /* PL011 UART related constants */
905fb061e7SGary Morrison #define V2M_IOFPGA_UART0_BASE		(V2M_OFFSET + UL(0x1c090000))
915fb061e7SGary Morrison #define V2M_IOFPGA_UART1_BASE		(V2M_OFFSET + UL(0x1c0a0000))
925fb061e7SGary Morrison #define V2M_IOFPGA_UART2_BASE		(V2M_OFFSET + UL(0x1c0b0000))
935fb061e7SGary Morrison #define V2M_IOFPGA_UART3_BASE		(V2M_OFFSET + UL(0x1c0c0000))
94b4315306SDan Handley 
95b4315306SDan Handley #define V2M_IOFPGA_UART0_CLK_IN_HZ	24000000
96b4315306SDan Handley #define V2M_IOFPGA_UART1_CLK_IN_HZ	24000000
97b4315306SDan Handley #define V2M_IOFPGA_UART2_CLK_IN_HZ	24000000
98b4315306SDan Handley #define V2M_IOFPGA_UART3_CLK_IN_HZ	24000000
99b4315306SDan Handley 
100b49b3221SRyan Harkin /* SP804 timer related constants */
1015fb061e7SGary Morrison #define V2M_SP804_TIMER0_BASE		(V2M_OFFSET + UL(0x1C110000))
1025fb061e7SGary Morrison #define V2M_SP804_TIMER1_BASE		(V2M_OFFSET + UL(0x1C120000))
103b4315306SDan Handley 
104540a5ba8SJuan Castillo /* SP810 controller */
1055fb061e7SGary Morrison #define V2M_SP810_BASE			(V2M_OFFSET + UL(0x1c020000))
106f21c6321SAntonio Nino Diaz #define V2M_SP810_CTRL_TIM0_SEL		BIT_32(15)
107f21c6321SAntonio Nino Diaz #define V2M_SP810_CTRL_TIM1_SEL		BIT_32(17)
108f21c6321SAntonio Nino Diaz #define V2M_SP810_CTRL_TIM2_SEL		BIT_32(19)
109f21c6321SAntonio Nino Diaz #define V2M_SP810_CTRL_TIM3_SEL		BIT_32(21)
110540a5ba8SJuan Castillo 
11191fad655SSandrine Bailleux /*
11291fad655SSandrine Bailleux  * The flash can be mapped either as read-only or read-write.
11391fad655SSandrine Bailleux  *
11491fad655SSandrine Bailleux  * If it is read-write then it should also be mapped as device memory because
11591fad655SSandrine Bailleux  * NOR flash programming involves sending a fixed, ordered sequence of commands.
11691fad655SSandrine Bailleux  *
11791fad655SSandrine Bailleux  * If it is read-only then it should also be mapped as:
11891fad655SSandrine Bailleux  * - Normal memory, because reading from NOR flash is transparent, it is like
11991fad655SSandrine Bailleux  *   reading from RAM.
12091fad655SSandrine Bailleux  * - Non-executable by default. If some parts of the flash need to be executable
12191fad655SSandrine Bailleux  *   then platform code is responsible for re-mapping the appropriate portion
12291fad655SSandrine Bailleux  *   of it as executable.
12391fad655SSandrine Bailleux  */
1247b4c1405SJuan Castillo #define V2M_MAP_FLASH0_RW		MAP_REGION_FLAT(V2M_FLASH0_BASE,\
1257b4c1405SJuan Castillo 						V2M_FLASH0_SIZE,	\
1267b4c1405SJuan Castillo 						MT_DEVICE | MT_RW | MT_SECURE)
1277b4c1405SJuan Castillo 
1287b4c1405SJuan Castillo #define V2M_MAP_FLASH0_RO		MAP_REGION_FLAT(V2M_FLASH0_BASE,\
129b4315306SDan Handley 						V2M_FLASH0_SIZE,	\
13091fad655SSandrine Bailleux 						MT_RO_DATA | MT_SECURE)
131b4315306SDan Handley 
132*9fb76763Slevi.yun #define V2M_MAP_FLASH1_RW		MAP_REGION_FLAT(V2M_FLASH1_BASE,\
133*9fb76763Slevi.yun 						V2M_FLASH1_SIZE,	\
134*9fb76763Slevi.yun 						MT_DEVICE | MT_RW | MT_SECURE)
135*9fb76763Slevi.yun 
136*9fb76763Slevi.yun #define V2M_MAP_FLASH1_RO		MAP_REGION_FLAT(V2M_FLASH1_BASE,\
137*9fb76763Slevi.yun 						V2M_FLASH1_SIZE,	\
138*9fb76763Slevi.yun 						MT_RO_DATA | MT_SECURE)
139*9fb76763Slevi.yun 
140b4315306SDan Handley #define V2M_MAP_IOFPGA			MAP_REGION_FLAT(V2M_IOFPGA_BASE,\
141b4315306SDan Handley 						V2M_IOFPGA_SIZE,		\
142b4315306SDan Handley 						MT_DEVICE | MT_RW | MT_SECURE)
143b4315306SDan Handley 
144e29efeb1SAntonio Nino Diaz /* Region equivalent to V2M_MAP_IOFPGA suitable for mapping at EL0 */
145e29efeb1SAntonio Nino Diaz #define V2M_MAP_IOFPGA_EL0		MAP_REGION_FLAT(		\
146e29efeb1SAntonio Nino Diaz 						V2M_IOFPGA_BASE,	\
147e29efeb1SAntonio Nino Diaz 						V2M_IOFPGA_SIZE,	\
148e29efeb1SAntonio Nino Diaz 						MT_DEVICE | MT_RW | MT_SECURE | MT_USER)
149b4315306SDan Handley 
150*9fb76763Slevi.yun #define V2M_MAP_SECURE_SYSTEMREG_EL0		MAP_REGION_FLAT(	\
151*9fb76763Slevi.yun 						V2M_SYSREGS_BASE,															\
152*9fb76763Slevi.yun 						V2M_SYSREGS_SIZE,															\
153*9fb76763Slevi.yun 						MT_DEVICE | MT_RW | MT_SECURE | MT_USER)
154*9fb76763Slevi.yun 
155*9fb76763Slevi.yun #define V2M_MAP_FLASH0_RW_EL0		MAP_REGION_FLAT(	\
156*9fb76763Slevi.yun 						V2M_FLASH0_BASE,											\
157*9fb76763Slevi.yun 						V2M_FLASH0_SIZE,											\
158*9fb76763Slevi.yun 						MT_DEVICE | MT_RW | MT_SECURE | MT_USER)
159*9fb76763Slevi.yun 
160*9fb76763Slevi.yun #define V2M_MAP_FLASH1_RW_EL0		MAP_REGION_FLAT(	\
161*9fb76763Slevi.yun 						V2M_FLASH1_BASE,											\
162*9fb76763Slevi.yun 						V2M_FLASH1_SIZE,											\
163*9fb76763Slevi.yun 						MT_DEVICE | MT_RW | MT_SECURE | MT_USER)
164b4315306SDan Handley 
165e02f469fSSathees Balya #endif /* V2M_DEF_H */
166