diff options
author | Amaury Pouly <amaury.pouly@gmail.com> | 2013-10-22 15:55:28 +0200 |
---|---|---|
committer | Amaury Pouly <amaury.pouly@gmail.com> | 2013-10-22 15:55:28 +0200 |
commit | 4aa32fb8f4b2921cca6e17716d7ad8a7a30f192a (patch) | |
tree | bfe0747973862191374cd44d7ffd8e9217264388 /firmware/target/arm/imx233/sdmmc-imx233.c | |
parent | 51ed6da0b1a79b86e3e41eed3b6671eadb0081a6 (diff) | |
download | rockbox-4aa32fb8f4b2921cca6e17716d7ad8a7a30f192a.tar.gz rockbox-4aa32fb8f4b2921cca6e17716d7ad8a7a30f192a.zip |
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
Diffstat (limited to 'firmware/target/arm/imx233/sdmmc-imx233.c')
-rw-r--r-- | firmware/target/arm/imx233/sdmmc-imx233.c | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/firmware/target/arm/imx233/sdmmc-imx233.c b/firmware/target/arm/imx233/sdmmc-imx233.c index cff801f6b9..24bf69e332 100644 --- a/firmware/target/arm/imx233/sdmmc-imx233.c +++ b/firmware/target/arm/imx233/sdmmc-imx233.c | |||
@@ -672,6 +672,12 @@ static int transfer_sectors(int drive, unsigned long start, int count, void *buf | |||
672 | return ret; | 672 | return ret; |
673 | } | 673 | } |
674 | 674 | ||
675 | // user specificies the sdmmc drive | ||
676 | static int part_read_fn(intptr_t user, unsigned long start, int count, void* buf) | ||
677 | { | ||
678 | return transfer_sectors(user, start, count, buf, true); | ||
679 | } | ||
680 | |||
675 | static int init_drive(int drive) | 681 | static int init_drive(int drive) |
676 | { | 682 | { |
677 | int ret; | 683 | int ret; |
@@ -693,8 +699,8 @@ static int init_drive(int drive) | |||
693 | { | 699 | { |
694 | /* NOTE: at this point the window shows the whole disk so raw disk | 700 | /* NOTE: at this point the window shows the whole disk so raw disk |
695 | * accesses can be made to lookup partitions */ | 701 | * accesses can be made to lookup partitions */ |
696 | ret = imx233_partitions_compute_window(IF_MD(drive,) IMX233_PART_USER, | 702 | ret = imx233_partitions_compute_window(IF_MD_DRV(drive), part_read_fn, |
697 | &window_start[drive], &window_end[drive]); | 703 | IMX233_PART_USER, &window_start[drive], &window_end[drive]); |
698 | if(ret) | 704 | if(ret) |
699 | panicf("cannot compute partitions window: %d", ret); | 705 | panicf("cannot compute partitions window: %d", ret); |
700 | SDMMC_INFO(drive).numblocks = window_end[drive] - window_start[drive]; | 706 | SDMMC_INFO(drive).numblocks = window_end[drive] - window_start[drive]; |