Hi,

On Mon, 1 Dec 2025 at 12:49, Simon Glass <[email protected]> wrote:
>
> When there is no device tree there is not point in trying to find nodes,
> etc. since they will all be null.
>
> Add static inlines to skip the code in that case.
>
> Unfortunately this makes the file a little convoluted and there are
> two inlines for ofnode_is_enabled() and ofnode_first/next_subnode(). But
> it seems better than the alternative.
>
> We could also consider splitting up the header file.
>
> Also add a rule in drivers/Makefile to compile ofnode.o when OF_REAL is
> enabled but DM is not (for kontron-sl-mx6ul) and move the
> ofnode_for_each_compatible_node/prop() macros outside the OF_REAL
> condition, since they only use functions that have stubs.
>
> Co-developed-by: Claude <[email protected]>
> Signed-off-by: Simon Glass <[email protected]>
> ---
>
>  drivers/Makefile      |   4 +
>  drivers/core/Makefile |   3 +-
>  include/dm/ofnode.h   | 714 +++++++++++++++++++++++++++++++++++++-----
>  3 files changed, 641 insertions(+), 80 deletions(-)

Any thoughts on this patch, please?

Regards,
Simon

>
> diff --git a/drivers/Makefile b/drivers/Makefile
> index de993ae42ac..a440b3a18a7 100644
> --- a/drivers/Makefile
> +++ b/drivers/Makefile
> @@ -8,6 +8,10 @@ obj-$(CONFIG_$(PHASE_)BUTTON) += button/
>  obj-$(CONFIG_$(PHASE_)CACHE) += cache/
>  obj-$(CONFIG_$(PHASE_)CLK) += clk/
>  obj-$(CONFIG_$(PHASE_)DM) += core/
> +# ofnode functions are needed for OF_REAL even without full DM
> +ifndef CONFIG_$(PHASE_)DM
> +obj-$(CONFIG_$(PHASE_)OF_REAL) += core/ofnode.o
> +endif
>  obj-$(CONFIG_$(PHASE_)DMA) += dma/
>  obj-$(CONFIG_$(PHASE_)DMA_LEGACY) += dma/
>  obj-$(CONFIG_$(PHASE_)DFU) += dfu/
> diff --git a/drivers/core/Makefile b/drivers/core/Makefile
> index a549890c22b..8bcba38de4d 100644
> --- a/drivers/core/Makefile
> +++ b/drivers/core/Makefile
> @@ -16,6 +16,7 @@ ifndef CONFIG_DM_DEV_READ_INLINE
>  obj-$(CONFIG_OF_CONTROL) += read.o
>  endif
>  obj-$(CONFIG_$(PHASE_)OF_PLATDATA) += read.o
> -obj-$(CONFIG_OF_CONTROL) += of_extra.o ofnode.o read_extra.o ofnode_graph.o
> +obj-$(CONFIG_OF_CONTROL) += of_extra.o read_extra.o
> +obj-$(CONFIG_$(PHASE_)OF_REAL) += ofnode.o ofnode_graph.o
>
>  ccflags-$(CONFIG_DM_DEBUG) += -DDEBUG
> diff --git a/include/dm/ofnode.h b/include/dm/ofnode.h
> index 120393426db..3be7d0aea5b 100644
> --- a/include/dm/ofnode.h
> +++ b/include/dm/ofnode.h
> @@ -128,6 +128,7 @@ static inline ofnode noffset_to_ofnode(ofnode other_node, 
> int of_offset)
>
>  #endif /* OFNODE_MULTI_TREE */
>
> +#if CONFIG_IS_ENABLED(OF_REAL)
>  /**
>   * oftree_new() - Create a new, empty tree
>   *
> @@ -148,6 +149,17 @@ int oftree_new(oftree *treep);
>   * error
>   */
>  int oftree_to_fdt(oftree tree, struct abuf *buf);
> +#else
> +static inline int oftree_new(oftree *treep)
> +{
> +       return -ENOSYS;
> +}
> +
> +static inline int oftree_to_fdt(oftree tree, struct abuf *buf)
> +{
> +       return -ENOSYS;
> +}
> +#endif /* OF_REAL */
>
>  /**
>   * ofnode_to_np() - convert an ofnode to a live DT node pointer
> @@ -375,6 +387,7 @@ static inline oftree oftree_from_np(struct device_node 
> *root)
>         return tree;
>  }
>
> +#if CONFIG_IS_ENABLED(OF_REAL)
>  /**
>   * oftree_dispose() - Dispose of an oftree
>   *
> @@ -481,6 +494,56 @@ int ofnode_read_u32_index(ofnode node, const char 
> *propname, int index,
>   */
>  int ofnode_read_u64_index(ofnode node, const char *propname, int index,
>                           u64 *outp);
> +#else
> +static inline bool ofnode_name_eq(ofnode node, const char *name)
> +{
> +       return false;
> +}
> +
> +static inline bool ofnode_name_eq_unit(ofnode node, const char *name)
> +{
> +       return false;
> +}
> +
> +static inline int ofnode_read_u8(ofnode node, const char *propname, u8 *outp)
> +{
> +       return -EINVAL;
> +}
> +
> +static inline u8 ofnode_read_u8_default(ofnode node, const char *propname,
> +                                       u8 def)
> +{
> +       return def;
> +}
> +
> +static inline int ofnode_read_u16(ofnode node, const char *propname, u16 
> *outp)
> +{
> +       return -EINVAL;
> +}
> +
> +static inline u16 ofnode_read_u16_default(ofnode node, const char *propname,
> +                                         u16 def)
> +{
> +       return def;
> +}
> +
> +static inline int ofnode_read_u32(ofnode node, const char *propname, u32 
> *outp)
> +{
> +       return -EINVAL;
> +}
> +
> +static inline int ofnode_read_u32_index(ofnode node, const char *propname,
> +                                       int index, u32 *outp)
> +{
> +       return -EINVAL;
> +}
> +
> +static inline int ofnode_read_u64_index(ofnode node, const char *propname,
> +                                       int index, u64 *outp)
> +{
> +       return -EINVAL;
> +}
> +#endif /* OF_REAL */
>
>  /**
>   * ofnode_read_s32() - Read a 32-bit integer from a property
> @@ -496,6 +559,7 @@ static inline int ofnode_read_s32(ofnode node, const char 
> *propname,
>         return ofnode_read_u32(node, propname, (u32 *)outp);
>  }
>
> +#if CONFIG_IS_ENABLED(OF_REAL)
>  /**
>   * ofnode_read_u32_default() - Read a 32-bit integer from a property
>   *
> @@ -618,8 +682,72 @@ ofnode ofnode_find_subnode(ofnode node, const char 
> *subnode_name);
>   * subnode)
>   */
>  ofnode ofnode_find_subnode_unit(ofnode node, const char *subnode_name);
> +#else
> +static inline u32 ofnode_read_u32_default(ofnode node, const char *propname,
> +                                         u32 def)
> +{
> +       return def;
> +}
> +
> +static inline u32 ofnode_read_u32_index_default(ofnode node,
> +                                               const char *propname,
> +                                               int index, u32 def)
> +{
> +       return def;
> +}
> +
> +static inline int ofnode_read_s32_default(ofnode node, const char *propname,
> +                                         s32 def)
> +{
> +       return def;
> +}
> +
> +static inline int ofnode_read_u64(ofnode node, const char *propname, u64 
> *outp)
> +{
> +       return -EINVAL;
> +}
> +
> +static inline u64 ofnode_read_u64_default(ofnode node, const char *propname,
> +                                         u64 def)
> +{
> +       return def;
> +}
> +
> +static inline const void *ofnode_read_prop(ofnode node, const char *propname,
> +                                          int *sizep)
> +{
> +       return NULL;
> +}
> +
> +static inline const char *ofnode_read_string(ofnode node, const char 
> *propname)
> +{
> +       return NULL;
> +}
> +
> +static inline int ofnode_read_u32_array(ofnode node, const char *propname,
> +                                       u32 *out_values, size_t sz)
> +{
> +       return -EINVAL;
> +}
> +
> +static inline bool ofnode_read_bool(ofnode node, const char *propname)
> +{
> +       return false;
> +}
> +
> +static inline ofnode ofnode_find_subnode(ofnode node, const char 
> *subnode_name)
> +{
> +       return ofnode_null();
> +}
>
> -#if CONFIG_IS_ENABLED(DM_INLINE_OFNODE)
> +static inline ofnode ofnode_find_subnode_unit(ofnode node,
> +                                             const char *subnode_name)
> +{
> +       return ofnode_null();
> +}
> +#endif
> +
> +#if CONFIG_IS_ENABLED(OF_REAL) && CONFIG_IS_ENABLED(DM_INLINE_OFNODE)
>  #include <asm/global_data.h>
>
>  static inline bool ofnode_is_enabled(ofnode node)
> @@ -651,7 +779,7 @@ static inline ofnode ofnode_next_subnode(ofnode node)
>         return offset_to_ofnode(
>                 fdt_next_subnode(gd->fdt_blob, ofnode_to_offset(node)));
>  }
> -#else
> +#elif CONFIG_IS_ENABLED(OF_REAL)
>  /**
>   * ofnode_is_enabled() - Checks whether a node is enabled.
>   * This looks for a 'status' property. If this exists, then returns true if
> @@ -681,8 +809,47 @@ ofnode ofnode_first_subnode(ofnode node);
>   * has no more siblings)
>   */
>  ofnode ofnode_next_subnode(ofnode node);
> -#endif /* DM_INLINE_OFNODE */
> +#else
> +static inline bool ofnode_is_enabled(ofnode node)
> +{
> +       return false;
> +}
>
> +static inline ofnode ofnode_first_subnode(ofnode node)
> +{
> +       return ofnode_null();
> +}
> +
> +static inline ofnode ofnode_next_subnode(ofnode node)
> +{
> +       return ofnode_null();
> +}
> +#endif
> +
> +/**
> + * ofnode_for_each_subnode() - iterate over all subnodes of a parent
> + *
> + * @node:       child node (ofnode, lvalue)
> + * @parent:     parent node (ofnode)
> + *
> + * This is a wrapper around a for loop and is used like so::
> + *
> + *   ofnode node;
> + *   ofnode_for_each_subnode(node, parent) {
> + *       Use node
> + *       ...
> + *   }
> + *
> + * Note that this is implemented as a macro and @node is used as
> + * iterator in the loop. The parent variable can be a constant or even a
> + * literal.
> + */
> +#define ofnode_for_each_subnode(node, parent) \
> +       for (node = ofnode_first_subnode(parent); \
> +            ofnode_valid(node); \
> +            node = ofnode_next_subnode(node))
> +
> +#if CONFIG_IS_ENABLED(OF_REAL)
>  /**
>   * ofnode_get_parent() - get the ofnode's parent (enclosing ofnode)
>   *
> @@ -1200,30 +1367,6 @@ int ofnode_first_property(ofnode node, struct ofprop 
> *prop);
>   */
>  int ofnode_next_property(struct ofprop *prop);
>
> -/**
> - * ofnode_for_each_prop() - iterate over all properties of a node
> - *
> - * @prop:      struct ofprop
> - * @node:      node (lvalue, ofnode)
> - *
> - * This is a wrapper around a for loop and is used like this::
> - *
> - *   ofnode node;
> - *   struct ofprop prop;
> - *
> - *   ofnode_for_each_prop(prop, node) {
> - *       ...use prop...
> - *   }
> - *
> - * Note that this is implemented as a macro and @prop is used as
> - * iterator in the loop. The parent variable can be a constant or even a
> - * literal.
> - */
> -#define ofnode_for_each_prop(prop, node) \
> -       for (ofnode_first_property(node, &prop); \
> -            ofprop_valid(&prop); \
> -            ofnode_next_property(&prop))
> -
>  /**
>   * ofprop_get_property() - get a pointer to the value of a property
>   *
> @@ -1438,52 +1581,6 @@ ofnode ofnode_by_compatible(ofnode from, const char 
> *compat);
>  ofnode ofnode_by_prop_value(ofnode from, const char *propname,
>                             const void *propval, int proplen);
>
> -/**
> - * ofnode_for_each_subnode() - iterate over all subnodes of a parent
> - *
> - * @node:       child node (ofnode, lvalue)
> - * @parent:     parent node (ofnode)
> - *
> - * This is a wrapper around a for loop and is used like so::
> - *
> - *   ofnode node;
> - *   ofnode_for_each_subnode(node, parent) {
> - *       Use node
> - *       ...
> - *   }
> - *
> - * Note that this is implemented as a macro and @node is used as
> - * iterator in the loop. The parent variable can be a constant or even a
> - * literal.
> - */
> -#define ofnode_for_each_subnode(node, parent) \
> -       for (node = ofnode_first_subnode(parent); \
> -            ofnode_valid(node); \
> -            node = ofnode_next_subnode(node))
> -
> -/**
> - * ofnode_for_each_compatible_node() - iterate over all nodes with a given
> - *                                    compatible string
> - *
> - * @node:       child node (ofnode, lvalue)
> - * @compat:     compatible string to match
> - *
> - * This is a wrapper around a for loop and is used like so::
> - *
> - *   ofnode node;
> - *   ofnode_for_each_compatible_node(node, parent, compatible) {
> - *      Use node
> - *      ...
> - *   }
> - *
> - * Note that this is implemented as a macro and @node is used as
> - * iterator in the loop.
> - */
> -#define ofnode_for_each_compatible_node(node, compat) \
> -       for (node = ofnode_by_compatible(ofnode_null(), compat); \
> -            ofnode_valid(node); \
> -            node = ofnode_by_compatible(node, compat))
> -
>  /**
>   * ofnode_get_child_count() - get the child count of a ofnode
>   *
> @@ -1661,8 +1758,423 @@ ofnode ofnode_get_phy_node(ofnode eth_node);
>   *        error
>   */
>  phy_interface_t ofnode_read_phy_mode(ofnode mac_node);
> +#else
> +static inline ofnode ofnode_get_parent(ofnode node)
> +{
> +       return ofnode_null();
> +}
> +
> +static inline const char *ofnode_get_name(ofnode node)
> +{
> +       return NULL;
> +}
> +
> +static inline int ofnode_get_path(ofnode node, char *buf, int buflen)
> +{
> +       return -EINVAL;
> +}
> +
> +static inline ofnode ofnode_get_by_phandle(uint phandle)
> +{
> +       return ofnode_null();
> +}
> +
> +static inline ofnode oftree_get_by_phandle(oftree tree, uint phandle)
> +{
> +       return ofnode_null();
> +}
> +
> +static inline int ofnode_read_size(ofnode node, const char *propname)
> +{
> +       return -EINVAL;
> +}
> +
> +static inline fdt_addr_t ofnode_get_addr_size_index(ofnode node, int index,
> +                                                   fdt_size_t *size)
> +{
> +       return FDT_ADDR_T_NONE;
> +}
> +
> +static inline fdt_addr_t ofnode_get_addr_size_index_notrans(ofnode node,
> +                                                           int index,
> +                                                           fdt_size_t *size)
> +{
> +       return FDT_ADDR_T_NONE;
> +}
> +
> +static inline fdt_addr_t ofnode_get_addr_index(ofnode node, int index)
> +{
> +       return FDT_ADDR_T_NONE;
> +}
> +
> +static inline fdt_addr_t ofnode_get_addr(ofnode node)
> +{
> +       return FDT_ADDR_T_NONE;
> +}
> +
> +static inline fdt_size_t ofnode_get_size(ofnode node)
> +{
> +       return FDT_SIZE_T_NONE;
> +}
> +
> +static inline int ofnode_stringlist_search(ofnode node, const char *propname,
> +                                          const char *string)
> +{
> +       return -EINVAL;
> +}
> +
> +static inline int ofnode_read_string_index(ofnode node, const char *propname,
> +                                          int index, const char **outp)
> +{
> +       return -EINVAL;
> +}
> +
> +static inline int ofnode_read_string_count(ofnode node, const char *property)
> +{
> +       return -EINVAL;
> +}
> +
> +static inline int ofnode_read_string_list(ofnode node, const char *property,
> +                                         const char ***listp)
> +{
> +       return -EINVAL;
> +}
> +
> +static inline ofnode ofnode_parse_phandle(ofnode node, const char 
> *phandle_name,
> +                                         int index)
> +{
> +       return ofnode_null();
> +}
> +
> +static inline int ofnode_parse_phandle_with_args(ofnode node,
> +                                                const char *list_name,
> +                                                const char *cells_name,
> +                                                int cell_count, int index,
> +                                                struct ofnode_phandle_args 
> *out_args)
> +{
> +       return -EINVAL;
> +}
> +
> +static inline int ofnode_count_phandle_with_args(ofnode node,
> +                                                const char *list_name,
> +                                                const char *cells_name,
> +                                                int cell_count)
> +{
> +       return -EINVAL;
> +}
> +
> +static inline ofnode oftree_parse_phandle(oftree tree, ofnode node,
> +                                         const char *phandle_name, int index)
> +{
> +       return ofnode_null();
> +}
> +
> +static inline int oftree_parse_phandle_with_args(oftree tree, ofnode node,
> +                                                const char *list_name,
> +                                                const char *cells_name,
> +                                                int cell_count, int index,
> +                                                struct ofnode_phandle_args 
> *out_args)
> +{
> +       return -EINVAL;
> +}
> +
> +static inline int oftree_count_phandle_with_args(oftree tree, ofnode node,
> +                                                const char *list_name,
> +                                                const char *cells_name,
> +                                                int cell_count)
> +{
> +       return -EINVAL;
> +}
> +
> +static inline ofnode ofnode_path(const char *path)
> +{
> +       return ofnode_null();
> +}
> +
> +static inline ofnode oftree_path(oftree tree, const char *path)
> +{
> +       return ofnode_null();
> +}
> +
> +static inline ofnode oftree_root(oftree tree)
> +{
> +       return ofnode_null();
> +}
> +
> +static inline const void *ofnode_read_chosen_prop(const char *propname,
> +                                                 int *sizep)
> +{
> +       return NULL;
> +}
> +
> +static inline const char *ofnode_read_chosen_string(const char *propname)
> +{
> +       return NULL;
> +}
> +
> +static inline ofnode ofnode_get_chosen_node(const char *propname)
> +{
> +       return ofnode_null();
> +}
> +
> +static inline int ofnode_read_baud(void)
> +{
> +       return -EINVAL;
> +}
> +
> +static inline const void *ofnode_read_aliases_prop(const char *propname,
> +                                                  int *sizep)
> +{
> +       return NULL;
> +}
> +
> +static inline ofnode ofnode_get_aliases_node(const char *propname)
> +{
> +       return ofnode_null();
> +}
> +
> +static inline int ofnode_decode_display_timing(ofnode node, int index,
> +                                              struct display_timing *config)
> +{
> +       return -EINVAL;
> +}
> +
> +static inline int ofnode_decode_panel_timing(ofnode node,
> +                                            struct display_timing *config)
> +{
> +       return -EINVAL;
> +}
> +
> +static inline const void *ofnode_get_property(ofnode node, const char 
> *propname,
> +                                             int *lenp)
> +{
> +       return NULL;
> +}
> +
> +static inline bool ofnode_has_property(ofnode node, const char *propname)
> +{
> +       return false;
> +}
> +
> +static inline int ofnode_first_property(ofnode node, struct ofprop *prop)
> +{
> +       return -FDT_ERR_NOTFOUND;
> +}
> +
> +static inline int ofnode_next_property(struct ofprop *prop)
> +{
> +       return -FDT_ERR_NOTFOUND;
> +}
> +
> +static inline const void *ofprop_get_property(const struct ofprop *prop,
> +                                             const char **propname, int 
> *lenp)
> +{
> +       return NULL;
> +}
> +
> +static inline fdt_addr_t ofnode_get_addr_size(ofnode node, const char 
> *propname,
> +                                             fdt_size_t *sizep)
> +{
> +       return FDT_ADDR_T_NONE;
> +}
> +
> +static inline const uint8_t *ofnode_read_u8_array_ptr(ofnode node,
> +                                                     const char *propname,
> +                                                     size_t sz)
> +{
> +       return NULL;
> +}
> +
> +static inline int ofnode_read_pci_addr(ofnode node, enum fdt_pci_space type,
> +                                      const char *propname,
> +                                      struct fdt_pci_addr *addr,
> +                                      fdt_size_t *size)
> +{
> +       return -EINVAL;
> +}
> +
> +static inline int ofnode_read_pci_vendev(ofnode node, u16 *vendor, u16 
> *device)
> +{
> +       return -EINVAL;
> +}
> +
> +static inline int ofnode_read_eth_phy_id(ofnode node, u16 *vendor, u16 
> *device)
> +{
> +       return -EINVAL;
> +}
> +
> +static inline int ofnode_read_addr_cells(ofnode node)
> +{
> +       return 0;
> +}
> +
> +static inline int ofnode_read_size_cells(ofnode node)
> +{
> +       return 0;
> +}
> +
> +static inline int ofnode_read_simple_addr_cells(ofnode node)
> +{
> +       return 0;
> +}
> +
> +static inline int ofnode_read_simple_size_cells(ofnode node)
> +{
> +       return 0;
> +}
> +
> +static inline bool ofnode_pre_reloc(ofnode node)
> +{
> +       return false;
> +}
> +
> +static inline int ofnode_read_resource(ofnode node, uint index,
> +                                      struct resource *res)
> +{
> +       return -EINVAL;
> +}
> +
> +static inline int ofnode_read_resource_byname(ofnode node, const char *name,
> +                                             struct resource *res)
> +{
> +       return -EINVAL;
> +}
> +
> +static inline ofnode ofnode_by_compatible(ofnode from, const char *compat)
> +{
> +       return ofnode_null();
> +}
> +
> +static inline ofnode ofnode_by_prop_value(ofnode from, const char *propname,
> +                                         const void *propval, int proplen)
> +{
> +       return ofnode_null();
> +}
> +
> +static inline int ofnode_get_child_count(ofnode parent)
> +{
> +       return 0;
> +}
> +
> +static inline u64 ofnode_translate_address(ofnode node, const fdt32_t 
> *in_addr)
> +{
> +       return OF_BAD_ADDR;
> +}
> +
> +static inline u64 ofnode_translate_dma_address(ofnode node,
> +                                              const fdt32_t *in_addr)
> +{
> +       return OF_BAD_ADDR;
> +}
> +
> +static inline int ofnode_get_dma_range(ofnode node, phys_addr_t *cpu,
> +                                      dma_addr_t *bus, u64 *size)
> +{
> +       return -EINVAL;
> +}
> +
> +static inline int ofnode_device_is_compatible(ofnode node, const char 
> *compat)
> +{
> +       return 0;
> +}
> +
> +static inline int ofnode_write_prop(ofnode node, const char *propname,
> +                                   const void *value, int len, bool copy)
> +{
> +       return -ENOSYS;
> +}
> +
> +static inline int ofnode_write_string(ofnode node, const char *propname,
> +                                     const char *value)
> +{
> +       return -ENOSYS;
> +}
> +
> +static inline int ofnode_write_u32(ofnode node, const char *propname, u32 
> value)
> +{
> +       return -ENOSYS;
> +}
> +
> +static inline int ofnode_write_u64(ofnode node, const char *propname, u64 
> value)
> +{
> +       return -ENOSYS;
> +}
> +
> +static inline int ofnode_write_bool(ofnode node, const char *propname,
> +                                   bool value)
> +{
> +       return -ENOSYS;
> +}
> +
> +static inline int ofnode_delete_prop(ofnode node, const char *propname)
> +{
> +       return -ENOSYS;
> +}
> +
> +static inline int ofnode_set_enabled(ofnode node, bool value)
> +{
> +       return -ENOSYS;
> +}
> +
> +static inline ofnode ofnode_get_phy_node(ofnode eth_node)
> +{
> +       return ofnode_null();
> +}
> +
> +static inline phy_interface_t ofnode_read_phy_mode(ofnode mac_node)
> +{
> +       return PHY_INTERFACE_MODE_NA;
> +}
> +#endif /* OF_REAL */
>
> -#if CONFIG_IS_ENABLED(DM)
> +/**
> + * ofnode_for_each_compatible_node() - iterate over all nodes with a given
> + *                                    compatible string
> + *
> + * @node:       child node (ofnode, lvalue)
> + * @compat:     compatible string to match
> + *
> + * This is a wrapper around a for loop and is used like so::
> + *
> + *   ofnode node;
> + *   ofnode_for_each_compatible_node(node, compatible) {
> + *      Use node
> + *      ...
> + *   }
> + *
> + * Note that this is implemented as a macro and @node is used as
> + * iterator in the loop.
> + */
> +#define ofnode_for_each_compatible_node(node, compat) \
> +       for (node = ofnode_by_compatible(ofnode_null(), compat); \
> +            ofnode_valid(node); \
> +            node = ofnode_by_compatible(node, compat))
> +
> +/**
> + * ofnode_for_each_prop() - iterate over all properties of a node
> + *
> + * @prop:      struct ofprop
> + * @node:      node (lvalue, ofnode)
> + *
> + * This is a wrapper around a for loop and is used like this::
> + *
> + *   ofnode node;
> + *   struct ofprop prop;
> + *
> + *   ofnode_for_each_prop(prop, node) {
> + *       ...use prop...
> + *   }
> + *
> + * Note that this is implemented as a macro and @prop is used as
> + * iterator in the loop. The parent variable can be a constant or even a
> + * literal.
> + */
> +#define ofnode_for_each_prop(prop, node) \
> +       for (ofnode_first_property(node, &prop); \
> +            ofprop_valid(&prop); \
> +            ofnode_next_property(&prop))
> +
> +#if CONFIG_IS_ENABLED(OF_REAL)
>  /**
>   * ofnode_conf_read_bool() - Read a boolean value from the U-Boot config
>   *
> @@ -1800,8 +2312,7 @@ int ofnode_read_bootscript_address(u64 
> *bootscr_address, u64 *bootscr_offset);
>   */
>  int ofnode_read_bootscript_flash(u64 *bootscr_flash_offset,
>                                  u64 *bootscr_flash_size);
> -
> -#else /* CONFIG_DM */
> +#else
>  static inline bool ofnode_conf_read_bool(const char *prop_name)
>  {
>         return false;
> @@ -1817,7 +2328,29 @@ static inline const char *ofnode_conf_read_str(const 
> char *prop_name)
>         return NULL;
>  }
>
> -static inline int ofnode_read_bootscript_address(u64 *bootscr_address, u64 
> *bootscr_offset)
> +static inline bool ofnode_options_read_bool(const char *prop_name)
> +{
> +       return false;
> +}
> +
> +static inline int ofnode_options_read_int(const char *prop_name, int 
> default_val)
> +{
> +       return default_val;
> +}
> +
> +static inline const char *ofnode_options_read_str(const char *prop_name)
> +{
> +       return NULL;
> +}
> +
> +static inline int ofnode_options_get_by_phandle(const char *prop_name,
> +                                               ofnode *nodep)
> +{
> +       return -EINVAL;
> +}
> +
> +static inline int ofnode_read_bootscript_address(u64 *bootscr_address,
> +                                                u64 *bootscr_offset)
>  {
>         return -EINVAL;
>  }
> @@ -1827,9 +2360,9 @@ static inline int ofnode_read_bootscript_flash(u64 
> *bootscr_flash_offset,
>  {
>         return -EINVAL;
>  }
> +#endif /* OF_REAL */
>
> -#endif /* CONFIG_DM */
> -
> +#if CONFIG_IS_ENABLED(OF_REAL)
>  /**
>   * of_add_subnode() - add a new subnode to a node
>   *
> @@ -1885,5 +2418,28 @@ int ofnode_copy_node(ofnode dst_parent, const char 
> *name, ofnode src,
>   *
>   */
>  int ofnode_delete(ofnode *nodep);
> +#else
> +static inline int ofnode_add_subnode(ofnode parent, const char *name,
> +                                    ofnode *nodep)
> +{
> +       return -ENOSYS;
> +}
> +
> +static inline int ofnode_copy_props(ofnode dst, ofnode src)
> +{
> +       return -ENOSYS;
> +}
> +
> +static inline int ofnode_copy_node(ofnode dst_parent, const char *name,
> +                                  ofnode src, ofnode *nodep)
> +{
> +       return -ENOSYS;
> +}
> +
> +static inline int ofnode_delete(ofnode *nodep)
> +{
> +       return -ENOSYS;
> +}
> +#endif /* OF_REAL */
>
>  #endif
> --
> 2.43.0
>
> base-commit: 42a4ff5f63baacc414b564c02541cd1f5c0862ee
> branch: ofn-us

Reply via email to