imx233: fix partition window computation

The code was broken in two ways:
- it called storage_read_sectors with a wrong drive number
- calling storage_read_sectors too early at boot time will fail because
  we are in the init function, so the drive is not yet registered.
To fix this, use a user provided read callback instead of storage read
functions.

Change-Id: I5ab79d48391fae619d5f8ae09c3d499fc43854c8
This commit is contained in:
Amaury Pouly 2013-10-22 15:55:28 +02:00
parent 51ed6da0b1
commit 4aa32fb8f4
3 changed files with 24 additions and 14 deletions

View file

@ -672,6 +672,12 @@ static int transfer_sectors(int drive, unsigned long start, int count, void *buf
return ret;
}
// user specificies the sdmmc drive
static int part_read_fn(intptr_t user, unsigned long start, int count, void* buf)
{
return transfer_sectors(user, start, count, buf, true);
}
static int init_drive(int drive)
{
int ret;
@ -693,8 +699,8 @@ static int init_drive(int drive)
{
/* NOTE: at this point the window shows the whole disk so raw disk
* accesses can be made to lookup partitions */
ret = imx233_partitions_compute_window(IF_MD(drive,) IMX233_PART_USER,
&window_start[drive], &window_end[drive]);
ret = imx233_partitions_compute_window(IF_MD_DRV(drive), part_read_fn,
IMX233_PART_USER, &window_start[drive], &window_end[drive]);
if(ret)
panicf("cannot compute partitions window: %d", ret);
SDMMC_INFO(drive).numblocks = window_end[drive] - window_start[drive];