1 /*
2  * Copyright (c) 2023 Carlo Caione <ccaione@baylibre.com>
3  *
4  * SPDX-License-Identifier: Apache-2.0
5  */
6 #ifndef ZEPHYR_INCLUDE_DT_BINDINGS_MEM_ATTR_H_
7 #define ZEPHYR_INCLUDE_DT_BINDINGS_MEM_ATTR_H_
8 
9 #include <zephyr/sys/util_macro.h>
10 
11 /*
12  * Generic memory attributes.
13  *
14  * Generic memory attributes that should be common to all architectures.
15  */
16 #define DT_MEM_ATTR_MASK		GENMASK(15, 0)
17 #define DT_MEM_ATTR_GET(x)		((x) & DT_MEM_ATTR_MASK)
18 #define DT_MEM_ATTR_SHIFT		(0)
19 
20 #define  DT_MEM_CACHEABLE		BIT(0)  /* cacheable */
21 #define  DT_MEM_NON_VOLATILE		BIT(1)  /* non-volatile */
22 #define  DT_MEM_OOO			BIT(2)  /* out-of-order */
23 #define  DT_MEM_DMA			BIT(3)	/* DMA-able */
24 #define  DT_MEM_UNKNOWN			BIT(15) /* must be last */
25 /* to be continued */
26 
27 /*
28  * Software specific memory attributes.
29  *
30  * Software can define their own memory attributes if needed using the
31  * provided mask.
32  */
33 #define DT_MEM_SW_ATTR_MASK		GENMASK(19, 16)
34 #define DT_MEM_SW_ATTR_GET(x)		((x) & DT_MEM_SW_ATTR_MASK)
35 #define DT_MEM_SW_ATTR_SHIFT		(16)
36 #define DT_MEM_SW_ATTR_UNKNOWN		BIT(19)
37 
38 /*
39  * Architecture specific memory attributes.
40  *
41  * Architectures can define their own memory attributes if needed using the
42  * provided mask.
43  *
44  * See for example `include/zephyr/dt-bindings/memory-attr/memory-attr-arm.h`
45  */
46 #define DT_MEM_ARCH_ATTR_MASK		GENMASK(31, 20)
47 #define DT_MEM_ARCH_ATTR_GET(x)		((x) & DT_MEM_ARCH_ATTR_MASK)
48 #define DT_MEM_ARCH_ATTR_SHIFT		(20)
49 #define DT_MEM_ARCH_ATTR_UNKNOWN	BIT(31)
50 
51 #endif /* ZEPHYR_INCLUDE_DT_BINDINGS_MEM_ATTR_H_ */
52