Message ID | 1378839171-14455-1-git-send-email-joelf@ti.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Wednesday 11 September 2013 12:22 AM, Joel Fernandes wrote: > HWMOD removal for MMC is breaking edma_start as the events are being manually > triggered due to unused channel list not being clear. > > This patch fixes the issue, by reading the "dmas" property from the DT node if > it exists and clearing the bits in the unused channel list. For this purpose > we use the of_* helpers to parse the arguments in the dmas phandle list. > > Reviewed-by: Sekhar Nori <nsekhar@ti.com> > Reported-by: Balaji T K <balajitk@ti.com> > Cc: Pantel Antoniou <panto@antoniou-consulting.com> > Signed-off-by: Joel Fernandes <joelf@ti.com> > --- > This patch is a repost of v2 with minor change of return value. Is this patch meant for merging? If yes, I see no resolution of the comments given in this thread: https://lkml.org/lkml/2013/7/30/9 It is better to send one version with all comments fixed. Helps avoid confusion. Thanks, Sekhar -- To unsubscribe from this list: send the line "unsubscribe linux-mmc" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/arch/arm/common/edma.c b/arch/arm/common/edma.c index 117f955..88ea067 100644 --- a/arch/arm/common/edma.c +++ b/arch/arm/common/edma.c @@ -560,14 +560,30 @@ static int reserve_contiguous_slots(int ctlr, unsigned int id, static int prepare_unused_channel_list(struct device *dev, void *data) { struct platform_device *pdev = to_platform_device(dev); - int i, ctlr; + int i = 0, ctlr; + u32 dma_chan; + const __be32 *dma_chan_p; + struct property *prop; + + if (dev->of_node) { + of_property_for_each_u32(dev->of_node, "dmas", prop, + dma_chan_p, dma_chan) { + if (i++ & 1) { + ctlr = EDMA_CTLR(dma_chan); + clear_bit(EDMA_CHAN_SLOT(dma_chan), + edma_cc[ctlr]->edma_unused); + } + } + return 0; + } - for (i = 0; i < pdev->num_resources; i++) { + /* For non-OF case */ + for (; i < pdev->num_resources; i++) { if ((pdev->resource[i].flags & IORESOURCE_DMA) && (int)pdev->resource[i].start >= 0) { ctlr = EDMA_CTLR(pdev->resource[i].start); clear_bit(EDMA_CHAN_SLOT(pdev->resource[i].start), - edma_cc[ctlr]->edma_unused); + edma_cc[ctlr]->edma_unused); } }