diff options
| author | Diane Bruce <db@FreeBSD.org> | 2016-10-18 14:23:50 +0000 |
|---|---|---|
| committer | Diane Bruce <db@FreeBSD.org> | 2016-10-18 14:23:50 +0000 |
| commit | 38c39dd8da26df3cd84cc043d22e8e2d73d6fbd8 (patch) | |
| tree | 028a336343266b8728e83f43e75f0d2c2799b4da /sysutils/u-boot-rpi3/files/patch-drivers_mmc_mmc.c | |
| parent | net/quagga: Update 1.0.20160315 -> 1.0.20161017 (diff) | |
Initial u-boot port for the Raspberry Pi 3
Diffstat (limited to 'sysutils/u-boot-rpi3/files/patch-drivers_mmc_mmc.c')
| -rw-r--r-- | sysutils/u-boot-rpi3/files/patch-drivers_mmc_mmc.c | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/sysutils/u-boot-rpi3/files/patch-drivers_mmc_mmc.c b/sysutils/u-boot-rpi3/files/patch-drivers_mmc_mmc.c new file mode 100644 index 000000000000..268db9940a0d --- /dev/null +++ b/sysutils/u-boot-rpi3/files/patch-drivers_mmc_mmc.c @@ -0,0 +1,80 @@ +--- drivers/mmc/mmc.c.orig 2015-04-13 14:53:03 UTC ++++ drivers/mmc/mmc.c +@@ -20,6 +20,7 @@ + + static struct list_head mmc_devices; + static int cur_dev_num = -1; ++static int mmc_error_print_max = -1; + + __weak int board_mmc_getwp(struct mmc *mmc) + { +@@ -1560,9 +1561,14 @@ void mmc_destroy(struct mmc *mmc) + block_dev_desc_t *mmc_get_dev(int dev) + { + struct mmc *mmc = find_mmc_device(dev); +- if (!mmc || mmc_init(mmc)) ++ if (!mmc) + return NULL; + ++ /* If mmc_init fails, mmc->block_dev will be of type ++ * DEV_TYPE_UNKNOWN with blksz and lba set to zero. ++ */ ++ mmc_init(mmc); ++ + return &mmc->block_dev; + } + #endif +@@ -1594,7 +1600,7 @@ int mmc_start_init(struct mmc *mmc) + err = mmc->cfg->ops->init(mmc); + + if (err) +- return err; ++ goto done; + + mmc->ddr_mode = 0; + mmc_set_bus_width(mmc, 1); +@@ -1604,7 +1610,7 @@ int mmc_start_init(struct mmc *mmc) + err = mmc_go_idle(mmc); + + if (err) +- return err; ++ goto done; + + /* The internal partition reset to user partition(0) at every CMD0*/ + mmc->part_num = 0; +@@ -1621,15 +1627,33 @@ int mmc_start_init(struct mmc *mmc) + + if (err && err != IN_PROGRESS) { + #if !defined(CONFIG_SPL_BUILD) || defined(CONFIG_SPL_LIBCOMMON_SUPPORT) +- printf("Card did not respond to voltage select!\n"); ++ if (mmc_error_print_max < 4) { ++ mmc_error_print_max++; ++ printf("Card did not respond to voltage select!\n"); ++ ++ if (mmc_error_print_max == 4) { ++ printf("Discarding further error messages\n"); ++ } ++ } + #endif +- return UNUSABLE_ERR; ++// return UNUSABLE_ERR; ++ goto done; + } + } + + if (err == IN_PROGRESS) + mmc->init_in_progress = 1; + ++done: ++ if (err) { ++ mmc->has_init = 0; ++ mmc->block_dev.type = DEV_TYPE_UNKNOWN; ++ mmc->block_dev.blksz = 0; ++ mmc->block_dev.lba = 0; ++ } else { ++ mmc->has_init = 1; ++ } ++ + return err; + } + |
