Răsfoiți Sursa

sdhci: Add SDHCI_QUIRK_NO_MULTIBLOCK quirk

Add quirk to show the controller cannot do multi-block IO.

This is mainly for the Samsung SDHCI controller that currently
cannot manage to do multi-block PIO without timing out.

Signed-off-by: Ben Dooks <ben@simtec.co.uk>
Signed-off-by: Pierre Ossman <pierre@ossman.eu>
Ben Dooks 16 ani în urmă
părinte
comite
1388eefd5a
3 a modificat fișierele cu 6 adăugiri și 1 ștergeri
  1. 3 0
      drivers/mmc/host/sdhci-s3c.c
  2. 1 1
      drivers/mmc/host/sdhci.c
  3. 2 0
      drivers/mmc/host/sdhci.h

+ 3 - 0
drivers/mmc/host/sdhci-s3c.c

@@ -329,6 +329,9 @@ static int __devinit sdhci_s3c_probe(struct platform_device *pdev)
 	 * support as well. */
 	host->quirks |= SDHCI_QUIRK_BROKEN_DMA;
 
+	/* PIO currently has problems with multi-block IO */
+	host->quirks |= SDHCI_QUIRK_NO_MULTIBLOCK;
+
 #endif /* CONFIG_MMC_SDHCI_S3C_DMA */
 
 	/* It seems we do not get an DATA transfer complete on non-busy

+ 1 - 1
drivers/mmc/host/sdhci.c

@@ -1834,7 +1834,7 @@ int sdhci_add_host(struct sdhci_host *host)
 	/*
 	 * Maximum block count.
 	 */
-	mmc->max_blk_count = 65535;
+	mmc->max_blk_count = (host->quirks & SDHCI_QUIRK_NO_MULTIBLOCK) ? 1 : 65535;
 
 	/*
 	 * Init tasklets.

+ 2 - 0
drivers/mmc/host/sdhci.h

@@ -226,6 +226,8 @@ struct sdhci_host {
 #define SDHCI_QUIRK_RESTORE_IRQS_AFTER_RESET		(1<<19)
 /* Controller has to be forced to use block size of 2048 bytes */
 #define SDHCI_QUIRK_FORCE_BLK_SZ_2048			(1<<20)
+/* Controller cannot do multi-block transfers */
+#define SDHCI_QUIRK_NO_MULTIBLOCK			(1<<21)
 
 	int			irq;		/* Device IRQ */
 	void __iomem *		ioaddr;		/* Mapped address */