diff options
author | Etienne Carriere <etienne.carriere@linaro.org> | 2018-11-30 12:10:58 +0100 |
---|---|---|
committer | Jérôme Forissier <jerome.forissier@linaro.org> | 2018-12-03 13:11:43 +0100 |
commit | 7038c397e6943a5d115fecc8a03d2748c522ca92 (patch) | |
tree | 5dd2090a1aa89f00664d9ff595d95f11ad07c80f /core | |
parent | 850bb29cf2277cd0a2f0ed9805c9cf2f7c8f376e (diff) |
core: concurrent external and embedded DTBs
Introduce get_external_dt() as opposed to get_embedded_dt().
Change get_dt() to return embedded DTB location and falls back
to external DTB location.
Signed-off-by: Etienne Carriere <etienne.carriere@linaro.org>
Diffstat (limited to 'core')
-rw-r--r-- | core/arch/arm/include/kernel/generic_boot.h | 5 | ||||
-rw-r--r-- | core/arch/arm/kernel/generic_boot.c | 34 |
2 files changed, 20 insertions, 19 deletions
diff --git a/core/arch/arm/include/kernel/generic_boot.h b/core/arch/arm/include/kernel/generic_boot.h index 3c5edfb0..ca1d9b2b 100644 --- a/core/arch/arm/include/kernel/generic_boot.h +++ b/core/arch/arm/include/kernel/generic_boot.h @@ -43,10 +43,13 @@ int generic_boot_core_release(size_t core_idx, paddr_t entry); struct ns_entry_context *generic_boot_core_hpen(void); #endif -/* Returns DTB location: embedded DTB if enabled, otherwise external DTB */ +/* Returns embedded DTB if present, then external DTB if found, then NULL */ void *get_dt(void); /* Returns embedded DTB location if present, otherwise NULL */ void *get_embedded_dt(void); +/* Returns external DTB if present, otherwise NULL */ +void *get_external_dt(void); + #endif /* KERNEL_GENERIC_BOOT_H */ diff --git a/core/arch/arm/kernel/generic_boot.c b/core/arch/arm/kernel/generic_boot.c index c0657498..2c68bd5d 100644 --- a/core/arch/arm/kernel/generic_boot.c +++ b/core/arch/arm/kernel/generic_boot.c @@ -475,6 +475,16 @@ static void init_runtime(unsigned long pageable_part __unused) } #endif +void *get_dt(void) +{ + void *fdt = get_embedded_dt(); + + if (!fdt) + fdt = get_external_dt(); + + return fdt; +} + #if defined(CFG_EMBED_DTB) void *get_embedded_dt(void) { @@ -498,8 +508,8 @@ void *get_embedded_dt(void) } #endif /*CFG_EMBED_DTB*/ -#if defined(CFG_DT) && !defined(CFG_EMBED_DTB) -void *get_dt(void) +#if defined(CFG_DT) +void *get_external_dt(void) { assert(cpu_mmu_enabled()); return external_dt.blob; @@ -507,7 +517,7 @@ void *get_dt(void) static void release_external_dt(void) { - /* dt no more reached, reset pointer to invalid */ + /* External DTB no more reached, reset pointer to invalid */ external_dt.blob = NULL; } @@ -934,23 +944,12 @@ static void update_external_dt(void) panic(); } } -#endif /*CFG_DT && !CFG_EMBED_DTB*/ - -#if defined(CFG_DT) && defined(CFG_EMBED_DTB) -void *get_dt(void) -{ - return get_embedded_dt(); -} -#endif - -#ifndef CFG_DT -void *get_dt(void) +#else /*CFG_DT*/ +void *get_external_dt(void) { return NULL; } -#endif -#if !defined(CFG_DT) || defined(CFG_EMBED_DTB) static void release_external_dt(void) { } @@ -968,8 +967,7 @@ static struct core_mmu_phys_mem *get_memory(void *fdt __unused, { return NULL; } - -#endif /*!CFG_DT || CFG_EMBED_DTB*/ +#endif /*!CFG_DT*/ static void discover_nsec_memory(void) { |