summaryrefslogtreecommitdiffstats
path: root/patches/linux-3.7/0018-mmc-omap_hsmmc-limit-max_segs-with-the-EDMA-DMAC.patch
diff options
context:
space:
mode:
Diffstat (limited to 'patches/linux-3.7/0018-mmc-omap_hsmmc-limit-max_segs-with-the-EDMA-DMAC.patch')
-rw-r--r--patches/linux-3.7/0018-mmc-omap_hsmmc-limit-max_segs-with-the-EDMA-DMAC.patch38
1 files changed, 38 insertions, 0 deletions
diff --git a/patches/linux-3.7/0018-mmc-omap_hsmmc-limit-max_segs-with-the-EDMA-DMAC.patch b/patches/linux-3.7/0018-mmc-omap_hsmmc-limit-max_segs-with-the-EDMA-DMAC.patch
new file mode 100644
index 0000000..cf10fa8
--- /dev/null
+++ b/patches/linux-3.7/0018-mmc-omap_hsmmc-limit-max_segs-with-the-EDMA-DMAC.patch
@@ -0,0 +1,38 @@
+From: Matt Porter <mporter@ti.com>
+Date: Thu, 20 Sep 2012 08:55:41 -0400
+Subject: [PATCH] mmc: omap_hsmmc: limit max_segs with the EDMA DMAC
+
+The EDMA DMAC has a hardware limitation that prevents supporting
+scatter gather lists with any number of segments. Since the EDMA
+DMA Engine driver sets the maximum segments to 16, we do the
+same.
+
+TODO: this will be replaced once the DMA Engine API supports an
+API to query the DMAC's segment size limit.
+
+Signed-off-by: Matt Porter <mporter@ti.com>
+---
+ drivers/mmc/host/omap_hsmmc.c | 10 ++++++++++
+ 1 file changed, 10 insertions(+)
+
+diff --git a/drivers/mmc/host/omap_hsmmc.c b/drivers/mmc/host/omap_hsmmc.c
+index f74141e..4fe62b0 100644
+--- a/drivers/mmc/host/omap_hsmmc.c
++++ b/drivers/mmc/host/omap_hsmmc.c
+@@ -1833,6 +1833,16 @@ static int __devinit omap_hsmmc_probe(struct platform_device *pdev)
+ * as we want. */
+ mmc->max_segs = 1024;
+
++ /* Eventually we should get our max_segs limitation for EDMA by
++ * querying the dmaengine API */
++ if (pdev->dev.of_node) {
++ struct device_node *parent = pdev->dev.of_node->parent;
++ struct device_node *node;
++ node = of_find_node_by_name(parent, "edma");
++ if (node)
++ mmc->max_segs = 16;
++ }
++
+ mmc->max_blk_size = 512; /* Block Length at max can be 1024 */
+ mmc->max_blk_count = 0xFFFF; /* No. of Blocks is 16 bits */
+ mmc->max_req_size = mmc->max_blk_size * mmc->max_blk_count;