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:
parent
a7292871a7
commit
0f8e851e89
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user