aboutsummaryrefslogtreecommitdiff
path: root/include/drivers/arm/tzc380.h
blob: 03b9b054e75005ce5df47ca98e76f97c30310478 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
/*
 * Copyright (c) 2018, ARM Limited and Contributors. All rights reserved.
 *
 * SPDX-License-Identifier: BSD-3-Clause
 */

#ifndef TZC380_H
#define TZC380_H

#include <drivers/arm/tzc_common.h>
#include <lib/utils_def.h>

#define TZC380_CONFIGURATION_OFF	U(0x000)
#define ACTION_OFF			U(0x004)
#define LOCKDOWN_RANGE_OFF		U(0x008)
#define LOCKDOWN_SELECT_OFF		U(0x00C)
#define INT_STATUS			U(0x010)
#define INT_CLEAR			U(0x014)

#define FAIL_ADDRESS_LOW_OFF		U(0x020)
#define FAIL_ADDRESS_HIGH_OFF		U(0x024)
#define FAIL_CONTROL_OFF		U(0x028)
#define FAIL_ID				U(0x02c)

#define SPECULATION_CTRL_OFF		U(0x030)
#define SECURITY_INV_EN_OFF		U(0x034)

#define REGION_SETUP_LOW_OFF(n)		U(0x100 + (n) * 0x10)
#define REGION_SETUP_HIGH_OFF(n)	U(0x104 + (n) * 0x10)
#define REGION_ATTRIBUTES_OFF(n)	U(0x108 + (n) * 0x10)

#define BUILD_CONFIG_AW_SHIFT		8
#define BUILD_CONFIG_AW_MASK		U(0x3f)
#define BUILD_CONFIG_NR_SHIFT		0
#define BUILD_CONFIG_NR_MASK		U(0xf)

#define ACTION_RV_SHIFT			0
#define ACTION_RV_MASK			U(0x3)
#define ACTION_RV_LOWOK			U(0x0)
#define ACTION_RV_LOWERR		U(0x1)
#define ACTION_RV_HIGHOK		U(0x2)
#define ACTION_RV_HIGHERR		U(0x3)

/* Speculation is enabled by default. */
#define SPECULATION_CTRL_WRITE_DISABLE	BIT_32(1)
#define SPECULATION_CTRL_READ_DISABLE	BIT_32(0)

#define INT_STATUS_OVERRUN_SHIFT	1
#define INT_STATUS_OVERRUN_MASK		U(0x1)
#define INT_STATUS_STATUS_SHIFT		0
#define INT_STATUS_STATUS_MASK		U(0x1)

#define INT_CLEAR_CLEAR_SHIFT		0
#define INT_CLEAR_CLEAR_MASK		U(0x1)

#define TZC380_COMPONENT_ID		U(0xb105f00d)
#define TZC380_PERIPH_ID_LOW		U(0x001bb380)
#define TZC380_PERIPH_ID_HIGH		U(0x00000004)

#define TZC_SP_NS_W			BIT_32(0)
#define TZC_SP_NS_R			BIT_32(1)
#define TZC_SP_S_W			BIT_32(2)
#define TZC_SP_S_R			BIT_32(3)

#define TZC_ATTR_SP_SHIFT		28
#define TZC_ATTR_SP_ALL			((TZC_SP_S_W | TZC_SP_S_R | TZC_SP_NS_W | \
					TZC_SP_NS_R) << TZC_ATTR_SP_SHIFT)
#define TZC_ATTR_SP_S_RW		((TZC_SP_S_W | TZC_SP_S_R) << \
					 TZC_ATTR_SP_SHIFT)
#define TZC_ATTR_SP_NS_RW		((TZC_SP_NS_W | TZC_SP_NS_R) << \
					TZC_ATTR_SP_SHIFT)

