From nobody Thu Dec 18 07:49:15 2025 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 66501C77B76 for ; Sat, 15 Apr 2023 10:48:09 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230243AbjDOKsG (ORCPT ); Sat, 15 Apr 2023 06:48:06 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48430 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230091AbjDOKsD (ORCPT ); Sat, 15 Apr 2023 06:48:03 -0400 Received: from dfw.source.kernel.org (dfw.source.kernel.org [IPv6:2604:1380:4641:c500::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id B3148AF14; Sat, 15 Apr 2023 03:47:33 -0700 (PDT) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dfw.source.kernel.org (Postfix) with ESMTPS id 97FC061376; Sat, 15 Apr 2023 10:46:58 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 14E07C433D2; Sat, 15 Apr 2023 10:46:56 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1681555618; bh=R7SwTXxq4n6vsL5nvON8lNyUl7g6u9nqIP9ZCvDXMeQ=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Vm4+HXJ58/UX9/57jm4JxlWyQwuSKMa6I9jcjkcvoJQ9StIJw1dF21zYloiplq+Gb q+b9IDyjPBO8JigcByB7O8kLMQK9LUs9nOKtRi8yWpgiz9wJpsFpGUNhVKmtzkIEyi 40KVCO+BcwfgBT2fRRppdMIWLkBn6g2daqrvf/KGFTD3GSEclUhn4yUlMgcu4XWHdW M0mgpiM9IE9ILsV3oFylUOIR047zMb0a/jPCnd1WVeMe+GiO0Ty138VsE9p9hfgE7K h76r1vc8OjMGa6ExoOuoa/h6Yn61PETb0hlCYynTOUOyHjD1Jj0nOAA/IGxtVg9ThM 3kul41SlS7/sQ== From: Jisheng Zhang To: Eugeniy Paltsev , Vinod Koul Cc: dmaengine@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v2 01/11] dmaengine: dw-axi-dmac: fix reading register when runtime suspended Date: Sat, 15 Apr 2023 18:35:51 +0800 Message-Id: <20230415103601.2979-2-jszhang@kernel.org> X-Mailer: git-send-email 2.40.0 In-Reply-To: <20230415103601.2979-1-jszhang@kernel.org> References: <20230415103601.2979-1-jszhang@kernel.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" We should runtime resume the device before calling axi_chan_is_hw_enable(), otherwise we may see cpu aborts when accessing registers in axi_chan_is_hw_enable(). Signed-off-by: Jisheng Zhang --- drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c b/drivers/dma/d= w-axi-dmac/dw-axi-dmac-platform.c index 7f3a60e28e38..23a10dbdecb7 100644 --- a/drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c +++ b/drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c @@ -462,13 +462,17 @@ static void dw_axi_dma_synchronize(struct dma_chan *d= chan) =20 static int dma_chan_alloc_chan_resources(struct dma_chan *dchan) { + int ret; struct axi_dma_chan *chan =3D dchan_to_axi_dma_chan(dchan); =20 + pm_runtime_get(chan->chip->dev); + /* ASSERT: channel is idle */ if (axi_chan_is_hw_enable(chan)) { dev_err(chan2dev(chan), "%s is non-idle!\n", axi_chan_name(chan)); - return -EBUSY; + ret =3D -EBUSY; + goto err_busy; } =20 /* LLI address must be aligned to a 64-byte boundary */ @@ -478,13 +482,16 @@ static int dma_chan_alloc_chan_resources(struct dma_c= han *dchan) 64, 0); if (!chan->desc_pool) { dev_err(chan2dev(chan), "No memory for descriptors\n"); - return -ENOMEM; + ret =3D -ENOMEM; + goto err_busy; } dev_vdbg(dchan2dev(dchan), "%s: allocating\n", axi_chan_name(chan)); =20 - pm_runtime_get(chan->chip->dev); - return 0; + +err_busy: + pm_runtime_put(chan->chip->dev); + return ret; } =20 static void dma_chan_free_chan_resources(struct dma_chan *dchan) --=20 2.39.2 From nobody Thu Dec 18 07:49:15 2025 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 0F41AC77B76 for ; Sat, 15 Apr 2023 10:49:14 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230461AbjDOKtM (ORCPT ); Sat, 15 Apr 2023 06:49:12 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48796 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230364AbjDOKsc (ORCPT ); Sat, 15 Apr 2023 06:48:32 -0400 Received: from dfw.source.kernel.org (dfw.source.kernel.org [139.178.84.217]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 66CD59ED5; Sat, 15 Apr 2023 03:48:03 -0700 (PDT) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dfw.source.kernel.org (Postfix) with ESMTPS id 01B2E60A47; Sat, 15 Apr 2023 10:47:00 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 70B6AC433EF; Sat, 15 Apr 2023 10:46:58 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1681555619; bh=18h7yJ4dungwOKffwnbsdGXL7tiydULOEDbCcZ66iBs=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=cyAvtD+Suf4/SUkan//MnSBSdyqeFc0SonNaw8cHANd/q6xFnbtfbXkNq3L/DSIdC 02a/m4s1pGiCiRiyGt8mr9mShw4DmlXKrkyZ1Maw5wGstS3AGB/POejilB/aYwzV7F Z5eDVmdxlHL0+wVaBtZGiFvl+pAdOrfJWqlzicZw98O9j+nRyvZ3bA9ELMvn8xxydx 0Kyu5wCQcJTRqfU4KTt0s/69NzQ3oaXJaXH6REqYFdYp5XeXU4+Fgb/6/RHUlxDhjK mMwPLTwOA3ClxowjcZntLdLbkPPgiDdj/kDJZv7WgVGljcUrw+1DnacvxBxZNwuspD wtufttvDj0ozw== From: Jisheng Zhang To: Eugeniy Paltsev , Vinod Koul Cc: dmaengine@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v2 02/11] dmaengine: dw-axi-dmac: remove unnecessary devm_free_irq() calling Date: Sat, 15 Apr 2023 18:35:52 +0800 Message-Id: <20230415103601.2979-3-jszhang@kernel.org> X-Mailer: git-send-email 2.40.0 In-Reply-To: <20230415103601.2979-1-jszhang@kernel.org> References: <20230415103601.2979-1-jszhang@kernel.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" In dw_remove(), We have disabled the irq from the dw-axi-dma side, so we are safe against the case "The irq is still ON when devices remove is executed and irq should be quiesced before remove is completed." Signed-off-by: Jisheng Zhang --- drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c b/drivers/dma/d= w-axi-dmac/dw-axi-dmac-platform.c index 23a10dbdecb7..56f12dfa410d 100644 --- a/drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c +++ b/drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c @@ -1542,8 +1542,6 @@ static int dw_remove(struct platform_device *pdev) pm_runtime_disable(chip->dev); axi_dma_suspend(chip); =20 - devm_free_irq(chip->dev, chip->irq, chip); - of_dma_controller_free(chip->dev->of_node); =20 list_for_each_entry_safe(chan, _chan, &dw->dma.channels, --=20 2.39.2 From nobody Thu Dec 18 07:49:15 2025 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 14AB7C7619A for ; Sat, 15 Apr 2023 10:49:16 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230491AbjDOKtP (ORCPT ); Sat, 15 Apr 2023 06:49:15 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48908 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230329AbjDOKs1 (ORCPT ); Sat, 15 Apr 2023 06:48:27 -0400 Received: from dfw.source.kernel.org (dfw.source.kernel.org [139.178.84.217]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 192E89EE5; Sat, 15 Apr 2023 03:47:55 -0700 (PDT) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dfw.source.kernel.org (Postfix) with ESMTPS id 60E6861579; Sat, 15 Apr 2023 10:47:01 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id CD443C4339C; Sat, 15 Apr 2023 10:46:59 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1681555620; bh=/WoZ1V3BfTduJ79xfQ4OOwggeNMcUtHeDcPNMKwKbuk=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=WP8CTQVnMcRN7Gd9IuLqyX+rnXcuhpFrbyhjqGPPcCx3cq8kAFDEVn3ClbJWCE89W 0VO8wRRGES8um3pGV3K2Jr4IWaIV6SKrNRUgTAs/5J0XRTXqThjua/0t/tgr6D7QZh JlCBWUIvKstKElPZnSc7EyDpkDXCzK2q4EOw2gWEGTA+cNeQgjNYh/z0nMr2LmCQdL dxAAmPf3+a8Q2TBzioejCjNCFBCEy5DgEL3ggzHdz6jlBQBSYShMpOyDCPgG4VYnph nRPfLq9P29AmTZb6Z+urSCPamJ1idiwMaxK/uylnRfCaBGX+xMZCDWWoX3z0V5SnJq QsLvv909eF1Cw== From: Jisheng Zhang To: Eugeniy Paltsev , Vinod Koul Cc: dmaengine@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v2 03/11] dmaengine: dw-axi-dmac: remove unnecessary axi_dma_enable() calling Date: Sat, 15 Apr 2023 18:35:53 +0800 Message-Id: <20230415103601.2979-4-jszhang@kernel.org> X-Mailer: git-send-email 2.40.0 In-Reply-To: <20230415103601.2979-1-jszhang@kernel.org> References: <20230415103601.2979-1-jszhang@kernel.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" The dma is enabled, I.E runtime resumed during chan allocation, and is disable, I.E runtime suspended during chan free. So when starting xfer, we are sure the dma is enabled. Signed-off-by: Jisheng Zhang --- drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c b/drivers/dma/d= w-axi-dmac/dw-axi-dmac-platform.c index 56f12dfa410d..891776528619 100644 --- a/drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c +++ b/drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c @@ -382,8 +382,6 @@ static void axi_chan_block_xfer_start(struct axi_dma_ch= an *chan, return; } =20 - axi_dma_enable(chan->chip); - config.dst_multblk_type =3D DWAXIDMAC_MBLK_TYPE_LL; config.src_multblk_type =3D DWAXIDMAC_MBLK_TYPE_LL; config.tt_fc =3D DWAXIDMAC_TT_FC_MEM_TO_MEM_DMAC; --=20 2.39.2 From nobody Thu Dec 18 07:49:15 2025 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id BD55CC77B71 for ; Sat, 15 Apr 2023 10:48:34 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230418AbjDOKsd (ORCPT ); Sat, 15 Apr 2023 06:48:33 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48590 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230270AbjDOKsZ (ORCPT ); Sat, 15 Apr 2023 06:48:25 -0400 Received: from dfw.source.kernel.org (dfw.source.kernel.org [139.178.84.217]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id BDF1C5B8F; Sat, 15 Apr 2023 03:47:48 -0700 (PDT) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dfw.source.kernel.org (Postfix) with ESMTPS id B561C61507; Sat, 15 Apr 2023 10:47:02 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 351C0C4339B; Sat, 15 Apr 2023 10:47:01 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1681555622; bh=ENZtAgALgDJDO8hev1y4VgaaMjTikYo2GFGPd/DEQvI=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=XAF7qx4JrtcHyhaFEp7ikvdsy6COz8YurVUDZLwMr9GPJEVWEfmV61SBBABqA12KX 9VKYKynB3OnWebjl7+VW76ZbWbODbjgnAu3aWZuRdPFFDQIHw+7JNmFVkiVqaQI8E0 hy+3Pbq+57Nh1/BPgd+HALDjDVCNnn4xSZRoq9FlGuCT4tPGMqfIS1rs7/MLX21UxT LYII+VVPF+UqjM47vbWg0rNuygNjY+8XtAYrcTVUup2pGqZothVSagljOd23MeG7L2 vqJ83FVxiUHdKuW3GXNNffkPDuRBwKvz6IeTvDFqvzqInU2sVIM2S/aojD0+o2QuK1 VuAgz+++LDM6w== From: Jisheng Zhang To: Eugeniy Paltsev , Vinod Koul Cc: dmaengine@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v2 04/11] dmaengine: dw-axi-dmac: remove redundant axi_dma_disable() calling Date: Sat, 15 Apr 2023 18:35:54 +0800 Message-Id: <20230415103601.2979-5-jszhang@kernel.org> X-Mailer: git-send-email 2.40.0 In-Reply-To: <20230415103601.2979-1-jszhang@kernel.org> References: <20230415103601.2979-1-jszhang@kernel.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" axi_dma_suspend() will soon call axi_dma_disable(), remove the redundant axi_dma_disable() callin. Signed-off-by: Jisheng Zhang --- drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c | 1 - 1 file changed, 1 deletion(-) diff --git a/drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c b/drivers/dma/d= w-axi-dmac/dw-axi-dmac-platform.c index 891776528619..410222e7224c 100644 --- a/drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c +++ b/drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c @@ -1535,7 +1535,6 @@ static int dw_remove(struct platform_device *pdev) axi_chan_disable(&chip->dw->chan[i]); axi_chan_irq_disable(&chip->dw->chan[i], DWAXIDMAC_IRQ_ALL); } - axi_dma_disable(chip); =20 pm_runtime_disable(chip->dev); axi_dma_suspend(chip); --=20 2.39.2 From nobody Thu Dec 18 07:49:15 2025 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id DB802C77B76 for ; Sat, 15 Apr 2023 10:49:30 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230387AbjDOKt3 (ORCPT ); Sat, 15 Apr 2023 06:49:29 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48496 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230385AbjDOKtI (ORCPT ); Sat, 15 Apr 2023 06:49:08 -0400 Received: from dfw.source.kernel.org (dfw.source.kernel.org [139.178.84.217]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id EF9088691; Sat, 15 Apr 2023 03:48:40 -0700 (PDT) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dfw.source.kernel.org (Postfix) with ESMTPS id 22CF4617D4; Sat, 15 Apr 2023 10:47:04 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 919D8C4339C; Sat, 15 Apr 2023 10:47:02 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1681555623; bh=Wq9HdywcRzw2m/st4OKSeu8XmLXjFD1NNFfAN6itaz4=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=e1V1Glt+7qP0DuKq0r9iCQFfwK+4c4koQxWYQQB3BhE1vLCWuNR6VCP0ez+35Lape Cc/tFcbYQYFEpoiQGedC/z/f2P+NScvijDQyvZe6VckFMvPcFTuj45zhHzzAWInmc2 7ng45PY8VTZPKuJTsn9lKIethfa/fF4KwWGMmA+I8rA3YF70Xr60jKd2izA8GwlNlR JSnGvIhRC1uvn3+jinujgR6R+654mW6BKj43u4iBul8+71k3g8I9fC0WHXxtF/sM+9 b7As7vusHOcTLE0vZ+lrDRVtMSbTjHiLXdSDJ1s0ViHDIgjwpLTGQ1LjiH3TRjV2vu jbylsVKmQhn6g== From: Jisheng Zhang To: Eugeniy Paltsev , Vinod Koul Cc: dmaengine@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v2 05/11] dmaengine: dw-axi-dmac: delay irq getting until request_irq Date: Sat, 15 Apr 2023 18:35:55 +0800 Message-Id: <20230415103601.2979-6-jszhang@kernel.org> X-Mailer: git-send-email 2.40.0 In-Reply-To: <20230415103601.2979-1-jszhang@kernel.org> References: <20230415103601.2979-1-jszhang@kernel.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" This is to prepare for per-channel irq support in next patch. In per-channel irq case, we need to parse dt firstly to know whether the platform is per-channel irq or not. Signed-off-by: Jisheng Zhang --- drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c b/drivers/dma/d= w-axi-dmac/dw-axi-dmac-platform.c index 410222e7224c..6087fb7d567a 100644 --- a/drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c +++ b/drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c @@ -1395,10 +1395,6 @@ static int dw_probe(struct platform_device *pdev) chip->dev =3D &pdev->dev; chip->dw->hdata =3D hdata; =20 - chip->irq =3D platform_get_irq(pdev, 0); - if (chip->irq < 0) - return chip->irq; - chip->regs =3D devm_platform_ioremap_resource(pdev, 0); if (IS_ERR(chip->regs)) return PTR_ERR(chip->regs); @@ -1426,6 +1422,10 @@ static int dw_probe(struct platform_device *pdev) if (!dw->chan) return -ENOMEM; =20 + chip->irq =3D platform_get_irq(pdev, 0); + if (chip->irq < 0) + return chip->irq; + ret =3D devm_request_irq(chip->dev, chip->irq, dw_axi_dma_interrupt, IRQF_SHARED, KBUILD_MODNAME, chip); if (ret) --=20 2.39.2 From nobody Thu Dec 18 07:49:15 2025 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 863D1C77B77 for ; Sat, 15 Apr 2023 10:49:32 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229549AbjDOKtb (ORCPT ); Sat, 15 Apr 2023 06:49:31 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48500 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230467AbjDOKtI (ORCPT ); Sat, 15 Apr 2023 06:49:08 -0400 Received: from dfw.source.kernel.org (dfw.source.kernel.org [139.178.84.217]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 01D421A5; Sat, 15 Apr 2023 03:48:41 -0700 (PDT) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dfw.source.kernel.org (Postfix) with ESMTPS id 83881617DC; Sat, 15 Apr 2023 10:47:05 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id EFA98C4339B; Sat, 15 Apr 2023 10:47:03 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1681555624; bh=X0v6md0ShrzygWDpZi0pa8rfM30TOG9ETPBgqjPAHbo=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=T6CMvl6ic67rJ9fk5P7QINVFIWza30v0pJhTUJ776WxC4ymOf25G00vG9xBTW1n5I G0tisLndvMwCOVMi/6bzCJW633NGY3pKfl4hhmkQqg4ReNYyqbvggVbtYuHqEf3f9d g8qilRRTGR5nJ3dglEguHUEbUHXP/WFd8JeyPQBvAol0FkQnOJSUnAWG4fVQtjlYm5 vQ/0XhI1VDR7i3eP8wUpTAjQXt5GPW276iKky9X1hn0j4sjCw5JgW2dtZ53Jr6cqXb uEY5rEDs20DVK/2LGQWckSxxXp8s0a20C/nP1UrfpGV1wIwPpMbGNfUrsRvcGpEILS VBO/lFMFPxeUg== From: Jisheng Zhang To: Eugeniy Paltsev , Vinod Koul Cc: dmaengine@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v2 06/11] dmaengine: dw-axi-dmac: move ch irq handling into common routine Date: Sat, 15 Apr 2023 18:35:56 +0800 Message-Id: <20230415103601.2979-7-jszhang@kernel.org> X-Mailer: git-send-email 2.40.0 In-Reply-To: <20230415103601.2979-1-jszhang@kernel.org> References: <20230415103601.2979-1-jszhang@kernel.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" In next patch, we will add per-channel irq support, we will use the common routine in per-channel irq handler. Signed-off-by: Jisheng Zhang --- .../dma/dw-axi-dmac/dw-axi-dmac-platform.c | 30 ++++++++++++------- 1 file changed, 19 insertions(+), 11 deletions(-) diff --git a/drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c b/drivers/dma/d= w-axi-dmac/dw-axi-dmac-platform.c index 6087fb7d567a..796fd0136781 100644 --- a/drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c +++ b/drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c @@ -1101,13 +1101,30 @@ static void axi_chan_block_xfer_complete(struct axi= _dma_chan *chan) spin_unlock_irqrestore(&chan->vc.lock, flags); } =20 +static void dw_axi_dma_handle_ch(struct axi_dma_chan *chan) +{ + u32 status; + + /* Poll, clear and process this channel interrupt status */ + status =3D axi_chan_irq_read(chan); + axi_chan_irq_clear(chan, status); + + dev_vdbg(chan->chip->dev, "%s IRQ status: 0x%08x\n", axi_chan_name(chan),= status); + + if (status & DWAXIDMAC_IRQ_ALL_ERR) + axi_chan_handle_err(chan, status); + else if (status & DWAXIDMAC_IRQ_DMA_TRF) + axi_chan_block_xfer_complete(chan); + +} + static irqreturn_t dw_axi_dma_interrupt(int irq, void *dev_id) { struct axi_dma_chip *chip =3D dev_id; struct dw_axi_dma *dw =3D chip->dw; struct axi_dma_chan *chan; =20 - u32 status, i; + u32 i; =20 /* Disable DMAC interrupts. We'll enable them after processing channels */ axi_dma_irq_disable(chip); @@ -1115,16 +1132,7 @@ static irqreturn_t dw_axi_dma_interrupt(int irq, voi= d *dev_id) /* Poll, clear and process every channel interrupt status */ for (i =3D 0; i < dw->hdata->nr_channels; i++) { chan =3D &dw->chan[i]; - status =3D axi_chan_irq_read(chan); - axi_chan_irq_clear(chan, status); - - dev_vdbg(chip->dev, "%s %u IRQ status: 0x%08x\n", - axi_chan_name(chan), i, status); - - if (status & DWAXIDMAC_IRQ_ALL_ERR) - axi_chan_handle_err(chan, status); - else if (status & DWAXIDMAC_IRQ_DMA_TRF) - axi_chan_block_xfer_complete(chan); + dw_axi_dma_handle_ch(chan); } =20 /* Re-enable interrupts */ --=20 2.39.2 From nobody Thu Dec 18 07:49:15 2025 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 1A6A7C7619A for ; Sat, 15 Apr 2023 10:50:06 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230371AbjDOKtq (ORCPT ); Sat, 15 Apr 2023 06:49:46 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:49260 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230400AbjDOKtY (ORCPT ); Sat, 15 Apr 2023 06:49:24 -0400 Received: from dfw.source.kernel.org (dfw.source.kernel.org [139.178.84.217]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id E74F2B45A; Sat, 15 Apr 2023 03:49:02 -0700 (PDT) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dfw.source.kernel.org (Postfix) with ESMTPS id DD95B617CB; Sat, 15 Apr 2023 10:47:06 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 59C93C4339E; Sat, 15 Apr 2023 10:47:05 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1681555626; bh=BENT+Gyh2C5823xlOfoa81398QX+6CAqsChvkHIBGOc=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=G9Z09GtImEFma9YsVLp8pqsVAXgSSZeb7PK9XDKvDsX/8TNFRMF64iQ7FuSF7C4B/ /EVWJi9OkaXJ+s2avyrsGmbV1c1jHD48WR4+HdyXnCwlhdbun3IVXtUT1FpF8/u6Qu 8RMPfSEk7vWmejNwXe2i0+oowX5qAxIHllQ7TI9/Ejd1DlMqTRSaskehElLrlW8htx teYYhZ0HjNcuadIzAuackkhVZYhgYlmF/vsdrAejSlZQUesc0E1vqQ+M+XQXMX7Hf8 oIqQdxNB4c9PnvF3Ur182weJ+zJg5TyriBlMIrVEL3on5rYytMqJDppcntFO2E94iu B0H/mCqV1IC+g== From: Jisheng Zhang To: Eugeniy Paltsev , Vinod Koul Cc: dmaengine@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v2 07/11] dmaengine: dw-axi-dmac: support per channel irq Date: Sat, 15 Apr 2023 18:35:57 +0800 Message-Id: <20230415103601.2979-8-jszhang@kernel.org> X-Mailer: git-send-email 2.40.0 In-Reply-To: <20230415103601.2979-1-jszhang@kernel.org> References: <20230415103601.2979-1-jszhang@kernel.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Each channel can have its own irq, support this case. Signed-off-by: Jisheng Zhang --- .../dma/dw-axi-dmac/dw-axi-dmac-platform.c | 48 +++++++++++++++---- drivers/dma/dw-axi-dmac/dw-axi-dmac.h | 2 + 2 files changed, 42 insertions(+), 8 deletions(-) diff --git a/drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c b/drivers/dma/d= w-axi-dmac/dw-axi-dmac-platform.c index 796fd0136781..edb1c089a8eb 100644 --- a/drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c +++ b/drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c @@ -1141,6 +1141,21 @@ static irqreturn_t dw_axi_dma_interrupt(int irq, voi= d *dev_id) return IRQ_HANDLED; } =20 +static irqreturn_t dw_axi_dma_ch_interrupt(int irq, void *dev_id) +{ + struct axi_dma_chan *chan =3D dev_id; + + /* Disable DMAC interrupts. We'll enable them after processing channels */ + axi_chan_irq_sig_set(chan, DWAXIDMAC_IRQ_NONE); + + dw_axi_dma_handle_ch(chan); + + /* Re-enable interrupts */ + axi_chan_irq_sig_set(chan, DWAXIDMAC_IRQ_DMA_TRF | DWAXIDMAC_IRQ_ALL_ERR); + + return IRQ_HANDLED; +} + static int dma_chan_terminate_all(struct dma_chan *dchan) { struct axi_dma_chan *chan =3D dchan_to_axi_dma_chan(dchan); @@ -1375,6 +1390,8 @@ static int parse_device_properties(struct axi_dma_chi= p *chip) chip->dw->hdata->axi_rw_burst_len =3D tmp; } =20 + chip->dw->hdata->perch_irq =3D device_property_read_bool(dev, "snps,perch= _irq"); + return 0; } =20 @@ -1430,14 +1447,29 @@ static int dw_probe(struct platform_device *pdev) if (!dw->chan) return -ENOMEM; =20 - chip->irq =3D platform_get_irq(pdev, 0); - if (chip->irq < 0) - return chip->irq; - - ret =3D devm_request_irq(chip->dev, chip->irq, dw_axi_dma_interrupt, - IRQF_SHARED, KBUILD_MODNAME, chip); - if (ret) - return ret; + if (hdata->perch_irq) { + char irqname[8]; + for (i =3D 0; i < hdata->nr_channels; i++) { + snprintf(irqname, sizeof(irqname), "ch%u", i); + dw->chan[i].irq =3D platform_get_irq_byname(pdev, irqname); + if (dw->chan[i].irq < 0) + return dw->chan[i].irq; + ret =3D devm_request_irq(chip->dev, dw->chan[i].irq, + dw_axi_dma_ch_interrupt, + 0, KBUILD_MODNAME, &dw->chan[i]); + if (ret) + return ret; + } + } else { + chip->irq =3D platform_get_irq(pdev, 0); + if (chip->irq < 0) + return chip->irq; + + ret =3D devm_request_irq(chip->dev, chip->irq, dw_axi_dma_interrupt, + IRQF_SHARED, KBUILD_MODNAME, chip); + if (ret) + return ret; + } =20 INIT_LIST_HEAD(&dw->dma.channels); for (i =3D 0; i < hdata->nr_channels; i++) { diff --git a/drivers/dma/dw-axi-dmac/dw-axi-dmac.h b/drivers/dma/dw-axi-dma= c/dw-axi-dmac.h index e9d5eb0fd594..83ac839b4394 100644 --- a/drivers/dma/dw-axi-dmac/dw-axi-dmac.h +++ b/drivers/dma/dw-axi-dmac/dw-axi-dmac.h @@ -33,6 +33,7 @@ struct dw_axi_dma_hcfg { /* Register map for DMAX_NUM_CHANNELS <=3D 8 */ bool reg_map_8_channels; bool restrict_axi_burst_len; + bool perch_irq; }; =20 struct axi_dma_chan { @@ -48,6 +49,7 @@ struct axi_dma_chan { struct axi_dma_desc *desc; struct dma_slave_config config; enum dma_transfer_direction direction; + int irq; bool cyclic; /* these other elements are all protected by vc.lock */ bool is_paused; --=20 2.39.2 From nobody Thu Dec 18 07:49:15 2025 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id B9446C77B71 for ; Sat, 15 Apr 2023 10:49:09 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229922AbjDOKtI (ORCPT ); Sat, 15 Apr 2023 06:49:08 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48850 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230374AbjDOKsl (ORCPT ); Sat, 15 Apr 2023 06:48:41 -0400 Received: from dfw.source.kernel.org (dfw.source.kernel.org [IPv6:2604:1380:4641:c500::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id A9829B744; Sat, 15 Apr 2023 03:48:12 -0700 (PDT) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dfw.source.kernel.org (Postfix) with ESMTPS id 47672617FF; Sat, 15 Apr 2023 10:47:08 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id B704EC4339C; Sat, 15 Apr 2023 10:47:06 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1681555627; bh=LTJK1Q5mjYuDFo6XOCu0Yts3P4bL4yj+TgvZBGYtFVU=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=gdZW/ZuhG1ASyVO9oD/yhp9ZLkWIN2kh6VfeVBEt4CdQlCS/1D2bDP1Oy0qt+2/tb FWwTHFl1wSU+E2NsBdhnL+F4/2MAybrDoZDpU67z8HnKmw5W7kLhoRpwU0sn3joU8F /n/0KSYp6+xiu38JQpNwsrt0HYdbM25mKStbetNbdkyAkOONhrM/DM4HBpnNO/t0EK qjt/tK8h862BPxDoJFaa9qveL7d2eTKx/spljXqar9rac0ARrkS+556gHJtLWs1Mao IHsmqz5x97E6Qjxqcenpj3/zsrbjWJRZMlVrOKlJ6ILNTMraVau0nWNBEgAtD+NRDj uOY18tNX00EEg== From: Jisheng Zhang To: Eugeniy Paltsev , Vinod Koul Cc: dmaengine@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v2 08/11] dmaengine: dw-axi-dmac: support dma-channel-mask Date: Sat, 15 Apr 2023 18:35:58 +0800 Message-Id: <20230415103601.2979-9-jszhang@kernel.org> X-Mailer: git-send-email 2.40.0 In-Reply-To: <20230415103601.2979-1-jszhang@kernel.org> References: <20230415103601.2979-1-jszhang@kernel.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Some dma channels may not be available, so we need to tell the driver the available dma channels, use the general dt binding "dma-channel-mask" for this purpose. Signed-off-by: Jisheng Zhang --- .../dma/dw-axi-dmac/dw-axi-dmac-platform.c | 19 +++++++++++++++++++ drivers/dma/dw-axi-dmac/dw-axi-dmac.h | 1 + 2 files changed, 20 insertions(+) diff --git a/drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c b/drivers/dma/d= w-axi-dmac/dw-axi-dmac-platform.c index edb1c089a8eb..a6e46cb66000 100644 --- a/drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c +++ b/drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c @@ -216,6 +216,8 @@ static void axi_dma_hw_init(struct axi_dma_chip *chip) u32 i; =20 for (i =3D 0; i < chip->dw->hdata->nr_channels; i++) { + if (!(chip->dw->hdata->channels_mask & (1 << i))) + continue; axi_chan_irq_disable(&chip->dw->chan[i], DWAXIDMAC_IRQ_ALL); axi_chan_disable(&chip->dw->chan[i]); } @@ -1390,6 +1392,14 @@ static int parse_device_properties(struct axi_dma_ch= ip *chip) chip->dw->hdata->axi_rw_burst_len =3D tmp; } =20 + /* + * Use all channels if there's no dma-channel-mask property + */ + ret =3D device_property_read_u32(dev, "dma-channel-mask", &tmp); + if (ret) + tmp =3D GENMASK(chip->dw->hdata->nr_channels - 1, 0); + chip->dw->hdata->channels_mask =3D tmp; + chip->dw->hdata->perch_irq =3D device_property_read_bool(dev, "snps,perch= _irq"); =20 return 0; @@ -1450,6 +1460,10 @@ static int dw_probe(struct platform_device *pdev) if (hdata->perch_irq) { char irqname[8]; for (i =3D 0; i < hdata->nr_channels; i++) { + if (!(hdata->channels_mask & (1 << i))) { + dw->chan[i].irq =3D -1; + continue; + } snprintf(irqname, sizeof(irqname), "ch%u", i); dw->chan[i].irq =3D platform_get_irq_byname(pdev, irqname); if (dw->chan[i].irq < 0) @@ -1475,6 +1489,9 @@ static int dw_probe(struct platform_device *pdev) for (i =3D 0; i < hdata->nr_channels; i++) { struct axi_dma_chan *chan =3D &dw->chan[i]; =20 + if (!(hdata->channels_mask & (1 << i))) + continue; + chan->chip =3D chip; chan->id =3D i; chan->chan_regs =3D chip->regs + COMMON_REG_LEN + i * CHAN_REG_LEN; @@ -1572,6 +1589,8 @@ static int dw_remove(struct platform_device *pdev) clk_prepare_enable(chip->core_clk); axi_dma_irq_disable(chip); for (i =3D 0; i < dw->hdata->nr_channels; i++) { + if (!(dw->hdata->channels_mask & (1 << i))) + continue; axi_chan_disable(&chip->dw->chan[i]); axi_chan_irq_disable(&chip->dw->chan[i], DWAXIDMAC_IRQ_ALL); } diff --git a/drivers/dma/dw-axi-dmac/dw-axi-dmac.h b/drivers/dma/dw-axi-dma= c/dw-axi-dmac.h index 83ac839b4394..f57961620d2d 100644 --- a/drivers/dma/dw-axi-dmac/dw-axi-dmac.h +++ b/drivers/dma/dw-axi-dmac/dw-axi-dmac.h @@ -30,6 +30,7 @@ struct dw_axi_dma_hcfg { u32 priority[DMAC_MAX_CHANNELS]; /* maximum supported axi burst length */ u32 axi_rw_burst_len; + u32 channels_mask; /* Register map for DMAX_NUM_CHANNELS <=3D 8 */ bool reg_map_8_channels; bool restrict_axi_burst_len; --=20 2.39.2 From nobody Thu Dec 18 07:49:15 2025 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 10225C7619A for ; Sat, 15 Apr 2023 10:50:14 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230009AbjDOKuM (ORCPT ); Sat, 15 Apr 2023 06:50:12 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:49344 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231133AbjDOKtw (ORCPT ); Sat, 15 Apr 2023 06:49:52 -0400 Received: from dfw.source.kernel.org (dfw.source.kernel.org [139.178.84.217]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 5F3894EF4; Sat, 15 Apr 2023 03:49:21 -0700 (PDT) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dfw.source.kernel.org (Postfix) with ESMTPS id ABDE5617E4; Sat, 15 Apr 2023 10:47:09 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 1FA17C433D2; Sat, 15 Apr 2023 10:47:07 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1681555629; bh=eA2ZxLGWNR6IdxbFmS127kxHvHFaTkPGETvRqPfSGHI=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=oZm1bHl7XW9SxEIIxUAftIHPOTtnfokBHFkTXliyMMm0VDJq0rS4/lb9Rsl65rgQv w/kF0nIlnI2ayXKT6YTcwti6KXBoP6YpssS7xQXh4K4ezaQ9FWfRbeFqVRSVGFm1c2 i7PCsG4PiOii528r5pJfKaPemJRou+sHlcWhstzi8FEcBJbpjflb5NHBEYTTSMKgTp fUqsA82F/Q1KGdXYQstbf0DUXyim6zw8KbETAK8p5QAl5WmqWFpB1NbjyWJ9w/oOHL IXCBMOzDrTx/XypzjjKxQ/2Uyb5tEZdow9cTx8cYeFA0kiX0CgCP8Z92G5ezcjC/LF RV8LGYwuN8n8Q== From: Jisheng Zhang To: Eugeniy Paltsev , Vinod Koul Cc: dmaengine@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v2 09/11] dmaengine: dw-axi-dmac: try best to get residue when tx is running Date: Sat, 15 Apr 2023 18:35:59 +0800 Message-Id: <20230415103601.2979-10-jszhang@kernel.org> X-Mailer: git-send-email 2.40.0 In-Reply-To: <20230415103601.2979-1-jszhang@kernel.org> References: <20230415103601.2979-1-jszhang@kernel.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" When tx is running, vchan_find_desc() will return NULL, try our best to get the residue in this case. Signed-off-by: Jisheng Zhang --- drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c b/drivers/dma/d= w-axi-dmac/dw-axi-dmac-platform.c index a6e46cb66000..1c1b9574985a 100644 --- a/drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c +++ b/drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c @@ -305,6 +305,7 @@ dma_chan_tx_status(struct dma_chan *dchan, dma_cookie_t= cookie, struct dma_tx_state *txstate) { struct axi_dma_chan *chan =3D dchan_to_axi_dma_chan(dchan); + struct axi_dma_desc *desc =3D NULL; struct virt_dma_desc *vdesc; enum dma_status status; u32 completed_length; @@ -322,9 +323,15 @@ dma_chan_tx_status(struct dma_chan *dchan, dma_cookie_= t cookie, =20 vdesc =3D vchan_find_desc(&chan->vc, cookie); if (vdesc) { - length =3D vd_to_axi_desc(vdesc)->length; - completed_blocks =3D vd_to_axi_desc(vdesc)->completed_blocks; - len =3D vd_to_axi_desc(vdesc)->hw_desc[0].len; + desc =3D vd_to_axi_desc(vdesc); + } else if (chan->desc && chan->desc->vd.tx.cookie =3D=3D cookie) { + desc =3D chan->desc; + } + + if (desc) { + length =3D desc->length; + completed_blocks =3D desc->completed_blocks; + len =3D desc->hw_desc[0].len; completed_length =3D completed_blocks * len; bytes =3D length - completed_length; } @@ -425,6 +432,7 @@ static void axi_chan_block_xfer_start(struct axi_dma_ch= an *chan, axi_chan_irq_set(chan, irq_mask); =20 axi_chan_enable(chan); + chan->desc =3D first; } =20 static void axi_chan_start_first_queued(struct axi_dma_chan *chan) @@ -1188,6 +1196,7 @@ static int dma_chan_terminate_all(struct dma_chan *dc= han) spin_unlock_irqrestore(&chan->vc.lock, flags); =20 vchan_dma_desc_free_list(&chan->vc, &head); + chan->desc =3D NULL; =20 dev_vdbg(dchan2dev(dchan), "terminated: %s\n", axi_chan_name(chan)); =20 --=20 2.39.2 From nobody Thu Dec 18 07:49:15 2025 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id E7F19C77B79 for ; Sat, 15 Apr 2023 10:50:09 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229799AbjDOKuJ (ORCPT ); Sat, 15 Apr 2023 06:50:09 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:50478 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230477AbjDOKts (ORCPT ); Sat, 15 Apr 2023 06:49:48 -0400 Received: from dfw.source.kernel.org (dfw.source.kernel.org [139.178.84.217]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id BA3D0AD38; Sat, 15 Apr 2023 03:49:16 -0700 (PDT) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dfw.source.kernel.org (Postfix) with ESMTPS id 0CA8E6181A; Sat, 15 Apr 2023 10:47:11 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 7C736C433A0; Sat, 15 Apr 2023 10:47:09 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1681555630; bh=iP3PWNMb+3tRizoMnR4yxUHqhZ9zp9+fFtQ/nNwpumk=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=oXv9uxLoVAr5ls6Itb9ugVt6EB+K6BCBXT7RN0PxBJLTg+66ybFQQ1jFYQ1TO0/MM omLfs4DzjLDpB2WoqGB3JnobfDeKTy550Oe/j2+UwSd3I91k7w0rESggsyZ4MnmlP+ PA2fUX9pcdhwYvkcfBNEH5oipviz2Co8/7FGQyC9bggD6eWcfDp/sANzoYMaeStURO 1dya3nwzGf4S82qColc98e+f2n9pYmYmgqFce2u19PJTKaQT91cnlJuYwXV4BPq+Ic mxEIuZWj9025ERpBEGYoC4qwVOjn0uU1aiiO5NbgKqdnhpbPzErEIWoweE8VDMc1VW iL4C1FayMlZXQ== From: Jisheng Zhang To: Eugeniy Paltsev , Vinod Koul Cc: dmaengine@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v2 10/11] dmaengine: dw-axi-dmac: move dma_chan_tx_status() Date: Sat, 15 Apr 2023 18:36:00 +0800 Message-Id: <20230415103601.2979-11-jszhang@kernel.org> X-Mailer: git-send-email 2.40.0 In-Reply-To: <20230415103601.2979-1-jszhang@kernel.org> References: <20230415103601.2979-1-jszhang@kernel.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" We will add polled support soon, for which we need to call dw_axi_dma_handle_ch() in dma_chan_tx_status(). Move the function to avoid pre-declaration. No functionality changes. Signed-off-by: Jisheng Zhang --- .../dma/dw-axi-dmac/dw-axi-dmac-platform.c | 84 +++++++++---------- 1 file changed, 42 insertions(+), 42 deletions(-) diff --git a/drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c b/drivers/dma/d= w-axi-dmac/dw-axi-dmac-platform.c index 1c1b9574985a..1d00793a83bf 100644 --- a/drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c +++ b/drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c @@ -300,48 +300,6 @@ static void vchan_desc_put(struct virt_dma_desc *vdesc) axi_desc_put(vd_to_axi_desc(vdesc)); } =20 -static enum dma_status -dma_chan_tx_status(struct dma_chan *dchan, dma_cookie_t cookie, - struct dma_tx_state *txstate) -{ - struct axi_dma_chan *chan =3D dchan_to_axi_dma_chan(dchan); - struct axi_dma_desc *desc =3D NULL; - struct virt_dma_desc *vdesc; - enum dma_status status; - u32 completed_length; - unsigned long flags; - u32 completed_blocks; - size_t bytes =3D 0; - u32 length; - u32 len; - - status =3D dma_cookie_status(dchan, cookie, txstate); - if (status =3D=3D DMA_COMPLETE || !txstate) - return status; - - spin_lock_irqsave(&chan->vc.lock, flags); - - vdesc =3D vchan_find_desc(&chan->vc, cookie); - if (vdesc) { - desc =3D vd_to_axi_desc(vdesc); - } else if (chan->desc && chan->desc->vd.tx.cookie =3D=3D cookie) { - desc =3D chan->desc; - } - - if (desc) { - length =3D desc->length; - completed_blocks =3D desc->completed_blocks; - len =3D desc->hw_desc[0].len; - completed_length =3D completed_blocks * len; - bytes =3D length - completed_length; - } - - spin_unlock_irqrestore(&chan->vc.lock, flags); - dma_set_residue(txstate, bytes); - - return status; -} - static void write_desc_llp(struct axi_dma_hw_desc *desc, dma_addr_t adr) { desc->lli->llp =3D cpu_to_le64(adr); @@ -1166,6 +1124,48 @@ static irqreturn_t dw_axi_dma_ch_interrupt(int irq, = void *dev_id) return IRQ_HANDLED; } =20 +static enum dma_status +dma_chan_tx_status(struct dma_chan *dchan, dma_cookie_t cookie, + struct dma_tx_state *txstate) +{ + struct axi_dma_chan *chan =3D dchan_to_axi_dma_chan(dchan); + struct axi_dma_desc *desc =3D NULL; + struct virt_dma_desc *vdesc; + enum dma_status status; + u32 completed_length; + unsigned long flags; + u32 completed_blocks; + size_t bytes =3D 0; + u32 length; + u32 len; + + status =3D dma_cookie_status(dchan, cookie, txstate); + if (status =3D=3D DMA_COMPLETE || !txstate) + return status; + + spin_lock_irqsave(&chan->vc.lock, flags); + + vdesc =3D vchan_find_desc(&chan->vc, cookie); + if (vdesc) { + desc =3D vd_to_axi_desc(vdesc); + } else if (chan->desc && chan->desc->vd.tx.cookie =3D=3D cookie) { + desc =3D chan->desc; + } + + if (desc) { + length =3D desc->length; + completed_blocks =3D desc->completed_blocks; + len =3D desc->hw_desc[0].len; + completed_length =3D completed_blocks * len; + bytes =3D length - completed_length; + } + + spin_unlock_irqrestore(&chan->vc.lock, flags); + dma_set_residue(txstate, bytes); + + return status; +} + static int dma_chan_terminate_all(struct dma_chan *dchan) { struct axi_dma_chan *chan =3D dchan_to_axi_dma_chan(dchan); --=20 2.39.2 From nobody Thu Dec 18 07:49:15 2025 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id C1C15C7619A for ; Sat, 15 Apr 2023 10:50:16 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230167AbjDOKuP (ORCPT ); Sat, 15 Apr 2023 06:50:15 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:51038 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231255AbjDOKuE (ORCPT ); Sat, 15 Apr 2023 06:50:04 -0400 Received: from dfw.source.kernel.org (dfw.source.kernel.org [IPv6:2604:1380:4641:c500::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id D36737689; Sat, 15 Apr 2023 03:49:31 -0700 (PDT) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dfw.source.kernel.org (Postfix) with ESMTPS id 656D7617E9; Sat, 15 Apr 2023 10:47:12 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id D92CBC4339C; Sat, 15 Apr 2023 10:47:10 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1681555631; bh=do8+kPrEABA/+sArd48GuvtE5icgNiKsJ/7FNgFAelM=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=dporkX0WW0fhZFEVO/F2CASskX2d40MRRLEmFBG1IID+1LRE6lLfRquePq7Uq/g+4 fBDM8CehfHL1DswkW/cB8Ua53h5Qwih+GIsbNxWImA/ocQhZyBG2F8JoAfM7MnCTtO APoUUrCIMJ+M8XOYa3Ub122/btV/J/HRIVatMN/jQZVhKIQmzEfqk8xhxcHsiWPJA9 omQF8OYi6CrNh+NN7ocUCEP4Qf8qNFZe5bRNfaIjhFI1Cp9rPGkZWq1WR6VWnbArCl N/JEnLKc+RPHbx6ArQToBUniAVg+FDdvFuPgKQ4fP9IoPe7Cg3xj/wsSY3+iTDykrU ED0G3sj882wMQ== From: Jisheng Zhang To: Eugeniy Paltsev , Vinod Koul Cc: dmaengine@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v2 11/11] dmaengine: dw-axi-dmac: support polled mode Date: Sat, 15 Apr 2023 18:36:01 +0800 Message-Id: <20230415103601.2979-12-jszhang@kernel.org> X-Mailer: git-send-email 2.40.0 In-Reply-To: <20230415103601.2979-1-jszhang@kernel.org> References: <20230415103601.2979-1-jszhang@kernel.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Run in polled mode if the DMA_PREP_INTERRUPT flag is not provided. Signed-off-by: Jisheng Zhang --- drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c | 11 ++++++++++- drivers/dma/dw-axi-dmac/dw-axi-dmac.h | 1 + 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c b/drivers/dma/d= w-axi-dmac/dw-axi-dmac-platform.c index 1d00793a83bf..8daeb22d4560 100644 --- a/drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c +++ b/drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c @@ -383,7 +383,10 @@ static void axi_chan_block_xfer_start(struct axi_dma_c= han *chan, write_chan_llp(chan, first->hw_desc[0].llp | lms); =20 irq_mask =3D DWAXIDMAC_IRQ_DMA_TRF | DWAXIDMAC_IRQ_ALL_ERR; - axi_chan_irq_sig_set(chan, irq_mask); + if (chan->polled) + axi_chan_irq_sig_set(chan, DWAXIDMAC_IRQ_NONE); + else + axi_chan_irq_sig_set(chan, irq_mask); =20 /* Generate 'suspend' status but don't generate interrupt */ irq_mask |=3D DWAXIDMAC_IRQ_SUSPENDED; @@ -714,6 +717,7 @@ dw_axi_dma_chan_prep_cyclic(struct dma_chan *dchan, dma= _addr_t dma_addr, if (unlikely(!desc)) goto err_desc_get; =20 + chan->polled =3D !(flags & DMA_PREP_INTERRUPT); chan->direction =3D direction; desc->chan =3D chan; chan->cyclic =3D true; @@ -796,6 +800,7 @@ dw_axi_dma_chan_prep_slave_sg(struct dma_chan *dchan, s= truct scatterlist *sgl, =20 desc->chan =3D chan; desc->length =3D 0; + chan->polled =3D !(flags & DMA_PREP_INTERRUPT); chan->direction =3D direction; =20 for_each_sg(sgl, sg, sg_len, i) { @@ -859,6 +864,7 @@ dma_chan_prep_dma_memcpy(struct dma_chan *dchan, dma_ad= dr_t dst_adr, if (unlikely(!desc)) goto err_desc_get; =20 + chan->polled =3D !(flags & DMA_PREP_INTERRUPT); desc->chan =3D chan; num =3D 0; desc->length =3D 0; @@ -1139,6 +1145,9 @@ dma_chan_tx_status(struct dma_chan *dchan, dma_cookie= _t cookie, u32 length; u32 len; =20 + if (chan->polled) + dw_axi_dma_handle_ch(chan); + status =3D dma_cookie_status(dchan, cookie, txstate); if (status =3D=3D DMA_COMPLETE || !txstate) return status; diff --git a/drivers/dma/dw-axi-dmac/dw-axi-dmac.h b/drivers/dma/dw-axi-dma= c/dw-axi-dmac.h index f57961620d2d..e4fbc38446ec 100644 --- a/drivers/dma/dw-axi-dmac/dw-axi-dmac.h +++ b/drivers/dma/dw-axi-dmac/dw-axi-dmac.h @@ -54,6 +54,7 @@ struct axi_dma_chan { bool cyclic; /* these other elements are all protected by vc.lock */ bool is_paused; + bool polled; }; =20 struct dw_axi_dma { --=20 2.39.2