aboutsummaryrefslogtreecommitdiff
path: root/drivers/mtd/nand/raw/nand_spl_loaders.c
diff options
context:
space:
mode:
authorSean Anderson <seanga2@gmail.com>2023-11-04 16:37:42 -0400
committerTom Rini <trini@konsulko.com>2023-11-16 12:43:48 -0500
commitcdc0434ac06ad5cc0cb8361dcd5d4ab72a8db0c7 (patch)
tree86adfd4598c6e21b39f783ee405abbf7d6f8886b /drivers/mtd/nand/raw/nand_spl_loaders.c
parent601b8901e058e524a57c7590020dc68193c2f9aa (diff)
nand: spl_loaders: Only read enough pages to load the image
All other implementations of nand_spl_load_image only read as many pages as are necessary to load the image. However, nand_spl_loaders.c loads the full block. Align it with other load functions so that it is easier to determine how large of a load buffer we need. Signed-off-by: Sean Anderson <seanga2@gmail.com> Reviewed-by: Michael Trimarchi <michael@amarulasolutions.com>
Diffstat (limited to 'drivers/mtd/nand/raw/nand_spl_loaders.c')
-rw-r--r--drivers/mtd/nand/raw/nand_spl_loaders.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/drivers/mtd/nand/raw/nand_spl_loaders.c b/drivers/mtd/nand/raw/nand_spl_loaders.c
index 35d6b1d6c0..db4213ea3d 100644
--- a/drivers/mtd/nand/raw/nand_spl_loaders.c
+++ b/drivers/mtd/nand/raw/nand_spl_loaders.c
@@ -12,8 +12,11 @@ int nand_spl_load_image(uint32_t offs, unsigned int size, void *dst)
while (block <= lastblock) {
if (!nand_is_bad_block(block)) {
/* Skip bad blocks */
- while (page < SYS_NAND_BLOCK_PAGES) {
+ while (size && page < SYS_NAND_BLOCK_PAGES) {
nand_read_page(block, page, dst);
+
+ size -= min(size, CONFIG_SYS_NAND_PAGE_SIZE -
+ page_offset);
/*
* When offs is not aligned to page address the
* extra offset is copied to dst as well. Copy