Received: by 10.213.65.68 with SMTP id h4csp1795897imn; Mon, 19 Mar 2018 13:30:09 -0700 (PDT) X-Google-Smtp-Source: AG47ELtGD6VL17FKlj/TB7VFv1qxnC4ARW4pvtnvNdwO4RJok7JIbBSM3o2klvEh1uzVlaJLiLV1 X-Received: by 2002:a17:902:7b95:: with SMTP id w21-v6mr14093905pll.260.1521491409053; Mon, 19 Mar 2018 13:30:09 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1521491409; cv=none; d=google.com; s=arc-20160816; b=MHFJVe/ZQBYRkhgV+G02pPEyvXLY0zSkjwy1Nc4/EMfNC4jPP6XkFiOKtYYr1Ip6i3 iDuk+55F32zKPOgS64QnSymWIzR+Cj3Ql2IcCRA4x//blM1hE31k9nnJCa5wX8gAD4Qo 5z6aoMKC1WmKwR7RG3BuxSXEshw280oV3EA/uX3Ng8d3j0iW0s4mIUFVz9FTGCq+DI7f TWpOP6/YmikSFMJPxrwSr2ZJsgFiI19HWEPx+yiTRbfMLWJNLJqle+EClLaVg7kU2XUX UnbL9VhHmqlMhgDJMdGEhkRUP/vbH3WEIsICnES+VCaW5gcbg8cDZ4wBbq/iqopKG6yF XAIw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:user-agent:references :in-reply-to:message-id:date:subject:cc:to:from :arc-authentication-results; bh=QiQh2sd0Z2du9XOiwc4pPFE1Bch8WB/DvtHDS+RX+hY=; b=ZY/HtdeUpVXB5pIkj3Qq8s8QCX4A6Q7tP+t82rh+FEC4qKaoMmHqsC525I9NuPQPig j0IR+UnOQ2h7BxA83wHXFpN/hYQDBHQAGbMqC8rFzXxqKz5DcO0mDpxhZl9rQVt+pQnf xyZ3A1g0kR7GeLi5oqZxOzOrY4h8mqrl6dapuS0xvAGB0De8q81OkE10YZZBcl/BPT92 Gwujlz8cc+zNiihSQfINsSU5HEUvVLrq3rMnRHQxbaNMaFsVgUa8E45M4ztc3cRkEKkq ihjDsSFnPxSQLCkJCU/Al0i/L0nMfV4wl3uaOrAGP3Zuq9CagGWn2Jo9ESxq05ztXsOw eZRA== 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 p7si11682pga.349.2018.03.19.13.29.53; Mon, 19 Mar 2018 13:30:09 -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 S968906AbeCSU2K (ORCPT + 99 others); Mon, 19 Mar 2018 16:28:10 -0400 Received: from mail.linuxfoundation.org ([140.211.169.12]:43054 "EHLO mail.linuxfoundation.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1030483AbeCSSNS (ORCPT ); Mon, 19 Mar 2018 14:13:18 -0400 Received: from localhost (LFbn-1-12247-202.w90-92.abo.wanadoo.fr [90.92.61.202]) by mail.linuxfoundation.org (Postfix) with ESMTPSA id 457BA1229; Mon, 19 Mar 2018 18:13:18 +0000 (UTC) From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Jiada Wang , Vinod Koul , Sasha Levin Subject: [PATCH 4.4 034/134] dmaengine: imx-sdma: add 1ms delay to ensure SDMA channel is stopped Date: Mon, 19 Mar 2018 19:05:17 +0100 Message-Id: <20180319171854.214890247@linuxfoundation.org> X-Mailer: git-send-email 2.16.2 In-Reply-To: <20180319171849.024066323@linuxfoundation.org> References: <20180319171849.024066323@linuxfoundation.org> User-Agent: quilt/0.65 X-stable: review MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 4.4-stable review patch. If anyone has any objections, please let me know. ------------------ From: Jiada Wang [ Upstream commit 7f3ff14b7eb1ffad132117f08a1973b48e653d43 ] sdma_disable_channel() cannot ensure dma is stopped to access module's FIFOs. There is chance SDMA core is running and accessing BD when disable of corresponding channel, this may cause sometimes even after call of .sdma_disable_channel(), SDMA core still be running and accessing module's FIFOs. According to NXP R&D team a delay of one BD SDMA cost time (maximum is 1ms) should be added after disable of the channel bit, to ensure SDMA core has really been stopped after SDMA clients call .device_terminate_all. This patch introduces adds a new function sdma_disable_channel_with_delay() which simply adds 1ms delay after call sdma_disable_channel(), and set it as .device_terminate_all. Signed-off-by: Jiada Wang Signed-off-by: Vinod Koul Signed-off-by: Sasha Levin Signed-off-by: Greg Kroah-Hartman --- drivers/dma/imx-sdma.c | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) --- a/drivers/dma/imx-sdma.c +++ b/drivers/dma/imx-sdma.c @@ -911,6 +911,21 @@ static int sdma_disable_channel(struct d return 0; } +static int sdma_disable_channel_with_delay(struct dma_chan *chan) +{ + sdma_disable_channel(chan); + + /* + * According to NXP R&D team a delay of one BD SDMA cost time + * (maximum is 1ms) should be added after disable of the channel + * bit, to ensure SDMA core has really been stopped after SDMA + * clients call .device_terminate_all. + */ + mdelay(1); + + return 0; +} + static void sdma_set_watermarklevel_for_p2p(struct sdma_channel *sdmac) { struct sdma_engine *sdma = sdmac->sdma; @@ -1793,7 +1808,7 @@ static int sdma_probe(struct platform_de sdma->dma_device.device_prep_slave_sg = sdma_prep_slave_sg; sdma->dma_device.device_prep_dma_cyclic = sdma_prep_dma_cyclic; sdma->dma_device.device_config = sdma_config; - sdma->dma_device.device_terminate_all = sdma_disable_channel; + sdma->dma_device.device_terminate_all = sdma_disable_channel_with_delay; sdma->dma_device.src_addr_widths = BIT(DMA_SLAVE_BUSWIDTH_4_BYTES); sdma->dma_device.dst_addr_widths = BIT(DMA_SLAVE_BUSWIDTH_4_BYTES); sdma->dma_device.directions = BIT(DMA_DEV_TO_MEM) | BIT(DMA_MEM_TO_DEV);