Zephyr Project API
3.2.0
A Scalable Open Source RTOS
devicetree_regions.h
Go to the documentation of this file.
1
/*
2
* Copyright (c) 2021, Commonwealth Scientific and Industrial Research
3
* Organisation (CSIRO) ABN 41 687 119 230.
4
*
5
* SPDX-License-Identifier: Apache-2.0
6
*
7
* Generate memory regions from devicetree nodes.
8
*/
9
10
#ifndef ZEPHYR_INCLUDE_LINKER_DEVICETREE_REGIONS_H_
11
#define ZEPHYR_INCLUDE_LINKER_DEVICETREE_REGIONS_H_
12
44
#define LINKER_DT_NODE_REGION_NAME_TOKEN(node_id) \
45
DT_STRING_TOKEN(node_id, zephyr_memory_region)
46
78
#define LINKER_DT_NODE_REGION_NAME(node_id) \
79
STRINGIFY(LINKER_DT_NODE_REGION_NAME_TOKEN(node_id))
80
83
#define _DT_COMPATIBLE zephyr_memory_region
84
85
#define _DT_SECTION_PREFIX(node_id) UTIL_CAT(__, LINKER_DT_NODE_REGION_NAME_TOKEN(node_id))
86
#define _DT_SECTION_START(node_id) UTIL_CAT(_DT_SECTION_PREFIX(node_id), _start)
87
#define _DT_SECTION_END(node_id) UTIL_CAT(_DT_SECTION_PREFIX(node_id), _end)
88
#define _DT_SECTION_SIZE(node_id) UTIL_CAT(_DT_SECTION_PREFIX(node_id), _size)
89
#define _DT_SECTION_LOAD(node_id) UTIL_CAT(_DT_SECTION_PREFIX(node_id), _load_start)
90
91
#define _DT_ATTR(token) UTIL_CAT(UTIL_CAT(REGION_, token), _ATTR)
92
115
#define _REGION_DECLARE(node_id) \
116
LINKER_DT_NODE_REGION_NAME_TOKEN(node_id) : \
117
ORIGIN = DT_REG_ADDR(node_id), \
118
LENGTH = DT_REG_SIZE(node_id)
119
150
#define _SECTION_DECLARE(node_id) \
151
LINKER_DT_NODE_REGION_NAME_TOKEN(node_id) DT_REG_ADDR(node_id) (NOLOAD) : \
152
{ \
153
_DT_SECTION_START(node_id) = .; \
154
KEEP(*(LINKER_DT_NODE_REGION_NAME_TOKEN(node_id))) \
155
KEEP(*(LINKER_DT_NODE_REGION_NAME_TOKEN(node_id).*)) \
156
_DT_SECTION_END(node_id) = .; \
157
} > LINKER_DT_NODE_REGION_NAME_TOKEN(node_id) \
158
_DT_SECTION_SIZE(node_id) = _DT_SECTION_END(node_id) - _DT_SECTION_START(node_id); \
159
_DT_SECTION_LOAD(node_id) = LOADADDR(LINKER_DT_NODE_REGION_NAME_TOKEN(node_id));
160
164
#define _EXPAND_MPU_FN(node_id, MPU_FN, ...) \
165
MPU_FN(LINKER_DT_NODE_REGION_NAME(node_id), \
166
DT_REG_ADDR(node_id), \
167
DT_REG_SIZE(node_id), \
168
_DT_ATTR(DT_STRING_TOKEN(node_id, zephyr_memory_region_mpu))),
169
177
#define _CHECK_ATTR_FN(node_id, EXPAND_MPU_FN, ...) \
178
COND_CODE_1(UTIL_AND(DT_NODE_HAS_PROP(node_id, zephyr_memory_region_mpu), \
179
DT_NODE_HAS_PROP(node_id, zephyr_memory_region)), \
180
(EXPAND_MPU_FN(node_id, __VA_ARGS__)), \
181
())
182
187
#define _CHECK_APPLY_FN(compat, EXPAND_MPU_FN, ...) \
188
DT_FOREACH_STATUS_OKAY_VARGS(compat, _CHECK_ATTR_FN, EXPAND_MPU_FN, __VA_ARGS__)
189
200
#define LINKER_DT_REGIONS() \
201
DT_FOREACH_STATUS_OKAY(_DT_COMPATIBLE, _REGION_DECLARE)
202
207
#define LINKER_DT_SECTIONS() \
208
DT_FOREACH_STATUS_OKAY(_DT_COMPATIBLE, _SECTION_DECLARE)
209
291
#define LINKER_DT_REGION_MPU(mpu_fn) _CHECK_APPLY_FN(_DT_COMPATIBLE, _EXPAND_MPU_FN, mpu_fn)
292
293
#endif
/* ZEPHYR_INCLUDE_LINKER_DEVICETREE_REGIONS_H_ */
include
zephyr
linker
devicetree_regions.h
Generated on Tue Feb 28 2023 15:43:19 for Zephyr Project API by
1.9.2