1 #ifndef NRF91_ERRATAS_H
2 #define NRF91_ERRATAS_H
3 
4 /*
5 
6 Copyright (c) 2010 - 2024, Nordic Semiconductor ASA All rights reserved.
7 
8 SPDX-License-Identifier: BSD-3-Clause
9 
10 Redistribution and use in source and binary forms, with or without
11 modification, are permitted provided that the following conditions are met:
12 
13 1. Redistributions of source code must retain the above copyright notice, this
14    list of conditions and the following disclaimer.
15 
16 2. Redistributions in binary form must reproduce the above copyright
17    notice, this list of conditions and the following disclaimer in the
18    documentation and/or other materials provided with the distribution.
19 
20 3. Neither the name of Nordic Semiconductor ASA nor the names of its
21    contributors may be used to endorse or promote products derived from this
22    software without specific prior written permission.
23 
24 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
25 AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
26 IMPLIED WARRANTIES OF MERCHANTABILITY, AND FITNESS FOR A PARTICULAR PURPOSE
27 ARE DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE
28 LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
29 CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
30 SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
31 INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
32 CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
33 ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
34 POSSIBILITY OF SUCH DAMAGE.
35 
36 */
37 
38 #include <stdint.h>
39 #include <stdbool.h>
40 #include "compiler_abstraction.h"
41 
42 static bool nrf91_errata_1(void) __UNUSED;
43 static bool nrf91_errata_2(void) __UNUSED;
44 static bool nrf91_errata_4(void) __UNUSED;
45 static bool nrf91_errata_6(void) __UNUSED;
46 static bool nrf91_errata_7(void) __UNUSED;
47 static bool nrf91_errata_8(void) __UNUSED;
48 static bool nrf91_errata_9(void) __UNUSED;
49 static bool nrf91_errata_10(void) __UNUSED;
50 static bool nrf91_errata_12(void) __UNUSED;
51 static bool nrf91_errata_14(void) __UNUSED;
52 static bool nrf91_errata_15(void) __UNUSED;
53 static bool nrf91_errata_16(void) __UNUSED;
54 static bool nrf91_errata_17(void) __UNUSED;
55 static bool nrf91_errata_20(void) __UNUSED;
56 static bool nrf91_errata_21(void) __UNUSED;
57 static bool nrf91_errata_23(void) __UNUSED;
58 static bool nrf91_errata_24(void) __UNUSED;
59 static bool nrf91_errata_26(void) __UNUSED;
60 static bool nrf91_errata_27(void) __UNUSED;
61 static bool nrf91_errata_28(void) __UNUSED;
62 static bool nrf91_errata_29(void) __UNUSED;
63 static bool nrf91_errata_30(void) __UNUSED;
64 static bool nrf91_errata_31(void) __UNUSED;
65 static bool nrf91_errata_32(void) __UNUSED;
66 static bool nrf91_errata_33(void) __UNUSED;
67 static bool nrf91_errata_35(void) __UNUSED;
68 static bool nrf91_errata_36(void) __UNUSED;
69 static bool nrf91_errata_37(void) __UNUSED;
70 
71 /* ========= Errata 1 ========= */
72 #if    defined (NRF9120_XXAA) || defined (DEVELOP_IN_NRF9120) \
73     || defined (NRF9160_XXAA) || defined (DEVELOP_IN_NRF9160)
74     #define NRF91_ERRATA_1_PRESENT 1
75 #else
76     #define NRF91_ERRATA_1_PRESENT 0
77 #endif
78 
79 #ifndef NRF91_ERRATA_1_ENABLE_WORKAROUND
80     #define NRF91_ERRATA_1_ENABLE_WORKAROUND NRF91_ERRATA_1_PRESENT
81 #endif
82 
nrf91_errata_1(void)83 static bool nrf91_errata_1(void)
84 {
85     #ifndef NRF91_SERIES
86         return false;
87     #else
88         #if defined (NRF9120_XXAA) || defined (DEVELOP_IN_NRF9120)\
89          || defined (NRF9160_XXAA) || defined (DEVELOP_IN_NRF9160)
90             #if defined(NRF_TRUSTZONE_NONSECURE)
91                 uint32_t var1 = (*((volatile uint32_t *)((uint32_t)NRF_FICR_NS + 0x00000130ul))) & 0x00000FFFul;
92                 uint32_t var2 = *((volatile uint32_t *)((uint32_t)NRF_FICR_NS + 0x00000134ul));
93             #else
94                 uint32_t var1 = (*((volatile uint32_t *)((uint32_t)NRF_FICR_S + 0x00000130ul))) & 0x00000FFFul;
95                 uint32_t var2 = *((volatile uint32_t *)((uint32_t)NRF_FICR_S + 0x00000134ul));
96             #endif
97         #endif
98         #if defined (NRF9120_XXAA) || defined (DEVELOP_IN_NRF9120)
99             __DSB();
100             if (var1 == 0x09)
101             {
102                 switch(var2)
103                 {
104                     case 0x01ul:
105                         return true;
106                     case 0x02ul:
107                         return true;
108                     default:
109                         return true;
110                 }
111             }
112         #endif
113         #if defined (NRF9160_XXAA) || defined (DEVELOP_IN_NRF9160)
114             __DSB();
115             if (var1 == 0x09)
116             {
117                 switch(var2)
118                 {
119                     case 0x01ul:
120                         return true;
121                     case 0x02ul:
122                         return true;
123                     default:
124                         return true;
125                 }
126             }
127         #endif
128         return false;
129     #endif
130 }
131 
132 /* ========= Errata 2 ========= */
133 #if    defined (NRF9120_XXAA) || defined (DEVELOP_IN_NRF9120) \
134     || defined (NRF9160_XXAA) || defined (DEVELOP_IN_NRF9160)
135     #define NRF91_ERRATA_2_PRESENT 1
136 #else
137     #define NRF91_ERRATA_2_PRESENT 0
138 #endif
139 
140 #ifndef NRF91_ERRATA_2_ENABLE_WORKAROUND
141     #define NRF91_ERRATA_2_ENABLE_WORKAROUND NRF91_ERRATA_2_PRESENT
142 #endif
143 
nrf91_errata_2(void)144 static bool nrf91_errata_2(void)
145 {
146     #ifndef NRF91_SERIES
147         return false;
148     #else
149         #if defined (NRF9120_XXAA) || defined (DEVELOP_IN_NRF9120)\
150          || defined (NRF9160_XXAA) || defined (DEVELOP_IN_NRF9160)
151             #if defined(NRF_TRUSTZONE_NONSECURE)
152                 uint32_t var1 = (*((volatile uint32_t *)((uint32_t)NRF_FICR_NS + 0x00000130ul))) & 0x00000FFFul;
153                 uint32_t var2 = *((volatile uint32_t *)((uint32_t)NRF_FICR_NS + 0x00000134ul));
154             #else
155                 uint32_t var1 = (*((volatile uint32_t *)((uint32_t)NRF_FICR_S + 0x00000130ul))) & 0x00000FFFul;
156                 uint32_t var2 = *((volatile uint32_t *)((uint32_t)NRF_FICR_S + 0x00000134ul));
157             #endif
158         #endif
159         #if defined (NRF9120_XXAA) || defined (DEVELOP_IN_NRF9120)
160             __DSB();
161             if (var1 == 0x09)
162             {
163                 switch(var2)
164                 {
165                     case 0x01ul:
166                         return true;
167                     case 0x02ul:
168                         return true;
169                     default:
170                         return true;
171                 }
172             }
173         #endif
174         #if defined (NRF9160_XXAA) || defined (DEVELOP_IN_NRF9160)
175             __DSB();
176             if (var1 == 0x09)
177             {
178                 switch(var2)
179                 {
180                     case 0x01ul:
181                         return true;
182                     case 0x02ul:
183                         return true;
184                     default:
185                         return true;
186                 }
187             }
188         #endif
189         return false;
190     #endif
191 }
192 
193 /* ========= Errata 4 ========= */
194 #if    defined (NRF9120_XXAA) || defined (DEVELOP_IN_NRF9120) \
195     || defined (NRF9160_XXAA) || defined (DEVELOP_IN_NRF9160)
196     #define NRF91_ERRATA_4_PRESENT 1
197 #else
198     #define NRF91_ERRATA_4_PRESENT 0
199 #endif
200 
201 #ifndef NRF91_ERRATA_4_ENABLE_WORKAROUND
202     #define NRF91_ERRATA_4_ENABLE_WORKAROUND NRF91_ERRATA_4_PRESENT
203 #endif
204 
nrf91_errata_4(void)205 static bool nrf91_errata_4(void)
206 {
207     #ifndef NRF91_SERIES
208         return false;
209     #else
210         #if defined (NRF9120_XXAA) || defined (DEVELOP_IN_NRF9120)\
211          || defined (NRF9160_XXAA) || defined (DEVELOP_IN_NRF9160)
212             #if defined(NRF_TRUSTZONE_NONSECURE)
213                 uint32_t var1 = (*((volatile uint32_t *)((uint32_t)NRF_FICR_NS + 0x00000130ul))) & 0x00000FFFul;
214                 uint32_t var2 = *((volatile uint32_t *)((uint32_t)NRF_FICR_NS + 0x00000134ul));
215             #else
216                 uint32_t var1 = (*((volatile uint32_t *)((uint32_t)NRF_FICR_S + 0x00000130ul))) & 0x00000FFFul;
217                 uint32_t var2 = *((volatile uint32_t *)((uint32_t)NRF_FICR_S + 0x00000134ul));
218             #endif
219         #endif
220         #if defined (NRF9120_XXAA) || defined (DEVELOP_IN_NRF9120)
221             __DSB();
222             if (var1 == 0x09)
223             {
224                 switch(var2)
225                 {
226                     case 0x01ul:
227                         return true;
228                     case 0x02ul:
229                         return true;
230                     default:
231                         return true;
232                 }
233             }
234         #endif
235         #if defined (NRF9160_XXAA) || defined (DEVELOP_IN_NRF9160)
236             __DSB();
237             if (var1 == 0x09)
238             {
239                 switch(var2)
240                 {
241                     case 0x01ul:
242                         return true;
243                     case 0x02ul:
244                         return true;
245                     default:
246                         return true;
247                 }
248             }
249         #endif
250         return false;
251     #endif
252 }
253 
254 /* ========= Errata 6 ========= */
255 #if    defined (NRF9120_XXAA) || defined (DEVELOP_IN_NRF9120) \
256     || defined (NRF9160_XXAA) || defined (DEVELOP_IN_NRF9160)
257     #define NRF91_ERRATA_6_PRESENT 1
258 #else
259     #define NRF91_ERRATA_6_PRESENT 0
260 #endif
261 
262 #ifndef NRF91_ERRATA_6_ENABLE_WORKAROUND
263     #define NRF91_ERRATA_6_ENABLE_WORKAROUND NRF91_ERRATA_6_PRESENT
264 #endif
265 
nrf91_errata_6(void)266 static bool nrf91_errata_6(void)
267 {
268     #ifndef NRF91_SERIES
269         return false;
270     #else
271         #if defined (NRF9120_XXAA) || defined (DEVELOP_IN_NRF9120)\
272          || defined (NRF9160_XXAA) || defined (DEVELOP_IN_NRF9160)
273             #if defined(NRF_TRUSTZONE_NONSECURE)
274                 uint32_t var1 = (*((volatile uint32_t *)((uint32_t)NRF_FICR_NS + 0x00000130ul))) & 0x00000FFFul;
275                 uint32_t var2 = *((volatile uint32_t *)((uint32_t)NRF_FICR_NS + 0x00000134ul));
276             #else
277                 uint32_t var1 = (*((volatile uint32_t *)((uint32_t)NRF_FICR_S + 0x00000130ul))) & 0x00000FFFul;
278                 uint32_t var2 = *((volatile uint32_t *)((uint32_t)NRF_FICR_S + 0x00000134ul));
279             #endif
280         #endif
281         #if defined (NRF9120_XXAA) || defined (DEVELOP_IN_NRF9120)
282             __DSB();
283             if (var1 == 0x09)
284             {
285                 switch(var2)
286                 {
287                     case 0x01ul:
288                         return true;
289                     case 0x02ul:
290                         return true;
291                     default:
292                         return true;
293                 }
294             }
295         #endif
296         #if defined (NRF9160_XXAA) || defined (DEVELOP_IN_NRF9160)
297             __DSB();
298             if (var1 == 0x09)
299             {
300                 switch(var2)
301                 {
302                     case 0x01ul:
303                         return true;
304                     case 0x02ul:
305                         return true;
306                     default:
307                         return true;
308                 }
309             }
310         #endif
311         return false;
312     #endif
313 }
314 
315 /* ========= Errata 7 ========= */
316 #if    defined (NRF9120_XXAA) || defined (DEVELOP_IN_NRF9120) \
317     || defined (NRF9160_XXAA) || defined (DEVELOP_IN_NRF9160)
318     #define NRF91_ERRATA_7_PRESENT 1
319 #else
320     #define NRF91_ERRATA_7_PRESENT 0
321 #endif
322 
323 #ifndef NRF91_ERRATA_7_ENABLE_WORKAROUND
324     #define NRF91_ERRATA_7_ENABLE_WORKAROUND NRF91_ERRATA_7_PRESENT
325 #endif
326 
nrf91_errata_7(void)327 static bool nrf91_errata_7(void)
328 {
329     #ifndef NRF91_SERIES
330         return false;
331     #else
332         #if defined (NRF9120_XXAA) || defined (DEVELOP_IN_NRF9120)\
333          || defined (NRF9160_XXAA) || defined (DEVELOP_IN_NRF9160)
334             #if defined(NRF_TRUSTZONE_NONSECURE)
335                 uint32_t var1 = (*((volatile uint32_t *)((uint32_t)NRF_FICR_NS + 0x00000130ul))) & 0x00000FFFul;
336                 uint32_t var2 = *((volatile uint32_t *)((uint32_t)NRF_FICR_NS + 0x00000134ul));
337             #else
338                 uint32_t var1 = (*((volatile uint32_t *)((uint32_t)NRF_FICR_S + 0x00000130ul))) & 0x00000FFFul;
339                 uint32_t var2 = *((volatile uint32_t *)((uint32_t)NRF_FICR_S + 0x00000134ul));
340             #endif
341         #endif
342         #if defined (NRF9120_XXAA) || defined (DEVELOP_IN_NRF9120)
343             __DSB();
344             if (var1 == 0x09)
345             {
346                 switch(var2)
347                 {
348                     case 0x01ul:
349                         return true;
350                     case 0x02ul:
351                         return true;
352                     default:
353                         return true;
354                 }
355             }
356         #endif
357         #if defined (NRF9160_XXAA) || defined (DEVELOP_IN_NRF9160)
358             __DSB();
359             if (var1 == 0x09)
360             {
361                 switch(var2)
362                 {
363                     case 0x01ul:
364                         return true;
365                     case 0x02ul:
366                         return true;
367                     default:
368                         return true;
369                 }
370             }
371         #endif
372         return false;
373     #endif
374 }
375 
376 /* ========= Errata 8 ========= */
377 #if    defined (NRF9120_XXAA) || defined (DEVELOP_IN_NRF9120) \
378     || defined (NRF9160_XXAA) || defined (DEVELOP_IN_NRF9160)
379     #define NRF91_ERRATA_8_PRESENT 1
380 #else
381     #define NRF91_ERRATA_8_PRESENT 0
382 #endif
383 
384 #ifndef NRF91_ERRATA_8_ENABLE_WORKAROUND
385     #define NRF91_ERRATA_8_ENABLE_WORKAROUND NRF91_ERRATA_8_PRESENT
386 #endif
387 
nrf91_errata_8(void)388 static bool nrf91_errata_8(void)
389 {
390     #ifndef NRF91_SERIES
391         return false;
392     #else
393         #if defined (NRF9120_XXAA) || defined (DEVELOP_IN_NRF9120)\
394          || defined (NRF9160_XXAA) || defined (DEVELOP_IN_NRF9160)
395             #if defined(NRF_TRUSTZONE_NONSECURE)
396                 uint32_t var1 = (*((volatile uint32_t *)((uint32_t)NRF_FICR_NS + 0x00000130ul))) & 0x00000FFFul;
397                 uint32_t var2 = *((volatile uint32_t *)((uint32_t)NRF_FICR_NS + 0x00000134ul));
398             #else
399                 uint32_t var1 = (*((volatile uint32_t *)((uint32_t)NRF_FICR_S + 0x00000130ul))) & 0x00000FFFul;
400                 uint32_t var2 = *((volatile uint32_t *)((uint32_t)NRF_FICR_S + 0x00000134ul));
401             #endif
402         #endif
403         #if defined (NRF9120_XXAA) || defined (DEVELOP_IN_NRF9120)
404             __DSB();
405             if (var1 == 0x09)
406             {
407                 switch(var2)
408                 {
409                     case 0x01ul:
410                         return true;
411                     case 0x02ul:
412                         return false;
413                     default:
414                         return false;
415                 }
416             }
417         #endif
418         #if defined (NRF9160_XXAA) || defined (DEVELOP_IN_NRF9160)
419             __DSB();
420             if (var1 == 0x09)
421             {
422                 switch(var2)
423                 {
424                     case 0x01ul:
425                         return true;
426                     case 0x02ul:
427                         return false;
428                     default:
429                         return false;
430                 }
431             }
432         #endif
433         return false;
434     #endif
435 }
436 
437 /* ========= Errata 9 ========= */
438 #if    defined (NRF9120_XXAA) || defined (DEVELOP_IN_NRF9120) \
439     || defined (NRF9160_XXAA) || defined (DEVELOP_IN_NRF9160)
440     #define NRF91_ERRATA_9_PRESENT 1
441 #else
442     #define NRF91_ERRATA_9_PRESENT 0
443 #endif
444 
445 #ifndef NRF91_ERRATA_9_ENABLE_WORKAROUND
446     #define NRF91_ERRATA_9_ENABLE_WORKAROUND NRF91_ERRATA_9_PRESENT
447 #endif
448 
nrf91_errata_9(void)449 static bool nrf91_errata_9(void)
450 {
451     #ifndef NRF91_SERIES
452         return false;
453     #else
454         #if defined (NRF9120_XXAA) || defined (DEVELOP_IN_NRF9120)\
455          || defined (NRF9160_XXAA) || defined (DEVELOP_IN_NRF9160)
456             #if defined(NRF_TRUSTZONE_NONSECURE)
457                 uint32_t var1 = (*((volatile uint32_t *)((uint32_t)NRF_FICR_NS + 0x00000130ul))) & 0x00000FFFul;
458                 uint32_t var2 = *((volatile uint32_t *)((uint32_t)NRF_FICR_NS + 0x00000134ul));
459             #else
460                 uint32_t var1 = (*((volatile uint32_t *)((uint32_t)NRF_FICR_S + 0x00000130ul))) & 0x00000FFFul;
461                 uint32_t var2 = *((volatile uint32_t *)((uint32_t)NRF_FICR_S + 0x00000134ul));
462             #endif
463         #endif
464         #if defined (NRF9120_XXAA) || defined (DEVELOP_IN_NRF9120)
465             __DSB();
466             if (var1 == 0x09)
467             {
468                 switch(var2)
469                 {
470                     case 0x01ul:
471                         return false;
472                     case 0x02ul:
473                         return true;
474                     default:
475                         return true;
476                 }
477             }
478         #endif
479         #if defined (NRF9160_XXAA) || defined (DEVELOP_IN_NRF9160)
480             __DSB();
481             if (var1 == 0x09)
482             {
483                 switch(var2)
484                 {
485                     case 0x01ul:
486                         return false;
487                     case 0x02ul:
488                         return true;
489                     default:
490                         return true;
491                 }
492             }
493         #endif
494         return false;
495     #endif
496 }
497 
498 /* ========= Errata 10 ========= */
499 #if    defined (NRF9120_XXAA) || defined (DEVELOP_IN_NRF9120) \
500     || defined (NRF9160_XXAA) || defined (DEVELOP_IN_NRF9160)
501     #define NRF91_ERRATA_10_PRESENT 1
502 #else
503     #define NRF91_ERRATA_10_PRESENT 0
504 #endif
505 
506 #ifndef NRF91_ERRATA_10_ENABLE_WORKAROUND
507     #define NRF91_ERRATA_10_ENABLE_WORKAROUND NRF91_ERRATA_10_PRESENT
508 #endif
509 
nrf91_errata_10(void)510 static bool nrf91_errata_10(void)
511 {
512     #ifndef NRF91_SERIES
513         return false;
514     #else
515         #if defined (NRF9120_XXAA) || defined (DEVELOP_IN_NRF9120)\
516          || defined (NRF9160_XXAA) || defined (DEVELOP_IN_NRF9160)
517             #if defined(NRF_TRUSTZONE_NONSECURE)
518                 uint32_t var1 = (*((volatile uint32_t *)((uint32_t)NRF_FICR_NS + 0x00000130ul))) & 0x00000FFFul;
519                 uint32_t var2 = *((volatile uint32_t *)((uint32_t)NRF_FICR_NS + 0x00000134ul));
520             #else
521                 uint32_t var1 = (*((volatile uint32_t *)((uint32_t)NRF_FICR_S + 0x00000130ul))) & 0x00000FFFul;
522                 uint32_t var2 = *((volatile uint32_t *)((uint32_t)NRF_FICR_S + 0x00000134ul));
523             #endif
524         #endif
525         #if defined (NRF9120_XXAA) || defined (DEVELOP_IN_NRF9120)
526             __DSB();
527             if (var1 == 0x09)
528             {
529                 switch(var2)
530                 {
531                     case 0x01ul:
532                         return true;
533                     case 0x02ul:
534                         return false;
535                     default:
536                         return false;
537                 }
538             }
539         #endif
540         #if defined (NRF9160_XXAA) || defined (DEVELOP_IN_NRF9160)
541             __DSB();
542             if (var1 == 0x09)
543             {
544                 switch(var2)
545                 {
546                     case 0x01ul:
547                         return true;
548                     case 0x02ul:
549                         return false;
550                     default:
551                         return false;
552                 }
553             }
554         #endif
555         return false;
556     #endif
557 }
558 
559 /* ========= Errata 12 ========= */
560 #if    defined (NRF9120_XXAA) || defined (DEVELOP_IN_NRF9120) \
561     || defined (NRF9160_XXAA) || defined (DEVELOP_IN_NRF9160)
562     #define NRF91_ERRATA_12_PRESENT 1
563 #else
564     #define NRF91_ERRATA_12_PRESENT 0
565 #endif
566 
567 #ifndef NRF91_ERRATA_12_ENABLE_WORKAROUND
568     #define NRF91_ERRATA_12_ENABLE_WORKAROUND NRF91_ERRATA_12_PRESENT
569 #endif
570 
nrf91_errata_12(void)571 static bool nrf91_errata_12(void)
572 {
573     #ifndef NRF91_SERIES
574         return false;
575     #else
576         #if defined (NRF9120_XXAA) || defined (DEVELOP_IN_NRF9120)\
577          || defined (NRF9160_XXAA) || defined (DEVELOP_IN_NRF9160)
578             #if defined(NRF_TRUSTZONE_NONSECURE)
579                 uint32_t var1 = (*((volatile uint32_t *)((uint32_t)NRF_FICR_NS + 0x00000130ul))) & 0x00000FFFul;
580                 uint32_t var2 = *((volatile uint32_t *)((uint32_t)NRF_FICR_NS + 0x00000134ul));
581             #else
582                 uint32_t var1 = (*((volatile uint32_t *)((uint32_t)NRF_FICR_S + 0x00000130ul))) & 0x00000FFFul;
583                 uint32_t var2 = *((volatile uint32_t *)((uint32_t)NRF_FICR_S + 0x00000134ul));
584             #endif
585         #endif
586         #if defined (NRF9120_XXAA) || defined (DEVELOP_IN_NRF9120)
587             __DSB();
588             if (var1 == 0x09)
589             {
590                 switch(var2)
591                 {
592                     case 0x01ul:
593                         return true;
594                     case 0x02ul:
595                         return false;
596                     default:
597                         return false;
598                 }
599             }
600         #endif
601         #if defined (NRF9160_XXAA) || defined (DEVELOP_IN_NRF9160)
602             __DSB();
603             if (var1 == 0x09)
604             {
605                 switch(var2)
606                 {
607                     case 0x01ul:
608                         return true;
609                     case 0x02ul:
610                         return false;
611                     default:
612                         return false;
613                 }
614             }
615         #endif
616         return false;
617     #endif
618 }
619 
620 /* ========= Errata 14 ========= */
621 #if    defined (NRF9120_XXAA) || defined (DEVELOP_IN_NRF9120) \
622     || defined (NRF9160_XXAA) || defined (DEVELOP_IN_NRF9160)
623     #define NRF91_ERRATA_14_PRESENT 1
624 #else
625     #define NRF91_ERRATA_14_PRESENT 0
626 #endif
627 
628 #ifndef NRF91_ERRATA_14_ENABLE_WORKAROUND
629     #define NRF91_ERRATA_14_ENABLE_WORKAROUND NRF91_ERRATA_14_PRESENT
630 #endif
631 
nrf91_errata_14(void)632 static bool nrf91_errata_14(void)
633 {
634     #ifndef NRF91_SERIES
635         return false;
636     #else
637         #if defined (NRF9120_XXAA) || defined (DEVELOP_IN_NRF9120)\
638          || defined (NRF9160_XXAA) || defined (DEVELOP_IN_NRF9160)
639             #if defined(NRF_TRUSTZONE_NONSECURE)
640                 uint32_t var1 = (*((volatile uint32_t *)((uint32_t)NRF_FICR_NS + 0x00000130ul))) & 0x00000FFFul;
641                 uint32_t var2 = *((volatile uint32_t *)((uint32_t)NRF_FICR_NS + 0x00000134ul));
642             #else
643                 uint32_t var1 = (*((volatile uint32_t *)((uint32_t)NRF_FICR_S + 0x00000130ul))) & 0x00000FFFul;
644                 uint32_t var2 = *((volatile uint32_t *)((uint32_t)NRF_FICR_S + 0x00000134ul));
645             #endif
646         #endif
647         #if defined (NRF9120_XXAA) || defined (DEVELOP_IN_NRF9120)
648             __DSB();
649             if (var1 == 0x09)
650             {
651                 switch(var2)
652                 {
653                     case 0x01ul:
654                         return true;
655                     case 0x02ul:
656                         return false;
657                     default:
658                         return false;
659                 }
660             }
661         #endif
662         #if defined (NRF9160_XXAA) || defined (DEVELOP_IN_NRF9160)
663             __DSB();
664             if (var1 == 0x09)
665             {
666                 switch(var2)
667                 {
668                     case 0x01ul:
669                         return true;
670                     case 0x02ul:
671                         return false;
672                     default:
673                         return false;
674                 }
675             }
676         #endif
677         return false;
678     #endif
679 }
680 
681 /* ========= Errata 15 ========= */
682 #if    defined (NRF9120_XXAA) || defined (DEVELOP_IN_NRF9120) \
683     || defined (NRF9160_XXAA) || defined (DEVELOP_IN_NRF9160)
684     #define NRF91_ERRATA_15_PRESENT 1
685 #else
686     #define NRF91_ERRATA_15_PRESENT 0
687 #endif
688 
689 #ifndef NRF91_ERRATA_15_ENABLE_WORKAROUND
690     #define NRF91_ERRATA_15_ENABLE_WORKAROUND NRF91_ERRATA_15_PRESENT
691 #endif
692 
nrf91_errata_15(void)693 static bool nrf91_errata_15(void)
694 {
695     #ifndef NRF91_SERIES
696         return false;
697     #else
698         #if defined (NRF9120_XXAA) || defined (DEVELOP_IN_NRF9120)\
699          || defined (NRF9160_XXAA) || defined (DEVELOP_IN_NRF9160)
700             #if defined(NRF_TRUSTZONE_NONSECURE)
701                 uint32_t var1 = (*((volatile uint32_t *)((uint32_t)NRF_FICR_NS + 0x00000130ul))) & 0x00000FFFul;
702                 uint32_t var2 = *((volatile uint32_t *)((uint32_t)NRF_FICR_NS + 0x00000134ul));
703             #else
704                 uint32_t var1 = (*((volatile uint32_t *)((uint32_t)NRF_FICR_S + 0x00000130ul))) & 0x00000FFFul;
705                 uint32_t var2 = *((volatile uint32_t *)((uint32_t)NRF_FICR_S + 0x00000134ul));
706             #endif
707         #endif
708         #if defined (NRF9120_XXAA) || defined (DEVELOP_IN_NRF9120)
709             __DSB();
710             if (var1 == 0x09)
711             {
712                 switch(var2)
713                 {
714                     case 0x01ul:
715                         return false;
716                     case 0x02ul:
717                         return true;
718                     default:
719                         return true;
720                 }
721             }
722         #endif
723         #if defined (NRF9160_XXAA) || defined (DEVELOP_IN_NRF9160)
724             __DSB();
725             if (var1 == 0x09)
726             {
727                 switch(var2)
728                 {
729                     case 0x01ul:
730                         return false;
731                     case 0x02ul:
732                         return true;
733                     default:
734                         return true;
735                 }
736             }
737         #endif
738         return false;
739     #endif
740 }
741 
742 /* ========= Errata 16 ========= */
743 #if    defined (NRF9120_XXAA) || defined (DEVELOP_IN_NRF9120) \
744     || defined (NRF9160_XXAA) || defined (DEVELOP_IN_NRF9160)
745     #define NRF91_ERRATA_16_PRESENT 1
746 #else
747     #define NRF91_ERRATA_16_PRESENT 0
748 #endif
749 
750 #ifndef NRF91_ERRATA_16_ENABLE_WORKAROUND
751     #define NRF91_ERRATA_16_ENABLE_WORKAROUND NRF91_ERRATA_16_PRESENT
752 #endif
753 
nrf91_errata_16(void)754 static bool nrf91_errata_16(void)
755 {
756     #ifndef NRF91_SERIES
757         return false;
758     #else
759         #if defined (NRF9120_XXAA) || defined (DEVELOP_IN_NRF9120)\
760          || defined (NRF9160_XXAA) || defined (DEVELOP_IN_NRF9160)
761             #if defined(NRF_TRUSTZONE_NONSECURE)
762                 uint32_t var1 = (*((volatile uint32_t *)((uint32_t)NRF_FICR_NS + 0x00000130ul))) & 0x00000FFFul;
763                 uint32_t var2 = *((volatile uint32_t *)((uint32_t)NRF_FICR_NS + 0x00000134ul));
764             #else
765                 uint32_t var1 = (*((volatile uint32_t *)((uint32_t)NRF_FICR_S + 0x00000130ul))) & 0x00000FFFul;
766                 uint32_t var2 = *((volatile uint32_t *)((uint32_t)NRF_FICR_S + 0x00000134ul));
767             #endif
768         #endif
769         #if defined (NRF9120_XXAA) || defined (DEVELOP_IN_NRF9120)
770             __DSB();
771             if (var1 == 0x09)
772             {
773                 switch(var2)
774                 {
775                     case 0x01ul:
776                         return true;
777                     case 0x02ul:
778                         return false;
779                     default:
780                         return false;
781                 }
782             }
783         #endif
784         #if defined (NRF9160_XXAA) || defined (DEVELOP_IN_NRF9160)
785             __DSB();
786             if (var1 == 0x09)
787             {
788                 switch(var2)
789                 {
790                     case 0x01ul:
791                         return true;
792                     case 0x02ul:
793                         return false;
794                     default:
795                         return false;
796                 }
797             }
798         #endif
799         return false;
800     #endif
801 }
802 
803 /* ========= Errata 17 ========= */
804 #if    defined (NRF9120_XXAA) || defined (DEVELOP_IN_NRF9120) \
805     || defined (NRF9160_XXAA) || defined (DEVELOP_IN_NRF9160)
806     #define NRF91_ERRATA_17_PRESENT 1
807 #else
808     #define NRF91_ERRATA_17_PRESENT 0
809 #endif
810 
811 #ifndef NRF91_ERRATA_17_ENABLE_WORKAROUND
812     #define NRF91_ERRATA_17_ENABLE_WORKAROUND NRF91_ERRATA_17_PRESENT
813 #endif
814 
nrf91_errata_17(void)815 static bool nrf91_errata_17(void)
816 {
817     #ifndef NRF91_SERIES
818         return false;
819     #else
820         #if defined (NRF9120_XXAA) || defined (DEVELOP_IN_NRF9120)\
821          || defined (NRF9160_XXAA) || defined (DEVELOP_IN_NRF9160)
822             #if defined(NRF_TRUSTZONE_NONSECURE)
823                 uint32_t var1 = (*((volatile uint32_t *)((uint32_t)NRF_FICR_NS + 0x00000130ul))) & 0x00000FFFul;
824                 uint32_t var2 = *((volatile uint32_t *)((uint32_t)NRF_FICR_NS + 0x00000134ul));
825             #else
826                 uint32_t var1 = (*((volatile uint32_t *)((uint32_t)NRF_FICR_S + 0x00000130ul))) & 0x00000FFFul;
827                 uint32_t var2 = *((volatile uint32_t *)((uint32_t)NRF_FICR_S + 0x00000134ul));
828             #endif
829         #endif
830         #if defined (NRF9120_XXAA) || defined (DEVELOP_IN_NRF9120)
831             __DSB();
832             if (var1 == 0x09)
833             {
834                 switch(var2)
835                 {
836                     case 0x01ul:
837                         return true;
838                     case 0x02ul:
839                         return false;
840                     default:
841                         return false;
842                 }
843             }
844         #endif
845         #if defined (NRF9160_XXAA) || defined (DEVELOP_IN_NRF9160)
846             __DSB();
847             if (var1 == 0x09)
848             {
849                 switch(var2)
850                 {
851                     case 0x01ul:
852                         return true;
853                     case 0x02ul:
854                         return false;
855                     default:
856                         return false;
857                 }
858             }
859         #endif
860         return false;
861     #endif
862 }
863 
864 /* ========= Errata 20 ========= */
865 #if    defined (NRF9120_XXAA) || defined (DEVELOP_IN_NRF9120) \
866     || defined (NRF9160_XXAA) || defined (DEVELOP_IN_NRF9160)
867     #define NRF91_ERRATA_20_PRESENT 1
868 #else
869     #define NRF91_ERRATA_20_PRESENT 0
870 #endif
871 
872 #ifndef NRF91_ERRATA_20_ENABLE_WORKAROUND
873     #define NRF91_ERRATA_20_ENABLE_WORKAROUND NRF91_ERRATA_20_PRESENT
874 #endif
875 
nrf91_errata_20(void)876 static bool nrf91_errata_20(void)
877 {
878     #ifndef NRF91_SERIES
879         return false;
880     #else
881         #if defined (NRF9120_XXAA) || defined (DEVELOP_IN_NRF9120)\
882          || defined (NRF9160_XXAA) || defined (DEVELOP_IN_NRF9160)
883             #if defined(NRF_TRUSTZONE_NONSECURE)
884                 uint32_t var1 = (*((volatile uint32_t *)((uint32_t)NRF_FICR_NS + 0x00000130ul))) & 0x00000FFFul;
885                 uint32_t var2 = *((volatile uint32_t *)((uint32_t)NRF_FICR_NS + 0x00000134ul));
886             #else
887                 uint32_t var1 = (*((volatile uint32_t *)((uint32_t)NRF_FICR_S + 0x00000130ul))) & 0x00000FFFul;
888                 uint32_t var2 = *((volatile uint32_t *)((uint32_t)NRF_FICR_S + 0x00000134ul));
889             #endif
890         #endif
891         #if defined (NRF9120_XXAA) || defined (DEVELOP_IN_NRF9120)
892             __DSB();
893             if (var1 == 0x09)
894             {
895                 switch(var2)
896                 {
897                     case 0x01ul:
898                         return true;
899                     case 0x02ul:
900                         return false;
901                     default:
902                         return false;
903                 }
904             }
905         #endif
906         #if defined (NRF9160_XXAA) || defined (DEVELOP_IN_NRF9160)
907             __DSB();
908             if (var1 == 0x09)
909             {
910                 switch(var2)
911                 {
912                     case 0x01ul:
913                         return true;
914                     case 0x02ul:
915                         return false;
916                     default:
917                         return false;
918                 }
919             }
920         #endif
921         return false;
922     #endif
923 }
924 
925 /* ========= Errata 21 ========= */
926 #if    defined (NRF9120_XXAA) || defined (DEVELOP_IN_NRF9120) \
927     || defined (NRF9160_XXAA) || defined (DEVELOP_IN_NRF9160)
928     #define NRF91_ERRATA_21_PRESENT 1
929 #else
930     #define NRF91_ERRATA_21_PRESENT 0
931 #endif
932 
933 #ifndef NRF91_ERRATA_21_ENABLE_WORKAROUND
934     #define NRF91_ERRATA_21_ENABLE_WORKAROUND NRF91_ERRATA_21_PRESENT
935 #endif
936 
nrf91_errata_21(void)937 static bool nrf91_errata_21(void)
938 {
939     #ifndef NRF91_SERIES
940         return false;
941     #else
942         #if defined (NRF9120_XXAA) || defined (DEVELOP_IN_NRF9120)\
943          || defined (NRF9160_XXAA) || defined (DEVELOP_IN_NRF9160)
944             #if defined(NRF_TRUSTZONE_NONSECURE)
945                 uint32_t var1 = (*((volatile uint32_t *)((uint32_t)NRF_FICR_NS + 0x00000130ul))) & 0x00000FFFul;
946                 uint32_t var2 = *((volatile uint32_t *)((uint32_t)NRF_FICR_NS + 0x00000134ul));
947             #else
948                 uint32_t var1 = (*((volatile uint32_t *)((uint32_t)NRF_FICR_S + 0x00000130ul))) & 0x00000FFFul;
949                 uint32_t var2 = *((volatile uint32_t *)((uint32_t)NRF_FICR_S + 0x00000134ul));
950             #endif
951         #endif
952         #if defined (NRF9120_XXAA) || defined (DEVELOP_IN_NRF9120)
953             __DSB();
954             if (var1 == 0x09)
955             {
956                 switch(var2)
957                 {
958                     case 0x01ul:
959                         return true;
960                     case 0x02ul:
961                         return true;
962                     default:
963                         return true;
964                 }
965             }
966         #endif
967         #if defined (NRF9160_XXAA) || defined (DEVELOP_IN_NRF9160)
968             __DSB();
969             if (var1 == 0x09)
970             {
971                 switch(var2)
972                 {
973                     case 0x01ul:
974                         return true;
975                     case 0x02ul:
976                         return true;
977                     default:
978                         return true;
979                 }
980             }
981         #endif
982         return false;
983     #endif
984 }
985 
986 /* ========= Errata 23 ========= */
987 #if    defined (NRF9120_XXAA) || defined (DEVELOP_IN_NRF9120) \
988     || defined (NRF9160_XXAA) || defined (DEVELOP_IN_NRF9160)
989     #define NRF91_ERRATA_23_PRESENT 1
990 #else
991     #define NRF91_ERRATA_23_PRESENT 0
992 #endif
993 
994 #ifndef NRF91_ERRATA_23_ENABLE_WORKAROUND
995     #define NRF91_ERRATA_23_ENABLE_WORKAROUND NRF91_ERRATA_23_PRESENT
996 #endif
997 
nrf91_errata_23(void)998 static bool nrf91_errata_23(void)
999 {
1000     #ifndef NRF91_SERIES
1001         return false;
1002     #else
1003         #if defined (NRF9120_XXAA) || defined (DEVELOP_IN_NRF9120)\
1004          || defined (NRF9160_XXAA) || defined (DEVELOP_IN_NRF9160)
1005             #if defined(NRF_TRUSTZONE_NONSECURE)
1006                 uint32_t var1 = (*((volatile uint32_t *)((uint32_t)NRF_FICR_NS + 0x00000130ul))) & 0x00000FFFul;
1007                 uint32_t var2 = *((volatile uint32_t *)((uint32_t)NRF_FICR_NS + 0x00000134ul));
1008             #else
1009                 uint32_t var1 = (*((volatile uint32_t *)((uint32_t)NRF_FICR_S + 0x00000130ul))) & 0x00000FFFul;
1010                 uint32_t var2 = *((volatile uint32_t *)((uint32_t)NRF_FICR_S + 0x00000134ul));
1011             #endif
1012         #endif
1013         #if defined (NRF9120_XXAA) || defined (DEVELOP_IN_NRF9120)
1014             __DSB();
1015             if (var1 == 0x09)
1016             {
1017                 switch(var2)
1018                 {
1019                     case 0x01ul:
1020                         return true;
1021                     case 0x02ul:
1022                         return true;
1023                     default:
1024                         return true;
1025                 }
1026             }
1027         #endif
1028         #if defined (NRF9160_XXAA) || defined (DEVELOP_IN_NRF9160)
1029             __DSB();
1030             if (var1 == 0x09)
1031             {
1032                 switch(var2)
1033                 {
1034                     case 0x01ul:
1035                         return true;
1036                     case 0x02ul:
1037                         return true;
1038                     default:
1039                         return true;
1040                 }
1041             }
1042         #endif
1043         return false;
1044     #endif
1045 }
1046 
1047 /* ========= Errata 24 ========= */
1048 #if    defined (NRF9120_XXAA) || defined (DEVELOP_IN_NRF9120) \
1049     || defined (NRF9160_XXAA) || defined (DEVELOP_IN_NRF9160)
1050     #define NRF91_ERRATA_24_PRESENT 1
1051 #else
1052     #define NRF91_ERRATA_24_PRESENT 0
1053 #endif
1054 
1055 #ifndef NRF91_ERRATA_24_ENABLE_WORKAROUND
1056     #define NRF91_ERRATA_24_ENABLE_WORKAROUND NRF91_ERRATA_24_PRESENT
1057 #endif
1058 
nrf91_errata_24(void)1059 static bool nrf91_errata_24(void)
1060 {
1061     #ifndef NRF91_SERIES
1062         return false;
1063     #else
1064         #if defined (NRF9120_XXAA) || defined (DEVELOP_IN_NRF9120)\
1065          || defined (NRF9160_XXAA) || defined (DEVELOP_IN_NRF9160)
1066             #if defined(NRF_TRUSTZONE_NONSECURE)
1067                 uint32_t var1 = (*((volatile uint32_t *)((uint32_t)NRF_FICR_NS + 0x00000130ul))) & 0x00000FFFul;
1068                 uint32_t var2 = *((volatile uint32_t *)((uint32_t)NRF_FICR_NS + 0x00000134ul));
1069             #else
1070                 uint32_t var1 = (*((volatile uint32_t *)((uint32_t)NRF_FICR_S + 0x00000130ul))) & 0x00000FFFul;
1071                 uint32_t var2 = *((volatile uint32_t *)((uint32_t)NRF_FICR_S + 0x00000134ul));
1072             #endif
1073         #endif
1074         #if defined (NRF9120_XXAA) || defined (DEVELOP_IN_NRF9120)
1075             __DSB();
1076             if (var1 == 0x09)
1077             {
1078                 switch(var2)
1079                 {
1080                     case 0x01ul:
1081                         return true;
1082                     case 0x02ul:
1083                         return true;
1084                     default:
1085                         return true;
1086                 }
1087             }
1088         #endif
1089         #if defined (NRF9160_XXAA) || defined (DEVELOP_IN_NRF9160)
1090             __DSB();
1091             if (var1 == 0x09)
1092             {
1093                 switch(var2)
1094                 {
1095                     case 0x01ul:
1096                         return true;
1097                     case 0x02ul:
1098                         return true;
1099                     default:
1100                         return true;
1101                 }
1102             }
1103         #endif
1104         return false;
1105     #endif
1106 }
1107 
1108 /* ========= Errata 26 ========= */
1109 #if    defined (NRF9120_XXAA) || defined (DEVELOP_IN_NRF9120) \
1110     || defined (NRF9160_XXAA) || defined (DEVELOP_IN_NRF9160)
1111     #define NRF91_ERRATA_26_PRESENT 1
1112 #else
1113     #define NRF91_ERRATA_26_PRESENT 0
1114 #endif
1115 
1116 #ifndef NRF91_ERRATA_26_ENABLE_WORKAROUND
1117     #define NRF91_ERRATA_26_ENABLE_WORKAROUND NRF91_ERRATA_26_PRESENT
1118 #endif
1119 
nrf91_errata_26(void)1120 static bool nrf91_errata_26(void)
1121 {
1122     #ifndef NRF91_SERIES
1123         return false;
1124     #else
1125         #if defined (NRF9120_XXAA) || defined (DEVELOP_IN_NRF9120)\
1126          || defined (NRF9160_XXAA) || defined (DEVELOP_IN_NRF9160)
1127             #if defined(NRF_TRUSTZONE_NONSECURE)
1128                 uint32_t var1 = (*((volatile uint32_t *)((uint32_t)NRF_FICR_NS + 0x00000130ul))) & 0x00000FFFul;
1129                 uint32_t var2 = *((volatile uint32_t *)((uint32_t)NRF_FICR_NS + 0x00000134ul));
1130             #else
1131                 uint32_t var1 = (*((volatile uint32_t *)((uint32_t)NRF_FICR_S + 0x00000130ul))) & 0x00000FFFul;
1132                 uint32_t var2 = *((volatile uint32_t *)((uint32_t)NRF_FICR_S + 0x00000134ul));
1133             #endif
1134         #endif
1135         #if defined (NRF9120_XXAA) || defined (DEVELOP_IN_NRF9120)
1136             __DSB();
1137             if (var1 == 0x09)
1138             {
1139                 switch(var2)
1140                 {
1141                     case 0x01ul:
1142                         return true;
1143                     case 0x02ul:
1144                         return true;
1145                     default:
1146                         return true;
1147                 }
1148             }
1149         #endif
1150         #if defined (NRF9160_XXAA) || defined (DEVELOP_IN_NRF9160)
1151             __DSB();
1152             if (var1 == 0x09)
1153             {
1154                 switch(var2)
1155                 {
1156                     case 0x01ul:
1157                         return true;
1158                     case 0x02ul:
1159                         return true;
1160                     default:
1161                         return true;
1162                 }
1163             }
1164         #endif
1165         return false;
1166     #endif
1167 }
1168 
1169 /* ========= Errata 27 ========= */
1170 #if    defined (NRF9120_XXAA) || defined (DEVELOP_IN_NRF9120) \
1171     || defined (NRF9160_XXAA) || defined (DEVELOP_IN_NRF9160)
1172     #define NRF91_ERRATA_27_PRESENT 1
1173 #else
1174     #define NRF91_ERRATA_27_PRESENT 0
1175 #endif
1176 
1177 #ifndef NRF91_ERRATA_27_ENABLE_WORKAROUND
1178     #define NRF91_ERRATA_27_ENABLE_WORKAROUND NRF91_ERRATA_27_PRESENT
1179 #endif
1180 
nrf91_errata_27(void)1181 static bool nrf91_errata_27(void)
1182 {
1183     #ifndef NRF91_SERIES
1184         return false;
1185     #else
1186         #if defined (NRF9120_XXAA) || defined (DEVELOP_IN_NRF9120)\
1187          || defined (NRF9160_XXAA) || defined (DEVELOP_IN_NRF9160)
1188             #if defined(NRF_TRUSTZONE_NONSECURE)
1189                 uint32_t var1 = (*((volatile uint32_t *)((uint32_t)NRF_FICR_NS + 0x00000130ul))) & 0x00000FFFul;
1190                 uint32_t var2 = *((volatile uint32_t *)((uint32_t)NRF_FICR_NS + 0x00000134ul));
1191             #else
1192                 uint32_t var1 = (*((volatile uint32_t *)((uint32_t)NRF_FICR_S + 0x00000130ul))) & 0x00000FFFul;
1193                 uint32_t var2 = *((volatile uint32_t *)((uint32_t)NRF_FICR_S + 0x00000134ul));
1194             #endif
1195         #endif
1196         #if defined (NRF9120_XXAA) || defined (DEVELOP_IN_NRF9120)
1197             __DSB();
1198             if (var1 == 0x09)
1199             {
1200                 switch(var2)
1201                 {
1202                     case 0x01ul:
1203                         return false;
1204                     case 0x02ul:
1205                         return true;
1206                     default:
1207                         return true;
1208                 }
1209             }
1210         #endif
1211         #if defined (NRF9160_XXAA) || defined (DEVELOP_IN_NRF9160)
1212             __DSB();
1213             if (var1 == 0x09)
1214             {
1215                 switch(var2)
1216                 {
1217                     case 0x01ul:
1218                         return false;
1219                     case 0x02ul:
1220                         return true;
1221                     default:
1222                         return true;
1223                 }
1224             }
1225         #endif
1226         return false;
1227     #endif
1228 }
1229 
1230 /* ========= Errata 28 ========= */
1231 #if    defined (NRF9120_XXAA) || defined (DEVELOP_IN_NRF9120) \
1232     || defined (NRF9160_XXAA) || defined (DEVELOP_IN_NRF9160)
1233     #define NRF91_ERRATA_28_PRESENT 1
1234 #else
1235     #define NRF91_ERRATA_28_PRESENT 0
1236 #endif
1237 
1238 #ifndef NRF91_ERRATA_28_ENABLE_WORKAROUND
1239     #define NRF91_ERRATA_28_ENABLE_WORKAROUND NRF91_ERRATA_28_PRESENT
1240 #endif
1241 
nrf91_errata_28(void)1242 static bool nrf91_errata_28(void)
1243 {
1244     #ifndef NRF91_SERIES
1245         return false;
1246     #else
1247         #if defined (NRF9120_XXAA) || defined (DEVELOP_IN_NRF9120)\
1248          || defined (NRF9160_XXAA) || defined (DEVELOP_IN_NRF9160)
1249             #if defined(NRF_TRUSTZONE_NONSECURE)
1250                 uint32_t var1 = (*((volatile uint32_t *)((uint32_t)NRF_FICR_NS + 0x00000130ul))) & 0x00000FFFul;
1251                 uint32_t var2 = *((volatile uint32_t *)((uint32_t)NRF_FICR_NS + 0x00000134ul));
1252             #else
1253                 uint32_t var1 = (*((volatile uint32_t *)((uint32_t)NRF_FICR_S + 0x00000130ul))) & 0x00000FFFul;
1254                 uint32_t var2 = *((volatile uint32_t *)((uint32_t)NRF_FICR_S + 0x00000134ul));
1255             #endif
1256         #endif
1257         #if defined (NRF9120_XXAA) || defined (DEVELOP_IN_NRF9120)
1258             __DSB();
1259             if (var1 == 0x09)
1260             {
1261                 switch(var2)
1262                 {
1263                     case 0x01ul:
1264                         return true;
1265                     case 0x02ul:
1266                         return true;
1267                     default:
1268                         return true;
1269                 }
1270             }
1271         #endif
1272         #if defined (NRF9160_XXAA) || defined (DEVELOP_IN_NRF9160)
1273             __DSB();
1274             if (var1 == 0x09)
1275             {
1276                 switch(var2)
1277                 {
1278                     case 0x01ul:
1279                         return true;
1280                     case 0x02ul:
1281                         return true;
1282                     default:
1283                         return true;
1284                 }
1285             }
1286         #endif
1287         return false;
1288     #endif
1289 }
1290 
1291 /* ========= Errata 29 ========= */
1292 #if    defined (NRF9120_XXAA) || defined (DEVELOP_IN_NRF9120) \
1293     || defined (NRF9160_XXAA) || defined (DEVELOP_IN_NRF9160)
1294     #define NRF91_ERRATA_29_PRESENT 1
1295 #else
1296     #define NRF91_ERRATA_29_PRESENT 0
1297 #endif
1298 
1299 #ifndef NRF91_ERRATA_29_ENABLE_WORKAROUND
1300     #define NRF91_ERRATA_29_ENABLE_WORKAROUND NRF91_ERRATA_29_PRESENT
1301 #endif
1302 
nrf91_errata_29(void)1303 static bool nrf91_errata_29(void)
1304 {
1305     #ifndef NRF91_SERIES
1306         return false;
1307     #else
1308         #if defined (NRF9120_XXAA) || defined (DEVELOP_IN_NRF9120)\
1309          || defined (NRF9160_XXAA) || defined (DEVELOP_IN_NRF9160)
1310             #if defined(NRF_TRUSTZONE_NONSECURE)
1311                 uint32_t var1 = (*((volatile uint32_t *)((uint32_t)NRF_FICR_NS + 0x00000130ul))) & 0x00000FFFul;
1312                 uint32_t var2 = *((volatile uint32_t *)((uint32_t)NRF_FICR_NS + 0x00000134ul));
1313             #else
1314                 uint32_t var1 = (*((volatile uint32_t *)((uint32_t)NRF_FICR_S + 0x00000130ul))) & 0x00000FFFul;
1315                 uint32_t var2 = *((volatile uint32_t *)((uint32_t)NRF_FICR_S + 0x00000134ul));
1316             #endif
1317         #endif
1318         #if defined (NRF9120_XXAA) || defined (DEVELOP_IN_NRF9120)
1319             __DSB();
1320             if (var1 == 0x09)
1321             {
1322                 switch(var2)
1323                 {
1324                     case 0x01ul:
1325                         return true;
1326                     case 0x02ul:
1327                         return true;
1328                     default:
1329                         return true;
1330                 }
1331             }
1332         #endif
1333         #if defined (NRF9160_XXAA) || defined (DEVELOP_IN_NRF9160)
1334             __DSB();
1335             if (var1 == 0x09)
1336             {
1337                 switch(var2)
1338                 {
1339                     case 0x01ul:
1340                         return true;
1341                     case 0x02ul:
1342                         return true;
1343                     default:
1344                         return true;
1345                 }
1346             }
1347         #endif
1348         return false;
1349     #endif
1350 }
1351 
1352 /* ========= Errata 30 ========= */
1353 #if    defined (NRF9120_XXAA) || defined (DEVELOP_IN_NRF9120) \
1354     || defined (NRF9160_XXAA) || defined (DEVELOP_IN_NRF9160)
1355     #define NRF91_ERRATA_30_PRESENT 1
1356 #else
1357     #define NRF91_ERRATA_30_PRESENT 0
1358 #endif
1359 
1360 #ifndef NRF91_ERRATA_30_ENABLE_WORKAROUND
1361     #define NRF91_ERRATA_30_ENABLE_WORKAROUND NRF91_ERRATA_30_PRESENT
1362 #endif
1363 
nrf91_errata_30(void)1364 static bool nrf91_errata_30(void)
1365 {
1366     #ifndef NRF91_SERIES
1367         return false;
1368     #else
1369         #if defined (NRF9120_XXAA) || defined (DEVELOP_IN_NRF9120)\
1370          || defined (NRF9160_XXAA) || defined (DEVELOP_IN_NRF9160)
1371             #if defined(NRF_TRUSTZONE_NONSECURE)
1372                 uint32_t var1 = (*((volatile uint32_t *)((uint32_t)NRF_FICR_NS + 0x00000130ul))) & 0x00000FFFul;
1373                 uint32_t var2 = *((volatile uint32_t *)((uint32_t)NRF_FICR_NS + 0x00000134ul));
1374             #else
1375                 uint32_t var1 = (*((volatile uint32_t *)((uint32_t)NRF_FICR_S + 0x00000130ul))) & 0x00000FFFul;
1376                 uint32_t var2 = *((volatile uint32_t *)((uint32_t)NRF_FICR_S + 0x00000134ul));
1377             #endif
1378         #endif
1379         #if defined (NRF9120_XXAA) || defined (DEVELOP_IN_NRF9120)
1380             __DSB();
1381             if (var1 == 0x09)
1382             {
1383                 switch(var2)
1384                 {
1385                     case 0x01ul:
1386                         return true;
1387                     case 0x02ul:
1388                         return true;
1389                     default:
1390                         return true;
1391                 }
1392             }
1393         #endif
1394         #if defined (NRF9160_XXAA) || defined (DEVELOP_IN_NRF9160)
1395             __DSB();
1396             if (var1 == 0x09)
1397             {
1398                 switch(var2)
1399                 {
1400                     case 0x01ul:
1401                         return true;
1402                     case 0x02ul:
1403                         return true;
1404                     default:
1405                         return true;
1406                 }
1407             }
1408         #endif
1409         return false;
1410     #endif
1411 }
1412 
1413 /* ========= Errata 31 ========= */
1414 #if    defined (NRF9120_XXAA) || defined (DEVELOP_IN_NRF9120) \
1415     || defined (NRF9160_XXAA) || defined (DEVELOP_IN_NRF9160)
1416     #define NRF91_ERRATA_31_PRESENT 1
1417 #else
1418     #define NRF91_ERRATA_31_PRESENT 0
1419 #endif
1420 
1421 #ifndef NRF91_ERRATA_31_ENABLE_WORKAROUND
1422     #define NRF91_ERRATA_31_ENABLE_WORKAROUND NRF91_ERRATA_31_PRESENT
1423 #endif
1424 
nrf91_errata_31(void)1425 static bool nrf91_errata_31(void)
1426 {
1427     #ifndef NRF91_SERIES
1428         return false;
1429     #else
1430         #if defined (NRF9120_XXAA) || defined (DEVELOP_IN_NRF9120)\
1431          || defined (NRF9160_XXAA) || defined (DEVELOP_IN_NRF9160)
1432             #if defined(NRF_TRUSTZONE_NONSECURE)
1433                 uint32_t var1 = (*((volatile uint32_t *)((uint32_t)NRF_FICR_NS + 0x00000130ul))) & 0x00000FFFul;
1434                 uint32_t var2 = *((volatile uint32_t *)((uint32_t)NRF_FICR_NS + 0x00000134ul));
1435             #else
1436                 uint32_t var1 = (*((volatile uint32_t *)((uint32_t)NRF_FICR_S + 0x00000130ul))) & 0x00000FFFul;
1437                 uint32_t var2 = *((volatile uint32_t *)((uint32_t)NRF_FICR_S + 0x00000134ul));
1438             #endif
1439         #endif
1440         #if defined (NRF9120_XXAA) || defined (DEVELOP_IN_NRF9120)
1441             __DSB();
1442             if (var1 == 0x09)
1443             {
1444                 switch(var2)
1445                 {
1446                     case 0x01ul:
1447                         return true;
1448                     case 0x02ul:
1449                         return true;
1450                     default:
1451                         return true;
1452                 }
1453             }
1454         #endif
1455         #if defined (NRF9160_XXAA) || defined (DEVELOP_IN_NRF9160)
1456             __DSB();
1457             if (var1 == 0x09)
1458             {
1459                 switch(var2)
1460                 {
1461                     case 0x01ul:
1462                         return true;
1463                     case 0x02ul:
1464                         return true;
1465                     default:
1466                         return true;
1467                 }
1468             }
1469         #endif
1470         return false;
1471     #endif
1472 }
1473 
1474 /* ========= Errata 32 ========= */
1475 #if    defined (NRF9120_XXAA) || defined (DEVELOP_IN_NRF9120) \
1476     || defined (NRF9160_XXAA) || defined (DEVELOP_IN_NRF9160)
1477     #define NRF91_ERRATA_32_PRESENT 1
1478 #else
1479     #define NRF91_ERRATA_32_PRESENT 0
1480 #endif
1481 
1482 #ifndef NRF91_ERRATA_32_ENABLE_WORKAROUND
1483     #define NRF91_ERRATA_32_ENABLE_WORKAROUND NRF91_ERRATA_32_PRESENT
1484 #endif
1485 
nrf91_errata_32(void)1486 static bool nrf91_errata_32(void)
1487 {
1488     #ifndef NRF91_SERIES
1489         return false;
1490     #else
1491         #if defined (NRF9120_XXAA) || defined (DEVELOP_IN_NRF9120)\
1492          || defined (NRF9160_XXAA) || defined (DEVELOP_IN_NRF9160)
1493             #if defined(NRF_TRUSTZONE_NONSECURE)
1494                 uint32_t var1 = (*((volatile uint32_t *)((uint32_t)NRF_FICR_NS + 0x00000130ul))) & 0x00000FFFul;
1495                 uint32_t var2 = *((volatile uint32_t *)((uint32_t)NRF_FICR_NS + 0x00000134ul));
1496             #else
1497                 uint32_t var1 = (*((volatile uint32_t *)((uint32_t)NRF_FICR_S + 0x00000130ul))) & 0x00000FFFul;
1498                 uint32_t var2 = *((volatile uint32_t *)((uint32_t)NRF_FICR_S + 0x00000134ul));
1499             #endif
1500         #endif
1501         #if defined (NRF9120_XXAA) || defined (DEVELOP_IN_NRF9120)
1502             __DSB();
1503             if (var1 == 0x09)
1504             {
1505                 switch(var2)
1506                 {
1507                     case 0x01ul:
1508                         return true;
1509                     case 0x02ul:
1510                         return true;
1511                     default:
1512                         return true;
1513                 }
1514             }
1515         #endif
1516         #if defined (NRF9160_XXAA) || defined (DEVELOP_IN_NRF9160)
1517             __DSB();
1518             if (var1 == 0x09)
1519             {
1520                 switch(var2)
1521                 {
1522                     case 0x01ul:
1523                         return true;
1524                     case 0x02ul:
1525                         return true;
1526                     default:
1527                         return true;
1528                 }
1529             }
1530         #endif
1531         return false;
1532     #endif
1533 }
1534 
1535 /* ========= Errata 33 ========= */
1536 #if    defined (NRF9120_XXAA) || defined (DEVELOP_IN_NRF9120) \
1537     || defined (NRF9160_XXAA) || defined (DEVELOP_IN_NRF9160)
1538     #define NRF91_ERRATA_33_PRESENT 1
1539 #else
1540     #define NRF91_ERRATA_33_PRESENT 0
1541 #endif
1542 
1543 #ifndef NRF91_ERRATA_33_ENABLE_WORKAROUND
1544     #define NRF91_ERRATA_33_ENABLE_WORKAROUND NRF91_ERRATA_33_PRESENT
1545 #endif
1546 
nrf91_errata_33(void)1547 static bool nrf91_errata_33(void)
1548 {
1549     #ifndef NRF91_SERIES
1550         return false;
1551     #else
1552         #if defined (NRF9120_XXAA) || defined (DEVELOP_IN_NRF9120)\
1553          || defined (NRF9160_XXAA) || defined (DEVELOP_IN_NRF9160)
1554             #if defined(NRF_TRUSTZONE_NONSECURE)
1555                 uint32_t var1 = (*((volatile uint32_t *)((uint32_t)NRF_FICR_NS + 0x00000130ul))) & 0x00000FFFul;
1556                 uint32_t var2 = *((volatile uint32_t *)((uint32_t)NRF_FICR_NS + 0x00000134ul));
1557             #else
1558                 uint32_t var1 = (*((volatile uint32_t *)((uint32_t)NRF_FICR_S + 0x00000130ul))) & 0x00000FFFul;
1559                 uint32_t var2 = *((volatile uint32_t *)((uint32_t)NRF_FICR_S + 0x00000134ul));
1560             #endif
1561         #endif
1562         #if defined (NRF9120_XXAA) || defined (DEVELOP_IN_NRF9120)
1563             __DSB();
1564             if (var1 == 0x09)
1565             {
1566                 switch(var2)
1567                 {
1568                     case 0x01ul:
1569                         return true;
1570                     case 0x02ul:
1571                         return true;
1572                     default:
1573                         return true;
1574                 }
1575             }
1576         #endif
1577         #if defined (NRF9160_XXAA) || defined (DEVELOP_IN_NRF9160)
1578             __DSB();
1579             if (var1 == 0x09)
1580             {
1581                 switch(var2)
1582                 {
1583                     case 0x01ul:
1584                         return true;
1585                     case 0x02ul:
1586                         return true;
1587                     default:
1588                         return true;
1589                 }
1590             }
1591         #endif
1592         return false;
1593     #endif
1594 }
1595 
1596 /* ========= Errata 35 ========= */
1597 #if    defined (NRF9120_XXAA) || defined (DEVELOP_IN_NRF9120) \
1598     || defined (NRF9160_XXAA) || defined (DEVELOP_IN_NRF9160)
1599     #define NRF91_ERRATA_35_PRESENT 1
1600 #else
1601     #define NRF91_ERRATA_35_PRESENT 0
1602 #endif
1603 
1604 #ifndef NRF91_ERRATA_35_ENABLE_WORKAROUND
1605     #define NRF91_ERRATA_35_ENABLE_WORKAROUND 0
1606 #endif
1607 
nrf91_errata_35(void)1608 static bool nrf91_errata_35(void)
1609 {
1610     #ifndef NRF91_SERIES
1611         return false;
1612     #else
1613         #if defined (NRF9120_XXAA) || defined (DEVELOP_IN_NRF9120)\
1614          || defined (NRF9160_XXAA) || defined (DEVELOP_IN_NRF9160)
1615             #if defined(NRF_TRUSTZONE_NONSECURE)
1616                 uint32_t var1 = (*((volatile uint32_t *)((uint32_t)NRF_FICR_NS + 0x00000130ul))) & 0x00000FFFul;
1617                 uint32_t var2 = *((volatile uint32_t *)((uint32_t)NRF_FICR_NS + 0x00000134ul));
1618             #else
1619                 uint32_t var1 = (*((volatile uint32_t *)((uint32_t)NRF_FICR_S + 0x00000130ul))) & 0x00000FFFul;
1620                 uint32_t var2 = *((volatile uint32_t *)((uint32_t)NRF_FICR_S + 0x00000134ul));
1621             #endif
1622         #endif
1623         #if defined (NRF9120_XXAA) || defined (DEVELOP_IN_NRF9120)
1624             __DSB();
1625             if (var1 == 0x09)
1626             {
1627                 switch(var2)
1628                 {
1629                     case 0x01ul:
1630                         return true;
1631                     case 0x02ul:
1632                         return true;
1633                     default:
1634                         return true;
1635                 }
1636             }
1637         #endif
1638         #if defined (NRF9160_XXAA) || defined (DEVELOP_IN_NRF9160)
1639             __DSB();
1640             if (var1 == 0x09)
1641             {
1642                 switch(var2)
1643                 {
1644                     case 0x01ul:
1645                         return true;
1646                     case 0x02ul:
1647                         return true;
1648                     default:
1649                         return true;
1650                 }
1651             }
1652         #endif
1653         return false;
1654     #endif
1655 }
1656 
1657 /* ========= Errata 36 ========= */
1658 #if defined (NRF9120_XXAA) || defined (DEVELOP_IN_NRF9120)
1659     #define NRF91_ERRATA_36_PRESENT 1
1660 #else
1661     #define NRF91_ERRATA_36_PRESENT 0
1662 #endif
1663 
1664 #ifndef NRF91_ERRATA_36_ENABLE_WORKAROUND
1665     #define NRF91_ERRATA_36_ENABLE_WORKAROUND NRF91_ERRATA_36_PRESENT
1666 #endif
1667 
nrf91_errata_36(void)1668 static bool nrf91_errata_36(void)
1669 {
1670     #ifndef NRF91_SERIES
1671         return false;
1672     #else
1673         #if defined (NRF9120_XXAA) || defined (DEVELOP_IN_NRF9120)
1674             #if defined(NRF_TRUSTZONE_NONSECURE)
1675                 uint32_t var1 = (*((volatile uint32_t *)((uint32_t)NRF_FICR_NS + 0x00000130ul))) & 0x00000FFFul;
1676                 uint32_t var2 = *((volatile uint32_t *)((uint32_t)NRF_FICR_NS + 0x00000134ul));
1677             #else
1678                 uint32_t var1 = (*((volatile uint32_t *)((uint32_t)NRF_FICR_S + 0x00000130ul))) & 0x00000FFFul;
1679                 uint32_t var2 = *((volatile uint32_t *)((uint32_t)NRF_FICR_S + 0x00000134ul));
1680             #endif
1681         #endif
1682         #if defined (NRF9120_XXAA) || defined (DEVELOP_IN_NRF9120)
1683             __DSB();
1684             if (var1 == 0x09)
1685             {
1686                 switch(var2)
1687                 {
1688                     case 0x01ul:
1689                         return false;
1690                     case 0x02ul:
1691                         return false;
1692                     case 0x03ul:
1693                         return true;
1694                     default:
1695                         return true;
1696                 }
1697             }
1698         #endif
1699         return false;
1700     #endif
1701 }
1702 
1703 /* ========= Errata 37 ========= */
1704 #define NRF91_ERRATA_37_PRESENT 0
1705 
1706 #ifndef NRF91_ERRATA_37_ENABLE_WORKAROUND
1707     #define NRF91_ERRATA_37_ENABLE_WORKAROUND NRF91_ERRATA_37_PRESENT
1708 #endif
1709 
nrf91_errata_37(void)1710 static bool nrf91_errata_37(void)
1711 {
1712     #ifndef NRF91_SERIES
1713         return false;
1714     #else
1715         return false;
1716     #endif
1717 }
1718 
1719 #endif /* NRF91_ERRATAS_H */
1720