From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1163249AbdAGGrE (ORCPT ); Sat, 7 Jan 2017 01:47:04 -0500 Received: from mail-co1nam03on0042.outbound.protection.outlook.com ([104.47.40.42]:4511 "EHLO NAM03-CO1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S940667AbdAGGq1 (ORCPT ); Sat, 7 Jan 2017 01:46:27 -0500 Authentication-Results: spf=pass (sender IP is 149.199.60.83) smtp.mailfrom=xilinx.com; arm.com; dkim=none (message not signed) header.d=none;arm.com; dmarc=bestguesspass action=none header.from=xilinx.com;arm.com; dkim=none (message not signed) header.d=none; From: Kedareswara rao Appana To: , , , , , , , , , , CC: , , , Subject: [PATCH v5 1/3] dmaengine: xilinx_dma: Check for channel idle state before submitting dma descriptor Date: Sat, 7 Jan 2017 12:15:28 +0530 Message-ID: <1483771530-8545-2-git-send-email-appanad@xilinx.com> X-Mailer: git-send-email 2.1.1 In-Reply-To: <1483771530-8545-1-git-send-email-appanad@xilinx.com> References: <1483771530-8545-1-git-send-email-appanad@xilinx.com> X-TM-AS-Product-Ver: IMSS-7.1.0.1224-8.0.0.1202-22806.006 X-TM-AS-User-Approved-Sender: Yes;Yes X-EOPAttributedMessage: 0 X-MS-Office365-Filtering-HT: Tenant X-Forefront-Antispam-Report: CIP:149.199.60.83;IPV:NLI;CTRY:US;EFV:NLI;SFV:NSPM;SFS:(10009020)(6009001)(7916002)(39840400002)(39410400002)(39450400003)(39850400002)(2980300002)(438002)(3190300001)(199003)(189002)(76176999)(48376002)(356003)(36386004)(7416002)(33646002)(2906002)(54906002)(50466002)(4326007)(305945005)(5001770100001)(2201001)(36756003)(103686003)(42186005)(52956003)(8936002)(38730400001)(92566002)(81166006)(81156014)(50986999)(5003940100001)(50226002)(45336002)(47776003)(106466001)(6666003)(5660300001)(2950100002)(8676002)(626004)(46386002)(63266004)(189998001)(90966002)(921003)(107986001)(2101003)(1121003)(83996005);DIR:OUT;SFP:1101;SCL:1;SRVR:BN3PR0201MB1073;H:xsj-pvapsmtpgw01;FPR:;SPF:Pass;PTR:unknown-60-83.xilinx.com;A:1;MX:1;LANG:en; X-Microsoft-Exchange-Diagnostics: 1;BL2NAM02FT060;1:OuB/t1AeABUSRkzbcCSDph8L4sBjc2RWYOsaXJHlkyF5Z/whi9518taraJPpDWSe7SVVYCZSwemi28rjrr2H+yAIzF9MXHsns+PRMEmZOTK0nENDQmkjtdlxOvB3GRLyk6qZjfN6PaA4kITqcqtGRjJumfU9hO/oc3v4IMgwOe/g33LzK7siuyn4vL6GwYzw8KNBvGJrNsYgZyroXWJ7FI5P4qBuKeSlySuzRgE5OoBgnUxWqe88oBic4SVpLu4QFY6tvJ8zvxKrGKVE+eTc/539hXMp7orLVTv3E+k13lPng5e/DbT0uyL+rBl3FXs6cUMr2XMX6Ed4gm9jdTPEDEyIh+k/oRMwx2E2jjN1bnL36Sp38LWcEf7Jzj1gPzfuLOOVNi36mSKGXNRedjWaWeQsrfwlcpAiGU3C90RBoiOufXirICmjMJMUXcRBin+sN/hRyc50yLY0QvvnRtQiS0P2r0IoOfEK8CDB7kvnpYTUweCb+hGBODyCxii3alfhNByiw0vspXYTV7cr7bDn1Fn7MzwPDCmnOtL89v+fSGTAlZiWmG7WujoJsg3J6z/+RkpCWV0wpJKthOEcnKEUHL/GEq6cWhaM+GyvYLJtBW/iu9i8/tauvX0MD1w7heo9ZAog8k0ja1cZOpIa6xIvWw== MIME-Version: 1.0 Content-Type: text/plain X-MS-Office365-Filtering-Correlation-Id: db9c2a56-dd9c-4291-8f99-08d436c8cd46 X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001)(8251501002);SRVR:BN3PR0201MB1073; X-Microsoft-Exchange-Diagnostics: 1;BN3PR0201MB1073;3:1SIx3wQq0WkC0JAJgJtbHeccwIughPHvYH+FB/a3OEK5enwZd7PkOWX5YRYwnU3epMnbhCT5t8G+5cSAtUKxrNw1t6QKfVDDGd39OmIZ4C2oWRm14cMnVsv46OfAPMPuHCxX57NmfR+MNYGoqO6rCkeYViLIUTMTn6MdO3NSt3aPqODB6KLOlplZxZbfZENCklD6Fuk/3qCzTgQZEs+6cRPwZYOKYvjr9038gRsfXTadNlxFmNfAp/uHS48P47Q5mKoP6xc8ymiDnepw/TvsHj77cM7h29K3ioHncTAIkbitoxaKhYkfwYcgktl7LN73WeCgLW5Dxxtx3U901dM7ZDCK7RhfpJ0oTsZV0teXaJ0M2iWDNWqMjp2GpztFMG0ioBeKkERwif8Xx3wrS/VTPQ== X-Microsoft-Exchange-Diagnostics: 1;BN3PR0201MB1073;25:Eogy9UO1wGSNSCLOchUPi5VrpT4o6gYQE8dN0iJcyqo+HJ5ozOf0c687XQKD7OCCiWy3KAthqdbHHiTytxxhU57x7pzquVaI+DlWJRCYoa6EHpe2PGwJIbcWsxl2PrxbvNys5upou8z4F+XnU0VIwUEtoL9tC6vDTauxu5CzYhX50o3qF6U48J1ov79pAoRcYtuChd3xl7lFZBhl9o9RCc3iWlSOMH5PQLSEMx66JMofCCU5rGQ0OFzV7bSnzNx1YyKbhkl/1zouVdug5n551PXTc/nB2rrnO/eNwZ3OzqbV/sGEAbprvzjTMxvAhoztLWJSRaYhoNs0kahrf/oI2BpUA8PgvZZCHBq9sHvzDOBo75XXYIbXK1k1qrGBs7VUeHnPVS71WXr7CLAfzbVv8Ecj7Wc/h7gmB6pqLx69S1n8eEdOqI/heR0x8sWiXxhdOI5w3H2VUQbFVX1dPatTs+3HPeK2qEk5L1Jbraw9/20uajJ2apUrERt8d8uKnp2rhv+Q0ZTu3n7bMVuQnh72SveOO3El23L5rzi6iw6Rqa5mhI3YEIB6FyFkUMPuvHprEenltapV8sGZWvHRaSQBqgTWX/AwVWX5w2DcvnZu2kG2MdjIxBig3E7Wl6dSUVvXdL8NaGEh4BJE7LAKxUcN9rgH+vj0JdvLYHfsU+l3xQ+QF2hgKr74cQhnIuRMRq+BQMTn52BopKyg5Semd6SBPV4naJosCeEIVj9dVlxdNONQw/rxj6eaus+eUBYJi6VWxA0ws6nrEdAtMdihati5O/980LDYuJzeOwOyGwovaqgJL1QQYWxHZnKWcaFtRRYRc/CFRK/DBuD/UL8Vl2Md7g== X-Microsoft-Exchange-Diagnostics: 1;BN3PR0201MB1073;31:K57wv1k6YBFSShrkTHr535TivU4mFOLqyy3ddAEPMq10E0HFHxWajLS7ckh9UYBkyMy89ynMFAGlzyETbtnvcVRNScRSB+skEME6ccAv73QcB4hRIuPgQbmnDeH2jQHTZUUMNCR+nwOrnbZKRSuFhYHWUiB0qrDrk0KB2BIr1M+uQVSql0HuEFruGioUw2ZPV4VH8YY79J5tWskJpvntJx+VhRanVXldb57slrWBTHFXnheGdhrXTjzzuqp/NCLX5wJTZF7cafCIOkNNTXcXnQ==;20:K41nCR85FIjgHGS79MkU8tWz7IsLekmAdffkPVd0F+9qMay9IX3qV5a/UETSB9wuIAQWDgUZAWywhqn6fxheSUmzjC+U7KPFUl+O1z0YXMBjkFdUIn9IxlHGo2fe0Rirpq55xYlha5BuGACI3prADG1iQK3wGCbkQuzoeX7A5dY4Wd+2h8T6n8yx0p7+or57NkMDdoFzd0/knseJ4IAg0PVTsAI8wvf9xDNuKwvgal6Dyu+2mfLn/KCWoiZjzWYNWdy+ymZeKPWDwuCy8x/SqLbwz39eleBjGpGJm/jVQpIcJM8cf+pEROkjjjNCKtb6+XfhQXU9sxeK/pBkHJn2M7l6r7kY6D9suUsFcqt2Vbe+WdLch4wghzru/AA0oaGHEjXhXfTSzM+3TJhcWIns/Pbnzc6pQw8XtPF9tsbCCHfcgBuLCIp6jA1xt27qR5sxoTqHeqUYhdvA7fSLOSIk9qq2F78q/irY4CWmj81RTB53ABoPtwcuj8wq0GbqYJRR X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(192813158149592); X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(6040375)(601004)(2401047)(5005006)(8121501046)(13015025)(13018025)(13017025)(13023025)(13024025)(10201501046)(3002001)(6055026)(6041248)(20161123562025)(20161123564025)(20161123555025)(20161123560025)(20161123558021)(6072148);SRVR:BN3PR0201MB1073;BCL:0;PCL:0;RULEID:;SRVR:BN3PR0201MB1073; X-Microsoft-Exchange-Diagnostics: 1;BN3PR0201MB1073;4:mxZtQlgth3Oa/nbcklXmGQSK/vH03QmkyNCY9El9fF9xnlNkbAE5p5C2kFvY7aVrb/GRQd+g9rapKfVWIqXAmOiX/GTYL1v0BIveAVvGp2iQ1Y3zlIlt3ImkAdRHvqxoUT0+NAQcRFdJrhuqIcfpZYFgI1RTbD2PT5dZsnIq+/NGL5+w6MnigUjMIXWnAoA84QhXqqrJn/2tQzJD+0pbiL8LA2LriQz6IJ56vxBiXYBQUPDTDFnVQjWlzy+Fl2m4kYRcql2BfEu8eD/zlH5hBPFqtI21UGj63Bvo+GDF911WGxBo8/YKpvSCq+ZvvGzRucD9skS0NADNza7bu0XBjbG7YUahe/9m7ViLCMyJoD+FsMRxUqE6c1iFD3WcMPYbGALWOdkJjVQUa2Zo2L5hGSvREL6cAwEkDtgZ3qLBzG2R8mHCjsZWCoVy6Kn2YZLbSfg2oYVSIHZVoQBQX4mnHr/NvWBH9uP6ub0VHRkljsUXYNfPBXdYh00NXMFMjoSxGW02xY+rf3MOrcLMLI2oPeJRyUqMX5RLaiQZVLiL6YOsOlPzqtt5ayij+2OaazIFXr76DNP4tnRbY+TDE4aPpn4QNBBcn9IhdMEb49rLWd/i8XkNTeiLlHjdiai4Mwton7N0ibFvkZGBdgyTQjrPSAYhgSXLs9bDQI8Sxv4PUS3qqSn6QlXzT77b5pPevTNNZPVm48Zq2GXwweWmAdZ6LwzAfaD4ihI72FSsmRa5wVt5ZPNhBS+bv1hK6vM/D5ziAAbcygglJwMoGcjkatCuUQ== X-Forefront-PRVS: 018093A9B5 X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;BN3PR0201MB1073;23:7cORS7NgD9H6eDo7zdk2jm6kq8GskbTc5sfX5Yq?= =?us-ascii?Q?FDx28H0bY67/WYoZupwrHEVU60tLSf6tF7RzB2FpylWRmPwHNjPk/po7nLlh?= =?us-ascii?Q?CStryI3ENGGTSBeWgtLVqTOHG+mr51eFlUd5Oq5ODkY8wNYMbv3Wblr0pOVH?= =?us-ascii?Q?vMeji1zn7zxQSUt0PXWmNNCYZH6O1oAZB/HdlAKmPUkISk0MiR3DWt5/K5YB?= =?us-ascii?Q?LhQu9o5fm792lRI5Sv1NgfeU9OF4Vsa0NvAUMhtPzkYVWB5eutStgHAFlEkQ?= =?us-ascii?Q?SD5J4SYrRdoMspeWts9N/fmLctkFGyyuZXy07o7Hw+KQJ146THc6ENRDJKZ6?= =?us-ascii?Q?2Rfuc8lZa3BIozB8sR0ocVHMHRp2HeNtlx7yKl9Zv11LaK18rzNsASsYj268?= =?us-ascii?Q?C9As+8Fmwy6g1sRtouOkTbo/IStRu1L2U3vgn02c3ojCWRMD4PpslE8mMqhk?= =?us-ascii?Q?j8FgDYvOQkIb0OOyRWlZ8Vx33WFB+9uEV5uHX8lDwn4ekQqVd+i//vQPchQ0?= =?us-ascii?Q?Tl0D1Se6CIcknXGBjXWu0cKzGdNJdqBpGpDt7V30Bh2+eVA4P647x15NSu1j?= =?us-ascii?Q?D0dy4c8kf4GxYAlQEAT6E1RdGoxLNNhkaXJVLf0C3nsTYAuR/u5Staa+EPmy?= =?us-ascii?Q?EkMrBusB/WK2p91MZEXc2ADlYFMMnEuK4rwiJSJIoYYNhvxYctw2SYkOpTKj?= =?us-ascii?Q?ukx4maTYWGbyRjlWCWZeuw1A7Jd7LbPpkY5zgINtb+Pu69n2lklpGYqPEB8Q?= =?us-ascii?Q?z2tRTtin4qGnGhmFFNymyh0DpduMlYM5DiFzcl0rvDLdbjAoikIn30EIr8AF?= =?us-ascii?Q?FHg0MHYt8Jma5VqNumkwM/q16pbsFoaTtBu81PBs7vvJC8QoKtS5nbc2/X+9?= =?us-ascii?Q?DQIdmbLrFqA4RoOWm/GT0c2tsAEpdsZcXYxMxhkVrNR2bc/wLIZZ4dsWW+R3?= =?us-ascii?Q?jBxm5ASvVeanIybQuCHdvG2nkiMEz4O2a5+hxEsovrbpsK/Gc6P8fCJVudWK?= =?us-ascii?Q?oUeV5QhwVogu3nkn0ImhlKWsklY31XQuXFzgKls1xeGZ0b4FdGlch1cseUvo?= =?us-ascii?Q?d613ZfT4vUznOLJ+jdaKC1Qza7zIzXrGRcv+fDAeFF6sFKlabw9cidap8mag?= =?us-ascii?Q?En7NF4hm5tqd2ZqhYuEUqKlgWm1+l/3sQeDpIcScro68QoVfZmEoUpdVB5SZ?= =?us-ascii?Q?jb3z/VwOitmzKFb1kcrVo843MZxzAUNxfTXgG7GwZs5nPFT+FVMDwl9O1Z9D?= =?us-ascii?Q?oRbqPM6vThFwU4x7P9dVoYtSdI2V3tr1mL2Vjki1a?= X-Microsoft-Exchange-Diagnostics: 1;BN3PR0201MB1073;6:vAI+IBdROAfyqpmtBSYl2FeIlIL1GlsH2iWDfua+Am0+lxtH1f1j+gtT4WU/xHxVjvivQ1aEqQ2KhJpyfdtqFuJFPnwaN3hRV3NmYni6MES/9KI4hpROTqS1VfJ2DXkNnLGIwKtupSeMzMKh6WUmJRh9/ut7UpeNWTEi0XWxRvzgePbaaV3cviHlG63EPXm7lOZ/tRoxydzc8fU+5t/E8a89toTv3mbn1CwEN0cDjMtW1GbJACE4qFtB2taIAdvv8aOrAQOFQ+lXgRiR50NkBXBmb/m3oDY7aOhe/hyMgDk1mFtW2jEUR4dDvSIEC1OdVyYnljLBPvNfJP5mDLHC7WlDPHqGG+8f5JDxPvcC/Zzgc6vncziMBVGQuyt3GzTUexZ43L1BS6GMayvG8WpzPIJ2OHlA5r3ODJku104Wi+f5sEBmawbzq52hGmJSZLCR7giiqtZmpisJs0X+gtcHMw==;5:a3OhjG1w43ODmX4kXjjC+HqRDSRZUEDV4CB9nju+taQ50fijg6P3G61IgPoyN2s3k+98XxKLiXvpbleYCEaOYKoLwFhEHNGHZmpL3RhlMGzbuiI8Oq+rTzdsT7iesgNV5N1XcMxCJtO60CF9N5oW2tBdGPnh6aZBbj0U4WFntNw=;24:gaLxriyUFvrYq3snOMNxS008T0kJj39TFXlWWAUBNEAmmNwLkj7d9Cj3gixpWlqYf/4/ZvAD72sWtE6esvIeNvXc2pS/FVpfUW1/QjsRSsE= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;BN3PR0201MB1073;7:b0Upj4EkJ/zPGpd9sDLnoDmql1FSlLxKPhHca8sQ0t6FiAKnF8LDvPU9pNc9jF1sSQzD8+IQ7rgvDd6HP5P9H3YuKGtQB/VMpORbxaOk+ku8Zs6dJnENnahuPiCwrCwpq7GpYf5R8qjRLqKjegyyOpTiU0PtXT0wAmXvBetKmdmjmVJkTH1Tw1CHkxWAGgMCIr35WPnStHNdz2Vu1M5pZgHN9yMClELwkOgi0UxpvU99hty699rUfs0PFRqTpe7qXZhfwclOdYNW75ebhWYCZT2/n/eTjs36cyVYEANwkXO6RE9bH8c0J1t2Eg0RgfDAA+GcTs9herS2uYNV6ioj9WI7xC4gS+sLwjzKskTIEkmuJ9d/S95sgy1NY7vpiY//XIkVUXDK+BHnOpyLa2rgARClPVL2la1kNK9lUNi1MEPgtUh0pESzbkjWLOpyXo1b1MzGCGVE0d1aKe7D57R/EA== X-OriginatorOrg: xilinx.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 07 Jan 2017 06:45:42.7801 (UTC) X-MS-Exchange-CrossTenant-Id: 657af505-d5df-48d0-8300-c31994686c5c X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=657af505-d5df-48d0-8300-c31994686c5c;Ip=[149.199.60.83];Helo=[xsj-pvapsmtpgw01] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN3PR0201MB1073 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Add channel idle state to ensure that dma descriptor is not submitted when VDMA engine is in progress. Reviewed-by: Jose Abreu Signed-off-by: Kedareswara rao Appana --- Changes for v5: ---> None. Changes for v4: ---> None. Changes for v3: ---> None. Changes for v2: ---> Add idle check in the reset as suggested by Jose Abreu ---> Removed xilinx_dma_is_running/xilinx_dma_is_idle checks in the driver and used common idle checks across the driver as suggested by Laurent Pinchart. drivers/dma/xilinx/xilinx_dma.c | 56 +++++++++++++---------------------------- 1 file changed, 17 insertions(+), 39 deletions(-) diff --git a/drivers/dma/xilinx/xilinx_dma.c b/drivers/dma/xilinx/xilinx_dma.c index 8288fe4..be7eb41 100644 --- a/drivers/dma/xilinx/xilinx_dma.c +++ b/drivers/dma/xilinx/xilinx_dma.c @@ -321,6 +321,7 @@ struct xilinx_dma_tx_descriptor { * @cyclic: Check for cyclic transfers. * @genlock: Support genlock mode * @err: Channel has errors + * @idle: Check for channel idle * @tasklet: Cleanup work after irq * @config: Device configuration info * @flush_on_fsync: Flush on Frame sync @@ -351,6 +352,7 @@ struct xilinx_dma_chan { bool cyclic; bool genlock; bool err; + bool idle; struct tasklet_struct tasklet; struct xilinx_vdma_config config; bool flush_on_fsync; @@ -920,32 +922,6 @@ static enum dma_status xilinx_dma_tx_status(struct dma_chan *dchan, } /** - * xilinx_dma_is_running - Check if DMA channel is running - * @chan: Driver specific DMA channel - * - * Return: '1' if running, '0' if not. - */ -static bool xilinx_dma_is_running(struct xilinx_dma_chan *chan) -{ - return !(dma_ctrl_read(chan, XILINX_DMA_REG_DMASR) & - XILINX_DMA_DMASR_HALTED) && - (dma_ctrl_read(chan, XILINX_DMA_REG_DMACR) & - XILINX_DMA_DMACR_RUNSTOP); -} - -/** - * xilinx_dma_is_idle - Check if DMA channel is idle - * @chan: Driver specific DMA channel - * - * Return: '1' if idle, '0' if not. - */ -static bool xilinx_dma_is_idle(struct xilinx_dma_chan *chan) -{ - return dma_ctrl_read(chan, XILINX_DMA_REG_DMASR) & - XILINX_DMA_DMASR_IDLE; -} - -/** * xilinx_dma_halt - Halt DMA channel * @chan: Driver specific DMA channel */ @@ -966,6 +942,7 @@ static void xilinx_dma_halt(struct xilinx_dma_chan *chan) chan, dma_ctrl_read(chan, XILINX_DMA_REG_DMASR)); chan->err = true; } + chan->idle = true; } /** @@ -1007,6 +984,9 @@ static void xilinx_vdma_start_transfer(struct xilinx_dma_chan *chan) if (chan->err) return; + if (!chan->idle) + return; + if (list_empty(&chan->pending_list)) return; @@ -1018,13 +998,6 @@ static void xilinx_vdma_start_transfer(struct xilinx_dma_chan *chan) tail_segment = list_last_entry(&tail_desc->segments, struct xilinx_vdma_tx_segment, node); - /* If it is SG mode and hardware is busy, cannot submit */ - if (chan->has_sg && xilinx_dma_is_running(chan) && - !xilinx_dma_is_idle(chan)) { - dev_dbg(chan->dev, "DMA controller still busy\n"); - return; - } - /* * If hardware is idle, then all descriptors on the running lists are * done, start new transfers @@ -1110,6 +1083,7 @@ static void xilinx_vdma_start_transfer(struct xilinx_dma_chan *chan) vdma_desc_write(chan, XILINX_DMA_REG_VSIZE, last->hw.vsize); } + chan->idle = false; if (!chan->has_sg) { list_del(&desc->node); list_add_tail(&desc->node, &chan->active_list); @@ -1136,6 +1110,9 @@ static void xilinx_cdma_start_transfer(struct xilinx_dma_chan *chan) if (chan->err) return; + if (!chan->idle) + return; + if (list_empty(&chan->pending_list)) return; @@ -1181,6 +1158,7 @@ static void xilinx_cdma_start_transfer(struct xilinx_dma_chan *chan) list_splice_tail_init(&chan->pending_list, &chan->active_list); chan->desc_pendingcount = 0; + chan->idle = false; } /** @@ -1196,15 +1174,11 @@ static void xilinx_dma_start_transfer(struct xilinx_dma_chan *chan) if (chan->err) return; - if (list_empty(&chan->pending_list)) + if (!chan->idle) return; - /* If it is SG mode and hardware is busy, cannot submit */ - if (chan->has_sg && xilinx_dma_is_running(chan) && - !xilinx_dma_is_idle(chan)) { - dev_dbg(chan->dev, "DMA controller still busy\n"); + if (list_empty(&chan->pending_list)) return; - } head_desc = list_first_entry(&chan->pending_list, struct xilinx_dma_tx_descriptor, node); @@ -1302,6 +1276,7 @@ static void xilinx_dma_start_transfer(struct xilinx_dma_chan *chan) list_splice_tail_init(&chan->pending_list, &chan->active_list); chan->desc_pendingcount = 0; + chan->idle = false; } /** @@ -1366,6 +1341,7 @@ static int xilinx_dma_reset(struct xilinx_dma_chan *chan) } chan->err = false; + chan->idle = true; return err; } @@ -1447,6 +1423,7 @@ static irqreturn_t xilinx_dma_irq_handler(int irq, void *data) if (status & XILINX_DMA_DMASR_FRM_CNT_IRQ) { spin_lock(&chan->lock); xilinx_dma_complete_descriptor(chan); + chan->idle = true; chan->start_transfer(chan); spin_unlock(&chan->lock); } @@ -2327,6 +2304,7 @@ static int xilinx_dma_chan_probe(struct xilinx_dma_device *xdev, chan->has_sg = xdev->has_sg; chan->desc_pendingcount = 0x0; chan->ext_addr = xdev->ext_addr; + chan->idle = true; spin_lock_init(&chan->lock); INIT_LIST_HEAD(&chan->pending_list); -- 2.1.2