Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f5a106d9 authored by Linus Walleij's avatar Linus Walleij Committed by Russell King
Browse files

ARM: 6642/1: mmci: calculate remaining bytes at error correctly



The MMCIDATACNT register contain the number of byte left at error
not the number of words, so loose the << 2 thing. Further if CRC
fails on the first block, we may end up with a negative number
of transferred bytes which is not good, and the formula was in
wrong order.

Signed-off-by: default avatarLinus Walleij <linus.walleij@stericsson.com>
Signed-off-by: default avatarRussell King <rmk+kernel@arm.linux.org.uk>
parent bffb276f
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -283,13 +283,13 @@ mmci_data_irq(struct mmci_host *host, struct mmc_data *data,
		u32 remain, success;

		/* Calculate how far we are into the transfer */
		remain = readl(host->base + MMCIDATACNT) << 2;
		remain = readl(host->base + MMCIDATACNT);
		success = data->blksz * data->blocks - remain;

		dev_dbg(mmc_dev(host->mmc), "MCI ERROR IRQ (status %08x)\n", status);
		if (status & MCI_DATACRCFAIL) {
			/* Last block was not successful */
			host->data_xfered = ((success / data->blksz) - 1 * data->blksz);
			host->data_xfered = ((success - 1) / data->blksz) * data->blksz;
			data->error = -EILSEQ;
		} else if (status & MCI_DATATIMEOUT) {
			host->data_xfered = success;