v2m_def.h 4.17 KB
Newer Older
1
/*
2
 * Copyright (c) 2015-2018, ARM Limited and Contributors. All rights reserved.
3
 *
dp-arm's avatar
dp-arm committed
4
 * SPDX-License-Identifier: BSD-3-Clause
5
 */
6
7
#ifndef V2M_DEF_H
#define V2M_DEF_H
8

9
#include <xlat_tables_compat.h>
10
11

/* V2M motherboard system registers & offsets */
12
13
14
15
16
17
18
19
20
21
22
23
24
#define V2M_SYSREGS_BASE		UL(0x1c010000)
#define V2M_SYS_ID			UL(0x0)
#define V2M_SYS_SWITCH			UL(0x4)
#define V2M_SYS_LED			UL(0x8)
#define V2M_SYS_NVFLAGS			UL(0x38)
#define V2M_SYS_NVFLAGSSET		UL(0x38)
#define V2M_SYS_NVFLAGSCLR		UL(0x3c)
#define V2M_SYS_CFGDATA			UL(0xa0)
#define V2M_SYS_CFGCTRL			UL(0xa4)
#define V2M_SYS_CFGSTATUS		UL(0xa8)

#define V2M_CFGCTRL_START		BIT_32(31)
#define V2M_CFGCTRL_RW			BIT_32(30)
25
#define V2M_CFGCTRL_FUNC_SHIFT		20
26
27
28
29
30
31
32
#define V2M_CFGCTRL_FUNC(fn)		((fn) << V2M_CFGCTRL_FUNC_SHIFT)
#define V2M_FUNC_CLK_GEN		U(0x01)
#define V2M_FUNC_TEMP			U(0x04)
#define V2M_FUNC_DB_RESET		U(0x05)
#define V2M_FUNC_SCC_CFG		U(0x06)
#define V2M_FUNC_SHUTDOWN		U(0x08)
#define V2M_FUNC_REBOOT			U(0x09)
33

34
35
36
/* NVFLAGS in the V2M motherboard which is preserved after a watchdog reset */
 #define V2M_SYS_NVFLAGS_ADDR		(V2M_SYSREGS_BASE + V2M_SYS_NVFLAGS)

37
38
39
40
41
42
43
44
45
46
47
48
49
50
/*
 * V2M sysled bit definitions. The values written to this
 * register are defined in arch.h & runtime_svc.h. Only
 * used by the primary cpu to diagnose any cold boot issues.
 *
 * SYS_LED[0]   - Security state (S=0/NS=1)
 * SYS_LED[2:1] - Exception Level (EL3-EL0)
 * SYS_LED[7:3] - Exception Class (Sync/Async & origin)
 *
 */
#define V2M_SYS_LED_SS_SHIFT		0x0
#define V2M_SYS_LED_EL_SHIFT		0x1
#define V2M_SYS_LED_EC_SHIFT		0x3

51
52
53
#define V2M_SYS_LED_SS_MASK		U(0x1)
#define V2M_SYS_LED_EL_MASK		U(0x3)
#define V2M_SYS_LED_EC_MASK		U(0x1f)
54
55
56
57
58
59
60
61

/* V2M sysid register bits */
#define V2M_SYS_ID_REV_SHIFT		28
#define V2M_SYS_ID_HBI_SHIFT		16
#define V2M_SYS_ID_BLD_SHIFT		12
#define V2M_SYS_ID_ARCH_SHIFT		8
#define V2M_SYS_ID_FPGA_SHIFT		0

62
63
64
65
66
#define V2M_SYS_ID_REV_MASK		U(0xf)
#define V2M_SYS_ID_HBI_MASK		U(0xfff)
#define V2M_SYS_ID_BLD_MASK		U(0xf)
#define V2M_SYS_ID_ARCH_MASK		U(0xf)
#define V2M_SYS_ID_FPGA_MASK		U(0xff)
67
68
69
70
71

