summaryrefslogtreecommitdiff
path: root/board/sunxi
diff options
context:
space:
mode:
authorSamuel Holland <samuel@sholland.org>2020-10-24 10:21:53 -0500
committerAndre Przywara <andre.przywara@arm.com>2020-11-17 00:42:20 +0000
commit41530cf6819cc1f454fb87934a7f4523548bfc91 (patch)
treefbb71d8b46bd4fdf64498f4105baa8d40ee31c73 /board/sunxi
parent8a8b73b6d714c740c1e2387c3474cc65cafd47aa (diff)
sunxi: board: Save the chosen DT name in the SPL header
This overwrites the name loaded from the SPL image. It will be different if there was previously no name provided, or if a more accurate name was determined by the board variant selection logic. This means that the DT name in the SPL header now always matches the DT appended to U-Boot. 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: move function under CONFIG_SPL_LOAD_FIT guard] Signed-off-by: Andre Przywara <andre.przywara@arm.com>
Diffstat (limited to 'board/sunxi')
-rw-r--r--board/sunxi/board.c28
1 files changed, 27 insertions, 1 deletions
diff --git a/board/sunxi/board.c b/board/sunxi/board.c
index 3243e16a84..42fc6024d3 100644
--- a/board/sunxi/board.c
+++ b/board/sunxi/board.c
@@ -903,9 +903,26 @@ int ft_board_setup(void *blob, struct bd_info *bd)
}
#ifdef CONFIG_SPL_LOAD_FIT
+
+static void set_spl_dt_name(const char *name)
+{
+ struct boot_file_head *spl = get_spl_header(SPL_ENV_HEADER_VERSION);
+
+ if (spl == INVALID_SPL_HEADER)
+ return;
+
+ /* Promote the header version for U-Boot proper, if needed. */
+ if (spl->spl_signature[3] < SPL_DT_HEADER_VERSION)
+ spl->spl_signature[3] = SPL_DT_HEADER_VERSION;
+
+ strcpy((char *)&spl->string_pool, name);
+ spl->dt_name_offset = offsetof(struct boot_file_head, string_pool);
+}
+
int board_fit_config_name_match(const char *name)
{
const char *best_dt_name = get_spl_dt_name();
+ int ret;
#ifdef CONFIG_DEFAULT_DEVICE_TREE
if (best_dt_name == NULL)
@@ -943,6 +960,15 @@ int board_fit_config_name_match(const char *name)
}
#endif
- return strcmp(name, best_dt_name);
+ ret = strcmp(name, best_dt_name);
+
+ /*
+ * If one of the FIT configurations matches the most accurate DT name,
+ * update the SPL header to provide that DT name to U-Boot proper.
+ */
+ if (ret == 0)
+ set_spl_dt_name(best_dt_name);
+
+ return ret;
}
#endif