Skip to content

Commit ec72295

Browse files
johan-alfven-armfabiobaltieri
authored andcommitted
drivers: misc: ethos_u: add fast-memory-region support
Add optional fast-memory-region property to the Ethos-U driver. When present in the devicetree, the driver passes the region base and size to ethosu_init(), allowing platforms to use dedicated SRAM for improved NPU performance. If the property is not specified, the driver falls back to using NULL/0, keeping existing behavior unchanged. Signed-off-by: Johan Alfvén <[email protected]>
1 parent 15d3b57 commit ec72295

File tree

3 files changed

+36
-8
lines changed

3 files changed

+36
-8
lines changed

drivers/misc/ethos_u/ethos_u_arm.c

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* SPDX-FileCopyrightText: <text>Copyright 2021-2022, 2024 Arm Limited and/or its
2+
* SPDX-FileCopyrightText: <text>Copyright 2021-2022, 2024-2025 Arm Limited and/or its
33
* affiliates <[email protected]></text>
44
* SPDX-License-Identifier: Apache-2.0
55
*/
@@ -16,6 +16,17 @@
1616
#define DT_DRV_COMPAT arm_ethos_u
1717
LOG_MODULE_REGISTER(arm_ethos_u, CONFIG_ETHOS_U_LOG_LEVEL);
1818

19+
/* DT helpers: use fast-memory-region if present; else NULL/0. */
20+
#define ETHOSU_FAST_BASE(n) \
21+
COND_CODE_1(DT_INST_NODE_HAS_PROP(n, fast_memory_region), \
22+
((void *)DT_REG_ADDR(DT_INST_PHANDLE(n, fast_memory_region))), \
23+
(NULL))
24+
25+
#define ETHOSU_FAST_SIZE(n) \
26+
COND_CODE_1(DT_INST_NODE_HAS_PROP(n, fast_memory_region), \
27+
((size_t)DT_REG_SIZE(DT_INST_PHANDLE(n, fast_memory_region))), \
28+
(0u))
29+
1930
void ethosu_zephyr_irq_handler(const struct device *dev)
2031
{
2132
struct ethosu_data *data = dev->data;
@@ -31,16 +42,18 @@ static int ethosu_zephyr_init(const struct device *dev)
3142
struct ethosu_driver *drv = &data->drv;
3243
struct ethosu_driver_version version;
3344

34-
LOG_DBG("Ethos-U DTS info. base_address=0x%p, secure_enable=%u, privilege_enable=%u",
35-
config->base_addr, config->secure_enable, config->privilege_enable);
45+
LOG_DBG("Ethos-U DTS info. base_address=%p, fast_mem=%p, fast_size=%zu, secure_enable=%u, "
46+
"privilege_enable=%u",
47+
config->base_addr, config->fast_mem_base, config->fast_mem_size,
48+
config->secure_enable, config->privilege_enable);
3649

3750
ethosu_get_driver_version(&version);
3851

3952
LOG_DBG("Version. major=%u, minor=%u, patch=%u", version.major, version.minor,
4053
version.patch);
4154

42-
if (ethosu_init(drv, config->base_addr, NULL, 0, config->secure_enable,
43-
config->privilege_enable)) {
55+
if (ethosu_init(drv, config->base_addr, config->fast_mem_base, config->fast_mem_size,
56+
config->secure_enable, config->privilege_enable)) {
4457
LOG_ERR("Failed to initialize NPU with ethosu_init().");
4558
return -EINVAL;
4659
}
@@ -65,6 +78,8 @@ static int ethosu_zephyr_init(const struct device *dev)
6578
.secure_enable = DT_INST_PROP(n, secure_enable), \
6679
.privilege_enable = DT_INST_PROP(n, privilege_enable), \
6780
.irq_config = &ethosu_zephyr_irq_config_##n, \
81+
.fast_mem_base = ETHOSU_FAST_BASE(n), \
82+
.fast_mem_size = ETHOSU_FAST_SIZE(n), \
6883
}; \
6984
\
7085
DEVICE_DT_INST_DEFINE(n, ethosu_zephyr_init, NULL, &ethosu_data_##n, &ethosu_dts_info_##n, \

drivers/misc/ethos_u/ethos_u_common.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* SPDX-FileCopyrightText: <text>Copyright 2021-2022, 2024 Arm Limited and/or its
2+
* SPDX-FileCopyrightText: <text>Copyright 2021-2022, 2024-2025 Arm Limited and/or its
33
* affiliates <[email protected]></text>
44
* SPDX-License-Identifier: Apache-2.0
55
*/
@@ -8,6 +8,7 @@
88
#define ZEPHYR_DRIVERS_MISC_ETHOS_U_ETHOS_U_COMMON_H_
99

1010
#include <ethosu_driver.h>
11+
#include <stddef.h>
1112

1213
#ifdef __cplusplus
1314
extern "C" {
@@ -18,6 +19,8 @@ struct ethosu_dts_info {
1819
bool secure_enable;
1920
bool privilege_enable;
2021
void (*irq_config)(void);
22+
const void *fast_mem_base;
23+
size_t fast_mem_size;
2124
};
2225

2326
struct ethosu_data {

dts/bindings/arm/arm,ethos-u.yaml

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
# Copyright 2022 Arm Limited and/or its affiliates <[email protected]>
2-
#
1+
# SPDX-FileCopyrightText: <text>Copyright 2022, 2025 Arm Limited and/or
2+
# its affiliates <[email protected]></text>
33
# SPDX-License-Identifier: Apache-2.0
44

55
description: |
@@ -30,3 +30,13 @@ properties:
3030
privilege-enable:
3131
type: boolean
3232
description: Configure Ethos-U NPU to operate in privileged- or non-privileged mode
33+
34+
fast-memory-region:
35+
type: phandle
36+
description: |
37+
Phandle to a node compatible with "zephyr,memory-region" that represents
38+
a dedicated fast SRAM region used by the Ethos-U driver as scratch
39+
memory (spill cache). This is used by Ethos-U65/Ethos-U85 when the model has
40+
been compiled in Dedicated SRAM mode with Vela.
41+
If omitted, the driver passes NULL/0 to ethosu_init() and no fast
42+
scratch area is used.

0 commit comments

Comments
 (0)