[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