Commit e278ddcd7fb6550b58030988467ef4b48d51bed8

Authored by Prabhakar Kushwaha
Committed by York Sun
1 parent 5abed9c546

driver/mtd/spi:Read 8KB data chunk during u-boot load in SPL

SPI driver perform its operation(read/write) on 64KB buffer chunk for data
greater than 64KB. This buffer chunk is allocated from system heap.

During SPL boot, 768KB of data is read from SPI flash.
Here, heap size may not be sufficient enough to full-fill 64KB buffer
requirement of SPI driver. So break down u-boot read operation at 8KB of chunk.

Also, fix a warning i.e. "unused variable buf" during CONFIG_FSL_CORENET

Signed-off-by: Prabhakar Kushwaha <prabhakar@freescale.com>
Reviewed-by: York Sun <yorksun@freescale.com>

Showing 1 changed file with 12 additions and 3 deletions Side-by-side Diff

drivers/mtd/spi/fsl_espi_spl.c
... ... @@ -20,8 +20,10 @@
20 20 void spi_boot(void)
21 21 {
22 22 void (*uboot)(void) __noreturn;
23   - u32 offset, code_len;
  23 + u32 offset, code_len, copy_len = 0;
  24 +#ifndef CONFIG_FSL_CORENET
24 25 unsigned char *buf = NULL;
  26 +#endif
25 27 struct spi_flash *flash;
26 28  
27 29 flash = spi_flash_probe(CONFIG_ENV_SPI_BUS, CONFIG_ENV_SPI_CS,
... ... @@ -56,8 +58,15 @@
56 58 code_len = code_len - CONFIG_SPL_MAX_SIZE;
57 59 #endif
58 60 /* copy code to DDR */
59   - spi_flash_read(flash, offset, code_len,
60   - (void *)CONFIG_SYS_SPI_FLASH_U_BOOT_DST);
  61 + printf("Loading second stage boot loader ");
  62 + while (copy_len <= code_len) {
  63 + spi_flash_read(flash, offset + copy_len, 0x2000,
  64 + (void *)(CONFIG_SYS_SPI_FLASH_U_BOOT_DST
  65 + + copy_len));
  66 + copy_len = copy_len + 0x2000;
  67 + putc('.');
  68 + }
  69 +
61 70 /*
62 71 * Jump to U-Boot image
63 72 */