summaryrefslogtreecommitdiff
path: root/board/sunxi
diff options
context:
space:
mode:
authorSamuel Holland <samuel@sholland.org>2020-10-24 10:21:50 -0500
committerAndre Przywara <andre.przywara@arm.com>2020-11-17 00:42:20 +0000
commit467b7e52ec8920034b0d5ffb23a9ed72cd26bad3 (patch)
tree1394f89b836075cdc34fb41ea06378a4a2ae2d78 /board/sunxi
parent2fcd74899c940f5bd474dab0c4f53b5d6e2185b3 (diff)
sunxi: board: Add a helper to get the SPL DT name
This moves the validity checking and typecasts all to one place away from the string comparison logic, and it detangles the compile-time and runtime control flow. The new helper will also be used by U-Boot proper in a future commit. Acked-by: Maxime Ripard <mripard@kernel.org> Reviewed-by: Andre Przywara <andre.przywara@arm.com> Signed-off-by: Samuel Holland <samuel@sholland.org> Reviewed-by: Jagan Teki <jagan@amarulasolutions.com> [Andre: protect new function with CONFIG_SPL_LOAD_FIT] Signed-off-by: Andre Przywara <andre.przywara@arm.com>
Diffstat (limited to 'board/sunxi')
-rw-r--r--board/sunxi/board.c28
1 files changed, 19 insertions, 9 deletions
diff --git a/board/sunxi/board.c b/board/sunxi/board.c
index d7dfcc78ea..078a881e57 100644
--- a/board/sunxi/board.c
+++ b/board/sunxi/board.c
@@ -319,6 +319,19 @@ static struct boot_file_head * get_spl_header(uint8_t req_version)
return spl;
}
+#ifdef CONFIG_SPL_LOAD_FIT
+static const char *get_spl_dt_name(void)
+{
+ struct boot_file_head *spl = get_spl_header(SPL_DT_HEADER_VERSION);
+
+ /* Check if there is a DT name stored in the SPL header. */
+ if (spl != INVALID_SPL_HEADER && spl->dt_name_offset)
+ return (char *)spl + spl->dt_name_offset;
+
+ return NULL;
+}
+#endif
+
int dram_init(void)
{
struct boot_file_head *spl = get_spl_header(SPL_DRAM_HEADER_VERSION);
@@ -891,20 +904,17 @@ int ft_board_setup(void *blob, struct bd_info *bd)
#ifdef CONFIG_SPL_LOAD_FIT
int board_fit_config_name_match(const char *name)
{
- struct boot_file_head *spl = get_spl_header(SPL_DT_HEADER_VERSION);
- const char *best_dt_name = (const char *)spl;
+ const char *best_dt_name = get_spl_dt_name();
- /* Check if there is a DT name stored in the SPL header and use that. */
- if (spl != INVALID_SPL_HEADER && spl->dt_name_offset) {
- best_dt_name += spl->dt_name_offset;
- } else {
#ifdef CONFIG_DEFAULT_DEVICE_TREE
+ if (best_dt_name == NULL)
best_dt_name = CONFIG_DEFAULT_DEVICE_TREE;
-#else
- return 0;
#endif
- };
+ if (best_dt_name == NULL) {
+ /* No DT name was provided, so accept the first config. */
+ return 0;
+ }
#ifdef CONFIG_PINE64_DT_SELECTION
/* Differentiate the two Pine64 board DTs by their DRAM size. */
if (strstr(name, "-pine64") && strstr(best_dt_name, "-pine64")) {