SPL configurations that read from NAND need a page of RAM as a buffer.
Initially this memory was statically allocated.

Move this to the heap, so it can benefit from initialized DDR.

Signed-off-by: Colin Foster <colin.fos...@in-advantage.com>
---

v2:
    New patch.
    Note: This patch gives an SPDX warning due to the comment that was
    moved.

---
 drivers/mtd/nand/raw/nand_spl_loaders.c | 22 ++++++++++++++--------
 1 file changed, 14 insertions(+), 8 deletions(-)

diff --git a/drivers/mtd/nand/raw/nand_spl_loaders.c 
b/drivers/mtd/nand/raw/nand_spl_loaders.c
index 156b44d835..8f243ce1b6 100644
--- a/drivers/mtd/nand/raw/nand_spl_loaders.c
+++ b/drivers/mtd/nand/raw/nand_spl_loaders.c
@@ -1,3 +1,11 @@
+/*
+ * Temporary storage for non NAND page aligned and non NAND page sized
+ * reads. Note: This does not support runtime detected FLASH yet, but
+ * that should be reasonably easy to fix by making the buffer large
+ * enough :)
+ */
+static u8 *scratch_buf;
+
 int nand_spl_load_image(uint32_t offs, unsigned int size, void *dst)
 {
        unsigned int block, lastblock;
@@ -70,14 +78,6 @@ u32 nand_spl_adjust_offset(u32 sector, u32 offs)
 }
 
 #ifdef CONFIG_SPL_UBI
-/*
- * Temporary storage for non NAND page aligned and non NAND page sized
- * reads. Note: This does not support runtime detected FLASH yet, but
- * that should be reasonably easy to fix by making the buffer large
- * enough :)
- */
-static u8 scratch_buf[CONFIG_SYS_NAND_PAGE_SIZE];
-
 /**
  * nand_spl_read_block - Read data from physical eraseblock into a buffer
  * @block:     Number of the physical eraseblock
@@ -103,6 +103,12 @@ int nand_spl_read_block(int block, int offset, int len, 
void *dst)
 {
        int page, read;
 
+       if (!scratch_buf)
+               scratch_buf = malloc(CONFIG_SYS_NAND_PAGE_SIZE);
+
+       if (!scratch_buf)
+               return -ENOMEM;
+
        /* Calculate the page number */
        page = offset / CONFIG_SYS_NAND_PAGE_SIZE;
 
-- 
2.25.1

Reply via email to