1 /***************************************************************************//**
2  * @file
3  * @brief Security Management Unit (SMU) peripheral API
4  *******************************************************************************
5  * # License
6  * <b>Copyright 2018 Silicon Laboratories Inc. www.silabs.com</b>
7  *******************************************************************************
8  *
9  * SPDX-License-Identifier: Zlib
10  *
11  * The licensor of this software is Silicon Laboratories Inc.
12  *
13  * This software is provided 'as-is', without any express or implied
14  * warranty. In no event will the authors be held liable for any damages
15  * arising from the use of this software.
16  *
17  * Permission is granted to anyone to use this software for any purpose,
18  * including commercial applications, and to alter it and redistribute it
19  * freely, subject to the following restrictions:
20  *
21  * 1. The origin of this software must not be misrepresented; you must not
22  *    claim that you wrote the original software. If you use this software
23  *    in a product, an acknowledgment in the product documentation would be
24  *    appreciated but is not required.
25  * 2. Altered source versions must be plainly marked as such, and must not be
26  *    misrepresented as being the original software.
27  * 3. This notice may not be removed or altered from any source distribution.
28  *
29  ******************************************************************************/
30 
31 #ifndef EM_SMU_H
32 #define EM_SMU_H
33 
34 #include "em_device.h"
35 #if defined(SMU_COUNT) && (SMU_COUNT > 0)
36 
37 #include "em_assert.h"
38 #include "em_bus.h"
39 
40 #include <stdint.h>
41 #include <stdbool.h>
42 
43 #ifdef __cplusplus
44 extern "C" {
45 #endif
46 
47 /***************************************************************************//**
48  * @addtogroup smu SMU - Security Management Unit
49  * @brief Security Management Unit (SMU) Peripheral API
50  *
51  * @details
52  *   SMU forms the control and status/reporting component of bus-level
53  *   security in EFM32/EFR32 devices.
54  *
55  *   Peripheral-level protection is provided via the peripheral protection unit
56  *   (PPU). PPU provides hardware access barrier to any peripheral that is
57  *   configured to be protected. When an attempt is made to access a peripheral
58  *   without the required privilege/security level, PPU detects the fault
59  *   and intercepts the access. No write or read of the peripheral register
60  *   space occurs, and an all-zero value is returned if the access is a read.
61  *
62  *   Usage example
63  *   @include em_smu_init.c
64  * @{
65  ******************************************************************************/
66 
67 /*******************************************************************************
68  ********************************   ENUMS   ************************************
69  ******************************************************************************/
70 
71 /** SMU peripheral identifiers. */
72 typedef enum {
73 #if defined(_SILICON_LABS_GECKO_INTERNAL_SDID_84)
74   smuPeripheralACMP0      = _SMU_PPUPATD0_ACMP0_SHIFT,         /**< SMU peripheral identifier for ACMP0.     */
75   smuPeripheralACMP1      = _SMU_PPUPATD0_ACMP1_SHIFT,         /**< SMU peripheral identifier for ACMP1.     */
76   smuPeripheralADC0       = _SMU_PPUPATD0_ADC0_SHIFT,          /**< SMU peripheral identifier for ADC0.      */
77   smuPeripheralCMU        = _SMU_PPUPATD0_CMU_SHIFT,           /**< SMU peripheral identifier for CMU.       */
78   smuPeripheralCRYOTIMER  = _SMU_PPUPATD0_CRYOTIMER_SHIFT,     /**< SMU peripheral identifier for CRYOTIMER. */
79   smuPeripheralCRYPTO0    = _SMU_PPUPATD0_CRYPTO0_SHIFT,       /**< SMU peripheral identifier for CRYPTO0.   */
80   smuPeripheralCRYPTO1    = _SMU_PPUPATD0_CRYPTO1_SHIFT,       /**< SMU peripheral identifier for CRYPTO1.   */
81   smuPeripheralCSEN       = _SMU_PPUPATD0_CSEN_SHIFT,          /**< SMU peripheral identifier for CSEN.      */
82   smuPeripheralVDAC0      = _SMU_PPUPATD0_VDAC0_SHIFT,         /**< SMU peripheral identifier for VDAC0.     */
83   smuPeripheralPRS        = _SMU_PPUPATD0_PRS_SHIFT,           /**< SMU peripheral identifier for PRS.       */
84   smuPeripheralEMU        = _SMU_PPUPATD0_EMU_SHIFT,           /**< SMU peripheral identifier for EMU.       */
85   smuPeripheralFPUEH      = _SMU_PPUPATD0_FPUEH_SHIFT,         /**< SMU peripheral identifier for FPUEH.     */
86   smuPeripheralGPCRC      = _SMU_PPUPATD0_GPCRC_SHIFT,         /**< SMU peripheral identifier for GPCRC.     */
87   smuPeripheralGPIO       = _SMU_PPUPATD0_GPIO_SHIFT,          /**< SMU peripheral identifier for GPIO.      */
88   smuPeripheralI2C0       = _SMU_PPUPATD0_I2C0_SHIFT,          /**< SMU peripheral identifier for I2C0.      */
89   smuPeripheralI2C1       = _SMU_PPUPATD0_I2C1_SHIFT,          /**< SMU peripheral identifier for I2C1.      */
90   smuPeripheralIDAC0      = _SMU_PPUPATD0_IDAC0_SHIFT,         /**< SMU peripheral identifier for IDAC0.     */
91   smuPeripheralMSC        = _SMU_PPUPATD0_MSC_SHIFT,           /**< SMU peripheral identifier for MSC.       */
92   smuPeripheralLDMA       = _SMU_PPUPATD0_LDMA_SHIFT,          /**< SMU peripheral identifier for LDMA.      */
93   smuPeripheralLESENSE    = _SMU_PPUPATD0_LESENSE_SHIFT,       /**< SMU peripheral identifier for LESENSE.   */
94   smuPeripheralLETIMER0   = _SMU_PPUPATD0_LETIMER0_SHIFT,      /**< SMU peripheral identifier for LETIMER0.  */
95   smuPeripheralLEUART0    = _SMU_PPUPATD0_LEUART0_SHIFT,       /**< SMU peripheral identifier for LEUART0.   */
96   smuPeripheralPCNT0      = _SMU_PPUPATD0_PCNT0_SHIFT,         /**< SMU peripheral identifier for PCNT0.     */
97   smuPeripheralPCNT1      = _SMU_PPUPATD0_PCNT1_SHIFT,         /**< SMU peripheral identifier for PCNT1.     */
98   smuPeripheralPCNT2      = _SMU_PPUPATD0_PCNT2_SHIFT,         /**< SMU peripheral identifier for PCNT2.     */
99   smuPeripheralRMU        = 32 + _SMU_PPUPATD1_RMU_SHIFT,      /**< SMU peripheral identifier for RMU.       */
100   smuPeripheralRTCC       = 32 + _SMU_PPUPATD1_RTCC_SHIFT,     /**< SMU peripheral identifier for RTCC.      */
101   smuPeripheralSMU        = 32 + _SMU_PPUPATD1_SMU_SHIFT,      /**< SMU peripheral identifier for SMU.       */
102   smuPeripheralTIMER0     = 32 + _SMU_PPUPATD1_TIMER0_SHIFT,   /**< SMU peripheral identifier for TIMER0.    */
103   smuPeripheralTIMER1     = 32 + _SMU_PPUPATD1_TIMER1_SHIFT,   /**< SMU peripheral identifier for TIMER1.    */
104   smuPeripheralTRNG0      = 32 + _SMU_PPUPATD1_TRNG0_SHIFT,    /**< SMU peripheral identifier for TRNG0.     */
105   smuPeripheralUSART0     = 32 + _SMU_PPUPATD1_USART0_SHIFT,   /**< SMU peripheral identifier for USART0.    */
106   smuPeripheralUSART1     = 32 + _SMU_PPUPATD1_USART1_SHIFT,   /**< SMU peripheral identifier for USART1.    */
107   smuPeripheralUSART2     = 32 + _SMU_PPUPATD1_USART2_SHIFT,   /**< SMU peripheral identifier for USART2.    */
108   smuPeripheralUSART3     = 32 + _SMU_PPUPATD1_USART3_SHIFT,   /**< SMU peripheral identifier for USART3.    */
109   smuPeripheralWDOG0      = 32 + _SMU_PPUPATD1_WDOG0_SHIFT,    /**< SMU peripheral identifier for WDOG0.     */
110   smuPeripheralWDOG1      = 32 + _SMU_PPUPATD1_WDOG1_SHIFT,    /**< SMU peripheral identifier for WDOG1.     */
111   smuPeripheralWTIMER0    = 32 + _SMU_PPUPATD1_WTIMER0_SHIFT,  /**< SMU peripheral identifier for WTIMER0.   */
112   smuPeripheralWTIMER1    = 32 + _SMU_PPUPATD1_WTIMER1_SHIFT,  /**< SMU peripheral identifier for WTIMER1.   */
113 
114 #elif defined(_SILICON_LABS_GECKO_INTERNAL_SDID_89)
115   smuPeripheralACMP0      = _SMU_PPUPATD0_ACMP0_SHIFT,         /**< SMU peripheral identifier for ACMP0.     */
116   smuPeripheralACMP1      = _SMU_PPUPATD0_ACMP1_SHIFT,         /**< SMU peripheral identifier for ACMP1.     */
117   smuPeripheralADC0       = _SMU_PPUPATD0_ADC0_SHIFT,          /**< SMU peripheral identifier for ADC0.      */
118   smuPeripheralCMU        = _SMU_PPUPATD0_CMU_SHIFT,           /**< SMU peripheral identifier for CMU.       */
119   smuPeripheralCRYOTIMER  = _SMU_PPUPATD0_CRYOTIMER_SHIFT,     /**< SMU peripheral identifier for CRYOTIMER. */
120   smuPeripheralCRYPTO0    = _SMU_PPUPATD0_CRYPTO0_SHIFT,       /**< SMU peripheral identifier for CRYPTO0.   */
121   smuPeripheralCRYPTO1    = _SMU_PPUPATD0_CRYPTO1_SHIFT,       /**< SMU peripheral identifier for CRYPTO1.   */
122 #if defined(_SMU_PPUPATD0_CSEN_SHIFT)
123   smuPeripheralCSEN       = _SMU_PPUPATD0_CSEN_SHIFT,          /**< SMU peripheral identifier for CSEN.      */
124 #endif
125 #if defined(_SMU_PPUPATD0_VDAC0_SHIFT)
126   smuPeripheralVDAC0      = _SMU_PPUPATD0_VDAC0_SHIFT,         /**< SMU peripheral identifier for VDAC0.     */
127 #endif
128   smuPeripheralPRS        = _SMU_PPUPATD0_PRS_SHIFT,           /**< SMU peripheral identifier for PRS.       */
129   smuPeripheralEMU        = _SMU_PPUPATD0_EMU_SHIFT,           /**< SMU peripheral identifier for EMU.       */
130   smuPeripheralFPUEH      = _SMU_PPUPATD0_FPUEH_SHIFT,         /**< SMU peripheral identifier for FPUEH.     */
131   smuPeripheralGPCRC      = _SMU_PPUPATD0_GPCRC_SHIFT,         /**< SMU peripheral identifier for GPCRC.     */
132   smuPeripheralGPIO       = _SMU_PPUPATD0_GPIO_SHIFT,          /**< SMU peripheral identifier for GPIO.      */
133   smuPeripheralI2C0       = _SMU_PPUPATD0_I2C0_SHIFT,          /**< SMU peripheral identifier for I2C0.      */
134   smuPeripheralI2C1       = _SMU_PPUPATD0_I2C1_SHIFT,          /**< SMU peripheral identifier for I2C1.      */
135 #if defined(_SMU_PPUPATD0_IDAC0_SHIFT)
136   smuPeripheralIDAC0      = _SMU_PPUPATD0_IDAC0_SHIFT,         /**< SMU peripheral identifier for IDAC0.     */
137 #endif
138   smuPeripheralMSC        = _SMU_PPUPATD0_MSC_SHIFT,           /**< SMU peripheral identifier for MSC.       */
139   smuPeripheralLDMA       = _SMU_PPUPATD0_LDMA_SHIFT,          /**< SMU peripheral identifier for LDMA.      */
140   smuPeripheralLESENSE    = _SMU_PPUPATD0_LESENSE_SHIFT,       /**< SMU peripheral identifier for LESENSE.   */
141   smuPeripheralLETIMER0   = _SMU_PPUPATD0_LETIMER0_SHIFT,      /**< SMU peripheral identifier for LETIMER0.  */
142   smuPeripheralLEUART0    = _SMU_PPUPATD0_LEUART0_SHIFT,       /**< SMU peripheral identifier for LEUART0.   */
143   smuPeripheralPCNT0      = _SMU_PPUPATD0_PCNT0_SHIFT,         /**< SMU peripheral identifier for PCNT0.     */
144   smuPeripheralRMU        = 32 + _SMU_PPUPATD1_RMU_SHIFT,      /**< SMU peripheral identifier for RMU.       */
145   smuPeripheralRTCC       = 32 + _SMU_PPUPATD1_RTCC_SHIFT,     /**< SMU peripheral identifier for RTCC.      */
146   smuPeripheralSMU        = 32 + _SMU_PPUPATD1_SMU_SHIFT,      /**< SMU peripheral identifier for SMU.       */
147   smuPeripheralTIMER0     = 32 + _SMU_PPUPATD1_TIMER0_SHIFT,   /**< SMU peripheral identifier for TIMER0.    */
148   smuPeripheralTIMER1     = 32 + _SMU_PPUPATD1_TIMER1_SHIFT,   /**< SMU peripheral identifier for TIMER1.    */
149   smuPeripheralTRNG0      = 32 + _SMU_PPUPATD1_TRNG0_SHIFT,    /**< SMU peripheral identifier for TRNG0.     */
150   smuPeripheralUSART0     = 32 + _SMU_PPUPATD1_USART0_SHIFT,   /**< SMU peripheral identifier for USART0.    */
151   smuPeripheralUSART1     = 32 + _SMU_PPUPATD1_USART1_SHIFT,   /**< SMU peripheral identifier for USART1.    */
152   smuPeripheralUSART2     = 32 + _SMU_PPUPATD1_USART2_SHIFT,   /**< SMU peripheral identifier for USART2.    */
153   smuPeripheralWDOG0      = 32 + _SMU_PPUPATD1_WDOG0_SHIFT,    /**< SMU peripheral identifier for WDOG0.     */
154   smuPeripheralWDOG1      = 32 + _SMU_PPUPATD1_WDOG1_SHIFT,    /**< SMU peripheral identifier for WDOG1.     */
155   smuPeripheralWTIMER0    = 32 + _SMU_PPUPATD1_WTIMER0_SHIFT,  /**< SMU peripheral identifier for WTIMER0.   */
156 
157 #elif defined(_SILICON_LABS_GECKO_INTERNAL_SDID_95)
158 #if defined(_SMU_PPUPATD0_ACMP0_SHIFT)
159   smuPeripheralACMP0      = _SMU_PPUPATD0_ACMP0_SHIFT,         /**< SMU peripheral identifier for ACMP0.     */
160 #endif
161 #if defined(_SMU_PPUPATD0_ACMP1_SHIFT)
162   smuPeripheralACMP1      = _SMU_PPUPATD0_ACMP1_SHIFT,         /**< SMU peripheral identifier for ACMP1.     */
163 #endif
164 #if defined(_SMU_PPUPATD0_ADC0_SHIFT)
165   smuPeripheralADC0       = _SMU_PPUPATD0_ADC0_SHIFT,          /**< SMU peripheral identifier for ADC0.      */
166 #endif
167   smuPeripheralCMU        = _SMU_PPUPATD0_CMU_SHIFT,           /**< SMU peripheral identifier for CMU.       */
168   smuPeripheralCRYOTIMER  = _SMU_PPUPATD0_CRYOTIMER_SHIFT,     /**< SMU peripheral identifier for CRYOTIMER. */
169   smuPeripheralCRYPTO     = _SMU_PPUPATD0_CRYPTO0_SHIFT,       /**< SMU peripheral identifier for CRYPTO0.   */
170 #if defined(_SMU_PPUPATD0_VDAC0_SHIFT)
171   smuPeripheralVDAC0      = _SMU_PPUPATD0_VDAC0_SHIFT,         /**< SMU peripheral identifier for VDAC0.     */
172 #endif
173   smuPeripheralPRS        = _SMU_PPUPATD0_PRS_SHIFT,           /**< SMU peripheral identifier for PRS.       */
174   smuPeripheralEMU        = _SMU_PPUPATD0_EMU_SHIFT,           /**< SMU peripheral identifier for EMU.       */
175   smuPeripheralFPUEH      = _SMU_PPUPATD0_FPUEH_SHIFT,         /**< SMU peripheral identifier for FPUEH.     */
176   smuPeripheralGPCRC      = _SMU_PPUPATD0_GPCRC_SHIFT,         /**< SMU peripheral identifier for GPCRC.     */
177   smuPeripheralGPIO       = _SMU_PPUPATD0_GPIO_SHIFT,          /**< SMU peripheral identifier for GPIO.      */
178   smuPeripheralI2C0       = _SMU_PPUPATD0_I2C0_SHIFT,          /**< SMU peripheral identifier for I2C0.      */
179 #if defined(_SMU_PPUPATD0_IDAC0_SHIFT)
180   smuPeripheralIDAC0      = _SMU_PPUPATD0_IDAC0_SHIFT,         /**< SMU peripheral identifier for IDAC0.     */
181 #endif
182   smuPeripheralMSC        = _SMU_PPUPATD0_MSC_SHIFT,           /**< SMU peripheral identifier for MSC.       */
183   smuPeripheralLDMA       = _SMU_PPUPATD0_LDMA_SHIFT,          /**< SMU peripheral identifier for LDMA.      */
184 #if defined(_SMU_PPUPATD0_LESENSE_SHIFT)
185   smuPeripheralLESENSE    = _SMU_PPUPATD0_LESENSE_SHIFT,       /**< SMU peripheral identifier for LESENSE.   */
186 #endif
187   smuPeripheralLETIMER0   = _SMU_PPUPATD0_LETIMER0_SHIFT,      /**< SMU peripheral identifier for LETIMER0.  */
188   smuPeripheralLEUART     = _SMU_PPUPATD0_LEUART0_SHIFT,       /**< SMU peripheral identifier for LEUART0.   */
189 #if defined(_SMU_PPUPATD0_PCNT0_SHIFT)
190   smuPeripheralPCNT0      = _SMU_PPUPATD0_PCNT0_SHIFT,         /**< SMU peripheral identifier for PCNT0.     */
191 #endif
192   smuPeripheralRMU        = _SMU_PPUPATD0_RMU_SHIFT,           /**< SMU peripheral identifier for RMU.       */
193   smuPeripheralRTCC       = _SMU_PPUPATD0_RTCC_SHIFT,          /**< SMU peripheral identifier for RTCC.      */
194   smuPeripheralSMU        = _SMU_PPUPATD0_SMU_SHIFT,           /**< SMU peripheral identifier for SMU.       */
195   smuPeripheralTIMER0     = 32 + _SMU_PPUPATD1_TIMER0_SHIFT,   /**< SMU peripheral identifier for TIMER0.    */
196   smuPeripheralTIMER1     = 32 + _SMU_PPUPATD1_TIMER1_SHIFT,   /**< SMU peripheral identifier for TIMER1.    */
197   smuPeripheralTRNG0      = 32 + _SMU_PPUPATD1_TRNG0_SHIFT,    /**< SMU peripheral identifier for TRNG0.     */
198   smuPeripheralUSART0     = 32 + _SMU_PPUPATD1_USART0_SHIFT,   /**< SMU peripheral identifier for USART0.    */
199   smuPeripheralUSART1     = 32 + _SMU_PPUPATD1_USART1_SHIFT,   /**< SMU peripheral identifier for USART1.    */
200   smuPeripheralWDOG0      = 32 + _SMU_PPUPATD1_WDOG0_SHIFT,    /**< SMU peripheral identifier for WDOG0.     */
201   smuPeripheralWDOG1      = 32 + _SMU_PPUPATD1_WDOG1_SHIFT,    /**< SMU peripheral identifier for WDOG1.     */
202   smuPeripheralWTIMER0    = 32 + _SMU_PPUPATD1_WTIMER0_SHIFT,  /**< SMU peripheral identifier for WTIMER0.   */
203 
204 #elif defined(_SILICON_LABS_GECKO_INTERNAL_SDID_100)
205   smuPeripheralACMP0     = _SMU_PPUPATD0_ACMP0_SHIFT,          /**< SMU peripheral identifier for ACMP0.     */
206   smuPeripheralACMP1     = _SMU_PPUPATD0_ACMP1_SHIFT,          /**< SMU peripheral identifier for ACMP1.     */
207   smuPeripheralACMP2     = _SMU_PPUPATD0_ACMP2_SHIFT,          /**< SMU peripheral identifier for ACMP2.     */
208   smuPeripheralACMP3     = _SMU_PPUPATD0_ACMP3_SHIFT,          /**< SMU peripheral identifier for ACMP3.     */
209   smuPeripheralADC0      = _SMU_PPUPATD0_ADC0_SHIFT,           /**< SMU peripheral identifier for ADC0.      */
210   smuPeripheralADC1      = _SMU_PPUPATD0_ADC1_SHIFT,           /**< SMU peripheral identifier for ADC1.      */
211   smuPeripheralCAN0      = _SMU_PPUPATD0_CAN0_SHIFT,           /**< SMU peripheral identifier for CAN0.      */
212   smuPeripheralCAN1      = _SMU_PPUPATD0_CAN1_SHIFT,           /**< SMU peripheral identifier for CAN1.      */
213   smuPeripheralCMU       = _SMU_PPUPATD0_CMU_SHIFT,            /**< SMU peripheral identifier for CMU.       */
214   smuPeripheralCRYOTIMER = _SMU_PPUPATD0_CRYOTIMER_SHIFT,      /**< SMU peripheral identifier for CRYOTIMER. */
215   smuPeripheralCRYPTO0   = _SMU_PPUPATD0_CRYPTO0_SHIFT,        /**< SMU peripheral identifier for CRYPTO0.   */
216   smuPeripheralCSEN      = _SMU_PPUPATD0_CSEN_SHIFT,           /**< SMU peripheral identifier for CSEN.      */
217   smuPeripheralVDAC0     = _SMU_PPUPATD0_VDAC0_SHIFT,          /**< SMU peripheral identifier for VDAC0.     */
218   smuPeripheralPRS       = _SMU_PPUPATD0_PRS_SHIFT,            /**< SMU peripheral identifier for PRS.       */
219   smuPeripheralEBI       = _SMU_PPUPATD0_EBI_SHIFT,            /**< SMU peripheral identifier for EBI.       */
220   smuPeripheralEMU       = _SMU_PPUPATD0_EMU_SHIFT,            /**< SMU peripheral identifier for EMU.       */
221 #if defined(_SMU_PPUPATD0_ETH_SHIFT)
222   smuPeripheralETH       = _SMU_PPUPATD0_ETH_SHIFT,            /**< SMU peripheral identifier for ETH.       */
223 #endif
224   smuPeripheralFPUEH     = _SMU_PPUPATD0_FPUEH_SHIFT,          /**< SMU peripheral identifier for FPUEH.     */
225   smuPeripheralGPCRC     = _SMU_PPUPATD0_GPCRC_SHIFT,          /**< SMU peripheral identifier for GPCRC.     */
226   smuPeripheralGPIO      = _SMU_PPUPATD0_GPIO_SHIFT,           /**< SMU peripheral identifier for GPIO.      */
227   smuPeripheralI2C0      = _SMU_PPUPATD0_I2C0_SHIFT,           /**< SMU peripheral identifier for I2C0.      */
228   smuPeripheralI2C1      = _SMU_PPUPATD0_I2C1_SHIFT,           /**< SMU peripheral identifier for I2C1.      */
229   smuPeripheralI2C2      = _SMU_PPUPATD0_I2C2_SHIFT,           /**< SMU peripheral identifier for I2C2.      */
230   smuPeripheralIDAC0     = _SMU_PPUPATD0_IDAC0_SHIFT,          /**< SMU peripheral identifier for IDAC0.     */
231   smuPeripheralMSC       = _SMU_PPUPATD0_MSC_SHIFT,            /**< SMU peripheral identifier for MAC.       */
232 #if defined(_SMU_PPUPATD0_LCD_SHIFT)
233   smuPeripheralLCD       = _SMU_PPUPATD0_LCD_SHIFT,            /**< SMU peripheral identifier for LCD.       */
234 #endif
235   smuPeripheralLDMA      = _SMU_PPUPATD0_LDMA_SHIFT,           /**< SMU peripheral identifier for LDMA.      */
236   smuPeripheralLESENSE   = _SMU_PPUPATD0_LESENSE_SHIFT,        /**< SMU peripheral identifier for LESENSE.   */
237   smuPeripheralLETIMER0  = _SMU_PPUPATD0_LETIMER0_SHIFT,       /**< SMU peripheral identifier for LETIMER0.  */
238   smuPeripheralLETIMER1  = _SMU_PPUPATD0_LETIMER1_SHIFT,       /**< SMU peripheral identifier for LETIMER1.  */
239   smuPeripheralLEUART0   = _SMU_PPUPATD0_LEUART0_SHIFT,        /**< SMU peripheral identifier for LEUART0.   */
240   smuPeripheralLEUART1   = _SMU_PPUPATD0_LEUART1_SHIFT,        /**< SMU peripheral identifier for LEUART1.   */
241   smuPeripheralPCNT0     = 32 + _SMU_PPUPATD1_PCNT0_SHIFT,     /**< SMU peripheral identifier for PCNT0.     */
242   smuPeripheralPCNT1     = 32 + _SMU_PPUPATD1_PCNT1_SHIFT,     /**< SMU peripheral identifier for PCNT1.     */
243   smuPeripheralPCNT2     = 32 + _SMU_PPUPATD1_PCNT2_SHIFT,     /**< SMU peripheral identifier for PCNT2.     */
244 #if defined(_SMU_PPUPATD1_QSPI0_SHIFT)
245   smuPeripheralQSPI0     = 32 + _SMU_PPUPATD1_QSPI0_SHIFT,     /**< SMU peripheral identifier for QSPI0.     */
246 #endif
247   smuPeripheralRMU       = 32 + _SMU_PPUPATD1_RMU_SHIFT,       /**< SMU peripheral identifier for RMU.       */
248   smuPeripheralRTC       = 32 + _SMU_PPUPATD1_RTC_SHIFT,       /**< SMU peripheral identifier for RTC.       */
249   smuPeripheralRTCC      = 32 + _SMU_PPUPATD1_RTCC_SHIFT,      /**< SMU peripheral identifier for RTCC.      */
250 #if defined(_SMU_PPUPATD1_SDIO_SHIFT)
251   smuPeripheralSDIO      = 32 + _SMU_PPUPATD1_SDIO_SHIFT,      /**< SMU peripheral identifier for SDIO.      */
252 #endif
253   smuPeripheralSMU       = 32 + _SMU_PPUPATD1_SMU_SHIFT,       /**< SMU peripheral identifier for SMU.       */
254   smuPeripheralTIMER0    = 32 + _SMU_PPUPATD1_TIMER0_SHIFT,    /**< SMU peripheral identifier for TIMER0.    */
255   smuPeripheralTIMER1    = 32 + _SMU_PPUPATD1_TIMER1_SHIFT,    /**< SMU peripheral identifier for TIMER1.    */
256   smuPeripheralTIMER2    = 32 + _SMU_PPUPATD1_TIMER2_SHIFT,    /**< SMU peripheral identifier for TIMER2.    */
257   smuPeripheralTIMER3    = 32 + _SMU_PPUPATD1_TIMER3_SHIFT,    /**< SMU peripheral identifier for TIMER3.    */
258   smuPeripheralTIMER4    = 32 + _SMU_PPUPATD1_TIMER4_SHIFT,    /**< SMU peripheral identifier for TIMER4.    */
259   smuPeripheralTIMER5    = 32 + _SMU_PPUPATD1_TIMER5_SHIFT,    /**< SMU peripheral identifier for TIMER5.    */
260   smuPeripheralTIMER6    = 32 + _SMU_PPUPATD1_TIMER6_SHIFT,    /**< SMU peripheral identifier for TIMER6.    */
261   smuPeripheralTRNG0     = 32 + _SMU_PPUPATD1_TRNG0_SHIFT,     /**< SMU peripheral identifier for TRNG0.     */
262   smuPeripheralUART0     = 32 + _SMU_PPUPATD1_UART0_SHIFT,     /**< SMU peripheral identifier for UART0.     */
263   smuPeripheralUART1     = 32 + _SMU_PPUPATD1_UART1_SHIFT,     /**< SMU peripheral identifier for UART1.     */
264   smuPeripheralUSART0    = 32 + _SMU_PPUPATD1_USART0_SHIFT,    /**< SMU peripheral identifier for USART0.    */
265   smuPeripheralUSART1    = 32 + _SMU_PPUPATD1_USART1_SHIFT,    /**< SMU peripheral identifier for USART1.    */
266   smuPeripheralUSART2    = 32 + _SMU_PPUPATD1_USART2_SHIFT,    /**< SMU peripheral identifier for USART2.    */
267   smuPeripheralUSART3    = 32 + _SMU_PPUPATD1_USART3_SHIFT,    /**< SMU peripheral identifier for USART3.    */
268   smuPeripheralUSART4    = 32 + _SMU_PPUPATD1_USART4_SHIFT,    /**< SMU peripheral identifier for USART4.    */
269   smuPeripheralUSART5    = 32 + _SMU_PPUPATD1_USART5_SHIFT,    /**< SMU peripheral identifier for USART5.    */
270 #if defined(_SMU_PPUPATD1_USB_SHIFT)
271   smuPeripheralUSB       = 32 + _SMU_PPUPATD1_USB_SHIFT,       /**< SMU peripheral identifier for USB.       */
272 #endif
273   smuPeripheralWDOG0     = 32 + _SMU_PPUPATD1_WDOG0_SHIFT,     /**< SMU peripheral identifier for WDOG0.     */
274   smuPeripheralWDOG1     = 32 + _SMU_PPUPATD1_WDOG1_SHIFT,     /**< SMU peripheral identifier for WDOG1.     */
275   smuPeripheralWTIMER0   = 32 + _SMU_PPUPATD1_WTIMER0_SHIFT,   /**< SMU peripheral identifier for WTIMER0.   */
276   smuPeripheralWTIMER1   = 32 + _SMU_PPUPATD1_WTIMER1_SHIFT,   /**< SMU peripheral identifier for WTIMER1.   */
277   smuPeripheralWTIMER2   = 32 + _SMU_PPUPATD1_WTIMER2_SHIFT,   /**< SMU peripheral identifier for WTIMER2.   */
278   smuPeripheralWTIMER3   = 32 + _SMU_PPUPATD1_WTIMER3_SHIFT,   /**< SMU peripheral identifier for WTIMER3.   */
279 
280 #elif defined(_SILICON_LABS_GECKO_INTERNAL_SDID_106)
281   smuPeripheralACMP0     = _SMU_PPUPATD0_ACMP0_SHIFT,          /**< SMU peripheral identifier for ACMP0.     */
282   smuPeripheralACMP1     = _SMU_PPUPATD0_ACMP1_SHIFT,          /**< SMU peripheral identifier for ACMP1.     */
283   smuPeripheralACMP2     = _SMU_PPUPATD0_ACMP2_SHIFT,          /**< SMU peripheral identifier for ACMP2.     */
284   smuPeripheralADC0      = _SMU_PPUPATD0_ADC0_SHIFT,           /**< SMU peripheral identifier for ADC0.      */
285   smuPeripheralADC1      = _SMU_PPUPATD0_ADC1_SHIFT,           /**< SMU peripheral identifier for ADC1.      */
286   smuPeripheralCAN0      = _SMU_PPUPATD0_CAN0_SHIFT,           /**< SMU peripheral identifier for CAN0.      */
287   smuPeripheralCAN1      = _SMU_PPUPATD0_CAN1_SHIFT,           /**< SMU peripheral identifier for CAN1.      */
288   smuPeripheralCMU       = _SMU_PPUPATD0_CMU_SHIFT,            /**< SMU peripheral identifier for CMU.       */
289   smuPeripheralCRYOTIMER = _SMU_PPUPATD0_CRYOTIMER_SHIFT,      /**< SMU peripheral identifier for CRYOTIMER. */
290   smuPeripheralCRYPTO0   = _SMU_PPUPATD0_CRYPTO0_SHIFT,        /**< SMU peripheral identifier for CRYPTO0.   */
291   smuPeripheralCSEN      = _SMU_PPUPATD0_CSEN_SHIFT,           /**< SMU peripheral identifier for CSEN.      */
292   smuPeripheralVDAC0     = _SMU_PPUPATD0_VDAC0_SHIFT,          /**< SMU peripheral identifier for VDAC0.     */
293   smuPeripheralPRS       = _SMU_PPUPATD0_PRS_SHIFT,            /**< SMU peripheral identifier for PRS.       */
294   smuPeripheralEBI       = _SMU_PPUPATD0_EBI_SHIFT,            /**< SMU peripheral identifier for EBI.       */
295   smuPeripheralEMU       = _SMU_PPUPATD0_EMU_SHIFT,            /**< SMU peripheral identifier for EMU.       */
296 #if defined(_SMU_PPUPATD0_ETH_SHIFT)
297   smuPeripheralETH       = _SMU_PPUPATD0_ETH_SHIFT,            /**< SMU peripheral identifier for ETH.       */
298 #endif
299   smuPeripheralFPUEH     = _SMU_PPUPATD0_FPUEH_SHIFT,          /**< SMU peripheral identifier for FPUEH.     */
300   smuPeripheralGPCRC     = _SMU_PPUPATD0_GPCRC_SHIFT,          /**< SMU peripheral identifier for GPCRC.     */
301   smuPeripheralGPIO      = _SMU_PPUPATD0_GPIO_SHIFT,           /**< SMU peripheral identifier for GPIO.      */
302   smuPeripheralI2C0      = _SMU_PPUPATD0_I2C0_SHIFT,           /**< SMU peripheral identifier for I2C0.      */
303   smuPeripheralI2C1      = _SMU_PPUPATD0_I2C1_SHIFT,           /**< SMU peripheral identifier for I2C1.      */
304   smuPeripheralIDAC0     = _SMU_PPUPATD0_IDAC0_SHIFT,          /**< SMU peripheral identifier for IDAC0.     */
305   smuPeripheralMSC       = _SMU_PPUPATD0_MSC_SHIFT,            /**< SMU peripheral identifier for MAC.       */
306 #if defined(_SMU_PPUPATD0_LCD_SHIFT)
307   smuPeripheralLCD       = _SMU_PPUPATD0_LCD_SHIFT,            /**< SMU peripheral identifier for LCD.       */
308 #endif
309   smuPeripheralLDMA      = _SMU_PPUPATD0_LDMA_SHIFT,           /**< SMU peripheral identifier for LDMA.      */
310   smuPeripheralLESENSE   = _SMU_PPUPATD0_LESENSE_SHIFT,        /**< SMU peripheral identifier for LESENSE.   */
311   smuPeripheralLETIMER0  = _SMU_PPUPATD0_LETIMER0_SHIFT,       /**< SMU peripheral identifier for LETIMER0.  */
312   smuPeripheralLETIMER1  = _SMU_PPUPATD0_LETIMER1_SHIFT,       /**< SMU peripheral identifier for LETIMER1.  */
313   smuPeripheralLEUART0   = _SMU_PPUPATD0_LEUART0_SHIFT,        /**< SMU peripheral identifier for LEUART0.   */
314   smuPeripheralLEUART1   = _SMU_PPUPATD0_LEUART1_SHIFT,        /**< SMU peripheral identifier for LEUART1.   */
315   smuPeripheralPCNT0     = 32 + _SMU_PPUPATD1_PCNT0_SHIFT,     /**< SMU peripheral identifier for PCNT0.     */
316   smuPeripheralPCNT1     = 32 + _SMU_PPUPATD1_PCNT1_SHIFT,     /**< SMU peripheral identifier for PCNT1.     */
317   smuPeripheralPCNT2     = 32 + _SMU_PPUPATD1_PCNT2_SHIFT,     /**< SMU peripheral identifier for PCNT2.     */
318 #if defined(_SMU_PPUPATD1_QSPI0_SHIFT)
319   smuPeripheralQSPI0     = 32 + _SMU_PPUPATD1_QSPI0_SHIFT,     /**< SMU peripheral identifier for QSPI0.     */
320 #endif
321   smuPeripheralRMU       = 32 + _SMU_PPUPATD1_RMU_SHIFT,       /**< SMU peripheral identifier for RMU.       */
322   smuPeripheralRTC       = 32 + _SMU_PPUPATD1_RTC_SHIFT,       /**< SMU peripheral identifier for RTC.       */
323   smuPeripheralRTCC      = 32 + _SMU_PPUPATD1_RTCC_SHIFT,      /**< SMU peripheral identifier for RTCC.      */
324 #if defined(_SMU_PPUPATD1_SDIO_SHIFT)
325   smuPeripheralSDIO      = 32 + _SMU_PPUPATD1_SDIO_SHIFT,      /**< SMU peripheral identifier for SDIO.      */
326 #endif
327   smuPeripheralSMU       = 32 + _SMU_PPUPATD1_SMU_SHIFT,       /**< SMU peripheral identifier for SMU.       */
328   smuPeripheralTIMER0    = 32 + _SMU_PPUPATD1_TIMER0_SHIFT,    /**< SMU peripheral identifier for TIMER0.    */
329   smuPeripheralTIMER1    = 32 + _SMU_PPUPATD1_TIMER1_SHIFT,    /**< SMU peripheral identifier for TIMER1.    */
330   smuPeripheralTIMER2    = 32 + _SMU_PPUPATD1_TIMER2_SHIFT,    /**< SMU peripheral identifier for TIMER2.    */
331   smuPeripheralTIMER3    = 32 + _SMU_PPUPATD1_TIMER3_SHIFT,    /**< SMU peripheral identifier for TIMER3.    */
332   smuPeripheralTRNG0     = 32 + _SMU_PPUPATD1_TRNG0_SHIFT,     /**< SMU peripheral identifier for TRNG0.     */
333   smuPeripheralUART0     = 32 + _SMU_PPUPATD1_UART0_SHIFT,     /**< SMU peripheral identifier for UART0.     */
334   smuPeripheralUART1     = 32 + _SMU_PPUPATD1_UART1_SHIFT,     /**< SMU peripheral identifier for UART1.     */
335   smuPeripheralUSART0    = 32 + _SMU_PPUPATD1_USART0_SHIFT,    /**< SMU peripheral identifier for USART0.    */
336   smuPeripheralUSART1    = 32 + _SMU_PPUPATD1_USART1_SHIFT,    /**< SMU peripheral identifier for USART1.    */
337   smuPeripheralUSART2    = 32 + _SMU_PPUPATD1_USART2_SHIFT,    /**< SMU peripheral identifier for USART2.    */
338   smuPeripheralUSART3    = 32 + _SMU_PPUPATD1_USART3_SHIFT,    /**< SMU peripheral identifier for USART3.    */
339   smuPeripheralUSART4    = 32 + _SMU_PPUPATD1_USART4_SHIFT,    /**< SMU peripheral identifier for USART4.    */
340 #if defined(_SMU_PPUPATD1_USB_SHIFT)
341   smuPeripheralUSB       = 32 + _SMU_PPUPATD1_USB_SHIFT,       /**< SMU peripheral identifier for USB.       */
342 #endif
343   smuPeripheralWDOG0     = 32 + _SMU_PPUPATD1_WDOG0_SHIFT,     /**< SMU peripheral identifier for WDOG0.     */
344   smuPeripheralWDOG1     = 32 + _SMU_PPUPATD1_WDOG1_SHIFT,     /**< SMU peripheral identifier for WDOG1.     */
345   smuPeripheralWTIMER0   = 32 + _SMU_PPUPATD1_WTIMER0_SHIFT,   /**< SMU peripheral identifier for WTIMER0.   */
346   smuPeripheralWTIMER1   = 32 + _SMU_PPUPATD1_WTIMER1_SHIFT,   /**< SMU peripheral identifier for WTIMER1.   */
347 
348 #elif defined(_SILICON_LABS_GECKO_INTERNAL_SDID_103)
349   smuPeripheralACMP0     = _SMU_PPUPATD0_ACMP0_SHIFT,          /**< SMU peripheral identifier for ACMP0.     */
350   smuPeripheralACMP1     = _SMU_PPUPATD0_ACMP1_SHIFT,          /**< SMU peripheral identifier for ACMP1.     */
351   smuPeripheralADC0      = _SMU_PPUPATD0_ADC0_SHIFT,           /**< SMU peripheral identifier for ADC0.      */
352   smuPeripheralCAN0      = _SMU_PPUPATD0_CAN0_SHIFT,           /**< SMU peripheral identifier for CAN0.      */
353   smuPeripheralCMU       = _SMU_PPUPATD0_CMU_SHIFT,            /**< SMU peripheral identifier for CMU.       */
354   smuPeripheralCRYOTIMER = _SMU_PPUPATD0_CRYOTIMER_SHIFT,      /**< SMU peripheral identifier for CRYOTIMER. */
355   smuPeripheralCRYPTO0   = _SMU_PPUPATD0_CRYPTO0_SHIFT,        /**< SMU peripheral identifier for CRYPTO0.   */
356   smuPeripheralCSEN      = _SMU_PPUPATD0_CSEN_SHIFT,           /**< SMU peripheral identifier for CSEN.      */
357   smuPeripheralVDAC0     = _SMU_PPUPATD0_VDAC0_SHIFT,          /**< SMU peripheral identifier for VDAC0.     */
358   smuPeripheralPRS       = _SMU_PPUPATD0_PRS_SHIFT,            /**< SMU peripheral identifier for PRS.       */
359   smuPeripheralEMU       = _SMU_PPUPATD0_EMU_SHIFT,            /**< SMU peripheral identifier for EMU.       */
360   smuPeripheralGPCRC     = _SMU_PPUPATD0_GPCRC_SHIFT,          /**< SMU peripheral identifier for GPCRC.     */
361   smuPeripheralGPIO      = _SMU_PPUPATD0_GPIO_SHIFT,           /**< SMU peripheral identifier for GPIO.      */
362   smuPeripheralI2C0      = _SMU_PPUPATD0_I2C0_SHIFT,           /**< SMU peripheral identifier for I2C0.      */
363   smuPeripheralI2C1      = _SMU_PPUPATD0_I2C1_SHIFT,           /**< SMU peripheral identifier for I2C1.      */
364   smuPeripheralMSC       = _SMU_PPUPATD0_MSC_SHIFT,            /**< SMU peripheral identifier for MAC.       */
365 #if defined(_SMU_PPUPATD0_LCD_SHIFT)
366   smuPeripheralLCD       = _SMU_PPUPATD0_LCD_SHIFT,            /**< SMU peripheral identifier for LCD.       */
367 #endif
368   smuPeripheralLDMA      = _SMU_PPUPATD0_LDMA_SHIFT,           /**< SMU peripheral identifier for LDMA.      */
369   smuPeripheralLESENSE   = _SMU_PPUPATD0_LESENSE_SHIFT,        /**< SMU peripheral identifier for LESENSE.   */
370   smuPeripheralLETIMER0  = _SMU_PPUPATD0_LETIMER0_SHIFT,       /**< SMU peripheral identifier for LETIMER0.  */
371   smuPeripheralLEUART0   = _SMU_PPUPATD0_LEUART0_SHIFT,        /**< SMU peripheral identifier for LEUART0.   */
372   smuPeripheralPCNT0     = _SMU_PPUPATD0_PCNT0_SHIFT,          /**< SMU peripheral identifier for PCNT0.     */
373   smuPeripheralRMU       = _SMU_PPUPATD0_RMU_SHIFT,            /**< SMU peripheral identifier for RMU.       */
374   smuPeripheralRTCC      = _SMU_PPUPATD0_RTCC_SHIFT,           /**< SMU peripheral identifier for RTCC.      */
375   smuPeripheralSMU       = _SMU_PPUPATD0_SMU_SHIFT,            /**< SMU peripheral identifier for SMU.       */
376   smuPeripheralTIMER0    = _SMU_PPUPATD0_TIMER0_SHIFT,         /**< SMU peripheral identifier for TIMER0.    */
377   smuPeripheralTIMER1    = _SMU_PPUPATD0_TIMER1_SHIFT,         /**< SMU peripheral identifier for TIMER0.    */
378   smuPeripheralTRNG0     = _SMU_PPUPATD0_TRNG0_SHIFT,          /**< SMU peripheral identifier for TRNG0.     */
379   smuPeripheralUART0     = _SMU_PPUPATD0_UART0_SHIFT,          /**< SMU peripheral identifier for UART0.     */
380   smuPeripheralUSART0    = _SMU_PPUPATD0_USART0_SHIFT,         /**< SMU peripheral identifier for USART0.    */
381   smuPeripheralUSART1    = _SMU_PPUPATD0_USART1_SHIFT,         /**< SMU peripheral identifier for USART1.    */
382   smuPeripheralUSART2    = _SMU_PPUPATD0_USART2_SHIFT,         /**< SMU peripheral identifier for USART2.    */
383   smuPeripheralUSART3    = 32 + _SMU_PPUPATD1_USART3_SHIFT,    /**< SMU peripheral identifier for USART3.    */
384   smuPeripheralWDOG0     = 32 + _SMU_PPUPATD1_WDOG0_SHIFT,     /**< SMU peripheral identifier for WDOG0.     */
385   smuPeripheralWTIMER0   = 32 + _SMU_PPUPATD1_WTIMER0_SHIFT,   /**< SMU peripheral identifier for WTIMER0.   */
386   smuPeripheralWTIMER1   = 32 + _SMU_PPUPATD1_WTIMER1_SHIFT,   /**< SMU peripheral identifier for WTIMER1.   */
387 
388 #elif defined(_SILICON_LABS_32B_SERIES_2)
389 #if defined(SMU_PPUPATD0_SCRATCHPAD)
390   smuPeripheralSCRATCHPAD   = _SMU_PPUPATD0_SCRATCHPAD_SHIFT,     /**< SMU peripheral identifier for SCRATCHPAD */
391 #endif
392   smuPeripheralEMU          = _SMU_PPUPATD0_EMU_SHIFT,            /**< SMU peripheral identifier for EMU       */
393   smuPeripheralCMU          = _SMU_PPUPATD0_CMU_SHIFT,            /**< SMU peripheral identifier for CMU       */
394 #if defined(_SMU_PPUPATD0_HFXO0_SHIFT)
395   smuPeripheralHFXO         = _SMU_PPUPATD0_HFXO0_SHIFT,          /**< SMU peripheral identifier for HFXO0     */
396 #endif
397   smuPeripheralHFRCO0       = _SMU_PPUPATD0_HFRCO0_SHIFT,         /**< SMU peripheral identifier for HFRCO0    */
398   smuPeripheralFSRCO        = _SMU_PPUPATD0_FSRCO_SHIFT,          /**< SMU peripheral identifier for FSRCO     */
399   smuPeripheralDPLL0        = _SMU_PPUPATD0_DPLL0_SHIFT,          /**< SMU peripheral identifier for DPLL0     */
400   smuPeripheralLFXO         = _SMU_PPUPATD0_LFXO_SHIFT,           /**< SMU peripheral identifier for LFXO      */
401   smuPeripheralLFRCO        = _SMU_PPUPATD0_LFRCO_SHIFT,          /**< SMU peripheral identifier for LFRCO     */
402   smuPeripheralULFRCO       = _SMU_PPUPATD0_ULFRCO_SHIFT,         /**< SMU peripheral identifier for ULFRCO    */
403   smuPeripheralMSC          = _SMU_PPUPATD0_MSC_SHIFT,            /**< SMU peripheral identifier for MSC       */
404   smuPeripheralICACHE0      = _SMU_PPUPATD0_ICACHE0_SHIFT,        /**< SMU peripheral identifier for ICACHE0   */
405   smuPeripheralPRS          = _SMU_PPUPATD0_PRS_SHIFT,            /**< SMU peripheral identifier for PRS       */
406   smuPeripheralGPIO         = _SMU_PPUPATD0_GPIO_SHIFT,           /**< SMU peripheral identifier for GPIO      */
407   smuPeripheralLDMA         = _SMU_PPUPATD0_LDMA_SHIFT,           /**< SMU peripheral identifier for LDMA      */
408   smuPeripheralLDMAXBAR     = _SMU_PPUPATD0_LDMAXBAR_SHIFT,       /**< SMU peripheral identifier for LDMAXBAR  */
409   smuPeripheralTIMER0       = _SMU_PPUPATD0_TIMER0_SHIFT,         /**< SMU peripheral identifier for TIMER0    */
410   smuPeripheralTIMER1       = _SMU_PPUPATD0_TIMER1_SHIFT,         /**< SMU peripheral identifier for TIMER1    */
411   smuPeripheralTIMER2       = _SMU_PPUPATD0_TIMER2_SHIFT,         /**< SMU peripheral identifier for TIMER2    */
412   smuPeripheralTIMER3       = _SMU_PPUPATD0_TIMER3_SHIFT,         /**< SMU peripheral identifier for TIMER3    */
413 #if defined(_SMU_PPUPATD0_TIMER4_SHIFT)
414   smuPeripheralTIMER4       = _SMU_PPUPATD0_TIMER4_SHIFT,         /**< SMU peripheral identifier for TIMER4    */
415 #endif
416   smuPeripheralUSART0       = _SMU_PPUPATD0_USART0_SHIFT,         /**< SMU peripheral identifier for USART0    */
417 #if defined(_SMU_PPUPATD0_USART1_SHIFT)
418   smuPeripheralUSART1       = _SMU_PPUPATD0_USART1_SHIFT,         /**< SMU peripheral identifier for USART1    */
419 #endif
420 #if defined(_SMU_PPUPATD0_USART2_SHIFT)
421   smuPeripheralUSART2       = _SMU_PPUPATD0_USART2_SHIFT,         /**< SMU peripheral identifier for USART2    */
422 #endif
423   smuPeripheralBURTC        = _SMU_PPUPATD0_BURTC_SHIFT,          /**< SMU peripheral identifier for BURTC     */
424   smuPeripheralI2C1         = _SMU_PPUPATD0_I2C1_SHIFT,           /**< SMU peripheral identifier for I2C1      */
425   smuPeripheralCHIPTESTCTRL = _SMU_PPUPATD0_CHIPTESTCTRL_SHIFT,   /**< SMU peripheral identifier for CHIPTESTCTRL */
426 #if defined(_SMU_PPUPATD0_SYSCFGCFGNS_SHIFT)
427   smuPeripheralSYSCFGCFGNS  = _SMU_PPUPATD0_SYSCFGCFGNS_SHIFT,    /**< SMU peripheral identifier for SYSCFGCFGNS */
428 #endif
429 
430 #if defined(SMU_PPUPATD0_LVGD)
431   smuPeripheralLVGD         = _SMU_PPUPATD0_LVGD_SHIFT,           /**< SMU peripheral identifier for LVGD      */
432 #endif
433   smuPeripheralSYSCFG       = _SMU_PPUPATD0_SYSCFG_SHIFT,         /**< SMU peripheral identifier for SYSCFG    */
434   smuPeripheralBURAM        = _SMU_PPUPATD0_BURAM_SHIFT,          /**< SMU peripheral identifier for BURAM     */
435 #if defined(_SMU_PPUPATD0_IFADCDEBUG_SHIFT)
436   smuPeripheralIFADCDEBUG   = _SMU_PPUPATD0_IFADCDEBUG_SHIFT,     /**< SMU peripheral identifier for IFADCDEBUG*/
437 #endif
438   smuPeripheralGPCRC        = _SMU_PPUPATD0_GPCRC_SHIFT,          /**< SMU peripheral identifier for GPCRC     */
439 #if defined(_SMU_PPUPATD0_RTCC_SHIFT)
440   smuPeripheralRTCC         = _SMU_PPUPATD0_RTCC_SHIFT,           /**< SMU peripheral identifier for RTCC      */
441 #endif
442 #if defined(_SMU_PPUPATD0_HOSTMAILBOX_SHIFT)
443   smuPeripheralHOSTMAILBOX  = _SMU_PPUPATD0_HOSTMAILBOX_SHIFT,    /**< SMU peripheral identifier for HOSTMAILBOX */
444 #endif
445 #if defined(_SMU_PPUPATD0_EUSART0_SHIFT)
446   smuPeripheralEUSART0      = _SMU_PPUPATD0_EUSART0_SHIFT,        /**< SMU peripheral identifier for EUSART0   */
447 #endif
448 #if defined(_SMU_PPUPATD0_EUSART1_SHIFT)
449   smuPeripheralEUSART1      = _SMU_PPUPATD0_EUSART1_SHIFT,        /**< SMU peripheral identifier for EUSART1   */
450 #endif
451 #if defined(_SMU_PPUPATD0_EUSART2_SHIFT)
452   smuPeripheralEUSART2      = _SMU_PPUPATD0_EUSART2_SHIFT,        /**< SMU peripheral identifier for EUSART2   */
453 #endif
454 #if defined(_SMU_PPUPATD1_RTCC_SHIFT)
455   smuPeripheralRTCC         = 32 + _SMU_PPUPATD1_RTCC_SHIFT,      /**< SMU peripheral identifier for RTCC      */
456 #endif
457 #if defined(_SMU_PPUPATD1_SYSRTC_SHIFT)
458   smuPeripheralSYSRTC       = 32 + _SMU_PPUPATD1_SYSRTC_SHIFT,    /**< SMU peripheral identifier for SYSRTC    */
459 #endif
460 #if defined(_SMU_PPUPATD1_LCD_SHIFT)
461   smuPeripheralLCD          = 32 + _SMU_PPUPATD1_LCD_SHIFT,       /**< SMU peripheral identifier for LCD       */
462 #endif
463 #if defined(_SMU_PPUPATD1_KEYPAD_SHIFT)
464   smuPeripheralKEYPAD       = 32 + _SMU_PPUPATD1_KEYPAD_SHIFT,    /**< SMU peripheral identifier for KEYPAD    */
465 #endif
466 #if defined(_SMU_PPUPATD1_DMEM_SHIFT)
467   smuPeripheralDMEM         = 32 + _SMU_PPUPATD1_DMEM_SHIFT,      /**< SMU peripheral identifier for DMEM      */
468 #endif
469 #if defined(_SMU_PPUPATD1_LCDRF_SHIFT)
470   smuPeripheralLCDRF        = 32 + _SMU_PPUPATD1_LCDRF_SHIFT,     /**< SMU peripheral identifier for LCDRF     */
471 #endif
472 #if defined(_SMU_PPUPATD1_PFMXPPRF_SHIFT)
473   smuPeripheralPFMXPPRF     = 32 + _SMU_PPUPATD1_PFMXPPRF_SHIFT,  /**< SMU peripheral identifier for PFMXPPRF  */
474 #endif
475 #if defined(_SMU_PPUPATD1_VDAC0_SHIFT)
476   smuPeripheralVDAC0        = 32 + _SMU_PPUPATD1_VDAC0_SHIFT,     /**< SMU peripheral identifier for VDAC0     */
477 #endif
478 #if defined(_SMU_PPUPATD1_PCNT_SHIFT)
479   smuPeripheralPCNT         = 32 + _SMU_PPUPATD1_PCNT_SHIFT,      /**< SMU peripheral identifier for PCNT      */
480 #endif
481 #if defined(_SMU_PPUPATD1_LESENSE_SHIFT)
482   smuPeripheralLESENSE      = 32 + _SMU_PPUPATD1_LESENSE_SHIFT,   /**< SMU peripheral identifier for LESENSE   */
483 #endif
484 #if defined(_SMU_PPUPATD1_HFRCO1_SHIFT)
485   smuPeripheralHFRCO1       = 32 + _SMU_PPUPATD1_HFRCO1_SHIFT,    /**< SMU peripheral identifier for HFRCO1    */
486 #endif
487 #if defined(_SMU_PPUPATD1_HFXO0_SHIFT)
488   smuPeripheralHFXO0        = 32 + _SMU_PPUPATD1_HFXO0_SHIFT,     /**< SMU peripheral identifier for HFXO0     */
489 #endif
490 #if defined(_SMU_PPUPATD1_DCDC_SHIFT)
491   smuPeripheralDCDC         = 32 + _SMU_PPUPATD1_DCDC_SHIFT,      /**< SMU peripheral identifier for DCDC      */
492 #endif
493 #if defined(_SMU_PPUPATD1_PDM_SHIFT)
494   smuPeripheralPDM          = 32 + _SMU_PPUPATD1_PDM_SHIFT,       /**< SMU peripheral identifier for PDM       */
495 #endif
496 #if defined(_SMU_PPUPATD1_RFSENSE_SHIFT)
497   smuPeripheralRFSENSE      = 32 + _SMU_PPUPATD1_RFSENSE_SHIFT,   /**< SMU peripheral identifier for RFSENSE   */
498 #endif
499   smuPeripheralLETIMER0     = 32 + _SMU_PPUPATD1_LETIMER0_SHIFT,  /**< SMU peripheral identifier for LETIMER   */
500   smuPeripheralIADC0        = 32 + _SMU_PPUPATD1_IADC0_SHIFT,     /**< SMU peripheral identifier for IADC0     */
501 #if defined(_SMU_PPUPATD1_ACMP0_SHIFT)
502   smuPeripheralACMP0        = 32 + _SMU_PPUPATD1_ACMP0_SHIFT,     /**< SMU peripheral identifier for ACMP0     */
503   smuPeripheralACMP1        = 32 + _SMU_PPUPATD1_ACMP1_SHIFT,     /**< SMU peripheral identifier for ACMP1     */
504 #endif
505   smuPeripheralI2C0         = 32 + _SMU_PPUPATD1_I2C0_SHIFT,      /**< SMU peripheral identifier for I2C0      */
506 #if defined(_SMU_PPUPATD1_HFRCOEM23_SHIFT)
507   smuPeripheralHFRCOEM23    = 32 + _SMU_PPUPATD1_HFRCOEM23_SHIFT, /**< SMU peripheral identifier for HFRCOEM23 */
508 #endif
509   smuPeripheralWDOG0        = 32 + _SMU_PPUPATD1_WDOG0_SHIFT,     /**< SMU peripheral identifier for WDOG0     */
510 #if defined(_SMU_PPUPATD1_WDOG1_SHIFT)
511   smuPeripheralWDOG1        = 32 + _SMU_PPUPATD1_WDOG1_SHIFT,     /**< SMU peripheral identifier for WDOG1     */
512 #endif
513   smuPeripheralAMUXCP0      = 32 + _SMU_PPUPATD1_AMUXCP0_SHIFT,   /**< SMU peripheral identifier for AMUXCP0   */
514   smuPeripheralRADIOAES     = 32 + _SMU_PPUPATD1_RADIOAES_SHIFT,  /**< SMU peripheral identifier for RADIOAES  */
515 #if defined(_SMU_PPUPATD1_EUART0_SHIFT)
516   smuPeripheralEUART0       = 32 + _SMU_PPUPATD1_EUART0_SHIFT,    /**< SMU peripheral identifier for EUART0    */
517 #endif
518 #if defined(_SMU_PPUPATD1_BUFC_SHIFT)
519   smuPeripheralBUFC         = 32 + _SMU_PPUPATD1_BUFC_SHIFT,      /**< SMU peripheral identifier for BUFC      */
520 #endif
521   smuPeripheralSMU          = 32 + _SMU_PPUPATD1_SMU_SHIFT,       /**< SMU peripheral identifier for SMU       */
522 #if defined(_SMU_PPUPATD1_SMUCFGNS_SHIFT)
523   smuPeripheralSMUCFGNS     = 32 + _SMU_PPUPATD1_SMUCFGNS_SHIFT,  /**< SMU peripheral identifier for SMUCFGNS  */
524 #endif
525   smuPeripheralAHBRADIO     = 32 + _SMU_PPUPATD1_AHBRADIO_SHIFT,  /**< SMU peripheral identifier for AHBRADIO  */
526 #if defined(_SMU_PPUPATD1_SEMAILBOX_SHIFT)
527   smuPeripheralSEMAILBOX    = 32 + _SMU_PPUPATD1_SEMAILBOX_SHIFT, /**< SMU peripheral identifier for SEMAILBOX */
528 #endif
529 #if defined(_SMU_PPUPATD1_CRYPTOACC_SHIFT)
530   smuPeripheralCRYPTOACC    = 32 + _SMU_PPUPATD1_CRYPTOACC_SHIFT, /**< SMU peripheral identifier for CRYPTOACC */
531 #endif
532 #else
533 #error "No peripherals defined for SMU for this device configuration."
534 #endif
535   smuPeripheralEnd
536 } SMU_Peripheral_TypeDef;
537 
538 /** SMU peripheral privileged access enablers. */
539 typedef struct {
540 #if defined(_SILICON_LABS_GECKO_INTERNAL_SDID_84)
541   bool privilegedACMP0      : 1;     /**< Privileged access enabler for ACMP0.     */
542   bool privilegedACMP1      : 1;     /**< Privileged access enabler for ACMP1.     */
543   bool privilegedADC0       : 1;     /**< Privileged access enabler for ADC0.      */
544   bool privilegedReserved0  : 1;     /**< Reserved privileged access enabler.      */
545   bool privilegedReserved1  : 1;     /**< Reserved privileged access enabler.      */
546   bool privilegedCMU        : 1;     /**< Privileged access enabler for CMU.       */
547   bool privilegedReserved2  : 1;     /**< Reserved privileged access enabler.      */
548   bool privilegedCRYOTIMER  : 1;     /**< Privileged access enabler for CRYOTIMER. */
549   bool privilegedCRYPTO0    : 1;     /**< Privileged access enabler for CRYPTO0.   */
550   bool privilegedCRYPTO1    : 1;     /**< Privileged access enabler for CRYPTO1.   */
551   bool privilegedCSEN       : 1;     /**< Privileged access enabler for CSEN.      */
552   bool privilegedVDAC0      : 1;     /**< Privileged access enabler for VDAC0.     */
553   bool privilegedPRS        : 1;     /**< Privileged access enabler for PRS.       */
554   bool privilegedEMU        : 1;     /**< Privileged access enabler for EMU.       */
555   bool privilegedFPUEH      : 1;     /**< Privileged access enabler for FPUEH.     */
556   bool privilegedReserved3  : 1;     /**< Reserved privileged access enabler.      */
557   bool privilegedGPCRC      : 1;     /**< Privileged access enabler for GPCRC.     */
558   bool privilegedGPIO       : 1;     /**< Privileged access enabler for GPIO.      */
559   bool privilegedI2C0       : 1;     /**< Privileged access enabler for I2C0.      */
560   bool privilegedI2C1       : 1;     /**< Privileged access enabler for I2C1.      */
561   bool privilegedIDAC0      : 1;     /**< Privileged access enabler for IDAC0.     */
562   bool privilegedMSC        : 1;     /**< Privileged access enabler for MSC.       */
563   bool privilegedLDMA       : 1;     /**< Privileged access enabler for LDMA.      */
564   bool privilegedLESENSE    : 1;     /**< Privileged access enabler for LESENSE.   */
565   bool privilegedLETIMER0   : 1;     /**< Privileged access enabler for LETIMER0.  */
566   bool privilegedLEUART0    : 1;     /**< Privileged access enabler for LEUART0.   */
567   bool privilegedReserved4  : 1;     /**< Reserved privileged access enabler.      */
568   bool privilegedPCNT0      : 1;     /**< Privileged access enabler for PCNT0.     */
569   bool privilegedPCNT1      : 1;     /**< Privileged access enabler for PCNT1.     */
570   bool privilegedPCNT2      : 1;     /**< Privileged access enabler for PCNT2.     */
571   bool privilegedReserved5  : 1;     /**< Reserved privileged access enabler.      */
572   bool privilegedReserved6  : 1;     /**< Reserved privileged access enabler.      */
573   bool privilegedReserved7  : 1;     /**< Reserved privileged access enabler.      */
574   bool privilegedRMU        : 1;     /**< Privileged access enabler for RMU.       */
575   bool privilegedRTCC       : 1;     /**< Privileged access enabler for RTCC.      */
576   bool privilegedSMU        : 1;     /**< Privileged access enabler for SMU.       */
577   bool privilegedReserved8  : 1;     /**< Reserved privileged access enabler.      */
578   bool privilegedTIMER0     : 1;     /**< Privileged access enabler for TIMER0.    */
579   bool privilegedTIMER1     : 1;     /**< Privileged access enabler for TIMER1.    */
580   bool privilegedTRNG0      : 1;     /**< Privileged access enabler for TRNG0.     */
581   bool privilegedUSART0     : 1;     /**< Privileged access enabler for USART0.    */
582   bool privilegedUSART1     : 1;     /**< Privileged access enabler for USART1.    */
583   bool privilegedUSART2     : 1;     /**< Privileged access enabler for USART2.    */
584   bool privilegedUSART3     : 1;     /**< Privileged access enabler for USART3.    */
585   bool privilegedWDOG0      : 1;     /**< Privileged access enabler for WDOG0.     */
586   bool privilegedWDOG1      : 1;     /**< Privileged access enabler for WDOG1.     */
587   bool privilegedWTIMER0    : 1;     /**< Privileged access enabler for WTIMER0.   */
588   bool privilegedWTIMER1    : 1;     /**< Privileged access enabler for WTIMER1.   */
589 
590 #elif defined(_SILICON_LABS_GECKO_INTERNAL_SDID_89)
591   bool privilegedACMP0      : 1;     /**< Privileged access enabler for ACMP0.     */
592   bool privilegedACMP1      : 1;     /**< Privileged access enabler for ACMP1.     */
593   bool privilegedADC0       : 1;     /**< Privileged access enabler for ADC0.      */
594   bool privilegedReserved0  : 1;     /**< Reserved privileged access enabler.      */
595   bool privilegedReserved1  : 1;     /**< Reserved privileged access enabler.      */
596   bool privilegedCMU        : 1;     /**< Privileged access enabler for CMU.       */
597   bool privilegedReserved2  : 1;     /**< Reserved privileged access enabler.      */
598   bool privilegedCRYOTIMER  : 1;     /**< Privileged access enabler for CRYOTIMER. */
599   bool privilegedCRYPTO0    : 1;     /**< Privileged access enabler for CRYPTO0.   */
600   bool privilegedCRYPTO1    : 1;     /**< Privileged access enabler for CRYPTO1.   */
601   bool privilegedCSEN       : 1;     /**< Privileged access enabler for CSEN.      */
602   bool privilegedVDAC0      : 1;     /**< Privileged access enabler for VDAC0.     */
603   bool privilegedPRS        : 1;     /**< Privileged access enabler for PRS.       */
604   bool privilegedEMU        : 1;     /**< Privileged access enabler for EMU.       */
605   bool privilegedFPUEH      : 1;     /**< Privileged access enabler for FPUEH.     */
606   bool privilegedReserved3  : 1;     /**< Reserved privileged access enabler.      */
607   bool privilegedGPCRC      : 1;     /**< Privileged access enabler for GPCRC.     */
608   bool privilegedGPIO       : 1;     /**< Privileged access enabler for GPIO.      */
609   bool privilegedI2C0       : 1;     /**< Privileged access enabler for I2C0.      */
610   bool privilegedI2C1       : 1;     /**< Privileged access enabler for I2C1.      */
611   bool privilegedIDAC0      : 1;     /**< Privileged access enabler for IDAC0.     */
612   bool privilegedMSC        : 1;     /**< Privileged access enabler for MSC.       */
613   bool privilegedLDMA       : 1;     /**< Privileged access enabler for LDMA.      */
614   bool privilegedLESENSE    : 1;     /**< Privileged access enabler for LESENSE.   */
615   bool privilegedLETIMER0   : 1;     /**< Privileged access enabler for LETIMER0.  */
616   bool privilegedLEUART0    : 1;     /**< Privileged access enabler for LEUART0.   */
617   bool privilegedReserved4  : 1;     /**< Reserved privileged access enabler.      */
618   bool privilegedPCNT0      : 1;     /**< Privileged access enabler for PCNT0.     */
619   bool privilegedReserved5  : 1;     /**< Reserved privileged access enabler.      */
620   bool privilegedReserved6  : 1;     /**< Reserved privileged access enabler.      */
621   bool privilegedReserved7  : 1;     /**< Reserved privileged access enabler.      */
622   bool privilegedReserved8  : 1;     /**< Reserved privileged access enabler.      */
623   bool privilegedRMU        : 1;     /**< Privileged access enabler for RMU.       */
624   bool privilegedRTCC       : 1;     /**< Privileged access enabler for RTCC.      */
625   bool privilegedSMU        : 1;     /**< Privileged access enabler for SMU.       */
626   bool privilegedReserved9  : 1;     /**< Reserved privileged access enabler.      */
627   bool privilegedTIMER0     : 1;     /**< Privileged access enabler for TIMER0.    */
628   bool privilegedTIMER1     : 1;     /**< Privileged access enabler for TIMER1.    */
629   bool privilegedTRNG0      : 1;     /**< Privileged access enabler for TRNG0.     */
630   bool privilegedUSART0     : 1;     /**< Privileged access enabler for USART0.    */
631   bool privilegedUSART1     : 1;     /**< Privileged access enabler for USART1.    */
632   bool privilegedUSART2     : 1;     /**< Privileged access enabler for USART2.    */
633   bool privilegedWDOG0      : 1;     /**< Privileged access enabler for WDOG0.     */
634   bool privilegedWDOG1      : 1;     /**< Privileged access enabler for WDOG1.     */
635   bool privilegedWTIMER0    : 1;     /**< Privileged access enabler for WTIMER0.   */
636 
637 #elif defined(_SILICON_LABS_GECKO_INTERNAL_SDID_95)
638   bool privilegedACMP0      : 1;     /**< Privileged access enabler for ACMP0.     */
639   bool privilegedACMP1      : 1;     /**< Privileged access enabler for ACMP1.     */
640   bool privilegedADC0       : 1;     /**< Privileged access enabler for ADC0.      */
641   bool privilegedReserved0  : 1;     /**< Reserved privileged access enabler.      */
642   bool privilegedReserved1  : 1;     /**< Reserved privileged access enabler.      */
643   bool privilegedCMU        : 1;     /**< Privileged access enabler for CMU.       */
644   bool privilegedReserved2  : 1;     /**< Reserved privileged access enabler.      */
645   bool privilegedCRYOTIMER  : 1;     /**< Privileged access enabler for CRYOTIMER. */
646   bool privilegedCRYPTO     : 1;     /**< Privileged access enabler for CRYPTO.    */
647   bool privilegedVDAC0      : 1;     /**< Privileged access enabler for VDAC0.     */
648   bool privilegedPRS        : 1;     /**< Privileged access enabler for PRS.       */
649   bool privilegedEMU        : 1;     /**< Privileged access enabler for EMU.       */
650   bool privilegedFPUEH      : 1;     /**< Privileged access enabler for FPUEH.     */
651   bool privilegedReserved3  : 1;     /**< Reserved privileged access enabler.      */
652   bool privilegedGPCRC      : 1;     /**< Privileged access enabler for GPCRC.     */
653   bool privilegedGPIO       : 1;     /**< Privileged access enabler for GPIO.      */
654   bool privilegedI2C0       : 1;     /**< Privileged access enabler for I2C0.      */
655   bool privilegedIDAC0      : 1;     /**< Privileged access enabler for IDAC0.     */
656   bool privilegedMSC        : 1;     /**< Privileged access enabler for MSC.       */
657   bool privilegedLDMA       : 1;     /**< Privileged access enabler for LDMA.      */
658   bool privilegedLESENSE    : 1;     /**< Privileged access enabler for LESENSE.   */
659   bool privilegedLETIMER0   : 1;     /**< Privileged access enabler for LETIMER0.  */
660   bool privilegedLEUART     : 1;     /**< Privileged access enabler for LEUART0.   */
661   bool privilegedReserved4  : 1;     /**< Reserved privileged access enabler.      */
662   bool privilegedPCNT0      : 1;     /**< Privileged access enabler for PCNT0.     */
663   bool privilegedReserved5  : 1;     /**< Reserved privileged access enabler.      */
664   bool privilegedReserved6  : 1;     /**< Reserved privileged access enabler.      */
665   bool privilegedReserved7  : 1;     /**< Reserved privileged access enabler.      */
666   bool privilegedReserved8  : 1;     /**< Reserved privileged access enabler.      */
667   bool privilegedRMU        : 1;     /**< Privileged access enabler for RMU.       */
668   bool privilegedRTCC       : 1;     /**< Privileged access enabler for RTCC.      */
669   bool privilegedSMU        : 1;     /**< Privileged access enabler for SMU.       */
670 
671   bool privilegedReserved9  : 1;     /**< Reserved privileged access enabler.      */
672   bool privilegedTIMER0     : 1;     /**< Privileged access enabler for TIMER0.    */
673   bool privilegedTIMER1     : 1;     /**< Privileged access enabler for TIMER1.    */
674   bool privilegedTRNG0      : 1;     /**< Privileged access enabler for TRNG0.     */
675   bool privilegedUSART0     : 1;     /**< Privileged access enabler for USART0.    */
676   bool privilegedUSART1     : 1;     /**< Privileged access enabler for USART1.    */
677   bool privilegedWDOG0      : 1;     /**< Privileged access enabler for WDOG0.     */
678   bool privilegedWDOG1      : 1;     /**< Privileged access enabler for WDOG1.     */
679   bool privilegedWTIMER0    : 1;     /**< Privileged access enabler for WTIMER0.   */
680 
681 #elif defined(_SILICON_LABS_GECKO_INTERNAL_SDID_100)
682   bool privilegedACMP0      : 1;     /**< Privileged access enabler for ACMP0.     */
683   bool privilegedACMP1      : 1;     /**< Privileged access enabler for ACMP1.     */
684   bool privilegedACMP2      : 1;     /**< Privileged access enabler for ACMP2.     */
685   bool privilegedACMP3      : 1;     /**< Privileged access enabler for ACMP3.     */
686   bool privilegedADC0       : 1;     /**< Privileged access enabler for ADC0.      */
687   bool privilegedADC1       : 1;     /**< Privileged access enabler for ADC1.      */
688   bool privilegedCAN0       : 1;     /**< Privileged access enabler for CAN0.      */
689   bool privilegedCAN1       : 1;     /**< Privileged access enabler for CAN1.      */
690   bool privilegedCMU        : 1;     /**< Privileged access enabler for CMU.       */
691   bool privilegedCRYOTIMER  : 1;     /**< Privileged access enabler for CRYOTIMER. */
692   bool privilegedCRYPTO0    : 1;     /**< Privileged access enabler for CRYPTO0.   */
693   bool privilegedCSEN       : 1;     /**< Privileged access enabler for CSEN.      */
694   bool privilegedVDAC0      : 1;     /**< Privileged access enabler for VDAC0.     */
695   bool privilegedPRS        : 1;     /**< Privileged access enabler for PRS.       */
696   bool privilegedEBI        : 1;     /**< Privileged access enabler for EBI.       */
697   bool privilegedEMU        : 1;     /**< Privileged access enabler for EMU.       */
698   bool privilegedETH        : 1;     /**< Privileged access enabler for ETH.       */
699   bool privilegedFPUEH      : 1;     /**< Privileged access enabler for FPUEH.     */
700   bool privilegedGPCRC      : 1;     /**< Privileged access enabler for GPCRC.     */
701   bool privilegedGPIO       : 1;     /**< Privileged access enabler for GPIO.      */
702   bool privilegedI2C0       : 1;     /**< Privileged access enabler for I2C0.      */
703   bool privilegedI2C1       : 1;     /**< Privileged access enabler for I2C1.      */
704   bool privilegedI2C2       : 1;     /**< Privileged access enabler for I2C2.      */
705   bool privilegedIDAC0      : 1;     /**< Privileged access enabler for IDAC0.     */
706   bool privilegedMSC        : 1;     /**< Privileged access enabler for MAC.       */
707   bool privilegedLCD        : 1;     /**< Privileged access enabler for LCD.       */
708   bool privilegedLDMA       : 1;     /**< Privileged access enabler for LDMA.      */
709   bool privilegedLESENSE    : 1;     /**< Privileged access enabler for LESENSE.   */
710   bool privilegedLETIMER0   : 1;     /**< Privileged access enabler for LETIMER0.  */
711   bool privilegedLETIMER1   : 1;     /**< Privileged access enabler for LETIMER1.  */
712   bool privilegedLEUART0    : 1;     /**< Privileged access enabler for LEUART0.   */
713   bool privilegedLEUART1    : 1;     /**< Privileged access enabler for LEUART1.   */
714   bool privilegedPCNT0      : 1;     /**< Privileged access enabler for PCNT0.     */
715   bool privilegedPCNT1      : 1;     /**< Privileged access enabler for PCNT1.     */
716   bool privilegedPCNT2      : 1;     /**< Privileged access enabler for PCNT2.     */
717   bool privilegedQSPI0      : 1;     /**< Privileged access enabler for QSPI0.     */
718   bool privilegedRMU        : 1;     /**< Privileged access enabler for RMU.       */
719   bool privilegedRTC        : 1;     /**< Privileged access enabler for RTC.       */
720   bool privilegedRTCC       : 1;     /**< Privileged access enabler for RTCC.      */
721   bool privilegedSDIO       : 1;     /**< Privileged access enabler for SDIO.      */
722   bool privilegedSMU        : 1;     /**< Privileged access enabler for SMU.       */
723   bool privilegedTIMER0     : 1;     /**< Privileged access enabler for TIMER0.    */
724   bool privilegedTIMER1     : 1;     /**< Privileged access enabler for TIMER1.    */
725   bool privilegedTIMER2     : 1;     /**< Privileged access enabler for TIMER2.    */
726   bool privilegedTIMER3     : 1;     /**< Privileged access enabler for TIMER3.    */
727   bool privilegedTIMER4     : 1;     /**< Privileged access enabler for TIMER4.    */
728   bool privilegedTIMER5     : 1;     /**< Privileged access enabler for TIMER5.    */
729   bool privilegedTIMER6     : 1;     /**< Privileged access enabler for TIMER6.    */
730   bool privilegedTRNG0      : 1;     /**< Privileged access enabler for TRNG0.     */
731   bool privilegedUART0      : 1;     /**< Privileged access enabler for UART0.     */
732   bool privilegedUART1      : 1;     /**< Privileged access enabler for UART1.     */
733   bool privilegedUSART0     : 1;     /**< Privileged access enabler for USART0.    */
734   bool privilegedUSART1     : 1;     /**< Privileged access enabler for USART1.    */
735   bool privilegedUSART2     : 1;     /**< Privileged access enabler for USART2.    */
736   bool privilegedUSART3     : 1;     /**< Privileged access enabler for USART3.    */
737   bool privilegedUSART4     : 1;     /**< Privileged access enabler for USART4.    */
738   bool privilegedUSART5     : 1;     /**< Privileged access enabler for USART5.    */
739   bool privilegedUSB        : 1;     /**< Privileged access enabler for USB.       */
740   bool privilegedWDOG0      : 1;     /**< Privileged access enabler for WDOG0.     */
741   bool privilegedWDOG1      : 1;     /**< Privileged access enabler for WDOG1.     */
742   bool privilegedWTIMER0    : 1;     /**< Privileged access enabler for WTIMER0.   */
743   bool privilegedWTIMER1    : 1;     /**< Privileged access enabler for WTIMER1.   */
744   bool privilegedWTIMER2    : 1;     /**< Privileged access enabler for WTIMER2.   */
745   bool privilegedWTIMER3    : 1;     /**< Privileged access enabler for WTIMER3.   */
746 
747 #elif defined(_SILICON_LABS_GECKO_INTERNAL_SDID_103)
748   bool privilegedACMP0      : 1;     /**< Privileged access enabler for ACMP0.     */
749   bool privilegedACMP1      : 1;     /**< Privileged access enabler for ACMP1.     */
750   bool privilegedADC0       : 1;     /**< Privileged access enabler for ADC0.      */
751   bool privilegedCAN0       : 1;     /**< Privileged access enabler for CAN0.      */
752   bool privilegedCMU        : 1;     /**< Privileged access enabler for CMU.       */
753   bool privilegedCRYOTIMER  : 1;     /**< Privileged access enabler for CRYOTIMER. */
754   bool privilegedCRYPTO0    : 1;     /**< Privileged access enabler for CRYPTO0.   */
755   bool privilegedCSEN       : 1;     /**< Privileged access enabler for CSEN.      */
756   bool privilegedVDAC0      : 1;     /**< Privileged access enabler for VDAC0.     */
757   bool privilegedPRS        : 1;     /**< Privileged access enabler for PRS.       */
758   bool privilegedEMU        : 1;     /**< Privileged access enabler for EMU.       */
759   bool privilegedGPCRC      : 1;     /**< Privileged access enabler for GPCRC.     */
760   bool privilegedGPIO       : 1;     /**< Privileged access enabler for GPIO.      */
761   bool privilegedI2C0       : 1;     /**< Privileged access enabler for I2C0.      */
762   bool privilegedI2C1       : 1;     /**< Privileged access enabler for I2C1.      */
763   bool privilegedMSC        : 1;     /**< Privileged access enabler for MAC.       */
764   bool privilegedLCD        : 1;     /**< Privileged access enabler for LCD.       */
765   bool privilegedLDMA       : 1;     /**< Privileged access enabler for LDMA.      */
766   bool privilegedLESENSE    : 1;     /**< Privileged access enabler for LESENSE.   */
767   bool privilegedLETIMER0   : 1;     /**< Privileged access enabler for LETIMER0.  */
768   bool privilegedLEUART0    : 1;     /**< Privileged access enabler for LEUART0.   */
769   bool privilegedPCNT0      : 1;     /**< Privileged access enabler for PCNT0.     */
770   bool privilegedRMU        : 1;     /**< Privileged access enabler for RMU.       */
771   bool privilegedRTCC       : 1;     /**< Privileged access enabler for RTCC.      */
772   bool privilegedSMU        : 1;     /**< Privileged access enabler for SMU.       */
773   bool privilegedTIMER0     : 1;     /**< Privileged access enabler for TIMER0.    */
774   bool privilegedTIMER1     : 1;     /**< Privileged access enabler for TIMER1.    */
775   bool privilegedTRNG0      : 1;     /**< Privileged access enabler for TRNG0.     */
776   bool privilegedUART0      : 1;     /**< Privileged access enabler for UART0.     */
777   bool privilegedUSART0     : 1;     /**< Privileged access enabler for USART0.    */
778   bool privilegedUSART1     : 1;     /**< Privileged access enabler for USART1.    */
779   bool privilegedUSART2     : 1;     /**< Privileged access enabler for USART2.    */
780   bool privilegedUSART3     : 1;     /**< Privileged access enabler for USART3.    */
781   bool privilegedWDOG0      : 1;     /**< Privileged access enabler for WDOG0.     */
782   bool privilegedWTIMER0    : 1;     /**< Privileged access enabler for WTIMER0.   */
783   bool privilegedWTIMER1    : 1;     /**< Privileged access enabler for WTIMER1.   */
784 
785 #elif defined(_SILICON_LABS_GECKO_INTERNAL_SDID_106)
786   bool privilegedACMP0      : 1;     /**< Privileged access enabler for ACMP0.     */
787   bool privilegedACMP1      : 1;     /**< Privileged access enabler for ACMP1.     */
788   bool privilegedACMP2      : 1;     /**< Privileged access enabler for ACMP2.     */
789   bool privilegedADC0       : 1;     /**< Privileged access enabler for ADC0.      */
790   bool privilegedADC1       : 1;     /**< Privileged access enabler for ADC1.      */
791   bool privilegedCAN0       : 1;     /**< Privileged access enabler for CAN0.      */
792   bool privilegedCAN1       : 1;     /**< Privileged access enabler for CAN1.      */
793   bool privilegedCMU        : 1;     /**< Privileged access enabler for CMU.       */
794   bool privilegedCRYOTIMER  : 1;     /**< Privileged access enabler for CRYOTIMER. */
795   bool privilegedCRYPTO0    : 1;     /**< Privileged access enabler for CRYPTO0.   */
796   bool privilegedCSEN       : 1;     /**< Privileged access enabler for CSEN.      */
797   bool privilegedVDAC0      : 1;     /**< Privileged access enabler for VDAC0.     */
798   bool privilegedPRS        : 1;     /**< Privileged access enabler for PRS.       */
799   bool privilegedEBI        : 1;     /**< Privileged access enabler for EBI.       */
800   bool privilegedEMU        : 1;     /**< Privileged access enabler for EMU.       */
801   bool privilegedFPUEH      : 1;     /**< Privileged access enabler for FPUEH.     */
802   bool privilegedGPCRC      : 1;     /**< Privileged access enabler for GPCRC.     */
803   bool privilegedGPIO       : 1;     /**< Privileged access enabler for GPIO.      */
804   bool privilegedI2C0       : 1;     /**< Privileged access enabler for I2C0.      */
805   bool privilegedI2C1       : 1;     /**< Privileged access enabler for I2C1.      */
806   bool privilegedIDAC0      : 1;     /**< Privileged access enabler for IDAC0.     */
807   bool privilegedMSC        : 1;     /**< Privileged access enabler for MAC.       */
808   bool privilegedLCD        : 1;     /**< Privileged access enabler for LCD.       */
809   bool privilegedLDMA       : 1;     /**< Privileged access enabler for LDMA.      */
810   bool privilegedLESENSE    : 1;     /**< Privileged access enabler for LESENSE.   */
811   bool privilegedLETIMER0   : 1;     /**< Privileged access enabler for LETIMER0.  */
812   bool privilegedLETIMER1   : 1;     /**< Privileged access enabler for LETIMER1.  */
813   bool privilegedLEUART0    : 1;     /**< Privileged access enabler for LEUART0.   */
814   bool privilegedLEUART1    : 1;     /**< Privileged access enabler for LEUART1.   */
815   bool privilegedReserved0  : 1;     /**< Reserved privileged access enabler.      */
816   bool privilegedReserved1  : 1;     /**< Reserved privileged access enabler.      */
817   bool privilegedReserved2  : 1;     /**< Reserved privileged access enabler.      */
818   bool privilegedPCNT0      : 1;     /**< Privileged access enabler for PCNT0.     */
819   bool privilegedPCNT1      : 1;     /**< Privileged access enabler for PCNT1.     */
820   bool privilegedPCNT2      : 1;     /**< Privileged access enabler for PCNT2.     */
821   bool privilegedPDM        : 1;     /**< Privileged access enabler for PDM.       */
822   bool privilegedQSPI0      : 1;     /**< Privileged access enabler for QSPI0.     */
823   bool privilegedRMU        : 1;     /**< Privileged access enabler for RMU.       */
824   bool privilegedRTC        : 1;     /**< Privileged access enabler for RTC.       */
825   bool privilegedRTCC       : 1;     /**< Privileged access enabler for RTCC.      */
826   bool privilegedSDIO       : 1;     /**< Privileged access enabler for SDIO.      */
827   bool privilegedSMU        : 1;     /**< Privileged access enabler for SMU.       */
828   bool privilegedTIMER0     : 1;     /**< Privileged access enabler for TIMER0.    */
829   bool privilegedTIMER1     : 1;     /**< Privileged access enabler for TIMER1.    */
830   bool privilegedTIMER2     : 1;     /**< Privileged access enabler for TIMER2.    */
831   bool privilegedTIMER3     : 1;     /**< Privileged access enabler for TIMER3.    */
832   bool privilegedTRNG0      : 1;     /**< Privileged access enabler for TRNG0.     */
833   bool privilegedUART0      : 1;     /**< Privileged access enabler for UART0.     */
834   bool privilegedUART1      : 1;     /**< Privileged access enabler for UART1.     */
835   bool privilegedUSART0     : 1;     /**< Privileged access enabler for USART0.    */
836   bool privilegedUSART1     : 1;     /**< Privileged access enabler for USART1.    */
837   bool privilegedUSART2     : 1;     /**< Privileged access enabler for USART2.    */
838   bool privilegedUSART3     : 1;     /**< Privileged access enabler for USART3.    */
839   bool privilegedUSART4     : 1;     /**< Privileged access enabler for USART4.    */
840   bool privilegedUSB        : 1;     /**< Privileged access enabler for USB.       */
841   bool privilegedWDOG0      : 1;     /**< Privileged access enabler for WDOG0.     */
842   bool privilegedWDOG1      : 1;     /**< Privileged access enabler for WDOG1.     */
843   bool privilegedWTIMER0    : 1;     /**< Privileged access enabler for WTIMER0.   */
844   bool privilegedWTIMER1    : 1;     /**< Privileged access enabler for WTIMER1.   */
845 
846 #elif defined(_SILICON_LABS_32B_SERIES_2_CONFIG_1)
847   bool privilegedReserved0    : 1;  /**< Reserved privileged access enabler.        */
848   bool privilegedEMU          : 1;  /**< Privileged access enabler for EMU          */
849   bool privilegedCMU          : 1;  /**< Privileged access enabler for CMU          */
850   bool privilegedHFXO0        : 1;  /**< Privileged access enabler for HFXO0        */
851   bool privilegedHFRCO0       : 1;  /**< Privileged access enabler for HFRCO0       */
852   bool privilegedFSRCO        : 1;  /**< Privileged access enabler for FSRCO        */
853   bool privilegedDPLL0        : 1;  /**< Privileged access enabler for DPLL0        */
854   bool privilegedLFXO         : 1;  /**< Privileged access enabler for LFXO         */
855   bool privilegedLFRCO        : 1;  /**< Privileged access enabler for LFRCO        */
856   bool privilegedULFRCO       : 1;  /**< Privileged access enabler for ULFRCO       */
857   bool privilegedMSC          : 1;  /**< Privileged access enabler for MSC          */
858   bool privilegedICACHE0      : 1;  /**< Privileged access enabler for ICACHE0      */
859   bool privilegedPRS          : 1;  /**< Privileged access enabler for PRS          */
860   bool privilegedGPIO         : 1;  /**< Privileged access enabler for GPIO         */
861   bool privilegedLDMA         : 1;  /**< Privileged access enabler for LDMA         */
862   bool privilegedLDMAXBAR     : 1;  /**< Privileged access enabler for LDMAXBAR     */
863   bool privilegedTIMER0       : 1;  /**< Privileged access enabler for TIMER0       */
864   bool privilegedTIMER1       : 1;  /**< Privileged access enabler for TIMER1       */
865   bool privilegedTIMER2       : 1;  /**< Privileged access enabler for TIMER2       */
866   bool privilegedTIMER3       : 1;  /**< Privileged access enabler for TIMER3       */
867   bool privilegedUSART0       : 1;  /**< Privileged access enabler for USART0       */
868   bool privilegedUSART1       : 1;  /**< Privileged access enabler for USART1       */
869   bool privilegedUSART2       : 1;  /**< Privileged access enabler for USART2       */
870   bool privilegedBURTC        : 1;  /**< Privileged access enabler for BURTC        */
871   bool privilegedI2C1         : 1;  /**< Privileged access enabler for I2C1         */
872   bool privilegedCHIPTESTCTRL : 1;  /**< Privileged access enabler for CHIPTESTCTRL */
873   bool privilegedLVGD         : 1;  /**< Privileged access enabler for LVGD         */
874   bool privilegedSYSCFG       : 1;  /**< Privileged access enabler for SYSCFG       */
875   bool privilegedBURAM        : 1;  /**< Privileged access enabler for BURAM        */
876   bool privilegedIFADCDEBUG   : 1;  /**< Privileged access enabler for IFADCDEBUG   */
877   bool privilegedGPCRC        : 1;  /**< Privileged access enabler for GPCRC        */
878   bool privilegedRTCC         : 1;  /**< Privileged access enabler for RTCC         */
879 
880   bool privilegedLETIMER0     : 1;  /**< Privileged access enabler for LETIMER      */
881   bool privilegedIADC0        : 1;  /**< Privileged access enabler for IADC0        */
882   bool privilegedACMP0        : 1;  /**< Privileged access enabler for ACMP0        */
883   bool privilegedACMP1        : 1;  /**< Privileged access enabler for ACMP1        */
884   bool privilegedI2C0         : 1;  /**< Privileged access enabler for I2C0         */
885   bool privilegedHFRCOEM23    : 1;  /**< Privileged access enabler for HFRCOEM23    */
886   bool privilegedWDOG0        : 1;  /**< Privileged access enabler for WDOG0        */
887   bool privilegedWDOG1        : 1;  /**< Privileged access enabler for WDOG1        */
888   bool privilegedAMUXCP0      : 1;  /**< Privileged access enabler for AMUXCP0      */
889   bool privilegedRADIOAES     : 1;  /**< Privileged access enabler for RADIOAES     */
890   bool privilegedBUFC         : 1;  /**< Privileged access enabler for BUFC         */
891   bool privilegedSMU          : 1;  /**< Privileged access enabler for SMU          */
892   bool privilegedAHBRADIO     : 1;  /**< Privileged access enabler for AHBRADIO     */
893   bool privilegedSEMAILBOX    : 1;  /**< Privileged access enabler for SEMAILBOX    */
894 
895 #elif defined(_SILICON_LABS_32B_SERIES_2_CONFIG_2)
896   bool privilegedSCRATCHPAD   : 1;  /**< Privileged access enabler for SCRATCHPAD   */
897   bool privilegedEMU          : 1;  /**< Privileged access enabler for EMU          */
898   bool privilegedCMU          : 1;  /**< Privileged access enabler for CMU          */
899   bool privilegedHFXO0        : 1;  /**< Privileged access enabler for HFXO0        */
900   bool privilegedHFRCO0       : 1;  /**< Privileged access enabler for HFRCO0       */
901   bool privilegedFSRCO        : 1;  /**< Privileged access enabler for FSRCO        */
902   bool privilegedDPLL0        : 1;  /**< Privileged access enabler for DPLL0        */
903   bool privilegedLFXO         : 1;  /**< Privileged access enabler for LFXO         */
904   bool privilegedLFRCO        : 1;  /**< Privileged access enabler for LFRCO        */
905   bool privilegedULFRCO       : 1;  /**< Privileged access enabler for ULFRCO       */
906   bool privilegedMSC          : 1;  /**< Privileged access enabler for MSC          */
907   bool privilegedICACHE0      : 1;  /**< Privileged access enabler for ICACHE0      */
908   bool privilegedPRS          : 1;  /**< Privileged access enabler for PRS0         */
909   bool privilegedGPIO         : 1;  /**< Privileged access enabler for GPIO         */
910   bool privilegedLDMA         : 1;  /**< Privileged access enabler for LDMA         */
911   bool privilegedLDMAXBAR     : 1;  /**< Privileged access enabler for LDMAXBAR     */
912   bool privilegedTIMER0       : 1;  /**< Privileged access enabler for TIMER0       */
913   bool privilegedTIMER1       : 1;  /**< Privileged access enabler for TIMER1       */
914   bool privilegedTIMER2       : 1;  /**< Privileged access enabler for TIMER2       */
915   bool privilegedTIMER3       : 1;  /**< Privileged access enabler for TIMER3       */
916   bool privilegedTIMER4       : 1;  /**< Privileged access enabler for TIMER4       */
917   bool privilegedUSART0       : 1;  /**< Privileged access enabler for USART0       */
918   bool privilegedUSART1       : 1;  /**< Privileged access enabler for USART1       */
919   bool privilegedBURTC        : 1;  /**< Privileged access enabler for BURTC        */
920   bool privilegedI2C1         : 1;  /**< Privileged access enabler for I2C1         */
921   bool privilegedCHIPTESTCTRL : 1;  /**< Privileged access enabler for CHIPTESTCTRL */
922   bool privilegedSYSCFGCFGNS  : 1;  /**< Privileged access enabler for SYSCFGCFGNS  */
923   bool privilegedSYSCFG       : 1;  /**< Privileged access enabler for SYSCFG       */
924   bool privilegedBURAM        : 1;  /**< Privileged access enabler for BURAM        */
925   bool privilegedIFADCDEBUG   : 1;  /**< Privileged access enabler for IFADCDEBUG   */
926   bool privilegedGPCRC        : 1;  /**< Privileged access enabler for GPCRC        */
927   bool privilegedDCI          : 1;  /**< Privileged access enabler for DCI          */
928 
929   bool privilegedROOTCFG      : 1;  /**< Privileged access enabler for ROOTCFG      */
930   bool privilegedDCDC         : 1;  /**< Privileged access enabler for DCDC         */
931   bool privilegedPDM          : 1;  /**< Privileged access enabler for PDM          */
932   bool privilegedRFSENSE      : 1;  /**< Privileged access enabler for RFSENSE      */
933   bool privilegedRADIOAES     : 1;  /**< Privileged access enabler for RADIOAES     */
934   bool privilegedSMU          : 1;  /**< Privileged access enabler for SMU          */
935   bool privilegedSMUCFGNS     : 1;  /**< Privileged access enabler for SMUCFGNS     */
936   bool privilegedRTCC         : 1;  /**< Privileged access enabler for RTCC         */
937   bool privilegedLETIMER0     : 1;  /**< Privileged access enabler for LETIMER0     */
938   bool privilegedIADC0        : 1;  /**< Privileged access enabler for IADC0        */
939   bool privilegedI2C0         : 1;  /**< Privileged access enabler for I2C0         */
940   bool privilegedWDOG0        : 1;  /**< Privileged access enabler for WDOG0        */
941   bool privilegedAMUXCP0      : 1;  /**< Privileged access enabler for AMUXCP0      */
942   bool privilegedEUART0       : 1;  /**< Privileged access enabler for EUART0       */
943   bool privilegedCRYPTOACC    : 1;  /**< Privileged access enabler for CRYPTOACC    */
944   bool privilegedAHBRADIO     : 1;  /**< Privileged access enabler for AHBRADIO     */
945 
946 #elif defined(_SILICON_LABS_32B_SERIES_2_CONFIG_3)
947   bool privilegedReserved0    : 1;  /**< Reserved privileged access enabler         */
948   bool privilegedEMU          : 1;  /**< Privileged access enabler for EMU          */
949   bool privilegedCMU          : 1;  /**< Privileged access enabler for CMU          */
950   bool privilegedHFRCO0       : 1;  /**< Privileged access enabler for HFRCO0       */
951   bool privilegedFSRCO        : 1;  /**< Privileged access enabler for FSRCO        */
952   bool privilegedDPLL0        : 1;  /**< Privileged access enabler for DPLL0        */
953   bool privilegedLFXO         : 1;  /**< Privileged access enabler for LFXO         */
954   bool privilegedLFRCO        : 1;  /**< Privileged access enabler for LFRCO        */
955   bool privilegedULFRCO       : 1;  /**< Privileged access enabler for ULFRCO       */
956   bool privilegedMSC          : 1;  /**< Privileged access enabler for MSC          */
957   bool privilegedICACHE0      : 1;  /**< Privileged access enabler for ICACHE0      */
958   bool privilegedPRS          : 1;  /**< Privileged access enabler for PRS0         */
959   bool privilegedGPIO         : 1;  /**< Privileged access enabler for GPIO         */
960   bool privilegedLDMA         : 1;  /**< Privileged access enabler for LDMA         */
961   bool privilegedLDMAXBAR     : 1;  /**< Privileged access enabler for LDMAXBAR     */
962   bool privilegedTIMER0       : 1;  /**< Privileged access enabler for TIMER0       */
963   bool privilegedTIMER1       : 1;  /**< Privileged access enabler for TIMER1       */
964   bool privilegedTIMER2       : 1;  /**< Privileged access enabler for TIMER2       */
965   bool privilegedTIMER3       : 1;  /**< Privileged access enabler for TIMER3       */
966   bool privilegedTIMER4       : 1;  /**< Privileged access enabler for TIMER4       */
967   bool privilegedUSART0       : 1;  /**< Privileged access enabler for USART0       */
968   bool privilegedBURTC        : 1;  /**< Privileged access enabler for BURTC        */
969   bool privilegedI2C1         : 1;  /**< Privileged access enabler for I2C1         */
970   bool privilegedCHIPTESTCTRL : 1;  /**< Privileged access enabler for CHIPTESTCTRL */
971   bool privilegedSYSCFGCFGNS  : 1;  /**< Privileged access enabler for SYSCFGCFGNS  */
972   bool privilegedSYSCFG       : 1;  /**< Privileged access enabler for SYSCFG       */
973   bool privilegedBURAM        : 1;  /**< Privileged access enabler for BURAM        */
974   bool privilegedGPCRC        : 1;  /**< Privileged access enabler for GPCRC        */
975   bool privilegedDCDC         : 1;  /**< Privileged access enabler for DCDC         */
976   bool privilegedHOSTMAILBOX  : 1;  /**< Privileged access enabler for HOSTMAILBOX  */
977   bool privilegedEUSART1      : 1;  /**< Privileged access enabler for EUSART1      */
978   bool privilegedEUSART2      : 1;  /**< Privileged access enabler for EUSART2      */
979 
980   bool privilegedSYSRTC       : 1;  /**< Privileged access enabler for SYSRTC       */
981   bool privilegedLCD          : 1;  /**< Privileged access enabler for LCD          */
982   bool privilegedKEYPAD       : 1;  /**< Privileged access enabler for KEYPAD       */
983   bool privilegedDMEM         : 1;  /**< Privileged access enabler for DMEM         */
984   bool privilegedLCDRF        : 1;  /**< Privileged access enabler for LCDRF        */
985   bool privilegedPFMXPPRF     : 1;  /**< Privileged access enabler for PFMXPPRF     */
986   bool privilegedRADIOAES     : 1;  /**< Privileged access enabler for RADIOAES     */
987   bool privilegedSMU          : 1;  /**< Privileged access enabler for SMU          */
988   bool privilegedSMUCFGNS     : 1;  /**< Privileged access enabler for SMUCFGNS     */
989   bool privilegedLETIMER0     : 1;  /**< Privileged access enabler for LETIMER0     */
990   bool privilegedIADC0        : 1;  /**< Privileged access enabler for IADC0        */
991   bool privilegedACMP0        : 1;  /**< Privileged access enabler for ACMP0        */
992   bool privilegedACMP1        : 1;  /**< Privileged access enabler for ACMP1        */
993   bool privilegedAMUXCP0      : 1;  /**< Privileged access enabler for AMUXCP0      */
994   bool privilegedVDAC0        : 1;  /**< Privileged access enabler for VDAC0        */
995   bool privilegedPCNT         : 1;  /**< Privileged access enabler for PCNT         */
996   bool privilegedLESENSE      : 1;  /**< Privileged access enabler for LESENSE      */
997   bool privilegedHFRCO1       : 1;  /**< Privileged access enabler for HFRCO1       */
998   bool privilegedHFXO0        : 1;  /**< Privileged access enabler for HFXO0        */
999   bool privilegedI2C0         : 1;  /**< Privileged access enabler for I2C0         */
1000   bool privilegedWDOG0        : 1;  /**< Privileged access enabler for WDOG0        */
1001   bool privilegedWDOG1        : 1;  /**< Privileged access enabler for WDOG1        */
1002   bool privilegedEUSART0      : 1;  /**< Privileged access enabler for EUSART0      */
1003   bool privilegedSEMAILBOX    : 1;  /**< Privileged access enabler for SEMAILBOX    */
1004   bool privilegedAHBRADIO     : 1;  /**< Privileged access enabler for AHBRADIO     */
1005 
1006 #else
1007 #error "No peripherals defined for SMU for this device configuration"
1008 #endif
1009 } SMU_PrivilegedAccess_TypeDef;
1010 
1011 /*******************************************************************************
1012  ******************************   STRUCTS   ************************************
1013  ******************************************************************************/
1014 
1015 /** SMU initialization structure. */
1016 typedef struct {
1017   union {
1018     uint32_t reg[2];                      /**< Peripheral access control array.*/
1019     SMU_PrivilegedAccess_TypeDef access;  /**< Peripheral access control array.*/
1020   } ppu;                                  /**< PPU init array.*/
1021   bool enable;                            /**< SMU enable flag. When set, SMU_Init() will enable SMU.*/
1022 } SMU_Init_TypeDef;
1023 
1024 /** Default SMU initialization structure settings. */
1025 #define SMU_INIT_DEFAULT {                                        \
1026     { { 0 } },             /* No peripherals access protected. */ \
1027     true                   /* Enable SMU.*/                       \
1028 }
1029 
1030 /*******************************************************************************
1031  *****************************   PROTOTYPES   **********************************
1032  ******************************************************************************/
1033 
1034 /***************************************************************************//**
1035  * @brief
1036  *   Enable or disable PPU of SMU.
1037  *
1038  * @param[in] enable
1039  *   Set to true to enable PPU; set to false otherwise.
1040  ******************************************************************************/
SMU_EnablePPU(bool enable)1041 __STATIC_INLINE void SMU_EnablePPU(bool enable)
1042 {
1043 #if defined (_SMU_PPUCTRL_ENABLE_SHIFT)
1044   BUS_RegBitWrite(&SMU->PPUCTRL, _SMU_PPUCTRL_ENABLE_SHIFT, enable);
1045 #else
1046   (void)enable;
1047 #endif
1048 }
1049 
1050 /***************************************************************************//**
1051  * @brief
1052  *   Initialize PPU of SMU.
1053  *
1054  * @param[in] init
1055  *   Pointer to initialization structure that defines which peripherals should
1056  *   only be accessed from privileged mode, and if PPU should be enabled.
1057  ******************************************************************************/
SMU_Init(const SMU_Init_TypeDef * init)1058 __STATIC_INLINE void SMU_Init(const SMU_Init_TypeDef *init)
1059 {
1060   SMU->PPUPATD0 = init->ppu.reg[0];
1061   SMU->PPUPATD1 = init->ppu.reg[1];
1062 
1063   SMU_EnablePPU(init->enable);
1064 }
1065 
1066 /***************************************************************************//**
1067  * @brief
1068  *   Change access settings for a peripheral.
1069  *
1070  * @details
1071  *   Set to limit access of a peripheral from privileged mode.
1072  *
1073  * @param[in] peripheral
1074  *   ID of the peripheral to change access settings for.
1075  *
1076  * @param[in] privileged
1077  *   Set to true if the peripheral should only be accessed from privileged
1078  *   mode; set to false otherwise.
1079  ******************************************************************************/
SMU_SetPrivilegedAccess(SMU_Peripheral_TypeDef peripheral,bool privileged)1080 __STATIC_INLINE void SMU_SetPrivilegedAccess(SMU_Peripheral_TypeDef peripheral,
1081                                              bool privileged)
1082 {
1083   EFM_ASSERT(peripheral < smuPeripheralEnd);
1084 
1085   if (peripheral < 32) {
1086     BUS_RegBitWrite(&SMU->PPUPATD0, peripheral, privileged);
1087   } else {
1088     BUS_RegBitWrite(&SMU->PPUPATD1, peripheral - 32, privileged);
1089   }
1090 }
1091 
1092 /***************************************************************************//**
1093  * @brief
1094  *   Get ID of the peripheral that caused an access fault.
1095  *
1096  * @note
1097  *   The return value is only valid if SMU_IF_PPUPRIV interrupt flag
1098  *   is set.
1099  *
1100  * @return
1101  *   ID of the peripheral that caused an access fault.
1102  ******************************************************************************/
SMU_GetFaultingPeripheral(void)1103 __STATIC_INLINE SMU_Peripheral_TypeDef SMU_GetFaultingPeripheral(void)
1104 {
1105   return (SMU_Peripheral_TypeDef)SMU->PPUFS;
1106 }
1107 
1108 /***************************************************************************//**
1109  * @brief
1110  *   Clear one or more pending SMU interrupts.
1111  *
1112  * @param[in] flags
1113  *   Bitwise logic OR of SMU interrupt sources to clear.
1114  ******************************************************************************/
SMU_IntClear(uint32_t flags)1115 __STATIC_INLINE void SMU_IntClear(uint32_t flags)
1116 {
1117 #if defined (SMU_HAS_SET_CLEAR)
1118   SMU->IF_CLR = flags;
1119 #else
1120   SMU->IFC = flags;
1121 #endif
1122 }
1123 
1124 /***************************************************************************//**
1125  * @brief
1126  *   Disable one or more SMU interrupts.
1127  *
1128  * @param[in] flags
1129  *   SMU interrupt sources to disable.
1130  ******************************************************************************/
SMU_IntDisable(uint32_t flags)1131 __STATIC_INLINE void SMU_IntDisable(uint32_t flags)
1132 {
1133 #if defined (SMU_HAS_SET_CLEAR)
1134   SMU->IEN_CLR = flags;
1135 #else
1136   SMU->IEN &= ~flags;
1137 #endif
1138 }
1139 
1140 /***************************************************************************//**
1141  * @brief
1142  *   Enable one or more SMU interrupts.
1143  *
1144  * @note
1145  *   Depending on the use, a pending interrupt may already be set prior to
1146  *   enabling the interrupt. To ignore a pending interrupt, consider using
1147  *   SMU_IntClear() prior to enabling the interrupt.
1148  *
1149  * @param[in] flags
1150  *   SMU interrupt sources to enable.
1151  ******************************************************************************/
SMU_IntEnable(uint32_t flags)1152 __STATIC_INLINE void SMU_IntEnable(uint32_t flags)
1153 {
1154 #if defined (SMU_HAS_SET_CLEAR)
1155   SMU->IEN_SET = flags;
1156 #else
1157   SMU->IEN |= flags;
1158 #endif
1159 }
1160 
1161 /***************************************************************************//**
1162  * @brief
1163  *   Get pending SMU interrupts.
1164  *
1165  * @return
1166  *   SMU interrupt sources pending.
1167  ******************************************************************************/
SMU_IntGet(void)1168 __STATIC_INLINE uint32_t SMU_IntGet(void)
1169 {
1170   return SMU->IF;
1171 }
1172 
1173 /***************************************************************************//**
1174  * @brief
1175  *   Get enabled and pending SMU interrupt flags.
1176  *   Useful for handling more interrupt sources in the same interrupt handler.
1177  *
1178  * @note
1179  *   Interrupt flags are not cleared by this function.
1180  *
1181  * @return
1182  *   Pending and enabled SMU interrupt sources.
1183  *   The return value is the bitwise AND combination of
1184  *   - the OR combination of enabled interrupt sources in SMU_IEN register
1185  *     and
1186  *   - the OR combination of valid interrupt flags in SMU_IF register.
1187  ******************************************************************************/
SMU_IntGetEnabled(void)1188 __STATIC_INLINE uint32_t SMU_IntGetEnabled(void)
1189 {
1190   uint32_t tmp;
1191 
1192   // Store SMU->IEN in temporary variable to define explicit order
1193   // of volatile accesses.
1194   tmp = SMU->IEN;
1195 
1196   // Bitwise AND of pending and enabled interrupts.
1197   return SMU->IF & tmp;
1198 }
1199 
1200 /***************************************************************************//**
1201  * @brief
1202  *   Set one or more pending SMU interrupts from SW.
1203  *
1204  * @param[in] flags
1205  *   SMU interrupt sources to set to pending.
1206  ******************************************************************************/
SMU_IntSet(uint32_t flags)1207 __STATIC_INLINE void SMU_IntSet(uint32_t flags)
1208 {
1209 #if defined (SMU_HAS_SET_CLEAR)
1210   SMU->IF_SET = flags;
1211 #else
1212   SMU->IFS = flags;
1213 #endif
1214 }
1215 
1216 /** @} (end addtogroup smu) */
1217 
1218 #ifdef __cplusplus
1219 }
1220 #endif
1221 
1222 #endif // defined(SMU_COUNT) && (SMU_COUNT > 0)
1223 #endif // EM_SMU_H
1224