summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPaul Kocialkowski <contact@paulk.fr>2015-05-22 12:45:35 +0200
committerTom Rini <trini@konsulko.com>2015-05-28 08:18:21 -0400
commit3bc37b6d65c856a90ad7389b7a216f5a83164f83 (patch)
tree6bf4f8530e38303e79870d000437dc00b7a36f1f
parent657fd2d031daabf53c653ab3aa32b88846b3037d (diff)
downloadtalos-obmc-uboot-3bc37b6d65c856a90ad7389b7a216f5a83164f83.tar.gz
talos-obmc-uboot-3bc37b6d65c856a90ad7389b7a216f5a83164f83.zip
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>
-rw-r--r--common/spl/spl_mmc.c33
1 files changed, 19 insertions, 14 deletions
diff --git a/common/spl/spl_mmc.c b/common/spl/spl_mmc.c
index c96345eff2..de495c0dc4 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
OpenPOWER on IntegriCloud