summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPali Rohár <pali@kernel.org>2023-03-29 21:25:52 +0200
committerStefan Roese <sr@denx.de>2023-04-13 11:34:24 +0200
commitfa06a6df65b7bf77c112aa3f83b3b62bf7790712 (patch)
tree6ae5ba8054aa09577e5622deda944d3500a4cc13
parent9e804638bfe2693a908abf066ff66c251572afa7 (diff)
arm: mvebu: spl: Do not hardcode SATA block size to 512
Find SATA block device by blk_get_devnum_by_uclass_id() function and read from it the real block size of the SATA disk. Signed-off-by: Pali Rohár <pali@kernel.org>
-rw-r--r--arch/arm/mach-mvebu/spl.c11
1 files changed, 8 insertions, 3 deletions
diff --git a/arch/arm/mach-mvebu/spl.c b/arch/arm/mach-mvebu/spl.c
index 6b8c72a71da..379daa88a4d 100644
--- a/arch/arm/mach-mvebu/spl.c
+++ b/arch/arm/mach-mvebu/spl.c
@@ -208,10 +208,15 @@ int spl_parse_board_header(struct spl_image_info *spl_image,
/*
* For SATA srcaddr is specified in number of sectors.
- * This expects that sector size is 512 bytes.
+ * Retrieve block size of the first SCSI device (same
+ * code used by the spl_sata_load_image_raw() function)
+ * or fallback to default sector size of 512 bytes.
*/
- if (IS_ENABLED(CONFIG_SPL_SATA) && mhdr->blockid == IBR_HDR_SATA_ID)
- spl_image->offset *= 512;
+ if (IS_ENABLED(CONFIG_SPL_SATA) && mhdr->blockid == IBR_HDR_SATA_ID) {
+ struct blk_desc *blk_dev = blk_get_devnum_by_uclass_id(UCLASS_SCSI, 0);
+ unsigned long blksz = blk_dev ? blk_dev->blksz : 512;
+ spl_image->offset *= blksz;
+ }
if (spl_image->offset % 4 != 0) {
printf("ERROR: Wrong srcaddr (0x%08x) in kwbimage\n",