blob: 74a2989860be398ef75b1fbba9f18a80d148eb93 [file] [log] [blame]
Kristofer Jonsson49bdee82020-04-06 13:21:21 +02001/*
2 * Copyright (c) 2019-2020 Arm Limited. All rights reserved.
3 *
4 * SPDX-License-Identifier: Apache-2.0
5 *
6 * Licensed under the Apache License, Version 2.0 (the License); you may
7 * not use this file except in compliance with the License.
8 * You may obtain a copy of the License at
9 *
10 * www.apache.org/licenses/LICENSE-2.0
11 *
12 * Unless required by applicable law or agreed to in writing, software
13 * distributed under the License is distributed on an AS IS BASIS, WITHOUT
14 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 * See the License for the specific language governing permissions and
16 * limitations under the License.
17 */
18
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020019#ifndef PMU_ETHOSU_H
20#define PMU_ETHOSU_H
21
Kristofer Jonsson4dc73dc2020-10-16 12:33:47 +020022/*****************************************************************************
23 * Includes
24 *****************************************************************************/
25
Kristofer Jonsson537c71c2020-05-05 14:17:22 +020026#include <stdint.h>
27
Anton Moberg61da4d32020-12-22 16:00:31 +010028#include "ethosu_driver.h"
29
Kristofer Jonsson537c71c2020-05-05 14:17:22 +020030#ifdef __cplusplus
31extern "C" {
32#endif
33
Kristofer Jonsson4dc73dc2020-10-16 12:33:47 +020034/*****************************************************************************
35 * Defines
36 *****************************************************************************/
37
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020038#define ETHOSU_PMU_NCOUNTERS 4
39
Kristofer Jonsson4dc73dc2020-10-16 12:33:47 +020040#define ETHOSU_PMU_CNT1_Msk (1UL << 0)
41#define ETHOSU_PMU_CNT2_Msk (1UL << 1)
42#define ETHOSU_PMU_CNT3_Msk (1UL << 2)
43#define ETHOSU_PMU_CNT4_Msk (1UL << 3)
44#define ETHOSU_PMU_CCNT_Msk (1UL << 31)
45
46/*****************************************************************************
47 * Types
48 *****************************************************************************/
49
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020050/** \brief HW Supported ETHOSU PMU Events
51 *
52 * Note: These values are symbolic. Actual HW-values may change. I.e. always use API
53 * to set/get actual event-type value.
54 * */
55enum ethosu_pmu_event_type
56{
Diqing Zhong25e2c812020-04-27 13:47:25 +020057 ETHOSU_PMU_NO_EVENT = 0,
58 ETHOSU_PMU_CYCLE,
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020059 ETHOSU_PMU_NPU_IDLE,
Douglas Trohaf6a85da2020-05-11 11:45:28 +020060 ETHOSU_PMU_CC_STALLED_ON_BLOCKDEP,
61 ETHOSU_PMU_CC_STALLED_ON_SHRAM_RECONFIG,
Douglas Troha2407e962020-06-15 14:31:45 +020062 ETHOSU_PMU_NPU_ACTIVE,
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020063 ETHOSU_PMU_MAC_ACTIVE,
64 ETHOSU_PMU_MAC_ACTIVE_8BIT,
65 ETHOSU_PMU_MAC_ACTIVE_16BIT,
66 ETHOSU_PMU_MAC_DPU_ACTIVE,
67 ETHOSU_PMU_MAC_STALLED_BY_WD_ACC,
68 ETHOSU_PMU_MAC_STALLED_BY_WD,
69 ETHOSU_PMU_MAC_STALLED_BY_ACC,
70 ETHOSU_PMU_MAC_STALLED_BY_IB,
Diqing Zhong25e2c812020-04-27 13:47:25 +020071 ETHOSU_PMU_MAC_ACTIVE_32BIT,
Douglas Trohaf6a85da2020-05-11 11:45:28 +020072 ETHOSU_PMU_MAC_STALLED_BY_INT_W,
73 ETHOSU_PMU_MAC_STALLED_BY_INT_ACC,
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020074 ETHOSU_PMU_AO_ACTIVE,
75 ETHOSU_PMU_AO_ACTIVE_8BIT,
76 ETHOSU_PMU_AO_ACTIVE_16BIT,
77 ETHOSU_PMU_AO_STALLED_BY_OFMP_OB,
78 ETHOSU_PMU_AO_STALLED_BY_OFMP,
79 ETHOSU_PMU_AO_STALLED_BY_OB,
80 ETHOSU_PMU_AO_STALLED_BY_ACC_IB,
81 ETHOSU_PMU_AO_STALLED_BY_ACC,
82 ETHOSU_PMU_AO_STALLED_BY_IB,
83 ETHOSU_PMU_WD_ACTIVE,
84 ETHOSU_PMU_WD_STALLED,
85 ETHOSU_PMU_WD_STALLED_BY_WS,
86 ETHOSU_PMU_WD_STALLED_BY_WD_BUF,
87 ETHOSU_PMU_WD_PARSE_ACTIVE,
88 ETHOSU_PMU_WD_PARSE_STALLED,
89 ETHOSU_PMU_WD_PARSE_STALLED_IN,
90 ETHOSU_PMU_WD_PARSE_STALLED_OUT,
Diqing Zhong25e2c812020-04-27 13:47:25 +020091 ETHOSU_PMU_WD_TRANS_WS,
92 ETHOSU_PMU_WD_TRANS_WB,
93 ETHOSU_PMU_WD_TRANS_DW0,
94 ETHOSU_PMU_WD_TRANS_DW1,
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020095 ETHOSU_PMU_AXI0_RD_TRANS_ACCEPTED,
96 ETHOSU_PMU_AXI0_RD_TRANS_COMPLETED,
97 ETHOSU_PMU_AXI0_RD_DATA_BEAT_RECEIVED,
98 ETHOSU_PMU_AXI0_RD_TRAN_REQ_STALLED,
99 ETHOSU_PMU_AXI0_WR_TRANS_ACCEPTED,
100 ETHOSU_PMU_AXI0_WR_TRANS_COMPLETED_M,
101 ETHOSU_PMU_AXI0_WR_TRANS_COMPLETED_S,
102 ETHOSU_PMU_AXI0_WR_DATA_BEAT_WRITTEN,
103 ETHOSU_PMU_AXI0_WR_TRAN_REQ_STALLED,
104 ETHOSU_PMU_AXI0_WR_DATA_BEAT_STALLED,
105 ETHOSU_PMU_AXI0_ENABLED_CYCLES,
106 ETHOSU_PMU_AXI0_RD_STALL_LIMIT,
107 ETHOSU_PMU_AXI0_WR_STALL_LIMIT,
108 ETHOSU_PMU_AXI1_RD_TRANS_ACCEPTED,
109 ETHOSU_PMU_AXI1_RD_TRANS_COMPLETED,
110 ETHOSU_PMU_AXI1_RD_DATA_BEAT_RECEIVED,
111 ETHOSU_PMU_AXI1_RD_TRAN_REQ_STALLED,
112 ETHOSU_PMU_AXI1_WR_TRANS_ACCEPTED,
113 ETHOSU_PMU_AXI1_WR_TRANS_COMPLETED_M,
114 ETHOSU_PMU_AXI1_WR_TRANS_COMPLETED_S,
115 ETHOSU_PMU_AXI1_WR_DATA_BEAT_WRITTEN,
116 ETHOSU_PMU_AXI1_WR_TRAN_REQ_STALLED,
117 ETHOSU_PMU_AXI1_WR_DATA_BEAT_STALLED,
118 ETHOSU_PMU_AXI1_ENABLED_CYCLES,
119 ETHOSU_PMU_AXI1_RD_STALL_LIMIT,
120 ETHOSU_PMU_AXI1_WR_STALL_LIMIT,
121 ETHOSU_PMU_AXI_LATENCY_ANY,
122 ETHOSU_PMU_AXI_LATENCY_32,
123 ETHOSU_PMU_AXI_LATENCY_64,
124 ETHOSU_PMU_AXI_LATENCY_128,
125 ETHOSU_PMU_AXI_LATENCY_256,
126 ETHOSU_PMU_AXI_LATENCY_512,
127 ETHOSU_PMU_AXI_LATENCY_1024,
Stefan Nannessone2e70242020-08-19 16:01:29 +0200128 ETHOSU_PMU_ECC_DMA,
129 ETHOSU_PMU_ECC_SB0,
130 ETHOSU_PMU_ECC_SB1,
Kristofer Jonsson49bdee82020-04-06 13:21:21 +0200131
132 ETHOSU_PMU_SENTINEL // End-marker (not event)
133};
134
Kristofer Jonsson4dc73dc2020-10-16 12:33:47 +0200135/*****************************************************************************
136 * Functions
137 *****************************************************************************/
Kristofer Jonsson49bdee82020-04-06 13:21:21 +0200138
Kristofer Jonsson49bdee82020-04-06 13:21:21 +0200139/**
Kristofer Jonsson4dc73dc2020-10-16 12:33:47 +0200140 * \brief Enable the PMU
141 */
Anton Moberg61da4d32020-12-22 16:00:31 +0100142void ETHOSU_PMU_Enable_v2(struct ethosu_driver *drv);
143
144#define ETHOSU_PMU_Enable(void) ETHOSU_PMU_Enable_v2(&ethosu_drv)
Kristofer Jonsson49bdee82020-04-06 13:21:21 +0200145
146/**
Kristofer Jonsson4dc73dc2020-10-16 12:33:47 +0200147 * \brief Disable the PMU
148 */
Anton Moberg61da4d32020-12-22 16:00:31 +0100149void ETHOSU_PMU_Disable_v2(struct ethosu_driver *drv);
150
151#define ETHOSU_PMU_Disable(void) ETHOSU_PMU_Disable_v2(&ethosu_drv)
Kristofer Jonsson49bdee82020-04-06 13:21:21 +0200152
153/**
Kristofer Jonsson4dc73dc2020-10-16 12:33:47 +0200154 * \brief Set event to count for PMU eventer counter
155 * \param [in] num Event counter (0-ETHOSU_PMU_NCOUNTERS) to configure
156 * \param [in] type Event to count
157 */
Anton Moberg61da4d32020-12-22 16:00:31 +0100158void ETHOSU_PMU_Set_EVTYPER_v2(struct ethosu_driver *drv, uint32_t num, enum ethosu_pmu_event_type type);
159
160#define ETHOSU_PMU_Set_EVTYPER(num, type) ETHOSU_PMU_Set_EVTYPER_v2(&ethosu_drv, num, type)
Kristofer Jonsson49bdee82020-04-06 13:21:21 +0200161
162/**
Kristofer Jonsson4dc73dc2020-10-16 12:33:47 +0200163 * \brief Get event to count for PMU eventer counter
164 * \param [in] num Event counter (0-ETHOSU_PMU_NCOUNTERS) to configure
165 * \return type Event to count
166 */
Anton Moberg61da4d32020-12-22 16:00:31 +0100167enum ethosu_pmu_event_type ETHOSU_PMU_Get_EVTYPER_v2(struct ethosu_driver *drv, uint32_t num);
168
169#define ETHOSU_PMU_Get_EVTYPER(num) ETHOSU_PMU_Get_EVTYPER_v2(&ethosu_drv, num)
Kristofer Jonsson49bdee82020-04-06 13:21:21 +0200170
171/**
Kristofer Jonsson4dc73dc2020-10-16 12:33:47 +0200172 * \brief Reset cycle counter
173 */
Anton Moberg61da4d32020-12-22 16:00:31 +0100174void ETHOSU_PMU_CYCCNT_Reset_v2(struct ethosu_driver *drv);
175
176#define ETHOSU_PMU_CYCCNT_Reset(void) ETHOSU_PMU_CYCCNT_Reset_v2(&ethosu_drv)
Kristofer Jonsson49bdee82020-04-06 13:21:21 +0200177
178/**
Kristofer Jonsson4dc73dc2020-10-16 12:33:47 +0200179 * \brief Reset all event counters
180 */
Anton Moberg61da4d32020-12-22 16:00:31 +0100181void ETHOSU_PMU_EVCNTR_ALL_Reset_v2(struct ethosu_driver *drv);
182
183#define ETHOSU_PMU_EVCNTR_ALL_Reset(void) ETHOSU_PMU_EVCNTR_ALL_Reset_v2(&ethosu_drv)
Kristofer Jonsson49bdee82020-04-06 13:21:21 +0200184
185/**
Kristofer Jonsson4dc73dc2020-10-16 12:33:47 +0200186 * \brief Enable counters
187 * \param [in] mask Counters to enable
188 * \note Enables one or more of the following:
189 * - event counters (bit 0-ETHOSU_PMU_NCOUNTERS)
190 * - cycle counter (bit 31)
191 */
Anton Moberg61da4d32020-12-22 16:00:31 +0100192void ETHOSU_PMU_CNTR_Enable_v2(struct ethosu_driver *drv, uint32_t mask);
193
194#define ETHOSU_PMU_CNTR_Enable(mask) ETHOSU_PMU_CNTR_Enable_v2(&ethosu_drv, mask)
Kristofer Jonsson49bdee82020-04-06 13:21:21 +0200195
196/**
Kristofer Jonsson4dc73dc2020-10-16 12:33:47 +0200197 * \brief Disable counters
198 * \param [in] mask Counters to disable
199 * \note Disables one or more of the following:
200 * - event counters (bit 0-ETHOSU_PMU_NCOUNTERS)
201 * - cycle counter (bit 31)
202 */
Anton Moberg61da4d32020-12-22 16:00:31 +0100203void ETHOSU_PMU_CNTR_Disable_v2(struct ethosu_driver *drv, uint32_t mask);
204
205#define ETHOSU_PMU_CNTR_Disable(mask) ETHOSU_PMU_CNTR_Disable_v2(&ethosu_drv, mask)
Kristofer Jonsson49bdee82020-04-06 13:21:21 +0200206
207/**
Kristofer Jonsson4dc73dc2020-10-16 12:33:47 +0200208 * \brief Determine counters activation
209 *
210 * \return Event count
211 * \param [in] mask Counters to enable
212 * \return a bitmask where bit-set means:
213 * - event counters activated (bit 0-ETHOSU_PMU_NCOUNTERS)
214 * - cycle counter activate (bit 31)
215 * \note ETHOSU specific. Usage breaks CMSIS complience
216 */
Anton Moberg61da4d32020-12-22 16:00:31 +0100217uint32_t ETHOSU_PMU_CNTR_Status_v2(struct ethosu_driver *drv);
218
219#define ETHOSU_PMU_CNTR_Status(void) ETHOSU_PMU_CNTR_Status_v2(&ethosu_drv)
Kristofer Jonsson49bdee82020-04-06 13:21:21 +0200220
221/**
Kristofer Jonsson4dc73dc2020-10-16 12:33:47 +0200222 * \brief Read cycle counter (64 bit)
223 * \return Cycle count
224 * \note Two HW 32-bit registers that can increment independently in-between reads.
225 * To work-around raciness yet still avoid turning
226 * off the event both are read as one value twice. If the latter read
227 * is not greater than the former, it means overflow of LSW without
228 * incrementing MSW has occurred, in which case the former value is used.
229 */
Anton Moberg61da4d32020-12-22 16:00:31 +0100230uint64_t ETHOSU_PMU_Get_CCNTR_v2(struct ethosu_driver *drv);
231
232#define ETHOSU_PMU_Get_CCNTR(void) ETHOSU_PMU_Get_CCNTR_v2(&ethosu_drv)
Kristofer Jonsson49bdee82020-04-06 13:21:21 +0200233
234/**
Kristofer Jonsson4dc73dc2020-10-16 12:33:47 +0200235 * \brief Set cycle counter (64 bit)
236 * \param [in] val Conter value
237 * \note Two HW 32-bit registers that can increment independently in-between reads.
238 * To work-around raciness, counter is temporary disabled if enabled.
239 * \note ETHOSU specific. Usage breaks CMSIS complience
240 */
Anton Moberg61da4d32020-12-22 16:00:31 +0100241void ETHOSU_PMU_Set_CCNTR_v2(struct ethosu_driver *drv, uint64_t val);
242
243#define ETHOSU_PMU_Set_CCNTR(val) ETHOSU_PMU_Set_CCNTR_v2(&ethosu_drv, val)
Kristofer Jonsson49bdee82020-04-06 13:21:21 +0200244
245/**
Kristofer Jonsson4dc73dc2020-10-16 12:33:47 +0200246 * \brief Read event counter
247 * \param [in] num Event counter (0-ETHOSU_PMU_NCOUNTERS)
248 * \return Event count
249 */
Anton Moberg61da4d32020-12-22 16:00:31 +0100250uint32_t ETHOSU_PMU_Get_EVCNTR_v2(struct ethosu_driver *drv, uint32_t num);
251
252#define ETHOSU_PMU_Get_EVCNTR(num) ETHOSU_PMU_Get_EVCNTR_v2(&ethosu_drv, num)
Kristofer Jonsson49bdee82020-04-06 13:21:21 +0200253
254/**
Kristofer Jonsson4dc73dc2020-10-16 12:33:47 +0200255 * \brief Set event counter value
256 * \param [in] num Event counter (0-ETHOSU_PMU_NCOUNTERS)
257 * \param [in] val Conter value
258 * \note ETHOSU specific. Usage breaks CMSIS complience
259 */
Anton Moberg61da4d32020-12-22 16:00:31 +0100260void ETHOSU_PMU_Set_EVCNTR_v2(struct ethosu_driver *drv, uint32_t num, uint32_t val);
261
262#define ETHOSU_PMU_Set_EVCNTR(num, val) ETHOSU_PMU_Set_EVCNTR_v2(&ethosu_drv, num, val)
Bhavik Patel8e32b0b2020-06-23 13:48:25 +0200263
Kristofer Jonsson49bdee82020-04-06 13:21:21 +0200264/**
Kristofer Jonsson4dc73dc2020-10-16 12:33:47 +0200265 * \brief Read counter overflow status
266 * \return Counter overflow status bits for the following:
267 * - event counters (bit 0-ETHOSU_PMU_NCOUNTERS))
268 * - cycle counter (bit 31)
269 */
Anton Moberg61da4d32020-12-22 16:00:31 +0100270uint32_t ETHOSU_PMU_Get_CNTR_OVS_v2(struct ethosu_driver *drv);
271
272#define ETHOSU_PMU_Get_CNTR_OVS(void) ETHOSU_PMU_Get_CNTR_OVS_v2(&ethosu_drv)
Kristofer Jonsson49bdee82020-04-06 13:21:21 +0200273
274/**
Kristofer Jonsson4dc73dc2020-10-16 12:33:47 +0200275 * \brief Clear counter overflow status
276 * \param [in] mask Counter overflow status bits to clear
277 * \note Clears overflow status bits for one or more of the following:
278 * - event counters (bit 0-ETHOSU_PMU_NCOUNTERS)
279 * - cycle counter (bit 31)
280 */
Anton Moberg61da4d32020-12-22 16:00:31 +0100281void ETHOSU_PMU_Set_CNTR_OVS_v2(struct ethosu_driver *drv, uint32_t mask);
282
283#define ETHOSU_PMU_Set_CNTR_OVS(mask) ETHOSU_PMU_Set_CNTR_OVS_v2(&ethosu_drv, mask)
Kristofer Jonsson49bdee82020-04-06 13:21:21 +0200284
285/**
Kristofer Jonsson4dc73dc2020-10-16 12:33:47 +0200286 * \brief Enable counter overflow interrupt request
287 * \param [in] mask Counter overflow interrupt request bits to set
288 * \note Sets overflow interrupt request bits for one or more of the following:
289 * - event counters (bit 0-ETHOSU_PMU_NCOUNTERS)
290 * - cycle counter (bit 31)
291 */
Anton Moberg61da4d32020-12-22 16:00:31 +0100292void ETHOSU_PMU_Set_CNTR_IRQ_Enable_v2(struct ethosu_driver *drv, uint32_t mask);
293
294#define ETHOSU_PMU_Set_CNTR_IRQ_Enable(mask) ETHOSU_PMU_Set_CNTR_IRQ_Enable_v2(&ethosu_drv, mask)
Kristofer Jonsson49bdee82020-04-06 13:21:21 +0200295
296/**
Kristofer Jonsson4dc73dc2020-10-16 12:33:47 +0200297 * \brief Disable counter overflow interrupt request
298 * \param [in] mask Counter overflow interrupt request bits to clear
299 * \note Clears overflow interrupt request bits for one or more of the following:
300 * - event counters (bit 0-ETHOSU_PMU_NCOUNTERS)
301 * - cycle counter (bit 31)
302 */
Anton Moberg61da4d32020-12-22 16:00:31 +0100303void ETHOSU_PMU_Set_CNTR_IRQ_Disable_v2(struct ethosu_driver *drv, uint32_t mask);
304
305#define ETHOSU_PMU_Set_CNTR_IRQ_Disable(mask) ETHOSU_PMU_Set_CNTR_IRQ_Disable_v2(&ethosu_drv, mask)
Kristofer Jonsson49bdee82020-04-06 13:21:21 +0200306
307/**
Kristofer Jonsson4dc73dc2020-10-16 12:33:47 +0200308 * \brief Get counters overflow interrupt request stiinings
309 * \return mask Counter overflow interrupt request bits
310 * \note Sets overflow interrupt request bits for one or more of the following:
311 * - event counters (bit 0-ETHOSU_PMU_NCOUNTERS)
312 * - cycle counter (bit 31)
313 * \note ETHOSU specific. Usage breaks CMSIS compliance
314 */
Anton Moberg61da4d32020-12-22 16:00:31 +0100315uint32_t ETHOSU_PMU_Get_IRQ_Enable_v2(struct ethosu_driver *drv);
316
317#define ETHOSU_PMU_Get_IRQ_Enable(void) ETHOSU_PMU_Get_IRQ_Enable_v2(&ethosu_drv)
Kristofer Jonsson49bdee82020-04-06 13:21:21 +0200318
319/**
Kristofer Jonsson4dc73dc2020-10-16 12:33:47 +0200320 * \brief Software increment event counter
321 * \param [in] mask Counters to increment
322 * - event counters (bit 0-ETHOSU_PMU_NCOUNTERS)
323 * - cycle counter (bit 31)
324 * \note Software increment bits for one or more event counters.
325 */
Anton Moberg61da4d32020-12-22 16:00:31 +0100326void ETHOSU_PMU_CNTR_Increment_v2(struct ethosu_driver *drv, uint32_t mask);
327
328#define ETHOSU_PMU_CNTR_Increment(mask) ETHOSU_PMU_CNTR_Increment_v2(&ethosu_drv, mask)
Kristofer Jonsson49bdee82020-04-06 13:21:21 +0200329
Bhavik Patel4e8dbf52020-06-15 10:09:28 +0200330/**
Kristofer Jonsson4dc73dc2020-10-16 12:33:47 +0200331 * \brief Set start event number for the cycle counter
332 * \param [in] start_event Event number
333 * - Start event (bits [9:0])
334 * \note Sets the event number that starts the cycle counter.
335 * - Event number in the range 0..1023
336 */
Anton Moberg61da4d32020-12-22 16:00:31 +0100337void ETHOSU_PMU_PMCCNTR_CFG_Set_Start_Event_v2(struct ethosu_driver *drv, uint32_t start_event);
338
339#define ETHOSU_PMU_PMCCNTR_CFG_Set_Start_Event(start_event) \
340 ETHOSU_PMU_PMCCNTR_CFG_Set_Start_Event_v2(&ethosu_drv, start_event)
Bhavik Patel4e8dbf52020-06-15 10:09:28 +0200341
342/**
Kristofer Jonsson4dc73dc2020-10-16 12:33:47 +0200343 * \brief Set stop event number for the cycle counter
344 * \param [in] stop_event Event number
345 * - Stop event (bits [25:16])
346 * \note Sets the event number that stops the cycle counter.
347 * - Event number in the range 0..1023
348 */
Anton Moberg61da4d32020-12-22 16:00:31 +0100349void ETHOSU_PMU_PMCCNTR_CFG_Set_Stop_Event_v2(struct ethosu_driver *drv, uint32_t stop_event);
350
351#define ETHOSU_PMU_PMCCNTR_CFG_Set_Stop_Event(stop_event) \
352 ETHOSU_PMU_PMCCNTR_CFG_Set_Stop_Event_v2(&ethosu_drv, stop_event)
Bhavik Patel4e8dbf52020-06-15 10:09:28 +0200353
Kristofer Jonsson537c71c2020-05-05 14:17:22 +0200354#ifdef __cplusplus
355}
356#endif
357
Kristofer Jonsson49bdee82020-04-06 13:21:21 +0200358#endif /* PMU_ETHOSU_H */