diff mbox series

[2/3] mmc: fsl_esdhc_spl: pre-PBL: fix determining U-Boot size

Message ID 20220402221701.18498-3-pali@kernel.org
State Accepted
Commit a91998d8affc0405bafeade583204f66db81e252
Delegated to: Priyanka Jain
Headers show
Series mmc: fsl_esdhc_spl: Fix booting P2020 from SD card | expand

Commit Message

Pali Rohár April 2, 2022, 10:17 p.m. UTC
In pre-PBL header is stored size of code which BootROM copies from SD card
to L2/SRAM. This size has upper limit of L2 cache size. In most cases this
is size of U-Boot SPL or size of L2 cache.

Therefore this size in pre-PBL header cannot be used for determining size
of proper U-Boot.

So always use CONFIG_SYS_MMC_U_BOOT_SIZE for determining size of proper
U-Boot which stored on SD card.

Signed-off-by: Pali Rohár <pali@kernel.org>
---
 drivers/mmc/fsl_esdhc_spl.c | 12 ++----------
 1 file changed, 2 insertions(+), 10 deletions(-)

Comments

Jaehoon Chung April 22, 2022, 12:07 p.m. UTC | #1
On 4/3/22 07:17, Pali Rohár wrote:
> In pre-PBL header is stored size of code which BootROM copies from SD card
> to L2/SRAM. This size has upper limit of L2 cache size. In most cases this
> is size of U-Boot SPL or size of L2 cache.
> 
> Therefore this size in pre-PBL header cannot be used for determining size
> of proper U-Boot.
> 
> So always use CONFIG_SYS_MMC_U_BOOT_SIZE for determining size of proper
> U-Boot which stored on SD card.
> > Signed-off-by: Pali Rohár <pali@kernel.org>

Reviewed-by: Jaehoon Chung <jh80.chung@samsung.com>

Best Regards,
Jaehoon Chung

> ---
>  drivers/mmc/fsl_esdhc_spl.c | 12 ++----------
>  1 file changed, 2 insertions(+), 10 deletions(-)
> 
> diff --git a/drivers/mmc/fsl_esdhc_spl.c b/drivers/mmc/fsl_esdhc_spl.c
> index 109f558dcad3..b87597a88e1d 100644
> --- a/drivers/mmc/fsl_esdhc_spl.c
> +++ b/drivers/mmc/fsl_esdhc_spl.c
> @@ -79,7 +79,6 @@ void __noreturn mmc_boot(void)
>  
>  #ifdef CONFIG_FSL_CORENET
>  	offset = CONFIG_SYS_MMC_U_BOOT_OFFS;
> -	code_len = CONFIG_SYS_MMC_U_BOOT_SIZE;
>  #else
>  	blklen = mmc->read_bl_len;
>  	tmp_buf = malloc(blklen);
> @@ -135,18 +134,11 @@ void __noreturn mmc_boot(void)
>  		offset = (offset << 8) + val;
>  	}
>  	offset += CONFIG_SYS_MMC_U_BOOT_OFFS;
> -	/* Get the code size from offset 0x48 */
> -	byte_num = 4;
> -	code_len = 0;
> -	for (i = 0; i < byte_num; i++) {
> -		val = *(tmp_buf + ESDHC_BOOT_IMAGE_SIZE + i);
> -		code_len = (code_len << 8) + val;
> -	}
> -	code_len -= CONFIG_SYS_MMC_U_BOOT_OFFS;
> +#endif
>  	/*
>  	* Load U-Boot image from mmc into RAM
>  	*/
> -#endif
> +	code_len = CONFIG_SYS_MMC_U_BOOT_SIZE;
>  	blk_start = ALIGN(offset, mmc->read_bl_len) / mmc->read_bl_len;
>  	blk_cnt = ALIGN(code_len, mmc->read_bl_len) / mmc->read_bl_len;
>  	err = mmc->block_dev.block_read(&mmc->block_dev, blk_start, blk_cnt,
diff mbox series

Patch

diff --git a/drivers/mmc/fsl_esdhc_spl.c b/drivers/mmc/fsl_esdhc_spl.c
index 109f558dcad3..b87597a88e1d 100644
--- a/drivers/mmc/fsl_esdhc_spl.c
+++ b/drivers/mmc/fsl_esdhc_spl.c
@@ -79,7 +79,6 @@  void __noreturn mmc_boot(void)
 
 #ifdef CONFIG_FSL_CORENET
 	offset = CONFIG_SYS_MMC_U_BOOT_OFFS;
-	code_len = CONFIG_SYS_MMC_U_BOOT_SIZE;
 #else
 	blklen = mmc->read_bl_len;
 	tmp_buf = malloc(blklen);
@@ -135,18 +134,11 @@  void __noreturn mmc_boot(void)
 		offset = (offset << 8) + val;
 	}
 	offset += CONFIG_SYS_MMC_U_BOOT_OFFS;
-	/* Get the code size from offset 0x48 */
-	byte_num = 4;
-	code_len = 0;
-	for (i = 0; i < byte_num; i++) {
-		val = *(tmp_buf + ESDHC_BOOT_IMAGE_SIZE + i);
-		code_len = (code_len << 8) + val;
-	}
-	code_len -= CONFIG_SYS_MMC_U_BOOT_OFFS;
+#endif
 	/*
 	* Load U-Boot image from mmc into RAM
 	*/
-#endif
+	code_len = CONFIG_SYS_MMC_U_BOOT_SIZE;
 	blk_start = ALIGN(offset, mmc->read_bl_len) / mmc->read_bl_len;
 	blk_cnt = ALIGN(code_len, mmc->read_bl_len) / mmc->read_bl_len;
 	err = mmc->block_dev.block_read(&mmc->block_dev, blk_start, blk_cnt,