spl: spl_mmc: Error and count distinction
authorPaul Kocialkowski <contact@paulk.fr>
Fri, 22 May 2015 10:45:35 +0000 (12:45 +0200)
committerTom Rini <trini@konsulko.com>
Thu, 28 May 2015 12:18:21 +0000 (08:18 -0400)
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>
common/spl/spl_mmc.c

index c96345eff2dc0cf9ca85c6bb50b7494e614b43db..de495c0dc4895ff3341ebcbb3d1a23f1a5edf5f1 100644 (file)
@@ -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