aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSeungwon Jeon <tgih.jun@samsung.com>2012-09-19 01:58:31 -0400
committerChris Ball <cjb@laptop.org>2012-10-03 10:05:25 -0400
commit897b69e72054a39c1c1d99c8f334ffed6dc99ac4 (patch)
tree0be3853d016576e90f40325cda3e08607a70b7aa
parentf6ad0a481342223b2e7ae9f55b154e14f1391ada (diff)
mmc: Revert "mmc: dw_mmc: Add check for IDMAC configuration"
This reverts commit 94c6cee91 (Add check for IDMAC configuration). Synopsys says that only if internal dmac is not present, optional external dma interface is present. When internal dmac is present, '0' value in DMA_INTERFACE of HCON is reasonable. DMA_INTERFACE indicates external dma interface. And idmac initialization is prohibited now. The commit should be reverted since: the check for IDMAC is not reliable; falling back to PIO would provide awful performance; we wouldn't expect to see instances of this block without DMA support. Signed-off-by: Seungwon Jeon <tgih.jun@samsung.com> Acked-by: Will Newton <will.newton@imgtec.com> Signed-off-by: Chris Ball <cjb@laptop.org>
-rw-r--r--drivers/mmc/host/dw_mmc.c15
1 files changed, 2 insertions, 13 deletions
diff --git a/drivers/mmc/host/dw_mmc.c b/drivers/mmc/host/dw_mmc.c
index 9f8e487bfa97..a23af77de4ce 100644
--- a/drivers/mmc/host/dw_mmc.c
+++ b/drivers/mmc/host/dw_mmc.c
@@ -410,23 +410,11 @@ static void dw_mci_idmac_start_dma(struct dw_mci *host, unsigned int sg_len)
410static int dw_mci_idmac_init(struct dw_mci *host) 410static int dw_mci_idmac_init(struct dw_mci *host)
411{ 411{
412 struct idmac_desc *p; 412 struct idmac_desc *p;
413 int i, dma_support; 413 int i;
414 414
415 /* Number of descriptors in the ring buffer */ 415 /* Number of descriptors in the ring buffer */
416 host->ring_size = PAGE_SIZE / sizeof(struct idmac_desc); 416 host->ring_size = PAGE_SIZE / sizeof(struct idmac_desc);
417 417
418 /* Check if Hardware Configuration Register has support for DMA */
419 dma_support = (mci_readl(host, HCON) >> 16) & 0x3;
420
421 if (!dma_support || dma_support > 2) {
422 dev_err(host->dev,
423 "Host Controller does not support IDMA Tx.\n");
424 host->dma_ops = NULL;
425 return -ENODEV;
426 }
427
428 dev_info(host->dev, "Using internal DMA controller.\n");
429
430 /* Forward link the descriptor list */ 418 /* Forward link the descriptor list */
431 for (i = 0, p = host->sg_cpu; i < host->ring_size - 1; i++, p++) 419 for (i = 0, p = host->sg_cpu; i < host->ring_size - 1; i++, p++)
432 p->des3 = host->sg_dma + (sizeof(struct idmac_desc) * (i + 1)); 420 p->des3 = host->sg_dma + (sizeof(struct idmac_desc) * (i + 1));
@@ -1985,6 +1973,7 @@ static void dw_mci_init_dma(struct dw_mci *host)
1985 /* Determine which DMA interface to use */ 1973 /* Determine which DMA interface to use */
1986#ifdef CONFIG_MMC_DW_IDMAC 1974#ifdef CONFIG_MMC_DW_IDMAC
1987 host->dma_ops = &dw_mci_idmac_ops; 1975 host->dma_ops = &dw_mci_idmac_ops;
1976 dev_info(&host->dev, "Using internal DMA controller.\n");
1988#endif 1977#endif
1989 1978
1990 if (!host->dma_ops) 1979 if (!host->dma_ops)