From patchwork Mon Mar 4 05:29:03 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Padmavathi Venna X-Patchwork-Id: 2210601 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 9D864DF2F2 for ; Mon, 4 Mar 2013 05:28:13 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755019Ab3CDF2M (ORCPT ); Mon, 4 Mar 2013 00:28:12 -0500 Received: from mailout4.samsung.com ([203.254.224.34]:19670 "EHLO mailout4.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751101Ab3CDF2L (ORCPT ); Mon, 4 Mar 2013 00:28:11 -0500 Received: from epcpsbgr1.samsung.com (u141.gpu120.samsung.co.kr [203.254.230.141]) by mailout4.samsung.com (Oracle Communications Messaging Server 7u4-24.01 (7.0.4.24.0) 64bit (built Nov 17 2011)) with ESMTP id <0MJ40098OF6T1M50@mailout4.samsung.com> for linux-samsung-soc@vger.kernel.org; Mon, 04 Mar 2013 14:28:09 +0900 (KST) Received: from epcpsbgm2.samsung.com ( [172.20.52.122]) by epcpsbgr1.samsung.com (EPCPMTA) with SMTP id 72.33.02494.9E034315; Mon, 04 Mar 2013 14:28:09 +0900 (KST) X-AuditID: cbfee68d-b7f636d0000009be-cf-513430e9b951 Received: from epmmp2 ( [203.254.227.17]) by epcpsbgm2.samsung.com (EPCPMTA) with SMTP id 98.84.03880.9E034315; Mon, 04 Mar 2013 14:28:09 +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 <0MJ400ALYF6OES20@mmp2.samsung.com>; Mon, 04 Mar 2013 14:28:09 +0900 (KST) From: Padmavathi Venna To: linux-samsung-soc@vger.kernel.org, devicetree-discuss@lists.ozlabs.org, linux-arm-kernel@lists.infradead.org, padma.kvr@gmail.com, padma.v@samsung.com Cc: sbkim73@samsung.com, broonie@opensource.wolfsonmicro.com, kgene.kim@samsung.com, jassisinghbrar@gmail.com, arnd@arndb.de, vinod.koul@intel.com, boojin.kim@samsung.com, robherring2@gmail.com Subject: [PATCH] DMA: PL330: Add check if device tree compatible Date: Mon, 04 Mar 2013 10:59:03 +0530 Message-id: <1362374943-29312-1-git-send-email-padma.v@samsung.com> X-Mailer: git-send-email 1.7.4.4 X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFupmkeLIzCtJLcpLzFFi42JZI2JSpfvSwCTQYMkdCYu/k46xW7w5+YfN 4t/sU2wWB2Y/ZLW4tmIuu0XvgqtsFpseX2O1mHF+H5NF+7I5rBa/b35ns/j+7RubxcUVX5gs XvbtZ3Hg9fj9axKjx85Zd9k9Fu95yeSxeUm9x/kZCxk9Xk78zebRt2UVo8fnTXIBHFFcNimp OZllqUX6dglcGYe7HzAV7BGp2PpboYHxnkAXIyeHhICJxOZZB1ggbDGJC/fWs3UxcnEICSxl lFj2dzc7TNH+hgXsEInpjBLHLl6EcnqYJNZMvQDkcHCwCehItJx1AYmLCMxhlLh84SwriMMs cJRR4sSqtUwgo4QFHCTOHNnLBmKzCKhKTGv/CLaCV8BZov3dWkaIdQoSx6Z+BWuWEDjGLvF1 4RcmiAYBiW+TD7GAbJMQkJXYdIAZol5S4uCKGywTGAUXMDKsYhRNLUguKE5KLzLUK07MLS7N S9dLzs/dxAiMiNP/nvXuYLx9wPoQYzLQuInMUqLJ+cCIyiuJNzQ2MTc1NjUzsrS0NCVNWEmc V+6STKCQQHpiSWp2ampBalF8UWlOavEhRiYOTqkGxlNPzL4f5lkY9nwfu/nMq4+tXgSsni1V Gz3vAqfk4drfx2Zdf6Un8nqG1ysOp/ezo+0afR6d57643enf+Q3R/0P3TRdYlbyP66x8empA 7AzPYq6chs7JtoKbNDZ1rordcOjieeY4k66CoCIv5mWPFv41NZB+8XITm0fwb7/eXZkzX0yc 9cE11F+JpTgj0VCLuag4EQDJOWAmngIAAA== X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFnrBIsWRmVeSWpSXmKPExsVy+t9jQd2XBiaBBi8beS3+TjrGbvHm5B82 i3+zT7FZHJj9kNXi2oq57Ba9C66yWWx6fI3VYsb5fUwW7cvmsFr8vvmdzeL7t29sFhdXfGGy eNm3n8WB1+P3r0mMHjtn3WX3WLznJZPH5iX1HudnLGT0eDnxN5tH35ZVjB6fN8kFcEQ1MNpk pCampBYppOYl56dk5qXbKnkHxzvHm5oZGOoaWlqYKynkJeam2iq5+AToumXmAN2spFCWmFMK FApILC5W0rfDNCE0xE3XAqYxQtc3JAiux8gADSSsYcw43P2AqWCPSMXW3woNjPcEuhg5OSQE TCT2Nyxgh7DFJC7cW8/WxcjFISQwnVHi2MWL7BBOD5PEmqkXgBwODjYBHYmWsy4gcRGBOYwS ly+cZQVxmAWOMkqcWLWWCWSUsICDxJkje9lAbBYBVYlp7R/BVvAKOEu0v1vLCLFOQeLY1K+s Exi5FzAyrGIUTS1ILihOSs810itOzC0uzUvXS87P3cQIjrdn0jsYVzVYHGIU4GBU4uEV+GQc KMSaWFZcmXuIUYKDWUmEt0zCJFCINyWxsiq1KD++qDQntfgQYzLQ9onMUqLJ+cBUkFcSb2hs Ym5qbGppYmFiZkmasJI4L+OpJwFCAumJJanZqakFqUUwW5g4OKUaGI106z0/8q+PXVMf5GQV 2Xzqnn9tueHaOdlL86dUpV6dwxSX7fricv30UzoiTl31T1g+TJ8X2S9z89mheZ8PzT5qscrj dOemxkybgvdSgU/FF+4wneQp3l7M+1yNmW+7yd3k21OOT7iQv+BH8/IGy2j2f1uZffTsHaoP KN+8UMS77KS50PKDPEosxRmJhlrMRcWJABqYaI/7AgAA 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 drivers/dma/pl330.c | 41 ++++++++++++++++++++++++++++++----------- 1 files changed, 30 insertions(+), 11 deletions(-) diff --git a/drivers/dma/pl330.c b/drivers/dma/pl330.c index 7181531..bdad8de 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"); + goto probe_err4; + } } dev_info(&adev->dev, @@ -2995,16 +3005,23 @@ 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_err4: + dma_async_device_unregister(pd); +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); + + /* Flush the channel */ + pl330_control(&pch->chan, DMA_TERMINATE_ALL, 0); + pl330_free_chan_resources(&pch->chan); + } probe_err2: pl330_del(pi); probe_err1: @@ -3023,8 +3040,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 */