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/partitions-imx233.h | |
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/partitions-imx233.h')
-rw-r--r-- | firmware/target/arm/imx233/partitions-imx233.h | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/firmware/target/arm/imx233/partitions-imx233.h b/firmware/target/arm/imx233/partitions-imx233.h index b7ed251dee..80936ad865 100644 --- a/firmware/target/arm/imx233/partitions-imx233.h +++ b/firmware/target/arm/imx233/partitions-imx233.h | |||
@@ -40,11 +40,15 @@ enum imx233_part_t | |||
40 | #endif | 40 | #endif |
41 | }; | 41 | }; |
42 | 42 | ||
43 | /** The computation function can be called very early in the boot, at which point | ||
44 | * usual storage read/write function may not be available. To workaround this | ||
45 | * issue, one must provide a read function. */ | ||
46 | typedef int (*part_read_fn_t)(intptr_t user, unsigned long start, int count, void* buf); | ||
43 | /* Enable/Disable window computations for internal storage following the | 47 | /* Enable/Disable window computations for internal storage following the |
44 | * Freescale convention */ | 48 | * Freescale convention */ |
45 | void imx233_partitions_enable_window(bool enable); | 49 | void imx233_partitions_enable_window(bool enable); |
46 | bool imx233_partitions_is_window_enabled(void); | 50 | bool imx233_partitions_is_window_enabled(void); |
47 | int imx233_partitions_compute_window(IF_MD(int drive,) enum imx233_part_t part, | 51 | int imx233_partitions_compute_window(intptr_t user, part_read_fn_t read_fn, |
48 | unsigned *start, unsigned *end); | 52 | enum imx233_part_t part, unsigned *start, unsigned *end); |
49 | 53 | ||
50 | #endif /* __PARTITIONS_IMX233__ */ \ No newline at end of file | 54 | #endif /* __PARTITIONS_IMX233__ */ \ No newline at end of file |