diff options
author | Simon Glass <sjg@chromium.org> | 2020-12-16 17:25:06 -0700 |
---|---|---|
committer | Simon Glass <sjg@chromium.org> | 2020-12-22 20:39:26 -0700 |
commit | ec1add1e51affd4aacc308dc37439ea13dc1b70e (patch) | |
tree | 6b9283b58c8684a239d25492c2e8a8b1319be8ca /include | |
parent | 73da3d2cffc601b2761c4aa32492b88f87c363c5 (diff) | |
download | u-boot-ec1add1e51affd4aacc308dc37439ea13dc1b70e.tar.gz |
dm: core: Inline a few ofnode functions in SPL
A recent change to unify the flattree/livetree code introduced a small
size increase in SPL on some boards. For example SPL code size for
px30-core-ctouch2-px30 increased by 40 bytes.
To address this we can take advantage of the fact that some of the ofnode
functions are only called a few times in SPL, so it is worth inlining
them.
Add new Kconfig options to control this. These functions are not inlined
for U-Boot proper, since this increases code size.
Fixes: 2ebea5eaebf ("dm: core: Combine the flattree and livetree binding code")
Signed-off-by: Simon Glass <sjg@chromium.org>
Diffstat (limited to 'include')
-rw-r--r-- | include/dm/ofnode.h | 56 |
1 files changed, 45 insertions, 11 deletions
diff --git a/include/dm/ofnode.h b/include/dm/ofnode.h index 53f04ac91d..5b088650d3 100644 --- a/include/dm/ofnode.h +++ b/include/dm/ofnode.h @@ -10,6 +10,7 @@ /* TODO(sjg@chromium.org): Drop fdtdec.h include */ #include <fdtdec.h> #include <dm/of.h> +#include <dm/of_access.h> #include <log.h> /* Enable checks to protect against invalid calls */ @@ -357,17 +358,6 @@ const char *ofnode_read_string(ofnode node, const char *propname); */ int ofnode_read_u32_array(ofnode node, const char *propname, u32 *out_values, size_t sz); -/** - * ofnode_is_enabled() - Checks whether a node is enabled. - * This looks for a 'status' property. If this exists, then returns true if - * the status is 'okay' and false otherwise. If there is no status property, - * it returns true on the assumption that anything mentioned should be enabled - * by default. - * - * @node: node to examine - * @return false (not enabled) or true (enabled) - */ -bool ofnode_is_enabled(ofnode node); /** * ofnode_read_bool() - read a boolean value from a property @@ -388,6 +378,49 @@ bool ofnode_read_bool(ofnode node, const char *propname); */ ofnode ofnode_find_subnode(ofnode node, const char *subnode_name); +#if CONFIG_IS_ENABLED(DM_INLINE_OFNODE) +static inline bool ofnode_is_enabled(ofnode node) +{ + if (ofnode_is_np(node)) { + return of_device_is_available(ofnode_to_np(node)); + } else { + return fdtdec_get_is_enabled(gd->fdt_blob, + ofnode_to_offset(node)); + } +} + +static inline ofnode ofnode_first_subnode(ofnode node) +{ + assert(ofnode_valid(node)); + if (ofnode_is_np(node)) + return np_to_ofnode(node.np->child); + + return offset_to_ofnode( + fdt_first_subnode(gd->fdt_blob, ofnode_to_offset(node))); +} + +static inline ofnode ofnode_next_subnode(ofnode node) +{ + assert(ofnode_valid(node)); + if (ofnode_is_np(node)) + return np_to_ofnode(node.np->sibling); + + return offset_to_ofnode( + fdt_next_subnode(gd->fdt_blob, ofnode_to_offset(node))); +} +#else +/** + * ofnode_is_enabled() - Checks whether a node is enabled. + * This looks for a 'status' property. If this exists, then returns true if + * the status is 'okay' and false otherwise. If there is no status property, + * it returns true on the assumption that anything mentioned should be enabled + * by default. + * + * @node: node to examine + * @return false (not enabled) or true (enabled) + */ +bool ofnode_is_enabled(ofnode node); + /** * ofnode_first_subnode() - find the first subnode of a parent node * @@ -405,6 +438,7 @@ ofnode ofnode_first_subnode(ofnode node); * has no more siblings) */ ofnode ofnode_next_subnode(ofnode node); +#endif /* DM_INLINE_OFNODE */ /** * ofnode_get_parent() - get the ofnode's parent (enclosing ofnode) |