From 27326c7ee269ff351bba8c2461e19f29d66b6a3a Mon Sep 17 00:00:00 2001 From: Heiko Stübner Date: Sat, 18 Feb 2017 19:46:21 +0100 Subject: dm: allow limiting pre-reloc markings to spl or tpl Right now the u-boot,dm-pre-reloc flag will make each marked node always appear in both spl and tpl. But systems needing an additional tpl might have special constraints for each, like the spl needing to be very tiny. So introduce two additional flags to mark nodes for only spl or tpl environments and introduce a function dm_fdt_pre_reloc to automate the necessary checks in code instances checking for pre-relocation flags. The behaviour of the original flag stays untouched and still marks a node for both spl and tpl. Signed-off-by: Heiko Stuebner Reviewed-by: Simon Glass Tested-by: Kever Yang --- drivers/core/root.c | 2 +- drivers/core/util.c | 25 +++++++++++++++++++++++++ 2 files changed, 26 insertions(+), 1 deletion(-) (limited to 'drivers/core') diff --git a/drivers/core/root.c b/drivers/core/root.c index 175fd3fb252..93ab5682968 100644 --- a/drivers/core/root.c +++ b/drivers/core/root.c @@ -205,7 +205,7 @@ int dm_scan_fdt_node(struct udevice *parent, const void *blob, int offset, offset > 0; offset = fdt_next_subnode(blob, offset)) { if (pre_reloc_only && - !fdt_getprop(blob, offset, "u-boot,dm-pre-reloc", NULL)) + !dm_fdt_pre_reloc(blob, offset)) continue; if (!fdtdec_get_is_enabled(blob, offset)) { dm_dbg(" - ignoring disabled device\n"); diff --git a/drivers/core/util.c b/drivers/core/util.c index e01dd06d282..bd4de7acd69 100644 --- a/drivers/core/util.c +++ b/drivers/core/util.c @@ -5,6 +5,7 @@ */ #include +#include #include void dm_warn(const char *fmt, ...) @@ -35,3 +36,27 @@ int list_count_items(struct list_head *head) return count; } + +int dm_fdt_pre_reloc(const void *blob, int offset) +{ + if (fdt_getprop(blob, offset, "u-boot,dm-pre-reloc", NULL)) + return 1; + +#ifdef CONFIG_TPL_BUILD + if (fdt_getprop(blob, offset, "u-boot,dm-tpl", NULL)) + return 1; +#elif defined(CONFIG_SPL_BUILD) + if (fdt_getprop(blob, offset, "u-boot,dm-spl", NULL)) + return 1; +#else + /* + * In regular builds individual spl and tpl handling both + * count as handled pre-relocation for later second init. + */ + if (fdt_getprop(blob, offset, "u-boot,dm-spl", NULL) || + fdt_getprop(blob, offset, "u-boot,dm-tpl", NULL)) + return 1; +#endif + + return 0; +} -- cgit v1.3.1 From d905cf7365ad25c55129ce6bc473b67a642d7817 Mon Sep 17 00:00:00 2001 From: Heiko Stübner Date: Thu, 23 Feb 2017 17:30:38 +0100 Subject: dm: Return actual bools in dm_fdt_pre_reloc Documentation says that we're returning true/false, not 1/0 so adapt the function to return actual booleans. Signed-off-by: Heiko Stuebner Acked-by: Simon Glass --- drivers/core/util.c | 12 ++++++------ include/dm/util.h | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) (limited to 'drivers/core') diff --git a/drivers/core/util.c b/drivers/core/util.c index bd4de7acd69..5ceac8bbb15 100644 --- a/drivers/core/util.c +++ b/drivers/core/util.c @@ -37,17 +37,17 @@ int list_count_items(struct list_head *head) return count; } -int dm_fdt_pre_reloc(const void *blob, int offset) +bool dm_fdt_pre_reloc(const void *blob, int offset) { if (fdt_getprop(blob, offset, "u-boot,dm-pre-reloc", NULL)) - return 1; + return true; #ifdef CONFIG_TPL_BUILD if (fdt_getprop(blob, offset, "u-boot,dm-tpl", NULL)) - return 1; + return true; #elif defined(CONFIG_SPL_BUILD) if (fdt_getprop(blob, offset, "u-boot,dm-spl", NULL)) - return 1; + return true; #else /* * In regular builds individual spl and tpl handling both @@ -55,8 +55,8 @@ int dm_fdt_pre_reloc(const void *blob, int offset) */ if (fdt_getprop(blob, offset, "u-boot,dm-spl", NULL) || fdt_getprop(blob, offset, "u-boot,dm-tpl", NULL)) - return 1; + return true; #endif - return 0; + return false; } diff --git a/include/dm/util.h b/include/dm/util.h index 32060ab30eb..45529ce0e6a 100644 --- a/include/dm/util.h +++ b/include/dm/util.h @@ -72,6 +72,6 @@ static inline void dm_dump_devres(void) * * Returns true if node is needed in SPL/TL, false otherwise. */ -int dm_fdt_pre_reloc(const void *blob, int offset); +bool dm_fdt_pre_reloc(const void *blob, int offset); #endif -- cgit v1.3.1