From nobody Mon Sep 28 15:34:37 2026 Received: from TY3P286CU002.outbound.protection.outlook.com (mail-japaneastazon11020105.outbound.protection.outlook.com [52.101.229.105]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7378546D091; Thu, 20 Aug 2026 17:34:49 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.229.105 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787247291; cv=fail; b=tfmLoWhVv0pUQCaBWmQ58qAxjyCfJQ2pBzA0fopxjnaJm80Fu/nsYnBg0fGvLGYK9ve1gFbgHNxDIbzlA0LV/OPMqDWUAtcPtVcHSJQjJ5KQEp9lkP8FioRZdbIRQMwlXJ2dMkPd0BWy0ooWk6tga0HSjzxdpkYi2iRzI9LoQ+o= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787247291; c=relaxed/simple; bh=Zu6BWp8aV4YcIku8KmpfxkcP+gGQcB37UFBIMvTMyzI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=JsmMpZ44rzY3XhhCj6z6Yq4d6AnTnk2+cRQjBCXr2pPvVh7wPegEiVmHmrZhoG5mm97uGgFkbUUQaeO0LSK68bbJABvHepLqwvbzpKaU3+N7Kj8qJbNkDcaFFkXULnfCXYQ9Fn0ue4WhMm5QqpFFcFZiEJBV9yl8yViiLv2hW34= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=valinux.co.jp; spf=pass smtp.mailfrom=valinux.co.jp; dkim=pass (1024-bit key) header.d=valinux.co.jp header.i=@valinux.co.jp header.b=AlZvLXqp; arc=fail smtp.client-ip=52.101.229.105 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=valinux.co.jp Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=valinux.co.jp Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=valinux.co.jp header.i=@valinux.co.jp header.b="AlZvLXqp" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=fiT/1nbxFqhs0mZ0XDWUX2PPBwGBj1VVb3L1mywHdvjgc6jrmLbNE5pz7qgC++8yekNLYP8Aa+zAvfE5yTBVnBtnx+HvYMvWta2x5iYGgy1+XyIAe8ie81LDvubybhk183eH5QOjrOhYKtDo3O7sutD+7vV3PMxvcv424hzZFzGEbnAx36FS+fXQrKtAEPePnwA53k+1PUTX4UPVeiX4RbY5u4xMKr+/g8tnc9p/0GCkgc8vDe140cNjN9hSZWQC1DhkP4F2r6qvy+mQfD6spUVR+lk4UyXabTcxYmzmqObAcMb/o1TA1mM13HT5TOhNzzBFtRwff/pMbqOnc3ZO9Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=pTjjTODRpRsI9h+ROY4KJL6TCN/qascToAqqhL4JrpE=; b=jmRFz+Vosa+bjK1NKbWtlDkBWKXSVISbMigtM2UlhcmjETtCn5SAHR6mrygoxuOUdYe7n7ztqVnnbiUA3iW9ERNIYJwgMBcTNX90OEO6OXJhQlMVMC0v0hykVFtlttFxmz8CP2MPLI76QqpfsFrXXsTQ/8zxy0yzktIh6sM5pjZZyvZYD/jVOpwOzwpBfJFLJ20ucsC28xHX6il8ZfQw0uXYEWI2TjdDIk9hsALdhZpqYKHUIfwWT4uQugp7vqjOf3JuMPCDlKCfxpcIEqHteFl3Ygoik3TfIbT1wJkkhkBhGCKOl0OwBCKC12iN4QOqqogDSiTffCyOuXMR5dky2Q== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=valinux.co.jp; dmarc=pass action=none header.from=valinux.co.jp; dkim=pass header.d=valinux.co.jp; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=valinux.co.jp; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=pTjjTODRpRsI9h+ROY4KJL6TCN/qascToAqqhL4JrpE=; b=AlZvLXqpnuTKemoPcQg7gLQjWtJgu7jtnqeFReoXH3w+DhI40oq8JPp9L45W7/ycOU+bpYEOyn7+eLDLkAB8gBoexli67dFzV9QU7YVMGmUlSxuQ70G1ot6fKXTguCdaIrCGn9yu73B7dKt9/AuZhQMIYR21EDoqwDMy9EzJD0w= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=valinux.co.jp; Received: from TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:38f::10) by OS7P286MB7644.JPNP286.PROD.OUTLOOK.COM (2603:1096:604:461::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.339.8; Thu, 20 Aug 2026 17:34:44 +0000 Received: from TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM ([fe80::2305:327c:28ec:9b32]) by TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM ([fe80::2305:327c:28ec:9b32%3]) with mapi id 15.21.0339.007; Thu, 20 Aug 2026 17:34:44 +0000 From: Koichiro Den To: Vinod Koul , Frank Li , Manivannan Sadhasivam , Gustavo Pimentel , Kees Cook , =?UTF-8?q?Krzysztof=20Wilczy=C5=84ski?= , Kishon Vijay Abraham I , Bjorn Helgaas , Christoph Hellwig , Serge Semin , Cai Huoqing , Niklas Cassel Cc: Devendra K Verma , dmaengine@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v6 01/10] dmaengine: dw-edma: Add dw_edma_core_ll_cur_idx() to get current LL entry index Date: Fri, 21 Aug 2026 02:34:30 +0900 Message-ID: <20260820173439.2004068-2-den@valinux.co.jp> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260820173439.2004068-1-den@valinux.co.jp> References: <20260820173439.2004068-1-den@valinux.co.jp> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: TYWP286CA0002.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:178::17) To TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:38f::10) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: TY7P286MB7722:EE_|OS7P286MB7644:EE_ X-MS-Office365-Filtering-Correlation-Id: e5f0b4a6-850c-40de-1db3-08defee152aa X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|10070799003|7416014|376014|23010399003|1800799024|366016|921020|6133799003|56012099006|10067099003|18002099003|22082099003; X-Microsoft-Antispam-Message-Info: eEbQ1UZ82eTupsg4Q3GerpPKkhfTaeYcxE2elNUCDORaU3+S0YtWfEaWXZIUcIpLyRuOwxxqIH+Y+BWFwzWFYo/REzFs4dwcmVACjZV8wcODh2XvRWMfAGGSztbcQpShmbY3eZMD4YRIKwsE579/J3qTyWHjy3KgVddKtfogwt4w2cabbG0IR3rCAbpoBbfdMhsZtJfcdRT/+e96tQnB37jNHf9ECos49Qt9Yc9i20RLypZHjU3yjFzWyb8p2wJ7detMwnF/WXBhvViuJsPese8++aFRusqR9tVAuvJs1/m+0E2ndSlDX3coGrNgQxflpEW7dBnOZc4GVtEvdWmg4rhZ6maNscy63r+MyKeTJinyWETgyQGo6sEGifl66hPx+lfPgDCI4T958i1qxL5grU5q60cw4FoGrmV47Lk9jmt2BVM1CnAJQCKUKx3sIR2cbBXi627weaJGsVyQDGfRczjn/PQ7pu4fkeN+3UV9G+UDRz4LhRV5wScOqJhMgc7XTdMtBmuiJvGwqTLEezeGX7482bNulaNFEUYMShL0MPxchlQz1cFJuqTEQOa3opLG6cRvkLozGbeXHoHY6Ig7WMX/byU8/d8oQU2p1kiaSCRa33SC9TQjBZCscot2XcCVt2mP8KuzqLlE8VTkAXZQ/jBguFIy+i2V1bTnymMprdU7c2gxIEeTST9wjBt/ROobvr+miUrlDAruTT77zA8TAg== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230040)(10070799003)(7416014)(376014)(23010399003)(1800799024)(366016)(921020)(6133799003)(56012099006)(10067099003)(18002099003)(22082099003);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?VpuG0BJcrXZ5os89ROsJQidwUIPA13oAooJCGJQBzXzM98wzL7fUNeWbUnDg?= =?us-ascii?Q?PEEjyNTClVXbyB6MU0QGpKXS1S+cy4/NIOeHpr1j+JxJlkQz+xvdx8uoG+z4?= =?us-ascii?Q?PT3U8OiL6nZum5A63itXCMPvqwnDCr/9SujZFHNd0PFKo/xJkQfczEEFgPs0?= =?us-ascii?Q?jZB0hZqSqc/vJjiSroWzyCHypeF4kaLAusvttcRAtvw7Cn3aM4dHw4jtmYLK?= =?us-ascii?Q?6Y/5x5zYU7ItBhR9xCGn6g7stjHAOlLXt3DqZkKAPxl27rxoxqkD27gg/qeg?= =?us-ascii?Q?gZjDcE1N2+To0/w/BuXIW0Ej0HimIWd1/BhrS+4+q0729DoEdzUP7Xv12BmP?= =?us-ascii?Q?23mK8qujeHSOSe6+braSE6peOmAzSbiqhk2yzGILnViha6R4H99QHNGpXsny?= =?us-ascii?Q?9wzhDHQ1KlQPH85YIblGKAEzAQkrBMnwfIbouBcEvbr48kUajLKeBt+AvxPs?= =?us-ascii?Q?v03NzGP2MezDEfAGvqfIHswTt0U0xl9tbOSTG+4UMonJLiNks2s3Adt3Nsw7?= =?us-ascii?Q?DIyGrTUrMB3F/151hOgn6wzT8nZZGnQ5tamQBBrYLur5rwjqJwql4r02U1e5?= =?us-ascii?Q?8QkgkCQXdTRlwIguX20+j1hIk/Nh0RI2ANIfDfmjdZGqyP0mxIu+4FnTJ405?= =?us-ascii?Q?01snDX2WX1ZkyFHNJDdMN38kxuHBz5hBecTC7i352/bEBZDZHHEmWpl2aot5?= =?us-ascii?Q?+rjxJpi3yCDYbyW9VS2Sy8yQt/G1JHQ9B+2rmLW2/R/6qfZUXJ9d6Kys9ddt?= =?us-ascii?Q?XtiQ95eHLVZH12PH3IqaZdkEQUukNFQ8otEv1V9n8HScdUBVnKw/nb49L+5+?= =?us-ascii?Q?xSD2CvnbI0l+GuAABfX7+E6oHzbwuSXJlPBQmBlJqDQO9SkAPnZQYyNxLC8b?= =?us-ascii?Q?QZAgeo6UtuiVLCXuFFO6ixTsvE7jrgHKtk6DNNmUZYnmm17BHr5y0eDBhSwS?= =?us-ascii?Q?WbWklxdSFiNEapZaPvR80hG3zGjRQGOkpWnvCe735a80lADBEOhJpgJLnJ03?= =?us-ascii?Q?sSC7rGlU2ypVd4xcTxrUX9yUDjHHChI8lPYd/JC67pEhteL6BGRyHD+BU5wg?= =?us-ascii?Q?c7f5sO41L6qf9rfWQFflCO0SiqiYa6vmbFVHQU6JrkxZv3UmEFgWMGMvHLYD?= =?us-ascii?Q?n+/JUkSPdjXkKiNPY/iYmT8opz7BU/7bZeJ8TrMPC5EB+BHJwZ32IHkZFS2Y?= =?us-ascii?Q?Yd3gI3S03Xg4I0zB2aUChV02AiYPtBNLz0pjP19hOzRDSpADLJsE/+v26ZJd?= =?us-ascii?Q?LHMGRKoOsGL9dr99Bt7+RalOpKTo64BW/SCEK00wHWwDeZidEp48f3in5aNP?= =?us-ascii?Q?IIw1ALZ+4oYy/b9SngRT89fekwEFHZK4T7JtBMOC5gcP9dGRQBWWFqdZ86rs?= =?us-ascii?Q?jezHb+51+Q3w7/8ald5d0sj8zgA24F6Gjqw/3zSOdfHdkoTpcKXwBAzFvzUh?= =?us-ascii?Q?vdNY2a3sVTjnCJodSo+TzYDq6e//2eNdXCUsy3QvRv2MxtQZeKq30hNboSm0?= =?us-ascii?Q?uFxmeBCtW85FfEZCu8fhYuRzDBhG1u3lZpCpiVneTy22yHZTB5leILdRcp+0?= =?us-ascii?Q?NhNFBBFoiYTOjfMWzY1cw+xfJO+mdvVt+WFI7dVJJJuCllTYwUFUCLPvH7e6?= =?us-ascii?Q?PWnDIRFZxVeaRqaaTwAbqSqyXnA+R1UemKtjlIWG/diomxlxovmg6uzXGtib?= =?us-ascii?Q?d5bwacAaq3WGe6QyCvf8UBoCp7su7/gpl2TNhiIo/V8HPlVfjWc8G2WopIxw?= =?us-ascii?Q?YTYCLJ9nvggp8T4K8nDQ8RdGHI3jdeH11qhn1F6yNkHWdFpaRh6n?= X-OriginatorOrg: valinux.co.jp X-MS-Exchange-CrossTenant-Network-Message-Id: e5f0b4a6-850c-40de-1db3-08defee152aa X-MS-Exchange-CrossTenant-AuthSource: TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 20 Aug 2026 17:34:44.1683 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 7a57bee8-f73d-4c5f-a4f7-d72c91c8c111 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: hVmEaDeS73AhoYzmz5jxofTiHh0q279MhdeFD/OomCjX82MQOlYomaEqNt4jK92w1d6ext0oL/nVE3kwU5xj4A== X-MS-Exchange-Transport-CrossTenantHeadersStamped: OS7P286MB7644 Content-Type: text/plain; charset="utf-8" From: Frank Li Add dw_edma_core_ll_cur_idx() to get the current LL entry index and prepare for dynamic addition of DMA requests while the DMA engine is running. Signed-off-by: Frank Li Reviewed-by: Frank Li Co-developed-by: Koichiro Den Signed-off-by: Koichiro Den --- drivers/dma/dw-edma/dw-edma-core.h | 10 ++++++++++ drivers/dma/dw-edma/dw-edma-v0-core.c | 20 ++++++++++++++++++++ drivers/dma/dw-edma/dw-hdma-v0-core.c | 20 ++++++++++++++++++++ include/linux/dma/edma.h | 2 +- 4 files changed, 51 insertions(+), 1 deletion(-) diff --git a/drivers/dma/dw-edma/dw-edma-core.h b/drivers/dma/dw-edma/dw-ed= ma-core.h index f6a5ad317567..e50fa7965778 100644 --- a/drivers/dma/dw-edma/dw-edma-core.h +++ b/drivers/dma/dw-edma/dw-edma-core.h @@ -138,6 +138,7 @@ struct dw_edma_core_ops { void (*ll_data)(struct dw_edma_chan *chan, struct dw_edma_burst *burst, u32 idx, bool cb, bool irq); void (*ll_link)(struct dw_edma_chan *chan, u32 idx, bool cb, u64 addr); + int (*ll_cur_idx)(struct dw_edma_chan *chan); void (*ch_doorbell)(struct dw_edma_chan *chan); void (*ch_enable)(struct dw_edma_chan *chan); void (*ch_config)(struct dw_edma_chan *chan); @@ -181,6 +182,15 @@ struct dw_edma_chan *dchan2dw_edma_chan(struct dma_cha= n *dchan) return vc2dw_edma_chan(to_virt_chan(dchan)); } =20 +/* + * Return the current LL entry index. A negative value means that the chan= nel + * context is not initialized or was lost after a link reset. + */ +static inline int dw_edma_core_ll_cur_idx(struct dw_edma_chan *chan) +{ + return chan->dw->core->ll_cur_idx(chan); +} + static inline u64 dw_edma_core_get_ll_paddr(struct dw_edma_chan *chan) { if (chan->dir =3D=3D EDMA_DIR_WRITE) diff --git a/drivers/dma/dw-edma/dw-edma-v0-core.c b/drivers/dma/dw-edma/dw= -edma-v0-core.c index abc1bd4c0be2..cc8059182940 100644 --- a/drivers/dma/dw-edma/dw-edma-v0-core.c +++ b/drivers/dma/dw-edma/dw-edma-v0-core.c @@ -616,6 +616,25 @@ static void dw_edma_v0_core_ch_doorbell(struct dw_edma= _chan *chan) FIELD_PREP(EDMA_V0_DOORBELL_CH_MASK, chan->id)); } =20 +static int dw_edma_v0_core_ll_cur_idx(struct dw_edma_chan *chan) +{ + u32 base, val; + + val =3D GET_CH_32(chan->dw, chan->dir, chan->id, llp.lsb); + base =3D lower_32_bits(dw_edma_core_get_ll_paddr(chan)); + + /* + * LL regions stay within one 4 GiB address window. Reject an all-ones + * MMIO value. If the low word is zero, use the high word to distinguish + * a nonzero boundary address from an unprogrammed all-zero context. + */ + if (val =3D=3D U32_MAX || + (!val && !GET_CH_32(chan->dw, chan->dir, chan->id, llp.msb))) + return -EINVAL; + + return (val - base) / EDMA_LL_SZ; +} + /* eDMA debugfs callbacks */ static void dw_edma_v0_core_debugfs_on(struct dw_edma *dw) { @@ -650,6 +669,7 @@ static const struct dw_edma_core_ops dw_edma_v0_core = =3D { .handle_int =3D dw_edma_v0_core_handle_int, .ll_data =3D dw_edma_v0_core_ll_data, .ll_link =3D dw_edma_v0_core_ll_link, + .ll_cur_idx =3D dw_edma_v0_core_ll_cur_idx, .ch_doorbell =3D dw_edma_v0_core_ch_doorbell, .ch_enable =3D dw_edma_v0_core_ch_enable, .ch_config =3D dw_edma_v0_core_ch_config, diff --git a/drivers/dma/dw-edma/dw-hdma-v0-core.c b/drivers/dma/dw-edma/dw= -hdma-v0-core.c index 36ee72efcd31..19da1c8fd615 100644 --- a/drivers/dma/dw-edma/dw-hdma-v0-core.c +++ b/drivers/dma/dw-edma/dw-hdma-v0-core.c @@ -384,6 +384,25 @@ static void dw_hdma_v0_core_ch_doorbell(struct dw_edma= _chan *chan) SET_CH_32(dw, chan->dir, chan->id, doorbell, HDMA_V0_DOORBELL_START); } =20 +static int dw_hdma_v0_core_ll_cur_idx(struct dw_edma_chan *chan) +{ + u32 base, val; + + val =3D GET_CH_32(chan->dw, chan->dir, chan->id, llp.lsb); + base =3D lower_32_bits(dw_edma_core_get_ll_paddr(chan)); + + /* + * LL regions stay within one 4 GiB address window. Reject an all-ones + * MMIO value. If the low word is zero, use the high word to distinguish + * a nonzero boundary address from an unprogrammed all-zero context. + */ + if (val =3D=3D U32_MAX || + (!val && !GET_CH_32(chan->dw, chan->dir, chan->id, llp.msb))) + return -EINVAL; + + return (val - base) / EDMA_LL_SZ; +} + /* HDMA debugfs callbacks */ static void dw_hdma_v0_core_debugfs_on(struct dw_edma *dw) { @@ -406,6 +425,7 @@ static const struct dw_edma_core_ops dw_hdma_v0_core = =3D { .non_ll_start =3D dw_hdma_v0_core_non_ll_start, .ll_data =3D dw_hdma_v0_core_ll_data, .ll_link =3D dw_hdma_v0_core_ll_link, + .ll_cur_idx =3D dw_hdma_v0_core_ll_cur_idx, .ch_doorbell =3D dw_hdma_v0_core_ch_doorbell, .ch_enable =3D dw_hdma_v0_core_ch_enable, .ch_config =3D dw_hdma_v0_core_ch_config, diff --git a/include/linux/dma/edma.h b/include/linux/dma/edma.h index 3c8e2ef9dee0..a4e5aab8fddc 100644 --- a/include/linux/dma/edma.h +++ b/include/linux/dma/edma.h @@ -130,7 +130,7 @@ struct dw_edma_chip { =20 u16 ll_wr_cnt; u16 ll_rd_cnt; - /* link list address */ + /* Linked-list regions must not cross a 4 GiB address boundary. */ struct dw_edma_region ll_region_wr[HDMA_MAX_WR_CH]; struct dw_edma_region ll_region_rd[HDMA_MAX_RD_CH]; =20 --=20 2.51.0 From nobody Mon Sep 28 15:34:37 2026 Received: from OS0P286CU010.outbound.protection.outlook.com (mail-japanwestazon11021129.outbound.protection.outlook.com [40.107.74.129]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B67A235DA68; Thu, 20 Aug 2026 17:34:51 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.74.129 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787247293; cv=fail; b=Y7OPMIQX6Xr1ckRKzNKpidqeOsbJZGcHURyT5Jy0CK0h8iiS8bKFpIx7QTLA9gL02dxd+KpOGpSPK5v7W+iSuwJlMrXzBrjS9sPTOSohb2HYVPe332xKynMRFVvEPpCCfH53pryKH+dqeDmXpo2+ILkAFzSMP9N+oEXbEDhkosM= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787247293; c=relaxed/simple; bh=0Cj9vCn+Q82Hc0+Tl5nUSouu0erL2FpH4HuvDsyq2kE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=ATOQwCA/VMW7cmCG2FKBK0P3cBkkcYCjPY+78jHIrDMm4mHnyIuuI9p8eZTqEjI/UDZPaLlH0nEpxwqn7SJzkbw5JUlTEzSv+Zk1u7mYZvBi7M64bav+52xCkSBRNWtPgGvPrVhohjZpzOytg9gD3M0NukemydOInLcjrBVnnUA= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=valinux.co.jp; spf=pass smtp.mailfrom=valinux.co.jp; dkim=pass (1024-bit key) header.d=valinux.co.jp header.i=@valinux.co.jp header.b=f2XRx6nS; arc=fail smtp.client-ip=40.107.74.129 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=valinux.co.jp Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=valinux.co.jp Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=valinux.co.jp header.i=@valinux.co.jp header.b="f2XRx6nS" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=ND5X5wHsA+S/0L5PIdiNxszVHd5OTPgtEtUI4i7iOSuvHEJGDeMACOMFt01dm2zxYUtxe0HkdvXOG55K2hM6dTU3NfXLCeVVuFUGmYRcj0dtHm4u/ZOAg58dmuG25+IWxV9Z1O/ZVUerFrvp0+mS9n0rAkGG8wXhZ5OdEWtcpmMmabbIjhHp5nIJ1k6PxaaeN81++HeXX1mGdEifnpHlyoS0kDcAVS029R3G7bcjMGL5+cVzYwflf83KOhYWjHlGXeQjhREXmY1cXDAzFA4AUkZkq1xXpy4EZi2W8nkVFrllSXDN/8daDusI3lxwLfiVrGjfGcwBXiJc6JqEoIqRYA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=4BCIoHzPL6jwIZT8Tjir5LCk5WAJas7qXqw8fvd1J90=; b=t6cZhLuyBLI2n85senC1rk/aQwfPUwe3Df0EWAEOwX/OeGYY5HdF1ewhI9ALDy4hTRZlXslWbIxh9OK8ULcF1ch/ZD2ERAktldnJyPun948s4E0VZLu6E1N0ubRBxhg1E8sdJ5EuVLFN+k2mqcjLdUPfz2QHxzoxCZ3iiPK3+BKj3OBNenD2Iu5T3AgyGI1Dd9GO0UEuIC+c3fh8PpTCY9MJKOtFcSaEAcJvv1BsdlR/2vQ6z/cylGHtynbyB59g8kTvpJtB0Kz4FbTsZ9yi9eYCrUAHpM/MsZPiqD1nGZIGJ8p2f/X7h/c4B2MVgQP87TUUOT/ce4NtDw20T6I8SQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=valinux.co.jp; dmarc=pass action=none header.from=valinux.co.jp; dkim=pass header.d=valinux.co.jp; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=valinux.co.jp; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=4BCIoHzPL6jwIZT8Tjir5LCk5WAJas7qXqw8fvd1J90=; b=f2XRx6nSkeVXJNFqArQH07jQw3/5hDvYj5lXtX1hCYE51Oh19JenitwGlp0WaV+qplzqWmmPyiFMVjNHDI2DhQq3/+zJiX535DRwhmUr3W4BLbTgc+YDIKScULM+fprEOigGwHCrplxwVIiMbVORFVg0F8YT7Jatluyy4dMZszs= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=valinux.co.jp; Received: from TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:38f::10) by OS7P286MB7644.JPNP286.PROD.OUTLOOK.COM (2603:1096:604:461::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.339.8; Thu, 20 Aug 2026 17:34:45 +0000 Received: from TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM ([fe80::2305:327c:28ec:9b32]) by TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM ([fe80::2305:327c:28ec:9b32%3]) with mapi id 15.21.0339.007; Thu, 20 Aug 2026 17:34:44 +0000 From: Koichiro Den To: Vinod Koul , Frank Li , Manivannan Sadhasivam , Gustavo Pimentel , Kees Cook , =?UTF-8?q?Krzysztof=20Wilczy=C5=84ski?= , Kishon Vijay Abraham I , Bjorn Helgaas , Christoph Hellwig , Serge Semin , Cai Huoqing , Niklas Cassel Cc: Devendra K Verma , dmaengine@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v6 02/10] dmaengine: dw-edma: Add dw_edma_core_ll_clear() to clear LL control-word Date: Fri, 21 Aug 2026 02:34:31 +0900 Message-ID: <20260820173439.2004068-3-den@valinux.co.jp> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260820173439.2004068-1-den@valinux.co.jp> References: <20260820173439.2004068-1-den@valinux.co.jp> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: TYWP286CA0011.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:178::18) To TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:38f::10) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: TY7P286MB7722:EE_|OS7P286MB7644:EE_ X-MS-Office365-Filtering-Correlation-Id: 9d1c27ad-994d-4825-beda-08defee1531b X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|10070799003|7416014|376014|23010399003|1800799024|366016|921020|56012099006|10067099003|18002099003|22082099003; X-Microsoft-Antispam-Message-Info: URJq1HyAdsNXJ9B1XRKruPM6/L6ol7coH0nVYO1JXQ5zTJEo7+b8tHO9+M3+LRuKHHRdzILYF0ZY/k28jUmfEJGPk8BR8kp++ZbcX/e9uwzY7ZCtPrpFMItK4nsPEMrRRvZhsWUvGKTaDzG5qj2JAvlbUgRtAN3lgDVfoAmEurkkKHk6X6bJexWExhMepj6XUlZ0vZoitjtw7fSWoVl7s37SSISMCbZyVJCHZKq8u3GqNie8XmD9yyV1+HgbxIoi/dIqU+azrOwlgf8zbwJHMUHySIkNfalAqhZaZqlZcKvvb++GRqKp9otpL6FCV5bEKsmQwYTz+d6YR6z8ild8vovHOUDzUI/l8W6eEl7AJpg9jWpbNn8263/dwp8omuX24wixl/iaZMO35KkLKuZAI6SglvgfoNbbmXuMRK+KOnC2Ak5+CJPO75BFqMDzDNSey6XBulcN8bzsL/Eut1/6hGnuJ5U605tOMlHkT0fbxKWfotJA3aDkoQrhmbdaI3ZXa50JpnZMVw00mn2uU8elvYwWqfK7L1kolMmvYJb+VRq07M44gatn92705+dQtZBMZT7X6M9AXzB6GqHdSU2Q+2pY2a51f9OzOQhFiH+4vcNgmGaseGmuSdvdJDlFeY/nKPDg2Aa/nGnzrSgA3w1Cc3LmEY8i4RGA3z8sZVu2ByKRa4EPlcAxlr0wlApNvtO15gE8JG+5mAfcmNGwv7E8Zw== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230040)(10070799003)(7416014)(376014)(23010399003)(1800799024)(366016)(921020)(56012099006)(10067099003)(18002099003)(22082099003);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?M/df7AIaDwT1BjjDj7/KCWjdU/sjZPsxwpbalr6wjImqVbnRxjFxLfn3Gfmu?= =?us-ascii?Q?ibhHfPUSGzRe+e1Am/1/IB5o8EkILI0km3jdBrqcS6Llb0pVK4cqj0ndGOT3?= =?us-ascii?Q?2z26H0e8AWGxi/Rx22XgUp8JmAJBDLG9dzOAVsUT20dVRZK09wyYIFkFhbGT?= =?us-ascii?Q?w22vgnmw0WAVq18KiHjHfQqlapxDK5bbLFNOsY95fQhi1LW3jTdYbj3fhabA?= =?us-ascii?Q?EetNOgLlzoCk/1AhnHdSeD1ZzDNQ1jaurpQartu3KmobEYQQQEdBkvIGom32?= =?us-ascii?Q?QrVHrb+IHcj6KmTOkod/1Hmf/FZWzQzuM85HYYXL0xBYd9ytC2GerCxK5PIt?= =?us-ascii?Q?vbFoxs+m5ppMJoaNL/hd2jcgybKScvj29N500WQXsB6F3Gz/A5EguZf92/Qs?= =?us-ascii?Q?4MqMnwjef6gqS8HMIBkH00ZciPqmcYOfM9C0F0NPbq+5gHU1TgT9NvuldaV/?= =?us-ascii?Q?WM2FwDD5gTDH8n2fcFXaInsMjX4ANk8ZpwrkWwU0T0Y5eVu+QGeFEsyuPlLZ?= =?us-ascii?Q?RXISySUY+tB/s42uXT3FUhx+Hzza/ssz+V6l6UOrNpx5V6TFXW7v6AZ5U2Lq?= =?us-ascii?Q?ao1PJ8eg5HaXkJBltfyigWu+PCcwxy57a42/nos4cBvGeS3tKPFul6voxb45?= =?us-ascii?Q?XCDg3tz43McI4obuZNXzZaMfK2t6pH5EFzPbmJ7XxdaKPowoQjj+LpwZ0G0G?= =?us-ascii?Q?kvzuKx/DE1FIql81ZpGXEGNBeTOuuZBR9C7QHFOv+1esc5k2pNT6w6tL3F2s?= =?us-ascii?Q?OxZ+8C5oBS3RfJvl6/szd0QgvdE4MeFamgFlOuIoc2pHATwywZWBS0SypC1W?= =?us-ascii?Q?FqSLpeUXg6yVAszz3xt69VZ6TO2aiCncCWIwXHKGtRBbBRGrl7JfwZUfxYOH?= =?us-ascii?Q?pI7diHrLtEX6/qvwGk/j0mS+6DSrm+WVJ+pjmCvrk594j9yZp0+g0bXF082L?= =?us-ascii?Q?hW1W6NOXPYd/CgGIaa9PkDrOR/CRUS1kBKNl1p2aq8eD6DD+oT+Vy+gDF3Ne?= =?us-ascii?Q?Q3qehATbaDIxyBkNbXDT0CgDDrmh8wC8uz1mrLVQEOJIDUiAcVwtshCh8/b2?= =?us-ascii?Q?3eLS7szdsPfiF6jcCpuy4bFADUIE4cOaiIvQnfF4jwm/kEdER33PDF1jUxNI?= =?us-ascii?Q?dms6VwYL7XrkgEJZc7LNcuQJKHE1P6iYmwRzdFVO9BfXMtLNCNNFA1cIvvUk?= =?us-ascii?Q?XF5iYVgiinM7GI7otfTdHi+r4Hk0fHb41ap9QRwDJ0BMv/Wc0UjACN4r2on2?= =?us-ascii?Q?z71NUN5XBh82OBXz1TKHI/+p9yYLy4ob+RU+LKeWit/y+f3qyjIPSvzgFAvX?= =?us-ascii?Q?E0xQ6hs4l7QEtWYUi3QF0bTCfPGQ9T67sGdfH0wSSwVBXBxMz2Mbq+1qMHVn?= =?us-ascii?Q?cqHGAq1EXOhkbAeS+74GwriIG6gV+WoRKC4QH8BC2zGgtHcmg7lMeWjgH//B?= =?us-ascii?Q?L8jwQvtGZpwDlNd2YbNLhhVt447G0nv+9wgF1PsSpdRL+EJkr245d/Nai01Z?= =?us-ascii?Q?YDp2tO4bBGREaUCrV0TS3SR9VAZN3/rKkKatMLNI+ohVu2PEWCXubvmkMRxa?= =?us-ascii?Q?6FABncNVhHPMAW5WNnLqoOoWWWc9r0anVr1kipHSaVUzvhSiojjVnojDr3SN?= =?us-ascii?Q?ZI+iCnudbL/5ETDLjCOaluv7Bq/cDkkqBwAhA+P8nr2W2kAfQsAXOqc3vX0s?= =?us-ascii?Q?sjUme/KDu38cd7i5kle+ZpT4Z8jGr009OdGkWyeDk1HHuqzE7iwWsgRXrXs9?= =?us-ascii?Q?lt+5lb7XBtHBTMTWw3BHtuyAl+pAEar5udey0D8EimnnelPCjpHz?= X-OriginatorOrg: valinux.co.jp X-MS-Exchange-CrossTenant-Network-Message-Id: 9d1c27ad-994d-4825-beda-08defee1531b X-MS-Exchange-CrossTenant-AuthSource: TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 20 Aug 2026 17:34:44.9202 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 7a57bee8-f73d-4c5f-a4f7-d72c91c8c111 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: qyHQWkCLZ35KiBj4IWmz4s6RGZERc/4LerxN26Af3djl0/APLrpbDBKJ+Xu8wz8uGIhlroMuI/XQZUDX5mfSTA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: OS7P286MB7644 Content-Type: text/plain; charset="utf-8" Add a core operation for clearing the control word of one linked-list entry. A later patch uses the operation to invalidate stale CB when resetting a circular LL ring. No functional change. Reviewed-by: Frank Li Signed-off-by: Koichiro Den --- drivers/dma/dw-edma/dw-edma-core.h | 6 ++++++ drivers/dma/dw-edma/dw-edma-v0-core.c | 16 ++++++++++++++++ drivers/dma/dw-edma/dw-hdma-v0-core.c | 16 ++++++++++++++++ 3 files changed, 38 insertions(+) diff --git a/drivers/dma/dw-edma/dw-edma-core.h b/drivers/dma/dw-edma/dw-ed= ma-core.h index e50fa7965778..089f913fd247 100644 --- a/drivers/dma/dw-edma/dw-edma-core.h +++ b/drivers/dma/dw-edma/dw-edma-core.h @@ -138,6 +138,7 @@ struct dw_edma_core_ops { void (*ll_data)(struct dw_edma_chan *chan, struct dw_edma_burst *burst, u32 idx, bool cb, bool irq); void (*ll_link)(struct dw_edma_chan *chan, u32 idx, bool cb, u64 addr); + void (*ll_clear)(struct dw_edma_chan *chan, u32 idx); int (*ll_cur_idx)(struct dw_edma_chan *chan); void (*ch_doorbell)(struct dw_edma_chan *chan); void (*ch_enable)(struct dw_edma_chan *chan); @@ -255,6 +256,11 @@ dw_edma_core_ll_link(struct dw_edma_chan *chan, u32 id= x, bool cb, u64 addr) chan->dw->core->ll_link(chan, idx, cb, addr); } =20 +static inline void dw_edma_core_ll_clear(struct dw_edma_chan *chan, u32 id= x) +{ + chan->dw->core->ll_clear(chan, idx); +} + static inline void dw_edma_core_ch_doorbell(struct dw_edma_chan *chan) { chan->dw->core->ch_doorbell(chan); diff --git a/drivers/dma/dw-edma/dw-edma-v0-core.c b/drivers/dma/dw-edma/dw= -edma-v0-core.c index cc8059182940..bb86d2f60ab5 100644 --- a/drivers/dma/dw-edma/dw-edma-v0-core.c +++ b/drivers/dma/dw-edma/dw-edma-v0-core.c @@ -605,6 +605,21 @@ dw_edma_v0_core_ll_link(struct dw_edma_chan *chan, u32= idx, bool cb, u64 addr) dw_edma_v0_write_ll_link(chan, idx, control, addr); } =20 +static void dw_edma_v0_core_ll_clear(struct dw_edma_chan *chan, u32 idx) +{ + ptrdiff_t ofs =3D idx * sizeof(struct dw_edma_v0_lli); + + if (chan->dw->chip->flags & DW_EDMA_CHIP_LOCAL) { + struct dw_edma_v0_lli *lli =3D chan->ll_region.vaddr.mem + ofs; + + lli->control =3D 0; + } else { + struct dw_edma_v0_lli __iomem *lli =3D chan->ll_region.vaddr.io + ofs; + + writel(0, &lli->control); + } +} + static void dw_edma_v0_core_ch_doorbell(struct dw_edma_chan *chan) { struct dw_edma *dw =3D chan->dw; @@ -669,6 +684,7 @@ static const struct dw_edma_core_ops dw_edma_v0_core = =3D { .handle_int =3D dw_edma_v0_core_handle_int, .ll_data =3D dw_edma_v0_core_ll_data, .ll_link =3D dw_edma_v0_core_ll_link, + .ll_clear =3D dw_edma_v0_core_ll_clear, .ll_cur_idx =3D dw_edma_v0_core_ll_cur_idx, .ch_doorbell =3D dw_edma_v0_core_ch_doorbell, .ch_enable =3D dw_edma_v0_core_ch_enable, diff --git a/drivers/dma/dw-edma/dw-hdma-v0-core.c b/drivers/dma/dw-edma/dw= -hdma-v0-core.c index 19da1c8fd615..47d7a01658eb 100644 --- a/drivers/dma/dw-edma/dw-hdma-v0-core.c +++ b/drivers/dma/dw-edma/dw-hdma-v0-core.c @@ -374,6 +374,21 @@ dw_hdma_v0_core_ll_link(struct dw_edma_chan *chan, u32= idx, bool cb, u64 addr) dw_hdma_v0_write_ll_link(chan, idx, control, addr); } =20 +static void dw_hdma_v0_core_ll_clear(struct dw_edma_chan *chan, u32 idx) +{ + ptrdiff_t ofs =3D idx * sizeof(struct dw_hdma_v0_lli); + + if (chan->dw->chip->flags & DW_EDMA_CHIP_LOCAL) { + struct dw_hdma_v0_lli *lli =3D chan->ll_region.vaddr.mem + ofs; + + lli->control =3D 0; + } else { + struct dw_hdma_v0_lli __iomem *lli =3D chan->ll_region.vaddr.io + ofs; + + writel(0, &lli->control); + } +} + static void dw_hdma_v0_core_ch_doorbell(struct dw_edma_chan *chan) { struct dw_edma *dw =3D chan->dw; @@ -425,6 +440,7 @@ static const struct dw_edma_core_ops dw_hdma_v0_core = =3D { .non_ll_start =3D dw_hdma_v0_core_non_ll_start, .ll_data =3D dw_hdma_v0_core_ll_data, .ll_link =3D dw_hdma_v0_core_ll_link, + .ll_clear =3D dw_hdma_v0_core_ll_clear, .ll_cur_idx =3D dw_hdma_v0_core_ll_cur_idx, .ch_doorbell =3D dw_hdma_v0_core_ch_doorbell, .ch_enable =3D dw_hdma_v0_core_ch_enable, --=20 2.51.0 From nobody Mon Sep 28 15:34:37 2026 Received: from TY3P286CU002.outbound.protection.outlook.com (mail-japaneastazon11020105.outbound.protection.outlook.com [52.101.229.105]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6807D47F774; Thu, 20 Aug 2026 17:34:51 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.229.105 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787247292; cv=fail; b=YfH/l+RTysTrkluouXXznyqKEdsGvo/iobeHQOpTlZU6ZV+V2DEZZFoJC+u4QEta6Zkuoke+brGi2nwuAyL8BUqHjvEapOIS8MJA+THhP+Dfw66v8BghvF58mz0yPZPvh38ktCoOziHxHGONg2O3hfwaxc34W2lDXc4uJLTnydg= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787247292; c=relaxed/simple; bh=s6yjTSqKiqcRJYKGTSdPfrmdsZv/EnTyRj8t/71BYfc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=nmLXcw6nHJ5Pm1YN0yIQC4lgZppXKxzzXqgFf0w5FTV97cKMy2l8O59pi1XD+1PeG90QmbvasGF+5s1l1/ayZ5GHtcJEmgret/UVTojaCCO4/KLq+gZInKffOwD29SQMeaoncC/xqmXanIwbYe97EpBdqjZo/6cc4XfaziOgBg4= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=valinux.co.jp; spf=pass smtp.mailfrom=valinux.co.jp; dkim=pass (1024-bit key) header.d=valinux.co.jp header.i=@valinux.co.jp header.b=nweq+a6/; arc=fail smtp.client-ip=52.101.229.105 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=valinux.co.jp Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=valinux.co.jp Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=valinux.co.jp header.i=@valinux.co.jp header.b="nweq+a6/" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=kZJbpeEOw2m5K+dPmk5sp7lwKuugAeUVhkxzZVsMSxTXin1Z/RiArcQxPA36hTvKwKvz34ahTHicCbRYiYXTyy6ATRUQlHAK7ccs26+GASUlCQzyk9rVM4sOupykztfwAMkdrPKLNCcC7sa+gAw82hb7WHHhCX4U0eW7hFHYNvUjkxZ8Q4LmxNJotssgSvaRksEq4OjZdjkzjikmRW31yh9pV8hDS4F94FMrIqlFq81S0XAeerpvx6z9V7Z+aklaip0qeridtm3leFH9OTXE7z8csUbndxr36+pS1bluZLH+ANUddaplk3wgmnmHoSmHQC9ODlojV61ReTie2GLA8w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=rP4F0Clhk3SfObkPvLD1YUWUHe1d2sPeo4jkK58D6eA=; b=rq64VU5QRzVsOznXhmJsRgpInwI1pnMR2FY+voXlLctaHYMxdrJ4qABrfwhmsHcubhQ7K1aTjqR0D8xhFaqSEDmouZErlL1nBaEQP0fsxQu6ypxiFA2joVef9+Gyby22mQFDE64DKbEANm62dPCnP4hxGRniz6esOjDe0gK92AdxN7mo+32ZK9w3FTweNbDnWIbS3mmpc17G6rjU/cKHAqHvUoJXU7vJb4Bu22fpHDSvtR0CDn+MBwC2nFwxsU+FO1DRy3fkQxFJsoGEe+LE13B2yhGK/7ZQD/b6OeUDTkzGjiQRqmkSKTK2op5zgVQBzQMwZSRJLg/91Tb0HVDGTw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=valinux.co.jp; dmarc=pass action=none header.from=valinux.co.jp; dkim=pass header.d=valinux.co.jp; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=valinux.co.jp; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=rP4F0Clhk3SfObkPvLD1YUWUHe1d2sPeo4jkK58D6eA=; b=nweq+a6/hqps7J1eAff8qRmun7D5WHTTSG88dq9mPdbOdluSbPuw0VpCKmoG6FYFQn9oErar/V5dHJFXUtWa1GTu+ec2KTI4oYgv5BgEtgk58L3vazXSV2DVB0isAhE8Yu4UyADHGtrrmlqo5MlLpgkOMsk1jOdxEstZt+VvQIw= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=valinux.co.jp; Received: from TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:38f::10) by OS7P286MB7644.JPNP286.PROD.OUTLOOK.COM (2603:1096:604:461::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.339.8; Thu, 20 Aug 2026 17:34:45 +0000 Received: from TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM ([fe80::2305:327c:28ec:9b32]) by TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM ([fe80::2305:327c:28ec:9b32%3]) with mapi id 15.21.0339.007; Thu, 20 Aug 2026 17:34:45 +0000 From: Koichiro Den To: Vinod Koul , Frank Li , Manivannan Sadhasivam , Gustavo Pimentel , Kees Cook , =?UTF-8?q?Krzysztof=20Wilczy=C5=84ski?= , Kishon Vijay Abraham I , Bjorn Helgaas , Christoph Hellwig , Serge Semin , Cai Huoqing , Niklas Cassel Cc: Devendra K Verma , dmaengine@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v6 03/10] dmaengine: dw-edma: Factor out linked-list transfer start Date: Fri, 21 Aug 2026 02:34:32 +0900 Message-ID: <20260820173439.2004068-4-den@valinux.co.jp> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260820173439.2004068-1-den@valinux.co.jp> References: <20260820173439.2004068-1-den@valinux.co.jp> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: TY6PR01CA0016.jpnprd01.prod.outlook.com (2603:1096:405:3bb::7) To TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:38f::10) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: TY7P286MB7722:EE_|OS7P286MB7644:EE_ X-MS-Office365-Filtering-Correlation-Id: d50e45e8-fd26-4122-3540-08defee1538e X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|10070799003|7416014|376014|23010399003|1800799024|366016|921020|56012099006|10067099003|18002099003|22082099003; X-Microsoft-Antispam-Message-Info: tE8/9Z7ClJgGKovc6ntevoN1vuTmxHY9mgXZ9+eUshaaxkgWykf2B5wMRkzmuJbzqdODZz84X03tBFtC7PISvoHG98OhxJuq8MqqIJrPmntUv0xJjUpP2im29j5f5xddjHXTtdePliauEKLXLIWWm3XAPYbJEvXSfzUCVk8zVY3FB7FwlHVyZZIjnM5bP/+jM/NdotVm4Q+2X/TKnFEydV0ju0rXvR5RJa1eOqDRAPdLtj74fJE5uhL58NdpIS+NyPyQYZjrZDfeBt1kWCQaaVbd+RDuTc0RFjr6h/ioVyg9ExNmFwtT2V2Ceq851Z7f8eNntvrqEwomXr8jqui9pr75HQLESL+b/O8NCEwCna1SfNJydgyPKrKPF7WaFM79l6Pg1y3mHDa+JG9iHWQzFFlc8g6il416tP9yPQI8vhwBWCmEcXRtRAkfMIlfyfVyTd4npzxkw4dVFR/pJByRcduaeeHR8rLN7B+U/yDZ9xQQZKSEoq5CiQcFhCIxCzQIeUpS11ply8EDLTxBUCGtL9bWsT0iq5UjewJwqureQ6XkHmZjBgVN1G5PfsNJgM/Ft8PSQiNHaw5M0Bzni1QP11Hhwb8znXBwc/dB+y1W+nC8MnSUoFvgFlEQ96LLxmHYFkuo0xFGKbWOq3lNPDLrp3ljTd6mISWn938IDtVJD/8dpbr7e5iCmMlUBdCtuoFD7mXuwB8f5Gr6juuLqJeJDA== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230040)(10070799003)(7416014)(376014)(23010399003)(1800799024)(366016)(921020)(56012099006)(10067099003)(18002099003)(22082099003);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?2Mqxys4xH/U25s62WywR8/H/f6+vEEnVk7eDDXyDCazSt+5cVnmSc8tLIG5L?= =?us-ascii?Q?4KBOeIWHJu79FsenqzvZvkOERxXQio2Wh2vJwsom+RRQ8Zt1hzuj5H0Ti8xi?= =?us-ascii?Q?XBbZXZp2mFSgkUHvRbV7qY+nvPO9QBpT26DtwosBSqVEWcx29vqB7ilHeOqG?= =?us-ascii?Q?N7FC6TOjxNkp5YzziwWv1UkjbZdZDdI4PaxJjuax17ReJ4Bh/wMkyg/MF/u1?= =?us-ascii?Q?XebEV7mRiK4ikZ4MqLwFfk312bdvcukUvq5/VuFzPYRWvpqfu9LKTrvKRCW3?= =?us-ascii?Q?BcsWpvUXhD4UmbbI2Y0QLCwbkDiArSfZFLRwnPnq/spNQR9vUPSHzOdM5LCh?= =?us-ascii?Q?petYBBPeKx6XGed2pLkhPsIxzEDfS8xbp+p6Uq6h35PN+ChzqzhlePPuZwg7?= =?us-ascii?Q?cusmRjZy8BBrEfZJzpZnYW6OTvpbXZWUaXGZj+XjFbvi1VLTf9JwWzHhu40b?= =?us-ascii?Q?SDRlwfQqV6+1pKXgpD17loC1bhqurt2OCF1b2h0iw1uauso9RcD0WazPGKYi?= =?us-ascii?Q?gOkgeQ2tbkGog01mhe9w/YJqI/xsYzrosoepXUtjV8Yg0Ioyu5pGUGEco/7B?= =?us-ascii?Q?qcpCHJDAQsHI4vzm/HuXdtV6d/cFCNAN5gvK8xaV9StAwXO1EdVYcMYFCN1w?= =?us-ascii?Q?Xl2519jDS6h0/yn+fuTbCy3/Zzi89dewV8vNxcNmtoadYciRObiyxqLsI+tj?= =?us-ascii?Q?89LSc/ysH0GCNW6BpGbEd0x4Lix+SQZJ94JKJrBpDpc90hk87gK61ns2jBGd?= =?us-ascii?Q?WATxQaIdmWNkxqUqBZIbCydc2d1Jj13Q0mAY5354pjODc0do7rhCTNGopNUT?= =?us-ascii?Q?rh0eH0pYh4f+s6PkNtqT0i5ygwIPoDsK9B9e2S72AgQtGgPu+M8INLaCv2rd?= =?us-ascii?Q?/Kt4Nte1bP0e2V47ghi/C6GCzIfjJ69nKrsEYCJayIB67dF/AazqYRDo00YG?= =?us-ascii?Q?oUl+PZH2sZq0RluSqDvVvPkVuwSFFjNA0QtWUAynCOIW5od9g0OVizNQEQmT?= =?us-ascii?Q?oRtNYvfcFIEn2Cnrctn6Xf2H+M2p1dMow1Dopb/QBlplXYn4iT9gwQjGP/x2?= =?us-ascii?Q?N0IlqP1eMnRCdbbGmSnV51aMed3uGN8eko7zaZffYE+a9mg7OyfHkOPxGZ8o?= =?us-ascii?Q?UH3n2eaZUqUag6odPsL/Wwmzhtger2JBBG0Mh6ThB3+X0pKGG9BJfpr/0Jha?= =?us-ascii?Q?CiPb+98hy55/U5VQbn7FQF15UsHfKa9PGHJIBwb+51Nzcdij3JCTfhRia2ex?= =?us-ascii?Q?wSqlgDnjOqqT56mNds+vGZmWZzs4Jo9j3tHIc5U+qwMlQLMU4jUn6XEViKBG?= =?us-ascii?Q?s44UOIwmVd+jnF40SqbrvCp3sihVeP4HGe2I20QcAmnUH1B0oGQvI2+lENCa?= =?us-ascii?Q?gp2obEnom3fQCDy8KhD8OrdYYehy1iS/VRid7i7tRnMlP86w9EksZ3loO0w1?= =?us-ascii?Q?eWR/ZKYwwx12UtxdEx91sEdQifKskG24BMS+60nOyIVXnwPlWwQQpM8CioI9?= =?us-ascii?Q?QWkfjOxtKYBXR+KOavxAGBEUrKuDV349mcX+Dl5HoSBWZNYP7quU2xVQvL4Q?= =?us-ascii?Q?iWPn7vlE9Z6dyqlYeTKwgAfPuywMQStBFKi+RBe0JoF9BqHfTi5L6ZDM2Uu+?= =?us-ascii?Q?NJT/KzxoKJiEmJ8QrrhyoahES748AwK5VuaBBLpG5OTmjYEauRhlpvJsCvva?= =?us-ascii?Q?dfXimVGG8TMShIgUJ3LgDQOTQntV2QGuPUm+IceS94CG0dEtATSGyNMU6X4B?= =?us-ascii?Q?icc4MOXT5BRXooXtN6swaz8P5Per/p1gVeX41+rl0m+mZhKYkWbt?= X-OriginatorOrg: valinux.co.jp X-MS-Exchange-CrossTenant-Network-Message-Id: d50e45e8-fd26-4122-3540-08defee1538e X-MS-Exchange-CrossTenant-AuthSource: TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 20 Aug 2026 17:34:45.6942 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 7a57bee8-f73d-4c5f-a4f7-d72c91c8c111 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 6Pu/TGWTmW3RxyWUlNVzn9sNp6nRDGY0LpWlSgOrScimX+xjlvXjJFacixajzjl4lTpptHA+ruz4J4mKVO+MdQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: OS7P286MB7644 Content-Type: text/plain; charset="utf-8" Move linked-list programming into dw_edma_core_ll_start(). It can derive the first-batch state from desc->start_burst, so dw_edma_core_start() no longer needs a pass-through argument. No functional change. Reviewed-by: Frank Li Signed-off-by: Koichiro Den --- drivers/dma/dw-edma/dw-edma-core.c | 29 +++++++++++++++++++---------- 1 file changed, 19 insertions(+), 10 deletions(-) diff --git a/drivers/dma/dw-edma/dw-edma-core.c b/drivers/dma/dw-edma/dw-ed= ma-core.c index 03b2c2188351..a6bb68ffdfe2 100644 --- a/drivers/dma/dw-edma/dw-edma-core.c +++ b/drivers/dma/dw-edma/dw-edma-core.c @@ -67,17 +67,11 @@ static void vchan_free_desc(struct virt_dma_desc *vdesc) kfree(vd2dw_edma_desc(vdesc)); } =20 -static void dw_edma_core_start(struct dw_edma_desc *desc, bool first) +static void dw_edma_core_ll_start(struct dw_edma_desc *desc) { struct dw_edma_chan *chan =3D desc->chan; - size_t i =3D 0; - - if (chan->non_ll) { - chan->dw->core->non_ll_start(chan, &desc->burst[desc->start_burst]); - desc->done_burst =3D desc->start_burst; - desc->start_burst +=3D 1; - return; - } + size_t i; + bool first =3D !desc->start_burst; =20 for (i =3D 0; i + desc->start_burst < desc->nburst; i++) { u32 idx =3D i + desc->start_burst; @@ -101,6 +95,21 @@ static void dw_edma_core_start(struct dw_edma_desc *des= c, bool first) dw_edma_core_ch_doorbell(chan); } =20 +static void dw_edma_core_start(struct dw_edma_desc *desc) +{ + struct dw_edma_chan *chan =3D desc->chan; + + if (chan->non_ll) { + chan->dw->core->non_ll_start(chan, + &desc->burst[desc->start_burst]); + desc->done_burst =3D desc->start_burst; + desc->start_burst +=3D 1; + return; + } + + dw_edma_core_ll_start(desc); +} + static int dw_edma_start_transfer(struct dw_edma_chan *chan) { struct dw_edma_desc *desc; @@ -114,7 +123,7 @@ static int dw_edma_start_transfer(struct dw_edma_chan *= chan) if (!desc) return 0; =20 - dw_edma_core_start(desc, !desc->start_burst); + dw_edma_core_start(desc); =20 desc->cb =3D !desc->cb; =20 --=20 2.51.0 From nobody Mon Sep 28 15:34:37 2026 Received: from TY3P286CU002.outbound.protection.outlook.com (mail-japaneastazon11020105.outbound.protection.outlook.com [52.101.229.105]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 13EF1481FA8; Thu, 20 Aug 2026 17:34:53 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.229.105 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787247294; cv=fail; b=tHSGU174sJewbXAit+8FK3XnWGYa8+MX2om/EFtI64XzITwwaY/ebRB/obTmO6T3O6s1j5KxpGN6X7XrNb8vO+8wwaRIEpwehtnA45rw7/b1pBIZqaGR75+309fFbg1zYcGmyPwBVvPa3WKpGfgxmg4Z6N2e79pe/Rst4cJooo4= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787247294; c=relaxed/simple; bh=LmXkBzEplLc+P22F8dXmEeTv4mUl1MS5Ke6FGnIfgJM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=B2APIn2B43CxKDCG/LJywpA+kXXRQW75qF2IcnXnmWYWjn/Qk+6uUVuUtqtanWBOKg98MH1egk4/ghdisH4uIser6/IfdoEXjKCg37IiBe9SFfyXFfO50ecAbkoFLuJKUDOWDe3LinMoZdo5dU56Kt66PAOYuU/gTLpl/CIbAKk= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=valinux.co.jp; spf=pass smtp.mailfrom=valinux.co.jp; dkim=pass (1024-bit key) header.d=valinux.co.jp header.i=@valinux.co.jp header.b=CdZITj/k; arc=fail smtp.client-ip=52.101.229.105 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=valinux.co.jp Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=valinux.co.jp Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=valinux.co.jp header.i=@valinux.co.jp header.b="CdZITj/k" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=NA9gQ6oHY55kIGK1+EgHcwLsz1m5FBlTA6gs/3KBV/+IpBoXwLrSgsa4s5ThbdTXfuqfZjxviaxqaxHqYOewTVSbXjiQzRwkxSNsKih9gSfxTIlo848ab/UCspJ7i/LOi1TzgbLYx9YHbcvIFaLAfNoLx7Dpi/SiWstaQvkfDLGc+XZFbd5mhVxJfHp9iiEiu4tNvq/98HPDK6JCttZU0yxyQjoHjjnxIvO65wdycccOZnzbT7im6IyvkMdFTS3gi+DtG9zV71a0LkwsAKoYdIQ9cvCX1ZZhdWltLSCPNO/kb6I3dYL93YZ5OXTp3Enih/yZBPTpYqOtPE4eAzpa7Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=v3+o2NYurq3UqKalQnxyZdrxpr7OwWCKlVqJEsTuJP0=; b=q++IYByQwaEewAu7DEsy7Aiug05m1LTnPl7RV3RU8EyUknnCNsGWQzBYoEMgqfWqAIyVbHZMrcReSEuRPf/62P63ikGCI2byFkIsZeZuo2xhXvTZMvskYy92axiw27CIb3AWGWSp3x11SdML50TGJwB7dcTUAcTXRfyz4FPEvGINqZvEzOHytrXlzQs5aVea1nGwYxCbFWfy/iI7YY/I76OV8GsPca6hvS1guTirqEleR5uDPe1G0MKQONyxse3LiZqTAoCd2mb1UHd1u6CbEjmgDdn3/tWezxjtleMEOclWX6qy5aC61GB2RvOUQ3aSQ6cGPjTVbFtWZZPGl7DWqA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=valinux.co.jp; dmarc=pass action=none header.from=valinux.co.jp; dkim=pass header.d=valinux.co.jp; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=valinux.co.jp; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=v3+o2NYurq3UqKalQnxyZdrxpr7OwWCKlVqJEsTuJP0=; b=CdZITj/kSjrG6eqFdBK2LOv0WGCaw8hYUjSGIvUbAk+skkD0Q17ZGJl2+rrKob1U2FnoxIaJdDjY2WUHLce/1zVLHBRzIOfRAUz2VNYn6lYzueaZ0VugsfMcQFthlZhhSGZBzK/chPmvarN9d8/tF0RBgjB//P9VvlYnIMXAAEg= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=valinux.co.jp; Received: from TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:38f::10) by OS7P286MB7644.JPNP286.PROD.OUTLOOK.COM (2603:1096:604:461::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.339.8; Thu, 20 Aug 2026 17:34:46 +0000 Received: from TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM ([fe80::2305:327c:28ec:9b32]) by TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM ([fe80::2305:327c:28ec:9b32%3]) with mapi id 15.21.0339.007; Thu, 20 Aug 2026 17:34:46 +0000 From: Koichiro Den To: Vinod Koul , Frank Li , Manivannan Sadhasivam , Gustavo Pimentel , Kees Cook , =?UTF-8?q?Krzysztof=20Wilczy=C5=84ski?= , Kishon Vijay Abraham I , Bjorn Helgaas , Christoph Hellwig , Serge Semin , Cai Huoqing , Niklas Cassel Cc: Devendra K Verma , dmaengine@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v6 04/10] dmaengine: dw-edma: Make DMA link list work as a circular buffer Date: Fri, 21 Aug 2026 02:34:33 +0900 Message-ID: <20260820173439.2004068-5-den@valinux.co.jp> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260820173439.2004068-1-den@valinux.co.jp> References: <20260820173439.2004068-1-den@valinux.co.jp> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: TYCP301CA0015.JPNP301.PROD.OUTLOOK.COM (2603:1096:400:386::17) To TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:38f::10) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: TY7P286MB7722:EE_|OS7P286MB7644:EE_ X-MS-Office365-Filtering-Correlation-Id: 4c6b76d3-9650-4b63-8eac-08defee15405 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|10070799003|7416014|376014|23010399003|1800799024|366016|921020|56012099006|10067099003|18002099003|22082099003; X-Microsoft-Antispam-Message-Info: o/BSkdD6JHhLL23hPctUvaAYdVOasUkKPbncfZdCFrwigTQqLnJc848x1x+OGWAd9ip7mgP50DtiK5EyJrBCMIuuYttXVLzxclMZzeGn9pC+rvvdZVgv2wJoG5x41lZRsao0LQjde9KkiOvfu3dnErqVrz9P2VzLU8QaiE/qf33vPeSy5OyMGOHSWU5h4CeTTanxrrWPUkD6JlNY1mK6Ygec4/754+jPYgGtkn94jHlepuFWHuOW6wXSeYY8cxJPvbt2taiaIsm8GTNJvQXNlMq2y0SxF7keX/jYX4hb3YybnMM8YWnsoTfpzuITPEoqzi+OGZ2QtVyYxMqAG47HzGP7MaU9J5EammkqfpD2kiFeRF/N07kkfocS86Zs2eXx7pLdO9UD8ePQGXtcSG41du7awsTOrFl1nffFpnyJe8s+53/K+4dm2XXucy9RVuHPsZYNyMxj+CJYcyjDHlN3h0ClJDGpndV4yS7aklLCiit8ISCuDziQqtKLzXqpcT3E6pGj2fzr2HomaRINeoL3f80fCBxwk0dFUrsEZK/vTzBmcIqWTdcDpFpQV4lI1QaVKxJSmUGIEfhBnKI+flRae/GJB7WqCTgy5Y/9ySGr59w245z1E51XmaSkdatjIvB8YUYN8Fgiw9lCtbH6e7+rDixBF8w0QvY8vg9XIVivSHSqk4mW6txNKvzishenkdRU3b5J6BhTLZ/Ah0XkhuFh+g== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230040)(10070799003)(7416014)(376014)(23010399003)(1800799024)(366016)(921020)(56012099006)(10067099003)(18002099003)(22082099003);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?F+hYqP1L22ewCOTiJQ9TiIBJFJpk32szfM9gcX8LT22TWZX9BIAmZ8knQpYt?= =?us-ascii?Q?ZRaTV+3mYh6tQLnsd9mFvLyo5zEYAw6QDo2eh2AHs0bIaUuVo8d1yvNO1gJR?= =?us-ascii?Q?Xr5LRjtRA6HkQ2WUucBi2RXtX2iNIo5JVEDoc/oZl8c0a62l1OtKVFxmBpxO?= =?us-ascii?Q?pOA6DE1zJE5WjI8UnSS0T/DLzO9ll5Y1sa2M1oDSCuEK4io8ObM3y8EJ8+q7?= =?us-ascii?Q?YzAWYHXofEqPnNvLRfRcTW2lcbhvW9Gv1e8Olw8y8xG6KSa/sQAuPTKtGLTk?= =?us-ascii?Q?L9+pa3890wJa9Mlwue9ZfLpIby4R48czPMeWZkFkIzkjHvs2R4tY4Gkzrhla?= =?us-ascii?Q?IZBNHPw+3XX4CX4s0oay7i0VDDUzVv41rvzIQeqotQhx5vGp5K3HB2jd2V2M?= =?us-ascii?Q?dDBygZ6LkMxz5EJddaaXus7B8ThdauqjurvuCn0ihzNNyOXbTfPNmHPQHwie?= =?us-ascii?Q?cXuLBlQNng+omk4Ron9lBCUS4C5groTk+o4KUNse4uHh3Phbx1rhy0PpCzxN?= =?us-ascii?Q?b4VCcL93RCKgCa7aOJ8IKmekEI5DGbWBZ/UJ0c1lf7x2GLCFwu4Cxp2OF66l?= =?us-ascii?Q?0VWOsTF+NTelz8d8TBJ+ai1SOsH6DPXxbi4xMBeiRM2tY66JT5vtNvTyyDCl?= =?us-ascii?Q?31dOtOeYqyc1JOByhBO07FlOvYSbT2lMPj5vKvydZAnfZmmTglvgHruoFowc?= =?us-ascii?Q?c87d/XJ08RexFT76wwH1P8itJo9riY4Liwb5tC3OwzBEmvoVHLpc6JywNUv5?= =?us-ascii?Q?jo2LNGFJOlK+4Yur/kDy5le9sM+7xJGZelzHtdQ4bzHWUNcI0AoWIi+skWCD?= =?us-ascii?Q?BzrohH88dFxmG51GrC7BsPZBWoegnSphXu4yb0TM8YUrSY9SEsYx6zRlKg9Q?= =?us-ascii?Q?YrUWzxSUCI1021kWgA6jdaBhaafS4BCkW+PQ0dR41YdTaYq+ljBCRmgzZGgc?= =?us-ascii?Q?Z079gZyX1AO3Yl0XELsvbxwT3AznSY0+DHCo2oGKR7kEL050+qRifx+S+TZY?= =?us-ascii?Q?VIBFU+B+eocD7z5metl0+QFenWjlDo3tKrnEK35ptL+sTpqn/m3/Io+oP1aF?= =?us-ascii?Q?LXFlP3ENwJbI+GCugtlSq5lEbjhpaQ5825m/xgubOK5flrEMev8ucRLY2qHh?= =?us-ascii?Q?YPDv5qRLXZkRJnzSsmzTFkwAZUj5KFOjB/d4ZR1m39AAVshQUKsXyVheJ7nW?= =?us-ascii?Q?GzlwG8KmazleD1ZuXmnJ0Rze3ZlxS3lJkJYtcTi9ebQlnwHUnGQSDUr0G/Qm?= =?us-ascii?Q?/+UI1hDHpKjOjXvVz66nD2WIGIqnvvtbVxEkvoGHaaJi5k1KmSjQ8Grk5HIQ?= =?us-ascii?Q?MMt4yOEieLYj58rnYH/10ml4GRcOW3IBuMYVV1OCU2NZup3Xs9Eqa9si1Cm0?= =?us-ascii?Q?D7/ScgoLro0GJyFoycSvwPBotECYrfTCIKWPsxQcoHO7GEsXzNp0lIVAcE6c?= =?us-ascii?Q?plYI3utvVLPXHPMw5lkK1ySJixZC7UJoAInTCJmAhV87QpVlYeqrcYQUTf/+?= =?us-ascii?Q?pApnr+rAxQTPylgtKo7Yr054FFg2Ebe0NkHxie6vz7xmwGLFW9t7LgHMwcSE?= =?us-ascii?Q?UsFbA52QvNxIWAYCF6j8HhzgAznNDo32TDvO/z0bzF+livUou6C1zg7oxcEj?= =?us-ascii?Q?ogsyZmbdwR/QJJmrAhAZ1QjHHE8XPLLqlxYp2pmy3QF+rshPLHWp/Rd8e1Pa?= =?us-ascii?Q?Th4WNEG9thNH40cRwL9k3woYXgPhCri+JMkCWFrJWeamdvPt+vzBWNtLzFKt?= =?us-ascii?Q?x0MJjnv/wFKkfFYiKeK8N01eAsERk+3UTa4ZRO4v0y6teMttUIsw?= X-OriginatorOrg: valinux.co.jp X-MS-Exchange-CrossTenant-Network-Message-Id: 4c6b76d3-9650-4b63-8eac-08defee15405 X-MS-Exchange-CrossTenant-AuthSource: TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 20 Aug 2026 17:34:46.4417 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 7a57bee8-f73d-4c5f-a4f7-d72c91c8c111 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: CbDfBmOGKZ5S5jval2GUJ/1xUZT4lU2K+MGmK8WSSmcPXgZqr7oa9E08jdzWTc8ozu1zWkQqv2E1Uekq0RLBcg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: OS7P286MB7644 Content-Type: text/plain; charset="utf-8" From: Frank Li The driver currently rebuilds the whole linked list for every transfer. Use it as a circular ring instead. Append entries at ll_head with the current cycle bit, and reserve the final entry for the link back to the start. Clear control words before first use so stale cycle bits cannot become valid entries. Reject rings without usable data slots and, until reclaim support lands, descriptors that exceed the usable ring capacity. Termination and abort can discard descriptors while ll_done still trails ll_head. Reset the ring after the channel has stopped so the next transfer does not inherit occupied slots. This prepares the driver for appending requests while the engine runs. Signed-off-by: Frank Li Reviewed-by: Frank Li Co-developed-by: Koichiro Den Signed-off-by: Koichiro Den --- drivers/dma/dw-edma/dw-edma-core.c | 125 +++++++++++++++++++++++------ drivers/dma/dw-edma/dw-edma-core.h | 27 ++++++- 2 files changed, 125 insertions(+), 27 deletions(-) diff --git a/drivers/dma/dw-edma/dw-edma-core.c b/drivers/dma/dw-edma/dw-ed= ma-core.c index a6bb68ffdfe2..1af262b6e881 100644 --- a/drivers/dma/dw-edma/dw-edma-core.c +++ b/drivers/dma/dw-edma/dw-edma-core.c @@ -51,13 +51,19 @@ dw_edma_alloc_desc(struct dw_edma_chan *chan, size_t nb= urst) { struct dw_edma_desc *desc; =20 + /* + * For now, a descriptor that does not fit would stall the channel + * forever: reject it up front. + */ + if (!chan->non_ll && nburst > chan->ll_max - 1) + return NULL; + desc =3D kzalloc_flex(*desc, burst, nburst, GFP_NOWAIT); if (unlikely(!desc)) return NULL; =20 desc->chan =3D chan; desc->nburst =3D nburst; - desc->cb =3D true; =20 return desc; } @@ -67,30 +73,75 @@ static void vchan_free_desc(struct virt_dma_desc *vdesc) kfree(vd2dw_edma_desc(vdesc)); } =20 +static void dw_edma_core_reset_ll(struct dw_edma_chan *chan) +{ + u32 i; + + chan->ll_head =3D 0; + chan->ll_done =3D 0; + /* Drop stale CB bits before reusing the circular LL ring. */ + for (i =3D 0; i < chan->ll_max; i++) + dw_edma_core_ll_clear(chan, i); + chan->cb =3D true; + + dw_edma_core_ll_link(chan, chan->ll_max, chan->cb, + chan->ll_region.paddr); + + dw_edma_core_ch_enable(chan); + chan->ll_valid =3D true; +} + +static u32 dw_edma_core_get_ll_dist(struct dw_edma_chan *chan, u32 from, u= 32 to) +{ + return (to + chan->ll_max - from) % chan->ll_max; +} + +static u32 dw_edma_core_get_used_num(struct dw_edma_chan *chan) +{ + return dw_edma_core_get_ll_dist(chan, chan->ll_done, chan->ll_head); +} + +static u32 dw_edma_core_get_free_num(struct dw_edma_chan *chan) +{ + /* Keep one data entry free so equal indices mean an empty ring. */ + return chan->ll_max - 1 - dw_edma_core_get_used_num(chan); +} + +static bool dw_edma_ll_pending(struct dw_edma_chan *chan) +{ + return chan->ll_head !=3D chan->ll_done; +} + static void dw_edma_core_ll_start(struct dw_edma_desc *desc) { struct dw_edma_chan *chan =3D desc->chan; size_t i; - bool first =3D !desc->start_burst; + u32 free; + + free =3D dw_edma_core_get_free_num(chan); + for (i =3D desc->start_burst; i < desc->nburst && free; i++, free--) { + /* + * Refresh the link element before filling the last data slot so + * the next lap has the updated CB value. + */ + if (chan->ll_head =3D=3D chan->ll_max - 1) + dw_edma_core_ll_link(chan, chan->ll_max, chan->cb, + chan->ll_region.paddr); =20 - for (i =3D 0; i + desc->start_burst < desc->nburst; i++) { - u32 idx =3D i + desc->start_burst; + dw_edma_core_ll_data(chan, &desc->burst[i], + chan->ll_head, chan->cb, + i =3D=3D desc->nburst - 1 || free =3D=3D 1); =20 - if (i =3D=3D chan->ll_max) - break; + chan->ll_head++; =20 - dw_edma_core_ll_data(chan, &desc->burst[idx], - i, desc->cb, - idx =3D=3D desc->nburst - 1 || i =3D=3D chan->ll_max - 1); + if (chan->ll_head =3D=3D chan->ll_max) { + chan->cb =3D !chan->cb; + chan->ll_head =3D 0; + } } =20 desc->done_burst =3D desc->start_burst; - desc->start_burst +=3D i; - - dw_edma_core_ll_link(chan, i, desc->cb, chan->ll_region.paddr); - - if (first) - dw_edma_core_ch_enable(chan); + desc->start_burst =3D i; =20 dw_edma_core_ch_doorbell(chan); } @@ -123,9 +174,10 @@ static int dw_edma_start_transfer(struct dw_edma_chan = *chan) if (!desc) return 0; =20 - dw_edma_core_start(desc); + if (!chan->non_ll && !chan->ll_valid) + dw_edma_core_reset_ll(chan); =20 - desc->cb =3D !desc->cb; + dw_edma_core_start(desc); =20 return 1; } @@ -159,6 +211,19 @@ static void dw_edma_terminate_all_descs(struct dw_edma= _chan *chan) dw_edma_terminate_vdesc_list(&chan->vc.desc_submitted); } =20 +/* Must be called with vc.lock held after the channel has stopped. */ +static void dw_edma_finish_termination(struct dw_edma_chan *chan) +{ + dw_edma_terminate_all_descs(chan); + + /* Preserve a clean ring; resync only if entries remain published. */ + if (!chan->non_ll && dw_edma_ll_pending(chan)) + dw_edma_core_reset_ll(chan); + + chan->request =3D EDMA_REQ_NONE; + chan->status =3D EDMA_ST_IDLE; +} + static void dw_edma_device_caps(struct dma_chan *dchan, struct dma_slave_caps *caps) { @@ -299,17 +364,15 @@ static int dw_edma_device_terminate_all(struct dma_ch= an *dchan) if (!chan->configured) { dw_edma_terminate_all_descs(chan); } else if (chan->status =3D=3D EDMA_ST_PAUSE) { - dw_edma_terminate_all_descs(chan); - chan->status =3D EDMA_ST_IDLE; + dw_edma_finish_termination(chan); } else if (chan->status =3D=3D EDMA_ST_IDLE) { - dw_edma_terminate_all_descs(chan); + dw_edma_finish_termination(chan); } else if (dw_edma_core_ch_status(chan) =3D=3D DMA_COMPLETE) { /* * The channel is in a false BUSY state, probably didn't * receive or lost an interrupt */ - dw_edma_terminate_all_descs(chan); - chan->status =3D EDMA_ST_IDLE; + dw_edma_finish_termination(chan); } else if (chan->request > EDMA_REQ_PAUSE) { err =3D -EPERM; } else { @@ -645,6 +708,8 @@ static void dw_edma_done_interrupt(struct dw_edma_chan = *chan) DMA_TRANS_NOERROR); list_del(&vd->node); vchan_cookie_complete(vd); + if (!chan->non_ll) + chan->ll_done =3D chan->ll_head; } =20 if (chan->request =3D=3D EDMA_REQ_PAUSE) { @@ -659,9 +724,7 @@ static void dw_edma_done_interrupt(struct dw_edma_chan = *chan) break; =20 case EDMA_REQ_STOP: - dw_edma_terminate_all_descs(chan); - chan->request =3D EDMA_REQ_NONE; - chan->status =3D EDMA_ST_IDLE; + dw_edma_finish_termination(chan); break; =20 default: @@ -685,6 +748,8 @@ static void dw_edma_abort_interrupt(struct dw_edma_chan= *chan) list_del(&vd->node); vchan_cookie_complete(vd); } + if (!chan->non_ll) + dw_edma_core_reset_ll(chan); chan->request =3D EDMA_REQ_NONE; chan->status =3D EDMA_ST_IDLE; spin_unlock_irqrestore(&chan->vc.lock, flags); @@ -872,6 +937,9 @@ static int dw_edma_alloc_chan_resources(struct dma_chan= *dchan) if (chan->status !=3D EDMA_ST_IDLE) return -EBUSY; =20 + /* The hardware context may have been invalidated while unowned. */ + chan->ll_valid =3D false; + return 0; } =20 @@ -963,6 +1031,13 @@ static int dw_edma_channel_setup(struct dw_edma *dw, = u32 wr_alloc, u32 rd_alloc) else chan->ll_region =3D chip->ll_region_rd[chan->id]; =20 + if (!chip->cfg_non_ll && chan->ll_region.sz < 3 * EDMA_LL_SZ) { + dev_err(dev, + "channel %s[%u]: LL region has fewer than 2 data entries\n", + str_write_read(chan->dir =3D=3D EDMA_DIR_WRITE), + chan->id); + return -EINVAL; + } chan->ll_max =3D chan->ll_region.sz / EDMA_LL_SZ - 1; =20 dev_vdbg(dev, "L. List:\tChannel %s[%u] max_cnt=3D%u\n", diff --git a/drivers/dma/dw-edma/dw-edma-core.h b/drivers/dma/dw-edma/dw-ed= ma-core.h index 089f913fd247..761a5ab4bbb5 100644 --- a/drivers/dma/dw-edma/dw-edma-core.h +++ b/drivers/dma/dw-edma/dw-edma-core.h @@ -60,7 +60,6 @@ struct dw_edma_desc { =20 size_t done_burst; size_t start_burst; - u8 cb; size_t nburst; struct dw_edma_burst burst[] __counted_by(nburst); }; @@ -72,8 +71,32 @@ struct dw_edma_chan { enum dw_edma_dir dir; u8 func_no; =20 - u32 ll_max; + /* + * New LL entries are appended at ll_head. Entries between ll_done + * and ll_head, modulo the LL ring, are owned by DMA; the rest are + * owned by software. + * + * software-owned DMA-owned software-owned + * +---------------+-------------------+---------------+ + * ^ ^ ^ + * 0 ll_done ll_head + * + * The link entry points back to the region start. ll_head =3D=3D ll_done + * means all entries are software-owned and previous DMA work is + * done. + * + * Software always keeps at least one free entry, so the ring is + * never completely DMA-owned. That keeps a hardware-reported physical + * LL index unique within the current ll_done..ll_head producer window. + */ + u32 ll_head; + u32 ll_done; + + u32 ll_max; /* Data entries */ struct dw_edma_region ll_region; /* Linked list */ + bool ll_valid; /* LL context programmed */ + + bool cb; =20 struct msi_msg msi; =20 --=20 2.51.0 From nobody Mon Sep 28 15:34:37 2026 Received: from OS0P286CU010.outbound.protection.outlook.com (mail-japanwestazon11021129.outbound.protection.outlook.com [40.107.74.129]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 8F667481FDD; Thu, 20 Aug 2026 17:34:53 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.74.129 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787247295; cv=fail; b=uPzhzeW4R2aHVUc8WiMK3Qtc3s77rAfZzsXOEXAmxS2La+j1igVDz6I6aIyzz1/Sf7oSjVYrFT8zUzW4tXSpqVlHPvQytNm7apJAMhirTHlRBSJNqClCDU5U+ovHViFOAHzqpfNCzyf6gjq6jpnoEehNBzVI/NEewKE30riyb4w= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787247295; c=relaxed/simple; bh=o9Yt8qsu89dWfLZlbJwIeUfP4sGfrWCwEcoXNBwHpnY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=dPAcCNro173LuG0fbQv4rtIV1I4adDfcIHJVht3ATbeETFEjEpaU+JP5+rJIVWRj1z3oE/5lJDSS/Y8fu+h7FOmZ6hejED1XGF21Fxdxj3sj87yDaLCfUmXo7w1CqVzPQlo0w6rkA+AMIDiFwf0d7nqJpuoMyt/uecUO4I/Eo1U= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=valinux.co.jp; spf=pass smtp.mailfrom=valinux.co.jp; dkim=pass (1024-bit key) header.d=valinux.co.jp header.i=@valinux.co.jp header.b=BV+MkHzV; arc=fail smtp.client-ip=40.107.74.129 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=valinux.co.jp Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=valinux.co.jp Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=valinux.co.jp header.i=@valinux.co.jp header.b="BV+MkHzV" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=zTg0tq9kHt8lfG+FQif7ogZdLltuZLKFp6QXZf5ZU2XTnzPKnLpWjs6o2Nqe9JIKtRvCUjAIrRnK7uE1ANHteF7oHDMnNHUMzfz38p20gArEHmBUSguVE95jwmuSKWMTVhDoT30//OXc6111oHSqQa11RNuooGPUNa/lJ4n3RtEId5O0tmk1i4Vig4N1GsaWT33lvzxx+p+ifzTm/sc7RAxrcb+7kgO4SFq/uv8SktRGS9IyJ+2odyzhOq61JY8MIgNzu41VYUjzCAXL+sSLpbvTOgS5EGSQouw8mq3ESI8mp911nIpZ7ZVRrQy96vvL3KvqyPkSqSi3Ejg2a34r9w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=Np1JmTw6M13u6kvU0n0fdZytyd55WOyMh669qc1th88=; b=ctSwvMd1Ckq7lXsXa4vvAsg4owX8vNciAWIWEJV0ZO0MtQ924CEiUGSyQUXC7WxhpzlT4T2aieDmPxD5YA/XkUigGPD1Gn4fRaQlC78L5LikIIa61oxZPebXDmMbIaRHaFHm7reySC0xSSYTdmljC68dWwZOn0K8wapP5yo3d6fwXcwpLGIhjVz6u01lePvwy5nrOtctmBuNYI/Rkj9W8ZEE3u51ut+FK5llDS1x4bYVMvbhETbAdiwQ2bS0kSOFUD0ERGjAPcbUOPiAzj5pDO0jH9yOIuUsiznNdskhTXkrak2Y6YzDPnqiVN615QzVjgFJ6WS0k9QDf/vRaIQxTw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=valinux.co.jp; dmarc=pass action=none header.from=valinux.co.jp; dkim=pass header.d=valinux.co.jp; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=valinux.co.jp; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Np1JmTw6M13u6kvU0n0fdZytyd55WOyMh669qc1th88=; b=BV+MkHzV+4lzpd5aXIndPZIt7jgEmfn5xxvqzzOScDOdVWWtWWBd4o31eyocMth1DjhSKkYRVXU2YlSQz9Q0q4+Aqhjd47ySq0CoZGu6xUIR/rkhiqpXRha7Ug9vB2wGUPIyDBPLmPN9vcBFCZcff1GOtCioRFGbL5vsMElZ0/U= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=valinux.co.jp; Received: from TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:38f::10) by OS7P286MB7644.JPNP286.PROD.OUTLOOK.COM (2603:1096:604:461::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.339.8; Thu, 20 Aug 2026 17:34:47 +0000 Received: from TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM ([fe80::2305:327c:28ec:9b32]) by TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM ([fe80::2305:327c:28ec:9b32%3]) with mapi id 15.21.0339.007; Thu, 20 Aug 2026 17:34:47 +0000 From: Koichiro Den To: Vinod Koul , Frank Li , Manivannan Sadhasivam , Gustavo Pimentel , Kees Cook , =?UTF-8?q?Krzysztof=20Wilczy=C5=84ski?= , Kishon Vijay Abraham I , Bjorn Helgaas , Christoph Hellwig , Serge Semin , Cai Huoqing , Niklas Cassel Cc: Devendra K Verma , dmaengine@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v6 05/10] dmaengine: dw-edma: Move callback result helper before LL helpers Date: Fri, 21 Aug 2026 02:34:34 +0900 Message-ID: <20260820173439.2004068-6-den@valinux.co.jp> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260820173439.2004068-1-den@valinux.co.jp> References: <20260820173439.2004068-1-den@valinux.co.jp> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: TYCP301CA0006.JPNP301.PROD.OUTLOOK.COM (2603:1096:400:386::15) To TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:38f::10) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: TY7P286MB7722:EE_|OS7P286MB7644:EE_ X-MS-Office365-Filtering-Correlation-Id: 59350fad-3385-454a-b201-08defee154c2 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|10070799003|7416014|376014|23010399003|1800799024|366016|921020|56012099006|10067099003|18002099003|22082099003; X-Microsoft-Antispam-Message-Info: lSuRXkN3kvqeo/m4Hm9IVC/Qr0zOnN+1OA4yOJD9fvqZCXltxzFB7XnmYO5wvI9c7DdWsKdP9InALaLLbsq6EI1W8Ut63aEaayNC+JYI3CmXZdFym2oW8Pq3BV4zB0A3QWrpVplD+xxr+iCCB8aSe2yXtcRiggyw0pVmyrKOHYizes1o5bveFidzHGUfMUB4riCf6khN6va3CGec9JwQ1zp66R6Benx6ei6NXTsdrBYwXZ1Bvyaunz4wVtzszp2b+NM7TMV+RWedG5KYlahDVAJVTGdn8rfAH750qGcSzLqGcJFbwj1+A195OtC6CkVF0fx/nIimxTH9svsdPc2dYd2t0sXQuR0bKjNdauExS8FbuEoW5NckQQJohx7x3V29g9kt4bnJWAmGRaaqQAW97V4fu8tzH6PF916rtlymo88P/YAIfi9ktGVh7bKNtsZnB5TflajxJSqR7qCVhSd18EjgXaOBPbR4IaqSCGzZznGZ5tG46HaWFvwbW7M5sP6GfPCIvN7tydvYkvK6S4wSG6AqtNmN+COAfNZ02kWPS25XK3+mG9L+vi6yX9nMNe54Er/+Y8R/OdRnBxb59y7Q6Y2wo2cTlyxMc6CUiaoV/jO0RIoikppMQHeE+h8aZaYFxL72++B7fLw3IMjSQLPJ0lSAWAEN/Mfz5a3/ZeiNWjwmvaBIemGOXT1pL5BFM4vya/poHdWSNMVl3MfEx4ltqg== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230040)(10070799003)(7416014)(376014)(23010399003)(1800799024)(366016)(921020)(56012099006)(10067099003)(18002099003)(22082099003);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?oA2NvJwJQ+SMQ/0DfHQ8Xtvi1e3EQsr1Z7jd99nqsLR118h94AnDAcLI4nY7?= =?us-ascii?Q?EUaKqGA4vQV3dQwIMYhr9yrgCDGcnEVwUtiBsKqvPh3J/WEheaW30sdabjMS?= =?us-ascii?Q?UQQS8nXN6lBtWgr0M6HXZVkrD+P4EbYuP6rf5JQhJJltAwdkAAUBC7a0iRjp?= =?us-ascii?Q?wl2NrINbe+wR7GOeqkFbXpzIf9P2ohFU955FxWx7mIE5HLumDW7JD68amGcn?= =?us-ascii?Q?g8/uqNstIk/j7fH84fIspSh4fEBtkVrJcggZ7aDrFc49EIcD/Eqo22A6FI4P?= =?us-ascii?Q?zhMwUrkd7D7UKn93mtw+D+RPBC1ARTCrFPaAjeMjYS1W0RT9reO7kz7A/30Y?= =?us-ascii?Q?usVFME9KeGz6+45J1S7OrAZ/qukiCpbuMDuOW+bwy7N4+6S8I9sH8vmsVZ4R?= =?us-ascii?Q?gsPYN0/16kbpjgO3q4UMlmRVQlddvK8mOi/QtMCK33W3f7xhbL6pQy56mCAs?= =?us-ascii?Q?Fa7VtCKw4e3q1dkT/5AQTD4FdzGlCPo2CvwgbEDwcTEWZHYeSxP+1cYj2G/g?= =?us-ascii?Q?3GKfsOMx6VaYxjCiN1WMkBrDaCYtfSEQySFL5YgHJgjQqZY89OrbZwaGi5o+?= =?us-ascii?Q?juwjPWj4PmWhAvlh/YaDluDJvZ6WlrX5r/tkMVU0oX+IRAftUom1MtJEy3BX?= =?us-ascii?Q?UOO0ZxcMmp+sCZTmKEbM3Y5FmcS0kizkL+lba1v7pY+yqoDkCLje5sXRo+7z?= =?us-ascii?Q?fcpaHgvi3pIJHdaXutcV6cUmtJbOBe2azM2X+CSMTB1icEhyu5AHYk5P6HPz?= =?us-ascii?Q?h3ZK8xarU/BkNCdpraKhLh3Y/90YLq5zvE3784CbzRhDLPw7XHT7jfO9s20r?= =?us-ascii?Q?kf0xV80M+gac4CF6R5mv+ysYaJNSn3zCknlAnoIlUmZp0lYbQvCZpREGZNmX?= =?us-ascii?Q?jUGof44KwMGopxrW36+txeRWkBjZx1UGRTC9K4GvI0qu+x94nmihwNtH2YyR?= =?us-ascii?Q?WkACAM43gk0nwiZp+oH/DXwZNZpaM3R+xUMsbVfFJgd0YZZXxRFZJ3e3JSIs?= =?us-ascii?Q?mDQRZx5p8mdmWk4NtuGVCVzOWbcKI7wClNkDw2iJMpmGOlxHuGdVETZrxuPC?= =?us-ascii?Q?/SV1umz6Kiq5W9r5FUYclN+pVQVVYzv0Zvr1PhEQwzMQJ+wQ3oeZT3gpZcKL?= =?us-ascii?Q?h+iPzNnMMBfBT0gNZrv26ZcsHzymnjWe928QT6EUQJkFetTRLdIEj0w5eSM3?= =?us-ascii?Q?wX/EtkLYuaISwvbFXFADZSD91mQdK2P0LHltnyX36SJGkOUEP3kiAqXsptg+?= =?us-ascii?Q?1R8cVSp2NYd9uiknK0giLvENOUazep5l9ZdVYo3QYEcuoDdJFR7iRzO6nhE/?= =?us-ascii?Q?TAahEjM/Unkcptq/LGXSZ+RG3PUvksgoQBnKkbxeOFNUbxDYIgmyIILJ+jDQ?= =?us-ascii?Q?xY91VcDLM3marztCMfekVRkA0tLjr9hh3/DpJjYhs+ikj8O2IcKVWck6jupl?= =?us-ascii?Q?RLNaoP9YzGLOVNYBGjjC6AXR4m4X8kGR64JV1UmwLosAkge+YwE76faVIIyN?= =?us-ascii?Q?IAQZhhI+Oa6UaRPOKFpytc4tJL0tsHD88IcNqHcC2P673zlDYvAmZc7Re1Kk?= =?us-ascii?Q?+tBrKr88zlVsXb+Tq+D2tXzJW2/+AAKQEkFnx5g4c+hJW7yv5YD/QhuzCceN?= =?us-ascii?Q?QZDcHFzgWy1U+poUvrnSTYdedzl/IDaJrHA/SZOF1O4OGvgQgQKmmo4gZdNd?= =?us-ascii?Q?XyGlD4cVhkPv48l+/YdHC5w6wVyRHmpDlngDcRgJM3tYyqqd+kjyxXDdsvYh?= =?us-ascii?Q?I2h316w2AJSCg4cZ5BxsNzIO34QOH+F4Nw2YVXB/bfz+K+3FLtf+?= X-OriginatorOrg: valinux.co.jp X-MS-Exchange-CrossTenant-Network-Message-Id: 59350fad-3385-454a-b201-08defee154c2 X-MS-Exchange-CrossTenant-AuthSource: TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 20 Aug 2026 17:34:47.7045 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 7a57bee8-f73d-4c5f-a4f7-d72c91c8c111 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: JDx4bFyX+o8ziiUTxL4dTwCUiFTQDuaGhwYrYaYbz8YxkuIFWq3x4g28Him6K9hLHABQGxg3MeXaUTR6jVOB9Q== X-MS-Exchange-Transport-CrossTenantHeadersStamped: OS7P286MB7644 Content-Type: text/plain; charset="utf-8" From: Frank Li Move dw_hdma_set_callback_result() next to the descriptor helpers so linked-list completion and reset code can use it without a forward declaration. No functional change. Signed-off-by: Frank Li Reviewed-by: Frank Li Signed-off-by: Koichiro Den --- drivers/dma/dw-edma/dw-edma-core.c | 50 +++++++++++++++--------------- 1 file changed, 25 insertions(+), 25 deletions(-) diff --git a/drivers/dma/dw-edma/dw-edma-core.c b/drivers/dma/dw-edma/dw-ed= ma-core.c index 1af262b6e881..ab8e343f0196 100644 --- a/drivers/dma/dw-edma/dw-edma-core.c +++ b/drivers/dma/dw-edma/dw-edma-core.c @@ -73,6 +73,31 @@ static void vchan_free_desc(struct virt_dma_desc *vdesc) kfree(vd2dw_edma_desc(vdesc)); } =20 +static void dw_hdma_set_callback_result(struct virt_dma_desc *vd, + enum dmaengine_tx_result result) +{ + u32 residue =3D 0; + struct dw_edma_desc *desc; + struct dmaengine_result *res; + + if (!vd->tx.callback_result) + return; + + desc =3D vd2dw_edma_desc(vd); + if (desc) { + residue =3D desc->alloc_sz; + + if (result =3D=3D DMA_TRANS_NOERROR) + residue -=3D desc->burst[desc->start_burst - 1].xfer_sz; + else if (desc->done_burst) + residue -=3D desc->burst[desc->done_burst - 1].xfer_sz; + } + + res =3D &vd->tx_result; + res->result =3D result; + res->residue =3D residue; +} + static void dw_edma_core_reset_ll(struct dw_edma_chan *chan) { u32 i; @@ -660,31 +685,6 @@ dw_edma_device_prep_interleaved_dma(struct dma_chan *d= chan, return dw_edma_device_transfer(&xfer, dw_edma_device_get_config(dchan, NU= LL)); } =20 -static void dw_hdma_set_callback_result(struct virt_dma_desc *vd, - enum dmaengine_tx_result result) -{ - u32 residue =3D 0; - struct dw_edma_desc *desc; - struct dmaengine_result *res; - - if (!vd->tx.callback_result) - return; - - desc =3D vd2dw_edma_desc(vd); - if (desc) { - residue =3D desc->alloc_sz; - - if (result =3D=3D DMA_TRANS_NOERROR) - residue -=3D desc->burst[desc->start_burst - 1].xfer_sz; - else if (desc->done_burst) - residue -=3D desc->burst[desc->done_burst - 1].xfer_sz; - } - - res =3D &vd->tx_result; - res->result =3D result; - res->residue =3D residue; -} - static void dw_edma_done_interrupt(struct dw_edma_chan *chan) { struct dw_edma_desc *desc; --=20 2.51.0 From nobody Mon Sep 28 15:34:37 2026 Received: from TY3P286CU002.outbound.protection.outlook.com (mail-japaneastazon11020105.outbound.protection.outlook.com [52.101.229.105]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 22FEB481644; Thu, 20 Aug 2026 17:34:55 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.229.105 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787247297; cv=fail; b=KuqtxI9wNI9V1r8YK55eN3ZlUNJKVgiMORFBfRMmm/ApEJ1HZROZyF37vrTWsRD1EUB8gKYviU68lmsehHnuFhndEGhQxEvYQwjvlvwsjvQseshZVx66U23mCdyCh8nplI6LAQaXIEcm5xFj0OQ7U+ivMPBdAdV+T+9PSyxEGW0= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787247297; c=relaxed/simple; bh=QS8se/Lkncoah2oqaeuMsh8HcF0caQAdnDlEwOj2nyI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=bNssFYKmVsHbJp4rT9+gIt0T0nUJYMKdOtx02sQQkCPwMXV5LkyDkuIJJXOvsh6//+D2m0ee4u61Nu6S3a/3vTnsn5lI/MBHzeicpVHuWhBABsZhzHtMCNRgd9/AP0mefhV98atNjZK0SnJ6LDkZYAF1l5xa/Bok41YO4mF9Bbc= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=valinux.co.jp; spf=pass smtp.mailfrom=valinux.co.jp; dkim=pass (1024-bit key) header.d=valinux.co.jp header.i=@valinux.co.jp header.b=jLl2BGZ1; arc=fail smtp.client-ip=52.101.229.105 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=valinux.co.jp Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=valinux.co.jp Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=valinux.co.jp header.i=@valinux.co.jp header.b="jLl2BGZ1" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=al3w0h4hC7gg9yeLsYEtPlYbL44Hnvygl2bYjUz2TzwkRQJXaLB3uSNfDz/e28m/LK45rgASYi8Q3lP4h7Duug8+IOxFYGASu25ixJKc/tERNzCK5WxEo3H/kjySLjGvy0TFuBOdQBhIoQyxYVzzHihe9ZgqrVqb8Hb4LPnFtUvMNiCu7OyB0tmPiI3LSWotr3w2iNAkM9ymlQxtWVgSASryYDBvEtnhYqEK3+1Q+HKCOp+jAUydiZ34xqHw9KL7Rjs9w4pEXuRXe4p/rDyAD140U1rXUyEcei6l/tbQZE3Bl8j4mE3KiJArXBfO4RppsDr5Hso1HOB7eCff34CtNw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=DHlN2mjZwI3ynL49I/ecxwCEtzQeeHqAdvoXj1fpp5s=; b=Oi/vxpeafMJwgZMQSameDgbJ6FHOtz0RH8PF5yGgSljhVp2DAaoYMEi/h92UeHsO6ZSSSh8m1DDyou4ClGMSBnZBIRAxw0cE78N5R+pukFhqcVH5aeZDTN84VsoFAsSElwVAaGh/qRjfIMw21Txk44PYPeDg7kSgpL9Ru1kBu1WvF4oBVlQB7trhrfGOjVpnSiP/8ah6FFef8ISRb/h7F+IFXGzpg5Cnxah92srnoAudy7ibDiqgtFsL4lagx/SIdJeRy3tLbcKNnzEWWqenyULqS27iMTUIiQEWAfpoNsg/ss2nIWeD+7hD3GImNDgUd7lhPgmSnVuNg3I0oTQrRw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=valinux.co.jp; dmarc=pass action=none header.from=valinux.co.jp; dkim=pass header.d=valinux.co.jp; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=valinux.co.jp; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=DHlN2mjZwI3ynL49I/ecxwCEtzQeeHqAdvoXj1fpp5s=; b=jLl2BGZ1YNMaGy2XhN19WhZPrZaq5TU1bs7PnP2OVcisB5Pdi72TKPUqxm2b17rXpKoH6eBw7+NOU7AsMpUhhCGWYST59xIpCKe9rLE/AMl0Y9KQAVc75zm9iEW/VSeo0F1MrG+EAQftNEDiWuuFqokV5KtJRRskiU5C9X9CvAs= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=valinux.co.jp; Received: from TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:38f::10) by OS7P286MB7644.JPNP286.PROD.OUTLOOK.COM (2603:1096:604:461::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.339.8; Thu, 20 Aug 2026 17:34:48 +0000 Received: from TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM ([fe80::2305:327c:28ec:9b32]) by TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM ([fe80::2305:327c:28ec:9b32%3]) with mapi id 15.21.0339.007; Thu, 20 Aug 2026 17:34:48 +0000 From: Koichiro Den To: Vinod Koul , Frank Li , Manivannan Sadhasivam , Gustavo Pimentel , Kees Cook , =?UTF-8?q?Krzysztof=20Wilczy=C5=84ski?= , Kishon Vijay Abraham I , Bjorn Helgaas , Christoph Hellwig , Serge Semin , Cai Huoqing , Niklas Cassel Cc: Devendra K Verma , dmaengine@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v6 06/10] dmaengine: dw-edma: Dispatch DONE interrupts by channel request Date: Fri, 21 Aug 2026 02:34:35 +0900 Message-ID: <20260820173439.2004068-7-den@valinux.co.jp> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260820173439.2004068-1-den@valinux.co.jp> References: <20260820173439.2004068-1-den@valinux.co.jp> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: TY4PR01CA0127.jpnprd01.prod.outlook.com (2603:1096:405:379::14) To TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:38f::10) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: TY7P286MB7722:EE_|OS7P286MB7644:EE_ X-MS-Office365-Filtering-Correlation-Id: 8073238d-2fb2-4601-2085-08defee15547 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|10070799003|7416014|376014|23010399003|1800799024|366016|921020|56012099006|10067099003|18002099003|22082099003; X-Microsoft-Antispam-Message-Info: FiWVQMF4BTloI3Qf+RIcHJeYSVGkIE/2GKMTJX3BE0bQMrc3WY4rJ1G2o7OhsVtyiizbasU1vJOxqPAu+yL/NKwmsa/dVXwOKtMStXpNc3YXcaHumluXiGdVu9freIUYxawMAdD3x7K5cOXFePX2lOiyb/vgwt/suGLgu+LiQbKZQURljgBuuvjOz3sJAZn+kYSfTvd6SvuBfFT2JlQPavwUuS1ZTzyVh/kVgru5JrfwRtQxrNV7rzqyaoAaC7mhkAZ1ql3XiZhLCRRvLqwJ76xUAkfrrpAduUVjfV2Kav56SOuYDx9o9JmbTYUpzP0lLWeSvw9Jhpi+cdWULKHmEpDFS7c33Ay8uE2+E3VYgTi+rPbekwWd3cAiKS5ugd8q5ZA3O8UTX+7BZaC1+VGiCeMSNTOewsO82wEJZf2vJSD3HknSKmWb78A5RrIofJ1PQZkyLv4zGJykknELrSzKOrG3uVlRxjhhzlbXiQg+z4H22wh2i76jd1dEaD0W0D609vmLAanEzKeweGuWJUSirFw0k3/vK7FUxnXWW/fQ9YiUmpB5RfZ6uY+I7SOdRUWmQbyLlh0qr+/zJPP0lmfq3KTEE39XtlS36H8AticVqObT/LQiQ5zpUYrJZsu9vf78+5dCqunMGuL9BsQPKmFkZ5Ed19u2ATPWSUVn0iuFbvAvMg1wUwjr9ENTZm+qF/dyFKBOy66o0uizphWDtjt0pg== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230040)(10070799003)(7416014)(376014)(23010399003)(1800799024)(366016)(921020)(56012099006)(10067099003)(18002099003)(22082099003);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?GFiH8lSX6oI/CNaG47/4GqjhEb2xIjf29FnwZIBGGtqvgLA+bItwi1VqkJZQ?= =?us-ascii?Q?HmjjOK82l9/oVDnSEC7GRnbCTjTZVIINGHhmgvEKlPoiN0xAzoXc13xhYBhF?= =?us-ascii?Q?MTgY/l1TbVNBbQld8wpEvxJRf49/cpGqxLlIkiPWXhXY02jC/mXYcgfhe3/K?= =?us-ascii?Q?BI5/pm93Xxvzyeby1kf4qlJwfCrEUUPgUASNzdvH4hP2neEUIvqOHT92io93?= =?us-ascii?Q?SaIHMamwursnW925lRtHr9f0fDrOAqCLaIKPOHkKxquQ34gMr/uz4Uky3Cz6?= =?us-ascii?Q?2DOinJ9B7AKxJPl0nSUebwWT81V/Fj16tYlzqY3zWgjlUfDxXcydFNHMc9fK?= =?us-ascii?Q?tIqeKrWMxw37lIg1hf6E7nQZVTNKjkL0OzfxRroS0R7hMqZtEZ9ql6l7SU5+?= =?us-ascii?Q?x6SGZC5O/PtUQjh/bYfovIlUl184ErKYfhpSqXlvmassm8zUZ00aIOb+RmwA?= =?us-ascii?Q?vM780C6ZjDsY0MRoXdu0fdpzYACiNE6UdmWv7KZ86BcRD1tUsOwq1vYi2MxP?= =?us-ascii?Q?Gm3ZVvPRUZrF833F9cGXw9pw06DKrN6+U7ur1ehygoJU4mWX9t4/gBKxbcWV?= =?us-ascii?Q?QIjDCcNyRrIEqO+dChUxptX6Sld3e+dHbC4PE8G5/Ot5reRtCiQDSqlsovJp?= =?us-ascii?Q?C+3TkxvLD4zD32iDi9fz6nkqokMcHoFKIGZjLD3X7L8Lu0Mp532VGvTemmCL?= =?us-ascii?Q?rlgEeph8O6qYVPPrQpmx3HYhxgmRtbcWi6TkA8eVkzOdOA8PhyNtNR45rfyR?= =?us-ascii?Q?+9cp4Q3x1tjDMk8ShGkZq3puaI0q7EHIMHYY8x5r8uSlQqGczLb5/oGgUs3c?= =?us-ascii?Q?YTdOT9mZ86BCICHJgWPanPwDBkHpm0Ntasv+mRXsGDnP7XQJqzeDeetZNtQa?= =?us-ascii?Q?qWCld9JRQNNenWmCOMy7FYWrFnc7a3/w83j/1CRusS3sVnnJLcJpIUaoVAuZ?= =?us-ascii?Q?YH8Lx0h4h2fGM3/b1kxsbQHqf4EaOoG8i+uGyRpPGBrgI3KSG3CZsojsRq79?= =?us-ascii?Q?aytAqjO2bmrAlRewM0MIcUWBe94XNIuG+Lc6S8/0x+/0aCt92jpwr6IbMlDf?= =?us-ascii?Q?8TLvm9x0/rKLExbsQxVgIXcp6Iw5YsdXHysT8u63YojKlgbq5ODOSBsjbvmq?= =?us-ascii?Q?VBXG8mBZjU74RZjgqlCAR7z04Zb17h0QOncI5nURqhc9cgm8pZwWYoH3qXMy?= =?us-ascii?Q?o9TCm2EK9XJaX7Rc5iJCTj54qQ9SwucY71B+UJUX7lt/PUvhd4CMr3EZZTuF?= =?us-ascii?Q?6FphTwG1kZfzQjqnxdbQq4nxAu+iV0mGAEy1FGU6ObS7B4KhGLIg6EScTLAW?= =?us-ascii?Q?XTmHUWsjgWR+czoXLElyarl7Ajv30RK0NvhZ4uy/I1ga9iQqfEmU2US2SGMA?= =?us-ascii?Q?9cuK0BDvgkeCz/+3cQPHP2HpfOcoKeKu2UDuT4SwICAAtFIkhyyl0E6pTRlX?= =?us-ascii?Q?4CvRhAZ93SMuzy2lHsDpEmxk5TR9K1/5t292NY34LN3EIx6+OTJDISUNdSHp?= =?us-ascii?Q?M4MZB9yDJoKYDxR5s2e22nrMzSQ4Ixu7JD9fGBLGdBF2PWiaKR3bK/OdB02u?= =?us-ascii?Q?KQwA2aOfw++K/Or8ShVVaBY60dW1GO/582TijuPMb3d1OeIMLbCGBH5WqzKH?= =?us-ascii?Q?Yc6wYjlYsHnVV/AlIJSeSBEYhBvHk/udW4cqLB3cIXWd6JRjs1RQZSDKK0Ot?= =?us-ascii?Q?2tPCdFsepuGjTCg4NVP/pI7YWwuGL2Q6wcTCXsiIRI7Rap4iLLLAGUgCpNX5?= =?us-ascii?Q?0ec+YvSgT6y+8jFvGWz/DNkABL02t1mMKDADnZZDG5H2hssU+1Pf?= X-OriginatorOrg: valinux.co.jp X-MS-Exchange-CrossTenant-Network-Message-Id: 8073238d-2fb2-4601-2085-08defee15547 X-MS-Exchange-CrossTenant-AuthSource: TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 20 Aug 2026 17:34:48.5624 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 7a57bee8-f73d-4c5f-a4f7-d72c91c8c111 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: bQIGtHPcdbaZJ4eZfyp8GR3LhVB/Uon6PwHzyJoSnom+gNuJ0NTJTgw3IA7aWolkGaLnU0o5R2KsG+BvmTdcFg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: OS7P286MB7644 Content-Type: text/plain; charset="utf-8" Prepare for a later patch that reclaims LL progress before request handling and can remove the last issued descriptor. Move the request switch outside the common descriptor check. Keep the existing per-request descriptor checks for now. That later patch removes them when STOP/PAUSE handling becomes independent of the descriptor list. No functional change. Reviewed-by: Frank Li Signed-off-by: Koichiro Den --- drivers/dma/dw-edma/dw-edma-core.c | 56 ++++++++++++++++-------------- 1 file changed, 29 insertions(+), 27 deletions(-) diff --git a/drivers/dma/dw-edma/dw-edma-core.c b/drivers/dma/dw-edma/dw-ed= ma-core.c index ab8e343f0196..3c1f3f728875 100644 --- a/drivers/dma/dw-edma/dw-edma-core.c +++ b/drivers/dma/dw-edma/dw-edma-core.c @@ -697,39 +697,41 @@ static void dw_edma_done_interrupt(struct dw_edma_cha= n *chan) return; } =20 - vd =3D vchan_next_desc(&chan->vc); - if (vd) { - switch (chan->request) { - case EDMA_REQ_NONE: - case EDMA_REQ_PAUSE: - desc =3D vd2dw_edma_desc(vd); - if (desc->start_burst >=3D desc->nburst) { - dw_hdma_set_callback_result(vd, - DMA_TRANS_NOERROR); - list_del(&vd->node); - vchan_cookie_complete(vd); - if (!chan->non_ll) - chan->ll_done =3D chan->ll_head; - } + switch (chan->request) { + case EDMA_REQ_NONE: + case EDMA_REQ_PAUSE: + vd =3D vchan_next_desc(&chan->vc); + if (!vd) + break; =20 - if (chan->request =3D=3D EDMA_REQ_PAUSE) { - chan->request =3D EDMA_REQ_NONE; - chan->status =3D EDMA_ST_PAUSE; - break; - } + desc =3D vd2dw_edma_desc(vd); + if (desc->start_burst >=3D desc->nburst) { + dw_hdma_set_callback_result(vd, DMA_TRANS_NOERROR); + list_del(&vd->node); + vchan_cookie_complete(vd); + if (!chan->non_ll) + chan->ll_done =3D chan->ll_head; + } =20 - /* Continue transferring if there are remaining chunks or issued reques= ts. - */ - chan->status =3D dw_edma_start_transfer(chan) ? EDMA_ST_BUSY : EDMA_ST_= IDLE; + if (chan->request =3D=3D EDMA_REQ_PAUSE) { + chan->request =3D EDMA_REQ_NONE; + chan->status =3D EDMA_ST_PAUSE; break; + } =20 - case EDMA_REQ_STOP: - dw_edma_finish_termination(chan); - break; + chan->status =3D dw_edma_start_transfer(chan) ? EDMA_ST_BUSY : EDMA_ST_I= DLE; + break; =20 - default: + case EDMA_REQ_STOP: + vd =3D vchan_next_desc(&chan->vc); + if (!vd) break; - } + + dw_edma_finish_termination(chan); + break; + + default: + break; } spin_unlock_irqrestore(&chan->vc.lock, flags); } --=20 2.51.0 From nobody Mon Sep 28 15:34:37 2026 Received: from OS0P286CU010.outbound.protection.outlook.com (mail-japanwestazon11021129.outbound.protection.outlook.com [40.107.74.129]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A4A9148164E; Thu, 20 Aug 2026 17:34:55 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.74.129 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787247297; cv=fail; b=pG2RMLdETibBv1UV0VaWzkOUTxFyjAhzqVQb/f4sBQXOj/rkZ37tjpKTAt6PMz70kQCJaqw83iNx3uQOx59fSzDMLvU01S53KQngLGmPGpjjDaPFRCV4ejX5jmFW5F+szHMVCYD/qhdJldEWPBnLBuuiv5h2VtjZAD/+Gq1+q5s= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787247297; c=relaxed/simple; bh=rJuUY9hk/WT/5cY6l1pAMIz4BmwufkZSquenIEilBnQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=JUtWp3F9h3GM2Xucyqi3iB5QDdRp10hmWGlsDm2TRyqYSes8B2+Pr6CsfEn8Yk7DorsUjL07qWTEX1ImXCVrYE2UZWU0tb3rzasBXx3XcrVC/9jw5apOsYJzFb5HFtKQwnm6XvCyPiBPMe3H5pfVLq7teoFbfb6DY8hPRW7DpmQ= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=valinux.co.jp; spf=pass smtp.mailfrom=valinux.co.jp; dkim=pass (1024-bit key) header.d=valinux.co.jp header.i=@valinux.co.jp header.b=ZH+QM9xZ; arc=fail smtp.client-ip=40.107.74.129 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=valinux.co.jp Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=valinux.co.jp Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=valinux.co.jp header.i=@valinux.co.jp header.b="ZH+QM9xZ" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=wl4p+kmTIjnov99Sms7SoSUvzQoqqgCvm3kCLrgwuifgRxOhHVKqt+ChcJmzToYITRnwYYOKqGcr+e0RJUC5cVQFV6Y2NLx4VlieuO5tS3T0sUqNXkMFbDrIqq4HM+yNBnCR2QSk4KwchXav+a04+IgtnmxNlKc6uvK43QRfsnUhSVmqBax0UFpJKmUE0Po+wHPwRzVWsEHYCGL/bg052ag4zTbfrFpyUxmz89dL7ve0w1D5Vy/Octq9zIX/iBozidLOjInDsJFciJLsC95GN+6KJmB/o/1aaUPQBAmtkww5IE23rdW98qnv+V5upfYW5fgUYZ++72pwpq4z+TxJxw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=oepf5wfZsPBDsLX1Bz5i/PHdZaJ5tzCGJjco6VJNYtg=; b=pOPZWyXuHDmHIZQZknQeuaB4OUECPl8+/AfnxQBaHwcnqAtxJSv6raXcJt3docI6CyS+uIOoKjchETygNxp6uy08OuoyWbPNv7onRmJW8onO740vnqRj75D8VyJ0Rqp8MoQ/u0gMGtjtxeGx0FztMlvs1vveArx99dgbwKK4QUtFhXRpJztiLrkywSxrRR4Mm6raOyyUDzCzkVYD6ChQ+KFfoCdarPt5ARLF2yc8K2no2DoCH+DLtC7EpUYNtGTc1SeawodzmTxsRmBvdK8Y3AJKzlZgv5UsvObp141dJaScOu1cLAnTjestR2h4woF/jqihyJ36WhzHInB1+xrBKA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=valinux.co.jp; dmarc=pass action=none header.from=valinux.co.jp; dkim=pass header.d=valinux.co.jp; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=valinux.co.jp; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=oepf5wfZsPBDsLX1Bz5i/PHdZaJ5tzCGJjco6VJNYtg=; b=ZH+QM9xZP9RylqAo3rJqXaZa7O9l+LGighSzu3OGGVe/HDHNiIaozMr5jMhJsMMlzXjtFfaxCm+lCb/ORKc96jDUhvs92zVR2Ty1QHtiSmBuJBjg/aGA6DQ2STdtd0gQaiiU8CxcTNoAZgHlg3n7TUOHzAM/w8JEFytixpBNZhs= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=valinux.co.jp; Received: from TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:38f::10) by OS7P286MB7644.JPNP286.PROD.OUTLOOK.COM (2603:1096:604:461::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.339.8; Thu, 20 Aug 2026 17:34:50 +0000 Received: from TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM ([fe80::2305:327c:28ec:9b32]) by TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM ([fe80::2305:327c:28ec:9b32%3]) with mapi id 15.21.0339.007; Thu, 20 Aug 2026 17:34:50 +0000 From: Koichiro Den To: Vinod Koul , Frank Li , Manivannan Sadhasivam , Gustavo Pimentel , Kees Cook , =?UTF-8?q?Krzysztof=20Wilczy=C5=84ski?= , Kishon Vijay Abraham I , Bjorn Helgaas , Christoph Hellwig , Serge Semin , Cai Huoqing , Niklas Cassel Cc: Devendra K Verma , dmaengine@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v6 07/10] dmaengine: dw-edma: Centralize LL doorbell decisions Date: Fri, 21 Aug 2026 02:34:36 +0900 Message-ID: <20260820173439.2004068-8-den@valinux.co.jp> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260820173439.2004068-1-den@valinux.co.jp> References: <20260820173439.2004068-1-den@valinux.co.jp> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: TY6PR01CA0012.jpnprd01.prod.outlook.com (2603:1096:405:3bc::17) To TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:38f::10) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: TY7P286MB7722:EE_|OS7P286MB7644:EE_ X-MS-Office365-Filtering-Correlation-Id: 2be91481-a8f3-4be3-0ab2-08defee15646 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|10070799003|7416014|376014|23010399003|1800799024|366016|921020|56012099006|10067099003|18002099003|22082099003; X-Microsoft-Antispam-Message-Info: U26e6pmOmC75xd7CGdviUOMQRuizepsYysWY+im4reR3qhrnigAhQS67uWnoppP4Ozg9xZdWY3uRuvxzSnZVM+fZ+4vnzhSXXmG8UlQ/FE8odIo1/cP04OZz++u3Qac+seD9rTc1DqdSDJfEqcjM9Zba2nQAaGYF1eEaHj6PmsONTQ6+i/Xbo4tsNI8xqXwibzNk/uaULoGnG3hz9LKtLO1i72DR9HfapTF2iH+oJsQnRvJs8/RJHO8dDBSTPO5QM7FIbq4A1Cg0hhs5TsKbhhn7dNT3Y9EDyZfuPsP3dPTfK+Cat+IyfGc4ygNgvCTXz+zF7hpxD4KN499dB/Z40Ehyj/sUDR52Vmu32+7s4sIbmTzp1oqldAuZ1xRLaLpi6mPVlcpMmwVBMNq+iLGrl78QFEriDmNMjfMlGwZk54jm6Bomh4vxAQqkg7K36ZTMIMcNSISxjG24DbAJjXgyQevNwwe6BX1Kb89SviBh7oB2qBRw1aLV5FZ2bGrUT06h4OZqxPXCxOkobcr66tDTk++koSbXUqKzIhPxnG7WO/VL4W4nDSWk2iRqse50JT7w/3hgtNppQxpgcJFyy0RR3UIs4p294MJ0n8Il5a3KoNm9YpP2NMvlRGZcumdGga+6gbvs+7B37n/ZMftYfvWrOVzz+qknrTEAon44SZbFn5bfYl21IPBnrxwIiKLcAVk4YFx0d2JrRQiAJg3/YzMOnw== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230040)(10070799003)(7416014)(376014)(23010399003)(1800799024)(366016)(921020)(56012099006)(10067099003)(18002099003)(22082099003);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?ilRKNt7JD8I7w3U3ScZK+18B9SPF+WYBoAzWgxZ8ehLVncQXolpCSA5aTHW7?= =?us-ascii?Q?Rm5Fu7YEykG32UO5KDvUN9QXFzAMtnrJjMcaApctkO4RcFDa0YAru4Xozx92?= =?us-ascii?Q?uLmmBuQvUsvubPDAyg8IiqU1EIxIA5w5NDZZyHy0KUxdfJhpJBDTGjZ2tMUc?= =?us-ascii?Q?DA+U7T6QzTUeNLK/P1BsKheF/2z4uEnSmxhQvFFZZpO9NOv4v9oRxoW7xYGr?= =?us-ascii?Q?osSvo3oFo8YZXMytCUSqDQ1nQJneFRSignIHcloOiklLTQOQaFs5z5rcbPMV?= =?us-ascii?Q?YTWOTvasF7kI31pSo4+DRbaFZyNr8xJW7TfThevk+ysAou7m3KH1usm2LY4U?= =?us-ascii?Q?Wu7Xc8bsHrR9GUA75psIJaDH+ppEM5RLnhZdqGxMPtIrj9jj8QzTT2cnZXt3?= =?us-ascii?Q?kVbsBdYHn7ZdJE23BJX81LkUzxH2FywS+qulcvk8hEiiBmYccypImIqrXW6Q?= =?us-ascii?Q?qvh3MEUiomHf3FHmBjNFvlyvI6c1RSCZy39+CGbHRbArIBmxrxBTbcgpk0p+?= =?us-ascii?Q?ncMTs5JucDZGsAcX5ayGCHqQjnJIDT5tt960u0hF5xCM0jXfWYIkW3XIf9aY?= =?us-ascii?Q?9xDoEU/AWDu0KzCzRRs/RvBom3PeLA/smgDRUIWC0oz7mTo48bDLPo+Kyiel?= =?us-ascii?Q?DbKKbameshDCMVBmoDW9rXTYwehXfDQm1uZOygfXzDEDThIYOMkvc7nQdJTx?= =?us-ascii?Q?GVgo95UP17IOpp8pwbXYRADouenPNBnTOhq0k646VODoqyKkdPa1BTS9zIUf?= =?us-ascii?Q?gbdMK2WCvswHzSJYlqCjfy44v9B/X/lR/ocoOjVALCQuasRzwbkIamv5zG3m?= =?us-ascii?Q?iTPtcrb7kGNkW2tlo9DrqScx5LAmOHBcjqQaA1ToXCknNMENekV1KU2uOw3B?= =?us-ascii?Q?09QqswFfLQNBfOX2U2n+wcRNGMrRyUikIYZxyHmhT1cYs9dC+DfDrbEDS/tW?= =?us-ascii?Q?TfHqgWnrbxDBe5ko9/47WtZvrJb41/9RwStdQpT9lMVgGQtNdUrUZ+tpL5UW?= =?us-ascii?Q?a2EYpHZmCWqX10EYdKrCEVLeX13cBKUyfBjshTVhSvAlF0oaBzIQ2TKp52qG?= =?us-ascii?Q?dLSz7oBnIx88IdcKUh/WXSOLhtbRGaUM7ZJ9J8BPa3LgGKnslYsIK+TKJu+n?= =?us-ascii?Q?SadmEhdYY8Z+Y4tW0MmezK/eFpIiD/Dffmxvqm+u4jyZ1gE1xqrf/HYFBFNx?= =?us-ascii?Q?84Uodj8obsJW5DugfA5l1zrVOxGZ7GSW0hT5nLUqYwo0PyTscw/97GEtK0QH?= =?us-ascii?Q?w8AdNka3851jvpEJMDeZnOUS5BIdubbE3wMWZB8+MyMrbGCpJ4+JY3FYZRBi?= =?us-ascii?Q?ULWtfzAhJeSMqhd5w6m87E1o66cPbBQ6L9nYc2SW/3W7XzsL9o5mNFDoKxeR?= =?us-ascii?Q?elu4oMOPJo64NInY+6l0WcybdlokVmB79MjOjjHYJtKTTVA78oxXCwCw1hHz?= =?us-ascii?Q?IXMYjBwCKPvNWTGBU+fVJMpXY+0EMLOBTF1tI/ATjhj/wC7FG5HcdbL/L+xV?= =?us-ascii?Q?BSrDLXCcm/vpsEpR2+OPCC7qRkjRy8vLky+1dIMUD/AFtCEm9lFvj/2X8MXY?= =?us-ascii?Q?qdV23jijRLKNCEbwdv3L20TcMqmIf7X0kR7zYk9wGnr0cqbWGt42WVulhhIv?= =?us-ascii?Q?YbTRjsRBnJmpl4+CG4RcU/WqgqG6vVCkuC1l5fDAgjRydjqMYN65RNYPiCUh?= =?us-ascii?Q?71PFTM0yt0+tdS+Kq4PfO0TjXxfgypC+fw9CilLxqA01X4wrleIrg50TOhAk?= =?us-ascii?Q?YaH3mkfaj26/m+HrdC3JiuOPiwVAb/IxV2R8lPQHVltfUv7zh+SK?= X-OriginatorOrg: valinux.co.jp X-MS-Exchange-CrossTenant-Network-Message-Id: 2be91481-a8f3-4be3-0ab2-08defee15646 X-MS-Exchange-CrossTenant-AuthSource: TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 20 Aug 2026 17:34:50.4725 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 7a57bee8-f73d-4c5f-a4f7-d72c91c8c111 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: GnU2a8gEGpgw1b3Z6yBXjGUSUIEmfOBGqwsnMlmJsY3qS7Dmt0blTz9H6ODHa3Wz4nztvAsfPhrC/RV7Vm+u3g== X-MS-Exchange-Transport-CrossTenantHeadersStamped: OS7P286MB7644 Content-Type: text/plain; charset="utf-8" LL fill currently rings the doorbell every time. A running eDMA or HDMA channel follows entries whose CB matches CCS without another kick. A channel stopped at a CB mismatch needs one. Move that decision to dw_edma_core_ch_maybe_doorbell(). It rings only for a BUSY LL channel with pending entries, no EDMA_REQ_STOP or EDMA_REQ_PAUSE. The BUSY check prevents EDMA_REQ_STOP completion from restarting terminated work. issue_pending() still publishes LL entries only from IDLE. A later patch allows live appends. Non-LL channels are unchanged. Reviewed-by: Frank Li Signed-off-by: Koichiro Den --- drivers/dma/dw-edma/dw-edma-core.c | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/drivers/dma/dw-edma/dw-edma-core.c b/drivers/dma/dw-edma/dw-ed= ma-core.c index 3c1f3f728875..5a8407ca68a2 100644 --- a/drivers/dma/dw-edma/dw-edma-core.c +++ b/drivers/dma/dw-edma/dw-edma-core.c @@ -167,8 +167,6 @@ static void dw_edma_core_ll_start(struct dw_edma_desc *= desc) =20 desc->done_burst =3D desc->start_burst; desc->start_burst =3D i; - - dw_edma_core_ch_doorbell(chan); } =20 static void dw_edma_core_start(struct dw_edma_desc *desc) @@ -249,6 +247,16 @@ static void dw_edma_finish_termination(struct dw_edma_= chan *chan) chan->status =3D EDMA_ST_IDLE; } =20 +/* Must be called with vc.lock held. */ +static void dw_edma_core_ch_maybe_doorbell(struct dw_edma_chan *chan) +{ + if (chan->non_ll || chan->request !=3D EDMA_REQ_NONE || + chan->status !=3D EDMA_ST_BUSY || !dw_edma_ll_pending(chan)) + return; + + dw_edma_core_ch_doorbell(chan); +} + static void dw_edma_device_caps(struct dma_chan *dchan, struct dma_slave_caps *caps) { @@ -374,6 +382,7 @@ static int dw_edma_device_resume(struct dma_chan *dchan) chan->status =3D EDMA_ST_BUSY; if (!dw_edma_start_transfer(chan)) chan->status =3D EDMA_ST_IDLE; + dw_edma_core_ch_maybe_doorbell(chan); } =20 return err; @@ -420,6 +429,7 @@ static void dw_edma_device_issue_pending(struct dma_cha= n *dchan) chan->status =3D=3D EDMA_ST_IDLE) { chan->status =3D EDMA_ST_BUSY; dw_edma_start_transfer(chan); + dw_edma_core_ch_maybe_doorbell(chan); } spin_unlock_irqrestore(&chan->vc.lock, flags); } @@ -733,6 +743,8 @@ static void dw_edma_done_interrupt(struct dw_edma_chan = *chan) default: break; } + dw_edma_core_ch_maybe_doorbell(chan); + spin_unlock_irqrestore(&chan->vc.lock, flags); } =20 --=20 2.51.0 From nobody Mon Sep 28 15:34:37 2026 Received: from TY3P286CU002.outbound.protection.outlook.com (mail-japaneastazon11020105.outbound.protection.outlook.com [52.101.229.105]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 398D548665F; Thu, 20 Aug 2026 17:34:57 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.229.105 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787247299; cv=fail; b=j401MhvioY/F0jhnGo2dRd9SsTCH7PDfzpDi3HWVwDIzfshOrzeTlkRPYNhkn8psFpLxGs9+IDDEFpWzewSdrLRUNb6m5HKlGMAduT0rGo5Ro4B8dCqhjUov64qRSlO8eSgHGGXubtOmQ/v5B1ufDnsaX5NKI5rOSR+nuTvnIUg= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787247299; c=relaxed/simple; bh=XXKrWEaqxa1t77sEbS2CItGJpz0icjTuI/J764xR74w=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=JIfegzZ/EG3wk2Ei86FjsA2Kbz0qNL46Thuw8LL/sFtvl161h9J7V7vd8njRF4WVmh/eALsu/HS8z6h/4psP4UHIr9bX4XOEw7CqouFx0KAIUo0bxJn7EQ4ceXRauUqO7uZGqskzW1metUTSMB1h2ZZ2VgQpTL2K+h1UW3zoJF8= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=valinux.co.jp; spf=pass smtp.mailfrom=valinux.co.jp; dkim=pass (1024-bit key) header.d=valinux.co.jp header.i=@valinux.co.jp header.b=K4T7cFeZ; arc=fail smtp.client-ip=52.101.229.105 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=valinux.co.jp Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=valinux.co.jp Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=valinux.co.jp header.i=@valinux.co.jp header.b="K4T7cFeZ" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=f+1MR84VQg6qGrwumT3dbj4R+tQrIAD4MFe/DVzh/saxVIXLkzvU8QwB3XTw8RX6OyW9dUchSJg7JNSmsGH9AhNR4XWkpnZEpee8AmXSn/pJ3vZBjzVZJ7d7/y7ORHFhSLAC/f3/LV5ZEZXNMYynwhlmsCFDNElvbfElbrNUVUVYgiMC8M3OarXxk1PJn8XTGKudTkXmNVU/xRwA/ZZcbJ9qOI2ieHER8QX577OQvpja7y2utRp9BYQBK3PhLb69HSX9F7DwdTFOL4IE1kvrUcHjXv4qymb4ImF5L1aOgQAH3rVelwSZvFXv4N8tSUCVAkQLt6tGOC3iB0NsuBBvMw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=tvSlO8P1+K344Lhj+bD6vFJODLgEGC1Oa54SWmceUV8=; b=YPruUSxoPyn5ZGqE56fx0GfLiwzIWDI4F8zOgk73UhzuCeiO8bUwKZJ6bOEbk9IVfqH+cJ5wsM+xE3gWun1DmgPUjVjxpPLw2+yQW2+H5JmtL9i6xLIrl8r1z6ur1LPKQGp793PWOsGiz39YBljYEhvuiw3HH6+UTbU7TUdVEPwtdhZBGjQXkYat1RHko881EqBjGGrNHH72T5qGpi4Ol56LoPYibOiLowzvVgcHwow346wfFi5hdMbU94+0EyKahWW5LVKzb2qA13c5HjXD0qNev1xKBuf2Dnd5oZJWIn7uQbviZXyJMoLGRv6NoAWCHMOR7YTh+NGKXL16iq5mXw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=valinux.co.jp; dmarc=pass action=none header.from=valinux.co.jp; dkim=pass header.d=valinux.co.jp; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=valinux.co.jp; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=tvSlO8P1+K344Lhj+bD6vFJODLgEGC1Oa54SWmceUV8=; b=K4T7cFeZyNU4o5zKHsqR0pOJupT0nUymeEuzlGiKE0DKaK0D9kUEzJPr9voHop6NhOz7AGpYdl26z49IBC9E2yERcRZKmqOxRWt6JnZFStOwnjgq6qZtC0HHffUhNIvFZLVHndUCDnSBDAbXkzzy5yXiar3QV3DiWZf+f1urlrI= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=valinux.co.jp; Received: from TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:38f::10) by OS7P286MB7644.JPNP286.PROD.OUTLOOK.COM (2603:1096:604:461::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.339.8; Thu, 20 Aug 2026 17:34:51 +0000 Received: from TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM ([fe80::2305:327c:28ec:9b32]) by TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM ([fe80::2305:327c:28ec:9b32%3]) with mapi id 15.21.0339.007; Thu, 20 Aug 2026 17:34:51 +0000 From: Koichiro Den To: Vinod Koul , Frank Li , Manivannan Sadhasivam , Gustavo Pimentel , Kees Cook , =?UTF-8?q?Krzysztof=20Wilczy=C5=84ski?= , Kishon Vijay Abraham I , Bjorn Helgaas , Christoph Hellwig , Serge Semin , Cai Huoqing , Niklas Cassel Cc: Devendra K Verma , dmaengine@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v6 08/10] dmaengine: dw-edma: Prepare LL progress event handling Date: Fri, 21 Aug 2026 02:34:37 +0900 Message-ID: <20260820173439.2004068-9-den@valinux.co.jp> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260820173439.2004068-1-den@valinux.co.jp> References: <20260820173439.2004068-1-den@valinux.co.jp> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: TYCP301CA0008.JPNP301.PROD.OUTLOOK.COM (2603:1096:400:386::6) To TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:38f::10) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: TY7P286MB7722:EE_|OS7P286MB7644:EE_ X-MS-Office365-Filtering-Correlation-Id: c527fa83-14f1-474f-3574-08defee15704 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|10070799003|7416014|376014|23010399003|1800799024|366016|921020|56012099006|10067099003|18002099003|22082099003; X-Microsoft-Antispam-Message-Info: 8U6h8+BcwHbD0yJBA6nPyJtZFKosDcRQZWk7MQf9RDEJ8cAvw4nUJsuyr9m3P3Ult1agLq97gBQNPJqsNFpwzyXS1vrGc1Oeyc6Fc4vF2dw7sXbS2SkrmL+cRXyjxWOf6raKgHTL3uG+hBMjYxxrk9sfoTD8gFPt+09k0LP0Jy3hPrD89aGwVVm5r/Yxck/Wi99ob3YMzqjx2JUXKQ8zqg3TeVAUyoY7kDwQQIRyNgang20j0XU9K5297o4dcBQ62OE26FEcUSc8XSxBg8CvfGsOSNAmKBecAIsrpH9yVjFNWeUHvB2Bu22y1V6+HCFEMTa/hiae6QZpr2YwlM2azWr0hdmrehexwtjtLaq5Lz2z9QjBUoICQRJsYoczWCSiXUQPzdNkL25xccJiCjba9rE9s/jGOlwGYqA9XGGWZoIUqf7RafagZ7fw1DFQnHf34ZpuHbd5mlgkbuJJ/N4sx1IdHgtpWU7ANR1CP4A/P3X8W1xHKtvTdpIFzr7T+d4gL44wZHIU0Tw9wMQkiNAtBtmnY1oFRRCvS2Tp6T7enqtZaLEKm70Uioc79KzAbLD+p27XAGw8thDW/B6PZ/x2KJG9eizV+QfykPYC13zNg72ZxyJ8Xk7MQXBfuBKsB0grBf1izdB8H2T1/2efokE8kfLz9C12fe22JpS1/nRSjcu/bUz8wYPHsktN+DGFthOd65mc34U/iBDIbyw/nhwNEQ== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230040)(10070799003)(7416014)(376014)(23010399003)(1800799024)(366016)(921020)(56012099006)(10067099003)(18002099003)(22082099003);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?H/DiiatgHh30bN8Ybrz0oGqbKPnShzpl+qy+cCcss7MCdRFTpRgn/6E45IOD?= =?us-ascii?Q?SfrUc9gHJW7k0CfqzsfI283iq0Iqet945piH8bWbV+7foNFBTfehk+kgFJJN?= =?us-ascii?Q?0nq6NyoxqB4W1SgXk+QsBEH8g+/Tm76GUTyppOgR8Iy4tyCscC/vDmAs0YyQ?= =?us-ascii?Q?YAJaWvlTSk9vuMK7SXGcw5A/eEj4VZrjdqLeExkFZUq7q64h4nEfmx/mZWsU?= =?us-ascii?Q?7ODuB5ebKhKBnp9uiPWOA9lhYFALQhV7qh79cnwuM3OnpF/VBuIWQCXcTmbF?= =?us-ascii?Q?jYfhAwOxTAIyCGNYLCtm7iCoBBvjf6sK4+gBwdus2IK+nBqJ3nHUPX+STL6s?= =?us-ascii?Q?7CsOLgBDLhEHChGz3oda37ZbTYimYJhvIRdr2/aGVJ0Q9bd5dwjbF9gYTJI6?= =?us-ascii?Q?kWX4oE+LjRn1dHZEfWrY4uSOqFjIldGApeV79Ue88taB8Qq0ykClOP6KyU06?= =?us-ascii?Q?vWsjPOayJPr301Ewz69xVFap4666rD7oYnxXO8XKQ0ASjOMJDYII/rJGbIpe?= =?us-ascii?Q?NAWSLgSBAL81XSqJV9BRTFmYglMGvYM5Xo1L3MG3EImqS6j/0sqDBMEW/XY8?= =?us-ascii?Q?4FblH7FQ7/exfYmdyFI7o3AO5eVZdjHDsshv3aDVnBMFOMcz18OE8KmQeK9r?= =?us-ascii?Q?TdkDpmyL6sEW5fihwRZcRnPIONi2A1jV/Q8o6oqEwxUQiXMkG6vR5Md2Ml8p?= =?us-ascii?Q?o5U/5Bhs1begWUBCJrWAZ+FqL57rQtSE19gepg+ghVAs6tt6u5G6IvpxhT9I?= =?us-ascii?Q?OeZYdU1EbFeqTuSwkRfTf7fYW4ggTTR2mgU2ccyDtYN9tb3rKldFzPCLDaAP?= =?us-ascii?Q?5Z/zH8o4n7uATM8iElwtE8ppVYLdU6RDlC79k1xsj0QoyBxAfttMO586zqzy?= =?us-ascii?Q?318jKPfz/XsWe8lkp08AvD6OgiJr9D2etXj0JPcI814BWC8lKPXBRUxWKFhE?= =?us-ascii?Q?pLHikGRTdMmdqUtLaGsKa/cF0lZ+Ar98+PR4rbd3S7Su2n9Rbj7BSn3qf2vI?= =?us-ascii?Q?DG3Di0I31TfppugLbt27Nxl+KSwaCafr2p0nf6sSb3xXVkZVNDQjljlztTEZ?= =?us-ascii?Q?7uqbp5Gbv4c9mJqufn75fBWR3LQsYAIBPbAxOTVujU4G41iYFzOTSJ0CJ/3u?= =?us-ascii?Q?aqFlty1NONE0JQhNARsiLg3t+yKGbrck+h5MJAeAJ6oaW6pbdTDF77khiC+N?= =?us-ascii?Q?yDibKRir17thzzAYaYDHXUk5yBS3RceKnqI2EA/5QeyrcaU/RQu7kyQiHIuH?= =?us-ascii?Q?hEXhSVn1B9Q1iLRwFuyINaavbLo6/D7seMKmajW5xpWP6MIVK4yXt2iWqH5M?= =?us-ascii?Q?YP9ddXwLJNfrqUdi6qk5b0IS2kcgT7l5w2xwib9+oxvLBupLL6nDLNN4M+D8?= =?us-ascii?Q?tUCHYoZ66kBgVUZ9gP2zoYpFv5c7H6IkNXtZC8W5kXO5PnIgZWjGbNFe7IKD?= =?us-ascii?Q?U78OExrmRx4jDmPw3XH1thfZm4NOJfg/lUJzHIaM8La3Z7FdYxDfZ5+NT+k/?= =?us-ascii?Q?u9H0ny1kXK4ww1N1nt2XYKdYL+s7vlf9vrjuEDR4+/MaKD0rnJ7AQKF4F28q?= =?us-ascii?Q?kJmr0hwgKFJMA+RIIbMWuqZFauCIboEdqxdEXoez8JLLLTzMC2ogSYfY90EG?= =?us-ascii?Q?YAJnvNTk8dMPcxWuYsZseK/CXysK3rIHsCbn1Ltj4q5/Y0WuPnw+n680rpMJ?= =?us-ascii?Q?UI7PJO4M1ae7heC9RzbjFQEh0SU9Mz2xCq8RVgK01swLOPG+Q7bDUOfohJwD?= =?us-ascii?Q?k2e1a2a7pNpHno6Tm5EtuZpG14VSRXtuV4X+Rd3dBqWm2vbJk5HI?= X-OriginatorOrg: valinux.co.jp X-MS-Exchange-CrossTenant-Network-Message-Id: c527fa83-14f1-474f-3574-08defee15704 X-MS-Exchange-CrossTenant-AuthSource: TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 20 Aug 2026 17:34:51.4673 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 7a57bee8-f73d-4c5f-a4f7-d72c91c8c111 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 8nbUxuXtoSOEBNVTqyl4XvG+U6PuzCpEgtzjKQDZWywbDXJTRSde/AqQQNM4uKlFvZE6RSybNp1YhVLG4vIjzw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: OS7P286MB7644 Content-Type: text/plain; charset="utf-8" A later patch records each observed LL event (STOP or PROGRESS) together with the LLP sample taken in the same interrupt-handler pass. It needs a provider operation to clear stale LL interrupt status before a channel restart. Add it. Centralize runtime request updates in dw_edma_set_request(). A later patch uses it to cancel a pending LL recheck when STOP or PAUSE changes the channel policy. Rename the existing workqueue event bits to distinguish them from provider IRQ events. No functional change. Reviewed-by: Frank Li Signed-off-by: Koichiro Den --- drivers/dma/dw-edma/dw-edma-core.c | 35 ++++++++++++++++----------- drivers/dma/dw-edma/dw-edma-core.h | 6 +++++ drivers/dma/dw-edma/dw-edma-v0-core.c | 1 + drivers/dma/dw-edma/dw-hdma-v0-core.c | 1 + 4 files changed, 29 insertions(+), 14 deletions(-) diff --git a/drivers/dma/dw-edma/dw-edma-core.c b/drivers/dma/dw-edma/dw-ed= ma-core.c index 5a8407ca68a2..bbfd82b12ab5 100644 --- a/drivers/dma/dw-edma/dw-edma-core.c +++ b/drivers/dma/dw-edma/dw-edma-core.c @@ -30,9 +30,9 @@ struct dw_edma_desc *vd2dw_edma_desc(struct virt_dma_desc= *vd) return container_of(vd, struct dw_edma_desc, vd); } =20 -enum dw_edma_irq_event { - DW_EDMA_IRQ_DONE =3D BIT(0), - DW_EDMA_IRQ_ABORT =3D BIT(1), +enum dw_edma_deferred_event { + DW_EDMA_DEFERRED_DONE =3D BIT(0), + DW_EDMA_DEFERRED_ABORT =3D BIT(1), }; =20 static inline @@ -73,6 +73,13 @@ static void vchan_free_desc(struct virt_dma_desc *vdesc) kfree(vd2dw_edma_desc(vdesc)); } =20 +/* Must be called with vc.lock held. */ +static void +dw_edma_set_request(struct dw_edma_chan *chan, enum dw_edma_request reques= t) +{ + chan->request =3D request; +} + static void dw_hdma_set_callback_result(struct virt_dma_desc *vd, enum dmaengine_tx_result result) { @@ -243,7 +250,7 @@ static void dw_edma_finish_termination(struct dw_edma_c= han *chan) if (!chan->non_ll && dw_edma_ll_pending(chan)) dw_edma_core_reset_ll(chan); =20 - chan->request =3D EDMA_REQ_NONE; + dw_edma_set_request(chan, EDMA_REQ_NONE); chan->status =3D EDMA_ST_IDLE; } =20 @@ -360,7 +367,7 @@ static int dw_edma_device_pause(struct dma_chan *dchan) else if (chan->request !=3D EDMA_REQ_NONE) err =3D -EPERM; else - chan->request =3D EDMA_REQ_PAUSE; + dw_edma_set_request(chan, EDMA_REQ_PAUSE); =20 return err; } @@ -410,10 +417,10 @@ static int dw_edma_device_terminate_all(struct dma_ch= an *dchan) } else if (chan->request > EDMA_REQ_PAUSE) { err =3D -EPERM; } else { - chan->request =3D EDMA_REQ_STOP; + dw_edma_set_request(chan, EDMA_REQ_STOP); } if (chan->status =3D=3D EDMA_ST_IDLE) - chan->request =3D EDMA_REQ_NONE; + dw_edma_set_request(chan, EDMA_REQ_NONE); =20 return err; } @@ -724,7 +731,7 @@ static void dw_edma_done_interrupt(struct dw_edma_chan = *chan) } =20 if (chan->request =3D=3D EDMA_REQ_PAUSE) { - chan->request =3D EDMA_REQ_NONE; + dw_edma_set_request(chan, EDMA_REQ_NONE); chan->status =3D EDMA_ST_PAUSE; break; } @@ -764,7 +771,7 @@ static void dw_edma_abort_interrupt(struct dw_edma_chan= *chan) } if (!chan->non_ll) dw_edma_core_reset_ll(chan); - chan->request =3D EDMA_REQ_NONE; + dw_edma_set_request(chan, EDMA_REQ_NONE); chan->status =3D EDMA_ST_IDLE; spin_unlock_irqrestore(&chan->vc.lock, flags); } @@ -778,15 +785,15 @@ static void dw_edma_irq_work(struct work_struct *work) do { events =3D atomic_xchg(&chan->irq_pending, 0); =20 - if (events & DW_EDMA_IRQ_DONE) + if (events & DW_EDMA_DEFERRED_DONE) dw_edma_done_interrupt(chan); - if (events & DW_EDMA_IRQ_ABORT) + if (events & DW_EDMA_DEFERRED_ABORT) dw_edma_abort_interrupt(chan); } while (atomic_read(&chan->irq_pending)); } =20 static void dw_edma_queue_irq_work(struct dw_edma_chan *chan, - enum dw_edma_irq_event event) + enum dw_edma_deferred_event event) { atomic_or(event, &chan->irq_pending); queue_work(chan->dw->wq, &chan->irq_work); @@ -794,12 +801,12 @@ static void dw_edma_queue_irq_work(struct dw_edma_cha= n *chan, =20 static void dw_edma_done_interrupt_deferred(struct dw_edma_chan *chan) { - dw_edma_queue_irq_work(chan, DW_EDMA_IRQ_DONE); + dw_edma_queue_irq_work(chan, DW_EDMA_DEFERRED_DONE); } =20 static void dw_edma_abort_interrupt_deferred(struct dw_edma_chan *chan) { - dw_edma_queue_irq_work(chan, DW_EDMA_IRQ_ABORT); + dw_edma_queue_irq_work(chan, DW_EDMA_DEFERRED_ABORT); } =20 static void dw_edma_emul_irq_ack(struct irq_data *d) diff --git a/drivers/dma/dw-edma/dw-edma-core.h b/drivers/dma/dw-edma/dw-ed= ma-core.h index 761a5ab4bbb5..8d993e8cccbb 100644 --- a/drivers/dma/dw-edma/dw-edma-core.h +++ b/drivers/dma/dw-edma/dw-edma-core.h @@ -163,6 +163,7 @@ struct dw_edma_core_ops { void (*ll_link)(struct dw_edma_chan *chan, u32 idx, bool cb, u64 addr); void (*ll_clear)(struct dw_edma_chan *chan, u32 idx); int (*ll_cur_idx)(struct dw_edma_chan *chan); + void (*ll_irq_clear)(struct dw_edma_chan *chan); void (*ch_doorbell)(struct dw_edma_chan *chan); void (*ch_enable)(struct dw_edma_chan *chan); void (*ch_config)(struct dw_edma_chan *chan); @@ -284,6 +285,11 @@ static inline void dw_edma_core_ll_clear(struct dw_edm= a_chan *chan, u32 idx) chan->dw->core->ll_clear(chan, idx); } =20 +static inline void dw_edma_core_ll_irq_clear(struct dw_edma_chan *chan) +{ + chan->dw->core->ll_irq_clear(chan); +} + static inline void dw_edma_core_ch_doorbell(struct dw_edma_chan *chan) { chan->dw->core->ch_doorbell(chan); diff --git a/drivers/dma/dw-edma/dw-edma-v0-core.c b/drivers/dma/dw-edma/dw= -edma-v0-core.c index bb86d2f60ab5..9053354eda67 100644 --- a/drivers/dma/dw-edma/dw-edma-v0-core.c +++ b/drivers/dma/dw-edma/dw-edma-v0-core.c @@ -686,6 +686,7 @@ static const struct dw_edma_core_ops dw_edma_v0_core = =3D { .ll_link =3D dw_edma_v0_core_ll_link, .ll_clear =3D dw_edma_v0_core_ll_clear, .ll_cur_idx =3D dw_edma_v0_core_ll_cur_idx, + .ll_irq_clear =3D dw_edma_v0_core_clear_done_int, .ch_doorbell =3D dw_edma_v0_core_ch_doorbell, .ch_enable =3D dw_edma_v0_core_ch_enable, .ch_config =3D dw_edma_v0_core_ch_config, diff --git a/drivers/dma/dw-edma/dw-hdma-v0-core.c b/drivers/dma/dw-edma/dw= -hdma-v0-core.c index 47d7a01658eb..4acbace43519 100644 --- a/drivers/dma/dw-edma/dw-hdma-v0-core.c +++ b/drivers/dma/dw-edma/dw-hdma-v0-core.c @@ -442,6 +442,7 @@ static const struct dw_edma_core_ops dw_hdma_v0_core = =3D { .ll_link =3D dw_hdma_v0_core_ll_link, .ll_clear =3D dw_hdma_v0_core_ll_clear, .ll_cur_idx =3D dw_hdma_v0_core_ll_cur_idx, + .ll_irq_clear =3D dw_hdma_v0_core_clear_done_int, .ch_doorbell =3D dw_hdma_v0_core_ch_doorbell, .ch_enable =3D dw_hdma_v0_core_ch_enable, .ch_config =3D dw_hdma_v0_core_ch_config, --=20 2.51.0 From nobody Mon Sep 28 15:34:37 2026 Received: from TY3P286CU002.outbound.protection.outlook.com (mail-japaneastazon11020105.outbound.protection.outlook.com [52.101.229.105]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 31C7F489861; Thu, 20 Aug 2026 17:34:59 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.229.105 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787247301; cv=fail; b=prKw4wv4EVkU6y8kEtOvF10LRl+0vrA2zcm7clpeiEmNjkMvLZd0GNWOE5cVWu3MbrFKf2wLG+RZ3Y6zIch7iIqBT9H5f44nBXJOf2QfhcrRgZwdmtIsOT6VK/RccimPBPgiOiyippq+OiGMimr74KZJn5gZ5/2dQpAnDkuo0lg= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787247301; c=relaxed/simple; bh=lAp4kaFlDHCYxbl98cYeseYpdr/W7rrFg1XQYqSIAQc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=R+AXunSI1/0+aWT6H7DxL3o6Vunw+MyEmmAQxRbwTbYuuM6/XjzeF3HE8wBaPsZbkBvLkmGxgpskfEzy6CAXiGvWNSV3dnk3dFs8UvRtNCZ34Evw9RneRPCaYjPR7G9vHjPRy8984laz70jFnYdhSxwR4R0yYrML2GibfXsmqpY= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=valinux.co.jp; spf=pass smtp.mailfrom=valinux.co.jp; dkim=pass (1024-bit key) header.d=valinux.co.jp header.i=@valinux.co.jp header.b=f+5RIr/b; arc=fail smtp.client-ip=52.101.229.105 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=valinux.co.jp Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=valinux.co.jp Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=valinux.co.jp header.i=@valinux.co.jp header.b="f+5RIr/b" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=Pz02dvJnHVFT7nk0MdWjLUiBkeke6vjH8hNjE0DaHYSGpicElpeZ8APDO0EQJX7ci86V54MCc4FeEVze2mOZeu3+Ce2lRz9+uPhGN8qV35u+7Vlbu9cYNQQJsKGBsT43Xj7tkQSk5BEfHevhl2yCOt3Ub/srvDKcfsGsMQO3nGBB/b4JNA0QluQglzk1pzBusyaW8dHgGwM3Q3gBcyrsKh5ij0cJdV5RYjsdBz9CIjoD3ETLek6p9d/B1D5VvwDxDVdv3qFMmwAjdJLCioelP7zV+L67vHhCYz7cb4R7SEijYlET3hI3z8AC1/iK3vJF6f3pDSp76QwwpGet3FCCrw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=/WhM8JRbTiMLxVAni4SWpORUJ/vDFvnSq5JxFq7Mv3s=; b=yitHEjd42B50tAqhmBPtObR2v2bAz3aq8NnuqZqU+A9aCDCWtOPegXioCbf4OAGYbvukKiLuOQZIyujgaNxcBD8xyYy6hlixgsOZtg6W1GjAJLCnw+t75w2JIvWwaknt9ht1ENQ/TL5GRlCyuqOXFg5G4jAf++uhQpQZk8Hc/SMpx/70A6XHezr9YHvigxzHkhz0uQZo/YL2jH9VWepv1K07L5nPS7TKQrl3gJdWPhZFYpQiAr5JlQKu3pWad4UvAShmDNlCVHpuhWezBdFIanS0vR4yLKT6eUnPbkhSHnjEdRPNbbNnpFfbJZw+M6D7oVPPLKsEz+1TtNPKh7B9Hg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=valinux.co.jp; dmarc=pass action=none header.from=valinux.co.jp; dkim=pass header.d=valinux.co.jp; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=valinux.co.jp; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=/WhM8JRbTiMLxVAni4SWpORUJ/vDFvnSq5JxFq7Mv3s=; b=f+5RIr/bZVlI0pdsirFs4wlNsbXYeuezRFIATrPF1UZNpWYXA7ONtvtIojjS/5s1dFnUlK50jFOwNQ7t8R0i6ntd+cVKlXKBs2w3easDBTVGkfRf4r/GVVHv1bkCI7uMjHDUpJuaVWINPbEv7XRLdgWPJCUTLRoy+q69oznM+94= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=valinux.co.jp; Received: from TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:38f::10) by OS7P286MB7644.JPNP286.PROD.OUTLOOK.COM (2603:1096:604:461::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.339.8; Thu, 20 Aug 2026 17:34:57 +0000 Received: from TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM ([fe80::2305:327c:28ec:9b32]) by TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM ([fe80::2305:327c:28ec:9b32%3]) with mapi id 15.21.0339.007; Thu, 20 Aug 2026 17:34:57 +0000 From: Koichiro Den To: Vinod Koul , Frank Li , Manivannan Sadhasivam , Gustavo Pimentel , Kees Cook , =?UTF-8?q?Krzysztof=20Wilczy=C5=84ski?= , Kishon Vijay Abraham I , Bjorn Helgaas , Christoph Hellwig , Serge Semin , Cai Huoqing , Niklas Cassel Cc: Devendra K Verma , dmaengine@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v6 09/10] dmaengine: dw-edma: Prepare deferred IRQ reporting for LL events Date: Fri, 21 Aug 2026 02:34:38 +0900 Message-ID: <20260820173439.2004068-10-den@valinux.co.jp> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260820173439.2004068-1-den@valinux.co.jp> References: <20260820173439.2004068-1-den@valinux.co.jp> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: TYCP286CA0271.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:3c9::16) To TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:38f::10) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: TY7P286MB7722:EE_|OS7P286MB7644:EE_ X-MS-Office365-Filtering-Correlation-Id: 349a2b77-1279-4271-f96a-08defee15ac1 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|10070799003|7416014|376014|23010399003|1800799024|366016|921020|56012099006|10067099003|18002099003|22082099003; X-Microsoft-Antispam-Message-Info: UOWrTFb1ZnSNvfgP7hUWEEZ1Rcp/93jAscErTLwPnmk5ztN/41X51xXSLdjISac1XV2/RlUfenhcAx8jjGC3LBxnWTUoZhhvW1HBNkLT4lmWf8UJR0mY1/FXNY5/WCJvUFQpiHk+iDNcNiG7DYtbTonbdbrw9j/+t5iShXWCXAdMzqG919j3HUHiopCc6vrZtuSyDOs7FEGU5/ettZXzUqjecoQT9UfbLyjPaDta9fY195zGfPjZ67nPE13K+Iji+BZd/bePDWvyuY7KGICwRa6N87HSx2VkQnglg9XFlosRl1g2cHK2g0QUnLOvv4XBf1y5mHr69s9v9m6VJj/b2bobROyTfxxRb4Ey4q2xJsiRrhYYz9DCSjhJHQAZqjSIR8fV0qMBBKv9wP5XhAZi799qqDYodpfunLGUETemzHj6YsWYAr8vSFYpYA3pTEMS8FuMtsJ38/oKxEtgUR5DwAVAxCwS/PxGG9XWeHM9QNBxZxzqylK4KJUutDvjbwjJEfbmeeJi9RyHvv5ny7u8Uc1+jA8RP80gF8KZ+RY9xmvyIWauBXPyVlEgw94SbhWjZyBWnAhRGlEcOgPS6OV8cEMgsKOE1175v6QimQN9B/mJNv472xGHYeHAKqEC/RIQX0gUWJeprl+mSD/eYdJ4TnI+NtQd+Vuobgt0HuZfM+VtylrOVVFLFCpxD3mKLcvQMUd8SgDgdY5gjDE6bis7xw== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230040)(10070799003)(7416014)(376014)(23010399003)(1800799024)(366016)(921020)(56012099006)(10067099003)(18002099003)(22082099003);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?8Qzl9CIj6BZPFX1tjPPr2+fyHSgyOklEKQxEB+eQkaf8JSK/VsXHRvWS6vN0?= =?us-ascii?Q?qUsvF1scZ+F8ee6ZzPpAFOmIoIGu1OU+TZkH4bqFRPPMV7LphtO+6vZKsDnt?= =?us-ascii?Q?64zXqxx06eSEt7UHMhRvBQJ2ClsvQFk8quQT/ovwQpgMdfRVe0UsrIAeW4Qk?= =?us-ascii?Q?O4gf8Dt+pGaPDx7GvPXTinDFdF84jqcikrnRuYkb7Q6DbXpHuVu5A5oWJE0R?= =?us-ascii?Q?m3q7esSS4RU90yYEze4fIT6xak3vuPS0YvZdfYBcZk5iVOJUJGhkXNlRqlpb?= =?us-ascii?Q?7+dhX6mQpzAUK1X89wanV6nGX6lKxXONMVNAD1DcWdYdVWV+N7Nq9ak/c9V0?= =?us-ascii?Q?xHmSlTtshOtj20lI/3+tEVjNTmRDFI+h1FkRZMiopIDw1/iguD4TzysJK/wq?= =?us-ascii?Q?XyUS/yPC/nAOL233pZGUVnl2SzgCR0XXlOiGxFtirSn5F7axPNhjFhQixblj?= =?us-ascii?Q?AKh9rZNP0RtrwSwvFrWcyQSNMYo+bmawaZ4UUByWsqrs8x+GSj1mzsZ1BCOb?= =?us-ascii?Q?nwTcEYfMPbWyz+OtmepPnSPY3u/8cOLzgw2xLuJfHKIL6B3Q+1Fsz17VwO4p?= =?us-ascii?Q?d3oORvg4Sxp92PK3UdqQxNF9CnHyEqPV2ZIIf1TkMXgU53JmU+rfqNvNo7Wb?= =?us-ascii?Q?Guovzkqdn7WdaTksFh8An0Gke1sULToLqDg4W6I4GtsNDbp9YyUaa97ZMh+7?= =?us-ascii?Q?D7WB780Ny66j7p1DUxTgB//N63KnLYsmZRhwKY2OcuhrTYVk+M9wMOYIsn2z?= =?us-ascii?Q?yk2fnZQ+9VuGHuMchPULlWYgLmwmCgKCvC2sFaw8TUIH7B6oR/kCpCx4z4Z0?= =?us-ascii?Q?aGBvbjbMUDSGjldxRmEgnwW6swed/6CaERWOYh8Dm60kzAPJwO9WB+EHCp2W?= =?us-ascii?Q?LqjOu1pJ0xfNjv3pYGDaVj6wBOkw43+pIvnM2sLugfowwRvngga2rv4Cre88?= =?us-ascii?Q?tpYf5cKLXIQXrQbISmFRhC23dua9iFtJEC7l0C0ZV2so2dQKHsp6r6QB0Vsd?= =?us-ascii?Q?WVxD5fgYJCTRdfe8//ghJ3fkeV4y6YvLhp+tkhNshRylkcdpn42Oy3/aphcS?= =?us-ascii?Q?Qxu3MzA7JguiwbREGAlD5fbN6ZrkgGrC96Ev2IV1s6BF70ka9WUOdakcF9kK?= =?us-ascii?Q?KVdsgiVKc7vLcgCj0o50uN8x2r3NU7DgKEdB3Q3yDOW71oUA22/L3bKGRF27?= =?us-ascii?Q?7rxS9CWLePDBgaTG2R8Def+s91JebcCUZ2l7+pXheRRuhljCGO0qTaZB83X4?= =?us-ascii?Q?bTV4bi2Fky5wTGvu/t6xvEybkan7iMvjm53gxiLLxo5L/4jMAh63sYEB2h9A?= =?us-ascii?Q?+BQjq6T79Woq/M33TJOdkMMBcIKBJEzdf5k3mB9x79EH3/PcOmRMzqZwd4rY?= =?us-ascii?Q?wA5iHT/jPow6e56ZVij59OHumrQCe+bAjCaWdMFtjgSQ3y1gLD0B9gyyuIcT?= =?us-ascii?Q?UKBajosWCPy2GotUfhuyhYbu/PJDs86F0HjnrX84/l/fo7RUF3L1hS1VClBQ?= =?us-ascii?Q?/Il1EuVr+WzdeFlbqan0t5pldimIpWShUm1T1CALzawl3UhoYU9m9/6YmVF1?= =?us-ascii?Q?kDga8F0jWS0w5a/Kf/nhUeIEMi7NptZxx8LVESDxR9JGsVrzYsldCFY8Phsi?= =?us-ascii?Q?YkW/4kYSa2uk5sgi/lfuWyO2EjcKbeQOuHMt4Yk6cfTdIazMoYc+kW8YMx1w?= =?us-ascii?Q?OZUmrQHKmo/OCc0VcHMtBbacPah6rQwvb7qjKcAZtOroYQyT4Oy9L5KvCtJq?= =?us-ascii?Q?nkG0AnCRd2dOtNoCx5YY3LfkDFl6EEfvEqBl37neuhJUR/uzk05H?= X-OriginatorOrg: valinux.co.jp X-MS-Exchange-CrossTenant-Network-Message-Id: 349a2b77-1279-4271-f96a-08defee15ac1 X-MS-Exchange-CrossTenant-AuthSource: TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 20 Aug 2026 17:34:57.7595 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 7a57bee8-f73d-4c5f-a4f7-d72c91c8c111 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: C8iee0sFdgJvQEf6Dyoq44EFudyRCkmPSWSJrD9G2I6kvf9n5f9jr0z4YJu3yUm33cXJFcXYAWcCgwC8AartlA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: OS7P286MB7644 Content-Type: text/plain; charset="utf-8" A later change serializes status capture, interrupt clear, and event recording against channel restart. It must also publish all causes observed for a channel in that critical section through one callback. Otherwise, the deferred worker can consume one cause before another from the same status pass is recorded. Replace the DONE and ABORT callback pair with one callback carrying an event bitmap. For now, map the bitmap back to the existing deferred DONE and ABORT work, so behavior remains unchanged. Also split DONE handling into a lock-taking wrapper and a vc.lock-held body. The later LL event path needs to validate its recorded event under vc.lock before running the existing DONE state machine. No functional change. Reviewed-by: Frank Li Signed-off-by: Koichiro Den --- drivers/dma/dw-edma/dw-edma-core.c | 44 ++++++++++++++++----------- drivers/dma/dw-edma/dw-edma-core.h | 16 +++++++--- drivers/dma/dw-edma/dw-edma-v0-core.c | 6 ++-- drivers/dma/dw-edma/dw-hdma-v0-core.c | 6 ++-- 4 files changed, 44 insertions(+), 28 deletions(-) diff --git a/drivers/dma/dw-edma/dw-edma-core.c b/drivers/dma/dw-edma/dw-ed= ma-core.c index bbfd82b12ab5..97de0ad4489a 100644 --- a/drivers/dma/dw-edma/dw-edma-core.c +++ b/drivers/dma/dw-edma/dw-edma-core.c @@ -702,17 +702,16 @@ dw_edma_device_prep_interleaved_dma(struct dma_chan *= dchan, return dw_edma_device_transfer(&xfer, dw_edma_device_get_config(dchan, NU= LL)); } =20 -static void dw_edma_done_interrupt(struct dw_edma_chan *chan) +/* Must be called with vc.lock held. */ +static void dw_edma_done_interrupt_locked(struct dw_edma_chan *chan) { struct dw_edma_desc *desc; struct virt_dma_desc *vd; - unsigned long flags; =20 - spin_lock_irqsave(&chan->vc.lock, flags); - if (chan->status =3D=3D EDMA_ST_PAUSE) { - spin_unlock_irqrestore(&chan->vc.lock, flags); + lockdep_assert_held(&chan->vc.lock); + + if (chan->status =3D=3D EDMA_ST_PAUSE) return; - } =20 switch (chan->request) { case EDMA_REQ_NONE: @@ -751,7 +750,14 @@ static void dw_edma_done_interrupt(struct dw_edma_chan= *chan) break; } dw_edma_core_ch_maybe_doorbell(chan); +} =20 +static void dw_edma_done_interrupt(struct dw_edma_chan *chan) +{ + unsigned long flags; + + spin_lock_irqsave(&chan->vc.lock, flags); + dw_edma_done_interrupt_locked(chan); spin_unlock_irqrestore(&chan->vc.lock, flags); } =20 @@ -793,20 +799,24 @@ static void dw_edma_irq_work(struct work_struct *work) } =20 static void dw_edma_queue_irq_work(struct dw_edma_chan *chan, - enum dw_edma_deferred_event event) + unsigned int events) { - atomic_or(event, &chan->irq_pending); + atomic_or(events, &chan->irq_pending); queue_work(chan->dw->wq, &chan->irq_work); } =20 -static void dw_edma_done_interrupt_deferred(struct dw_edma_chan *chan) +static void dw_edma_record_irq(struct dw_edma_chan *chan, unsigned int eve= nts) { - dw_edma_queue_irq_work(chan, DW_EDMA_DEFERRED_DONE); -} + unsigned int pending =3D 0; =20 -static void dw_edma_abort_interrupt_deferred(struct dw_edma_chan *chan) -{ - dw_edma_queue_irq_work(chan, DW_EDMA_DEFERRED_ABORT); + if (events & (DW_EDMA_IRQ_DONE | DW_EDMA_IRQ_PROGRESS | + DW_EDMA_IRQ_STOP)) + pending |=3D DW_EDMA_DEFERRED_DONE; + if (events & DW_EDMA_IRQ_ABORT) + pending |=3D DW_EDMA_DEFERRED_ABORT; + + if (pending) + dw_edma_queue_irq_work(chan, pending); } =20 static void dw_edma_emul_irq_ack(struct irq_data *d) @@ -907,8 +917,7 @@ static inline irqreturn_t dw_edma_interrupt_write_inner= (int irq, void *data) struct dw_edma_irq *dw_irq =3D data; =20 return dw_edma_core_handle_int(dw_irq, EDMA_DIR_WRITE, - dw_edma_done_interrupt_deferred, - dw_edma_abort_interrupt_deferred); + dw_edma_record_irq); } =20 static inline irqreturn_t dw_edma_interrupt_read_inner(int irq, void *data) @@ -916,8 +925,7 @@ static inline irqreturn_t dw_edma_interrupt_read_inner(= int irq, void *data) struct dw_edma_irq *dw_irq =3D data; =20 return dw_edma_core_handle_int(dw_irq, EDMA_DIR_READ, - dw_edma_done_interrupt_deferred, - dw_edma_abort_interrupt_deferred); + dw_edma_record_irq); } =20 static inline irqreturn_t dw_edma_interrupt_write(int irq, void *data) diff --git a/drivers/dma/dw-edma/dw-edma-core.h b/drivers/dma/dw-edma/dw-ed= ma-core.h index 8d993e8cccbb..30b508eb3e3d 100644 --- a/drivers/dma/dw-edma/dw-edma-core.h +++ b/drivers/dma/dw-edma/dw-edma-core.h @@ -41,6 +41,13 @@ enum dw_edma_xfer_type { EDMA_XFER_INTERLEAVED }; =20 +enum dw_edma_irq_event { + DW_EDMA_IRQ_DONE =3D BIT(0), + DW_EDMA_IRQ_PROGRESS =3D BIT(1), + DW_EDMA_IRQ_STOP =3D BIT(2), + DW_EDMA_IRQ_ABORT =3D BIT(3), +}; + struct dw_edma_chan; struct dw_edma_chunk; =20 @@ -147,7 +154,8 @@ struct dw_edma { const struct dw_edma_core_ops *core; }; =20 -typedef void (*dw_edma_handler_t)(struct dw_edma_chan *); +typedef void (*dw_edma_handler_t)(struct dw_edma_chan *chan, + unsigned int events); =20 struct dw_edma_core_ops { void (*off)(struct dw_edma *dw); @@ -156,7 +164,7 @@ struct dw_edma_core_ops { u16 (*ch_count)(struct dw_edma *dw, enum dw_edma_dir dir); enum dma_status (*ch_status)(struct dw_edma_chan *chan); irqreturn_t (*handle_int)(struct dw_edma_irq *dw_irq, enum dw_edma_dir di= r, - dw_edma_handler_t done, dw_edma_handler_t abort); + dw_edma_handler_t handler); void (*non_ll_start)(struct dw_edma_chan *chan, struct dw_edma_burst *chi= ld); void (*ll_data)(struct dw_edma_chan *chan, struct dw_edma_burst *burst, u32 idx, bool cb, bool irq); @@ -256,9 +264,9 @@ enum dma_status dw_edma_core_ch_status(struct dw_edma_c= han *chan) =20 static inline irqreturn_t dw_edma_core_handle_int(struct dw_edma_irq *dw_irq, enum dw_edma_dir dir, - dw_edma_handler_t done, dw_edma_handler_t abort) + dw_edma_handler_t handler) { - return dw_irq->dw->core->handle_int(dw_irq, dir, done, abort); + return dw_irq->dw->core->handle_int(dw_irq, dir, handler); } =20 static inline diff --git a/drivers/dma/dw-edma/dw-edma-v0-core.c b/drivers/dma/dw-edma/dw= -edma-v0-core.c index 9053354eda67..4a1bb128fa00 100644 --- a/drivers/dma/dw-edma/dw-edma-v0-core.c +++ b/drivers/dma/dw-edma/dw-edma-v0-core.c @@ -336,7 +336,7 @@ static void dw_edma_v0_core_clear_abort_int(struct dw_e= dma_chan *chan) =20 static irqreturn_t dw_edma_v0_core_handle_int(struct dw_edma_irq *dw_irq, enum dw_edma_dir di= r, - dw_edma_handler_t done, dw_edma_handler_t abort) + dw_edma_handler_t handler) { struct dw_edma *dw =3D dw_irq->dw; unsigned long total, pos, val; @@ -375,7 +375,7 @@ dw_edma_v0_core_handle_int(struct dw_edma_irq *dw_irq, = enum dw_edma_dir dir, continue; =20 dw_edma_v0_core_clear_done_int(chan); - done(chan); + handler(chan, DW_EDMA_IRQ_DONE); =20 ret =3D IRQ_HANDLED; } @@ -389,7 +389,7 @@ dw_edma_v0_core_handle_int(struct dw_edma_irq *dw_irq, = enum dw_edma_dir dir, continue; =20 dw_edma_v0_core_clear_abort_int(chan); - abort(chan); + handler(chan, DW_EDMA_IRQ_ABORT); =20 ret =3D IRQ_HANDLED; } diff --git a/drivers/dma/dw-edma/dw-hdma-v0-core.c b/drivers/dma/dw-edma/dw= -hdma-v0-core.c index 4acbace43519..c6d7f9885aa8 100644 --- a/drivers/dma/dw-edma/dw-hdma-v0-core.c +++ b/drivers/dma/dw-edma/dw-hdma-v0-core.c @@ -174,7 +174,7 @@ static u32 dw_hdma_v0_core_status_int(struct dw_edma_ch= an *chan) =20 static irqreturn_t dw_hdma_v0_core_handle_int(struct dw_edma_irq *dw_irq, enum dw_edma_dir di= r, - dw_edma_handler_t done, dw_edma_handler_t abort) + dw_edma_handler_t handler) { struct dw_edma *dw =3D dw_irq->dw; unsigned long total, pos, val; @@ -200,14 +200,14 @@ dw_hdma_v0_core_handle_int(struct dw_edma_irq *dw_irq= , enum dw_edma_dir dir, val =3D dw_hdma_v0_core_status_int(chan); if (FIELD_GET(HDMA_V0_STOP_INT_MASK, val)) { dw_hdma_v0_core_clear_done_int(chan); - done(chan); + handler(chan, DW_EDMA_IRQ_STOP); =20 ret =3D IRQ_HANDLED; } =20 if (FIELD_GET(HDMA_V0_ABORT_INT_MASK, val)) { dw_hdma_v0_core_clear_abort_int(chan); - abort(chan); + handler(chan, DW_EDMA_IRQ_ABORT); =20 ret =3D IRQ_HANDLED; } --=20 2.51.0 From nobody Mon Sep 28 15:34:37 2026 Received: from TYVP286CU001.outbound.protection.outlook.com (mail-japaneastazon11021106.outbound.protection.outlook.com [52.101.125.106]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C9499481AB3; Thu, 20 Aug 2026 17:35:02 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.125.106 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787247304; cv=fail; b=RK+nucPUy4XDiglT4ELMIcCmoNIWg8uJiohAwXXZimyYFP9uWI64xSQIX6K9957JLg/Yvb5s4AKZFYkHmojNfLS7ckT21cr7SLHCppKFkhom5Qx0m/LAdUhs8ZpLjpfhBxzG5RjuMvh3sbPeoPxx6LVI+nbrPzTdUM7Lj9x6hh0= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787247304; c=relaxed/simple; bh=jBaEXZYk/0Gs7r65rhgOAJrIHbJWZzfi++n7fBLE7ho=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=Lk0Dz/ucjUNrLCvRapD6fDWyLIxbmPAPQVaSDJmou/hVG2GBO2+0PI9wY8XCy1m6VYw9blijt5hdqy5Enms3ojbjl4jZtVmUpfYAS+VCauDeVz5loc5ZDh2accdj1cgonw8bW1UnrwpRtSVOwoe4rLz/picKcvNwZxN7Jq7vU7I= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=valinux.co.jp; spf=pass smtp.mailfrom=valinux.co.jp; dkim=pass (1024-bit key) header.d=valinux.co.jp header.i=@valinux.co.jp header.b=as+py9IH; arc=fail smtp.client-ip=52.101.125.106 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=valinux.co.jp Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=valinux.co.jp Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=valinux.co.jp header.i=@valinux.co.jp header.b="as+py9IH" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=UbNvxpK5iZCeT26UkNCp25q8WQpwA2xmus22wgiJaj66U1dTmZFadE3nAemhQDgpf2v26tez9Lh7LFpscnrjGvdjWmGlp3O0+mP5mp1ve5+miGQhHh9g1C5+PcFxTdgK9FBqYd4F9e5cwr5FrGKG4RCbAAYGM6qhL7cbdpCtfZgvf26pA9U0aC4ZkfTLEgb2IGRiYTUbzRP1uzdW8J+12iSYCXcHfDmLMbult7ygcRAdJPwevUFfXraluUvFbgISw9+G0QCtlWKdkTRbCVCHTkosfMo9KYeN5L4aMXytGYFdKA0bORy1jeNpV95KHdNKAygVM3KacEcKJ63akmVk/g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=wWRO/9ruUqJxzfs8Ej5QtDYCVTu+qqoaeHO/aCaj4VQ=; b=hjo/xd/pwVlx1vpe9AvY4GRiiU9ayyHurynul6Z3szDey4zefjuZJN3A6sCoG2ICKhjeg93LRLT2koE3tWHnMrZV9QU3ZgERMMlHsHhItGgg7HCEklqKKMyn4Ppf0hcjgR43HZZaJb6NYUeBdbYFsfl4Ujyy60cgM+8uYVyowU9LwyJoOE9/ARFQAlq4nKpd2CnnqGQeYVpUh50gmQSoQhNsoLC8MGQLrd4nAvikPHT2r58ol9WGp+fhCAOAwQVO8vMOHWsXScAzSg6W8i9qj9qy14fIjQlIjAAJSaAO8aAHLFBydjV5BmFypWjHYzDnH4y7UIksvGQrNF5Iu+QB0w== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=valinux.co.jp; dmarc=pass action=none header.from=valinux.co.jp; dkim=pass header.d=valinux.co.jp; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=valinux.co.jp; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=wWRO/9ruUqJxzfs8Ej5QtDYCVTu+qqoaeHO/aCaj4VQ=; b=as+py9IHhrlsEJEk+tHCMZZv3NeNaqk6328VKfnIRLa0glBqxZs6xMiRcrKq57ofH+Q3WJpK03KN2xws9Vkmqxa3b7aHCya6xkAMGi5fMLTWiNgaPFuTsYpOonTki2MSmJOB7DSavGJSllSWK083TRvi9Jquha1AS0E+a1EE51g= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=valinux.co.jp; Received: from TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:38f::10) by OS7P286MB7644.JPNP286.PROD.OUTLOOK.COM (2603:1096:604:461::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.339.8; Thu, 20 Aug 2026 17:35:01 +0000 Received: from TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM ([fe80::2305:327c:28ec:9b32]) by TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM ([fe80::2305:327c:28ec:9b32%3]) with mapi id 15.21.0339.007; Thu, 20 Aug 2026 17:35:01 +0000 From: Koichiro Den To: Vinod Koul , Frank Li , Manivannan Sadhasivam , Gustavo Pimentel , Kees Cook , =?UTF-8?q?Krzysztof=20Wilczy=C5=84ski?= , Kishon Vijay Abraham I , Bjorn Helgaas , Christoph Hellwig , Serge Semin , Cai Huoqing , Niklas Cassel Cc: Devendra K Verma , dmaengine@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v6 10/10] dmaengine: dw-edma: Prepare LL kicks for event serialization Date: Fri, 21 Aug 2026 02:34:39 +0900 Message-ID: <20260820173439.2004068-11-den@valinux.co.jp> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260820173439.2004068-1-den@valinux.co.jp> References: <20260820173439.2004068-1-den@valinux.co.jp> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: TY6P286CA0027.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:3b9::10) To TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:38f::10) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: TY7P286MB7722:EE_|OS7P286MB7644:EE_ X-MS-Office365-Filtering-Correlation-Id: 5a5f03cc-bc13-4cf4-5aa3-08defee15cc1 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|10070799003|7416014|376014|23010399003|1800799024|366016|921020|6133799003|56012099006|10067099003|18002099003|22082099003; X-Microsoft-Antispam-Message-Info: B5r0K4bveCu852jGAmNugKBZKhDuwr9w7tpEFjkPEq1Cfqf07RtJdgSGvpEwRfozQaK31BDvhg1/OSIJv8pLZk/ALwDvzO5YkF8mi2POlvSBRyGN2sTNa4NaDZwLt2NLLGRAHNMPH1AMe3NGUqc7Ub+gfhJnwKcJwG6QKeTZoVgilXnFY7YyHnoAXMqV/8P5hgkkzHB5ZpkmdbrIj+unPWc/o3yRvcN+iRcy+PxVP8E3XaEM/cZdsYaO5CpXc1fPqODOwXmnt6t6xc8X6uZXOfA+lD8A0KHtCYT9EIvuXmQIAeV0EQ2kJQAXOMaP/778ui5oYpFFh9sA8Ovyz/Jg1y6o5+lGHOp01fG4h9dGQ0lIWpuqdDTfMoUXoNbhW8+HZl7dUrOWygBcUNIAya2mJweZTAk3AsL3G5iJ3AG0ep4amsC2O7TrrK4YXjhcfMtVTWCRDvuxUdhhJyC4JZ7wMpYZAgzqs8emPRGal+MUrw9m0McvdwYSwAMwtEnko9kRILSC+QO6H/04AdMEzLQetuvCmju8KEFvtNwA/lnQ/IAKTGBUm+XjwEQinHqv4MxJzIJsE2a8r5cnwGXWdqZmnAWMaoYdn2+SPfgBNB5g3YixsaR6CdnQTzgiBxI6n1Br54nypbWqiFeqxaBCE7ZqMHfLBg3X3ZIoxnxV//0ykJunnurvbApxYcZSUrgNqnx75Xr++ZhnifjrsJ8cwmOtZA== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230040)(10070799003)(7416014)(376014)(23010399003)(1800799024)(366016)(921020)(6133799003)(56012099006)(10067099003)(18002099003)(22082099003);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?/xbkExctIa6ycipPe3gQBJH9nRH4ErY6a57nTvzaeVN+LZBXZqJc8ZNA8KyA?= =?us-ascii?Q?GCNhOlOfkmlLvzD99xQ2IHjunN0rHQ6jclQ4jcCCdB/3dl0T9wOhkFDB5CwU?= =?us-ascii?Q?YGKVyex6ZpANsGnSm7t/wOxEBOR19/SA1zvucHhhavzIA1KOpOh4MBObAl3X?= =?us-ascii?Q?KjrfSp0NkkBKBZ7F6gbATRYwtnbx5aR2Pa19k0uhpzkiNeZm9JeRAk9KXhrG?= =?us-ascii?Q?W+aIVM31QquLJAzFsRa4gPtJcI0u9i83s9ljUUW+me9I2Ip+hp4d//sU7Jf/?= =?us-ascii?Q?Vp5l0BtPG2la4FOnSUwqLtjVj5Yc0NRl+uNpPBE7TDtEGcJW0FqvZlY5p+Zt?= =?us-ascii?Q?20y+6prG/eUwTZirCz9DRIIy5kaoHZa019Ab/CRBOYjej7+Mm2J211Ko+hz1?= =?us-ascii?Q?f+r7VM3hMVTcg+KlVVxAbjU9VkMinNofjZoMu8MdxttbMeDPhM1MmGbi+/25?= =?us-ascii?Q?NRYsjYCIDz0tntgpFV8RgN1g1IilJzTbreEYixcDcLk0xdKihI8I09WAXojT?= =?us-ascii?Q?eolL+5VZu6qHZt0SZWr3aWm4BkTqIhUr0uJmiE442xEspizWQjpxZRem+x3Z?= =?us-ascii?Q?uE2LW714K0Gv+69Xj/TDY0gyusyyh+J4Z7OankIDstksp9KYeA1tz1Mj6Lo9?= =?us-ascii?Q?GsR6oI/SLxlTWds5EXqNugNIcW6CVlj0yYtPQU63rkzNWjpl9azvY4lYt7lv?= =?us-ascii?Q?Cp/I/UBVKcWFR08TRwTaWWiHbngFY0pYXdb1UNpPuZxRDWGZU6Ju3MaQaYgF?= =?us-ascii?Q?TUwXIznrrddnQVW2puO7ktG9s3JwV+Ua5SUQTv/gCpkLrgK8e8OO0p8nQ+mi?= =?us-ascii?Q?tXMOci8JZb43FDQigMdn+V2agYEfWKtYFmQrKwW25uoRmlhNyKFOTf8Tdukk?= =?us-ascii?Q?OhW/gsq+CUI5t5a9b/+KpkvuZEQqgv/1ny2BWyAgH8PvZNMFguT6di77tU/0?= =?us-ascii?Q?q6i+BuCZ4dhm3fSFNajhiSN5I8IEryAZdl3yyCsGuDkNeizbdafznR2166kX?= =?us-ascii?Q?cz7dzb7vKGLtgrOCZ7ANI45U18GzNdk72eZXOOnigT7wjV1MAJTgXNsD6yZ8?= =?us-ascii?Q?s+FzGVAe0tBGbVQLIZGEj2tL+Am6GiZqe+tp3gQh/OBnsOLg5RvOD28A/LCg?= =?us-ascii?Q?ezzc0ErNbeItLqhhsNARJuFXrN7gHe/X7H5RAE6VRUVCzYn74y0zkLJXXC6J?= =?us-ascii?Q?r4kSY/IRj0FhqBwPtikdsu7n9rW5YvhU+3A2BBruedFCPRpoZP961GQJcETw?= =?us-ascii?Q?fLdtWWIlphGy++FLr8nnmZmRJltc2CLg8wXYxRBE6DfJFcG/xOenQpdp7jBx?= =?us-ascii?Q?NRV5DS61g67FrSRQrWkU+ORuEKIH0VA3mIqg8h5HruQTKEBLxR41av2cYh6q?= =?us-ascii?Q?IL4Ai19YqU/3/8qJVREoETNYXK//zix1Y1bcr0MLufGRtG1vnSDod05EOjO2?= =?us-ascii?Q?zy3s0HF6ksIq91jDZJmVgCEMCVlaUy4zw/ke32RqeGZLSfM3gwPQsr+1usNS?= =?us-ascii?Q?zn/xh0f+hPZ97r2VZxkikQmOeQRTPK5it0maR8xk2O3I6vfyUAau1Vv2raQ4?= =?us-ascii?Q?BQN67pfHf1DtyXFyIg0cyJejWfeBDLoVCWPxzJUPiy107w4vCMKIEWbgp85v?= =?us-ascii?Q?t4ofdcZewWZt4DXridCOQq3k/3SaUkQSJ1BekcLC1V3LnoSlQJgT4ywzCwoj?= =?us-ascii?Q?/iffSJhksIcbj5/pqavso+eWXePjvHJIP6i3Msa6FMWKVDi4QRC7fJsRsZuq?= =?us-ascii?Q?DDvpgjz/C5qMeZi/UykAAWVLjoKldnH8sdr9H1kyJ8ur6SyAm4AG?= X-OriginatorOrg: valinux.co.jp X-MS-Exchange-CrossTenant-Network-Message-Id: 5a5f03cc-bc13-4cf4-5aa3-08defee15cc1 X-MS-Exchange-CrossTenant-AuthSource: TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 20 Aug 2026 17:35:01.1092 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 7a57bee8-f73d-4c5f-a4f7-d72c91c8c111 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: yRZbzc6Wa63+SxZXtArTpI+iEBQyPajshKWPSdFdqtQB4rDo2jbhZNAyiFTKS2xGctf0yo18GX7oQTTAAPDe+A== X-MS-Exchange-Transport-CrossTenantHeadersStamped: OS7P286MB7644 Content-Type: text/plain; charset="utf-8" Both eDMA and HDMA perform the same remote LL read-back immediately before writing the doorbell register. A later patch serializes each raw doorbell write against IRQ event capture. Keeping the read-back in the provider callback would hold event_lock across a remote read. Move the common read-back into the high-level dw_edma_core_ch_doorbell(), where it can run before the serialized section. Name the provider write wrapper dw_edma_core_do_ch_doorbell() to distinguish the raw write, and leave dw_edma_core_ch_maybe_doorbell() to decide whether a kick is needed. No functional change. Suggested-by: Frank Li Reviewed-by: Frank Li Signed-off-by: Koichiro Den --- drivers/dma/dw-edma/dw-edma-core.c | 18 ++++++++++++++++++ drivers/dma/dw-edma/dw-edma-core.h | 2 +- drivers/dma/dw-edma/dw-edma-v0-core.c | 16 ---------------- drivers/dma/dw-edma/dw-hdma-v0-core.c | 16 ---------------- 4 files changed, 19 insertions(+), 33 deletions(-) diff --git a/drivers/dma/dw-edma/dw-edma-core.c b/drivers/dma/dw-edma/dw-ed= ma-core.c index 97de0ad4489a..e2eba6d72b53 100644 --- a/drivers/dma/dw-edma/dw-edma-core.c +++ b/drivers/dma/dw-edma/dw-edma-core.c @@ -13,6 +13,7 @@ #include #include #include +#include #include #include #include @@ -254,6 +255,23 @@ static void dw_edma_finish_termination(struct dw_edma_= chan *chan) chan->status =3D EDMA_ST_IDLE; } =20 +static void dw_edma_core_ll_sync(struct dw_edma_chan *chan) +{ + /* + * Remote controller registers and LL memory may be reached through + * different paths. Complete posted LL writes before the doorbell. + */ + if (!(chan->dw->chip->flags & DW_EDMA_CHIP_LOCAL)) + readl(chan->ll_region.vaddr.io); +} + +/* Must be called with vc.lock held for an LL channel. */ +static void dw_edma_core_ch_doorbell(struct dw_edma_chan *chan) +{ + dw_edma_core_ll_sync(chan); + dw_edma_core_do_ch_doorbell(chan); +} + /* Must be called with vc.lock held. */ static void dw_edma_core_ch_maybe_doorbell(struct dw_edma_chan *chan) { diff --git a/drivers/dma/dw-edma/dw-edma-core.h b/drivers/dma/dw-edma/dw-ed= ma-core.h index 30b508eb3e3d..76fd5a41a707 100644 --- a/drivers/dma/dw-edma/dw-edma-core.h +++ b/drivers/dma/dw-edma/dw-edma-core.h @@ -298,7 +298,7 @@ static inline void dw_edma_core_ll_irq_clear(struct dw_= edma_chan *chan) chan->dw->core->ll_irq_clear(chan); } =20 -static inline void dw_edma_core_ch_doorbell(struct dw_edma_chan *chan) +static inline void dw_edma_core_do_ch_doorbell(struct dw_edma_chan *chan) { chan->dw->core->ch_doorbell(chan); } diff --git a/drivers/dma/dw-edma/dw-edma-v0-core.c b/drivers/dma/dw-edma/dw= -edma-v0-core.c index 4a1bb128fa00..c053cb4c2844 100644 --- a/drivers/dma/dw-edma/dw-edma-v0-core.c +++ b/drivers/dma/dw-edma/dw-edma-v0-core.c @@ -480,20 +480,6 @@ static void dw_edma_v0_core_ch_enable(struct dw_edma_c= han *chan) upper_32_bits(chan->ll_region.paddr)); } =20 -static void dw_edma_v0_sync_ll_data(struct dw_edma_chan *chan) -{ - /* - * In case of remote eDMA engine setup, the DW PCIe RP/EP internal - * configuration registers and application memory are normally accessed - * over different buses. Ensure LL-data reaches the memory before the - * doorbell register is toggled by issuing the dummy-read from the remote - * LL memory in a hope that the MRd TLP will return only after the - * last MWr TLP is completed - */ - if (!(chan->dw->chip->flags & DW_EDMA_CHIP_LOCAL)) - readl(chan->ll_region.vaddr.io); -} - static void dw_edma_v0_core_ch_config(struct dw_edma_chan *chan) { struct dw_edma *dw =3D chan->dw; @@ -624,8 +610,6 @@ static void dw_edma_v0_core_ch_doorbell(struct dw_edma_= chan *chan) { struct dw_edma *dw =3D chan->dw; =20 - dw_edma_v0_sync_ll_data(chan); - /* Doorbell */ SET_RW_32(dw, chan->dir, doorbell, FIELD_PREP(EDMA_V0_DOORBELL_CH_MASK, chan->id)); diff --git a/drivers/dma/dw-edma/dw-hdma-v0-core.c b/drivers/dma/dw-edma/dw= -hdma-v0-core.c index c6d7f9885aa8..0b3c8496b0ad 100644 --- a/drivers/dma/dw-edma/dw-hdma-v0-core.c +++ b/drivers/dma/dw-edma/dw-hdma-v0-core.c @@ -282,20 +282,6 @@ static void dw_hdma_v0_core_ch_enable(struct dw_edma_c= han *chan) HDMA_V0_CONSUMER_CYCLE_STAT | HDMA_V0_CONSUMER_CYCLE_BIT); } =20 -static void dw_hdma_v0_sync_ll_data(struct dw_edma_chan *chan) -{ - /* - * In case of remote HDMA engine setup, the DW PCIe RP/EP internal - * configuration registers and application memory are normally accessed - * over different buses. Ensure LL-data reaches the memory before the - * doorbell register is toggled by issuing the dummy-read from the remote - * LL memory in a hope that the MRd TLP will return only after the - * last MWr TLP is completed - */ - if (!(chan->dw->chip->flags & DW_EDMA_CHIP_LOCAL)) - readl(chan->ll_region.vaddr.io); -} - static void dw_hdma_v0_core_non_ll_start(struct dw_edma_chan *chan, struct dw_edma_burst *child) { @@ -393,8 +379,6 @@ static void dw_hdma_v0_core_ch_doorbell(struct dw_edma_= chan *chan) { struct dw_edma *dw =3D chan->dw; =20 - dw_hdma_v0_sync_ll_data(chan); - /* Doorbell */ SET_CH_32(dw, chan->dir, chan->id, doorbell, HDMA_V0_DOORBELL_START); } --=20 2.51.0