From nobody Thu Dec 18 07:49:10 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 AC392C7EE26 for ; Sun, 21 May 2023 11:49:47 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231497AbjEULtm (ORCPT ); Sun, 21 May 2023 07:49:42 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36128 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230466AbjEUK1S (ORCPT ); Sun, 21 May 2023 06:27:18 -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 1FF7D10E0; Sun, 21 May 2023 03:23:28 -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 A91BD61237; Sun, 21 May 2023 10:23:27 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 410FFC4339B; Sun, 21 May 2023 10:23:26 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1684664607; bh=iRI9Nbek5uu1qAv7VQcDDGQ/jUGkxcfTM3bdHx/73/4=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=T1wnG289rlegA31pfjTwhfCkzkkQREJxin57BHyMKFgwZslrkTJMBDYrqLldVEDJo L7IyA0vD/2U8mUe5DWd4rNKp2F3gjfORXPxdh9QwzkoZRcB7Jq83uuQFWsWQ9kMcZk gs32NhhV+TjGmeOQI5hw9Dk1Heuk2xK19/roDYZTxzkYkkRUUZ+9pB/zKXZ3zP03ZO 5Cj4XiIx/k3t+eN+awQoKFEsN8ArRfSfhiH8p3pLcNh6tvP4gIY+RIOE1GQ9NXTl7y 3UdKktY6e7edqUXCNubD0GU7v3FBf3jrFR/LSNo0T90GLR3mPnrm2foUnTTUnbBgJZ kvr+NWaTqea6A== From: Jisheng Zhang To: Eugeniy Paltsev , Vinod Koul Cc: dmaengine@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v3 01/11] dmaengine: dw-axi-dmac: fix reading register when runtime suspended Date: Sun, 21 May 2023 18:12:06 +0800 Message-Id: <20230521101216.4084-2-jszhang@kernel.org> X-Mailer: git-send-email 2.40.0 In-Reply-To: <20230521101216.4084-1-jszhang@kernel.org> References: <20230521101216.4084-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 796b6caf0bab..203be13499e3 100644 --- a/drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c +++ b/drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c @@ -469,13 +469,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 */ @@ -485,13 +489,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.40.0 From nobody Thu Dec 18 07:49:10 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 46DBBC77B7C for ; Sun, 21 May 2023 11:49:35 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231144AbjEULtb (ORCPT ); Sun, 21 May 2023 07:49:31 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36130 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230459AbjEUK1S (ORCPT ); Sun, 21 May 2023 06:27:18 -0400 Received: from dfw.source.kernel.org (dfw.source.kernel.org [139.178.84.217]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 5E80C10E2; Sun, 21 May 2023 03:23:29 -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 E6F3C60C94; Sun, 21 May 2023 10:23:28 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 7C825C433D2; Sun, 21 May 2023 10:23:27 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1684664608; bh=xLmFwERNLFGS44YuN2v3vab89SlNXlrWfcwD+NSS4sc=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=PINJX4DODMB4CoA3wTX1FBA+zyOp+XmO+q/mnBCmSPeov7yP4TZ3nxL6xkr/RDTPi E6UVndyBT3h1d7vXfHTNuAvNKgPeOvNLdZ04FAC+sgCkHTTjvmHaNCnokQztF1f5bP rlapEI4CHl1x1OJFDijLkGTR9+w1QAmcEN+iH3ACxjQk3AIeiI5Js/5W8Z7G6q/An1 Na6p98Uo6JFslD9QhscTGwocbd7yC9dwjyvQ4ySvmkQSRu+OKnn1q74g4EM5CQcfUb LTeVoalXU3XlWBjphsWOWcIgORzPCMcemewKU65GF/nKBPwuJc9E4R+PVWZyTNX3Da E00rb9AO2hw3g== From: Jisheng Zhang To: Eugeniy Paltsev , Vinod Koul Cc: dmaengine@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v3 02/11] dmaengine: dw-axi-dmac: remove unnecessary devm_free_irq() calling Date: Sun, 21 May 2023 18:12:07 +0800 Message-Id: <20230521101216.4084-3-jszhang@kernel.org> X-Mailer: git-send-email 2.40.0 In-Reply-To: <20230521101216.4084-1-jszhang@kernel.org> References: <20230521101216.4084-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 203be13499e3..a19b651ddaad 100644 --- a/drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c +++ b/drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c @@ -1563,8 +1563,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.40.0 From nobody Thu Dec 18 07:49:10 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 7992BC77B7C for ; Sun, 21 May 2023 11:49:47 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231154AbjEULth (ORCPT ); Sun, 21 May 2023 07:49:37 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36132 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230455AbjEUK1S (ORCPT ); Sun, 21 May 2023 06:27:18 -0400 Received: from dfw.source.kernel.org (dfw.source.kernel.org [139.178.84.217]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 9BFBB10E3; Sun, 21 May 2023 03:23:30 -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 2F788611F6; Sun, 21 May 2023 10:23:30 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id B7E49C4339B; Sun, 21 May 2023 10:23:28 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1684664609; bh=BLq9O0pAfUMUGI7sir1Wus9mHo0zlYVxEcjud2ZFuwA=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=obhYptZiMtvVZVJlLF20TpBWHQwK+KLU/DD5Fd//1C8URO1K0xZnhXxazi/WNESxr XzO9yh2LPz2Cmnz+ywcbRJFpc5J3G4eeCCwTY8T7aIeEnN46DrcEKnuH88X70TGO2o hsBtcV8N2/hJNHagOsDdsDeW94yvF1CVcxthm4v2j0K7Pzb7CNP4ys1xWDLYgUOd4e 2eJFczzUX7ZUo4TfdqtHisXtsM89mAc5tQQqkHSUsmw1yMiD8EmPS3PcnhjK0sLp9+ V/zuL1oiw2RcYtIMKcaMFxUafhn8uI3iCk0XKP7CEjZQO65HxcCJAkU3N66gZDrt+5 OS9wB7NqLQr5g== From: Jisheng Zhang To: Eugeniy Paltsev , Vinod Koul Cc: dmaengine@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v3 03/11] dmaengine: dw-axi-dmac: remove unnecessary axi_dma_enable() calling Date: Sun, 21 May 2023 18:12:08 +0800 Message-Id: <20230521101216.4084-4-jszhang@kernel.org> X-Mailer: git-send-email 2.40.0 In-Reply-To: <20230521101216.4084-1-jszhang@kernel.org> References: <20230521101216.4084-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 a19b651ddaad..4378134eea63 100644 --- a/drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c +++ b/drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c @@ -389,8 +389,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.40.0 From nobody Thu Dec 18 07:49:10 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 28911C87FE7 for ; Sun, 21 May 2023 11:49:09 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230469AbjEULsd (ORCPT ); Sun, 21 May 2023 07:48:33 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:35572 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230412AbjEUK1w (ORCPT ); Sun, 21 May 2023 06:27:52 -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 D75B810E4; Sun, 21 May 2023 03:23: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 6C9F360E05; Sun, 21 May 2023 10:23:31 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 01046C433D2; Sun, 21 May 2023 10:23:29 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1684664610; bh=mJ5yS9oI4b3i7UhOvVPGcZz88NvjaTzXIsaTK0vbsRY=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=cJbg/qlKueDxxcK7o7KMD+7lkG+dw3yGQVp3s/fUr7dngLT8jEbqbe3smC5PAioeS YWERFWjBpl3cvQHKJ5G8jjwOZWMGx8WQrjovmylKiQ7dQqzX0KS5btxTJTtYaB6A12 vBa3i25d1tSBD4TzIFOdzO19vN9c+yzjDGd4Ny8X8Od08hEDwJCjAYE7AW6Ld2QE8w xG8501nXb0L9kIlalaufG0ywHwtEID+ngGLVUh0tv524eXTjNV3cBKzrxRTqY5xvIT ep10J2F4/SPlyOvrP7bdVbHWEQzsZbEDHT6ILLB5+g6X4cg437Qov98+SCJ+/P7ffG Ma3SaL75VSZZw== From: Jisheng Zhang To: Eugeniy Paltsev , Vinod Koul Cc: dmaengine@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v3 04/11] dmaengine: dw-axi-dmac: remove redundant axi_dma_disable() calling Date: Sun, 21 May 2023 18:12:09 +0800 Message-Id: <20230521101216.4084-5-jszhang@kernel.org> X-Mailer: git-send-email 2.40.0 In-Reply-To: <20230521101216.4084-1-jszhang@kernel.org> References: <20230521101216.4084-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 4378134eea63..e596910e9f84 100644 --- a/drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c +++ b/drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c @@ -1556,7 +1556,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.40.0 From nobody Thu Dec 18 07:49:10 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 34D31C77B7C for ; Sun, 21 May 2023 11:49:25 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230303AbjEULtW (ORCPT ); Sun, 21 May 2023 07:49:22 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:35682 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230470AbjEUK1w (ORCPT ); Sun, 21 May 2023 06:27:52 -0400 Received: from dfw.source.kernel.org (dfw.source.kernel.org [139.178.84.217]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 1DEF910E6; Sun, 21 May 2023 03:23: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 A85A760E74; Sun, 21 May 2023 10:23:32 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 3DB34C4339B; Sun, 21 May 2023 10:23:31 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1684664612; bh=+Tf439DcPyOhnrJYLUHMQ/cInIgZ19g0uwID2SQPxBs=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=onljlQhnGLnsMg8c1ByUgOfPf+pW4AQdNXQQfNkiVzxEmVJIqo1lCyYXS617e7stn SLs3YAiTnhWULSS0eEE1vuuZLP9FuwgB/MMv488p0Bql484cf/ntGD45TRB4KlDzQ6 pXt4ZUYZMo3SKUsI9BOE5PGrVSw1r55lVhpXyIMirQEzAb/fC9SvEVQwN0inkwp0Nt xWe6V7FF9wzKr12vR0+o2jNptP86lAmi+U8XUuLnEdgH8BJlyfr4TrZmWkPipBrq5L Px0JE2bkVCUzf9+H6BKb3NQocHi0nnR2/TtPOTrq+JxT61sntQD/Ou112+Sz2qS9HL b9fhqCoe1CunQ== From: Jisheng Zhang To: Eugeniy Paltsev , Vinod Koul Cc: dmaengine@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v3 05/11] dmaengine: dw-axi-dmac: delay irq getting until request_irq Date: Sun, 21 May 2023 18:12:10 +0800 Message-Id: <20230521101216.4084-6-jszhang@kernel.org> X-Mailer: git-send-email 2.40.0 In-Reply-To: <20230521101216.4084-1-jszhang@kernel.org> References: <20230521101216.4084-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 e596910e9f84..64b4ee2d618b 100644 --- a/drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c +++ b/drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c @@ -1403,10 +1403,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); @@ -1447,6 +1443,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.40.0 From nobody Thu Dec 18 07:49:10 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 28D83C77B7C for ; Sun, 21 May 2023 11:49:22 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230272AbjEULtV (ORCPT ); Sun, 21 May 2023 07:49:21 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:35666 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230372AbjEUK1w (ORCPT ); Sun, 21 May 2023 06:27:52 -0400 Received: from dfw.source.kernel.org (dfw.source.kernel.org [139.178.84.217]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 580BA10E7; Sun, 21 May 2023 03:23:34 -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 E2E2560E05; Sun, 21 May 2023 10:23:33 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 7B94EC4339C; Sun, 21 May 2023 10:23:32 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1684664613; bh=nugoBLj1hecEiOwev69EKFxOoV/ysyY1qdC6Ej2+N0U=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=ENzZSteHBMg9fdrWHXxObejJbr5ltEU9QUiC30q3DfDy9y+OP0jxZTEmuLAdibzdG YLQ87KQPJ17QYMtDaPvTnE0fFsgHHeN8UycYTKvPq7DXmOqjtlERXuN09OKsGnVOjb qZKlfUbdMDB3GE+D0SeB2wJ/w+n8YbS5hVsXbdZFvupfpBcqseyN7TzKdlbQ9Lh/+s z9197/37ryoJMGWMxFVVm6WmvF0aKIw0z2e1tzRktZ1SLTCBMOAmd23rXdABiKECWt mGadMpLY4wOWXwO2Q8W8TLu+t8iBFPSfhjj71delITJOL0XjTfr0to6GHrie0t6EPJ oJL5rAQKIH5ig== From: Jisheng Zhang To: Eugeniy Paltsev , Vinod Koul Cc: dmaengine@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v3 06/11] dmaengine: dw-axi-dmac: move ch irq handling into common routine Date: Sun, 21 May 2023 18:12:11 +0800 Message-Id: <20230521101216.4084-7-jszhang@kernel.org> X-Mailer: git-send-email 2.40.0 In-Reply-To: <20230521101216.4084-1-jszhang@kernel.org> References: <20230521101216.4084-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 64b4ee2d618b..24a93b0c1489 100644 --- a/drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c +++ b/drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c @@ -1108,13 +1108,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); @@ -1122,16 +1139,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.40.0 From nobody Thu Dec 18 07:49:10 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 37DD9C7EE23 for ; Sun, 21 May 2023 11:49:19 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229782AbjEULtQ (ORCPT ); Sun, 21 May 2023 07:49:16 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:35586 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230407AbjEUK1w (ORCPT ); Sun, 21 May 2023 06:27:52 -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 98E0710E9; Sun, 21 May 2023 03:23:35 -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 2D55060C94; Sun, 21 May 2023 10:23:35 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id B7164C4339B; Sun, 21 May 2023 10:23:33 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1684664614; bh=yGoRDjvKLbCYkSOxnH9X59HxNfLXO+ROMNUsbfcZ4wM=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=vMcLc2lI+wQvbqyTaFbmRSdqRqkCkEaQ0bJ/5dlZRCdKtbi237kfH1e0PRZkbuK5A 6Epfhd5w9eeJ57Tq9kIfLtbgTyhd5Q9LKxClSgqfsNorGNi7SPDXtTkWv6+W1UqF2C L7GSnjVmvg9itJ9/SYs9HGsU9aRWlgVifoD5o+N8C08Yq/GapJF6k/zNGPC9Fz1RyV Q+AgF4ASkUWs4EawSh4RdE8NlfNRdOXw/N8oGDRllrYJLyqXg3ChNXw1UdSNR54KJ/ fsqgSjvNKp2Sue4So1+wY2iSkcaF7W7Nk25RD0jKSWl4oMS5+IuE/TtauQzzFVi0Au G6n69g2C3rXFA== From: Jisheng Zhang To: Eugeniy Paltsev , Vinod Koul Cc: dmaengine@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v3 07/11] dmaengine: dw-axi-dmac: support per channel irq Date: Sun, 21 May 2023 18:12:12 +0800 Message-Id: <20230521101216.4084-8-jszhang@kernel.org> X-Mailer: git-send-email 2.40.0 In-Reply-To: <20230521101216.4084-1-jszhang@kernel.org> References: <20230521101216.4084-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 | 46 ++++++++++++++++--- drivers/dma/dw-axi-dmac/dw-axi-dmac.h | 2 + 2 files changed, 41 insertions(+), 7 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 24a93b0c1489..3f3db48822e3 100644 --- a/drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c +++ b/drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c @@ -1148,6 +1148,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); @@ -1382,6 +1397,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 @@ -1451,14 +1468,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; + 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; =20 - ret =3D devm_request_irq(chip->dev, chip->irq, dw_axi_dma_interrupt, - IRQF_SHARED, KBUILD_MODNAME, chip); - if (ret) - return ret; + 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 eb267cb24f67..49210a248c27 100644 --- a/drivers/dma/dw-axi-dmac/dw-axi-dmac.h +++ b/drivers/dma/dw-axi-dmac/dw-axi-dmac.h @@ -34,6 +34,7 @@ struct dw_axi_dma_hcfg { bool reg_map_8_channels; bool restrict_axi_burst_len; bool use_cfg2; + bool perch_irq; }; =20 struct axi_dma_chan { @@ -49,6 +50,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.40.0 From nobody Thu Dec 18 07:49:10 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 46C76C77B7C for ; Sun, 21 May 2023 10:47:18 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231337AbjEUKq6 (ORCPT ); Sun, 21 May 2023 06:46:58 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36158 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230489AbjEUK1w (ORCPT ); Sun, 21 May 2023 06:27:52 -0400 Received: from dfw.source.kernel.org (dfw.source.kernel.org [139.178.84.217]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id D072110EA; Sun, 21 May 2023 03:23:36 -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 65700611F6; Sun, 21 May 2023 10:23:36 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id F2A60C433EF; Sun, 21 May 2023 10:23:34 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1684664615; bh=Fu9hvdidpGkytptzWtE0mzE1XOtEGG2Aj2hPihoV7C4=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=WNfVn5dG+4iNau0L+paN8n2y+19tX8ACn0cdeCJAKa6xPhGYSSIjbOdQGJKgIkXPu Bmszre4u0TYublRYrZn7OPDzgHXTjKP1DOyR+pDRsbBwvbBUdgp/gnS5MCWcjCbyyY 1BywclxJ4TMJB2JN1Si21Qc10D6XqorqcI8YX7KZvuGooDLBaiSX3AqVljmYQ6yauB 2ywkw5Ix1ZsNLlpko+3Hyh/vyRY7zDlmy5UGr1Lu9IIa37yCNsT8hw0hzGXYOeJNDp 6TNMcQK4MYFmHrLsrtMpw6xLiYVPwFvk2cXe6+piSmMNQspgP1BXPUQsla277285ma jvTNoLDSSxfoQ== From: Jisheng Zhang To: Eugeniy Paltsev , Vinod Koul Cc: dmaengine@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v3 08/11] dmaengine: dw-axi-dmac: support dma-channel-mask Date: Sun, 21 May 2023 18:12:13 +0800 Message-Id: <20230521101216.4084-9-jszhang@kernel.org> X-Mailer: git-send-email 2.40.0 In-Reply-To: <20230521101216.4084-1-jszhang@kernel.org> References: <20230521101216.4084-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 3f3db48822e3..f0bd8a7e3caf 100644 --- a/drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c +++ b/drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c @@ -223,6 +223,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]); } @@ -1397,6 +1399,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; @@ -1471,6 +1481,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) @@ -1496,6 +1510,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; @@ -1593,6 +1610,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 49210a248c27..1f9772e9be30 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.40.0 From nobody Thu Dec 18 07:49:10 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 38749C77B7C for ; Sun, 21 May 2023 10:53:40 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229978AbjEUKvv (ORCPT ); Sun, 21 May 2023 06:51:51 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36160 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230483AbjEUK1w (ORCPT ); Sun, 21 May 2023 06:27:52 -0400 Received: from dfw.source.kernel.org (dfw.source.kernel.org [139.178.84.217]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 1C84210EC; Sun, 21 May 2023 03:23:38 -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 A4E6F60E74; Sun, 21 May 2023 10:23:37 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 3A01AC433D2; Sun, 21 May 2023 10:23:36 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1684664617; bh=wuVX/0YvZSuO5U9SVtkLtDjCssqIgDDcmJ1FV8R4DUU=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=AvSff5QrbnWVP3y0CGYY3/phzmkCqWYAL7qL7/ZyeLhCrD5tXdwcj7HvafpUNDXEE yIhivZGr/ZmbayQikZ+dqPITjxqZUvHF3BRIJMfizara/A7zB/cFhnT/lTzm7jFL+Z 3jvG9acunlQQTnF+g3+L2Q7zRueUQXaMUg0n5hCzAvkPa6J7LaDPfW2AqSjHIxB0e7 jPHHQmzu/bSD1yScYIUk8LgqnBMjrx/WvFizDZKoH3fte7tw5DE4IxvKacr5VzPWQl hqFcFhsbZBfLOd9oGZyxrWtihuyELUNIpHfFDK+9Bhzwa3ilPhObIgRnW7i2wBG8X8 +YfeEt/5LisKA== From: Jisheng Zhang To: Eugeniy Paltsev , Vinod Koul Cc: dmaengine@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v3 09/11] dmaengine: dw-axi-dmac: try best to get residue when tx is running Date: Sun, 21 May 2023 18:12:14 +0800 Message-Id: <20230521101216.4084-10-jszhang@kernel.org> X-Mailer: git-send-email 2.40.0 In-Reply-To: <20230521101216.4084-1-jszhang@kernel.org> References: <20230521101216.4084-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 f0bd8a7e3caf..f14fdfc9c7e9 100644 --- a/drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c +++ b/drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c @@ -312,6 +312,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; @@ -329,9 +330,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; } @@ -432,6 +439,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) @@ -1195,6 +1203,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.40.0 From nobody Thu Dec 18 07:49:10 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 71757C77B7C for ; Sun, 21 May 2023 11:49:08 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230361AbjEULsV (ORCPT ); Sun, 21 May 2023 07:48:21 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36162 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230484AbjEUK1w (ORCPT ); Sun, 21 May 2023 06:27:52 -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 59AD110F0; Sun, 21 May 2023 03:23:39 -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 E36A3611F6; Sun, 21 May 2023 10:23:38 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 758A8C4339C; Sun, 21 May 2023 10:23:37 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1684664618; bh=3vm8AIqJvr6Fc6EEUZBTa078hFQD/CBcDZ6PM3gC9JA=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=ZTS2wewKlHnWKe/Xt0LHnE/CRuHSfAree8mN77wrdaHUgAwoMzJxDIv9fOnD9xuCa Z5gw7/WkCIz6Uc2CXENgFaDYuWj294/D9DAA+hm9kPqKFv7z1S5mRIv5a1HU4r0Lzw sKVlEtkCZMAVHPdG/CS9SooYm3vY4TG4AOwg358K5yhravQ8lP9qpcUMOU79pvWG3M JAkzoXuK3cNMCqbSdrR+OS7eeFcKOVgY9tr9AgjRQBX5QgcNuWnETHSTGcoz7Bpd6H G1hGLEeTqCj3IsudnqNzsjs4MFMzyzhW2rlfsy/onGJMTxxzWwRd32XawUkkPKfN83 +H8XR1Xxshipw== From: Jisheng Zhang To: Eugeniy Paltsev , Vinod Koul Cc: dmaengine@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v3 10/11] dmaengine: dw-axi-dmac: move dma_chan_tx_status() Date: Sun, 21 May 2023 18:12:15 +0800 Message-Id: <20230521101216.4084-11-jszhang@kernel.org> X-Mailer: git-send-email 2.40.0 In-Reply-To: <20230521101216.4084-1-jszhang@kernel.org> References: <20230521101216.4084-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 f14fdfc9c7e9..091c15c2ec31 100644 --- a/drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c +++ b/drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c @@ -307,48 +307,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); @@ -1173,6 +1131,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.40.0 From nobody Thu Dec 18 07:49:10 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 E037AC87FDD for ; Sun, 21 May 2023 11:49:08 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230391AbjEULs3 (ORCPT ); Sun, 21 May 2023 07:48:29 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:35684 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230480AbjEUK1w (ORCPT ); Sun, 21 May 2023 06:27:52 -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 95F9D10F1; Sun, 21 May 2023 03:23: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 2B57861237; Sun, 21 May 2023 10:23:40 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id B0EC9C4339B; Sun, 21 May 2023 10:23:38 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1684664619; bh=CgvF8Omo2JeTGnqmRi2Go52uNuV9rdRbFiAeV3NJTAk=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=gHw5+gVjEIOb+e4UbCc7hGKVU4uLX2hcCGsPYe4SmaCXZUVwwW2ZRC+CVIVxhTK5E hZTQLv54htOvEfBkLSkdRlMA762KQhvnN/etb/FE9/qyPXn3/h7HLgDBvZ2KcmN+BB k1h2sgi+1zLsTy0FuiKu/6M2EgQCWZiIy0zfqwfhLmQs1MM92/Vuur23CRe4aDU/Um ZLLAD14zUEE4zWrmVs16IS9D5E16I9nbNCO+DfxNLyNnRBO/mqE+yyVZOx6wINoCVh 7HIuyU5gbJGKhOR6cB2sHgC+eBW4zb8U/F4eLb7ApuIryThJNMe8ws+DAsO8MQIkZb 1lWhPMUffXPYw== From: Jisheng Zhang To: Eugeniy Paltsev , Vinod Koul Cc: dmaengine@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v3 11/11] dmaengine: dw-axi-dmac: support polled mode Date: Sun, 21 May 2023 18:12:16 +0800 Message-Id: <20230521101216.4084-12-jszhang@kernel.org> X-Mailer: git-send-email 2.40.0 In-Reply-To: <20230521101216.4084-1-jszhang@kernel.org> References: <20230521101216.4084-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 091c15c2ec31..37ab9a03d94b 100644 --- a/drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c +++ b/drivers/dma/dw-axi-dmac/dw-axi-dmac-platform.c @@ -390,7 +390,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; @@ -721,6 +724,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; @@ -803,6 +807,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) { @@ -866,6 +871,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; @@ -1146,6 +1152,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 1f9772e9be30..33ae4280dacc 100644 --- a/drivers/dma/dw-axi-dmac/dw-axi-dmac.h +++ b/drivers/dma/dw-axi-dmac/dw-axi-dmac.h @@ -55,6 +55,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.40.0