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

Commit 30652aa3 authored by Olof Johansson's avatar Olof Johansson Committed by Chris Ball
Browse files

mmc: sdhci: add quirk for max len ADMA descriptors



Some controllers misparse segment length 0 as being 0, not 65536. Add
a quirk to deal with it.

Signed-off-by: default avatarOlof Johansson <olof@lixom.net>
Reviewed-by: default avatarChris Ball <cjb@laptop.org>
Signed-off-by: default avatarChris Ball <cjb@laptop.org>
parent c288b855
Loading
Loading
Loading
Loading
+7 −3
Original line number Diff line number Diff line
@@ -1949,10 +1949,14 @@ int sdhci_add_host(struct sdhci_host *host)
	 * of bytes. When doing hardware scatter/gather, each entry cannot
	 * be larger than 64 KiB though.
	 */
	if (host->flags & SDHCI_USE_ADMA)
		mmc->max_seg_size = 65536;
	if (host->flags & SDHCI_USE_ADMA) {
		if (host->quirks & SDHCI_QUIRK_BROKEN_ADMA_ZEROLEN_DESC)
			mmc->max_seg_size = 65535;
		else
			mmc->max_seg_size = 65536;
	} else {
		mmc->max_seg_size = mmc->max_req_size;
	}

	/*
	 * Maximum block size. This varies from controller to controller and
+2 −0
Original line number Diff line number Diff line
@@ -83,6 +83,8 @@ struct sdhci_host {
#define SDHCI_QUIRK_MULTIBLOCK_READ_ACMD12		(1<<28)
/* Controller doesn't have HISPD bit field in HI-SPEED SD card */
#define SDHCI_QUIRK_NO_HISPD_BIT			(1<<29)
/* Controller treats ADMA descriptors with length 0000h incorrectly */
#define SDHCI_QUIRK_BROKEN_ADMA_ZEROLEN_DESC		(1<<30)

	int irq;		/* Device IRQ */
	void __iomem *ioaddr;	/* Mapped address */