imxrt_ral/blocks/imxrt1011/
otfad.rs

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
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
#[doc = "OTFAD"]
#[repr(C)]
pub struct RegisterBlock {
    _reserved0: [u8; 0x0c00],
    #[doc = "Control Register"]
    pub CR: crate::RWRegister<u32>,
    #[doc = "Status Register"]
    pub SR: crate::RWRegister<u32>,
    _reserved1: [u8; 0xf8],
    #[doc = "no description available"]
    pub CTX: [ctx::RegisterBlock; 4usize],
}
#[doc = "Control Register"]
pub mod CR {
    #[doc = "IRQE"]
    pub mod IRQE {
        pub const offset: u32 = 0;
        pub const mask: u32 = 0x01 << offset;
        pub mod R {}
        pub mod W {}
        pub mod RW {
            #[doc = "SR\\[KBERR\\] = 1 does not generate an interrupt request."]
            pub const IRQE_0: u32 = 0;
            #[doc = "SR\\[KBERR\\] = 1 generates an interrupt request."]
            pub const IRQE_1: u32 = 0x01;
        }
    }
    #[doc = "Force Error"]
    pub mod FERR {
        pub const offset: u32 = 1;
        pub const mask: u32 = 0x01 << offset;
        pub mod R {}
        pub mod W {}
        pub mod RW {
            #[doc = "No effect on the SR\\[KBERE\\] indicator."]
            pub const FERR_0: u32 = 0;
            #[doc = "SR\\[KBERR\\] is immediately set after a write with this data bit set."]
            pub const FERR_1: u32 = 0x01;
        }
    }
    #[doc = "Force Security Violation Mode"]
    pub mod FSVM {
        pub const offset: u32 = 2;
        pub const mask: u32 = 0x01 << offset;
        pub mod R {}
        pub mod W {}
        pub mod RW {
            #[doc = "No effect on the operating mode."]
            pub const FSVM_0: u32 = 0;
            #[doc = "Force entry into SVM after a write with this data bit set and the data bit associated with FLDM cleared. SR\\[MODE\\] signals the operating mode."]
            pub const FSVM_1: u32 = 0x01;
        }
    }
    #[doc = "Force Logically Disabled Mode"]
    pub mod FLDM {
        pub const offset: u32 = 3;
        pub const mask: u32 = 0x01 << offset;
        pub mod R {}
        pub mod W {}
        pub mod RW {
            #[doc = "No effect on the operating mode."]
            pub const FLDM_0: u32 = 0;
            #[doc = "Force entry into LDM after a write with this data bit set. SR\\[MODE\\] signals the operating mode."]
            pub const FLDM_1: u32 = 0x01;
        }
    }
    #[doc = "Key Blob Scramble Enable"]
    pub mod KBSE {
        pub const offset: u32 = 4;
        pub const mask: u32 = 0x01 << offset;
        pub mod R {}
        pub mod W {}
        pub mod RW {
            #[doc = "Key blob KEK scrambling is disabled."]
            pub const KBSE_0: u32 = 0;
            #[doc = "Key blob KEK scrambling is enabled."]
            pub const KBSE_1: u32 = 0x01;
        }
    }
    #[doc = "Key Blob Processing Enable"]
    pub mod KBPE {
        pub const offset: u32 = 5;
        pub const mask: u32 = 0x01 << offset;
        pub mod R {}
        pub mod W {}
        pub mod RW {
            #[doc = "Key blob processing is disabled."]
            pub const KBPE_0: u32 = 0;
            #[doc = "Key blob processing is enabled."]
            pub const KBPE_1: u32 = 0x01;
        }
    }
    #[doc = "Key Blob CRC Enable"]
    pub mod KBCE {
        pub const offset: u32 = 6;
        pub const mask: u32 = 0x01 << offset;
        pub mod R {}
        pub mod W {}
        pub mod RW {
            #[doc = "CRC-32 during key blob processing is disabled."]
            pub const KBCE_0: u32 = 0;
            #[doc = "CRC-32 during key blob processing is enabled."]
            pub const KBCE_1: u32 = 0x01;
        }
    }
    #[doc = "Restricted Register Access Enable"]
    pub mod RRAE {
        pub const offset: u32 = 7;
        pub const mask: u32 = 0x01 << offset;
        pub mod R {}
        pub mod W {}
        pub mod RW {
            #[doc = "Register access is fully enabled. The OTFAD programming model registers can be accessed \"normally\"."]
            pub const RRAE_0: u32 = 0;
            #[doc = "Register access is restricted and only the CR, SR and optional MDPC registers can be accessed; others are treated as RAZ/WI."]
            pub const RRAE_1: u32 = 0x01;
        }
    }
    #[doc = "Start key blob processing"]
    pub mod SKBP {
        pub const offset: u32 = 30;
        pub const mask: u32 = 0x01 << offset;
        pub mod R {}
        pub mod W {}
        pub mod RW {
            #[doc = "Key blob processing is not initiated."]
            pub const SKBP_0: u32 = 0;
            #[doc = "Properly-enabled key blob processing is initiated."]
            pub const SKBP_1: u32 = 0x01;
        }
    }
    #[doc = "Global OTFAD Enable"]
    pub mod GE {
        pub const offset: u32 = 31;
        pub const mask: u32 = 0x01 << offset;
        pub mod R {}
        pub mod W {}
        pub mod RW {
            #[doc = "OTFAD has decryption disabled. All data fetched by the FlexSPI bypasses OTFAD processing."]
            pub const GE_0: u32 = 0;
            #[doc = "OTFAD has decryption enabled, and processes data fetched by the FlexSPI as defined by the hardware configuration."]
            pub const GE_1: u32 = 0x01;
        }
    }
}
#[doc = "Status Register"]
pub mod SR {
    #[doc = "Key Blob Error"]
    pub mod KBERR {
        pub const offset: u32 = 0;
        pub const mask: u32 = 0x01 << offset;
        pub mod R {}
        pub mod W {}
        pub mod RW {
            #[doc = "No key blob error detected."]
            pub const KBERR_0: u32 = 0;
            #[doc = "One or more key blob errors has been detected."]
            pub const KBERR_1: u32 = 0x01;
        }
    }
    #[doc = "MDPC Present"]
    pub mod MDPCP {
        pub const offset: u32 = 1;
        pub const mask: u32 = 0x01 << offset;
        pub mod R {}
        pub mod W {}
        pub mod RW {}
    }
    #[doc = "Operating Mode"]
    pub mod MODE {
        pub const offset: u32 = 2;
        pub const mask: u32 = 0x03 << offset;
        pub mod R {}
        pub mod W {}
        pub mod RW {
            #[doc = "Operating in Normal mode (NRM)"]
            pub const MODE_0: u32 = 0;
            #[doc = "Unused (reserved)"]
            pub const MODE_1: u32 = 0x01;
            #[doc = "Operating in Security Violation Mode (SVM)"]
            pub const MODE_2: u32 = 0x02;
            #[doc = "Operating in Logically Disabled Mode (LDM)"]
            pub const MODE_3: u32 = 0x03;
        }
    }
    #[doc = "Number of Contexts"]
    pub mod NCTX {
        pub const offset: u32 = 4;
        pub const mask: u32 = 0x0f << offset;
        pub mod R {}
        pub mod W {}
        pub mod RW {}
    }
    #[doc = "Context Error"]
    pub mod CTXER0 {
        pub const offset: u32 = 8;
        pub const mask: u32 = 0x01 << offset;
        pub mod R {}
        pub mod W {}
        pub mod RW {
            #[doc = "No key blob error was detected for context \"n\"."]
            pub const NOERROR: u32 = 0;
            #[doc = "Either a key blob integrity error or a key blob CRC error was detected in context \"n\"."]
            pub const ERROR: u32 = 0x01;
        }
    }
    #[doc = "Context Error"]
    pub mod CTXER1 {
        pub const offset: u32 = 9;
        pub const mask: u32 = 0x01 << offset;
        pub mod R {}
        pub mod W {}
        pub mod RW {
            #[doc = "No key blob error was detected for context \"n\"."]
            pub const NOERROR: u32 = 0;
            #[doc = "Either a key blob integrity error or a key blob CRC error was detected in context \"n\"."]
            pub const ERROR: u32 = 0x01;
        }
    }
    #[doc = "Context Error"]
    pub mod CTXER2 {
        pub const offset: u32 = 10;
        pub const mask: u32 = 0x01 << offset;
        pub mod R {}
        pub mod W {}
        pub mod RW {
            #[doc = "No key blob error was detected for context \"n\"."]
            pub const NOERROR: u32 = 0;
            #[doc = "Either a key blob integrity error or a key blob CRC error was detected in context \"n\"."]
            pub const ERROR: u32 = 0x01;
        }
    }
    #[doc = "Context Error"]
    pub mod CTXER3 {
        pub const offset: u32 = 11;
        pub const mask: u32 = 0x01 << offset;
        pub mod R {}
        pub mod W {}
        pub mod RW {
            #[doc = "No key blob error was detected for context \"n\"."]
            pub const NOERROR: u32 = 0;
            #[doc = "Either a key blob integrity error or a key blob CRC error was detected in context \"n\"."]
            pub const ERROR: u32 = 0x01;
        }
    }
    #[doc = "Context Integrity Error"]
    pub mod CTXIE0 {
        pub const offset: u32 = 16;
        pub const mask: u32 = 0x01 << offset;
        pub mod R {}
        pub mod W {}
        pub mod RW {
            #[doc = "No key blob integrity error was detected for context \"n\"."]
            pub const NOINTEGRITYERR: u32 = 0;
            #[doc = "A key blob integrity error was detected in context \"n\"."]
            pub const INTEGRITYERR: u32 = 0x01;
        }
    }
    #[doc = "Context Integrity Error"]
    pub mod CTXIE1 {
        pub const offset: u32 = 17;
        pub const mask: u32 = 0x01 << offset;
        pub mod R {}
        pub mod W {}
        pub mod RW {
            #[doc = "No key blob integrity error was detected for context \"n\"."]
            pub const NOINTEGRITYERR: u32 = 0;
            #[doc = "A key blob integrity error was detected in context \"n\"."]
            pub const INTEGRITYERR: u32 = 0x01;
        }
    }
    #[doc = "Context Integrity Error"]
    pub mod CTXIE2 {
        pub const offset: u32 = 18;
        pub const mask: u32 = 0x01 << offset;
        pub mod R {}
        pub mod W {}
        pub mod RW {
            #[doc = "No key blob integrity error was detected for context \"n\"."]
            pub const NOINTEGRITYERR: u32 = 0;
            #[doc = "A key blob integrity error was detected in context \"n\"."]
            pub const INTEGRITYERR: u32 = 0x01;
        }
    }
    #[doc = "Context Integrity Error"]
    pub mod CTXIE3 {
        pub const offset: u32 = 19;
        pub const mask: u32 = 0x01 << offset;
        pub mod R {}
        pub mod W {}
        pub mod RW {
            #[doc = "No key blob integrity error was detected for context \"n\"."]
            pub const NOINTEGRITYERR: u32 = 0;
            #[doc = "A key blob integrity error was detected in context \"n\"."]
            pub const INTEGRITYERR: u32 = 0x01;
        }
    }
    #[doc = "Hardware Revision Level"]
    pub mod HRL {
        pub const offset: u32 = 24;
        pub const mask: u32 = 0x0f << offset;
        pub mod R {}
        pub mod W {}
        pub mod RW {}
    }
    #[doc = "Restricted Register Access Mode"]
    pub mod RRAM {
        pub const offset: u32 = 28;
        pub const mask: u32 = 0x01 << offset;
        pub mod R {}
        pub mod W {}
        pub mod RW {
            #[doc = "Register access is fully enabled. The OTFAD programming model registers can be accessed \"normally\"."]
            pub const RRAM_0: u32 = 0;
            #[doc = "Register access is restricted and only the CR, SR and optional MDPC registers can be accessed; others are treated as RAZ/WI."]
            pub const RRAM_1: u32 = 0x01;
        }
    }
    #[doc = "Global Enable Mode"]
    pub mod GEM {
        pub const offset: u32 = 29;
        pub const mask: u32 = 0x01 << offset;
        pub mod R {}
        pub mod W {}
        pub mod RW {
            #[doc = "OTFAD is disabled. All data fetched by the FlexSPI bypasses OTFAD processing."]
            pub const GEM_0: u32 = 0;
            #[doc = "OTFAD is enabled, and processes data fetched by the FlexSPI as defined by the hardware configuration."]
            pub const GEM_1: u32 = 0x01;
        }
    }
    #[doc = "Key Blob Processing Enable"]
    pub mod KBPE {
        pub const offset: u32 = 30;
        pub const mask: u32 = 0x01 << offset;
        pub mod R {}
        pub mod W {}
        pub mod RW {
            #[doc = "Key blob processing is not enabled."]
            pub const KBPE_0: u32 = 0;
            #[doc = "Key blob processing is enabled."]
            pub const KBPE_1: u32 = 0x01;
        }
    }
    #[doc = "Key Blob Processing Done"]
    pub mod KBD {
        pub const offset: u32 = 31;
        pub const mask: u32 = 0x01 << offset;
        pub mod R {}
        pub mod W {}
        pub mod RW {
            #[doc = "Key blob processing was not enabled, or is not complete."]
            pub const KBD_0: u32 = 0;
            #[doc = "Key blob processing was enabled and is complete."]
            pub const KBD_1: u32 = 0x01;
        }
    }
}
pub mod ctx {
    #[doc = "no description available"]
    #[repr(C)]
    pub struct RegisterBlock {
        #[doc = "AES Key Word"]
        pub CTX_KEY: [crate::RWRegister<u32>; 4usize],
        #[doc = "AES Counter Word"]
        pub CTX_CTR: [crate::RWRegister<u32>; 2usize],
        #[doc = "AES Region Descriptor Word0"]
        pub CTX_RGD_W0: crate::RWRegister<u32>,
        #[doc = "AES Region Descriptor Word1"]
        pub CTX_RGD_W1: crate::RWRegister<u32>,
        _reserved0: [u8; 0x20],
    }
    #[doc = "AES Key Word"]
    pub mod CTX_KEY {
        #[doc = "AES Key"]
        pub mod KEY {
            pub const offset: u32 = 0;
            pub const mask: u32 = 0xffff_ffff << offset;
            pub mod R {}
            pub mod W {}
            pub mod RW {}
        }
    }
    #[doc = "AES Counter Word"]
    pub mod CTX_CTR {
        #[doc = "AES Counter"]
        pub mod CTR {
            pub const offset: u32 = 0;
            pub const mask: u32 = 0xffff_ffff << offset;
            pub mod R {}
            pub mod W {}
            pub mod RW {}
        }
    }
    #[doc = "AES Region Descriptor Word0"]
    pub mod CTX_RGD_W0 {
        #[doc = "Start Address"]
        pub mod SRTADDR {
            pub const offset: u32 = 10;
            pub const mask: u32 = 0x003f_ffff << offset;
            pub mod R {}
            pub mod W {}
            pub mod RW {}
        }
    }
    #[doc = "AES Region Descriptor Word1"]
    pub mod CTX_RGD_W1 {
        #[doc = "Valid"]
        pub mod VLD {
            pub const offset: u32 = 0;
            pub const mask: u32 = 0x01 << offset;
            pub mod R {}
            pub mod W {}
            pub mod RW {
                #[doc = "Context is invalid."]
                pub const VLD_0: u32 = 0;
                #[doc = "Context is valid."]
                pub const VLD_1: u32 = 0x01;
            }
        }
        #[doc = "AES Decryption Enable."]
        pub mod ADE {
            pub const offset: u32 = 1;
            pub const mask: u32 = 0x01 << offset;
            pub mod R {}
            pub mod W {}
            pub mod RW {
                #[doc = "Bypass the fetched data."]
                pub const ADE_0: u32 = 0;
                #[doc = "Perform the CTR-AES128 mode decryption on the fetched data."]
                pub const ADE_1: u32 = 0x01;
            }
        }
        #[doc = "Read-Only"]
        pub mod RO {
            pub const offset: u32 = 2;
            pub const mask: u32 = 0x01 << offset;
            pub mod R {}
            pub mod W {}
            pub mod RW {
                #[doc = "The context registers can be accessed normally (as defined by SR\\[RRAM\\])."]
                pub const RO_0: u32 = 0;
                #[doc = "The context registers are read-only and accesses may be further restricted based on SR\\[RRAM\\]."]
                pub const RO_1: u32 = 0x01;
            }
        }
        #[doc = "End Address"]
        pub mod ENDADDR {
            pub const offset: u32 = 10;
            pub const mask: u32 = 0x003f_ffff << offset;
            pub mod R {}
            pub mod W {}
            pub mod RW {}
        }
    }
}