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.c | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) (limited to 'firmware/target/arm/imx233/partitions-imx233.c') diff --git a/firmware/target/arm/imx233/partitions-imx233.c b/firmware/target/arm/imx233/partitions-imx233.c index ebc7b9a6e6..508d6f0d66 100644 --- a/firmware/target/arm/imx233/partitions-imx233.c +++ b/firmware/target/arm/imx233/partitions-imx233.c @@ -71,11 +71,11 @@ static const char *creative_part_name(enum imx233_part_t part) } } -static int compute_window_creative(IF_MD(int drive,) enum imx233_part_t part, - unsigned *start, unsigned *end) +static int compute_window_creative(intptr_t user, part_read_fn_t read_fn, + enum imx233_part_t part, unsigned *start, unsigned *end) { uint8_t mblk[512]; - int ret = storage_read_sectors(IF_MD(drive,) MBLK_ADDR / 512, 1, mblk); + int ret = read_fn(user, MBLK_ADDR / 512, 1, mblk); if(ret < 0) return ret; struct mblk_header_t *hdr = (void *)mblk; @@ -99,11 +99,11 @@ static int compute_window_creative(IF_MD(int drive,) enum imx233_part_t part, #endif /* #(IMX233_PARTITIONS & IMX233_CREATIVE) */ #if (IMX233_PARTITIONS & IMX233_FREESCALE) -static int compute_window_freescale(IF_MD(int drive,) enum imx233_part_t part, - unsigned *start, unsigned *end) +static int compute_window_freescale(intptr_t user, part_read_fn_t read_fn, + enum imx233_part_t part, unsigned *start, unsigned *end) { uint8_t mbr[512]; - int ret = storage_read_sectors(IF_MD(drive,) 0, 1, mbr); + int ret = read_fn(user, 0, 1, mbr); if(ret < 0) return ret; /** @@ -161,17 +161,17 @@ static int compute_window_freescale(IF_MD(int drive,) enum imx233_part_t part, } #endif /* (IMX233_PARTITIONS & IMX233_FREESCALE) */ -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) { int ret = -1; #if (IMX233_PARTITIONS & IMX233_CREATIVE) - ret = compute_window_creative(IF_MD(drive,) part, start, end); + ret = compute_window_creative(user, read_fn, part, start, end); if(ret >= 0) return ret; #endif #if (IMX233_PARTITIONS & IMX233_FREESCALE) - ret = compute_window_freescale(IF_MD(drive,) part, start, end); + ret = compute_window_freescale(user, read_fn, part, start, end); if(ret >= 0) return ret; #endif -- cgit v1.2.3