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)
704#define DT_CHILD_NUM_STATUS_OKAY(node_id) \
705 DT_CAT(node_id, _CHILD_NUM_STATUS_OKAY)
716#define DT_DESCENDANT_NUM_ON_BUS(node_id, bus) \
717 DT_CAT3(node_id, _DESCENDANT_NUM_ON_BUS_, bus)
729#define DT_DESCENDANT_NUM_ON_BUS_STATUS_OKAY(node_id, bus) \
730 DT_CAT4(node_id, _DESCENDANT_NUM_ON_BUS_, bus, _STATUS_OKAY)
752#define DT_SAME_NODE(node_id1, node_id2) \
753 IS_EQ(DT_DEP_ORD(node_id1), DT_DEP_ORD(node_id2))
779#define DT_NODELABEL_STRING_ARRAY(node_id) \
780 { DT_FOREACH_NODELABEL(node_id, DT_NODELABEL_STRING_ARRAY_ENTRY_INTERNAL) }
822#define DT_PROP(node_id, prop) DT_CAT3(node_id, _P_, prop)
856#define DT_PROP_LEN(node_id, prop) DT_CAT4(node_id, _P_, prop, _LEN)
872#define DT_PROP_LEN_OR(node_id, prop, default_value) \
873 COND_CODE_1(DT_NODE_HAS_PROP(node_id, prop), \
874 (DT_PROP_LEN(node_id, prop)), (default_value))
896#define DT_PROP_HAS_IDX(node_id, prop, idx) \
897 IS_ENABLED(DT_CAT6(node_id, _P_, prop, _IDX_, idx, _EXISTS))
931#define DT_PROP_HAS_NAME(node_id, prop, name) \
932 IS_ENABLED(DT_CAT6(node_id, _P_, prop, _NAME_, name, _EXISTS))
968#define DT_PROP_BY_IDX(node_id, prop, idx) \
969 DT_CAT5(node_id, _P_, prop, _IDX_, idx)
979#define DT_PROP_LAST(node_id, prop) \
980 DT_PROP_BY_IDX(node_id, prop, UTIL_DEC(DT_PROP_LEN(node_id, prop)))
995#define DT_PROP_OR(node_id, prop, default_value) \
996 COND_CODE_1(DT_NODE_HAS_PROP(node_id, prop), \
997 (DT_PROP(node_id, prop)), (default_value))
1054#define DT_ENUM_IDX_BY_IDX(node_id, prop, idx) \
1055 DT_CAT6(node_id, _P_, prop, _IDX_, idx, _ENUM_IDX)
1063#define DT_ENUM_IDX(node_id, prop) DT_ENUM_IDX_BY_IDX(node_id, prop, 0)
1080#define DT_ENUM_IDX_BY_IDX_OR(node_id, prop, idx, default_idx_value) \
1081 COND_CODE_1(DT_PROP_HAS_IDX(node_id, prop, idx), \
1082 (DT_ENUM_IDX_BY_IDX(node_id, prop, idx)), (default_idx_value))
1092#define DT_ENUM_IDX_OR(node_id, prop, default_idx_value) \
1093 DT_ENUM_IDX_BY_IDX_OR(node_id, prop, 0, default_idx_value)
1104#define DT_ENUM_HAS_VALUE_BY_IDX(node_id, prop, idx, value) \
1105 IS_ENABLED(DT_CAT8(node_id, _P_, prop, _IDX_, idx, _ENUM_VAL_, value, _EXISTS))
1114#define DT_ENUM_HAS_VALUE(node_id, prop, value) \
1115 IS_ENABLED(DT_CAT6(node_id, _P_, prop, _ENUM_VAL_, value, _EXISTS))
1176#define DT_STRING_TOKEN(node_id, prop) \
1177 DT_CAT4(node_id, _P_, prop, _STRING_TOKEN)
1192#define DT_STRING_TOKEN_OR(node_id, prop, default_value) \
1193 COND_CODE_1(DT_NODE_HAS_PROP(node_id, prop), \
1194 (DT_STRING_TOKEN(node_id, prop)), (default_value))
1253#define DT_STRING_UPPER_TOKEN(node_id, prop) \
1254 DT_CAT4(node_id, _P_, prop, _STRING_UPPER_TOKEN)
1270#define DT_STRING_UPPER_TOKEN_OR(node_id, prop, default_value) \
1271 COND_CODE_1(DT_NODE_HAS_PROP(node_id, prop), \
1272 (DT_STRING_UPPER_TOKEN(node_id, prop)), (default_value))
1314#define DT_STRING_UNQUOTED(node_id, prop) \
1315 DT_CAT4(node_id, _P_, prop, _STRING_UNQUOTED)
1331#define DT_STRING_UNQUOTED_OR(node_id, prop, default_value) \
1332 COND_CODE_1(DT_NODE_HAS_PROP(node_id, prop), \
1333 (DT_STRING_UNQUOTED(node_id, prop)), (default_value))
1382#define DT_STRING_TOKEN_BY_IDX(node_id, prop, idx) \
1383 DT_CAT6(node_id, _P_, prop, _IDX_, idx, _STRING_TOKEN)
1393#define DT_STRING_TOKEN_BY_IDX_OR(node_id, prop, idx, default_value) \
1394 COND_CODE_1(DT_PROP_HAS_IDX(node_id, prop, idx), \
1395 (DT_STRING_TOKEN_BY_IDX(node_id, prop, idx)), (default_value))
1444#define DT_STRING_UPPER_TOKEN_BY_IDX(node_id, prop, idx) \
1445 DT_CAT6(node_id, _P_, prop, _IDX_, idx, _STRING_UPPER_TOKEN)
1487#define DT_STRING_UNQUOTED_BY_IDX(node_id, prop, idx) \
1488 DT_CAT6(node_id, _P_, prop, _IDX_, idx, _STRING_UNQUOTED)
1543#define DT_PROP_BY_PHANDLE_IDX(node_id, phs, idx, prop) \
1544 DT_PROP(DT_PHANDLE_BY_IDX(node_id, phs, idx), prop)
1565#define DT_PROP_BY_PHANDLE_IDX_OR(node_id, phs, idx, prop, default_value) \
1566 DT_PROP_OR(DT_PHANDLE_BY_IDX(node_id, phs, idx), prop, default_value)
1579#define DT_PROP_BY_PHANDLE(node_id, ph, prop) \
1580 DT_PROP_BY_PHANDLE_IDX(node_id, ph, 0, prop)
1636#define DT_PHA_BY_IDX(node_id, pha, idx, cell) \
1637 DT_CAT7(node_id, _P_, pha, _IDX_, idx, _VAL_, cell)
1662#define DT_PHA_BY_IDX_OR(node_id, pha, idx, cell, default_value) \
1663 DT_PROP_OR(node_id, DT_CAT5(pha, _IDX_, idx, _VAL_, cell), default_value)
1672#define DT_PHA(node_id, pha, cell) DT_PHA_BY_IDX(node_id, pha, 0, cell)
1688#define DT_PHA_OR(node_id, pha, cell, default_value) \
1689 DT_PHA_BY_IDX_OR(node_id, pha, 0, cell, default_value)
1731#define DT_PHA_BY_NAME(node_id, pha, name, cell) \
1732 DT_CAT7(node_id, _P_, pha, _NAME_, name, _VAL_, cell)
1755#define DT_PHA_BY_NAME_OR(node_id, pha, name, cell, default_value) \
1756 DT_PROP_OR(node_id, DT_CAT5(pha, _NAME_, name, _VAL_, cell), default_value)
1805#define DT_PHANDLE_BY_NAME(node_id, pha, name) \
1806 DT_CAT6(node_id, _P_, pha, _NAME_, name, _PH)
1857#define DT_PHANDLE_BY_IDX(node_id, prop, idx) \
1858 DT_CAT6(node_id, _P_, prop, _IDX_, idx, _PH)
1871#define DT_PHANDLE(node_id, prop) DT_PHANDLE_BY_IDX(node_id, prop, 0)
1919#define DT_NUM_RANGES(node_id) DT_CAT(node_id, _RANGES_NUM)
1973#define DT_RANGES_HAS_IDX(node_id, idx) \
1974 IS_ENABLED(DT_CAT4(node_id, _RANGES_IDX_, idx, _EXISTS))
2028#define DT_RANGES_HAS_CHILD_BUS_FLAGS_AT_IDX(node_id, idx) \
2029 IS_ENABLED(DT_CAT4(node_id, _RANGES_IDX_, idx, _VAL_CHILD_BUS_FLAGS_EXISTS))
2068#define DT_RANGES_CHILD_BUS_FLAGS_BY_IDX(node_id, idx) \
2069 DT_CAT4(node_id, _RANGES_IDX_, idx, _VAL_CHILD_BUS_FLAGS)
2117#define DT_RANGES_CHILD_BUS_ADDRESS_BY_IDX(node_id, idx) \
2118 DT_CAT4(node_id, _RANGES_IDX_, idx, _VAL_CHILD_BUS_ADDRESS)
2166#define DT_RANGES_PARENT_BUS_ADDRESS_BY_IDX(node_id, idx) \
2167 DT_CAT4(node_id, _RANGES_IDX_, idx, _VAL_PARENT_BUS_ADDRESS)
2215#define DT_RANGES_LENGTH_BY_IDX(node_id, idx) \
2216 DT_CAT4(node_id, _RANGES_IDX_, idx, _VAL_LENGTH)
2257#define DT_FOREACH_RANGE(node_id, fn) \
2258 DT_CAT(node_id, _FOREACH_RANGE)(fn)
2305#define DT_NODE_VENDOR_BY_IDX(node_id, idx) \
2306 DT_CAT3(node_id, _COMPAT_VENDOR_IDX_, idx)
2320#define DT_NODE_VENDOR_HAS_IDX(node_id, idx) \
2321 IS_ENABLED(DT_CAT4(node_id, _COMPAT_VENDOR_IDX_, idx, _EXISTS))
2337#define DT_NODE_VENDOR_BY_IDX_OR(node_id, idx, default_value) \
2338 COND_CODE_1(DT_NODE_VENDOR_HAS_IDX(node_id, idx), \
2339 (DT_NODE_VENDOR_BY_IDX(node_id, idx)), (default_value))
2349#define DT_NODE_VENDOR_OR(node_id, default_value) \
2350 DT_NODE_VENDOR_BY_IDX_OR(node_id, 0, default_value)
2381#define DT_NODE_MODEL_BY_IDX(node_id, idx) \
2382 DT_CAT3(node_id, _COMPAT_MODEL_IDX_, idx)
2396#define DT_NODE_MODEL_HAS_IDX(node_id, idx) \
2397 IS_ENABLED(DT_CAT4(node_id, _COMPAT_MODEL_IDX_, idx, _EXISTS))
2413#define DT_NODE_MODEL_BY_IDX_OR(node_id, idx, default_value) \
2414 COND_CODE_1(DT_NODE_MODEL_HAS_IDX(node_id, idx), \
2415 (DT_NODE_MODEL_BY_IDX(node_id, idx)), (default_value))
2425#define DT_NODE_MODEL_OR(node_id, default_value) \
2426 DT_NODE_MODEL_BY_IDX_OR(node_id, 0, default_value)
2445#define DT_NUM_REGS(node_id) DT_CAT(node_id, _REG_NUM)
2458#define DT_REG_HAS_IDX(node_id, idx) \
2459 IS_ENABLED(DT_CAT4(node_id, _REG_IDX_, idx, _EXISTS))
2472#define DT_REG_HAS_NAME(node_id, name) \
2473 IS_ENABLED(DT_CAT4(node_id, _REG_NAME_, name, _EXISTS))
2486#define DT_REG_ADDR_BY_IDX_RAW(node_id, idx) \
2487 DT_CAT4(node_id, _REG_IDX_, idx, _VAL_ADDRESS)
2500#define DT_REG_ADDR_RAW(node_id) \
2501 DT_REG_ADDR_BY_IDX_RAW(node_id, 0)
2509#define DT_REG_ADDR_BY_IDX(node_id, idx) \
2510 DT_U32_C(DT_REG_ADDR_BY_IDX_RAW(node_id, idx))
2523#define DT_REG_SIZE_BY_IDX(node_id, idx) \
2524 DT_U32_C(DT_CAT4(node_id, _REG_IDX_, idx, _VAL_SIZE))
2533#define DT_REG_ADDR(node_id) DT_REG_ADDR_BY_IDX(node_id, 0)
2545#define DT_REG_ADDR_U64(node_id) DT_U64_C(DT_REG_ADDR_BY_IDX_RAW(node_id, 0))
2554#define DT_REG_SIZE(node_id) DT_REG_SIZE_BY_IDX(node_id, 0)
2562#define DT_REG_ADDR_BY_NAME(node_id, name) \
2563 DT_U32_C(DT_CAT4(node_id, _REG_NAME_, name, _VAL_ADDRESS))
2573#define DT_REG_ADDR_BY_NAME_OR(node_id, name, default_value) \
2574 COND_CODE_1(DT_REG_HAS_NAME(node_id, name), \
2575 (DT_REG_ADDR_BY_NAME(node_id, name)), (default_value))
2589#define DT_REG_ADDR_BY_NAME_U64(node_id, name) \
2590 DT_U64_C(DT_CAT4(node_id, _REG_NAME_, name, _VAL_ADDRESS))
2598#define DT_REG_SIZE_BY_NAME(node_id, name) \
2599 DT_U32_C(DT_CAT4(node_id, _REG_NAME_, name, _VAL_SIZE))
2609#define DT_REG_SIZE_BY_NAME_OR(node_id, name, default_value) \
2610 COND_CODE_1(DT_REG_HAS_NAME(node_id, name), \
2611 (DT_REG_SIZE_BY_NAME(node_id, name)), (default_value))
2661#define DT_FOREACH_REG(node_id, fn) \
2662 DT_CAT(node_id, _FOREACH_REG)(fn)
2712#define DT_FOREACH_REG_SEP(node_id, fn, sep) \
2713 DT_CAT(node_id, _FOREACH_REG_SEP)(fn, sep)
2729#define DT_FOREACH_REG_VARGS(node_id, fn, ...) \
2730 DT_CAT(node_id, _FOREACH_REG_VARGS)(fn, __VA_ARGS__)
2748#define DT_FOREACH_REG_SEP_VARGS(node_id, fn, sep, ...) \
2749 DT_CAT(node_id, _FOREACH_REG_SEP_VARGS)(fn, sep, __VA_ARGS__)
2769#define DT_NUM_IRQS(node_id) DT_CAT(node_id, _IRQ_NUM)
2795#define DT_NUM_NODELABELS(node_id) DT_CAT(node_id, _NODELABEL_NUM)
2803#define DT_IRQ_LEVEL(node_id) DT_CAT(node_id, _IRQ_LEVEL)
2815#define DT_IRQ_HAS_IDX(node_id, idx) \
2816 IS_ENABLED(DT_CAT4(node_id, _IRQ_IDX_, idx, _EXISTS))
2828#define DT_IRQ_HAS_CELL_AT_IDX(node_id, idx, cell) \
2829 IS_ENABLED(DT_CAT6(node_id, _IRQ_IDX_, idx, _VAL_, cell, _EXISTS))
2838#define DT_IRQ_HAS_CELL(node_id, cell) DT_IRQ_HAS_CELL_AT_IDX(node_id, 0, cell)
2849#define DT_IRQ_HAS_NAME(node_id, name) \
2850 IS_ENABLED(DT_CAT4(node_id, _IRQ_NAME_, name, _VAL_irq_EXISTS))
2887#define DT_IRQ_BY_IDX(node_id, idx, cell) \
2888 DT_CAT5(node_id, _IRQ_IDX_, idx, _VAL_, cell)
2905#define DT_IRQ_BY_NAME(node_id, name, cell) \
2906 DT_CAT5(node_id, _IRQ_NAME_, name, _VAL_, cell)
2915#define DT_IRQ(node_id, cell) DT_IRQ_BY_IDX(node_id, 0, cell)
2959#define DT_IRQ_INTC_BY_IDX(node_id, idx) \
2960 DT_CAT4(node_id, _IRQ_IDX_, idx, _CONTROLLER)
3006#define DT_IRQ_INTC_BY_NAME(node_id, name) \
3007 DT_CAT4(node_id, _IRQ_NAME_, name, _CONTROLLER)
3048#define DT_IRQ_INTC(node_id) \
3049 DT_IRQ_INTC_BY_IDX(node_id, 0)
3056#define DT_IRQN_L1_INTERNAL(node_id, idx) DT_IRQ_BY_IDX(node_id, idx, irq)
3058#define DT_IRQN_L2_INTERNAL(node_id, idx) \
3059 (IRQ_TO_L2(DT_IRQN_L1_INTERNAL(node_id, idx)) | \
3060 DT_IRQ(DT_IRQ_INTC_BY_IDX(node_id, idx), irq))
3062#define DT_IRQN_L3_INTERNAL(node_id, idx) \
3063 (IRQ_TO_L3(DT_IRQN_L1_INTERNAL(node_id, idx)) | \
3064 IRQ_TO_L2(DT_IRQ(DT_IRQ_INTC_BY_IDX(node_id, idx), irq)) | \
3065 DT_IRQ(DT_IRQ_INTC(DT_IRQ_INTC_BY_IDX(node_id, idx)), irq))
3067#define DT_IRQN_LVL_INTERNAL(node_id, idx, level) DT_CAT3(DT_IRQN_L, level, _INTERNAL)(node_id, idx)
3073#define DT_MULTI_LEVEL_IRQN_INTERNAL(node_id, idx) \
3074 DT_IRQN_LVL_INTERNAL(node_id, idx, DT_IRQ_LEVEL(node_id))
3088#define DT_IRQN_BY_IDX(node_id, idx) \
3089 COND_CODE_1(IS_ENABLED(CONFIG_MULTI_LEVEL_INTERRUPTS), \
3090 (DT_MULTI_LEVEL_IRQN_INTERNAL(node_id, idx)), \
3091 (DT_IRQ_BY_IDX(node_id, idx, irq)))
3103#define DT_IRQN(node_id) DT_IRQN_BY_IDX(node_id, 0)
3123#define DT_CHOSEN(prop) DT_CAT(DT_CHOSEN_, prop)
3131#define DT_HAS_CHOSEN(prop) IS_ENABLED(DT_CAT3(DT_CHOSEN_, prop, _EXISTS))
3182#define DT_FOREACH_NODE(fn) DT_FOREACH_HELPER(fn)
3196#define DT_FOREACH_NODE_VARGS(fn, ...) DT_FOREACH_VARGS_HELPER(fn, __VA_ARGS__)
3209#define DT_FOREACH_STATUS_OKAY_NODE(fn) DT_FOREACH_OKAY_HELPER(fn)
3225#define DT_FOREACH_STATUS_OKAY_NODE_VARGS(fn, ...) DT_FOREACH_OKAY_VARGS_HELPER(fn, __VA_ARGS__)
3273#define DT_FOREACH_ANCESTOR(node_id, fn) \
3274 DT_CAT(node_id, _FOREACH_ANCESTOR)(fn)
3319#define DT_FOREACH_CHILD(node_id, fn) \
3320 DT_CAT(node_id, _FOREACH_CHILD)(fn)
3362#define DT_FOREACH_CHILD_SEP(node_id, fn, sep) \
3363 DT_CAT(node_id, _FOREACH_CHILD_SEP)(fn, sep)
3380#define DT_FOREACH_CHILD_VARGS(node_id, fn, ...) \
3381 DT_CAT(node_id, _FOREACH_CHILD_VARGS)(fn, __VA_ARGS__)
3398#define DT_FOREACH_CHILD_SEP_VARGS(node_id, fn, sep, ...) \
3399 DT_CAT(node_id, _FOREACH_CHILD_SEP_VARGS)(fn, sep, __VA_ARGS__)
3416#define DT_FOREACH_CHILD_STATUS_OKAY(node_id, fn) \
3417 DT_CAT(node_id, _FOREACH_CHILD_STATUS_OKAY)(fn)
3435#define DT_FOREACH_CHILD_STATUS_OKAY_SEP(node_id, fn, sep) \
3436 DT_CAT(node_id, _FOREACH_CHILD_STATUS_OKAY_SEP)(fn, sep)
3457#define DT_FOREACH_CHILD_STATUS_OKAY_VARGS(node_id, fn, ...) \
3458 DT_CAT(node_id, _FOREACH_CHILD_STATUS_OKAY_VARGS)(fn, __VA_ARGS__)
3478#define DT_FOREACH_CHILD_STATUS_OKAY_SEP_VARGS(node_id, fn, sep, ...) \
3479 DT_CAT(node_id, _FOREACH_CHILD_STATUS_OKAY_SEP_VARGS)(fn, sep, __VA_ARGS__)
3531#define DT_FOREACH_PROP_ELEM(node_id, prop, fn) \
3532 DT_CAT4(node_id, _P_, prop, _FOREACH_PROP_ELEM)(fn)
3576#define DT_FOREACH_PROP_ELEM_SEP(node_id, prop, fn, sep) \
3577 DT_CAT4(node_id, _P_, prop, _FOREACH_PROP_ELEM_SEP)(fn, sep)
3599#define DT_FOREACH_PROP_ELEM_VARGS(node_id, prop, fn, ...) \
3600 DT_CAT4(node_id, _P_, prop, _FOREACH_PROP_ELEM_VARGS)(fn, __VA_ARGS__)
3618#define DT_FOREACH_PROP_ELEM_SEP_VARGS(node_id, prop, fn, sep, ...) \
3619 DT_CAT4(node_id, _P_, prop, _FOREACH_PROP_ELEM_SEP_VARGS)( \
3620 fn, sep, __VA_ARGS__)
3675#define DT_FOREACH_STATUS_OKAY(compat, fn) \
3676 COND_CODE_1(DT_HAS_COMPAT_STATUS_OKAY(compat), \
3677 (UTIL_CAT(DT_FOREACH_OKAY_, compat)(fn)), \
3724#define DT_FOREACH_STATUS_OKAY_VARGS(compat, fn, ...) \
3725 COND_CODE_1(DT_HAS_COMPAT_STATUS_OKAY(compat), \
3726 (DT_CAT(DT_FOREACH_OKAY_VARGS_, \
3727 compat)(fn, __VA_ARGS__)), \
3742#define DT_COMPAT_FOREACH_STATUS_OKAY_VARGS(compat, fn, ...) \
3743 COND_CODE_1(DT_HAS_COMPAT_STATUS_OKAY(compat), \
3744 (UTIL_CAT(DT_FOREACH_OKAY_INST_VARGS_, \
3745 compat)(fn, compat, __VA_ARGS__)), \
3787#define DT_FOREACH_NODELABEL(node_id, fn) DT_CAT(node_id, _FOREACH_NODELABEL)(fn)
3826#define DT_FOREACH_NODELABEL_VARGS(node_id, fn, ...) \
3827 DT_CAT(node_id, _FOREACH_NODELABEL_VARGS)(fn, __VA_ARGS__)
3853#define DT_NODE_EXISTS(node_id) IS_ENABLED(DT_CAT(node_id, _EXISTS))
3876#define DT_NODE_HAS_STATUS(node_id, status) \
3877 DT_NODE_HAS_STATUS_INTERNAL(node_id, status)
3899#define DT_NODE_HAS_STATUS_OKAY(node_id) DT_NODE_HAS_STATUS(node_id, okay)
3920#define DT_HAS_COMPAT_STATUS_OKAY(compat) \
3921 IS_ENABLED(DT_CAT(DT_COMPAT_HAS_OKAY_, compat))
3929#define DT_NUM_INST_STATUS_OKAY(compat) \
3930 UTIL_AND(DT_HAS_COMPAT_STATUS_OKAY(compat), \
3931 UTIL_CAT(DT_N_INST, DT_DASH(compat, NUM_OKAY)))
3960#define DT_NODE_HAS_COMPAT(node_id, compat) \
3961 IS_ENABLED(DT_CAT3(node_id, _COMPAT_MATCHES_, compat))
3977#define DT_NODE_HAS_COMPAT_STATUS(node_id, compat, status) \
3978 UTIL_AND(DT_NODE_HAS_COMPAT(node_id, compat), DT_NODE_HAS_STATUS(node_id, status))
3993#define DT_NODE_HAS_PROP(node_id, prop) \
3994 IS_ENABLED(DT_CAT4(node_id, _P_, prop, _EXISTS))
4013#define DT_PHA_HAS_CELL_AT_IDX(node_id, pha, idx, cell) \
4014 IS_ENABLED(DT_CAT8(node_id, _P_, pha, \
4015 _IDX_, idx, _VAL_, cell, _EXISTS))
4026#define DT_PHA_HAS_CELL(node_id, pha, cell) \
4027 DT_PHA_HAS_CELL_AT_IDX(node_id, pha, 0, cell)
4049#define DT_FOREACH_PHA_CELL_BY_IDX(node_id, pha, idx, fn) \
4050 DT_CAT6(node_id, _P_, pha, _IDX_, idx, _FOREACH_CELL)(fn)
4064#define DT_FOREACH_PHA_CELL_BY_IDX_SEP(node_id, pha, idx, fn, sep) \
4065 DT_CAT6(node_id, _P_, pha, _IDX_, idx, _FOREACH_CELL_SEP)(fn, sep)
4075#define DT_PHA_NUM_CELLS_BY_IDX(node_id, pha, idx) \
4076 DT_CAT6(node_id, _P_, pha, _IDX_, idx, _NUM_CELLS)
4089#define DT_PHA_ELEM_NAME_BY_IDX(node_id, pha, idx) \
4090 DT_CAT6(node_id, _P_, pha, _IDX_, idx, _NAME)
4113#define DT_FOREACH_PHA_CELL_BY_NAME(node_id, pha, name, fn) \
4114 DT_CAT6(node_id, _P_, pha, _NAME_, name, _FOREACH_CELL)(fn)
4128#define DT_FOREACH_PHA_CELL_BY_NAME_SEP(node_id, pha, name, fn, sep) \
4129 DT_CAT6(node_id, _P_, pha, _NAME_, name, _FOREACH_CELL_SEP)(fn, sep)
4139#define DT_PHA_NUM_CELLS_BY_NAME(node_id, pha, name) \
4140 DT_CAT6(node_id, _P_, pha, _NAME_, name, _NUM_CELLS)
4153#define DT_PHA_ELEM_IDX_BY_NAME(node_id, pha, name) \
4154 DT_CAT6(node_id, _P_, pha, _NAME_, name, _IDX)
4198#define DT_BUS(node_id) DT_CAT(node_id, _BUS)
4228#define DT_ON_BUS(node_id, bus) IS_ENABLED(DT_CAT3(node_id, _BUS_, bus))
4246#define DT_DRV_INST(inst) DT_INST(inst, DT_DRV_COMPAT)
4255#define DT_INST_PARENT(inst) DT_PARENT(DT_DRV_INST(inst))
4264#define DT_INST_GPARENT(inst) DT_GPARENT(DT_DRV_INST(inst))
4275#define DT_INST_CHILD(inst, child) \
4276 DT_CHILD(DT_DRV_INST(inst), child)
4290#define DT_INST_CHILD_BY_UNIT_ADDR_INT(inst, addr) \
4291 DT_CHILD_BY_UNIT_ADDR_INT(DT_DRV_INST(inst), addr)
4302#define DT_INST_CHILD_NUM(inst) DT_CHILD_NUM(DT_DRV_INST(inst))
4314#define DT_INST_CHILD_NUM_STATUS_OKAY(inst) \
4315 DT_CHILD_NUM_STATUS_OKAY(DT_DRV_INST(inst))
4329#define DT_INST_DESCENDANT_NUM_ON_BUS(inst, bus) \
4330 DT_DESCENDANT_NUM_ON_BUS(DT_DRV_INST(inst), bus)
4345#define DT_INST_DESCENDANT_NUM_ON_BUS_STATUS_OKAY(inst, bus) \
4346 DT_DESCENDANT_NUM_ON_BUS_STATUS_OKAY(DT_DRV_INST(inst), bus)
4356#define DT_INST_NODELABEL_STRING_ARRAY(inst) DT_NODELABEL_STRING_ARRAY(DT_DRV_INST(inst))
4366#define DT_INST_NUM_NODELABELS(inst) DT_NUM_NODELABELS(DT_DRV_INST(inst))
4382#define DT_INST_FOREACH_CHILD(inst, fn) \
4383 DT_FOREACH_CHILD(DT_DRV_INST(inst), fn)
4398#define DT_INST_FOREACH_CHILD_SEP(inst, fn, sep) \
4399 DT_FOREACH_CHILD_SEP(DT_DRV_INST(inst), fn, sep)
4416#define DT_INST_FOREACH_CHILD_VARGS(inst, fn, ...) \
4417 DT_FOREACH_CHILD_VARGS(DT_DRV_INST(inst), fn, __VA_ARGS__)
4433#define DT_INST_FOREACH_CHILD_SEP_VARGS(inst, fn, sep, ...) \
4434 DT_FOREACH_CHILD_SEP_VARGS(DT_DRV_INST(inst), fn, sep, __VA_ARGS__)
4447#define DT_INST_FOREACH_CHILD_STATUS_OKAY(inst, fn) \
4448 DT_FOREACH_CHILD_STATUS_OKAY(DT_DRV_INST(inst), fn)
4464#define DT_INST_FOREACH_CHILD_STATUS_OKAY_SEP(inst, fn, sep) \
4465 DT_FOREACH_CHILD_STATUS_OKAY_SEP(DT_DRV_INST(inst), fn, sep)
4480#define DT_INST_FOREACH_CHILD_STATUS_OKAY_VARGS(inst, fn, ...) \
4481 DT_FOREACH_CHILD_STATUS_OKAY_VARGS(DT_DRV_INST(inst), fn, __VA_ARGS__)
4498#define DT_INST_FOREACH_CHILD_STATUS_OKAY_SEP_VARGS(inst, fn, sep, ...) \
4499 DT_FOREACH_CHILD_STATUS_OKAY_SEP_VARGS(DT_DRV_INST(inst), fn, sep, __VA_ARGS__)
4515#define DT_INST_FOREACH_REG(inst, fn) \
4516 DT_FOREACH_REG(DT_DRV_INST(inst), fn)
4534#define DT_INST_FOREACH_REG_SEP(inst, fn, sep) \
4535 DT_FOREACH_REG_SEP(DT_DRV_INST(inst), fn, sep)
4553#define DT_INST_FOREACH_REG_VARGS(inst, fn, ...) \
4554 DT_FOREACH_REG_VARGS(DT_DRV_INST(inst), fn, __VA_ARGS__)
4574#define DT_INST_FOREACH_REG_SEP_VARGS(inst, fn, sep, ...) \
4575 DT_FOREACH_REG_SEP_VARGS(DT_DRV_INST(inst), fn, sep, __VA_ARGS__)
4584#define DT_INST_ENUM_IDX_BY_IDX(inst, prop, idx) \
4585 DT_ENUM_IDX_BY_IDX(DT_DRV_INST(inst), prop, idx)
4593#define DT_INST_ENUM_IDX(inst, prop) \
4594 DT_ENUM_IDX(DT_DRV_INST(inst), prop)
4605#define DT_INST_ENUM_IDX_BY_IDX_OR(inst, prop, idx, default_idx_value) \
4606 DT_ENUM_IDX_BY_IDX_OR(DT_DRV_INST(inst), prop, idx, default_idx_value)
4616#define DT_INST_ENUM_IDX_OR(inst, prop, default_idx_value) \
4617 DT_ENUM_IDX_OR(DT_DRV_INST(inst), prop, default_idx_value)
4627#define DT_INST_ENUM_HAS_VALUE_BY_IDX(inst, prop, idx, value) \
4628 DT_ENUM_HAS_VALUE_BY_IDX(DT_DRV_INST(inst), prop, idx, value)
4638#define DT_INST_ENUM_HAS_VALUE(inst, prop, value) \
4639 DT_ENUM_HAS_VALUE(DT_DRV_INST(inst), prop, value)
4647#define DT_INST_PROP(inst, prop) DT_PROP(DT_DRV_INST(inst), prop)
4655#define DT_INST_PROP_LEN(inst, prop) DT_PROP_LEN(DT_DRV_INST(inst), prop)
4666#define DT_INST_PROP_HAS_IDX(inst, prop, idx) \
4667 DT_PROP_HAS_IDX(DT_DRV_INST(inst), prop, idx)
4677#define DT_INST_PROP_HAS_NAME(inst, prop, name) \
4678 DT_PROP_HAS_NAME(DT_DRV_INST(inst), prop, name)
4687#define DT_INST_PROP_BY_IDX(inst, prop, idx) \
4688 DT_PROP_BY_IDX(DT_DRV_INST(inst), prop, idx)
4697#define DT_INST_PROP_OR(inst, prop, default_value) \
4698 DT_PROP_OR(DT_DRV_INST(inst), prop, default_value)
4707#define DT_INST_PROP_LEN_OR(inst, prop, default_value) \
4708 DT_PROP_LEN_OR(DT_DRV_INST(inst), prop, default_value)
4719#define DT_INST_STRING_TOKEN(inst, prop) \
4720 DT_STRING_TOKEN(DT_DRV_INST(inst), prop)
4729#define DT_INST_STRING_UPPER_TOKEN(inst, prop) \
4730 DT_STRING_UPPER_TOKEN(DT_DRV_INST(inst), prop)
4740#define DT_INST_STRING_UNQUOTED(inst, prop) \
4741 DT_STRING_UNQUOTED(DT_DRV_INST(inst), prop)
4750#define DT_INST_STRING_TOKEN_BY_IDX(inst, prop, idx) \
4751 DT_STRING_TOKEN_BY_IDX(DT_DRV_INST(inst), prop, idx)
4761#define DT_INST_STRING_TOKEN_BY_IDX_OR(inst, prop, idx, default_value) \
4762 DT_STRING_TOKEN_BY_IDX_OR(DT_DRV_INST(inst), prop, idx, default_value)
4771#define DT_INST_STRING_UPPER_TOKEN_BY_IDX(inst, prop, idx) \
4772 DT_STRING_UPPER_TOKEN_BY_IDX(DT_DRV_INST(inst), prop, idx)
4781#define DT_INST_STRING_UNQUOTED_BY_IDX(inst, prop, idx) \
4782 DT_STRING_UNQUOTED_BY_IDX(DT_DRV_INST(inst), prop, idx)
4792#define DT_INST_PROP_BY_PHANDLE(inst, ph, prop) \
4793 DT_INST_PROP_BY_PHANDLE_IDX(inst, ph, 0, prop)
4806#define DT_INST_PROP_BY_PHANDLE_IDX(inst, phs, idx, prop) \
4807 DT_PROP_BY_PHANDLE_IDX(DT_DRV_INST(inst), phs, idx, prop)
4817#define DT_INST_PHA_BY_IDX(inst, pha, idx, cell) \
4818 DT_PHA_BY_IDX(DT_DRV_INST(inst), pha, idx, cell)
4829#define DT_INST_PHA_BY_IDX_OR(inst, pha, idx, cell, default_value) \
4830 DT_PHA_BY_IDX_OR(DT_DRV_INST(inst), pha, idx, cell, default_value)
4840#define DT_INST_PHA(inst, pha, cell) DT_INST_PHA_BY_IDX(inst, pha, 0, cell)
4850#define DT_INST_PHA_OR(inst, pha, cell, default_value) \
4851 DT_INST_PHA_BY_IDX_OR(inst, pha, 0, cell, default_value)
4862#define DT_INST_PHA_BY_NAME(inst, pha, name, cell) \
4863 DT_PHA_BY_NAME(DT_DRV_INST(inst), pha, name, cell)
4874#define DT_INST_PHA_BY_NAME_OR(inst, pha, name, cell, default_value) \
4875 DT_PHA_BY_NAME_OR(DT_DRV_INST(inst), pha, name, cell, default_value)
4885#define DT_INST_PHANDLE_BY_NAME(inst, pha, name) \
4886 DT_PHANDLE_BY_NAME(DT_DRV_INST(inst), pha, name) \
4897#define DT_INST_PHANDLE_BY_IDX(inst, prop, idx) \
4898 DT_PHANDLE_BY_IDX(DT_DRV_INST(inst), prop, idx)
4908#define DT_INST_PHANDLE(inst, prop) DT_INST_PHANDLE_BY_IDX(inst, prop, 0)
4917#define DT_INST_REG_HAS_IDX(inst, idx) DT_REG_HAS_IDX(DT_DRV_INST(inst), idx)
4926#define DT_INST_REG_HAS_NAME(inst, name) DT_REG_HAS_NAME(DT_DRV_INST(inst), name)
4934#define DT_INST_REG_ADDR_BY_IDX_RAW(inst, idx) DT_REG_ADDR_BY_IDX_RAW(DT_DRV_INST(inst), idx)
4942#define DT_INST_REG_ADDR_BY_IDX(inst, idx) DT_REG_ADDR_BY_IDX(DT_DRV_INST(inst), idx)
4950#define DT_INST_REG_SIZE_BY_IDX(inst, idx) \
4951 DT_REG_SIZE_BY_IDX(DT_DRV_INST(inst), idx)
4959#define DT_INST_REG_ADDR_BY_NAME(inst, name) \
4960 DT_REG_ADDR_BY_NAME(DT_DRV_INST(inst), name)
4970#define DT_INST_REG_ADDR_BY_NAME_OR(inst, name, default_value) \
4971 DT_REG_ADDR_BY_NAME_OR(DT_DRV_INST(inst), name, default_value)
4985#define DT_INST_REG_ADDR_BY_NAME_U64(inst, name) \
4986 DT_REG_ADDR_BY_NAME_U64(DT_DRV_INST(inst), name)
4994#define DT_INST_REG_SIZE_BY_NAME(inst, name) \
4995 DT_REG_SIZE_BY_NAME(DT_DRV_INST(inst), name)
5005#define DT_INST_REG_SIZE_BY_NAME_OR(inst, name, default_value) \
5006 DT_REG_SIZE_BY_NAME_OR(DT_DRV_INST(inst), name, default_value)
5013#define DT_INST_REG_ADDR_RAW(inst) DT_INST_REG_ADDR_BY_IDX_RAW(inst, 0)
5020#define DT_INST_REG_ADDR(inst) DT_INST_REG_ADDR_BY_IDX(inst, 0)
5033#define DT_INST_REG_ADDR_U64(inst) DT_REG_ADDR_U64(DT_DRV_INST(inst))
5040#define DT_INST_REG_SIZE(inst) DT_INST_REG_SIZE_BY_IDX(inst, 0)
5048#define DT_INST_NUM_IRQS(inst) DT_NUM_IRQS(DT_DRV_INST(inst))
5056#define DT_INST_IRQ_LEVEL(inst) DT_IRQ_LEVEL(DT_DRV_INST(inst))
5065#define DT_INST_IRQ_BY_IDX(inst, idx, cell) \
5066 DT_IRQ_BY_IDX(DT_DRV_INST(inst), idx, cell)
5074#define DT_INST_IRQ_INTC_BY_IDX(inst, idx) \
5075 DT_IRQ_INTC_BY_IDX(DT_DRV_INST(inst), idx)
5083#define DT_INST_IRQ_INTC_BY_NAME(inst, name) \
5084 DT_IRQ_INTC_BY_NAME(DT_DRV_INST(inst), name)
5093#define DT_INST_IRQ_INTC(inst) \
5094 DT_INST_IRQ_INTC_BY_IDX(inst, 0)
5103#define DT_INST_IRQ_BY_NAME(inst, name, cell) \
5104 DT_IRQ_BY_NAME(DT_DRV_INST(inst), name, cell)
5112#define DT_INST_IRQ(inst, cell) DT_INST_IRQ_BY_IDX(inst, 0, cell)
5119#define DT_INST_IRQN(inst) DT_IRQN(DT_DRV_INST(inst))
5127#define DT_INST_IRQN_BY_IDX(inst, idx) DT_IRQN_BY_IDX(DT_DRV_INST(inst), idx)
5134#define DT_INST_BUS(inst) DT_BUS(DT_DRV_INST(inst))
5143#define DT_INST_ON_BUS(inst, bus) DT_ON_BUS(DT_DRV_INST(inst), bus)
5154#define DT_INST_STRING_TOKEN_OR(inst, name, default_value) \
5155 DT_STRING_TOKEN_OR(DT_DRV_INST(inst), name, default_value)
5165#define DT_INST_STRING_UPPER_TOKEN_OR(inst, name, default_value) \
5166 DT_STRING_UPPER_TOKEN_OR(DT_DRV_INST(inst), name, default_value)
5176#define DT_INST_STRING_UNQUOTED_OR(inst, name, default_value) \
5177 DT_STRING_UNQUOTED_OR(DT_DRV_INST(inst), name, default_value)
5209#define DT_HAS_COMPAT_ON_BUS_STATUS_OKAY(compat, bus) \
5210 IS_ENABLED(DT_CAT4(DT_COMPAT_, compat, _BUS_, bus))
5244#define DT_ANY_INST_ON_BUS_STATUS_OKAY(bus) \
5245 DT_HAS_COMPAT_ON_BUS_STATUS_OKAY(DT_DRV_COMPAT, bus)
5291#define DT_ANY_INST_HAS_PROP_STATUS_OKAY(prop) \
5292 UTIL_NOT(IS_EMPTY( \
5293 DT_INST_FOREACH_STATUS_OKAY_VARGS(DT_ANY_INST_HAS_PROP_STATUS_OKAY_, prop)))
5339#define DT_ALL_INST_HAS_PROP_STATUS_OKAY(prop) \
5340 IS_EMPTY(DT_INST_FOREACH_STATUS_OKAY_VARGS(DT_ALL_INST_HAS_PROP_STATUS_OKAY_, prop))
5386#define DT_ANY_COMPAT_HAS_PROP_STATUS_OKAY(compat, prop) \
5387 (DT_COMPAT_FOREACH_STATUS_OKAY_VARGS(compat, DT_COMPAT_NODE_HAS_PROP_AND_OR, prop) 0)
5436#define DT_ANY_INST_HAS_BOOL_STATUS_OKAY(prop) \
5437 UTIL_NOT(IS_EMPTY( \
5438 DT_INST_FOREACH_STATUS_OKAY_VARGS(DT_ANY_INST_HAS_BOOL_STATUS_OKAY_, prop)))
5485#define DT_ALL_INST_HAS_BOOL_STATUS_OKAY(prop) \
5486 IS_EMPTY(DT_INST_FOREACH_STATUS_OKAY_VARGS(DT_ALL_INST_HAS_BOOL_STATUS_OKAY_, prop))
5494#define DT_ANY_INST_REG_HAS_NAME_STATUS_OKAY(name) \
5495 UTIL_NOT(IS_EMPTY( \
5496 DT_INST_FOREACH_STATUS_OKAY_VARGS(DT_ANY_INST_REG_HAS_NAME_STATUS_OKAY_, name)))
5504#define DT_ALL_INST_REG_HAS_NAME_STATUS_OKAY(name) \
5505 IS_EMPTY(DT_INST_FOREACH_STATUS_OKAY_VARGS(DT_ALL_INST_REG_HAS_NAME_STATUS_OKAY_, name))
5572#define DT_INST_FOREACH_STATUS_OKAY(fn) \
5573 COND_CODE_1(DT_HAS_COMPAT_STATUS_OKAY(DT_DRV_COMPAT), \
5574 (UTIL_CAT(DT_FOREACH_OKAY_INST_, \
5575 DT_DRV_COMPAT)(fn)), \
5590#define DT_INST_FOREACH_STATUS_OKAY_VARGS(fn, ...) \
5591 COND_CODE_1(DT_HAS_COMPAT_STATUS_OKAY(DT_DRV_COMPAT), \
5592 (UTIL_CAT(DT_FOREACH_OKAY_INST_VARGS_, \
5593 DT_DRV_COMPAT)(fn, __VA_ARGS__)), \
5605#define DT_INST_FOREACH_NODELABEL(inst, fn) \
5606 DT_FOREACH_NODELABEL(DT_DRV_INST(inst), fn)
5619#define DT_INST_FOREACH_NODELABEL_VARGS(inst, fn, ...) \
5620 DT_FOREACH_NODELABEL_VARGS(DT_DRV_INST(inst), fn, __VA_ARGS__)
5632#define DT_INST_FOREACH_PROP_ELEM(inst, prop, fn) \
5633 DT_FOREACH_PROP_ELEM(DT_DRV_INST(inst), prop, fn)
5647#define DT_INST_FOREACH_PROP_ELEM_SEP(inst, prop, fn, sep) \
5648 DT_FOREACH_PROP_ELEM_SEP(DT_DRV_INST(inst), prop, fn, sep)
5664#define DT_INST_FOREACH_PROP_ELEM_VARGS(inst, prop, fn, ...) \
5665 DT_FOREACH_PROP_ELEM_VARGS(DT_DRV_INST(inst), prop, fn, __VA_ARGS__)
5684#define DT_INST_FOREACH_PROP_ELEM_SEP_VARGS(inst, prop, fn, sep, ...) \
5685 DT_FOREACH_PROP_ELEM_SEP_VARGS(DT_DRV_INST(inst), prop, fn, sep, \
5694#define DT_INST_NODE_HAS_PROP(inst, prop) \
5695 DT_NODE_HAS_PROP(DT_DRV_INST(inst), prop)
5703#define DT_INST_NODE_HAS_COMPAT(inst, compat) \
5704 DT_NODE_HAS_COMPAT(DT_DRV_INST(inst), compat)
5716#define DT_INST_PHA_HAS_CELL_AT_IDX(inst, pha, idx, cell) \
5717 DT_PHA_HAS_CELL_AT_IDX(DT_DRV_INST(inst), pha, idx, cell)
5728#define DT_INST_PHA_HAS_CELL(inst, pha, cell) \
5729 DT_INST_PHA_HAS_CELL_AT_IDX(inst, pha, 0, cell)
5738#define DT_INST_IRQ_HAS_IDX(inst, idx) DT_IRQ_HAS_IDX(DT_DRV_INST(inst), idx)
5748#define DT_INST_IRQ_HAS_CELL_AT_IDX(inst, idx, cell) \
5749 DT_IRQ_HAS_CELL_AT_IDX(DT_DRV_INST(inst), idx, cell)
5758#define DT_INST_IRQ_HAS_CELL(inst, cell) \
5759 DT_INST_IRQ_HAS_CELL_AT_IDX(inst, 0, cell)
5767#define DT_INST_IRQ_HAS_NAME(inst, name) \
5768 DT_IRQ_HAS_NAME(DT_DRV_INST(inst), name)
5787#define DT_ANY_INST_HAS_PROP_STATUS_OKAY_(inst, prop) \
5788 IF_ENABLED(DT_INST_NODE_HAS_PROP(inst, prop), (1,))
5802#define DT_ANY_INST_HAS_BOOL_STATUS_OKAY_(inst, prop) \
5803 IF_ENABLED(DT_INST_PROP(inst, prop), (1,))
5817#define DT_ANY_INST_REG_HAS_NAME_STATUS_OKAY_(inst, name) \
5818 IF_ENABLED(DT_INST_REG_HAS_NAME(inst, name), (1,))
5831#define DT_ALL_INST_HAS_PROP_STATUS_OKAY_(inst, prop) \
5832 IF_DISABLED(DT_INST_NODE_HAS_PROP(inst, prop), (1,))
5846#define DT_ALL_INST_HAS_BOOL_STATUS_OKAY_(inst, prop) \
5847 IF_DISABLED(DT_INST_PROP(inst, prop), (1,))
5861#define DT_ALL_INST_REG_HAS_NAME_STATUS_OKAY_(inst, name) \
5862 IF_DISABLED(DT_INST_REG_HAS_NAME(inst, name), (1,))
5864#define DT_PATH_INTERNAL(...) \
5865 UTIL_CAT(DT_ROOT, MACRO_MAP_CAT(DT_S_PREFIX, __VA_ARGS__))
5871#define DT_S_PREFIX(name) _S_##name
5887#define DT_CAT(a1, a2) a1 ## a2
5889#define DT_CAT3(a1, a2, a3) a1 ## a2 ## a3
5891#define DT_CAT4(a1, a2, a3, a4) a1 ## a2 ## a3 ## a4
5893#define DT_CAT5(a1, a2, a3, a4, a5) a1 ## a2 ## a3 ## a4 ## a5
5895#define DT_CAT6(a1, a2, a3, a4, a5, a6) a1 ## a2 ## a3 ## a4 ## a5 ## a6
5897#define DT_CAT7(a1, a2, a3, a4, a5, a6, a7) \
5898 a1 ## a2 ## a3 ## a4 ## a5 ## a6 ## a7
5900#define DT_CAT8(a1, a2, a3, a4, a5, a6, a7, a8) \
5901 a1 ## a2 ## a3 ## a4 ## a5 ## a6 ## a7 ## a8
5908#define DT_DASH(...) MACRO_MAP_CAT(DT_DASH_PREFIX, __VA_ARGS__)
5910#define DT_DASH_PREFIX(name) _##name
5912#define DT_NODE_HAS_STATUS_INTERNAL(node_id, status) \
5913 IS_ENABLED(DT_CAT3(node_id, _STATUS_, status))
5918#define DT_COMPAT_NODE_HAS_PROP_AND_OR(inst, compat, prop) \
5919 DT_NODE_HAS_PROP(DT_INST(inst, compat), prop) ||
5925#if defined(_LINKER) || defined(_ASMLANGUAGE)
5926#define DT_U32_C(_v) (_v)
5928#define DT_U32_C(_v) UINT32_C(_v)
5935#if defined(_LINKER) || defined(_ASMLANGUAGE)
5936#define DT_U64_C(_v) (_v)
5938#define DT_U64_C(_v) UINT64_C(_v)
5944#define DT_NODELABEL_STRING_ARRAY_ENTRY_INTERNAL(nodelabel) DT_STRINGIFY_INTERNAL(nodelabel),
5945#define DT_STRINGIFY_INTERNAL(arg) DT_STRINGIFY_INTERNAL_HELPER(arg)
5946#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.
Map devicetree macro public API header file.
MBOX Devicetree macro public API header file.
Flash Devicetree macro public API header file, for partitions.
Devicetree pin control helpers.
Reset Controller Devicetree macro public API header file.
SPI Devicetree macro public API header file.
Wakeup Controller 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.
Flash Devicetree macro public API header file, for memory-mapped partitions.
Devicetree node dependency ordinals.
Port / Endpoint Devicetree macro public API header file.
PWMs Devicetree macro public API header file.
Chosen SRAM Devicetree macro public API header file.