[PATCH RFC u-boot-mvebu 22/59] cmd: mvebu/bubt: Add support for reading image from the SATA disk partition

Pali Rohár pali at kernel.org
Tue Feb 21 21:18:48 CET 2023


This change allows to load boot image from the first SATA/SCSI device
partition and burn it to board boot location (e.g. SPI-NOR). This is
particularly when storage device is not handled by U-Boot as USB mass
storage (which is already supported by bubt) but as SATA/SCSI device.

Signed-off-by: Pali Rohár <pali at kernel.org>
---
 cmd/mvebu/bubt.c       | 39 +++++++++++++++++++++++++++++++++++++--
 doc/mvebu/cmd/bubt.txt |  2 +-
 2 files changed, 38 insertions(+), 3 deletions(-)

diff --git a/cmd/mvebu/bubt.c b/cmd/mvebu/bubt.c
index 1d51fde579b5..df6b73c6a172 100644
--- a/cmd/mvebu/bubt.c
+++ b/cmd/mvebu/bubt.c
@@ -420,6 +420,36 @@ static int sata_burn_image(size_t image_size)
 #endif
 }
 
+static size_t sata_read_file(const char *file_name)
+{
+	loff_t act_read = 0;
+	struct udevice *dev;
+	int rc;
+
+	/* try to recognize storage devices immediately */
+	scsi_scan(false);
+
+	/* Try to recognize storage devices immediately */
+	blk_first_device(UCLASS_SCSI, &dev);
+	if (!dev) {
+		printf("Error: SATA device not found\n");
+		return 0;
+	}
+
+	/* Always load from scsi 0 */
+	if (fs_set_blk_dev("scsi", "0", FS_TYPE_ANY)) {
+		printf("Error: SATA 0 not found\n");
+		return 0;
+	}
+
+	/* Perfrom file read */
+	rc = fs_read(file_name, get_load_addr(), 0, 0, &act_read);
+	if (rc)
+		return 0;
+
+	return act_read;
+}
+
 static int is_sata_active(void)
 {
 	return 1;
@@ -430,6 +460,11 @@ static int sata_burn_image(size_t image_size)
 	return -ENODEV;
 }
 
+static size_t sata_read_file(const char *file_name)
+{
+	return 0;
+}
+
 static int is_sata_active(void)
 {
 	return 0;
@@ -656,7 +691,7 @@ struct bubt_dev bubt_devs[BUBT_MAX_DEV] = {
 	{"tftp", tftp_read_file, NULL, is_tftp_active},
 	{"usb",  usb_read_file,  NULL, is_usb_active},
 	{"mmc",  mmc_read_file,  mmc_burn_image, is_mmc_active},
-	{"sata",  NULL, sata_burn_image,  is_sata_active},
+	{"sata", sata_read_file, sata_burn_image,  is_sata_active},
 	{"spi",  NULL, spi_burn_image,  is_spi_active},
 	{"nand", NULL, nand_burn_image, is_nand_active},
 };
@@ -1206,7 +1241,7 @@ U_BOOT_CMD(
 	"[file-name] [destination [source]]\n"
 	"\t-file-name     The image file name to burn. Default = " CONFIG_MVEBU_UBOOT_DFLT_NAME "\n"
 	"\t-destination   Flash to burn to [spi, nand, mmc, sata]. Default = " DEFAULT_BUBT_DST "\n"
-	"\t-source        The source to load image from [tftp, usb, mmc]. Default = " DEFAULT_BUBT_SRC "\n"
+	"\t-source        The source to load image from [tftp, usb, mmc, sata]. Default = " DEFAULT_BUBT_SRC "\n"
 	"Examples:\n"
 	"\tbubt - Burn flash-image.bin from tftp to active boot device\n"
 	"\tbubt flash-image-new.bin nand - Burn flash-image-new.bin from tftp to NAND flash\n"
diff --git a/doc/mvebu/cmd/bubt.txt b/doc/mvebu/cmd/bubt.txt
index 515e4fb1b0e8..52bd3e66c51e 100644
--- a/doc/mvebu/cmd/bubt.txt
+++ b/doc/mvebu/cmd/bubt.txt
@@ -6,7 +6,7 @@ The bubt command gets the following parameters: ATF file name, destination devic
 bubt [file-name] [destination [source]]
 	- file-name		Image file name to burn. default = flash-image.bin
 	- destination		Flash to burn to [spi, nand, mmc, sata]. default = active flash
-	- source		Source to load image from [tftp, usb]. default = tftp
+	- source		Source to load image from [tftp, usb, mmc, sata]. default = tftp
 
 Examples:
 	bubt				- Burn flash-image.bin from tftp to active flash
-- 
2.20.1



More information about the U-Boot mailing list