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

Commit 393e5e24 authored by Ulf Hansson's avatar Ulf Hansson Committed by Russell King
Browse files

ARM: 7230/1: mmc: mmci: Fix PIO read for small SDIO packets



Corrects a bug in MMCI host driver which silently causes
small reads (< 4 bytes as only used in SDIO) from PL-18X to fail.

Signed-off-by: default avatarStefan Nilsson XK <stefan.xk.nilsson@stericsson.com>
Signed-off-by: default avatarUlf Hansson <ulf.hansson@stericsson.com>
Signed-off-by: default avatarFredrik Soderstedt <fredrik.soderstedt@stericsson.com>
Signed-off-by: default avatarRussell King <rmk+kernel@arm.linux.org.uk>
parent 7258db7e
Loading
Loading
Loading
Loading
+18 −1
Original line number Diff line number Diff line
@@ -794,7 +794,24 @@ static int mmci_pio_read(struct mmci_host *host, char *buffer, unsigned int rema
		if (count <= 0)
			break;

		/*
		 * SDIO especially may want to send something that is
		 * not divisible by 4 (as opposed to card sectors
		 * etc). Therefore make sure to always read the last bytes
		 * while only doing full 32-bit reads towards the FIFO.
		 */
		if (unlikely(count & 0x3)) {
			if (count < 4) {
				unsigned char buf[4];
				readsl(base + MMCIFIFO, buf, 1);
				memcpy(ptr, buf, count);
			} else {
				readsl(base + MMCIFIFO, ptr, count >> 2);
				count &= ~0x3;
			}
		} else {
			readsl(base + MMCIFIFO, ptr, count >> 2);
		}

		ptr += count;
		remain -= count;