aboutsummaryrefslogtreecommitdiffstats
path: root/lib/pico-sdk/rp2350/hardware/regs/xip.h
blob: 7487ec63f2e7c97a4453a69a95cb319137e8a39c (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
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
// THIS HEADER FILE IS AUTOMATICALLY GENERATED -- DO NOT EDIT

/**
 * Copyright (c) 2024 Raspberry Pi Ltd.
 *
 * SPDX-License-Identifier: BSD-3-Clause
 */
// =============================================================================
// Register block : XIP
// Version        : 1
// Bus type       : ahb
// Description    : QSPI flash execute-in-place block
// =============================================================================
#ifndef _HARDWARE_REGS_XIP_H
#define _HARDWARE_REGS_XIP_H
// =============================================================================
// Register    : XIP_CTRL
// Description : Cache control register. Read-only from a Non-secure context.
#define XIP_CTRL_OFFSET _u(0x00000000)
#define XIP_CTRL_BITS   _u(0x00000ffb)
#define XIP_CTRL_RESET  _u(0x00000083)
// -----------------------------------------------------------------------------
// Field       : XIP_CTRL_WRITABLE_M1
// Description : If 1, enable writes to XIP memory window 1 (addresses
//               0x11000000 through 0x11ffffff, and their uncached mirrors). If
//               0, this region is read-only.
//
//               XIP memory is *read-only by default*. This bit must be set to
//               enable writes if a RAM device is attached on QSPI chip select
//               1.
//
//               The default read-only behaviour avoids two issues with writing
//               to a read-only QSPI device (e.g. flash). First, a write will
//               initially appear to succeed due to caching, but the data will
//               eventually be lost when the written line is evicted, causing
//               unpredictable behaviour.
//
//               Second, when a written line is evicted, it will cause a write
//               command to be issued to the flash, which can break the flash
//               out of its continuous read mode. After this point, flash reads
//               will return garbage. This is a security concern, as it allows
//               Non-secure software to break Secure flash reads if it has
//               permission to write to any flash address.
//
//               Note the read-only behaviour is implemented by downgrading
//               writes to reads, so writes will still cause allocation of an
//               address, but have no other effect.
#define XIP_CTRL_WRITABLE_M1_RESET  _u(0x0)
#define XIP_CTRL_WRITABLE_M1_BITS   _u(0x00000800)
#define XIP_CTRL_WRITABLE_M1_MSB    _u(11)
#define XIP_CTRL_WRITABLE_M1_LSB    _u(11)
#define XIP_CTRL_WRITABLE_M1_ACCESS "RW"
// -----------------------------------------------------------------------------
// Field       : XIP_CTRL_WRITABLE_M0
// Description : If 1, enable writes to XIP memory window 0 (addresses
//               0x10000000 through 0x10ffffff, and their uncached mirrors). If
//               0, this region is read-only.
//
//               XIP memory is *read-only by default*. This bit must be set to
//               enable writes if a RAM device is attached on QSPI chip select
//               0.
//
//               The default read-only behaviour avoids two issues with writing
//               to a read-only QSPI device (e.g. flash). First, a write will
//               initially appear to succeed due to caching, but the data will
//               eventually be lost when the written line is evicted, causing
//               unpredictable behaviour.
//
//               Second, when a written line is evicted, it will cause a write
//               command to be issued to the flash, which can break the flash
//               out of its continuous read mode. After this point, flash reads
//               will return garbage. This is a security concern, as it allows
//               Non-secure software to break Secure flash reads if it has
//               permission to write to any flash address.
//
//               Note the read-only behaviour is implemented by downgrading
//               writes to reads, so writes will still cause allocation of an
//               address, but have no other effect.
#define XIP_CTRL_WRITABLE_M0_RESET  _u(0x0)
#define XIP_CTRL_WRITABLE_M0_BITS   _u(0x00000400)
#define XIP_CTRL_WRITABLE_M0_MSB    _u(10)
#define XIP_CTRL_WRITABLE_M0_LSB    _u(10)
#define XIP_CTRL_WRITABLE_M0_ACCESS "RW"
// -----------------------------------------------------------------------------
// Field       : XIP_CTRL_SPLIT_WAYS
// Description : When 1, route all cached+Secure accesses to way 0 of the cache,
//               and route all cached+Non-secure accesses to way 1 of the cache.
//
//               This partitions the cache into two half-sized direct-mapped
//               regions, such that Non-secure code can not observe cache line
//               state changes caused by Secure execution.
//
//               A full cache flush is required when changing the value of
//               SPLIT_WAYS. The flush should be performed whilst SPLIT_WAYS is
//               0, so that both cache ways are accessible for invalidation.
#define XIP_CTRL_SPLIT_WAYS_RESET  _u(0x0)
#define XIP_CTRL_SPLIT_WAYS_BITS   _u(0x00000200)
#define XIP_CTRL_SPLIT_WAYS_MSB    _u(9)
#define XIP_CTRL_SPLIT_WAYS_LSB    _u(9)
#define XIP_CTRL_SPLIT_WAYS_ACCESS "RW"
// -----------------------------------------------------------------------------
// Field       : XIP_CTRL_MAINT_NONSEC
// Description : When 0, Non-secure accesses to the cache maintenance address
//               window (addr[27] == 1, addr[26] == 0) will generate a bus
//               error. When 1, Non-secure accesses can perform cache
//               maintenance operations by writing to the cache maintenance
//               address window.
//
//               Cache maintenance operations may be used to corrupt Secure data
//               by invalidating cache lines inappropriately, or map Secure
//               content into a Non-secure region by pinning cache lines.
//               Therefore this bit should generally be set to 0, unless Secure
//               code is not using the cache.
//
//               Care should also be taken to clear the cache data memory and
//               tag memory before granting maintenance operations to Non-secure
//               code.
#define XIP_CTRL_MAINT_NONSEC_RESET  _u(0x0)
#define XIP_CTRL_MAINT_NONSEC_BITS   _u(0x00000100)
#define XIP_CTRL_MAINT_NONSEC_MSB    _u(8)
#define XIP_CTRL_MAINT_NONSEC_LSB    _u(8)
#define XIP_CTRL_MAINT_NONSEC_ACCESS "RW"
// -----------------------------------------------------------------------------
// Field       : XIP_CTRL_NO_UNTRANSLATED_NONSEC
// Description : When 1, Non-secure accesses to the uncached, untranslated
//               window (addr[27:26] == 3) will generate a bus error.
#define XIP_CTRL_NO_UNTRANSLATED_NONSEC_RESET  _u(0x1)
#define XIP_CTRL_NO_UNTRANSLATED_NONSEC_BITS   _u(0x00000080)
#define XIP_CTRL_NO_UNTRANSLATED_NONSEC_MSB    _u(7)
#define XIP_CTRL_NO_UNTRANSLATED_NONSEC_LSB    _u(7)
#define XIP_CTRL_NO_UNTRANSLATED_NONSEC_ACCESS "RW"
// -----------------------------------------------------------------------------
// Field       : XIP_CTRL_NO_UNTRANSLATED_SEC
// Description : When 1, Secure accesses to the uncached, untranslated window
//               (addr[27:26] == 3) will generate a bus error.
#define XIP_CTRL_NO_UNTRANSLATED_SEC_RESET  _u(0x0)
#define XIP_CTRL_NO_UNTRANSLATED_SEC_BITS   _u(0x00000040)
#define XIP_CTRL_NO_UNTRANSLATED_SEC_MSB    _u(6)
#define XIP_CTRL_NO_UNTRANSLATED_SEC_LSB    _u(6)
#define XIP_CTRL_NO_UNTRANSLATED_SEC_ACCESS "RW"
// -----------------------------------------------------------------------------
// Field       : XIP_CTRL_NO_UNCACHED_NONSEC
// Description : When 1, Non-secure accesses to the uncached window (addr[27:26]
//               == 1) will generate a bus error. This may reduce the number of
//               SAU/MPU/PMP regions required to protect flash contents.
//
//               Note this does not disable access to the uncached, untranslated
//               window -- see NO_UNTRANSLATED_SEC.
#define XIP_CTRL_NO_UNCACHED_NONSEC_RESET  _u(0x0)
#define XIP_CTRL_NO_UNCACHED_NONSEC_BITS   _u(0x00000020)
#define XIP_CTRL_NO_UNCACHED_NONSEC_MSB    _u(5)
#define XIP_CTRL_NO_UNCACHED_NONSEC_LSB    _u(5)
#define XIP_CTRL_NO_UNCACHED_NONSEC_ACCESS "RW"
// -----------------------------------------------------------------------------
// Field       : XIP_CTRL_NO_UNCACHED_SEC
// Description : When 1, Secure accesses to the uncached window (addr[27:26] ==
//               1) will generate a bus error. This may reduce the number of
//               SAU/MPU/PMP regions required to protect flash contents.
//
//               Note this does not disable access to the uncached, untranslated
//               window -- see NO_UNTRANSLATED_SEC.
#define XIP_CTRL_NO_UNCACHED_SEC_RESET  _u(0x0)
#define XIP_CTRL_NO_UNCACHED_SEC_BITS   _u(0x00000010)
#define XIP_CTRL_NO_UNCACHED_SEC_MSB    _u(4)
#define XIP_CTRL_NO_UNCACHED_SEC_LSB    _u(4)
#define XIP_CTRL_NO_UNCACHED_SEC_ACCESS "RW"
// -----------------------------------------------------------------------------
// Field       : XIP_CTRL_POWER_DOWN
// Description : When 1, the cache memories are powered down. They retain state,
//               but can not be accessed. This reduces static power dissipation.
//               Writing 1 to this bit forces CTRL_EN_SECURE and
//               CTRL_EN_NONSECURE to 0, i.e. the cache cannot be enabled when
//               powered down.
#define XIP_CTRL_POWER_DOWN_RESET  _u(0x0)
#define XIP_CTRL_POWER_DOWN_BITS   _u(0x00000008)
#define XIP_CTRL_POWER_DOWN_MSB    _u(3)
#define XIP_CTRL_POWER_DOWN_LSB    _u(3)
#define XIP_CTRL_POWER_DOWN_ACCESS "RW"
// -----------------------------------------------------------------------------
// Field       : XIP_CTRL_EN_NONSECURE
// Description : When 1, enable the cache for Non-secure accesses. When enabled,
//               Non-secure XIP accesses to the cached (addr[26] == 0) window
//               will query the cache, and QSPI accesses are performed only if
//               the requested data is not present. When disabled, Secure access
//               ignore the cache contents, and always access the QSPI
//               interface.
//
//               Accesses to the uncached (addr[26] == 1) window will never
//               query the cache, irrespective of this bit.
#define XIP_CTRL_EN_NONSECURE_RESET  _u(0x1)
#define XIP_CTRL_EN_NONSECURE_BITS   _u(0x00000002)
#define XIP_CTRL_EN_NONSECURE_MSB    _u(1)
#define XIP_CTRL_EN_NONSECURE_LSB    _u(1)
#define XIP_CTRL_EN_NONSECURE_ACCESS "RW"
// -----------------------------------------------------------------------------
// Field       : XIP_CTRL_EN_SECURE
// Description : When 1, enable the cache for Secure accesses. When enabled,
//               Secure XIP accesses to the cached (addr[26] == 0) window will
//               query the cache, and QSPI accesses are performed only if the
//               requested data is not present. When disabled, Secure access
//               ignore the cache contents, and always access the QSPI
//               interface.
//
//               Accesses to the uncached (addr[26] == 1) window will never
//               query the cache, irrespective of this bit.
//
//               There is no cache-as-SRAM address window. Cache lines are
//               allocated for SRAM-like use by individually pinning them, and
//               keeping the cache enabled.
#define XIP_CTRL_EN_SECURE_RESET  _u(0x1)
#define XIP_CTRL_EN_SECURE_BITS   _u(0x00000001)
#define XIP_CTRL_EN_SECURE_MSB    _u(0)
#define XIP_CTRL_EN_SECURE_LSB    _u(0)
#define XIP_CTRL_EN_SECURE_ACCESS "RW"
// =============================================================================
// Register    : XIP_STAT
#define XIP_STAT_OFFSET _u(0x00000008)
#define XIP_STAT_BITS   _u(0x00000006)
#define XIP_STAT_RESET  _u(0x00000002)
// -----------------------------------------------------------------------------
// Field       : XIP_STAT_FIFO_FULL
// Description : When 1, indicates the XIP streaming FIFO is completely full.
//               The streaming FIFO is 2 entries deep, so the full and empty
//               flag allow its level to be ascertained.
#define XIP_STAT_FIFO_FULL_RESET  _u(0x0)
#define XIP_STAT_FIFO_FULL_BITS   _u(0x00000004)
#define XIP_STAT_FIFO_FULL_MSB    _u(2)
#define XIP_STAT_FIFO_FULL_LSB    _u(2)
#define XIP_STAT_FIFO_FULL_ACCESS "RO"
// -----------------------------------------------------------------------------
// Field       : XIP_STAT_FIFO_EMPTY
// Description : When 1, indicates the XIP streaming FIFO is completely empty.
#define XIP_STAT_FIFO_EMPTY_RESET  _u(0x1)
#define XIP_STAT_FIFO_EMPTY_BITS   _u(0x00000002)
#define XIP_STAT_FIFO_EMPTY_MSB    _u(1)
#define XIP_STAT_FIFO_EMPTY_LSB    _u(1)
#define XIP_STAT_FIFO_EMPTY_ACCESS "RO"
// =============================================================================
// Register    : XIP_CTR_HIT
// Description : Cache Hit counter
//               A 32 bit saturating counter that increments upon each cache
//               hit,
//               i.e. when an XIP access is serviced directly from cached data.
//               Write any value to clear.
#define XIP_CTR_HIT_OFFSET _u(0x0000000c)
#define XIP_CTR_HIT_BITS   _u(0xffffffff)
#define XIP_CTR_HIT_RESET  _u(0x00000000)
#define XIP_CTR_HIT_MSB    _u(31)
#define XIP_CTR_HIT_LSB    _u(0)
#define XIP_CTR_HIT_ACCESS "WC"
// =============================================================================
// Register    : XIP_CTR_ACC
// Description : Cache Access counter
//               A 32 bit saturating counter that increments upon each XIP
//               access,
//               whether the cache is hit or not. This includes noncacheable
//               accesses.
//               Write any value to clear.
#define XIP_CTR_ACC_OFFSET _u(0x00000010)
#define XIP_CTR_ACC_BITS   _u(0xffffffff)
#define XIP_CTR_ACC_RESET  _u(0x00000000)
#define XIP_CTR_ACC_MSB    _u(31)
#define XIP_CTR_ACC_LSB    _u(0)
#define XIP_CTR_ACC_ACCESS "WC"
// =============================================================================
// Register    : XIP_STREAM_ADDR
// Description : FIFO stream address
//               The address of the next word to be streamed from flash to the
//               streaming FIFO.
//               Increments automatically after each flash access.
//               Write the initial access address here before starting a
//               streaming read.
#define XIP_STREAM_ADDR_OFFSET _u(0x00000014)
#define XIP_STREAM_ADDR_BITS   _u(0xfffffffc)
#define XIP_STREAM_ADDR_RESET  _u(0x00000000)
#define XIP_STREAM_ADDR_MSB    _u(31)
#define XIP_STREAM_ADDR_LSB    _u(2)
#define XIP_STREAM_ADDR_ACCESS "RW"
// =============================================================================
// Register    : XIP_STREAM_CTR
// Description : FIFO stream control
//               Write a nonzero value to start a streaming read. This will then
//               progress in the background, using flash idle cycles to transfer
//               a linear data block from flash to the streaming FIFO.
//               Decrements automatically (1 at a time) as the stream
//               progresses, and halts on reaching 0.
//               Write 0 to halt an in-progress stream, and discard any in-
//               flight
//               read, so that a new stream can immediately be started (after
//               draining the FIFO and reinitialising STREAM_ADDR)
#define XIP_STREAM_CTR_OFFSET _u(0x00000018)
#define XIP_STREAM_CTR_BITS   _u(0x003fffff)
#define XIP_STREAM_CTR_RESET  _u(0x00000000)
#define XIP_STREAM_CTR_MSB    _u(21)
#define XIP_STREAM_CTR_LSB    _u(0)
#define XIP_STREAM_CTR_ACCESS "RW"
// =============================================================================
// Register    : XIP_STREAM_FIFO
// Description : FIFO stream data
//               Streamed data is buffered here, for retrieval by the system
//               DMA.
//               This FIFO can also be accessed via the XIP_AUX slave, to avoid
//               exposing
//               the DMA to bus stalls caused by other XIP traffic.
#define XIP_STREAM_FIFO_OFFSET _u(0x0000001c)
#define XIP_STREAM_FIFO_BITS   _u(0xffffffff)
#define XIP_STREAM_FIFO_RESET  _u(0x00000000)
#define XIP_STREAM_FIFO_MSB    _u(31)
#define XIP_STREAM_FIFO_LSB    _u(0)
#define XIP_STREAM_FIFO_ACCESS "RF"
// =============================================================================
#endif // _HARDWARE_REGS_XIP_H