blob: 70e31102c7e0adeeae62d6169ed50008b09b613e [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 Jonsson3c439172020-08-05 09:38:40 +020019#ifndef ETHOSU_DRIVER_H
20#define ETHOSU_DRIVER_H
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020021
22/******************************************************************************
23 * Includes
24 ******************************************************************************/
25
Bhavik Pateldae5be02020-06-18 15:25:15 +020026#include "ethosu_device.h"
27
28#include <stdbool.h>
Kristofer Jonsson2b201c32020-09-02 16:42:43 +020029#include <stddef.h>
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020030#include <stdint.h>
31
32#ifdef __cplusplus
33extern "C" {
34#endif
35
36/******************************************************************************
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020037 * Types
38 ******************************************************************************/
39
Bhavik Pateldae5be02020-06-18 15:25:15 +020040struct ethosu_driver
41{
42 struct ethosu_device dev;
43 bool abort_inference;
Kristofer Jonsson2b201c32020-09-02 16:42:43 +020044 uint64_t fast_memory;
45 size_t fast_memory_size;
Bhavik Patel5f8dad12020-09-30 09:06:52 +020046 bool status_error;
Anton Moberg8d65b6f2020-12-21 09:37:18 +010047 bool dev_power_always_on;
Anton Moberg61da4d32020-12-22 16:00:31 +010048 struct ethosu_driver *next;
49 bool reserved;
Bhavik Pateldae5be02020-06-18 15:25:15 +020050};
51
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020052struct ethosu_version_id
53{
54 // Ethos-U id
55 uint8_t version_status;
56 uint8_t version_minor;
57 uint8_t version_major;
58 uint8_t product_major;
59 uint8_t arch_patch_rev;
60 uint8_t arch_minor_rev;
61 uint8_t arch_major_rev;
62
63 // Driver Version
64 uint8_t driver_patch_rev;
65 uint8_t driver_minor_rev;
66 uint8_t driver_major_rev;
67};
68
69struct ethosu_version_config
70{
71 uint8_t macs_per_cc;
72 uint8_t cmd_stream_version;
73 uint8_t shram_size;
74};
75
76struct ethosu_version
77{
78 struct ethosu_version_id id;
79 struct ethosu_version_config cfg;
80};
81
82/******************************************************************************
Kristofer Jonsson4dc73dc2020-10-16 12:33:47 +020083 * Variables
84 ******************************************************************************/
85
86extern struct ethosu_driver ethosu_drv;
87
88/******************************************************************************
Kristofer Jonsson49bdee82020-04-06 13:21:21 +020089 * Prototypes
90 ******************************************************************************/
91
92/**
93 * Initialize the Ethos-U driver.
94 */
Anton Moberg61da4d32020-12-22 16:00:31 +010095int ethosu_init_v4(struct ethosu_driver *drv,
96 const void *base_address,
Per Åstrande6498f02020-11-09 15:33:12 +010097 const void *fast_memory,
98 const size_t fast_memory_size,
99 uint32_t secure_enable,
100 uint32_t privilege_enable);
Kristofer Jonsson2b201c32020-09-02 16:42:43 +0200101
Per Åstrand849cf692020-11-24 07:39:55 +0100102#define ethosu_init(base_address) ethosu_init_v3(base_address, NULL, 0, 0, 0)
Per Åstrande6498f02020-11-09 15:33:12 +0100103#define ethosu_init_v2(base_address, fast_memory, fast_memory_size) \
Per Åstrand849cf692020-11-24 07:39:55 +0100104 ethosu_init_v3(base_address, fast_memory, fast_memory_size, 0, 0)
Anton Moberg61da4d32020-12-22 16:00:31 +0100105#define ethosu_init_v3(base_address, fast_memory, fast_memory_size, secure_enable, privilege_enable) \
106 ethosu_init_v4(&ethosu_drv, base_address, fast_memory, fast_memory_size, secure_enable, privilege_enable)
Kristofer Jonsson49bdee82020-04-06 13:21:21 +0200107
108/**
109 * Get Ethos-U version.
110 */
Anton Moberg61da4d32020-12-22 16:00:31 +0100111int ethosu_get_version_v2(struct ethosu_driver *drv, struct ethosu_version *version);
112
113#define ethosu_get_version(version) ethosu_get_version_v2(&ethosu_drv, version)
Kristofer Jonsson49bdee82020-04-06 13:21:21 +0200114
115/**
116 * Invoke Vela command stream.
117 */
Anton Moberg61da4d32020-12-22 16:00:31 +0100118int ethosu_invoke_v3(struct ethosu_driver *drv,
119 const void *custom_data_ptr,
Kristofer Jonsson2b201c32020-09-02 16:42:43 +0200120 const int custom_data_size,
121 const uint64_t *base_addr,
122 const size_t *base_addr_size,
123 const int num_base_addr);
124
125#define ethosu_invoke(custom_data_ptr, custom_data_size, base_addr, num_base_addr) \
126 ethosu_invoke_v2(custom_data_ptr, custom_data_size, base_addr, NULL, num_base_addr)
Anton Moberg61da4d32020-12-22 16:00:31 +0100127#define ethosu_invoke_v2(custom_data_ptr, custom_data_size, base_addr, base_addr_size, num_base_addr) \
128 ethosu_invoke_v3(&ethosu_drv, custom_data_ptr, custom_data_size, base_addr, base_addr_size, num_base_addr)
Kristofer Jonsson2b201c32020-09-02 16:42:43 +0200129
Kristofer Jonsson49bdee82020-04-06 13:21:21 +0200130/**
131 * Abort Ethos-U inference.
132 */
Anton Moberg61da4d32020-12-22 16:00:31 +0100133void ethosu_abort_v2(struct ethosu_driver *drv);
134
135#define ethosu_abort(void) ethosu_abort_v2(&ethosu_drv)
Kristofer Jonsson49bdee82020-04-06 13:21:21 +0200136
Per Åstrand25d78c02020-04-21 14:19:44 +0200137/**
138 * Interrupt handler do be called on IRQ from Ethos-U
139 */
Anton Moberg61da4d32020-12-22 16:00:31 +0100140void ethosu_irq_handler_v2(struct ethosu_driver *drv);
141
142#define ethosu_irq_handler(void) ethosu_irq_handler_v2(&ethosu_drv)
Per Åstrand25d78c02020-04-21 14:19:44 +0200143
Anton Moberg8d65b6f2020-12-21 09:37:18 +0100144/**
145 * Set Ethos-U power mode.
146 */
Anton Moberg61da4d32020-12-22 16:00:31 +0100147void ethosu_set_power_mode_v2(struct ethosu_driver *drv, bool always_on);
148
149#define ethosu_set_power_mode(always_on) ethosu_set_power_mode_v2(&ethosu_drv, always_on)
150
151/**
152 * Register a driver for multiNPU usage
153 */
154int ethosu_register_driver(struct ethosu_driver *drv);
155
156/**
157 * Deregister a driver from multiNPU usage
158 */
159int ethosu_deregister_driver(struct ethosu_driver *drv);
160
161/**
162 * Find, reserve, and return the first available driver
163 */
164struct ethosu_driver *ethosu_reserve_driver(void);
165
166/**
167 * Change driver status to available
168 */
169void ethosu_release_driver(struct ethosu_driver *drv);
Anton Moberg8d65b6f2020-12-21 09:37:18 +0100170
Kristofer Jonsson49bdee82020-04-06 13:21:21 +0200171#ifdef __cplusplus
172}
173#endif
Kristofer Jonsson3c439172020-08-05 09:38:40 +0200174
175#endif // ETHOSU_DRIVER_H