Hi Andrew, On Mar 24, 2014, at 9:40 AM, Andrew Gabbasov wrote:
> Calculation of the timeout value should be based on actual clock value, > written to controller registers. Since mmc->tran_speed is either the > maximum allowed speed, or the preliminary value, that is be not yet > set to registers, the actual timeout, taken by the controller, based > on its clock settings, may be much longer than expected, based on > mmc->tran_speed value. In particular it happens at early initialization > stage, when typical value of mmc->tran_speed is 20MHz or 26MHz, while > actual clock setting, configured in the controller, is 400kHz. > It's more correct to use mmc->clock value for timeout calculation instead. > > Signed-off-by: Andrew Gabbasov <andrew_gabba...@mentor.com> > --- > drivers/mmc/fsl_esdhc.c | 12 ++++++------ > 1 file changed, 6 insertions(+), 6 deletions(-) > > diff --git a/drivers/mmc/fsl_esdhc.c b/drivers/mmc/fsl_esdhc.c > index 7b146a3..f4d3132 100644 > --- a/drivers/mmc/fsl_esdhc.c > +++ b/drivers/mmc/fsl_esdhc.c > @@ -221,16 +221,16 @@ static int esdhc_setup_data(struct mmc *mmc, struct > mmc_data *data) > * 2)Timeout period should be minimum 0.250sec as per SD Card spec > * So, Number of SD Clock cycles for 0.25sec should be minimum > * (SD Clock/sec * 0.25 sec) SD Clock cycles > - * = (mmc->tran_speed * 1/4) SD Clock cycles > + * = (mmc->clock * 1/4) SD Clock cycles > * As 1) >= 2) > - * => (2^(timeout+13)) >= mmc->tran_speed * 1/4 > + * => (2^(timeout+13)) >= mmc->clock * 1/4 > * Taking log2 both the sides > - * => timeout + 13 >= log2(mmc->tran_speed/4) > + * => timeout + 13 >= log2(mmc->clock/4) > * Rounding up to next power of 2 > - * => timeout + 13 = log2(mmc->tran_speed/4) + 1 > - * => timeout + 13 = fls(mmc->tran_speed/4) > + * => timeout + 13 = log2(mmc->clock/4) + 1 > + * => timeout + 13 = fls(mmc->clock/4) > */ > - timeout = fls(mmc->tran_speed/4); > + timeout = fls(mmc->clock/4); > timeout -= 13; > > if (timeout > 14) > -- > 1.7.10.4 Thanks Acked-by: Pantelis Antoniou <pa...@antoniou-consulting.com> _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot