Received: by 10.213.65.68 with SMTP id h4csp460094imn; Tue, 13 Mar 2018 09:45:31 -0700 (PDT) X-Google-Smtp-Source: AG47ELvcG753ounlTYA9qT+aAH+RmUfLSHLUouLzNiHLaDCam1KhNTCudHUtgz2SiDQcUipVvYIk X-Received: by 10.101.97.88 with SMTP id o24mr1004982pgv.270.1520959531455; Tue, 13 Mar 2018 09:45:31 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1520959531; cv=none; d=google.com; s=arc-20160816; b=ejIS3fTjh/gCqfOxmP68i8Gd4ASTUOBztr6J/2isYXpYcvqRIZk3xaQnbyLNv0secB Sv2YkRbTwKhD376ZuvtnxAJA/mntccqpmNciTKrYnVc0EEpmdVyWQb66pj7i3kRNbmb+ MDgB0Ec07GE90Hvr34m68l62iOjKRbkz4uXvsOvIuP8pdb1oGKHc02iRunYbLLhHf+bi NYCXQ7JeApTogErNpgEGhKk9uTGMcru2DArzTLD88LUnxj4Fy9GWY643QYpVFMTC02j6 q25BvZewu7j0SmXyvJhah5z/Somc0BDoIKpquMC4r0eQ0vzfIVJk+5Tm6IeEOeU4f6N1 4M7Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:arc-authentication-results; bh=cvI9L5kAxcBGF23wQiISfXqcYsSYnDfxyZqZ6F0yMvs=; b=mAw3b/E71hyYMVov/h7iHEgsnRXTE+enV2TzGlFjElD2MggcFCFM9CR8WmNq0u7oGV LlKVOaLdbAYPlHYrgowQJEawjHEO7I25YHrgGoI6qQo7b9ProzoPH19DE/+z3KYOgSXO Bx/ExgoOWHXQGZ9SN4xwEq8s4Db/tSBBRbGJXfsVfR9GZGIsPvgGN+hiFlseZSOBSZqj vi4VatNkt8u8Z+/snrvOqbdbaffG95c9ES/UYQtMg9TgFeI90+T/69WWwAod3ydTec77 ruurWIwzmI5Mb15PJP8M9ZXVeGd28zwYslndp/tdCsgYGOCGILyHqh7fuyo6I/5dqcfu 5/zg== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id t63si262967pgt.745.2018.03.13.09.45.16; Tue, 13 Mar 2018 09:45:31 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933622AbeCMQm5 (ORCPT + 99 others); Tue, 13 Mar 2018 12:42:57 -0400 Received: from mx07-00178001.pphosted.com ([62.209.51.94]:58761 "EHLO mx07-00178001.pphosted.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S933464AbeCMQmt (ORCPT ); Tue, 13 Mar 2018 12:42:49 -0400 Received: from pps.filterd (m0046037.ppops.net [127.0.0.1]) by mx07-.pphosted.com (8.16.0.21/8.16.0.21) with SMTP id w2DGdUG7022375; Tue, 13 Mar 2018 17:42:17 +0100 Received: from beta.dmz-eu.st.com (beta.dmz-eu.st.com [164.129.1.35]) by mx07-00178001.pphosted.com with ESMTP id 2gpc7q9ytr-1 (version=TLSv1 cipher=ECDHE-RSA-AES256-SHA bits=256 verify=NOT); Tue, 13 Mar 2018 17:42:17 +0100 Received: from zeta.dmz-eu.st.com (zeta.dmz-eu.st.com [164.129.230.9]) by beta.dmz-eu.st.com (STMicroelectronics) with ESMTP id ADD6831; Tue, 13 Mar 2018 16:42:16 +0000 (GMT) Received: from Webmail-eu.st.com (sfhdag5node2.st.com [10.75.127.14]) by zeta.dmz-eu.st.com (STMicroelectronics) with ESMTP id 888B5A67C; Tue, 13 Mar 2018 16:42:16 +0000 (GMT) Received: from localhost (10.75.127.46) by SFHDAG5NODE2.st.com (10.75.127.14) with Microsoft SMTP Server (TLS) id 15.0.1347.2; Tue, 13 Mar 2018 17:42:15 +0100 From: Pierre-Yves MORDRET To: Vinod Koul , Rob Herring , Mark Rutland , Maxime Coquelin , Alexandre Torgue , Dan Williams , "M'boumba Cedric Madianga" , , , , CC: Pierre-Yves MORDRET Subject: [PATCH v1 4/8] dmaengine: stm32-dma: fix DMA IRQ status handling Date: Tue, 13 Mar 2018 17:42:03 +0100 Message-ID: <1520959327-25760-5-git-send-email-pierre-yves.mordret@st.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1520959327-25760-1-git-send-email-pierre-yves.mordret@st.com> References: <1520959327-25760-1-git-send-email-pierre-yves.mordret@st.com> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [10.75.127.46] X-ClientProxiedBy: SFHDAG1NODE3.st.com (10.75.127.3) To SFHDAG5NODE2.st.com (10.75.127.14) X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10432:,, definitions=2018-03-13_07:,, signatures=0 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Update the way Transfer Complete and Half Transfer Complete status are acknowledge. Even if HTI is not enabled its status is shown when reading registers, driver has to clear it gently and not raise an error. Signed-off-by: Pierre-Yves MORDRET --- Version history: v1: * Initial --- --- drivers/dma/stm32-dma.c | 29 +++++++++++++++++++++++++---- 1 file changed, 25 insertions(+), 4 deletions(-) diff --git a/drivers/dma/stm32-dma.c b/drivers/dma/stm32-dma.c index a7edd6d..0685961 100644 --- a/drivers/dma/stm32-dma.c +++ b/drivers/dma/stm32-dma.c @@ -34,9 +34,14 @@ #define STM32_DMA_LIFCR 0x0008 /* DMA Low Int Flag Clear Reg */ #define STM32_DMA_HIFCR 0x000c /* DMA High Int Flag Clear Reg */ #define STM32_DMA_TCI BIT(5) /* Transfer Complete Interrupt */ +#define STM32_DMA_HTI BIT(4) /* Half Transfer Interrupt */ #define STM32_DMA_TEI BIT(3) /* Transfer Error Interrupt */ #define STM32_DMA_DMEI BIT(2) /* Direct Mode Error Interrupt */ #define STM32_DMA_FEI BIT(0) /* FIFO Error Interrupt */ +#define STM32_DMA_MASKI (STM32_DMA_TCI \ + | STM32_DMA_TEI \ + | STM32_DMA_DMEI \ + | STM32_DMA_FEI) /* DMA Stream x Configuration Register */ #define STM32_DMA_SCR(x) (0x0010 + 0x18 * (x)) /* x = 0..7 */ @@ -637,13 +642,29 @@ static irqreturn_t stm32_dma_chan_irq(int irq, void *devid) status = stm32_dma_irq_status(chan); scr = stm32_dma_read(dmadev, STM32_DMA_SCR(chan->id)); - if ((status & STM32_DMA_TCI) && (scr & STM32_DMA_SCR_TCIE)) { + if (status & STM32_DMA_TCI) { stm32_dma_irq_clear(chan, STM32_DMA_TCI); - stm32_dma_handle_chan_done(chan); - - } else { + if (scr & STM32_DMA_SCR_TCIE) + stm32_dma_handle_chan_done(chan); + status &= ~STM32_DMA_TCI; + } + if (status & STM32_DMA_HTI) { + stm32_dma_irq_clear(chan, STM32_DMA_HTI); + status &= ~STM32_DMA_HTI; + } + if (status & STM32_DMA_FEI) { + stm32_dma_irq_clear(chan, STM32_DMA_FEI); + status &= ~STM32_DMA_FEI; + if (!(scr & STM32_DMA_SCR_EN)) + dev_err(chan2dev(chan), "FIFO Error\n"); + else + dev_dbg(chan2dev(chan), "FIFO over/underrun\n"); + } + if (status) { stm32_dma_irq_clear(chan, status); dev_err(chan2dev(chan), "DMA error: status=0x%08x\n", status); + if (!(scr & STM32_DMA_SCR_EN)) + dev_err(chan2dev(chan), "chan disabled by HW\n"); } spin_unlock(&chan->vchan.lock); -- 2.7.4