@@ -417,8 +417,10 @@ int spi_flash_read(uint32_t address, void *data, int len)
417417int spi_flash_write (uint32_t address , const void * data , int len )
418418{
419419 int ret = 0 ;
420+ int remaining = len ;
420421 uint32_t xferSz , page , pages ;
421422 uintptr_t addr ;
423+ uint8_t * ptr = (uint8_t * )data ;
422424
423425#ifdef DEBUG_QSPI
424426 wolfBoot_printf ("QSPI Flash Write: Len %d, %p -> 0x%x\n" ,
@@ -430,13 +432,12 @@ int spi_flash_write(uint32_t address, const void *data, int len)
430432 for (page = 0 ; page < pages ; page ++ ) {
431433 ret = qspi_write_enable ();
432434 if (ret == 0 ) {
433- uint8_t * ptr ;
434- xferSz = len - (page * FLASH_PAGE_SIZE );
435- if (xferSz > FLASH_PAGE_SIZE )
435+ xferSz = (uint32_t )remaining ;
436+ if (xferSz > FLASH_PAGE_SIZE ) {
436437 xferSz = FLASH_PAGE_SIZE ;
438+ }
437439
438440 addr = address + (page * FLASH_PAGE_SIZE );
439- ptr = ((uint8_t * )data + (page * FLASH_PAGE_SIZE ));
440441
441442 /* ------ Write Flash (page at a time) ------ */
442443 ret = qspi_transfer (QSPI_MODE_WRITE , FLASH_WRITE_CMD ,
@@ -459,6 +460,8 @@ int spi_flash_write(uint32_t address, const void *data, int len)
459460 break ;
460461 }
461462 /* write disable is automatic */
463+ remaining -= (int )xferSz ;
464+ ptr += xferSz ;
462465 }
463466 }
464467
0 commit comments