xref: /arm-trusted-firmware/include/plat/arm/common/fconf_ethosn_getter.h (revision 91f16700b400a8c0651d24a598fc48ee2997a0d7)
1*91f16700Schasinglulu /*
2*91f16700Schasinglulu  * Copyright (c) 2021-2023, Arm Limited. All rights reserved.
3*91f16700Schasinglulu  *
4*91f16700Schasinglulu  * SPDX-License-Identifier: BSD-3-Clause
5*91f16700Schasinglulu  */
6*91f16700Schasinglulu 
7*91f16700Schasinglulu #ifndef FCONF_ETHOSN_GETTER_H
8*91f16700Schasinglulu #define FCONF_ETHOSN_GETTER_H
9*91f16700Schasinglulu 
10*91f16700Schasinglulu #include <assert.h>
11*91f16700Schasinglulu #include <stdbool.h>
12*91f16700Schasinglulu 
13*91f16700Schasinglulu #include <lib/fconf/fconf.h>
14*91f16700Schasinglulu 
15*91f16700Schasinglulu #define hw_config__ethosn_config_getter(prop) ethosn_config.prop
16*91f16700Schasinglulu #define hw_config__ethosn_device_getter(dev_idx) __extension__ ({	\
17*91f16700Schasinglulu 	assert(dev_idx < ethosn_config.num_devices);			\
18*91f16700Schasinglulu 	&ethosn_config.devices[dev_idx];				\
19*91f16700Schasinglulu })
20*91f16700Schasinglulu 
21*91f16700Schasinglulu #define ETHOSN_DEV_NUM_MAX U(2)
22*91f16700Schasinglulu #define ETHOSN_DEV_CORE_NUM_MAX U(8)
23*91f16700Schasinglulu #define ETHOSN_DEV_ASSET_ALLOCATOR_NUM_MAX U(16)
24*91f16700Schasinglulu 
25*91f16700Schasinglulu struct ethosn_allocator_t {
26*91f16700Schasinglulu 	uint32_t stream_id;
27*91f16700Schasinglulu };
28*91f16700Schasinglulu 
29*91f16700Schasinglulu struct ethosn_main_allocator_t {
30*91f16700Schasinglulu 	struct ethosn_allocator_t firmware;
31*91f16700Schasinglulu 	struct ethosn_allocator_t working_data;
32*91f16700Schasinglulu };
33*91f16700Schasinglulu 
34*91f16700Schasinglulu struct ethosn_asset_allocator_t {
35*91f16700Schasinglulu 	struct ethosn_allocator_t command_stream;
36*91f16700Schasinglulu 	struct ethosn_allocator_t weight_data;
37*91f16700Schasinglulu 	struct ethosn_allocator_t buffer_data;
38*91f16700Schasinglulu 	struct ethosn_allocator_t intermediate_data;
39*91f16700Schasinglulu };
40*91f16700Schasinglulu 
41*91f16700Schasinglulu struct ethosn_core_t {
42*91f16700Schasinglulu 	uint64_t addr;
43*91f16700Schasinglulu 	struct ethosn_main_allocator_t main_allocator;
44*91f16700Schasinglulu };
45*91f16700Schasinglulu 
46*91f16700Schasinglulu struct ethosn_device_t {
47*91f16700Schasinglulu 	bool has_reserved_memory;
48*91f16700Schasinglulu 	uint64_t reserved_memory_addr;
49*91f16700Schasinglulu 	uint32_t num_cores;
50*91f16700Schasinglulu 	struct ethosn_core_t cores[ETHOSN_DEV_CORE_NUM_MAX];
51*91f16700Schasinglulu 	uint32_t num_allocators;
52*91f16700Schasinglulu 	struct ethosn_asset_allocator_t asset_allocators[ETHOSN_DEV_ASSET_ALLOCATOR_NUM_MAX];
53*91f16700Schasinglulu };
54*91f16700Schasinglulu 
55*91f16700Schasinglulu struct ethosn_config_t {
56*91f16700Schasinglulu 	uint32_t num_devices;
57*91f16700Schasinglulu 	struct ethosn_device_t devices[ETHOSN_DEV_NUM_MAX];
58*91f16700Schasinglulu };
59*91f16700Schasinglulu 
60*91f16700Schasinglulu extern struct ethosn_config_t ethosn_config;
61*91f16700Schasinglulu 
62*91f16700Schasinglulu #endif /* FCONF_ETHOSN_GETTER_H */
63