diff options
author | Paul Kocialkowski <contact@paulk.fr> | 2015-05-22 10:45:35 (GMT) |
---|---|---|
committer | Tom Rini <trini@konsulko.com> | 2015-05-28 12:18:21 (GMT) |
commit | 3bc37b6d65c856a90ad7389b7a216f5a83164f83 (patch) | |
tree | 6bf4f8530e38303e79870d000437dc00b7a36f1f /common | |
parent | 657fd2d031daabf53c653ab3aa32b88846b3037d (diff) | |
download | u-boot-3bc37b6d65c856a90ad7389b7a216f5a83164f83.tar.xz |
spl: spl_mmc: Error and count distinction
This introduces a distinction between return codes that are read bytes counts
and errors. Read bytes counts are erroneous when null (no data was read) while
errors are erroneous when non-null.
Signed-off-by: Paul Kocialkowski <contact@paulk.fr>
Tested-by: Tim Harvey <tharvey@gateworks.com>
Diffstat (limited to 'common')
-rw-r--r-- | common/spl/spl_mmc.c | 33 |
1 files changed, 19 insertions, 14 deletions
diff --git a/common/spl/spl_mmc.c b/common/spl/spl_mmc.c index c96345e..de495c0 100644 --- a/common/spl/spl_mmc.c +++ b/common/spl/spl_mmc.c @@ -17,7 +17,7 @@ DECLARE_GLOBAL_DATA_PTR; static int mmc_load_image_raw_sector(struct mmc *mmc, unsigned long sector) { - unsigned long err; + unsigned long count; u32 image_size_sectors; struct image_header *header; @@ -25,8 +25,8 @@ static int mmc_load_image_raw_sector(struct mmc *mmc, unsigned long sector) sizeof(struct image_header)); /* read image header to find the image size & load address */ - err = mmc->block_dev.block_read(0, sector, 1, header); - if (err == 0) + count = mmc->block_dev.block_read(0, sector, 1, header); + if (count == 0) goto end; if (image_get_magic(header) != IH_MAGIC) @@ -39,24 +39,29 @@ static int mmc_load_image_raw_sector(struct mmc *mmc, unsigned long sector) mmc->read_bl_len; /* Read the header too to avoid extra memcpy */ - err = mmc->block_dev.block_read(0, sector, image_size_sectors, - (void *)spl_image.load_addr); + count = mmc->block_dev.block_read(0, sector, image_size_sectors, + (void *) spl_image.load_addr); end: #ifdef CONFIG_SPL_LIBCOMMON_SUPPORT - if (err == 0) + if (count == 0) printf("spl: mmc block read error\n"); #endif - return (err == 0); + if (count == 0) + return -1; + + return 0; } #ifdef CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_PARTITION static int mmc_load_image_raw_partition(struct mmc *mmc, int partition) { disk_partition_t info; + int err; - if (get_partition_info(&mmc->block_dev, partition, &info)) { + err = get_partition_info(&mmc->block_dev, partition, &info); + if (err) { #ifdef CONFIG_SPL_LIBCOMMON_SUPPORT printf("spl: partition error\n"); #endif @@ -70,13 +75,13 @@ static int mmc_load_image_raw_partition(struct mmc *mmc, int partition) #ifdef CONFIG_SPL_OS_BOOT static int mmc_load_image_raw_os(struct mmc *mmc) { - unsigned long err; + unsigned long count; - err = mmc->block_dev.block_read(0, - CONFIG_SYS_MMCSD_RAW_MODE_ARGS_SECTOR, - CONFIG_SYS_MMCSD_RAW_MODE_ARGS_SECTORS, - (void *)CONFIG_SYS_SPL_ARGS_ADDR); - if (err == 0) { + count = mmc->block_dev.block_read(0, + CONFIG_SYS_MMCSD_RAW_MODE_ARGS_SECTOR, + CONFIG_SYS_MMCSD_RAW_MODE_ARGS_SECTORS, + (void *) CONFIG_SYS_SPL_ARGS_ADDR); + if (count == 0) { #ifdef CONFIG_SPL_LIBCOMMON_SUPPORT printf("spl: mmc block read error\n"); #endif |