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
>From e2c1b825700b6356b8b0758dcbe8c3c64bd79805 Mon Sep 17 00:00:00 2001
From: Rogier Stam <rog...@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 <rog...@unrailed.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