blob: af4e5032f4993fc79ea0cb669a9ebaedc5de2d9e [file] [log] [blame]
Kristofer Jonsson537c71c2020-05-05 14:17:22 +02001/*
Jonny Svärd301399d2022-04-26 18:31:24 +02002 * Copyright (c) 2019-2022 Arm Limited.
Kristofer Jonsson537c71c2020-05-05 14:17:22 +02003 *
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
19/*****************************************************************************
20 * Includes
21 *****************************************************************************/
22
Jonny Svärd136810f2021-10-13 16:04:26 +020023#include "ethosu_device.h"
Bhavik Pateldae5be02020-06-18 15:25:15 +020024#include "ethosu_driver.h"
Jonny Svärd136810f2021-10-13 16:04:26 +020025#include "ethosu_interface.h"
Anton Moberg6eab40b2021-07-07 11:43:51 +020026#include "ethosu_log.h"
Bhavik Pateldae5be02020-06-18 15:25:15 +020027#include "pmu_ethosu.h"
28
Kristofer Jonsson537c71c2020-05-05 14:17:22 +020029#include <assert.h>
Per Åstrande07b1f92020-09-28 08:31:46 +020030#include <inttypes.h>
Bhavik Pateldae5be02020-06-18 15:25:15 +020031#include <stddef.h>
Kristofer Jonsson537c71c2020-05-05 14:17:22 +020032
33/*****************************************************************************
34 * Defines
35 *****************************************************************************/
36
Jonny Svärd136810f2021-10-13 16:04:26 +020037#define MASK_0_31_BITS (0xFFFFFFFF)
38#define MASK_32_47_BITS (0xFFFF00000000)
39
Kristofer Jonsson537c71c2020-05-05 14:17:22 +020040#define COMMA ,
41#define SEMICOLON ;
42
Kristofer Jonsson537c71c2020-05-05 14:17:22 +020043#define EVTYPE(A, name) \
Jonny Svärd136810f2021-10-13 16:04:26 +020044 case PMU_EVENT_##name: \
Kristofer Jonsson537c71c2020-05-05 14:17:22 +020045 return ETHOSU_PMU_##name
46
Jonny Svärd136810f2021-10-13 16:04:26 +020047#define EVID(A, name) (PMU_EVENT_##name)
Bhavik Patel8e32b0b2020-06-23 13:48:25 +020048
Kristofer Jonsson537c71c2020-05-05 14:17:22 +020049/*****************************************************************************
50 * Variables
51 *****************************************************************************/
52
Jonny Svärd136810f2021-10-13 16:04:26 +020053static const enum pmu_event eventbyid[] = {EXPAND_PMU_EVENT(EVID, COMMA)};
Kristofer Jonsson537c71c2020-05-05 14:17:22 +020054
55/*****************************************************************************
Kristofer Jonsson4dc73dc2020-10-16 12:33:47 +020056 * Static functions
Kristofer Jonsson537c71c2020-05-05 14:17:22 +020057 *****************************************************************************/
58
Kristofer Jonsson4dc73dc2020-10-16 12:33:47 +020059static enum ethosu_pmu_event_type pmu_event_type(uint32_t id)
Kristofer Jonsson537c71c2020-05-05 14:17:22 +020060{
61 switch (id)
62 {
Jonny Svärd136810f2021-10-13 16:04:26 +020063 EXPAND_PMU_EVENT(EVTYPE, SEMICOLON);
Per Åstrande07b1f92020-09-28 08:31:46 +020064 default:
Kristofer Jonsson089a3472021-11-12 12:52:07 +010065 LOG_ERR("Unknown PMU event id: 0x%" PRIx32, id);
Kristofer Jonsson537c71c2020-05-05 14:17:22 +020066 }
67
68 return ETHOSU_PMU_SENTINEL;
69}
70
Kristofer Jonsson4dc73dc2020-10-16 12:33:47 +020071static uint32_t pmu_event_value(enum ethosu_pmu_event_type event)
Kristofer Jonsson537c71c2020-05-05 14:17:22 +020072{
Per Åstrand51c18ba2020-09-28 11:25:36 +020073 int a = event;
74 if ((a < ETHOSU_PMU_SENTINEL) && (a >= ETHOSU_PMU_NO_EVENT))
75 {
76 return eventbyid[event];
77 }
78 else
Kristofer Jonsson537c71c2020-05-05 14:17:22 +020079 {
80 return (uint32_t)(-1);
81 }
Kristofer Jonsson537c71c2020-05-05 14:17:22 +020082}
83
Kristofer Jonsson4dc73dc2020-10-16 12:33:47 +020084/*****************************************************************************
85 * Functions
86 *****************************************************************************/
Bhavik Patel8e32b0b2020-06-23 13:48:25 +020087
Anton Mobergc6fd88e2021-05-03 17:00:33 +020088void ETHOSU_PMU_Enable(struct ethosu_driver *drv)
Bhavik Patel8e32b0b2020-06-23 13:48:25 +020089{
Kristofer Jonsson089a3472021-11-12 12:52:07 +010090 LOG_DEBUG("Enable PMU");
Jonny Svärd136810f2021-10-13 16:04:26 +020091 struct pmcr_r pmcr = {0};
92 pmcr.cnt_en = 1;
Jonny Svärd301399d2022-04-26 18:31:24 +020093 ethosu_request_power(drv);
Jonny Svärd136810f2021-10-13 16:04:26 +020094 drv->dev->reg->PMCR.word = pmcr.word;
Bhavik Patel8e32b0b2020-06-23 13:48:25 +020095}
96
Anton Mobergc6fd88e2021-05-03 17:00:33 +020097void ETHOSU_PMU_Disable(struct ethosu_driver *drv)
Bhavik Patel8e32b0b2020-06-23 13:48:25 +020098{
Kristofer Jonsson089a3472021-11-12 12:52:07 +010099 LOG_DEBUG("Disable PMU");
Jonny Svärd136810f2021-10-13 16:04:26 +0200100 drv->dev->reg->PMCR.word = 0;
Jonny Svärd301399d2022-04-26 18:31:24 +0200101 ethosu_release_power(drv);
Bhavik Patel8e32b0b2020-06-23 13:48:25 +0200102}
103
Jonny Svärd20ce37f2021-12-17 17:00:57 +0100104uint32_t ETHOSU_PMU_Get_NumEventCounters(void)
105{
106 return NPU_REG_PMEVCNTR_ARRLEN;
107}
108
Anton Mobergc6fd88e2021-05-03 17:00:33 +0200109void ETHOSU_PMU_Set_EVTYPER(struct ethosu_driver *drv, uint32_t num, enum ethosu_pmu_event_type type)
Bhavik Patel8e32b0b2020-06-23 13:48:25 +0200110{
Kristofer Jonsson1c893b52021-05-26 12:06:14 +0200111 assert(num < ETHOSU_PMU_NCOUNTERS);
Kristofer Jonssonef387ea2020-08-25 16:32:21 +0200112 uint32_t val = pmu_event_value(type);
Kristofer Jonsson089a3472021-11-12 12:52:07 +0100113 LOG_DEBUG("num=%u, type=%d, val=%u", num, type, val);
Jonny Svärd136810f2021-10-13 16:04:26 +0200114 drv->dev->reg->PMEVTYPER[num].word = val;
Bhavik Patel8e32b0b2020-06-23 13:48:25 +0200115}
116
Anton Mobergc6fd88e2021-05-03 17:00:33 +0200117enum ethosu_pmu_event_type ETHOSU_PMU_Get_EVTYPER(struct ethosu_driver *drv, uint32_t num)
Bhavik Patel8e32b0b2020-06-23 13:48:25 +0200118{
Kristofer Jonsson1c893b52021-05-26 12:06:14 +0200119 assert(num < ETHOSU_PMU_NCOUNTERS);
Jonny Svärd136810f2021-10-13 16:04:26 +0200120 uint32_t val = drv->dev->reg->PMEVTYPER[num].word;
Kristofer Jonssonef387ea2020-08-25 16:32:21 +0200121 enum ethosu_pmu_event_type type = pmu_event_type(val);
Kristofer Jonsson089a3472021-11-12 12:52:07 +0100122 LOG_DEBUG("num=%u, type=%d, val=%u", num, type, val);
Kristofer Jonssonef387ea2020-08-25 16:32:21 +0200123 return type;
Bhavik Patel8e32b0b2020-06-23 13:48:25 +0200124}
125
Anton Mobergc6fd88e2021-05-03 17:00:33 +0200126void ETHOSU_PMU_CYCCNT_Reset(struct ethosu_driver *drv)
Bhavik Patel8e32b0b2020-06-23 13:48:25 +0200127{
Kristofer Jonsson089a3472021-11-12 12:52:07 +0100128 LOG_DEBUG("Reset PMU cycle counter");
Bhavik Patel8e32b0b2020-06-23 13:48:25 +0200129 struct pmcr_r pmcr;
Jonny Svärd136810f2021-10-13 16:04:26 +0200130 pmcr.word = drv->dev->reg->PMCR.word;
131 pmcr.cycle_cnt_rst = 1;
132 drv->dev->reg->PMCR.word = pmcr.word;
Bhavik Patel8e32b0b2020-06-23 13:48:25 +0200133}
134
Anton Mobergc6fd88e2021-05-03 17:00:33 +0200135void ETHOSU_PMU_EVCNTR_ALL_Reset(struct ethosu_driver *drv)
Bhavik Patel8e32b0b2020-06-23 13:48:25 +0200136{
Kristofer Jonsson089a3472021-11-12 12:52:07 +0100137 LOG_DEBUG("Reset all events");
Bhavik Patel8e32b0b2020-06-23 13:48:25 +0200138 struct pmcr_r pmcr;
Jonny Svärd136810f2021-10-13 16:04:26 +0200139 pmcr.word = drv->dev->reg->PMCR.word;
140 pmcr.event_cnt_rst = 1;
141 drv->dev->reg->PMCR.word = pmcr.word;
Bhavik Patel8e32b0b2020-06-23 13:48:25 +0200142}
143
Anton Mobergc6fd88e2021-05-03 17:00:33 +0200144void ETHOSU_PMU_CNTR_Enable(struct ethosu_driver *drv, uint32_t mask)
Bhavik Patel8e32b0b2020-06-23 13:48:25 +0200145{
Kristofer Jonsson089a3472021-11-12 12:52:07 +0100146 LOG_DEBUG("mask=0x%08x", mask);
Jonny Svärd136810f2021-10-13 16:04:26 +0200147 drv->dev->reg->PMCNTENSET.word = mask;
Bhavik Patel8e32b0b2020-06-23 13:48:25 +0200148}
149
Anton Mobergc6fd88e2021-05-03 17:00:33 +0200150void ETHOSU_PMU_CNTR_Disable(struct ethosu_driver *drv, uint32_t mask)
Bhavik Patel8e32b0b2020-06-23 13:48:25 +0200151{
Kristofer Jonsson089a3472021-11-12 12:52:07 +0100152 LOG_DEBUG("mask=0x%08x", mask);
Jonny Svärd136810f2021-10-13 16:04:26 +0200153 drv->dev->reg->PMCNTENCLR.word = mask;
Bhavik Patel8e32b0b2020-06-23 13:48:25 +0200154}
155
Anton Mobergc6fd88e2021-05-03 17:00:33 +0200156uint32_t ETHOSU_PMU_CNTR_Status(struct ethosu_driver *drv)
Bhavik Patel8e32b0b2020-06-23 13:48:25 +0200157{
Jonny Svärd136810f2021-10-13 16:04:26 +0200158 uint32_t pmcntenset = drv->dev->reg->PMCNTENSET.word;
Kristofer Jonsson089a3472021-11-12 12:52:07 +0100159 LOG_DEBUG("mask=0x%08x", pmcntenset);
Jonny Svärd136810f2021-10-13 16:04:26 +0200160 return pmcntenset;
Bhavik Patel8e32b0b2020-06-23 13:48:25 +0200161}
162
Anton Mobergc6fd88e2021-05-03 17:00:33 +0200163uint64_t ETHOSU_PMU_Get_CCNTR(struct ethosu_driver *drv)
Bhavik Patel8e32b0b2020-06-23 13:48:25 +0200164{
Jonny Svärd136810f2021-10-13 16:04:26 +0200165 uint32_t val_lo = drv->dev->reg->PMCCNTR.CYCLE_CNT_LO;
166 uint32_t val_hi = drv->dev->reg->PMCCNTR.CYCLE_CNT_HI;
Kristofer Jonsson4dc73dc2020-10-16 12:33:47 +0200167 uint64_t val = ((uint64_t)val_hi << 32) | val_lo;
Bhavik Patel8e32b0b2020-06-23 13:48:25 +0200168
Kristofer Jonsson089a3472021-11-12 12:52:07 +0100169 LOG_DEBUG("val=%" PRIu64, val);
Kristofer Jonssonef387ea2020-08-25 16:32:21 +0200170 return val;
Bhavik Patel8e32b0b2020-06-23 13:48:25 +0200171}
172
Anton Mobergc6fd88e2021-05-03 17:00:33 +0200173void ETHOSU_PMU_Set_CCNTR(struct ethosu_driver *drv, uint64_t val)
Bhavik Patel8e32b0b2020-06-23 13:48:25 +0200174{
Anton Mobergc6fd88e2021-05-03 17:00:33 +0200175 uint32_t active = ETHOSU_PMU_CNTR_Status(drv) & ETHOSU_PMU_CCNT_Msk;
Bhavik Patel8e32b0b2020-06-23 13:48:25 +0200176
Kristofer Jonsson089a3472021-11-12 12:52:07 +0100177 LOG_DEBUG("val=%llu", val);
Kristofer Jonssonef387ea2020-08-25 16:32:21 +0200178
Kristofer Jonsson4dc73dc2020-10-16 12:33:47 +0200179 if (active)
Bhavik Patel8e32b0b2020-06-23 13:48:25 +0200180 {
Anton Mobergc6fd88e2021-05-03 17:00:33 +0200181 ETHOSU_PMU_CNTR_Disable(drv, ETHOSU_PMU_CCNT_Msk);
Bhavik Patel8e32b0b2020-06-23 13:48:25 +0200182 }
183
Jonny Svärd136810f2021-10-13 16:04:26 +0200184 drv->dev->reg->PMCCNTR.CYCLE_CNT_LO = val & MASK_0_31_BITS;
185 drv->dev->reg->PMCCNTR.CYCLE_CNT_HI = (val & MASK_32_47_BITS) >> 32;
Bhavik Patel8e32b0b2020-06-23 13:48:25 +0200186
Kristofer Jonsson4dc73dc2020-10-16 12:33:47 +0200187 if (active)
Bhavik Patel8e32b0b2020-06-23 13:48:25 +0200188 {
Anton Mobergc6fd88e2021-05-03 17:00:33 +0200189 ETHOSU_PMU_CNTR_Enable(drv, ETHOSU_PMU_CCNT_Msk);
Bhavik Patel8e32b0b2020-06-23 13:48:25 +0200190 }
191}
192
Anton Mobergc6fd88e2021-05-03 17:00:33 +0200193uint32_t ETHOSU_PMU_Get_EVCNTR(struct ethosu_driver *drv, uint32_t num)
Bhavik Patel8e32b0b2020-06-23 13:48:25 +0200194{
Kristofer Jonsson1c893b52021-05-26 12:06:14 +0200195 assert(num < ETHOSU_PMU_NCOUNTERS);
Jonny Svärd136810f2021-10-13 16:04:26 +0200196 uint32_t val = drv->dev->reg->PMEVCNTR[num].word;
Kristofer Jonsson089a3472021-11-12 12:52:07 +0100197 LOG_DEBUG("num=%u, val=%u", num, val);
Kristofer Jonsson4dc73dc2020-10-16 12:33:47 +0200198
Kristofer Jonssonef387ea2020-08-25 16:32:21 +0200199 return val;
Bhavik Patel8e32b0b2020-06-23 13:48:25 +0200200}
201
Anton Mobergc6fd88e2021-05-03 17:00:33 +0200202void ETHOSU_PMU_Set_EVCNTR(struct ethosu_driver *drv, uint32_t num, uint32_t val)
Bhavik Patel8e32b0b2020-06-23 13:48:25 +0200203{
Kristofer Jonsson1c893b52021-05-26 12:06:14 +0200204 assert(num < ETHOSU_PMU_NCOUNTERS);
Kristofer Jonsson089a3472021-11-12 12:52:07 +0100205 LOG_DEBUG("num=%u, val=%u", num, val);
Jonny Svärd136810f2021-10-13 16:04:26 +0200206 drv->dev->reg->PMEVCNTR[num].word = val;
Bhavik Patel8e32b0b2020-06-23 13:48:25 +0200207}
208
Anton Mobergc6fd88e2021-05-03 17:00:33 +0200209uint32_t ETHOSU_PMU_Get_CNTR_OVS(struct ethosu_driver *drv)
Bhavik Patel8e32b0b2020-06-23 13:48:25 +0200210{
Anton Moberg6eab40b2021-07-07 11:43:51 +0200211 LOG_DEBUG("");
Jonny Svärd136810f2021-10-13 16:04:26 +0200212 return drv->dev->reg->PMOVSSET.word;
Bhavik Patel8e32b0b2020-06-23 13:48:25 +0200213}
214
Anton Mobergc6fd88e2021-05-03 17:00:33 +0200215void ETHOSU_PMU_Set_CNTR_OVS(struct ethosu_driver *drv, uint32_t mask)
Bhavik Patel8e32b0b2020-06-23 13:48:25 +0200216{
Anton Moberg6eab40b2021-07-07 11:43:51 +0200217 LOG_DEBUG("");
Jonny Svärd136810f2021-10-13 16:04:26 +0200218 drv->dev->reg->PMOVSCLR.word = mask;
Bhavik Patel8e32b0b2020-06-23 13:48:25 +0200219}
220
Anton Mobergc6fd88e2021-05-03 17:00:33 +0200221void ETHOSU_PMU_Set_CNTR_IRQ_Enable(struct ethosu_driver *drv, uint32_t mask)
Bhavik Patel8e32b0b2020-06-23 13:48:25 +0200222{
Kristofer Jonsson089a3472021-11-12 12:52:07 +0100223 LOG_DEBUG("mask=0x%08x", mask);
Jonny Svärd136810f2021-10-13 16:04:26 +0200224 drv->dev->reg->PMINTSET.word = mask;
Bhavik Patel8e32b0b2020-06-23 13:48:25 +0200225}
226
Anton Mobergc6fd88e2021-05-03 17:00:33 +0200227void ETHOSU_PMU_Set_CNTR_IRQ_Disable(struct ethosu_driver *drv, uint32_t mask)
Bhavik Patel8e32b0b2020-06-23 13:48:25 +0200228{
Kristofer Jonsson089a3472021-11-12 12:52:07 +0100229 LOG_DEBUG("mask=0x%08x", mask);
Jonny Svärd136810f2021-10-13 16:04:26 +0200230 drv->dev->reg->PMINTCLR.word = mask;
Bhavik Patel8e32b0b2020-06-23 13:48:25 +0200231}
232
Anton Mobergc6fd88e2021-05-03 17:00:33 +0200233uint32_t ETHOSU_PMU_Get_IRQ_Enable(struct ethosu_driver *drv)
Bhavik Patel8e32b0b2020-06-23 13:48:25 +0200234{
Jonny Svärd136810f2021-10-13 16:04:26 +0200235 uint32_t pmint = drv->dev->reg->PMINTSET.word;
Kristofer Jonsson089a3472021-11-12 12:52:07 +0100236 LOG_DEBUG("mask=0x%08x", pmint);
Jonny Svärd136810f2021-10-13 16:04:26 +0200237 return pmint;
Bhavik Patel8e32b0b2020-06-23 13:48:25 +0200238}
239
Anton Mobergc6fd88e2021-05-03 17:00:33 +0200240void ETHOSU_PMU_CNTR_Increment(struct ethosu_driver *drv, uint32_t mask)
Bhavik Patel8e32b0b2020-06-23 13:48:25 +0200241{
Anton Moberg6eab40b2021-07-07 11:43:51 +0200242 LOG_DEBUG("");
Anton Mobergc6fd88e2021-05-03 17:00:33 +0200243 uint32_t cntrs_active = ETHOSU_PMU_CNTR_Status(drv);
Bhavik Patel8e32b0b2020-06-23 13:48:25 +0200244
Kristofer Jonsson4dc73dc2020-10-16 12:33:47 +0200245 // Disable counters
Anton Mobergc6fd88e2021-05-03 17:00:33 +0200246 ETHOSU_PMU_CNTR_Disable(drv, mask);
Kristofer Jonsson4dc73dc2020-10-16 12:33:47 +0200247
248 // Increment cycle counter
Bhavik Patel8e32b0b2020-06-23 13:48:25 +0200249 if (mask & ETHOSU_PMU_CCNT_Msk)
250 {
Jonny Svärd136810f2021-10-13 16:04:26 +0200251 uint64_t val = ETHOSU_PMU_Get_CCNTR(drv) + 1;
252 drv->dev->reg->PMCCNTR.CYCLE_CNT_LO = val & MASK_0_31_BITS;
253 drv->dev->reg->PMCCNTR.CYCLE_CNT_HI = (val & MASK_32_47_BITS) >> 32;
Bhavik Patel8e32b0b2020-06-23 13:48:25 +0200254 }
Kristofer Jonsson4dc73dc2020-10-16 12:33:47 +0200255
Bhavik Patel8e32b0b2020-06-23 13:48:25 +0200256 for (int i = 0; i < ETHOSU_PMU_NCOUNTERS; i++)
257 {
Kristofer Jonsson4dc73dc2020-10-16 12:33:47 +0200258 if (mask & (1 << i))
Bhavik Patel8e32b0b2020-06-23 13:48:25 +0200259 {
Jonny Svärd136810f2021-10-13 16:04:26 +0200260 uint32_t val = ETHOSU_PMU_Get_EVCNTR(drv, i);
261 drv->dev->reg->PMEVCNTR[i].word = val + 1;
Bhavik Patel8e32b0b2020-06-23 13:48:25 +0200262 }
263 }
Kristofer Jonsson4dc73dc2020-10-16 12:33:47 +0200264
265 // Reenable the active counters
Anton Mobergc6fd88e2021-05-03 17:00:33 +0200266 ETHOSU_PMU_CNTR_Enable(drv, cntrs_active);
Bhavik Patel8e32b0b2020-06-23 13:48:25 +0200267}
268
Anton Mobergc6fd88e2021-05-03 17:00:33 +0200269void ETHOSU_PMU_PMCCNTR_CFG_Set_Start_Event(struct ethosu_driver *drv, enum ethosu_pmu_event_type start_event)
Bhavik Patel8e32b0b2020-06-23 13:48:25 +0200270{
Kristofer Jonsson089a3472021-11-12 12:52:07 +0100271 LOG_DEBUG("start_event=%u", start_event);
Per Åstrand0fd65ce2021-03-11 10:25:18 +0100272 uint32_t val = pmu_event_value(start_event);
Kristofer Jonsson4dc73dc2020-10-16 12:33:47 +0200273 struct pmccntr_cfg_r cfg;
Jonny Svärd136810f2021-10-13 16:04:26 +0200274 cfg.word = drv->dev->reg->PMCCNTR_CFG.word;
275 cfg.CYCLE_CNT_CFG_START = val;
276 drv->dev->reg->PMCCNTR_CFG.word = cfg.word;
Bhavik Patel8e32b0b2020-06-23 13:48:25 +0200277}
278
Anton Mobergc6fd88e2021-05-03 17:00:33 +0200279void ETHOSU_PMU_PMCCNTR_CFG_Set_Stop_Event(struct ethosu_driver *drv, enum ethosu_pmu_event_type stop_event)
Bhavik Patel8e32b0b2020-06-23 13:48:25 +0200280{
Kristofer Jonsson089a3472021-11-12 12:52:07 +0100281 LOG_DEBUG("stop_event=%u", stop_event);
Per Åstrand0fd65ce2021-03-11 10:25:18 +0100282 uint32_t val = pmu_event_value(stop_event);
Kristofer Jonsson4dc73dc2020-10-16 12:33:47 +0200283 struct pmccntr_cfg_r cfg;
Jonny Svärd136810f2021-10-13 16:04:26 +0200284 cfg.word = drv->dev->reg->PMCCNTR_CFG.word;
285 cfg.CYCLE_CNT_CFG_STOP = val;
286 drv->dev->reg->PMCCNTR_CFG.word = cfg.word;
287}
Kristofer Jonsson4e53fee2022-09-29 12:03:36 +0200288
289uint32_t ETHOSU_PMU_Get_QREAD(struct ethosu_driver *drv)
290{
291 uint32_t val = drv->dev->reg->QREAD.word;
292 LOG_DEBUG("qread=%u", val);
293 return val;
294}
295
296uint32_t ETHOSU_PMU_Get_STATUS(struct ethosu_driver *drv)
297{
298 uint32_t val = drv->dev->reg->STATUS.word;
299 LOG_DEBUG("status=0x%x", val);
300 return val;
301}