summaryrefslogtreecommitdiffstats
path: root/include/plat/arm/common/fconf_ethosn_getter.h
blob: 5b9a7ed9d05c5d63ee1ea4b5cd333286b29d3516 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
/*
 * Copyright (c) 2021-2022, Arm Limited. All rights reserved.
 *
 * SPDX-License-Identifier: BSD-3-Clause
 */

#ifndef FCONF_ETHOSN_GETTER_H
#define FCONF_ETHOSN_GETTER_H

#include <assert.h>
#include <stdbool.h>

#include <lib/fconf/fconf.h>

#define hw_config__ethosn_config_getter(prop) ethosn_config.prop
#define hw_config__ethosn_device_getter(dev_idx) __extension__ ({	\
	assert(dev_idx < ethosn_config.num_devices);			\
	&ethosn_config.devices[dev_idx];				\
})

#define ETHOSN_DEV_NUM_MAX U(2)
#define ETHOSN_DEV_CORE_NUM_MAX U(8)
#define ETHOSN_DEV_ASSET_ALLOCATOR_NUM_MAX U(16)

struct ethosn_allocator_t {
	uint32_t stream_id;
};

struct ethosn_main_allocator_t {
	struct ethosn_allocator_t firmware;
	struct ethosn_allocator_t working_data;
};

struct ethosn_asset_allocator_t {
	struct ethosn_allocator_t command_stream;
	struct ethosn_allocator_t weight_data;
	struct ethosn_allocator_t buffer_data;
	struct ethosn_allocator_t intermediate_data;
};

struct ethosn_core_t {
	uint64_t addr;
	struct ethosn_main_allocator_t main_allocator;
};

struct ethosn_device_t {
	bool has_reserved_memory;
	uint32_t num_cores;
	struct ethosn_core_t cores[ETHOSN_DEV_CORE_NUM_MAX];
	uint32_t num_allocators;
	struct ethosn_asset_allocator_t asset_allocators[ETHOSN_DEV_ASSET_ALLOCATOR_NUM_MAX];
};

struct ethosn_config_t {
	uint32_t num_devices;
	struct ethosn_device_t devices[ETHOSN_DEV_NUM_MAX];
};

int fconf_populate_arm_ethosn(uintptr_t config);

extern struct ethosn_config_t ethosn_config;

#endif /* FCONF_ETHOSN_GETTER_H */