From 4aa32fb8f4b2921cca6e17716d7ad8a7a30f192a Mon Sep 17 00:00:00 2001 From: Amaury Pouly Date: Tue, 22 Oct 2013 15:55:28 +0200 Subject: 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 --- firmware/target/arm/imx233/partitions-imx233.h | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) (limited to 'firmware/target/arm/imx233/partitions-imx233.h') 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 #endif }; +/** 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 -- cgit v1.2.3