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>
master
Paul Kocialkowski 10 years ago committed by Tom Rini
parent 657fd2d031
commit 3bc37b6d65
  1. 33
      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) static int mmc_load_image_raw_sector(struct mmc *mmc, unsigned long sector)
{ {
unsigned long err; unsigned long count;
u32 image_size_sectors; u32 image_size_sectors;
struct image_header *header; 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)); sizeof(struct image_header));
/* read image header to find the image size & load address */ /* read image header to find the image size & load address */
err = mmc->block_dev.block_read(0, sector, 1, header); count = mmc->block_dev.block_read(0, sector, 1, header);
if (err == 0) if (count == 0)
goto end; goto end;
if (image_get_magic(header) != IH_MAGIC) 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; mmc->read_bl_len;
/* Read the header too to avoid extra memcpy */ /* Read the header too to avoid extra memcpy */
err = mmc->block_dev.block_read(0, sector, image_size_sectors, count = mmc->block_dev.block_read(0, sector, image_size_sectors,
(void *)spl_image.load_addr); (void *) spl_image.load_addr);
end: end:
#ifdef CONFIG_SPL_LIBCOMMON_SUPPORT #ifdef CONFIG_SPL_LIBCOMMON_SUPPORT
if (err == 0) if (count == 0)
printf("spl: mmc block read error\n"); printf("spl: mmc block read error\n");
#endif #endif
return (err == 0); if (count == 0)
return -1;
return 0;
} }
#ifdef CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_PARTITION #ifdef CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_PARTITION
static int mmc_load_image_raw_partition(struct mmc *mmc, int partition) static int mmc_load_image_raw_partition(struct mmc *mmc, int partition)
{ {
disk_partition_t info; 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 #ifdef CONFIG_SPL_LIBCOMMON_SUPPORT
printf("spl: partition error\n"); printf("spl: partition error\n");
#endif #endif
@ -70,13 +75,13 @@ static int mmc_load_image_raw_partition(struct mmc *mmc, int partition)
#ifdef CONFIG_SPL_OS_BOOT #ifdef CONFIG_SPL_OS_BOOT
static int mmc_load_image_raw_os(struct mmc *mmc) static int mmc_load_image_raw_os(struct mmc *mmc)
{ {
unsigned long err; unsigned long count;
err = mmc->block_dev.block_read(0, count = mmc->block_dev.block_read(0,
CONFIG_SYS_MMCSD_RAW_MODE_ARGS_SECTOR, CONFIG_SYS_MMCSD_RAW_MODE_ARGS_SECTOR,
CONFIG_SYS_MMCSD_RAW_MODE_ARGS_SECTORS, CONFIG_SYS_MMCSD_RAW_MODE_ARGS_SECTORS,
(void *)CONFIG_SYS_SPL_ARGS_ADDR); (void *) CONFIG_SYS_SPL_ARGS_ADDR);
if (err == 0) { if (count == 0) {
#ifdef CONFIG_SPL_LIBCOMMON_SUPPORT #ifdef CONFIG_SPL_LIBCOMMON_SUPPORT
printf("spl: mmc block read error\n"); printf("spl: mmc block read error\n");
#endif #endif

Loading…
Cancel
Save