/* * Copyright (c) 2021, Commonwealth Scientific and Industrial Research * Organisation (CSIRO) ABN 41 687 119 230. * * SPDX-License-Identifier: Apache-2.0 * * Generate memory regions from devicetree nodes. */ /** * @brief Get the linker memory-region name * * This attempts to use the zephyr,memory-region property, falling back * to the node path if it doesn't exist. * * Example devicetree fragment: * * / { * soc { * sram1: memory@2000000 { * zephyr,memory-region = "MY_NAME"; * }; * sram2: memory@2001000 { ... }; * }; * }; * * Example usage: * * LINKER_DT_NODE_REGION_NAME(DT_NODELABEL(sram1)) // "MY_NAME" * LINKER_DT_NODE_REGION_NAME(DT_NODELABEL(sram2)) // "/soc/memory@2001000" * * @param node_id node identifier * @return the name of the memory memory region the node will generate */ #define LINKER_DT_NODE_REGION_NAME(node_id) \ DT_PROP_OR(node_id, zephyr_memory_region, DT_NODE_PATH(node_id)) /** @cond INTERNAL_HIDDEN */ /** * @brief Declare a memory region * * @param node_id devicetree node identifier * @param attr region attributes */ #define _REGION_DECLARE(node_id, attr) \ LINKER_DT_NODE_REGION_NAME(node_id)(attr) : \ ORIGIN = DT_REG_ADDR(node_id), \ LENGTH = DT_REG_SIZE(node_id) /** @endcond */ /** * @brief Generate a linker memory region from a devicetree node * * @param node_id devicetree node identifier with a \ property defining * region location and size * @param attr region attributes to use (rx, rw, ...) */ #define LINKER_DT_REGION_FROM_NODE(node_id, attr) \ COND_CODE_1(DT_NODE_HAS_STATUS(node_id, okay), \ (_REGION_DECLARE(node_id, attr)), \ ())