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: Olof Johansson <olof@lixom.net> Reviewed-by: Chris Ball <cjb@laptop.org> Signed-off-by: Chris Ball <cjb@laptop.org>
This commit is contained in:
parent
c288b85554
commit
30652aa36b
|
@ -1949,10 +1949,14 @@ int sdhci_add_host(struct sdhci_host *host)
|
||||||
* of bytes. When doing hardware scatter/gather, each entry cannot
|
* of bytes. When doing hardware scatter/gather, each entry cannot
|
||||||
* be larger than 64 KiB though.
|
* be larger than 64 KiB though.
|
||||||
*/
|
*/
|
||||||
if (host->flags & SDHCI_USE_ADMA)
|
if (host->flags & SDHCI_USE_ADMA) {
|
||||||
mmc->max_seg_size = 65536;
|
if (host->quirks & SDHCI_QUIRK_BROKEN_ADMA_ZEROLEN_DESC)
|
||||||
|
mmc->max_seg_size = 65535;
|
||||||
else
|
else
|
||||||
|
mmc->max_seg_size = 65536;
|
||||||
|
} else {
|
||||||
mmc->max_seg_size = mmc->max_req_size;
|
mmc->max_seg_size = mmc->max_req_size;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Maximum block size. This varies from controller to controller and
|
* Maximum block size. This varies from controller to controller and
|
||||||
|
|
|
@ -83,6 +83,8 @@ struct sdhci_host {
|
||||||
#define SDHCI_QUIRK_MULTIBLOCK_READ_ACMD12 (1<<28)
|
#define SDHCI_QUIRK_MULTIBLOCK_READ_ACMD12 (1<<28)
|
||||||
/* Controller doesn't have HISPD bit field in HI-SPEED SD card */
|
/* Controller doesn't have HISPD bit field in HI-SPEED SD card */
|
||||||
#define SDHCI_QUIRK_NO_HISPD_BIT (1<<29)
|
#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 */
|
int irq; /* Device IRQ */
|
||||||
void __iomem *ioaddr; /* Mapped address */
|
void __iomem *ioaddr; /* Mapped address */
|
||||||
|
|
Loading…
Reference in a new issue