From patchwork Thu Jan 7 22:05:48 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alexander Sverdlin X-Patchwork-Id: 7980011 Return-Path: X-Original-To: patchwork-dmaengine@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork2.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.136]) by patchwork2.web.kernel.org (Postfix) with ESMTP id 0164DBEEE5 for ; Thu, 7 Jan 2016 22:06:14 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 2BB462013D for ; Thu, 7 Jan 2016 22:06:13 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 2990D2012E for ; Thu, 7 Jan 2016 22:06:12 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753460AbcAGWGL (ORCPT ); Thu, 7 Jan 2016 17:06:11 -0500 Received: from mout.gmx.net ([212.227.15.19]:52065 "EHLO mout.gmx.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753427AbcAGWGK (ORCPT ); Thu, 7 Jan 2016 17:06:10 -0500 Received: from [192.168.1.20] ([93.132.218.27]) by mail.gmx.com (mrgmx003) with ESMTPSA (Nemesis) id 0Lhfu5-1ZvQDR0hOr-00mrvO; Thu, 07 Jan 2016 23:05:52 +0100 Cc: Vinod Koul , Dan Williams , Mika Westerberg , H Hartley Sweeten To: dmaengine@vger.kernel.org From: Alexander Sverdlin Subject: [PATCH] dma: ep93xx: Treat STALL and NFB IRQs same way Message-ID: <568EE13C.7090500@gmx.de> Date: Thu, 7 Jan 2016 23:05:48 +0100 User-Agent: Mozilla/5.0 (X11; Linux i686; rv:38.0) Gecko/20100101 Thunderbird/38.5.0 MIME-Version: 1.0 X-Provags-ID: V03:K0:+/Yk5+g4F0s0QOY1hAh6NbJFrApPm2NRCSAyY+33EdK9tTrzh9R tn7BTssyaieQcP7KgblENf23hZJzeMEqtLKuvMe3ij9b1r1j+Wj4MQ+Xy3Su1sg/oUQ97YO cPaOZa3Uyi7IYj+za91LAiydGnPgGKfJnKh2bvDtThy3mS13+sAT0vhQgHdEUht3iXhDS5W oLzxJS9KExMPUHmctztew== X-UI-Out-Filterresults: notjunk:1; V01:K0:6su8vpxdH2w=:ZAqk2Q4enAnxVZFGF+ORIR 8SXvgI3GBz7AqPoKQ544OUze68AXFCU1Wodzr1nV3OwLuN3wd5seFk3GfmxR30UQ28i3AAxvk CKCe8rNNCV8/KSslXEbfcqaBxIe7H6gJ+lMr5VEIVQ1d8Cqy/gOo86cmd5FXEfyKz/d1P4ijp irDtv4rZypmna/Tmg5i2RimaL3tGjYIuH3eGbhAO0ygQNXri2SirAzlfXq5q4F3pVYymHAdM3 c7bt7181LANnIy03qjiODwZMyeDiEfkN6TkhDFKVnOMcjiXZ0IpFjUxAtZKoFfQWgNi4/e8IG tQBpucTQ83QTMQMea3ADgu3+J5qn+t156a2XsJ46pcqy/W32GQt29huM/mZPnsT//xQqMrG6t 2+AX6OYBx0+JWsIHGRdyXppICjlfN97jBVT3l/mSjgisnJ793AgAbIc9/PN0PGSaEVEbxpZ/R pOUkyuSQia+5SB1PE8OVxZEL9seVXaAJrgn60Whm8b7LvZ3ph+QV8DGJ3NPaCq2Wd8OZBk42q FK+SQknNnIquCmB2td3yUfS312JfYRgklbubSxJnNC76Kj5qbEE5Cl1Tmpvc/iIR7KmIOsQuI fBQNODp66mIbI1SovsEiJJr5M4HcIiz+dF7MxHPqY5d4AGGUmn04VDTYpOof0AOBmQMgKEmsG 54Rp06WAgqsxlIvC3MKq3GhcSVV3P4crMRlvAz9wr/vu/P+Q/cQH/zMcaVwKKKfNjuFeELktq mr/wPcgHNijwQ/YcinOY4jthZWLElsijIz5Kx9GSXDzJwVdaGAYHDJHFCQ2PId7d1CJl+WHuW hA0Oowv Sender: dmaengine-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: dmaengine@vger.kernel.org X-Spam-Status: No, score=-6.9 required=5.0 tests=BAYES_00,FREEMAIL_FROM, RCVD_IN_DNSWL_HI, RP_MATCHES_RCVD, UNPARSEABLE_RELAY autolearn=ham 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 Debugging ALSA hangups it was found that EP9302 (latest E2 rev.) DMA controller sometimes asserts STALL interrupt instead of NFB interrupt. Simply ignoring the difference and simply acting upon the amount of data we still have to transfer seems to work fine. This somehow sounds similar to M2M issue which is already dealt with in the driver, when the controller asserts DONE interrupt too early. The issue is not documented in Cirrus Logic erratas for EP93XX, but original Cirrus DMA driver from 2003 (not based on DMA API) did the similar handling of STALL interrupt. In-tree driver (6d831c65) did it also, before conversion to DMA engine API. Signed-off-by: Alexander Sverdlin --- drivers/dma/ep93xx_dma.c | 28 +++++++++++++++------------- 1 file changed, 15 insertions(+), 13 deletions(-) -- To unsubscribe from this list: send the line "unsubscribe dmaengine" 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/drivers/dma/ep93xx_dma.c b/drivers/dma/ep93xx_dma.c index 57ff462..21f08cc 100644 --- a/drivers/dma/ep93xx_dma.c +++ b/drivers/dma/ep93xx_dma.c @@ -421,23 +421,25 @@ static int m2p_hw_interrupt(struct ep93xx_dma_chan *edmac) desc->size); } - switch (irq_status & (M2P_INTERRUPT_STALL | M2P_INTERRUPT_NFB)) { - case M2P_INTERRUPT_STALL: - /* Disable interrupts */ - control = readl(edmac->regs + M2P_CONTROL); - control &= ~(M2P_CONTROL_STALLINT | M2P_CONTROL_NFBINT); - m2p_set_control(edmac, control); - - return INTERRUPT_DONE; - - case M2P_INTERRUPT_NFB: - if (ep93xx_dma_advance_active(edmac)) - m2p_fill_desc(edmac); + /* + * Even latest E2 silicon revision sometimes assert STALL interrupt + * instead of NFB. Therefore we treat them equally, basing on the + * amount of data we still have to transfer. + */ + if (!(irq_status & (M2P_INTERRUPT_STALL | M2P_INTERRUPT_NFB))) + return INTERRUPT_UNKNOWN; + if (ep93xx_dma_advance_active(edmac)) { + m2p_fill_desc(edmac); return INTERRUPT_NEXT_BUFFER; } - return INTERRUPT_UNKNOWN; + /* Disable interrupts */ + control = readl(edmac->regs + M2P_CONTROL); + control &= ~(M2P_CONTROL_STALLINT | M2P_CONTROL_NFBINT); + m2p_set_control(edmac, control); + + return INTERRUPT_DONE; } /*