From patchwork Tue Apr 2 11:16:45 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Padmavathi Venna X-Patchwork-Id: 2377001 Return-Path: X-Original-To: patchwork-linux-samsung-soc@patchwork.kernel.org Delivered-To: patchwork-process-083081@patchwork2.kernel.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by patchwork2.kernel.org (Postfix) with ESMTP id 740C4DF2A1 for ; Tue, 2 Apr 2013 11:16:32 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932557Ab3DBLQb (ORCPT ); Tue, 2 Apr 2013 07:16:31 -0400 Received: from mailout4.samsung.com ([203.254.224.34]:13555 "EHLO mailout4.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932534Ab3DBLQa (ORCPT ); Tue, 2 Apr 2013 07:16:30 -0400 Received: from epcpsbgr2.samsung.com (u142.gpu120.samsung.co.kr [203.254.230.142]) by mailout4.samsung.com (Oracle Communications Messaging Server 7u4-24.01 (7.0.4.24.0) 64bit (built Nov 17 2011)) with ESMTP id <0MKM00BYHKN9EYP0@mailout4.samsung.com> for linux-samsung-soc@vger.kernel.org; Tue, 02 Apr 2013 20:16:29 +0900 (KST) Received: from epcpsbgm1.samsung.com ( [172.20.52.125]) by epcpsbgr2.samsung.com (EPCPMTA) with SMTP id 5D.53.07735.C0EBA515; Tue, 02 Apr 2013 20:16:28 +0900 (KST) X-AuditID: cbfee68e-b7f946d000001e37-9d-515abe0c9550 Received: from epmmp2 ( [203.254.227.17]) by epcpsbgm1.samsung.com (EPCPMTA) with SMTP id 1C.C9.17838.C0EBA515; Tue, 02 Apr 2013 20:16:28 +0900 (KST) Received: from padma-linuxpc.sisodomain.com ([107.108.83.35]) by mmp2.samsung.com (Oracle Communications Messaging Server 7u4-24.01(7.0.4.24.0) 64bit (built Nov 17 2011)) with ESMTPA id <0MKM00IM4KN90S50@mmp2.samsung.com>; Tue, 02 Apr 2013 20:16:28 +0900 (KST) From: Padmavathi Venna To: linux-samsung-soc@vger.kernel.org, devicetree-discuss@lists.ozlabs.org, linux-arm-kernel@lists.infradead.org, padma.v@samsung.com, padma.kvr@gmail.com Cc: sbkim73@samsung.com, broonie@opensource.wolfsonmicro.com, kgene.kim@samsung.com, arnd@arndb.de, vinod.koul@intel.com, boojin.kim@samsung.com Subject: [PATCH V3] DMA: PL330: Add check if device tree compatible Date: Tue, 02 Apr 2013 16:46:45 +0530 Message-id: <1364901405-16541-1-git-send-email-padma.v@samsung.com> X-Mailer: git-send-email 1.7.4.4 X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFmpikeLIzCtJLcpLzFFi42JZI2JSq8uzLyrQYNMlE4u/k46xW7w5+YfN 4t/sU2wWB2Y/ZLXoXXCVzWLT42usFjPO72OyaF82h9Xi983vbBYXV3xhsnjZt5/Fgdvj969J jB47Z91l91i85yWTx+Yl9R7nZyxk9Hg58TebR9+WVYwenzfJBXBEcdmkpOZklqUW6dslcGVM unWKpWCjSMX0JetZGhhPC3QxcnJICJhITNn+gRXCFpO4cG89WxcjF4eQwFJGifvb77DBFB04 9p4FIjGdUWLbr/9QTg+TxPH+P+xdjBwcbAI6Ei1nXUDiIgJzGCWat89gBHGYBaYwSizfdw9s h7CAs8SBTZuZQGwWAVWJQ9eOg9m8QPGZnVuYIdYpSByb+pUVpFlCYBe7xI5b69ggGgQkvk0+ xAKyTUJAVmLTAah6SYmDK26wTGAUXMDIsIpRNLUguaA4Kb3ISK84Mbe4NC9dLzk/dxMjMPxP /3vWt4Px5gHrQ4zJQOMmMkuJJucD4yevJN7Q2MzIwtTE1NjI3NKMNGElcV61FutAIYH0xJLU 7NTUgtSi+KLSnNTiQ4xMHJxSDYw2R1ZYHAm9dfKL79mnU3mCQoMWvX37MbTx2ON3S89e7mJ6 mFZZ8//2o9sO5o9muzzQMQk4azarelqtqHaD15QqSTGr1InOjyNP3zI//CM0+9bcht6Z908v eOW2ZIW3tcuqmzwBr49MnCnLKXAs6LhsRpe43tplmVKpLvP3THkZv7uoefJ//0mrlViKMxIN tZiLihMB7gzsapUCAAA= X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFrrPIsWRmVeSWpSXmKPExsVy+t9jQV2efVGBBrMuaFn8nXSM3eLNyT9s Fv9mn2KzODD7IatF74KrbBabHl9jtZhxfh+TRfuyOawWv29+Z7O4uOILk8XLvv0sDtwev39N YvTYOesuu8fiPS+ZPDYvqfc4P2Mho8fLib/ZPPq2rGL0+LxJLoAjqoHRJiM1MSW1SCE1Lzk/ JTMv3VbJOzjeOd7UzMBQ19DSwlxJIS8xN9VWycUnQNctMwfoUiWFssScUqBQQGJxsZK+HaYJ oSFuuhYwjRG6viFBcD1GBmggYQ1jxqRbp1gKNopUTF+ynqWB8bRAFyMnh4SAicSBY+9ZIGwx iQv31rN1MXJxCAlMZ5TY9us/C4TTwyRxvP8PexcjBwebgI5Ey1kXkLiIwBxGiebtMxhBHGaB KYwSy/fdYwUZJSzgLHFg02YmEJtFQFXi0LXjYDYvUHxm5xZmiHUKEsemfmWdwMi9gJFhFaNo akFyQXFSeq6hXnFibnFpXrpecn7uJkZwdD2T2sG4ssHiEKMAB6MSD6/DnMhAIdbEsuLK3EOM EhzMSiK8cTujAoV4UxIrq1KL8uOLSnNSiw8xJgNtn8gsJZqcD4z8vJJ4Q2MTc1NjU0sTCxMz S9KElcR5D7RaBwoJpCeWpGanphakFsFsYeLglGpgnFK/raP2ldWF0wKxz1+Hh/gkNzPHbJFr s1tzeGWV6dE3E++qe2lvuLt13h3mE06ZLN2utz9ZPYpbwxPWxXVG/bvcp5u3Fjzztf+3Km3H s+7EFMetvjK9JetWFP4OsfwZGPGjV21/wRrtk7+fm2w5qb/i1Zc/IhtyspP4JfNvzuq4pvMx 0bXxgBJLcUaioRZzUXEiAGf+QBPyAgAA DLP-Filter: Pass X-MTR: 20000000000000000@CPGS X-CFilter-Loop: Reflected Sender: linux-samsung-soc-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-samsung-soc@vger.kernel.org This patch register the dma controller with generic dma helpers only in DT case. This also adds some extra error handling in the driver. Signed-off-by: Padmavathi Venna Reported-by: Sachin Kamat --- Based on Vinod Koul next branch. Changes since V2: - Removed pl330_free_chan_resources for error handling in probe. Changes since V1: - return silently when of_dma_controller_register fails, as suggested by Arnd. drivers/dma/pl330.c | 33 ++++++++++++++++++++++----------- 1 files changed, 22 insertions(+), 11 deletions(-) diff --git a/drivers/dma/pl330.c b/drivers/dma/pl330.c index 345e2a1..fa388c1c 100644 --- a/drivers/dma/pl330.c +++ b/drivers/dma/pl330.c @@ -2882,7 +2882,7 @@ pl330_probe(struct amba_device *adev, const struct amba_id *id) { struct dma_pl330_platdata *pdat; struct dma_pl330_dmac *pdmac; - struct dma_pl330_chan *pch; + struct dma_pl330_chan *pch, *_p; struct pl330_info *pi; struct dma_device *pd; struct resource *res; @@ -2984,7 +2984,17 @@ pl330_probe(struct amba_device *adev, const struct amba_id *id) ret = dma_async_device_register(pd); if (ret) { dev_err(&adev->dev, "unable to register DMAC\n"); - goto probe_err2; + goto probe_err3; + } + + if (adev->dev.of_node) { + ret = of_dma_controller_register(adev->dev.of_node, + of_dma_pl330_xlate, pdmac); + if (ret) { + dev_err(&adev->dev, + "unable to register DMA to the generic" + "DT DMA helpers\n"); + } } dev_info(&adev->dev, @@ -2995,16 +3005,15 @@ pl330_probe(struct amba_device *adev, const struct amba_id *id) pi->pcfg.data_bus_width / 8, pi->pcfg.num_chan, pi->pcfg.num_peri, pi->pcfg.num_events); - ret = of_dma_controller_register(adev->dev.of_node, - of_dma_pl330_xlate, pdmac); - if (ret) { - dev_err(&adev->dev, - "unable to register DMA to the generic DT DMA helpers\n"); - goto probe_err2; - } - return 0; +probe_err3: + amba_set_drvdata(adev, NULL); + /* Idle the DMAC */ + list_for_each_entry_safe(pch, _p, &pdmac->ddma.channels, + chan.device_node) + /* Remove the channel */ + list_del(&pch->chan.device_node); probe_err2: pl330_del(pi); probe_err1: @@ -3023,8 +3032,10 @@ static int pl330_remove(struct amba_device *adev) if (!pdmac) return 0; - of_dma_controller_free(adev->dev.of_node); + if (adev->dev.of_node) + of_dma_controller_free(adev->dev.of_node); + dma_async_device_unregister(&pdmac->ddma); amba_set_drvdata(adev, NULL); /* Idle the DMAC */