From patchwork Mon Jul 22 17:59:49 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Joel Fernandes X-Patchwork-Id: 2831516 Return-Path: X-Original-To: patchwork-linux-arm@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork1.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.19.201]) by patchwork1.web.kernel.org (Postfix) with ESMTP id 59B369F243 for ; Mon, 22 Jul 2013 18:01:12 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 2CD5B2027D for ; Mon, 22 Jul 2013 18:01:08 +0000 (UTC) Received: from casper.infradead.org (casper.infradead.org [85.118.1.10]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id A200E20265 for ; Mon, 22 Jul 2013 18:01:03 +0000 (UTC) Received: from merlin.infradead.org ([2001:4978:20e::2]) by casper.infradead.org with esmtps (Exim 4.80.1 #2 (Red Hat Linux)) id 1V1KPq-0007qa-83; Mon, 22 Jul 2013 18:00:58 +0000 Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.80.1 #2 (Red Hat Linux)) id 1V1KPn-0002CO-Vi; Mon, 22 Jul 2013 18:00:56 +0000 Received: from arroyo.ext.ti.com ([192.94.94.40]) by merlin.infradead.org with esmtps (Exim 4.80.1 #2 (Red Hat Linux)) id 1V1KPh-0002Bm-Mu for linux-arm-kernel@lists.infradead.org; Mon, 22 Jul 2013 18:00:53 +0000 Received: from dlelxv90.itg.ti.com ([172.17.2.17]) by arroyo.ext.ti.com (8.13.7/8.13.7) with ESMTP id r6MHxt5V011492; Mon, 22 Jul 2013 12:59:55 -0500 Received: from DFLE72.ent.ti.com (dfle72.ent.ti.com [128.247.5.109]) by dlelxv90.itg.ti.com (8.14.3/8.13.8) with ESMTP id r6MHxtLx026111; Mon, 22 Jul 2013 12:59:55 -0500 Received: from dlelxv22.itg.ti.com (172.17.1.197) by DFLE72.ent.ti.com (128.247.5.109) with Microsoft SMTP Server id 14.2.342.3; Mon, 22 Jul 2013 12:59:54 -0500 Received: from joel-laptop.itg.ti.com (h114-167.vpn.ti.com [172.24.114.167]) by dlelxv22.itg.ti.com (8.13.8/8.13.8) with ESMTP id r6MHxnFH004389; Mon, 22 Jul 2013 12:59:54 -0500 From: Joel Fernandes To: Tony Lindgren , Sekhar Nori , Vinod Koul , Benoit Cousson , Balaji TK , Arnd Bergmann Subject: [PATCH v2] ARM: EDMA: Fix clearing of unused list for DT DMA resources Date: Mon, 22 Jul 2013 12:59:49 -0500 Message-ID: <1374515989-7391-1-git-send-email-joelf@ti.com> X-Mailer: git-send-email 1.7.9.5 MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20130722_140049_843393_E887D74D X-CRM114-Status: GOOD ( 12.55 ) X-Spam-Score: -8.4 (--------) Cc: Mark Jackson , Joel Fernandes , Pantel Antoniou , Linux MMC List , Linux Kernel Mailing List , Jason Kridner , Linux OMAP List , Linux ARM Kernel List X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org X-Spam-Status: No, score=-5.6 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_MED, RP_MATCHES_RCVD, UNPARSEABLE_RELAY autolearn=unavailable version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP HWMOD removal for MMC is breaking edma_start as the events are being manually triggered due to unused channel list not being clear, Thanks to Balaji TK for finding this issue. 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. Cc: Balaji T K Cc: Pantel Antoniou Signed-off-by: Joel Fernandes --- v2 changes: Fixed compiler warning arch/arm/common/edma.c | 31 +++++++++++++++++++++++-------- 1 file changed, 23 insertions(+), 8 deletions(-) diff --git a/arch/arm/common/edma.c b/arch/arm/common/edma.c index a432e6c..765d578 100644 --- a/arch/arm/common/edma.c +++ b/arch/arm/common/edma.c @@ -561,14 +561,29 @@ 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; - - for (i = 0; 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); + 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); + } + } + } else { + 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); + } } }