#define TZC_REGION_SIZE_32K		U(0xe)
#define TZC_REGION_SIZE_64K		U(0xf)
#define TZC_REGION_SIZE_128K		U(0x10)
#define TZC_REGION_SIZE_256K		U(0x11)
#define TZC_REGION_SIZE_512K		U(0x12)
#define TZC_REGION_SIZE_1M		U(0x13)
#define TZC_REGION_SIZE_2M		U(0x14)
#define TZC_REGION_SIZE_4M		U(0x15)
#define TZC_REGION_SIZE_8M		U(0x16)
#define TZC_REGION_SIZE_16M		U(0x17)
#define TZC_REGION_SIZE_32M		U(0x18)
#define TZC_REGION_SIZE_64M		U(0x19)
#define TZC_REGION_SIZE_128M		U(0x1a)
#define TZC_REGION_SIZE_256M		U(0x1b)
#define TZC_REGION_SIZE_512M		U(0x1c)
#define TZC_REGION_SIZE_1G		U(0x1d)
#define TZC_REGION_SIZE_2G		U(0x1e)
#define TZC_REGION_SIZE_4G		U(0x1f)
#define TZC_REGION_SIZE_8G		U(0x20)
#define TZC_REGION_SIZE_16G		U(0x21)
#define TZC_REGION_SIZE_32G		U(0x22)
#define TZC_REGION_SIZE_64G		U(0x23)
#define TZC_REGION_SIZE_128G		U(0x24)
#define TZC_REGION_SIZE_256G		U(0x25)
#define TZC_REGION_SIZE_512G		U(0x26)
#define TZC_REGION_SIZE_1T		U(0x27)
#define TZC_REGION_SIZE_2T		U(0x28)
#define TZC_REGION_SIZE_4T		U(0x29)
#define TZC_REGION_SIZE_8T		U(0x2a)
#define TZC_REGION_SIZE_16T		U(0x2b)
#define TZC_REGION_SIZE_32T		U(0x2c)
#define TZC_REGION_SIZE_64T		U(0x2d)
#define TZC_REGION_SIZE_128T		U(0x2e)
#define TZC_REGION_SIZE_256T		U(0x2f)
#define TZC_REGION_SIZE_512T		U(0x30)
#define TZC_REGION_SIZE_1P		U(0x31)
#define TZC_REGION_SIZE_2P		U(0x32)
#define TZC_REGION_SIZE_4P		U(0x33)
#define TZC_REGION_SIZE_8P		U(0x34)
#define TZC_REGION_SIZE_16P		U(0x35)
#define TZC_REGION_SIZE_32P		U(0x36)
#define TZC_REGION_SIZE_64P		U(0x37)
#define TZC_REGION_SIZE_128P		U(0x38)
#define TZC_REGION_SIZE_256P		U(0x39)
#define TZC_REGION_SIZE_512P		U(0x3a)
#define TZC_REGION_SIZE_1E		U(0x3b)
#define TZC_REGION_SIZE_2E		U(0x3c)
#define TZC_REGION_SIZE_4E		U(0x3d)
#define TZC_REGION_SIZE_8E		U(0x3e)
#define TZC_REGION_SIZE_16E		U(0x3f)

#define TZC_REGION_SIZE_SHIFT		0x1
#define TZC_REGION_SIZE_MASK		U(0x7e)
#define TZC_ATTR_REGION_SIZE(s)		((s) << TZC_REGION_SIZE_SHIFT)

#define TZC_ATTR_REGION_EN_SHIFT	0x0
#define TZC_ATTR_REGION_EN_MASK		U(0x1)

#define TZC_ATTR_REGION_EN
#define TZC_ATTR_REGION_ENABLE		U(0x1)
#define TZC_ATTR_REGION_DISABLE		U(0x0)

#define	REGION_MAX	16

void tzc380_init(uintptr_t base);
void tzc380_configure_region(uint8_t region,
			     uintptr_t region_base,
			     unsigned int attr);
void tzc380_set_action(tzc_action_t action);
static inline void tzc_init(uintptr_t base)
{
	tzc380_init(base);
}

static inline void tzc_configure_region(uint8_t region,
					uintptr_t region_base,
					unsigned int attr)
{
	tzc380_configure_region(region, region_base, attr);
}

static inline void tzc_set_action(tzc_action_t action)
{
	tzc380_set_action(action);
}

#endif /* TZC380_H */