mirror of
https://github.com/u-boot/u-boot.git
synced 2024-11-28 07:03:31 +08:00
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>
This commit is contained in:
parent
657fd2d031
commit
3bc37b6d65
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user