17#ifndef ZEPHYR_INCLUDE_DEVICETREE_H_
18#define ZEPHYR_INCLUDE_DEVICETREE_H_
20#include <zephyr/devicetree_generated.h>
23#if !defined(_LINKER) && !defined(_ASMLANGUAGE)
84#define DT_INVALID_NODE _
141#define DT_PATH(...) DT_PATH_INTERNAL(__VA_ARGS__)
197#define DT_NODELABEL(label) DT_CAT(DT_N_NODELABEL_, label)
237#define DT_ALIAS(alias) DT_CAT(DT_N_ALIAS_, alias)
244#define DT_HAS_ALIAS(alias_name) DT_NODE_EXISTS(DT_ALIAS(alias_name))
254#define DT_NODE_HASH(node_id) DT_CAT(node_id, _HASH)
350#define DT_INST(inst, compat) UTIL_CAT(DT_N_INST, DT_DASH(inst, compat))
375#define DT_PARENT(node_id) DT_CAT(node_id, _PARENT)
400#define DT_GPARENT(node_id) DT_PARENT(DT_PARENT(node_id))
437#define DT_CHILD(node_id, child) UTIL_CAT(node_id, DT_S_PREFIX(child))
471#define DT_CHILD_BY_UNIT_ADDR_INT(node_id, addr) \
472 DT_CAT3(node_id, _CHILD_UNIT_ADDR_INT_, addr)
515#define DT_COMPAT_GET_ANY_STATUS_OKAY(compat) \
516 COND_CODE_1(DT_HAS_COMPAT_STATUS_OKAY(compat), \
517 (DT_INST(0, compat)), \
547#define DT_NODE_PATH(node_id) DT_CAT(node_id, _PATH)
573#define DT_NODE_FULL_NAME(node_id) DT_CAT(node_id, _FULL_NAME)
601#define DT_NODE_FULL_NAME_UNQUOTED(node_id) DT_CAT(node_id, _FULL_NAME_UNQUOTED)
629#define DT_NODE_FULL_NAME_TOKEN(node_id) DT_CAT(node_id, _FULL_NAME_TOKEN)
659#define DT_NODE_FULL_NAME_UPPER_TOKEN(node_id) DT_CAT(node_id, _FULL_NAME_UPPER_TOKEN)
687#define DT_NODE_CHILD_IDX(node_id) DT_CAT(node_id, _CHILD_IDX)
695#define DT_CHILD_NUM(node_id) DT_CAT(node_id, _CHILD_NUM)
705#define DT_CHILD_NUM_STATUS_OKAY(node_id) \
706 DT_CAT(node_id, _CHILD_NUM_STATUS_OKAY)
728#define DT_SAME_NODE(node_id1, node_id2) \
729 IS_EQ(DT_DEP_ORD(node_id1), DT_DEP_ORD(node_id2))
755#define DT_NODELABEL_STRING_ARRAY(node_id) \
756 { DT_FOREACH_NODELABEL(node_id, DT_NODELABEL_STRING_ARRAY_ENTRY_INTERNAL) }
798#define DT_PROP(node_id, prop) DT_CAT3(node_id, _P_, prop)
832#define DT_PROP_LEN(node_id, prop) DT_CAT4(node_id, _P_, prop, _LEN)
848#define DT_PROP_LEN_OR(node_id, prop, default_value) \
849 COND_CODE_1(DT_NODE_HAS_PROP(node_id, prop), \
850 (DT_PROP_LEN(node_id, prop)), (default_value))
872#define DT_PROP_HAS_IDX(node_id, prop, idx) \
873 IS_ENABLED(DT_CAT6(node_id, _P_, prop, _IDX_, idx, _EXISTS))
907#define DT_PROP_HAS_NAME(node_id, prop, name) \
908 IS_ENABLED(DT_CAT6(node_id, _P_, prop, _NAME_, name, _EXISTS))
944#define DT_PROP_BY_IDX(node_id, prop, idx) \
945 DT_CAT5(node_id, _P_, prop, _IDX_, idx)
955#define DT_PROP_LAST(node_id, prop) \
956 DT_PROP_BY_IDX(node_id, prop, UTIL_DEC(DT_PROP_LEN(node_id, prop)))
971#define DT_PROP_OR(node_id, prop, default_value) \
972 COND_CODE_1(DT_NODE_HAS_PROP(node_id, prop), \
973 (DT_PROP(node_id, prop)), (default_value))
1030#define DT_ENUM_IDX_BY_IDX(node_id, prop, idx) \
1031 DT_CAT6(node_id, _P_, prop, _IDX_, idx, _ENUM_IDX)
1039#define DT_ENUM_IDX(node_id, prop) DT_ENUM_IDX_BY_IDX(node_id, prop, 0)
1056#define DT_ENUM_IDX_BY_IDX_OR(node_id, prop, idx, default_idx_value) \
1057 COND_CODE_1(DT_PROP_HAS_IDX(node_id, prop, idx), \
1058 (DT_ENUM_IDX_BY_IDX(node_id, prop, idx)), (default_idx_value))
1068#define DT_ENUM_IDX_OR(node_id, prop, default_idx_value) \
1069 DT_ENUM_IDX_BY_IDX_OR(node_id, prop, 0, default_idx_value)
1080#define DT_ENUM_HAS_VALUE_BY_IDX(node_id, prop, idx, value) \
1081 IS_ENABLED(DT_CAT8(node_id, _P_, prop, _IDX_, idx, _ENUM_VAL_, value, _EXISTS))
1090#define DT_ENUM_HAS_VALUE(node_id, prop, value) \
1091 IS_ENABLED(DT_CAT6(node_id, _P_, prop, _ENUM_VAL_, value, _EXISTS))
1152#define DT_STRING_TOKEN(node_id, prop) \
1153 DT_CAT4(node_id, _P_, prop, _STRING_TOKEN)
1168#define DT_STRING_TOKEN_OR(node_id, prop, default_value) \
1169 COND_CODE_1(DT_NODE_HAS_PROP(node_id, prop), \
1170 (DT_STRING_TOKEN(node_id, prop)), (default_value))
1229#define DT_STRING_UPPER_TOKEN(node_id, prop) \
1230 DT_CAT4(node_id, _P_, prop, _STRING_UPPER_TOKEN)
1246#define DT_STRING_UPPER_TOKEN_OR(node_id, prop, default_value) \
1247 COND_CODE_1(DT_NODE_HAS_PROP(node_id, prop), \
1248 (DT_STRING_UPPER_TOKEN(node_id, prop)), (default_value))
1290#define DT_STRING_UNQUOTED(node_id, prop) \
1291 DT_CAT4(node_id, _P_, prop, _STRING_UNQUOTED)
1307#define DT_STRING_UNQUOTED_OR(node_id, prop, default_value) \
1308 COND_CODE_1(DT_NODE_HAS_PROP(node_id, prop), \
1309 (DT_STRING_UNQUOTED(node_id, prop)), (default_value))
1358#define DT_STRING_TOKEN_BY_IDX(node_id, prop, idx) \
1359 DT_CAT6(node_id, _P_, prop, _IDX_, idx, _STRING_TOKEN)
1369#define DT_STRING_TOKEN_BY_IDX_OR(node_id, prop, idx, default_value) \
1370 COND_CODE_1(DT_PROP_HAS_IDX(node_id, prop, idx), \
1371 (DT_STRING_TOKEN_BY_IDX(node_id, prop, idx)), (default_value))
1420#define DT_STRING_UPPER_TOKEN_BY_IDX(node_id, prop, idx) \
1421 DT_CAT6(node_id, _P_, prop, _IDX_, idx, _STRING_UPPER_TOKEN)
1463#define DT_STRING_UNQUOTED_BY_IDX(node_id, prop, idx) \
1464 DT_CAT6(node_id, _P_, prop, _IDX_, idx, _STRING_UNQUOTED)
1519#define DT_PROP_BY_PHANDLE_IDX(node_id, phs, idx, prop) \
1520 DT_PROP(DT_PHANDLE_BY_IDX(node_id, phs, idx), prop)
1541#define DT_PROP_BY_PHANDLE_IDX_OR(node_id, phs, idx, prop, default_value) \
1542 DT_PROP_OR(DT_PHANDLE_BY_IDX(node_id, phs, idx), prop, default_value)
1555#define DT_PROP_BY_PHANDLE(node_id, ph, prop) \
1556 DT_PROP_BY_PHANDLE_IDX(node_id, ph, 0, prop)
1612#define DT_PHA_BY_IDX(node_id, pha, idx, cell) \
1613 DT_CAT7(node_id, _P_, pha, _IDX_, idx, _VAL_, cell)
1638#define DT_PHA_BY_IDX_OR(node_id, pha, idx, cell, default_value) \
1639 DT_PROP_OR(node_id, DT_CAT5(pha, _IDX_, idx, _VAL_, cell), default_value)
1648#define DT_PHA(node_id, pha, cell) DT_PHA_BY_IDX(node_id, pha, 0, cell)
1664#define DT_PHA_OR(node_id, pha, cell, default_value) \
1665 DT_PHA_BY_IDX_OR(node_id, pha, 0, cell, default_value)
1707#define DT_PHA_BY_NAME(node_id, pha, name, cell) \
1708 DT_CAT7(node_id, _P_, pha, _NAME_, name, _VAL_, cell)
1731#define DT_PHA_BY_NAME_OR(node_id, pha, name, cell, default_value) \
1732 DT_PROP_OR(node_id, DT_CAT5(pha, _NAME_, name, _VAL_, cell), default_value)
1781#define DT_PHANDLE_BY_NAME(node_id, pha, name) \
1782 DT_CAT6(node_id, _P_, pha, _NAME_, name, _PH)
1833#define DT_PHANDLE_BY_IDX(node_id, prop, idx) \
1834 DT_CAT6(node_id, _P_, prop, _IDX_, idx, _PH)
1847#define DT_PHANDLE(node_id, prop) DT_PHANDLE_BY_IDX(node_id, prop, 0)
1895#define DT_NUM_RANGES(node_id) DT_CAT(node_id, _RANGES_NUM)
1949#define DT_RANGES_HAS_IDX(node_id, idx) \
1950 IS_ENABLED(DT_CAT4(node_id, _RANGES_IDX_, idx, _EXISTS))
2004#define DT_RANGES_HAS_CHILD_BUS_FLAGS_AT_IDX(node_id, idx) \
2005 IS_ENABLED(DT_CAT4(node_id, _RANGES_IDX_, idx, _VAL_CHILD_BUS_FLAGS_EXISTS))
2044#define DT_RANGES_CHILD_BUS_FLAGS_BY_IDX(node_id, idx) \
2045 DT_CAT4(node_id, _RANGES_IDX_, idx, _VAL_CHILD_BUS_FLAGS)
2093#define DT_RANGES_CHILD_BUS_ADDRESS_BY_IDX(node_id, idx) \
2094 DT_CAT4(node_id, _RANGES_IDX_, idx, _VAL_CHILD_BUS_ADDRESS)
2142#define DT_RANGES_PARENT_BUS_ADDRESS_BY_IDX(node_id, idx) \
2143 DT_CAT4(node_id, _RANGES_IDX_, idx, _VAL_PARENT_BUS_ADDRESS)
2191#define DT_RANGES_LENGTH_BY_IDX(node_id, idx) \
2192 DT_CAT4(node_id, _RANGES_IDX_, idx, _VAL_LENGTH)
2233#define DT_FOREACH_RANGE(node_id, fn) \
2234 DT_CAT(node_id, _FOREACH_RANGE)(fn)
2281#define DT_NODE_VENDOR_BY_IDX(node_id, idx) \
2282 DT_CAT3(node_id, _COMPAT_VENDOR_IDX_, idx)
2296#define DT_NODE_VENDOR_HAS_IDX(node_id, idx) \
2297 IS_ENABLED(DT_CAT4(node_id, _COMPAT_VENDOR_IDX_, idx, _EXISTS))
2313#define DT_NODE_VENDOR_BY_IDX_OR(node_id, idx, default_value) \
2314 COND_CODE_1(DT_NODE_VENDOR_HAS_IDX(node_id, idx), \
2315 (DT_NODE_VENDOR_BY_IDX(node_id, idx)), (default_value))
2325#define DT_NODE_VENDOR_OR(node_id, default_value) \
2326 DT_NODE_VENDOR_BY_IDX_OR(node_id, 0, default_value)
2357#define DT_NODE_MODEL_BY_IDX(node_id, idx) \
2358 DT_CAT3(node_id, _COMPAT_MODEL_IDX_, idx)
2372#define DT_NODE_MODEL_HAS_IDX(node_id, idx) \
2373 IS_ENABLED(DT_CAT4(node_id, _COMPAT_MODEL_IDX_, idx, _EXISTS))
2389#define DT_NODE_MODEL_BY_IDX_OR(node_id, idx, default_value) \
2390 COND_CODE_1(DT_NODE_MODEL_HAS_IDX(node_id, idx), \
2391 (DT_NODE_MODEL_BY_IDX(node_id, idx)), (default_value))
2401#define DT_NODE_MODEL_OR(node_id, default_value) \
2402 DT_NODE_MODEL_BY_IDX_OR(node_id, 0, default_value)
2421#define DT_NUM_REGS(node_id) DT_CAT(node_id, _REG_NUM)
2434#define DT_REG_HAS_IDX(node_id, idx) \
2435 IS_ENABLED(DT_CAT4(node_id, _REG_IDX_, idx, _EXISTS))
2448#define DT_REG_HAS_NAME(node_id, name) \
2449 IS_ENABLED(DT_CAT4(node_id, _REG_NAME_, name, _EXISTS))
2462#define DT_REG_ADDR_BY_IDX_RAW(node_id, idx) \
2463 DT_CAT4(node_id, _REG_IDX_, idx, _VAL_ADDRESS)
2476#define DT_REG_ADDR_RAW(node_id) \
2477 DT_REG_ADDR_BY_IDX_RAW(node_id, 0)
2485#define DT_REG_ADDR_BY_IDX(node_id, idx) \
2486 DT_U32_C(DT_REG_ADDR_BY_IDX_RAW(node_id, idx))
2499#define DT_REG_SIZE_BY_IDX(node_id, idx) \
2500 DT_U32_C(DT_CAT4(node_id, _REG_IDX_, idx, _VAL_SIZE))
2509#define DT_REG_ADDR(node_id) DT_REG_ADDR_BY_IDX(node_id, 0)
2521#define DT_REG_ADDR_U64(node_id) DT_U64_C(DT_REG_ADDR_BY_IDX_RAW(node_id, 0))
2530#define DT_REG_SIZE(node_id) DT_REG_SIZE_BY_IDX(node_id, 0)
2538#define DT_REG_ADDR_BY_NAME(node_id, name) \
2539 DT_U32_C(DT_CAT4(node_id, _REG_NAME_, name, _VAL_ADDRESS))
2549#define DT_REG_ADDR_BY_NAME_OR(node_id, name, default_value) \
2550 COND_CODE_1(DT_REG_HAS_NAME(node_id, name), \
2551 (DT_REG_ADDR_BY_NAME(node_id, name)), (default_value))
2565#define DT_REG_ADDR_BY_NAME_U64(node_id, name) \
2566 DT_U64_C(DT_CAT4(node_id, _REG_NAME_, name, _VAL_ADDRESS))
2574#define DT_REG_SIZE_BY_NAME(node_id, name) \
2575 DT_U32_C(DT_CAT4(node_id, _REG_NAME_, name, _VAL_SIZE))
2585#define DT_REG_SIZE_BY_NAME_OR(node_id, name, default_value) \
2586 COND_CODE_1(DT_REG_HAS_NAME(node_id, name), \
2587 (DT_REG_SIZE_BY_NAME(node_id, name)), (default_value))
2608#define DT_NUM_IRQS(node_id) DT_CAT(node_id, _IRQ_NUM)
2634#define DT_NUM_NODELABELS(node_id) DT_CAT(node_id, _NODELABEL_NUM)
2642#define DT_IRQ_LEVEL(node_id) DT_CAT(node_id, _IRQ_LEVEL)
2654#define DT_IRQ_HAS_IDX(node_id, idx) \
2655 IS_ENABLED(DT_CAT4(node_id, _IRQ_IDX_, idx, _EXISTS))
2667#define DT_IRQ_HAS_CELL_AT_IDX(node_id, idx, cell) \
2668 IS_ENABLED(DT_CAT6(node_id, _IRQ_IDX_, idx, _VAL_, cell, _EXISTS))
2677#define DT_IRQ_HAS_CELL(node_id, cell) DT_IRQ_HAS_CELL_AT_IDX(node_id, 0, cell)
2688#define DT_IRQ_HAS_NAME(node_id, name) \
2689 IS_ENABLED(DT_CAT4(node_id, _IRQ_NAME_, name, _VAL_irq_EXISTS))
2726#define DT_IRQ_BY_IDX(node_id, idx, cell) \
2727 DT_CAT5(node_id, _IRQ_IDX_, idx, _VAL_, cell)
2744#define DT_IRQ_BY_NAME(node_id, name, cell) \
2745 DT_CAT5(node_id, _IRQ_NAME_, name, _VAL_, cell)
2754#define DT_IRQ(node_id, cell) DT_IRQ_BY_IDX(node_id, 0, cell)
2798#define DT_IRQ_INTC_BY_IDX(node_id, idx) \
2799 DT_CAT4(node_id, _IRQ_IDX_, idx, _CONTROLLER)
2845#define DT_IRQ_INTC_BY_NAME(node_id, name) \
2846 DT_CAT4(node_id, _IRQ_NAME_, name, _CONTROLLER)
2887#define DT_IRQ_INTC(node_id) \
2888 DT_IRQ_INTC_BY_IDX(node_id, 0)
2895#define DT_IRQN_L1_INTERNAL(node_id, idx) DT_IRQ_BY_IDX(node_id, idx, irq)
2897#define DT_IRQN_L2_INTERNAL(node_id, idx) \
2898 (IRQ_TO_L2(DT_IRQN_L1_INTERNAL(node_id, idx)) | \
2899 DT_IRQ(DT_IRQ_INTC_BY_IDX(node_id, idx), irq))
2901#define DT_IRQN_L3_INTERNAL(node_id, idx) \
2902 (IRQ_TO_L3(DT_IRQN_L1_INTERNAL(node_id, idx)) | \
2903 IRQ_TO_L2(DT_IRQ(DT_IRQ_INTC_BY_IDX(node_id, idx), irq)) | \
2904 DT_IRQ(DT_IRQ_INTC(DT_IRQ_INTC_BY_IDX(node_id, idx)), irq))
2906#define DT_IRQN_LVL_INTERNAL(node_id, idx, level) DT_CAT3(DT_IRQN_L, level, _INTERNAL)(node_id, idx)
2912#define DT_MULTI_LEVEL_IRQN_INTERNAL(node_id, idx) \
2913 DT_IRQN_LVL_INTERNAL(node_id, idx, DT_IRQ_LEVEL(node_id))
2927#define DT_IRQN_BY_IDX(node_id, idx) \
2928 COND_CODE_1(IS_ENABLED(CONFIG_MULTI_LEVEL_INTERRUPTS), \
2929 (DT_MULTI_LEVEL_IRQN_INTERNAL(node_id, idx)), \
2930 (DT_IRQ_BY_IDX(node_id, idx, irq)))
2942#define DT_IRQN(node_id) DT_IRQN_BY_IDX(node_id, 0)
2962#define DT_CHOSEN(prop) DT_CAT(DT_CHOSEN_, prop)
2970#define DT_HAS_CHOSEN(prop) IS_ENABLED(DT_CAT3(DT_CHOSEN_, prop, _EXISTS))
3021#define DT_FOREACH_NODE(fn) DT_FOREACH_HELPER(fn)
3035#define DT_FOREACH_NODE_VARGS(fn, ...) DT_FOREACH_VARGS_HELPER(fn, __VA_ARGS__)
3048#define DT_FOREACH_STATUS_OKAY_NODE(fn) DT_FOREACH_OKAY_HELPER(fn)
3064#define DT_FOREACH_STATUS_OKAY_NODE_VARGS(fn, ...) DT_FOREACH_OKAY_VARGS_HELPER(fn, __VA_ARGS__)
3112#define DT_FOREACH_ANCESTOR(node_id, fn) \
3113 DT_CAT(node_id, _FOREACH_ANCESTOR)(fn)
3158#define DT_FOREACH_CHILD(node_id, fn) \
3159 DT_CAT(node_id, _FOREACH_CHILD)(fn)
3201#define DT_FOREACH_CHILD_SEP(node_id, fn, sep) \
3202 DT_CAT(node_id, _FOREACH_CHILD_SEP)(fn, sep)
3219#define DT_FOREACH_CHILD_VARGS(node_id, fn, ...) \
3220 DT_CAT(node_id, _FOREACH_CHILD_VARGS)(fn, __VA_ARGS__)
3237#define DT_FOREACH_CHILD_SEP_VARGS(node_id, fn, sep, ...) \
3238 DT_CAT(node_id, _FOREACH_CHILD_SEP_VARGS)(fn, sep, __VA_ARGS__)
3255#define DT_FOREACH_CHILD_STATUS_OKAY(node_id, fn) \
3256 DT_CAT(node_id, _FOREACH_CHILD_STATUS_OKAY)(fn)
3274#define DT_FOREACH_CHILD_STATUS_OKAY_SEP(node_id, fn, sep) \
3275 DT_CAT(node_id, _FOREACH_CHILD_STATUS_OKAY_SEP)(fn, sep)
3296#define DT_FOREACH_CHILD_STATUS_OKAY_VARGS(node_id, fn, ...) \
3297 DT_CAT(node_id, _FOREACH_CHILD_STATUS_OKAY_VARGS)(fn, __VA_ARGS__)
3317#define DT_FOREACH_CHILD_STATUS_OKAY_SEP_VARGS(node_id, fn, sep, ...) \
3318 DT_CAT(node_id, _FOREACH_CHILD_STATUS_OKAY_SEP_VARGS)(fn, sep, __VA_ARGS__)
3370#define DT_FOREACH_PROP_ELEM(node_id, prop, fn) \
3371 DT_CAT4(node_id, _P_, prop, _FOREACH_PROP_ELEM)(fn)
3415#define DT_FOREACH_PROP_ELEM_SEP(node_id, prop, fn, sep) \
3416 DT_CAT4(node_id, _P_, prop, _FOREACH_PROP_ELEM_SEP)(fn, sep)
3438#define DT_FOREACH_PROP_ELEM_VARGS(node_id, prop, fn, ...) \
3439 DT_CAT4(node_id, _P_, prop, _FOREACH_PROP_ELEM_VARGS)(fn, __VA_ARGS__)
3457#define DT_FOREACH_PROP_ELEM_SEP_VARGS(node_id, prop, fn, sep, ...) \
3458 DT_CAT4(node_id, _P_, prop, _FOREACH_PROP_ELEM_SEP_VARGS)( \
3459 fn, sep, __VA_ARGS__)
3514#define DT_FOREACH_STATUS_OKAY(compat, fn) \
3515 COND_CODE_1(DT_HAS_COMPAT_STATUS_OKAY(compat), \
3516 (UTIL_CAT(DT_FOREACH_OKAY_, compat)(fn)), \
3563#define DT_FOREACH_STATUS_OKAY_VARGS(compat, fn, ...) \
3564 COND_CODE_1(DT_HAS_COMPAT_STATUS_OKAY(compat), \
3565 (DT_CAT(DT_FOREACH_OKAY_VARGS_, \
3566 compat)(fn, __VA_ARGS__)), \
3581#define DT_COMPAT_FOREACH_STATUS_OKAY_VARGS(compat, fn, ...) \
3582 COND_CODE_1(DT_HAS_COMPAT_STATUS_OKAY(compat), \
3583 (UTIL_CAT(DT_FOREACH_OKAY_INST_VARGS_, \
3584 compat)(fn, compat, __VA_ARGS__)), \
3626#define DT_FOREACH_NODELABEL(node_id, fn) DT_CAT(node_id, _FOREACH_NODELABEL)(fn)
3665#define DT_FOREACH_NODELABEL_VARGS(node_id, fn, ...) \
3666 DT_CAT(node_id, _FOREACH_NODELABEL_VARGS)(fn, __VA_ARGS__)
3692#define DT_NODE_EXISTS(node_id) IS_ENABLED(DT_CAT(node_id, _EXISTS))
3715#define DT_NODE_HAS_STATUS(node_id, status) \
3716 DT_NODE_HAS_STATUS_INTERNAL(node_id, status)
3738#define DT_NODE_HAS_STATUS_OKAY(node_id) DT_NODE_HAS_STATUS(node_id, okay)
3759#define DT_HAS_COMPAT_STATUS_OKAY(compat) \
3760 IS_ENABLED(DT_CAT(DT_COMPAT_HAS_OKAY_, compat))
3768#define DT_NUM_INST_STATUS_OKAY(compat) \
3769 UTIL_AND(DT_HAS_COMPAT_STATUS_OKAY(compat), \
3770 UTIL_CAT(DT_N_INST, DT_DASH(compat, NUM_OKAY)))
3799#define DT_NODE_HAS_COMPAT(node_id, compat) \
3800 IS_ENABLED(DT_CAT3(node_id, _COMPAT_MATCHES_, compat))
3816#define DT_NODE_HAS_COMPAT_STATUS(node_id, compat, status) \
3817 UTIL_AND(DT_NODE_HAS_COMPAT(node_id, compat), DT_NODE_HAS_STATUS(node_id, status))
3832#define DT_NODE_HAS_PROP(node_id, prop) \
3833 IS_ENABLED(DT_CAT4(node_id, _P_, prop, _EXISTS))
3852#define DT_PHA_HAS_CELL_AT_IDX(node_id, pha, idx, cell) \
3853 IS_ENABLED(DT_CAT8(node_id, _P_, pha, \
3854 _IDX_, idx, _VAL_, cell, _EXISTS))
3865#define DT_PHA_HAS_CELL(node_id, pha, cell) \
3866 DT_PHA_HAS_CELL_AT_IDX(node_id, pha, 0, cell)
3888#define DT_FOREACH_PHA_CELL_BY_IDX(node_id, pha, idx, fn) \
3889 DT_CAT6(node_id, _P_, pha, _IDX_, idx, _FOREACH_CELL)(fn)
3903#define DT_FOREACH_PHA_CELL_BY_IDX_SEP(node_id, pha, idx, fn, sep) \
3904 DT_CAT6(node_id, _P_, pha, _IDX_, idx, _FOREACH_CELL_SEP)(fn, sep)
3914#define DT_PHA_NUM_CELLS_BY_IDX(node_id, pha, idx) \
3915 DT_CAT6(node_id, _P_, pha, _IDX_, idx, _NUM_CELLS)
3928#define DT_PHA_ELEM_NAME_BY_IDX(node_id, pha, idx) \
3929 DT_CAT6(node_id, _P_, pha, _IDX_, idx, _NAME)
3952#define DT_FOREACH_PHA_CELL_BY_NAME(node_id, pha, name, fn) \
3953 DT_CAT6(node_id, _P_, pha, _NAME_, name, _FOREACH_CELL)(fn)
3967#define DT_FOREACH_PHA_CELL_BY_NAME_SEP(node_id, pha, name, fn, sep) \
3968 DT_CAT6(node_id, _P_, pha, _NAME_, name, _FOREACH_CELL_SEP)(fn, sep)
3978#define DT_PHA_NUM_CELLS_BY_NAME(node_id, pha, name) \
3979 DT_CAT6(node_id, _P_, pha, _NAME_, name, _NUM_CELLS)
3992#define DT_PHA_ELEM_IDX_BY_NAME(node_id, pha, name) \
3993 DT_CAT6(node_id, _P_, pha, _NAME_, name, _IDX)
4037#define DT_BUS(node_id) DT_CAT(node_id, _BUS)
4067#define DT_ON_BUS(node_id, bus) IS_ENABLED(DT_CAT3(node_id, _BUS_, bus))
4085#define DT_DRV_INST(inst) DT_INST(inst, DT_DRV_COMPAT)
4094#define DT_INST_PARENT(inst) DT_PARENT(DT_DRV_INST(inst))
4103#define DT_INST_GPARENT(inst) DT_GPARENT(DT_DRV_INST(inst))
4114#define DT_INST_CHILD(inst, child) \
4115 DT_CHILD(DT_DRV_INST(inst), child)
4129#define DT_INST_CHILD_BY_UNIT_ADDR_INT(inst, addr) \
4130 DT_CHILD_BY_UNIT_ADDR_INT(DT_DRV_INST(inst), addr)
4141#define DT_INST_CHILD_NUM(inst) DT_CHILD_NUM(DT_DRV_INST(inst))
4152#define DT_INST_CHILD_NUM_STATUS_OKAY(inst) \
4153 DT_CHILD_NUM_STATUS_OKAY(DT_DRV_INST(inst))
4163#define DT_INST_NODELABEL_STRING_ARRAY(inst) DT_NODELABEL_STRING_ARRAY(DT_DRV_INST(inst))
4173#define DT_INST_NUM_NODELABELS(inst) DT_NUM_NODELABELS(DT_DRV_INST(inst))
4189#define DT_INST_FOREACH_CHILD(inst, fn) \
4190 DT_FOREACH_CHILD(DT_DRV_INST(inst), fn)
4205#define DT_INST_FOREACH_CHILD_SEP(inst, fn, sep) \
4206 DT_FOREACH_CHILD_SEP(DT_DRV_INST(inst), fn, sep)
4223#define DT_INST_FOREACH_CHILD_VARGS(inst, fn, ...) \
4224 DT_FOREACH_CHILD_VARGS(DT_DRV_INST(inst), fn, __VA_ARGS__)
4240#define DT_INST_FOREACH_CHILD_SEP_VARGS(inst, fn, sep, ...) \
4241 DT_FOREACH_CHILD_SEP_VARGS(DT_DRV_INST(inst), fn, sep, __VA_ARGS__)
4254#define DT_INST_FOREACH_CHILD_STATUS_OKAY(inst, fn) \
4255 DT_FOREACH_CHILD_STATUS_OKAY(DT_DRV_INST(inst), fn)
4271#define DT_INST_FOREACH_CHILD_STATUS_OKAY_SEP(inst, fn, sep) \
4272 DT_FOREACH_CHILD_STATUS_OKAY_SEP(DT_DRV_INST(inst), fn, sep)
4287#define DT_INST_FOREACH_CHILD_STATUS_OKAY_VARGS(inst, fn, ...) \
4288 DT_FOREACH_CHILD_STATUS_OKAY_VARGS(DT_DRV_INST(inst), fn, __VA_ARGS__)
4305#define DT_INST_FOREACH_CHILD_STATUS_OKAY_SEP_VARGS(inst, fn, sep, ...) \
4306 DT_FOREACH_CHILD_STATUS_OKAY_SEP_VARGS(DT_DRV_INST(inst), fn, sep, __VA_ARGS__)
4315#define DT_INST_ENUM_IDX_BY_IDX(inst, prop, idx) \
4316 DT_ENUM_IDX_BY_IDX(DT_DRV_INST(inst), prop, idx)
4324#define DT_INST_ENUM_IDX(inst, prop) \
4325 DT_ENUM_IDX(DT_DRV_INST(inst), prop)
4336#define DT_INST_ENUM_IDX_BY_IDX_OR(inst, prop, idx, default_idx_value) \
4337 DT_ENUM_IDX_BY_IDX_OR(DT_DRV_INST(inst), prop, idx, default_idx_value)
4347#define DT_INST_ENUM_IDX_OR(inst, prop, default_idx_value) \
4348 DT_ENUM_IDX_OR(DT_DRV_INST(inst), prop, default_idx_value)
4358#define DT_INST_ENUM_HAS_VALUE_BY_IDX(inst, prop, idx, value) \
4359 DT_ENUM_HAS_VALUE_BY_IDX(DT_DRV_INST(inst), prop, idx, value)
4369#define DT_INST_ENUM_HAS_VALUE(inst, prop, value) \
4370 DT_ENUM_HAS_VALUE(DT_DRV_INST(inst), prop, value)
4378#define DT_INST_PROP(inst, prop) DT_PROP(DT_DRV_INST(inst), prop)
4386#define DT_INST_PROP_LEN(inst, prop) DT_PROP_LEN(DT_DRV_INST(inst), prop)
4397#define DT_INST_PROP_HAS_IDX(inst, prop, idx) \
4398 DT_PROP_HAS_IDX(DT_DRV_INST(inst), prop, idx)
4408#define DT_INST_PROP_HAS_NAME(inst, prop, name) \
4409 DT_PROP_HAS_NAME(DT_DRV_INST(inst), prop, name)
4418#define DT_INST_PROP_BY_IDX(inst, prop, idx) \
4419 DT_PROP_BY_IDX(DT_DRV_INST(inst), prop, idx)
4428#define DT_INST_PROP_OR(inst, prop, default_value) \
4429 DT_PROP_OR(DT_DRV_INST(inst), prop, default_value)
4438#define DT_INST_PROP_LEN_OR(inst, prop, default_value) \
4439 DT_PROP_LEN_OR(DT_DRV_INST(inst), prop, default_value)
4450#define DT_INST_STRING_TOKEN(inst, prop) \
4451 DT_STRING_TOKEN(DT_DRV_INST(inst), prop)
4460#define DT_INST_STRING_UPPER_TOKEN(inst, prop) \
4461 DT_STRING_UPPER_TOKEN(DT_DRV_INST(inst), prop)
4471#define DT_INST_STRING_UNQUOTED(inst, prop) \
4472 DT_STRING_UNQUOTED(DT_DRV_INST(inst), prop)
4481#define DT_INST_STRING_TOKEN_BY_IDX(inst, prop, idx) \
4482 DT_STRING_TOKEN_BY_IDX(DT_DRV_INST(inst), prop, idx)
4492#define DT_INST_STRING_TOKEN_BY_IDX_OR(inst, prop, idx, default_value) \
4493 DT_STRING_TOKEN_BY_IDX_OR(DT_DRV_INST(inst), prop, idx, default_value)
4502#define DT_INST_STRING_UPPER_TOKEN_BY_IDX(inst, prop, idx) \
4503 DT_STRING_UPPER_TOKEN_BY_IDX(DT_DRV_INST(inst), prop, idx)
4512#define DT_INST_STRING_UNQUOTED_BY_IDX(inst, prop, idx) \
4513 DT_STRING_UNQUOTED_BY_IDX(DT_DRV_INST(inst), prop, idx)
4523#define DT_INST_PROP_BY_PHANDLE(inst, ph, prop) \
4524 DT_INST_PROP_BY_PHANDLE_IDX(inst, ph, 0, prop)
4537#define DT_INST_PROP_BY_PHANDLE_IDX(inst, phs, idx, prop) \
4538 DT_PROP_BY_PHANDLE_IDX(DT_DRV_INST(inst), phs, idx, prop)
4548#define DT_INST_PHA_BY_IDX(inst, pha, idx, cell) \
4549 DT_PHA_BY_IDX(DT_DRV_INST(inst), pha, idx, cell)
4560#define DT_INST_PHA_BY_IDX_OR(inst, pha, idx, cell, default_value) \
4561 DT_PHA_BY_IDX_OR(DT_DRV_INST(inst), pha, idx, cell, default_value)
4571#define DT_INST_PHA(inst, pha, cell) DT_INST_PHA_BY_IDX(inst, pha, 0, cell)
4581#define DT_INST_PHA_OR(inst, pha, cell, default_value) \
4582 DT_INST_PHA_BY_IDX_OR(inst, pha, 0, cell, default_value)
4593#define DT_INST_PHA_BY_NAME(inst, pha, name, cell) \
4594 DT_PHA_BY_NAME(DT_DRV_INST(inst), pha, name, cell)
4605#define DT_INST_PHA_BY_NAME_OR(inst, pha, name, cell, default_value) \
4606 DT_PHA_BY_NAME_OR(DT_DRV_INST(inst), pha, name, cell, default_value)
4616#define DT_INST_PHANDLE_BY_NAME(inst, pha, name) \
4617 DT_PHANDLE_BY_NAME(DT_DRV_INST(inst), pha, name) \
4628#define DT_INST_PHANDLE_BY_IDX(inst, prop, idx) \
4629 DT_PHANDLE_BY_IDX(DT_DRV_INST(inst), prop, idx)
4639#define DT_INST_PHANDLE(inst, prop) DT_INST_PHANDLE_BY_IDX(inst, prop, 0)
4648#define DT_INST_REG_HAS_IDX(inst, idx) DT_REG_HAS_IDX(DT_DRV_INST(inst), idx)
4657#define DT_INST_REG_HAS_NAME(inst, name) DT_REG_HAS_NAME(DT_DRV_INST(inst), name)
4665#define DT_INST_REG_ADDR_BY_IDX_RAW(inst, idx) DT_REG_ADDR_BY_IDX_RAW(DT_DRV_INST(inst), idx)
4673#define DT_INST_REG_ADDR_BY_IDX(inst, idx) DT_REG_ADDR_BY_IDX(DT_DRV_INST(inst), idx)
4681#define DT_INST_REG_SIZE_BY_IDX(inst, idx) \
4682 DT_REG_SIZE_BY_IDX(DT_DRV_INST(inst), idx)
4690#define DT_INST_REG_ADDR_BY_NAME(inst, name) \
4691 DT_REG_ADDR_BY_NAME(DT_DRV_INST(inst), name)
4701#define DT_INST_REG_ADDR_BY_NAME_OR(inst, name, default_value) \
4702 DT_REG_ADDR_BY_NAME_OR(DT_DRV_INST(inst), name, default_value)
4716#define DT_INST_REG_ADDR_BY_NAME_U64(inst, name) \
4717 DT_REG_ADDR_BY_NAME_U64(DT_DRV_INST(inst), name)
4725#define DT_INST_REG_SIZE_BY_NAME(inst, name) \
4726 DT_REG_SIZE_BY_NAME(DT_DRV_INST(inst), name)
4736#define DT_INST_REG_SIZE_BY_NAME_OR(inst, name, default_value) \
4737 DT_REG_SIZE_BY_NAME_OR(DT_DRV_INST(inst), name, default_value)
4744#define DT_INST_REG_ADDR_RAW(inst) DT_INST_REG_ADDR_BY_IDX_RAW(inst, 0)
4751#define DT_INST_REG_ADDR(inst) DT_INST_REG_ADDR_BY_IDX(inst, 0)
4764#define DT_INST_REG_ADDR_U64(inst) DT_REG_ADDR_U64(DT_DRV_INST(inst))
4771#define DT_INST_REG_SIZE(inst) DT_INST_REG_SIZE_BY_IDX(inst, 0)
4779#define DT_INST_NUM_IRQS(inst) DT_NUM_IRQS(DT_DRV_INST(inst))
4787#define DT_INST_IRQ_LEVEL(inst) DT_IRQ_LEVEL(DT_DRV_INST(inst))
4796#define DT_INST_IRQ_BY_IDX(inst, idx, cell) \
4797 DT_IRQ_BY_IDX(DT_DRV_INST(inst), idx, cell)
4805#define DT_INST_IRQ_INTC_BY_IDX(inst, idx) \
4806 DT_IRQ_INTC_BY_IDX(DT_DRV_INST(inst), idx)
4814#define DT_INST_IRQ_INTC_BY_NAME(inst, name) \
4815 DT_IRQ_INTC_BY_NAME(DT_DRV_INST(inst), name)
4824#define DT_INST_IRQ_INTC(inst) \
4825 DT_INST_IRQ_INTC_BY_IDX(inst, 0)
4834#define DT_INST_IRQ_BY_NAME(inst, name, cell) \
4835 DT_IRQ_BY_NAME(DT_DRV_INST(inst), name, cell)
4843#define DT_INST_IRQ(inst, cell) DT_INST_IRQ_BY_IDX(inst, 0, cell)
4850#define DT_INST_IRQN(inst) DT_IRQN(DT_DRV_INST(inst))
4858#define DT_INST_IRQN_BY_IDX(inst, idx) DT_IRQN_BY_IDX(DT_DRV_INST(inst), idx)
4865#define DT_INST_BUS(inst) DT_BUS(DT_DRV_INST(inst))
4874#define DT_INST_ON_BUS(inst, bus) DT_ON_BUS(DT_DRV_INST(inst), bus)
4885#define DT_INST_STRING_TOKEN_OR(inst, name, default_value) \
4886 DT_STRING_TOKEN_OR(DT_DRV_INST(inst), name, default_value)
4896#define DT_INST_STRING_UPPER_TOKEN_OR(inst, name, default_value) \
4897 DT_STRING_UPPER_TOKEN_OR(DT_DRV_INST(inst), name, default_value)
4907#define DT_INST_STRING_UNQUOTED_OR(inst, name, default_value) \
4908 DT_STRING_UNQUOTED_OR(DT_DRV_INST(inst), name, default_value)
4940#define DT_HAS_COMPAT_ON_BUS_STATUS_OKAY(compat, bus) \
4941 IS_ENABLED(DT_CAT4(DT_COMPAT_, compat, _BUS_, bus))
4975#define DT_ANY_INST_ON_BUS_STATUS_OKAY(bus) \
4976 DT_HAS_COMPAT_ON_BUS_STATUS_OKAY(DT_DRV_COMPAT, bus)
5022#define DT_ANY_INST_HAS_PROP_STATUS_OKAY(prop) \
5023 UTIL_NOT(IS_EMPTY( \
5024 DT_INST_FOREACH_STATUS_OKAY_VARGS(DT_ANY_INST_HAS_PROP_STATUS_OKAY_, prop)))
5070#define DT_ALL_INST_HAS_PROP_STATUS_OKAY(prop) \
5071 IS_EMPTY(DT_INST_FOREACH_STATUS_OKAY_VARGS(DT_ALL_INST_HAS_PROP_STATUS_OKAY_, prop))
5117#define DT_ANY_COMPAT_HAS_PROP_STATUS_OKAY(compat, prop) \
5118 (DT_COMPAT_FOREACH_STATUS_OKAY_VARGS(compat, DT_COMPAT_NODE_HAS_PROP_AND_OR, prop) 0)
5167#define DT_ANY_INST_HAS_BOOL_STATUS_OKAY(prop) \
5168 UTIL_NOT(IS_EMPTY( \
5169 DT_INST_FOREACH_STATUS_OKAY_VARGS(DT_ANY_INST_HAS_BOOL_STATUS_OKAY_, prop)))
5216#define DT_ALL_INST_HAS_BOOL_STATUS_OKAY(prop) \
5217 IS_EMPTY(DT_INST_FOREACH_STATUS_OKAY_VARGS(DT_ALL_INST_HAS_BOOL_STATUS_OKAY_, prop))
5284#define DT_INST_FOREACH_STATUS_OKAY(fn) \
5285 COND_CODE_1(DT_HAS_COMPAT_STATUS_OKAY(DT_DRV_COMPAT), \
5286 (UTIL_CAT(DT_FOREACH_OKAY_INST_, \
5287 DT_DRV_COMPAT)(fn)), \
5302#define DT_INST_FOREACH_STATUS_OKAY_VARGS(fn, ...) \
5303 COND_CODE_1(DT_HAS_COMPAT_STATUS_OKAY(DT_DRV_COMPAT), \
5304 (UTIL_CAT(DT_FOREACH_OKAY_INST_VARGS_, \
5305 DT_DRV_COMPAT)(fn, __VA_ARGS__)), \
5317#define DT_INST_FOREACH_NODELABEL(inst, fn) \
5318 DT_FOREACH_NODELABEL(DT_DRV_INST(inst), fn)
5331#define DT_INST_FOREACH_NODELABEL_VARGS(inst, fn, ...) \
5332 DT_FOREACH_NODELABEL_VARGS(DT_DRV_INST(inst), fn, __VA_ARGS__)
5344#define DT_INST_FOREACH_PROP_ELEM(inst, prop, fn) \
5345 DT_FOREACH_PROP_ELEM(DT_DRV_INST(inst), prop, fn)
5359#define DT_INST_FOREACH_PROP_ELEM_SEP(inst, prop, fn, sep) \
5360 DT_FOREACH_PROP_ELEM_SEP(DT_DRV_INST(inst), prop, fn, sep)
5376#define DT_INST_FOREACH_PROP_ELEM_VARGS(inst, prop, fn, ...) \
5377 DT_FOREACH_PROP_ELEM_VARGS(DT_DRV_INST(inst), prop, fn, __VA_ARGS__)
5396#define DT_INST_FOREACH_PROP_ELEM_SEP_VARGS(inst, prop, fn, sep, ...) \
5397 DT_FOREACH_PROP_ELEM_SEP_VARGS(DT_DRV_INST(inst), prop, fn, sep, \
5406#define DT_INST_NODE_HAS_PROP(inst, prop) \
5407 DT_NODE_HAS_PROP(DT_DRV_INST(inst), prop)
5415#define DT_INST_NODE_HAS_COMPAT(inst, compat) \
5416 DT_NODE_HAS_COMPAT(DT_DRV_INST(inst), compat)
5428#define DT_INST_PHA_HAS_CELL_AT_IDX(inst, pha, idx, cell) \
5429 DT_PHA_HAS_CELL_AT_IDX(DT_DRV_INST(inst), pha, idx, cell)
5440#define DT_INST_PHA_HAS_CELL(inst, pha, cell) \
5441 DT_INST_PHA_HAS_CELL_AT_IDX(inst, pha, 0, cell)
5450#define DT_INST_IRQ_HAS_IDX(inst, idx) DT_IRQ_HAS_IDX(DT_DRV_INST(inst), idx)
5460#define DT_INST_IRQ_HAS_CELL_AT_IDX(inst, idx, cell) \
5461 DT_IRQ_HAS_CELL_AT_IDX(DT_DRV_INST(inst), idx, cell)
5470#define DT_INST_IRQ_HAS_CELL(inst, cell) \
5471 DT_INST_IRQ_HAS_CELL_AT_IDX(inst, 0, cell)
5479#define DT_INST_IRQ_HAS_NAME(inst, name) \
5480 DT_IRQ_HAS_NAME(DT_DRV_INST(inst), name)
5499#define DT_ANY_INST_HAS_PROP_STATUS_OKAY_(idx, prop) \
5500 IF_ENABLED(DT_INST_NODE_HAS_PROP(idx, prop), (1,))
5514#define DT_ANY_INST_HAS_BOOL_STATUS_OKAY_(idx, prop) \
5515 IF_ENABLED(DT_INST_PROP(idx, prop), (1,))
5528#define DT_ALL_INST_HAS_PROP_STATUS_OKAY_(idx, prop) \
5529 IF_DISABLED(DT_INST_NODE_HAS_PROP(idx, prop), (1,))
5543#define DT_ALL_INST_HAS_BOOL_STATUS_OKAY_(idx, prop) \
5544 IF_DISABLED(DT_INST_PROP(idx, prop), (1,))
5546#define DT_PATH_INTERNAL(...) \
5547 UTIL_CAT(DT_ROOT, MACRO_MAP_CAT(DT_S_PREFIX, __VA_ARGS__))
5553#define DT_S_PREFIX(name) _S_##name
5569#define DT_CAT(a1, a2) a1 ## a2
5571#define DT_CAT3(a1, a2, a3) a1 ## a2 ## a3
5573#define DT_CAT4(a1, a2, a3, a4) a1 ## a2 ## a3 ## a4
5575#define DT_CAT5(a1, a2, a3, a4, a5) a1 ## a2 ## a3 ## a4 ## a5
5577#define DT_CAT6(a1, a2, a3, a4, a5, a6) a1 ## a2 ## a3 ## a4 ## a5 ## a6
5579#define DT_CAT7(a1, a2, a3, a4, a5, a6, a7) \
5580 a1 ## a2 ## a3 ## a4 ## a5 ## a6 ## a7
5582#define DT_CAT8(a1, a2, a3, a4, a5, a6, a7, a8) \
5583 a1 ## a2 ## a3 ## a4 ## a5 ## a6 ## a7 ## a8
5590#define DT_DASH(...) MACRO_MAP_CAT(DT_DASH_PREFIX, __VA_ARGS__)
5592#define DT_DASH_PREFIX(name) _##name
5594#define DT_NODE_HAS_STATUS_INTERNAL(node_id, status) \
5595 IS_ENABLED(DT_CAT3(node_id, _STATUS_, status))
5600#define DT_COMPAT_NODE_HAS_PROP_AND_OR(inst, compat, prop) \
5601 DT_NODE_HAS_PROP(DT_INST(inst, compat), prop) ||
5607#if defined(_LINKER) || defined(_ASMLANGUAGE)
5608#define DT_U32_C(_v) (_v)
5610#define DT_U32_C(_v) UINT32_C(_v)
5617#if defined(_LINKER) || defined(_ASMLANGUAGE)
5618#define DT_U64_C(_v) (_v)
5620#define DT_U64_C(_v) UINT64_C(_v)
5626#define DT_NODELABEL_STRING_ARRAY_ENTRY_INTERNAL(nodelabel) DT_STRINGIFY_INTERNAL(nodelabel),
5627#define DT_STRINGIFY_INTERNAL(arg) DT_STRINGIFY_INTERNAL_HELPER(arg)
5628#define DT_STRINGIFY_INTERNAL_HELPER(arg) #arg
Clocks Devicetree macro public API header file.
CAN devicetree macro public API header file.
Display Devicetree macro public API header file.
DMA Devicetree macro public API header file.
GPIO Devicetree macro public API header file.
HW spinlock Devicetree macro public API header file.
MBOX Devicetree macro public API header file.
Devicetree pin control helpers.
Reset Controller Devicetree macro public API header file.
SPI Devicetree macro public API header file.
Flash Devicetree macro public API header file.
IO channels devicetree macro public API header file.
Public interface for multi-level interrupts.
Devicetree node dependency ordinals.
Port / Endpoint Devicetree macro public API header file.
PWMs Devicetree macro public API header file.