CFI: increase performance of function find_sector()

Tested on TQM5200S-BD with Samsung K8P2815UQB

Signed-off-by: Jens Gehrlein <sew_s@tqs.de>
Signed-off-by: Stefan Roese <sr@denx.de>
This commit is contained in:
Jens Gehrlein 2008-12-16 17:25:55 +01:00 committed by Stefan Roese
parent a7292871a7
commit 0f8e851e89

View File

@ -774,17 +774,26 @@ static void flash_add_byte (flash_info_t * info, cfiword_t * cword, uchar c)
} }
} }
/* loop through the sectors from the highest address when the passed /*
* address is greater or equal to the sector address we have a match * Loop through the sector table starting from the previously found sector.
* Searches forwards or backwards, dependent on the passed address.
*/ */
static flash_sect_t find_sector (flash_info_t * info, ulong addr) static flash_sect_t find_sector (flash_info_t * info, ulong addr)
{ {
flash_sect_t sector; static flash_sect_t saved_sector = 0; /* previously found sector */
flash_sect_t sector = saved_sector;
for (sector = info->sector_count - 1; sector >= 0; sector--) { while ((info->start[sector] < addr)
if (addr >= info->start[sector]) && (sector < info->sector_count - 1))
break; sector++;
} while ((info->start[sector] > addr) && (sector > 0))
/*
* also decrements the sector in case of an overshot
* in the first loop
*/
sector--;
saved_sector = sector;
return sector; return sector;
} }