diff options
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.patch | 38 |
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; |