path: root/firmware/target/arm/imx233/partitions-imx233.h
diff options
authorAmaury Pouly <>2013-10-22 15:55:28 +0200
committerAmaury Pouly <>2013-10-22 15:55:28 +0200
commit4aa32fb8f4b2921cca6e17716d7ad8a7a30f192a (patch)
treebfe0747973862191374cd44d7ffd8e9217264388 /firmware/target/arm/imx233/partitions-imx233.h
parent51ed6da0b1a79b86e3e41eed3b6671eadb0081a6 (diff)
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')
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
+/** The computation function can be called very early in the boot, at which point
+ * usual storage read/write function may not be available. To workaround this
+ * issue, one must provide a read function. */
+typedef int (*part_read_fn_t)(intptr_t user, unsigned long start, int count, void* buf);
/* Enable/Disable window computations for internal storage following the
* Freescale convention */
void imx233_partitions_enable_window(bool enable);
bool imx233_partitions_is_window_enabled(void);
-int imx233_partitions_compute_window(IF_MD(int drive,) enum imx233_part_t part,
- unsigned *start, unsigned *end);
+int imx233_partitions_compute_window(intptr_t user, part_read_fn_t read_fn,
+ enum imx233_part_t part, unsigned *start, unsigned *end);
#endif /* __PARTITIONS_IMX233__ */ \ No newline at end of file