From: Enric Balletbo i Serra <eballe...@iseebcn.com>

Tested with an IGEPv2 board seems that current onenand_spl_load_image 
implementation
doesn't work. This patch fixes this function changing the read loop and reading 
the
onenand blocks from page to page.

Tested with various IGEP based boards with a OneNAND from Numonyx.

Signed-off-by: Enric Balletbo i Serra <eballe...@iseebcn.com>
---
 drivers/mtd/onenand/onenand_spl.c |   14 ++++++--------
 1 file changed, 6 insertions(+), 8 deletions(-)

diff --git a/drivers/mtd/onenand/onenand_spl.c 
b/drivers/mtd/onenand/onenand_spl.c
index 50eaa71..4bec2c2 100644
--- a/drivers/mtd/onenand/onenand_spl.c
+++ b/drivers/mtd/onenand/onenand_spl.c
@@ -112,7 +112,7 @@ static int onenand_spl_read_page(uint32_t block, uint32_t 
page, uint32_t *buf,
 void onenand_spl_load_image(uint32_t offs, uint32_t size, void *dst)
 {
        uint32_t *addr = (uint32_t *)dst;
-       uint32_t total_pages;
+       uint32_t to_page;
        uint32_t block;
        uint32_t page, rpage;
        enum onenand_spl_pagesize pagesize;
@@ -125,22 +125,20 @@ void onenand_spl_load_image(uint32_t offs, uint32_t size, 
void *dst)
         * pulling further unwanted functions into the SPL.
         */
        if (pagesize == 2048) {
-               total_pages = DIV_ROUND_UP(size, 2048);
                page = offs / 2048;
+               to_page = page + DIV_ROUND_UP(size, 2048);
        } else {
-               total_pages = DIV_ROUND_UP(size, 4096);
                page = offs / 4096;
+               to_page = page + DIV_ROUND_UP(size, 4096);
        }
 
-       for (; page <= total_pages; page++) {
+       for (; page <= to_page; page++) {
                block = page / ONENAND_PAGES_PER_BLOCK;
                rpage = page & (ONENAND_PAGES_PER_BLOCK - 1);
                ret = onenand_spl_read_page(block, rpage, addr, pagesize);
-               if (ret) {
-                       total_pages += ONENAND_PAGES_PER_BLOCK;
+               if (ret)
                        page += ONENAND_PAGES_PER_BLOCK - 1;
-               } else {
+               else
                        addr += pagesize / 4;
-               }
        }
 }
-- 
1.7.10.4

_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot

Reply via email to