[PATCH] U-Boot ENV in EXT4 support for Espressobin

Pali Rohár pali at kernel.org
Tue Feb 8 00:03:50 CET 2022


On Monday 07 February 2022 23:56:25 Rogier Stam wrote:
> Hi
> 
> Per Pali's comments adapted the patch. This one also includes the changes
> necessary for storing ENV in FAT. I also added CONFIG_SCSI for both ext4 and
> fat should anyone want to use SCSI instead of AHCI.
> 
> Regards
> 
> Rogier
> 
> On 07-02-2022 09:11, Rogier Stam wrote:
> > Hi
> > 
> > I was attemting to boot from SATA on an Espressobin. As such I wanted to
> > store the Environment in a SATA partition and not in the SPI flash. In
> > order to get this running I had to make a few changes, as the original
> > code assumes the Environment is always in SPI flash. Additionally I also
> > had to force scsci_scan to ensure the AHCI disk / partitions could be
> > found.
> > 
> > Hope it will be considered to merge
> > 
> > Regards
> > 
> > Rogier Stam
> > 

+ Marek

> From e2c1b825700b6356b8b0758dcbe8c3c64bd79805 Mon Sep 17 00:00:00 2001
> From: Rogier Stam <rogier at unrailed.org>
> Date: Mon, 31 Jan 2022 23:06:19 +0100
> Subject: [PATCH] Fix Espressobin build for configs where ENV is not in SPI
> 
> When storing the UBoot Environment in for example EXT4,
> the U-Boot build is broken for several reasons:
> 1. armada-385-turris-omnia-u-boot.dtsi will not allow
>    CONFIG_ENV_OFFSET and CONFIG_ENV_SIZE to be undefined
> 2. armada-37xx/board.c ft_board_setup function does not
>    exist if CONFIG_ENV_IS_IN_SPI_FLASH is not defined
> 3. When defining CONFIG_ENV_IS_IN_EXT4 and using AHCI
>    SCSI scan is not performed and hence the partition on
>    AHCI is not available when the environment is loaded.
> 4. Same for CONFIG_ENV_IS_IN_FAT and using AHCI. SCSI
>    scan is not performed.
> 
> This change fixes these 4 points so that the UBoot config
> can be on a AHCI (SATA) drive partition instead of
> enforced in SPI flash.
> 
> Signed-off-by: Rogier Stam <rogier at unrailed.org>

Reviewed-by: Pali Rohár <pali at kernel.org>

> ---
>  arch/arm/dts/armada-385-turris-omnia-u-boot.dtsi | 2 ++
>  board/Marvell/mvebu_armada-37xx/board.c          | 4 +++-
>  env/ext4.c                                       | 5 +++++
>  env/fat.c                                        | 5 +++++
>  4 files changed, 15 insertions(+), 1 deletion(-)
> 
> diff --git a/arch/arm/dts/armada-385-turris-omnia-u-boot.dtsi b/arch/arm/dts/armada-385-turris-omnia-u-boot.dtsi
> index 3ff76c9..008787e 100644
> --- a/arch/arm/dts/armada-385-turris-omnia-u-boot.dtsi
> +++ b/arch/arm/dts/armada-385-turris-omnia-u-boot.dtsi
> @@ -38,6 +38,7 @@
>  	};
>  };
>  
> +#ifdef CONFIG_ENV_IS_IN_SPI_FLASH
>  &spi0 {
>  	u-boot,dm-pre-reloc;
>  
> @@ -56,6 +57,7 @@
>  		};
>  	};
>  };
> +#endif
>  
>  &uart0 {
>  	u-boot,dm-pre-reloc;
> diff --git a/board/Marvell/mvebu_armada-37xx/board.c b/board/Marvell/mvebu_armada-37xx/board.c
> index d7b6eca..5bace0c 100644
> --- a/board/Marvell/mvebu_armada-37xx/board.c
> +++ b/board/Marvell/mvebu_armada-37xx/board.c
> @@ -328,9 +328,10 @@ int board_network_enable(struct mii_dev *bus)
>  	return 0;
>  }
>  
> -#if defined(CONFIG_OF_BOARD_SETUP) && defined(CONFIG_ENV_IS_IN_SPI_FLASH)
> +#ifdef CONFIG_OF_BOARD_SETUP
>  int ft_board_setup(void *blob, struct bd_info *bd)
>  {
> +#ifdef CONFIG_ENV_IS_IN_SPI_FLASH
>  	int ret;
>  	int spi_off;
>  	int parts_off;
> @@ -424,6 +425,7 @@ int ft_board_setup(void *blob, struct bd_info *bd)
>  		return 0;
>  	}
>  
> +#endif
>  	return 0;
>  }
>  #endif
> diff --git a/env/ext4.c b/env/ext4.c
> index 9f65afb..47e05a4 100644
> --- a/env/ext4.c
> +++ b/env/ext4.c
> @@ -31,6 +31,7 @@
>  #include <errno.h>
>  #include <ext4fs.h>
>  #include <mmc.h>
> +#include <scsi.h>
>  #include <asm/global_data.h>
>  
>  DECLARE_GLOBAL_DATA_PTR;
> @@ -146,6 +147,10 @@ static int env_ext4_load(void)
>  	if (!strcmp(ifname, "mmc"))
>  		mmc_initialize(NULL);
>  #endif
> +#if defined(CONFIG_AHCI) || defined(CONFIG_SCSI)
> +	if (!strcmp(ifname, "scsi"))
> +		scsi_scan(true);
> +#endif
>  
>  	part = blk_get_device_part_str(ifname, dev_and_part,
>  				       &dev_desc, &info, 1);
> diff --git a/env/fat.c b/env/fat.c
> index fdccd6c..dbd6a13 100644
> --- a/env/fat.c
> +++ b/env/fat.c
> @@ -17,6 +17,7 @@
>  #include <errno.h>
>  #include <fat.h>
>  #include <mmc.h>
> +#include <scsi.h>
>  #include <asm/cache.h>
>  #include <asm/global_data.h>
>  #include <linux/stddef.h>
> @@ -122,6 +123,10 @@ static int env_fat_load(void)
>  	if (!strcmp(CONFIG_ENV_FAT_INTERFACE, "mmc"))
>  		mmc_initialize(NULL);
>  #endif
> +#if defined(CONFIG_AHCI) || defined(CONFIG_SCSI)
> +	if (!strcmp(CONFIG_ENV_FAT_INTERFACE, "scsi"))
> +		scsi_scan(true);
> +#endif
>  
>  	part = blk_get_device_part_str(CONFIG_ENV_FAT_INTERFACE,
>  					env_fat_device_and_part(),
> -- 
> 2.7.4
> 



More information about the U-Boot mailing list