Received: by 10.213.65.68 with SMTP id h4csp460407imn; Tue, 13 Mar 2018 09:46:10 -0700 (PDT) X-Google-Smtp-Source: AG47ELu2+sqJdObBbifzZEZV6YFR6QktgOjr1MVom9PrCBCJMCRbbfCVx6OIA6PJNknRCRFAGWkV X-Received: by 10.99.116.85 with SMTP id e21mr1017718pgn.218.1520959570057; Tue, 13 Mar 2018 09:46:10 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1520959570; cv=none; d=google.com; s=arc-20160816; b=ltjodNhiCtkIKoHf6dm1h+nwU4NIAqYfMaORGI7Kf38sqxwCUs99AoKvQ175Ec1Iim Jwjp4fy0MiEcPxJ5JzIEOyVFo2QxCcWu/3dVvQNT2d2MybyWNME5PkxNNyNk3nIXpNQv bPRW3Zgl+gS65Bo4JYvioEWkk8fojgRTyUHWe9qpEjrZQuOF2q99LRdOPcUKvEf+M6C2 cdxWLBt5Q/kCbfupmiMDs548KpBfdOkZX6RKlTaBVdGOZpw7VVyncLHLIEZUWh2RkGhA bZeXXqVBxcNJ1F/Dl84ceBcyuRJ3FYdV91XnqYBfxurJVRKBSLD/ULf03/NyYubeR9Xp Ys7A== 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=VpaZyFKrRG0kjrCPBLTUfpNeb53hQSDi9t3b7w1YLbk=; b=YD1XZFOk0wcB0aQvXjplqGpYPUs4Eb7Yq0Mw0FHFKlURXxoAq5Q99Thf6nJ75U8Ysg p/n6B+M4k3rtXl9Ffp19gNj5WzAkTKtAJ0kMwvOrJIdyNuxR8mNMwaiLbC2PRiV00ET1 zFPW637TosnsF0sGje/KtRS8rTC9WIDErwLhiZkJ7lBKXxizIYWu8hBDBW45GJh4oHVb FDW8wepuA1NTBTeG0LTlnnkB4QT/rA4YCrPjTJ4vD7aJMixykNaGLGtFc8oN+AyaCqHR g8nw+PVN7pPbD9xOCv0wCbvrot2Eaazi3tlyX9XalWGWmf5c/Tvaw7Y7d94Ht5Q5oeii 3x6Q== 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 u191si295180pgc.725.2018.03.13.09.45.55; Tue, 13 Mar 2018 09:46:10 -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 S1752788AbeCMQo7 (ORCPT + 99 others); Tue, 13 Mar 2018 12:44:59 -0400 Received: from mx07-00178001.pphosted.com ([62.209.51.94]:53391 "EHLO mx07-00178001.pphosted.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S933452AbeCMQmt (ORCPT ); Tue, 13 Mar 2018 12:42:49 -0400 Received: from pps.filterd (m0046668.ppops.net [127.0.0.1]) by mx07-.pphosted.com (8.16.0.21/8.16.0.21) with SMTP id w2DGdO62013628; Tue, 13 Mar 2018 17:42:19 +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 2gpc5sa0sv-1 (version=TLSv1 cipher=ECDHE-RSA-AES256-SHA bits=256 verify=NOT); Tue, 13 Mar 2018 17:42:19 +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 895A931; Tue, 13 Mar 2018 16:42:18 +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 31A3EA675; Tue, 13 Mar 2018 16:42:18 +0000 (GMT) Received: from localhost (10.75.127.51) by SFHDAG5NODE2.st.com (10.75.127.14) with Microsoft SMTP Server (TLS) id 15.0.1347.2; Tue, 13 Mar 2018 17:42:17 +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 6/8] dmaengine: stm32-dma: properly mask irq bits Date: Tue, 13 Mar 2018 17:42:05 +0100 Message-ID: <1520959327-25760-7-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.51] X-ClientProxiedBy: SFHDAG2NODE1.st.com (10.75.127.4) 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 A single register of the controller holds the information for four dma channels. The functions stm32_dma_irq_status() don't mask the relevant bits after the shift, thus adjacent channel's status is also reported in the returned value. Fixed by masking the value before returning it. Similarly, the function stm32_dma_irq_clear() don't mask the input value before shifting it, thus an incorrect input value could disable the interrupts of adjacent channels. Fixed by masking the input value before using it. Signed-off-by: Pierre-Yves MORDRET Signed-off-by: Antonio Borneo --- Version history: v1: * Initial --- --- drivers/dma/stm32-dma.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/drivers/dma/stm32-dma.c b/drivers/dma/stm32-dma.c index f9d3c84..a11cbee 100644 --- a/drivers/dma/stm32-dma.c +++ b/drivers/dma/stm32-dma.c @@ -38,6 +38,10 @@ #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 */ @@ -404,7 +408,7 @@ static u32 stm32_dma_irq_status(struct stm32_dma_chan *chan) flags = dma_isr >> (((chan->id & 2) << 3) | ((chan->id & 1) * 6)); - return flags; + return flags & STM32_DMA_MASKI; } static void stm32_dma_irq_clear(struct stm32_dma_chan *chan, u32 flags) @@ -419,6 +423,7 @@ static void stm32_dma_irq_clear(struct stm32_dma_chan *chan, u32 flags) * If (ch % 4) is 2 or 3, left shift the mask by 16 bits. * If (ch % 4) is 1 or 3, additionally left shift the mask by 6 bits. */ + flags &= STM32_DMA_MASKI; dma_ifcr = flags << (((chan->id & 2) << 3) | ((chan->id & 1) * 6)); if (chan->id & 4) -- 2.7.4