diff mbox series

[2/8] sunxi: board: Add a helper to get the SPL DT name

Message ID 20200903050716.48488-3-samuel@sholland.org
State Changes Requested
Delegated to: Jagannadha Sutradharudu Teki
Headers show
Series PinePhone automatic device tree selection | expand

Commit Message

Samuel Holland Sept. 3, 2020, 5:07 a.m. UTC
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.

Signed-off-by: Samuel Holland <samuel@sholland.org>
---
 board/sunxi/board.c | 26 +++++++++++++++++---------
 1 file changed, 17 insertions(+), 9 deletions(-)

Comments

Andre Przywara Sept. 22, 2020, 12:38 a.m. UTC | #1
On 03/09/2020 06:07, Samuel Holland wrote:
> 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.
> 
> Signed-off-by: Samuel Holland <samuel@sholland.org>

Reviewed-by: Andre Przywara <andre.przywara@arm.com>

Thanks,
Andre

> ---
>  board/sunxi/board.c | 26 +++++++++++++++++---------
>  1 file changed, 17 insertions(+), 9 deletions(-)
> 
> diff --git a/board/sunxi/board.c b/board/sunxi/board.c
> index 674e6816d2d..5c9b811f27a 100644
> --- a/board/sunxi/board.c
> +++ b/board/sunxi/board.c
> @@ -319,6 +319,17 @@ static struct boot_file_head * get_spl_header(uint8_t req_version)
>  	return spl;
>  }
>  
> +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;
> +}
> +
>  int dram_init(void)
>  {
>  	struct boot_file_head *spl = get_spl_header(SPL_DRAM_HEADER_VERSION);
> @@ -891,20 +902,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")) {
>
diff mbox series

Patch

diff --git a/board/sunxi/board.c b/board/sunxi/board.c
index 674e6816d2d..5c9b811f27a 100644
--- a/board/sunxi/board.c
+++ b/board/sunxi/board.c
@@ -319,6 +319,17 @@  static struct boot_file_head * get_spl_header(uint8_t req_version)
 	return spl;
 }
 
+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;
+}
+
 int dram_init(void)
 {
 	struct boot_file_head *spl = get_spl_header(SPL_DRAM_HEADER_VERSION);
@@ -891,20 +902,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")) {