#define V2M_SYS_ID_BLD_LENGTH		4


/* NOR Flash */
72
73
74
#define V2M_FLASH0_BASE			UL(0x08000000)
#define V2M_FLASH0_SIZE			UL(0x04000000)
#define V2M_FLASH_BLOCK_SIZE		UL(0x00040000)	/* 256 KB */
75

76
77
#define V2M_IOFPGA_BASE			UL(0x1c000000)
#define V2M_IOFPGA_SIZE			UL(0x03000000)
78
79

/* PL011 UART related constants */
80
81
82
83
#define V2M_IOFPGA_UART0_BASE		UL(0x1c090000)
#define V2M_IOFPGA_UART1_BASE		UL(0x1c0a0000)
#define V2M_IOFPGA_UART2_BASE		UL(0x1c0b0000)
#define V2M_IOFPGA_UART3_BASE		UL(0x1c0c0000)
84
85
86
87
88
89

#define V2M_IOFPGA_UART0_CLK_IN_HZ	24000000
#define V2M_IOFPGA_UART1_CLK_IN_HZ	24000000
#define V2M_IOFPGA_UART2_CLK_IN_HZ	24000000
#define V2M_IOFPGA_UART3_CLK_IN_HZ	24000000

Ryan Harkin's avatar
Ryan Harkin committed
90
/* SP804 timer related constants */
91
92
#define V2M_SP804_TIMER0_BASE		UL(0x1C110000)
#define V2M_SP804_TIMER1_BASE		UL(0x1C120000)
93

Juan Castillo's avatar
Juan Castillo committed
94
/* SP810 controller */
95
96
97
98
99
#define V2M_SP810_BASE			UL(0x1c020000)
#define V2M_SP810_CTRL_TIM0_SEL		BIT_32(15)
#define V2M_SP810_CTRL_TIM1_SEL		BIT_32(17)
#define V2M_SP810_CTRL_TIM2_SEL		BIT_32(19)
#define V2M_SP810_CTRL_TIM3_SEL		BIT_32(21)
Juan Castillo's avatar
Juan Castillo committed
100

101
102
103
104
105
106
107
108
109
110
111
112
113
/*
 * The flash can be mapped either as read-only or read-write.
 *
 * If it is read-write then it should also be mapped as device memory because
 * NOR flash programming involves sending a fixed, ordered sequence of commands.
 *
 * If it is read-only then it should also be mapped as:
 * - Normal memory, because reading from NOR flash is transparent, it is like
 *   reading from RAM.
 * - Non-executable by default. If some parts of the flash need to be executable
 *   then platform code is responsible for re-mapping the appropriate portion
 *   of it as executable.
 */
114
115
116
117
118
#define V2M_MAP_FLASH0_RW		MAP_REGION_FLAT(V2M_FLASH0_BASE,\
						V2M_FLASH0_SIZE,	\
						MT_DEVICE | MT_RW | MT_SECURE)

#define V2M_MAP_FLASH0_RO		MAP_REGION_FLAT(V2M_FLASH0_BASE,\
119
						V2M_FLASH0_SIZE,	\
120
						MT_RO_DATA | MT_SECURE)
121
122
123
124
125

#define V2M_MAP_IOFPGA			MAP_REGION_FLAT(V2M_IOFPGA_BASE,\
						V2M_IOFPGA_SIZE,		\
						MT_DEVICE | MT_RW | MT_SECURE)

126
127
128
129
130
/* Region equivalent to V2M_MAP_IOFPGA suitable for mapping at EL0 */
#define V2M_MAP_IOFPGA_EL0		MAP_REGION_FLAT(		\
						V2M_IOFPGA_BASE,	\
						V2M_IOFPGA_SIZE,	\
						MT_DEVICE | MT_RW | MT_SECURE | MT_USER)
131
132


133
#endif /* V2M_DEF_H */