From nobody Sat Jul 25 21:30:55 2026 Received: from DUZPR83CU001.outbound.protection.outlook.com (mail-northeuropeazon11012044.outbound.protection.outlook.com [52.101.66.44]) (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 A8D8130DEBA; Mon, 13 Jul 2026 17:03:34 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.66.44 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783962216; cv=fail; b=G3VtnKLuJjZgxL7OdRXH4g1/OS4IVI3Wv4gZAT+ZGSpTuERG3VQrNrRdYglrsM8u++7P1H2EAujXgs6LDNn+0BnEh2HDilDSDpOLWXk7QOLysOPpqY6JBjlcOPdapLBZuVaqVpXuWiQ4L2CFNo9ywH+kOKJ989NWhgbVZ0aFIpY= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783962216; c=relaxed/simple; bh=0rUaAhRYXGLBuL92sG3IHilwL5OsC+P5KgfJiOuVZEM=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=asg7z/6afmirLuA3WB/gFEHpNAzCKRKFM+ZYCs0Um65hMUxvZDDRkX6+zJGo6c5cdsGAREk+nq2tjBWA+RUBCHEgwitdMTzWFzYYiMLQZlPB3EG+e3BRXiWpfa4/pj8U1ebWe8QZZOTxPbaL5QPm9B/GVB7ylJBYi4zdVsY448Y= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=oss.nxp.com; spf=pass smtp.mailfrom=oss.nxp.com; dkim=pass (2048-bit key) header.d=NXP1.onmicrosoft.com header.i=@NXP1.onmicrosoft.com header.b=QPzg2kgU; arc=fail smtp.client-ip=52.101.66.44 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=oss.nxp.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.nxp.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=NXP1.onmicrosoft.com header.i=@NXP1.onmicrosoft.com header.b="QPzg2kgU" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=HX5s1Pr+vnKdM5hP013JQI7Dz00ksqhUayIJPPe/wblCh2NlFK6vd9PgCIPP90RtLtSUJi+p7kziYl80uS6vOeALKLnRDnvVEwysCKUgQedkcUJkzHji4+6j8NCYbP9Y7L8dGcBK8zfzWEV4h4+3r1sAOtskvzv5qAmBwFsJT6LI7ILH0kjecET2a5O8rFKwmhvParJgKJkw1zmEAz3uS4m3IaOW05HH4BIt/pSdN4Orfh97c09uFGRspXcdmuBlMh6gIFV3kGfkCwD9SEzaUWJWUZxPNyXg8PcIVCvHp+3Ki+rm/Lmkhavb/C2ooLuHvRmHXd9m7nyIdNdsqZA0Wg== 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=ekbvDQDKa607fzFh0+aPv9ATxvLOpiy+Pj1Ja9XJpDk=; b=HNQKKywTzBCtV5xqtyWW8UtgHt9STCmDdmHzm8tP3foFRPRcLtOFoso/yoR1mDMAgjceX/59NFq+H+Um197D4Wcxy2tZWu+3LtCiOfJhRSre6BAbVG9uXVuPW8DCEGaY978XqjRMg508rEzSFPm1yf0Gfbn3Dw0HI3iihKzmNfEmyW4N1w7KVWYla1td0qfw2FjZOPsTbu4YS0hbmnjo7cZUCeRqlReT517bdJhGWwVdTkHi9K0vV2ppj2CtzQV50H83/vaC2mCY8kdlQp+/eu+a7DAC8mYkqVtMakMSpU97fkhaAAJRqv7R6yvHd0BuY/P+Wjbj7pOwriIuFpbWBA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oss.nxp.com; dmarc=pass action=none header.from=oss.nxp.com; dkim=pass header.d=oss.nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=NXP1.onmicrosoft.com; s=selector1-NXP1-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=ekbvDQDKa607fzFh0+aPv9ATxvLOpiy+Pj1Ja9XJpDk=; b=QPzg2kgUTp/zlEkoTQPkEVYLJnwvhz6rU0RsK9uEcWcX2p1aqpIpGrezP2c1njs3Ybt7QuqUfUWL3jZF8i2diLW6AEcBhBdJJsOYIegNfIPYgVB7oBrInyXtHDSGFk5SC0a2IlB3zb69FmTrVS+sITa7+r64O8kCRYA0C5OElaYNQcVyQTTAHnoqQdhohkUwz7j2m4URaHUNrw2EsW2ZbnKg2JFcTprHCiu9TOnHDCl+dPIeNeViBc1VBD4m6TKqjL58g47bXAYLImUD4JwwOqJHeSFY98p5YzvnFUuepwbAgdoRlDD+k1nuBd6Jbi6tAmlfy1FUjIJBoDy3xPtUkQ== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=oss.nxp.com; Received: from GV2PR04MB11799.eurprd04.prod.outlook.com (2603:10a6:150:2cf::9) by PA1PR04MB10228.eurprd04.prod.outlook.com (2603:10a6:102:454::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.202.18; Mon, 13 Jul 2026 17:03:31 +0000 Received: from GV2PR04MB11799.eurprd04.prod.outlook.com ([fe80::2146:83a2:5329:b7c]) by GV2PR04MB11799.eurprd04.prod.outlook.com ([fe80::2146:83a2:5329:b7c%6]) with mapi id 15.21.0181.019; Mon, 13 Jul 2026 17:03:31 +0000 From: Frank.Li@oss.nxp.com Date: Mon, 13 Jul 2026 13:03:19 -0400 Subject: [PATCH v7 01/10] dmaengine: dw-edma: Move control field update of DMA link to the last step Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260713-edma_ll-v7-1-6fb7498c901e@nxp.com> References: <20260713-edma_ll-v7-0-6fb7498c901e@nxp.com> In-Reply-To: <20260713-edma_ll-v7-0-6fb7498c901e@nxp.com> To: Manivannan Sadhasivam , Vinod Koul , Gustavo Pimentel , Kees Cook , "Gustavo A. R. Silva" , Manivannan Sadhasivam , =?utf-8?q?Krzysztof_Wilczy=C5=84ski?= , Kishon Vijay Abraham I , Bjorn Helgaas , Christoph Hellwig , Niklas Cassel Cc: dmaengine@vger.kernel.org, linux-kernel@vger.kernel.org, linux-hardening@vger.kernel.org, linux-pci@vger.kernel.org, linux-nvme@lists.infradead.org, Koichiro Den , imx@lists.linux.dev, "Verma, Devendra" , Frank Li , Devendra Verma X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1783962202; l=3618; i=Frank.Li@nxp.com; s=20240130; h=from:subject:message-id; bh=gVYSKfPnpSeZrfSYGx+A3Uwf3FueXyIjjaG1eS+BC5U=; b=uric20U89P0Tj9RccOjg2Z06OFVD76RazkS5jiF9CkKi4Bjrvk580ZuD3npjB1yVGI5jNf/7J ok0byGmp6gyCly28MC44mcPLJmc+P+FNbOn2w4weurnXelY61loF/jR X-Developer-Key: i=Frank.Li@nxp.com; a=ed25519; pk=I0L1sDUfPxpAkRvPKy7MdauTuSENRq+DnA+G4qcS94Q= X-ClientProxiedBy: SN7PR04CA0042.namprd04.prod.outlook.com (2603:10b6:806:120::17) To GV2PR04MB11799.eurprd04.prod.outlook.com (2603:10a6:150:2cf::9) 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: GV2PR04MB11799:EE_|PA1PR04MB10228:EE_ X-MS-Office365-Filtering-Correlation-Id: 9d57e3d4-cf6a-46c1-a00a-08dee100aacd X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|23010399003|7416014|376014|366016|19092799006|1800799024|921020|18002099003|22082099003|11063799006|56012099006; X-Microsoft-Antispam-Message-Info: O3AIqS9A3zcnCLE7ypiiaKqnQzuaseRYupbqRMkYoqei2Q1MbabsX6FksfGur4N/dtnNPC/56oB0Siob4iH4j1KJmRb70g1sAMhy+FHngr8DtvXFjRiu59qVK0mk71Y5xMl6/LS+E9b9lpcKwtr1QLQdMnnhiZGsKKzA2v5qrHStFGhd+Tw+1N3Alx0SwTbQziA+NK3SP8IG3MVevD+1SeID09tMjd36zLRtjLeR6e7hLDchbc4xc3+/X42L3XruoEsYu+UeyK2mzwRoxmF0dtbGI+zcVTvAkOyX3c2IAxXjEctF5oO4uTJQcj3ZssFBsdlshugst227Pftmoo99mpO5smxieFSeEN7LdoblYExQdAQY8Ozy0ACgU2mfxjx2Yav2k11s/+NVK5V6CqGwy5pRZrFMuWim7ZopLTfHQeBhMhGWVpgOuudsteOWXyUNs4sfOQuQXEBns5X0d0wz/97uftUnPEQfNpICuZi4KWeJtwg2Tx2T7xCbmdmShwSykdp/Xj1PqHtq3udUhL89toW28WcNyTqeHWFtEsZo5nYC4hAfuYIirwSMn6583d6bc1wXFrU61hQrjT+1lOBQ2rBzQ7eY0rDX2C/FBRG1CvN4vKCfPETAzcFdPy47tjQvo2L+DFZu/KSS4uig9YJec7KRUdHSKaLGJKPpjFpYahoAXnGpThNc6x51iy/ms8SeV145nd62cRVKWjwUWM5wow== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:GV2PR04MB11799.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(23010399003)(7416014)(376014)(366016)(19092799006)(1800799024)(921020)(18002099003)(22082099003)(11063799006)(56012099006);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?Ni95aE9XUlJiRTN3eFkyQURKUi9waXpKRVFXT2h3LzNzK3IrNHJZMWNTU01h?= =?utf-8?B?SWI0NU5sZWdhbW5uSVIrTitJZk90Z21lZHhGUk1QMGh1ZTFKV3gwVmN1OWIr?= =?utf-8?B?bzMvQmhDZ1dTbzZCL3lHeUY2djlwRFBZSStsVEl4a3lvOUxmTzVQd0dxR3Bu?= =?utf-8?B?eEtiVTZGcW9WbzR5MDZXdXo5cVk4RHdjcUgzSUllaDlvUjBpRXJPQm4yS2RT?= =?utf-8?B?K0ZNa0Y3WW5hWHRvd2RZN3hNR051ZXhBR0J0QlI5ZWV2a2tqdWttWmhVRUVZ?= =?utf-8?B?Mk9CamI3TTk1VXozTTJQSkN1Y2lXdEs4MEtuNmxrbDhCME9yREpWWkRaS01M?= =?utf-8?B?V1llMGpyNnZ5cnpzYlBpRTVDcHVlbDZmejBoaFY1SDdsb3h6Tis4SUM3WGxu?= =?utf-8?B?M1Zsa21kZzNFYVd2QW5mM3oyWjJsN1UyM2ZMa1VCd3hwZ2tRRnhkZjFDTFll?= =?utf-8?B?aTNYUGRhbmswUDF2TGJSQkZ5UUxLaGl4TWg2T1FPOENrQnpaNjY5UU1tdDZI?= =?utf-8?B?dHIyMFZVbjhBdmVFOGtpdjBqdFl2OFNDT2hYUmFXYUtYUFpBcTZWVHFWTzJT?= =?utf-8?B?WjcrRm93ZkIyVnRjMy9xSU1KYTRucFVRSldvWkxreVNtQ045eksya3Vtek82?= =?utf-8?B?ZlMycDluU2kra21lUUpWYWNKY0g1Lzl4TGN4c0NzTXV2YkRRNXJMbTQ3NExY?= =?utf-8?B?Nk1HOG1sd1VKS25oMGc4Nk0yTDhmOTdUNnlVK1dYaUxvdWVQcFFvT3h2OFFj?= =?utf-8?B?RU90SElmN0J5RVhqdC9nQWgxQVhIeldvT2FQakxnWEZDWDlVWk00c0JTbzFl?= =?utf-8?B?cmxlR0FUL0pWWkF1ODVXdDZDdkdFUGN5ODV5aWp6S2x5QU1ERkZMYmEvL25i?= =?utf-8?B?RElOdXJwK01XYXpBVU1qUWpIWmcwNTduUTFuRGxvaVdXQTlnZjlrWHR1VWdj?= =?utf-8?B?Q2hHWlpraElBWmVvQ1cvKzVZV0xka09yVHp6SUZ3V05rbXIvZG95MXRpa1lq?= =?utf-8?B?cWpZSE0rRDc1ejdoVkRXUCtxY0tqVG9Vcy96VWI2anFCUnBMQm9FMmxHMnpG?= =?utf-8?B?N3dQRTZDQmoxUmQ1a0JWVW9KeWg3WUs5L2kzcW1FZSs4eXorREFPU2U5M2Jr?= =?utf-8?B?aGpvVlZENFc1bWoyeXJPbDY3NDNzd0xZb2htdVlub1k3Q0FrcDZpRWIwVVlX?= =?utf-8?B?WXIwZTdHeFkxTGI3Q3VqS2ZkV01uS3ZiRkluTzRFWVJ6dm9DTWtlZkxsZ0x3?= =?utf-8?B?ZWlJWGxWQ1NxZ0lta0JoUnFSVkowUDVqeVk1UFkraDRrNkZsL0t2QXRWS2FX?= =?utf-8?B?RS9temUwWHhnYlFGdHZydDNTU3pxZGl5aDBSek1PLytaR3hBRThWMVdwMFUv?= =?utf-8?B?cC93dFJtZm4rOVdwQlFablRDdWZjSVAwaSszK0VyOUw3T2VDc2twcmV1MmdW?= =?utf-8?B?ZG1EejNRc0tDd0RVWG5SZWhwT1hRZVFRZzNKWDdKbnNnQXFQRUticXdFZ1oy?= =?utf-8?B?UTVpZGk2TlhnbC9FdHhlaENFcS9kZ0N1d25rTU9xbmE1NldEM3k5aFdJcXVq?= =?utf-8?B?UkFpcmxIdUVSYkJXN09UbXVKQUR3bW9QU3duVnJOdjF6UlN1eHNFcENsZ0pH?= =?utf-8?B?eHZGamZ3U3dXdCtHMGJHMCtWM1BlSFJFQitPNlp6bnF5TjRUcnJnUHNxK1Ey?= =?utf-8?B?aFl6OEEzZHZkOStEVmdGM1ZkUm96WnFrUkUrTTFEWEpkZDR2RmNHWmZxUldM?= =?utf-8?B?NFVTeWZJZWNWU0ZPKzFrcVZDbHlXU005dkYyeVlWSkV1RklwY09aOWl3amxM?= =?utf-8?B?Vk9Nbm44UXlxdEJmeVQ0dkVzWWR3ZjhlSnpUNHVBVHhCWUYrdkZOWFMrckpn?= =?utf-8?B?dEw2aFhLTXdhWjQzT1RTQlBrTlpNSUd5MU5OVy95amF2bGZkVm9aNDQwcUVo?= =?utf-8?B?QlI5WW1wSzhzVjdQbldRZVB3OHo1aU93Q3hTaTduTVRXVFoyU1NWVW5EMElH?= =?utf-8?B?QkRHaER2NjBqOWoxY0drems3cmI2bzdqWVgydzR6aVBybUNIVGRXUldTMUlz?= =?utf-8?B?bjZKUHRHWWFKNFRJOGVDaEFOV2UxdXhzUlMyTm5DQ2tkK2M3S2FaNTFDN25P?= =?utf-8?B?WGZhQVczb2c5WTFkYy9tSzBwUnE3bDlvWTZ6NWNXa1hjRjVIQnRRa1pJL3lV?= =?utf-8?B?L1JMdjVJaS9mWmI1R2ZSRTJiZ0xvdHFtN2VzdlBoS0YxZzJLMWhNbElDcldK?= =?utf-8?B?dWNYWDY0c0Zaa0RqcnlOREpUZXUvditFSStJSGViN29oWU1xcG1VZmJ0R0h2?= =?utf-8?B?bHZYak1mNVA3ZlJsNDJ3ekhTWDFEOGxxcDdiVVEwMEE2dlpyOFZ5T1B0dE5P?= =?utf-8?Q?SB4B90UtaCKtIGV0MvmORlP+geJ5d8cpeFS5q?= X-OriginatorOrg: oss.nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 9d57e3d4-cf6a-46c1-a00a-08dee100aacd X-MS-Exchange-CrossTenant-AuthSource: GV2PR04MB11799.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Jul 2026 17:03:31.7133 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: TM5EH/XJOZpWzChNpOUSO9YbuMIb4/c+vnwztg56RHcQS0iVUGudSy9rI2wjONU59D4ldFAfwHdVo1lWwcea1Xdavx/JO49q4HJb6U+Y1d3ZRJbOfbTfMNikKTiQyY71 X-MS-Exchange-Transport-CrossTenantHeadersStamped: PA1PR04MB10228 From: Frank Li The control field in a DMA link list entry must be updated as the final step because it includes the CB bit, which indicates whether the entry is ready. Add dma_wmb() to ensure the correct memory write ordering. Currently the driver does not update DMA link entries while the DMA is running, so no visible failure occurs. However, fixing the ordering now prepares the driver for supporting link entry updates during DMA operation. Tested-by: Koichiro Den Tested-By: Devendra Verma Signed-off-by: Frank Li --- change in v4 - add Koichiro's tags --- drivers/dma/dw-edma/dw-edma-v0-core.c | 10 ++++++---- drivers/dma/dw-edma/dw-hdma-v0-core.c | 10 ++++++---- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/drivers/dma/dw-edma/dw-edma-v0-core.c b/drivers/dma/dw-edma/dw= -edma-v0-core.c index cfdd6463252e6..ee5c3c317557b 100644 --- a/drivers/dma/dw-edma/dw-edma-v0-core.c +++ b/drivers/dma/dw-edma/dw-edma-v0-core.c @@ -284,17 +284,18 @@ static void dw_edma_v0_write_ll_data(struct dw_edma_c= hunk *chunk, int i, if (chunk->chan->dw->chip->flags & DW_EDMA_CHIP_LOCAL) { struct dw_edma_v0_lli *lli =3D chunk->ll_region.vaddr.mem + ofs; =20 - lli->control =3D control; lli->transfer_size =3D size; lli->sar.reg =3D sar; lli->dar.reg =3D dar; + dma_wmb(); + lli->control =3D control; } else { struct dw_edma_v0_lli __iomem *lli =3D chunk->ll_region.vaddr.io + ofs; =20 - writel(control, &lli->control); writel(size, &lli->transfer_size); writeq(sar, &lli->sar.reg); writeq(dar, &lli->dar.reg); + writel(control, &lli->control); } } =20 @@ -306,13 +307,14 @@ static void dw_edma_v0_write_ll_link(struct dw_edma_c= hunk *chunk, if (chunk->chan->dw->chip->flags & DW_EDMA_CHIP_LOCAL) { struct dw_edma_v0_llp *llp =3D chunk->ll_region.vaddr.mem + ofs; =20 - llp->control =3D control; llp->llp.reg =3D pointer; + dma_wmb(); + llp->control =3D control; } else { struct dw_edma_v0_llp __iomem *llp =3D chunk->ll_region.vaddr.io + ofs; =20 - writel(control, &llp->control); writeq(pointer, &llp->llp.reg); + writel(control, &llp->control); } } =20 diff --git a/drivers/dma/dw-edma/dw-hdma-v0-core.c b/drivers/dma/dw-edma/dw= -hdma-v0-core.c index 632abb8b481cf..1201f1ab5f359 100644 --- a/drivers/dma/dw-edma/dw-hdma-v0-core.c +++ b/drivers/dma/dw-edma/dw-hdma-v0-core.c @@ -160,17 +160,18 @@ static void dw_hdma_v0_write_ll_data(struct dw_edma_c= hunk *chunk, int i, if (chunk->chan->dw->chip->flags & DW_EDMA_CHIP_LOCAL) { struct dw_hdma_v0_lli *lli =3D chunk->ll_region.vaddr.mem + ofs; =20 - lli->control =3D control; lli->transfer_size =3D size; lli->sar.reg =3D sar; lli->dar.reg =3D dar; + dma_wmb(); + lli->control =3D control; } else { struct dw_hdma_v0_lli __iomem *lli =3D chunk->ll_region.vaddr.io + ofs; =20 - writel(control, &lli->control); writel(size, &lli->transfer_size); writeq(sar, &lli->sar.reg); writeq(dar, &lli->dar.reg); + writel(control, &lli->control); } } =20 @@ -182,13 +183,14 @@ static void dw_hdma_v0_write_ll_link(struct dw_edma_c= hunk *chunk, if (chunk->chan->dw->chip->flags & DW_EDMA_CHIP_LOCAL) { struct dw_hdma_v0_llp *llp =3D chunk->ll_region.vaddr.mem + ofs; =20 - llp->control =3D control; llp->llp.reg =3D pointer; + dma_wmb(); + llp->control =3D control; } else { struct dw_hdma_v0_llp __iomem *llp =3D chunk->ll_region.vaddr.io + ofs; =20 - writel(control, &llp->control); writeq(pointer, &llp->llp.reg); + writel(control, &llp->control); } } =20 --=20 2.43.0 From nobody Sat Jul 25 21:30:55 2026 Received: from OSPPR02CU001.outbound.protection.outlook.com (mail-norwayeastazon11013007.outbound.protection.outlook.com [40.107.159.7]) (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 95A39329C48; Mon, 13 Jul 2026 17:03:39 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.159.7 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783962221; cv=fail; b=GBTnR5e2m6gvU973guSxdgw3rS3qjUV+Qjdwnjm+sSOF9YSfcQVDnRuJKthdgPnk4dTgn1ibzJ26TgN8xkc165svmypa0hQgjFpj1jv8MtOLVxT4Cc9b+JV7kAjmMkFwT2HgKliB+ngohe7tysYIslrZR5CfYzxAdsm0ZJUQ874= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783962221; c=relaxed/simple; bh=sf8qXVycnQYyQIc2Un9T97ggXFYss+FKV+ZWx6KLHbo=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=OHbP5krA33ZpCafsSusTJy0IssPlTEYkSanduMhHve2LaE47Q3uVg0D/XxzIxHLU3akDh03kBAUUc1FvSOlJtIi8P6YYfxXUWD3E02bys4dq2HKvb6Jqcpd/dDpDKhvpeX3AQqD4jJEkECxdaSVrCk5mfV3XlUqLfb7+V1dpLB4= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=oss.nxp.com; spf=pass smtp.mailfrom=oss.nxp.com; dkim=pass (2048-bit key) header.d=NXP1.onmicrosoft.com header.i=@NXP1.onmicrosoft.com header.b=q+7TerUn; arc=fail smtp.client-ip=40.107.159.7 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=oss.nxp.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.nxp.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=NXP1.onmicrosoft.com header.i=@NXP1.onmicrosoft.com header.b="q+7TerUn" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=rSMZUjYXOcFg+dT3ofCo5RU+ti4P+E0g1+9TNBCqFe8yO957O1NaG4ZtdYn6XYiU1Vs0noGOuQz1fnp4JfG85NK0xMLVRn3qY98IBRbsNB++nrC5+Fj2TP0iDmML8dJ43wnQen+2nktcRnFvO63uKOyaB6IfF2dEBEo0aREw8mchX+1DDLtMZ8RIvNQGh+gZMbjtKNSDP7RoDUJ/HEOocmIa7DC2hMylkOl1siRWHYHrvpM21ghHnx3yJ6cT6BQCE2BHj+hY9juBRrz8AlTdfq55zxF17wQHyxf0RLOdN8K2j30saHNzU8r274ZsNWgtHgusem5c76XKMHDExQK+SQ== 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=euXAQn19MRdR6uOmD5CK79TK7xWnNDXB7KM87jTH0HE=; b=vbdA8TelwXBt6Wi8Et9zw7fnEapePbFnKU3UB12Dv9Wk+l60ENMAW+tZy2eWcclrlfbjF5LcwNYwBH27+FgmZR27EPlHY6cedPvVDJjGjxZAo4l8D4+YcTD/aZ83Ta/OpGZ4dS0bK/wwcn1tqWyydz6r3oZVtAJgbdvHrPq07QfG0uilTr+CDQ9JR38clJgp+WkTr1KJtsOrcN5Cps6g3DydwbuQ2O2X6H5QlLa0OsGRTDapkOAf68jNjvP2VF8n0GNtEMp0ZpUxwnzir/wxwbQsbE75q6lwl3QUe63TubjGrIbLxgw0hcFPgyvwbFjdasFxGtXSMWwyxopm8O019g== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oss.nxp.com; dmarc=pass action=none header.from=oss.nxp.com; dkim=pass header.d=oss.nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=NXP1.onmicrosoft.com; s=selector1-NXP1-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=euXAQn19MRdR6uOmD5CK79TK7xWnNDXB7KM87jTH0HE=; b=q+7TerUnbcAd+nlJn1bW1CfAyc6f6RGn6EwJh6DahGFtmDZlm1w1VPKvSKrVIXcHHm0dbLf9MKhtYe2JSuA1hR/sCAzpl6umnIZGyl+OojYQMcaPW6g4f8Cjsu13nUBvlyAl2Zx2pWw/ZWigoWERNYnQwTUrCFK+3AarBTo+tEMmRyZOjV2/3lYXaIibTHPkagfYymxPIC/0tR3/f+BSwkjKWe/zWPwSoFcIYnSm4LnT3q/J9TvZ6X8CkD2vrKD1CRS3uruDLJEN3wsCwMfpwTrwayY8BI6Sknk47ogquTzUWoOgD80TZMr1D794pqK1R3nzjAngRZGmvpnCP7IzYA== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=oss.nxp.com; Received: from GV2PR04MB11799.eurprd04.prod.outlook.com (2603:10a6:150:2cf::9) by PA1PR04MB10228.eurprd04.prod.outlook.com (2603:10a6:102:454::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.202.18; Mon, 13 Jul 2026 17:03:36 +0000 Received: from GV2PR04MB11799.eurprd04.prod.outlook.com ([fe80::2146:83a2:5329:b7c]) by GV2PR04MB11799.eurprd04.prod.outlook.com ([fe80::2146:83a2:5329:b7c%6]) with mapi id 15.21.0181.019; Mon, 13 Jul 2026 17:03:36 +0000 From: Frank.Li@oss.nxp.com Date: Mon, 13 Jul 2026 13:03:20 -0400 Subject: [PATCH v7 02/10] dmaengine: dw-edma: Add xfer_sz field to struct dw_edma_chunk Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260713-edma_ll-v7-2-6fb7498c901e@nxp.com> References: <20260713-edma_ll-v7-0-6fb7498c901e@nxp.com> In-Reply-To: <20260713-edma_ll-v7-0-6fb7498c901e@nxp.com> To: Manivannan Sadhasivam , Vinod Koul , Gustavo Pimentel , Kees Cook , "Gustavo A. R. Silva" , Manivannan Sadhasivam , =?utf-8?q?Krzysztof_Wilczy=C5=84ski?= , Kishon Vijay Abraham I , Bjorn Helgaas , Christoph Hellwig , Niklas Cassel Cc: dmaengine@vger.kernel.org, linux-kernel@vger.kernel.org, linux-hardening@vger.kernel.org, linux-pci@vger.kernel.org, linux-nvme@lists.infradead.org, Koichiro Den , imx@lists.linux.dev, "Verma, Devendra" , Frank Li , Devendra Verma X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1783962202; l=1817; i=Frank.Li@nxp.com; s=20240130; h=from:subject:message-id; bh=aTxVcxg+WLW+ex4KKcOS3TIGtND9b5sRMxkYi3Csci0=; b=+8FJcyGynqAm4eLIBOtFc1VWEis18BgeIlsohq4/VsgZK60Rr5SqHDnPRzEoVnUsNV1Adj0s6 uirLd250UwCB3v3RjOhL+OHgwzgmSXlw3MrOo1HBru8Ij7iBruwk3UP X-Developer-Key: i=Frank.Li@nxp.com; a=ed25519; pk=I0L1sDUfPxpAkRvPKy7MdauTuSENRq+DnA+G4qcS94Q= X-ClientProxiedBy: SA0PR11CA0066.namprd11.prod.outlook.com (2603:10b6:806:d2::11) To GV2PR04MB11799.eurprd04.prod.outlook.com (2603:10a6:150:2cf::9) 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: GV2PR04MB11799:EE_|PA1PR04MB10228:EE_ X-MS-Office365-Filtering-Correlation-Id: f000de2a-61b7-4a77-e515-08dee100ada3 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|23010399003|7416014|376014|366016|19092799006|1800799024|921020|18002099003|22082099003|11063799006|56012099006; X-Microsoft-Antispam-Message-Info: YRKu9mNK29JnhEY/ZUuFIShym4mMInRqWQqJK/CtFeeSEaDrjQ0Vbq3+vHB5WkemA79SgjZNEY2aV359pZLtt1YCfnE+OUar+dfQG2bm25xjEV4wWEdl8dg/l/CubTXGDQLNDvYU69M3Os3wQT9PE3FWoSzdWgR8OvzMtT4OJdAl7IqV2qgQ3Le4Gp17Smgpy+O6EQMT0v+ksDNgK580kH0XCxcxLBseRpOUvULkmoAhQy/cr++UjCng7qEhFhI8psBzmBIqd+kVe5sbUQ5ukgZqqSf/b4rdkNXqiwy19PutGbirnACXl6zCm41Ule8q9DudoinuBK9WH/REfpGisQrFKP52c6AD9HPzQcmswwzRNwwik5Ind2RDEiVLvnowQBu7pGgwOiAIVCsWFREt7DPinyCqiAsNyuFnu/o8///4WXqOCfP2vEO4UcpaBEfvoZlxZ+7gEMiWhhifCxsQ3NNL/krPDkjcaVc4+mUGBfe3W4v4smD7bJsyds+OZF3HbxxLs1CmuicH+MElakv1ObnDeoAM19JwJgDUo0xi8anK2ZoE6/G+z8Id4tUuDBto/54qJX2YOyv+bF4FVF5DAS840E3duWaaBsnjvSwJWcl056+cfTgWi7HbRlpehlHp9D26gN+xf2ChfjV2F9WHlPhR96ZtBV+etNrHxEzHHtcD8DFCklMwDbkCL/M0fA3B5VW4s37qJEPDALAbDl0elw== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:GV2PR04MB11799.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(23010399003)(7416014)(376014)(366016)(19092799006)(1800799024)(921020)(18002099003)(22082099003)(11063799006)(56012099006);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?a1FYM05rdExHZXYrRVo1UkVJWFNwMVVzb0JkMmhGb0pMUnRjWUFMTGRGTmh3?= =?utf-8?B?bU05eEFBbnArSzRJM0hyVUxPWkhWeGlONjdFVkxLNXVZaWx0aGJmRWU5dG9K?= =?utf-8?B?QU0xRnlxMmxqOWVRR3gycVR5dHB4Z1AvYThpK2tYTXdoSHN6WmxrVWREUjdI?= =?utf-8?B?dHN0dExyYytiVy92bFFlZUQyU1RIcFpvbFFnVkNKVUpISjkzclZjaDErcUEw?= =?utf-8?B?U1VHclk2SGZ1K3I4RXd5UVgrcUFXRm9CbDZwenVMRG5Vc0l4ZUFpWmlQR3Q3?= =?utf-8?B?NTlZTVI5YW0xcVBmbzRpN2U4elJjak5INjErTmhvTG9oVTNsRmhBVG4wNHg5?= =?utf-8?B?bjNtdlRQVkptUTZoZ3FzQy9GM0FQeUlzalo2Y3hGaFVrR2ZDeHgwNm50bWUz?= =?utf-8?B?UlgxSnRvQjhmRitGNTlacFB2bjE1S20razJkZ3k1NTRxMDJTMHZzVDE4RE12?= =?utf-8?B?MmNjMHFlM2cvSGlMSkJTT255UTRUcWUvdE1ibnBRdEZ2ZDJnWEhON1l0T3Vz?= =?utf-8?B?QXk3SVY2bFNkRTJmUDQ1S1g4T1hDM2NNcTVPRFJ2YnBEcDF1dW02aHZkZUxw?= =?utf-8?B?b2d5ZW9DUklpRGVteHJNWmVFR2RxdTF3ZWwrSURpcFlUeTIxSHVmMWQyN2R2?= =?utf-8?B?TW1sZWVrVkpNNTY0VTBhaVJZVTRjOVF2MU41ZmtrV1VETFhzMnpaUEZrcWti?= =?utf-8?B?S1VjZ3M4R1M4UWN3azhjMlpQc1A1NzNGVDFVMENWb3loSW04S21JY2J5ekh3?= =?utf-8?B?ZGVjYU9mZ3Z4Mzd6Vnh6aWdPYmFnRkFvYWgybnkyRkVscjgzbUhhdVdxUXF3?= =?utf-8?B?QWs4VDVJcFFnRlRLcHhuVDd3U01ZVDd4OWVKdjgrN2w3M3pzR091UzlYbUt1?= =?utf-8?B?OWZ1TFQvQTlBbDZaYmN5UGVXYmw3Ky9lcFJQbnFvemxhUVhEZGJTMTRRSGpI?= =?utf-8?B?dTdvS3BWdC94UE8rMDRCTlhDVXk1YWRWOXBlQ1BpUFkxeGJvb0RLZnBMbkN0?= =?utf-8?B?UVprREE2Uit6aUhuOER0NkVYUmp4OEJkTldIR2tMY3RRYXROUXhsUWxYOUhq?= =?utf-8?B?NGFMV0kxYkVYWmNKd0kyY0w1V2p4UlRQZmxEZWtFdWFPdk04bEFMcDJWM3pY?= =?utf-8?B?RzlObGhsejdnQlRka1FabFYrQ090amN6U1gwenlUckdEYi9Wd2NyTk51aCs0?= =?utf-8?B?OWUxa05mMGZjdU5yWnpXY3E1NER3U0Y5cjJGM20wZWRMY1FsTVA2eWlIdHdL?= =?utf-8?B?c0ZTWWwvSWpvU0gyeUk3SVFhZ0xkWGJzWmdScFNZNEFPK2ZrTUpERHlCRXB3?= =?utf-8?B?YWFha3EwaHR1amdyODNBSXJKOHNWWVV2Z0M5V3V6b2FyaDBNY2M3UWJzcklH?= =?utf-8?B?MFdhaUxhNFdGRFFpNzQ0WXhoVW15TTZmMGI4dW84a3ZXanlTU0NkUTVnZjRT?= =?utf-8?B?OGRwUUlYZ1VoVGhrbGNhWTNZd3AvbS95NFEycUg4UFE3N2hDQUJYUnRicXZq?= =?utf-8?B?S3gwSXBZbmF2QkNSUFgzUStWc2t5NFkrcjJjMi9kSVJiM3NuVC9Kb3VvRzhv?= =?utf-8?B?Y3pOcVVxUUthWEY2WTRoZ05Tak82T2U1aldMTUpuTWVWaFpnYStIeEQvWlFU?= =?utf-8?B?cjI2eU1ORTRyVnNwNC9Ta0h0Tnhic1grbzhyQmUwZWlQMmQwYkgxT2gzc1I4?= =?utf-8?B?NVNhYmEvdzVOL2tqUGM1RDdjaFF6R0dFMmhzY2k0Y0NFWjgyV1VmSnpNZ1FW?= =?utf-8?B?OW1OaVdkNEVURC9wVWtTL1NvSmpvRGFWOGU3dG5KdXpiSWUwUWhxMUh0NGZH?= =?utf-8?B?OFlHZE1lVmEwd3lvSmZLblNJdHJ3YlJEK0xaaEZTSlFMUElWbmhtUlltak5X?= =?utf-8?B?MTgyVHNGUDJXZEpBVU0xbmdNZXZUQk8vVXFIWlpPTGNIeUoxS0VBdnB5VDVW?= =?utf-8?B?VXkxQi9HOHNzemtKby9GU0dlaTAxMEJsdEFmUVpjOXYyMnV2QVU1OVNNY3p0?= =?utf-8?B?S2VqTlBpVmpCa2gzeVhWbk9LVEEzRFQ0bERDZWVsKzVzdWZ5MDhuSlJHNlkr?= =?utf-8?B?b0VCckZmQTdXZWNVOUtSV0FNQm1BUXRXTG81dDVuTTRVZVVicW54dzJLM3lT?= =?utf-8?B?SG5VbUhtMDlCQ1ZGTUlXenM2QlVXT2wxd1IzRzY4a21waUVZbXJHMEdrTkpY?= =?utf-8?B?VFZaaG03eWZtdDVobDZBTlhqa1VlQmU3ZVRpMHZpWjJjK2VNRWZjWHhkYmhL?= =?utf-8?B?dzVzT09NeWRoamNvR0Q1RDFlNnYvdkRGdnFnTE5hWThTTHAwQkpseXVWeGVv?= =?utf-8?B?K2QyRGRRNFhWaGFiZkhRL2RLSzZ4eUI5UkpBdUQ0R2pKUk1KUklEVTdncjVY?= =?utf-8?Q?hGetN5TDzMELTOEcMgLR3081W32spBT98obiK?= X-OriginatorOrg: oss.nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: f000de2a-61b7-4a77-e515-08dee100ada3 X-MS-Exchange-CrossTenant-AuthSource: GV2PR04MB11799.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Jul 2026 17:03:36.4399 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: jANij/Egmwf2k7uVbHwNzxKisS7nf18SMO6JUP4uH2rD1RKGSmVr+4os8uqIjAK3nuASqZVnztbBP8IVDa14bE8W3Iap1KavIj1BzbgB70tMSEEXgOelERAKUZc2g6g4 X-MS-Exchange-Transport-CrossTenantHeadersStamped: PA1PR04MB10228 From: Frank Li Reusing ll_region.sz as the transfer size is misleading because ll_region.sz represents the memory size of the EDMA link list, not the amount of data to be transferred. Add a new xfer_sz field to explicitly indicate the total transfer size of a chunk. Tested-by: Koichiro Den Tested-By: Devendra Verma Signed-off-by: Frank Li --- Change in v4 - collect Koichiro tag --- drivers/dma/dw-edma/dw-edma-core.c | 4 ++-- drivers/dma/dw-edma/dw-edma-core.h | 1 + 2 files changed, 3 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 1fec1b52e3d47..53469c8c8b82e 100644 --- a/drivers/dma/dw-edma/dw-edma-core.c +++ b/drivers/dma/dw-edma/dw-edma-core.c @@ -192,7 +192,7 @@ static int dw_edma_start_transfer(struct dw_edma_chan *= chan) return 0; =20 dw_edma_core_start(dw, child, !desc->xfer_sz); - desc->xfer_sz +=3D child->ll_region.sz; + desc->xfer_sz +=3D child->xfer_sz; dw_edma_free_burst(child); list_del(&child->list); kfree(child); @@ -527,7 +527,7 @@ dw_edma_device_transfer(struct dw_edma_transfer *xfer, else if (xfer->type =3D=3D EDMA_XFER_INTERLEAVED) burst->sz =3D xfer->xfer.il->sgl[i % fsz].size; =20 - chunk->ll_region.sz +=3D burst->sz; + chunk->xfer_sz +=3D burst->sz; desc->alloc_sz +=3D burst->sz; =20 if (dir =3D=3D DMA_DEV_TO_MEM) { diff --git a/drivers/dma/dw-edma/dw-edma-core.h b/drivers/dma/dw-edma/dw-ed= ma-core.h index 6474cacf71953..db5f45bf048c3 100644 --- a/drivers/dma/dw-edma/dw-edma-core.h +++ b/drivers/dma/dw-edma/dw-edma-core.h @@ -57,6 +57,7 @@ struct dw_edma_chunk { u32 bursts_alloc; =20 u8 cb; + u32 xfer_sz; struct dw_edma_region ll_region; /* Linked list */ }; =20 --=20 2.43.0 From nobody Sat Jul 25 21:30:55 2026 Received: from OSPPR02CU001.outbound.protection.outlook.com (mail-norwayeastazon11013011.outbound.protection.outlook.com [40.107.159.11]) (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 CA1AB33A9FF; Mon, 13 Jul 2026 17:03:43 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.159.11 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783962225; cv=fail; b=BzZRweejcxjWDlXUR4uqDrqYDh1fxTmJPOQ4/8CEEwtGzpQVrbt9vSnq2GeyOnML7tnN9EG4DOn+tJjEWIl7rFcEo41dWrN9pGKNriyCAFdETb0+N2JM5PPndAmGmxvFNHk5Ig3Ei1zyLP4XJShQLFW+pmIyAnkxRUqQD4Seun0= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783962225; c=relaxed/simple; bh=cpz8GRuPExru71006rn59M+A7p0//p6E6JrZ0/eoEas=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=QDOoDoDFdjLxT9mTCaXz0KnuFB2k5cYCoKJf6HU7PdguVuBATkyP8OVk4d4sb7kYDh887jcKawsM75B16Okk23Go3qAN3hwwilmF74GErrBs04OGh7cBS0FYaBBxuCO7Q8o0n5LVxB8Nn8vva5uUuveCRjIadXDxDzFFG/kQ4ik= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=oss.nxp.com; spf=pass smtp.mailfrom=oss.nxp.com; dkim=pass (2048-bit key) header.d=NXP1.onmicrosoft.com header.i=@NXP1.onmicrosoft.com header.b=oyMXuKmQ; arc=fail smtp.client-ip=40.107.159.11 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=oss.nxp.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.nxp.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=NXP1.onmicrosoft.com header.i=@NXP1.onmicrosoft.com header.b="oyMXuKmQ" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=I+lJRdfR/BwAJGl8NJ3WlO4ryAPs8ObGYdCKf5Hk/D+nR+WablBza7iLEJm08i7asbZFsxFWdqPvtET3FG8ppTBS6dx8wxygHYI/oknNIt3Gke3Y2nPKP9s/s6ubAvd2ztfJ82CVNT0zti8VHC2yxDQefkvHa1iXtKjz9pm0HjkbglHfiwd0589JdtER+j1rO8sjgsTZBgghxvRdVxQVZI5Rwd0ChjRFHG1YlLoSZe+ZUpxgeeDb/1mY+aoyjIW5c6QP1oM+vckxN++aQwsPqEWXzqiMQ4GHDhRweTzPNyKrSst7baafJ896q4Qro7LygTIPJcX0/Xd95CuQmEpUAQ== 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=4DzDtQseMZuX5sKjUD/UA/dKyLglmBLXWmetx1QwKEE=; b=DSKwAPokojKrzykF6+Tv3Qlyx1uwFJB6127Ppjghp9K3B9tr7e0GiLMCpcVzzrnjkht9fwVR12JSYknGQIVzGkCgE65nzG+Hnb4kDDYRaZeo//UtTP5olF+tCxFB86fwHKoH4wlDRVNotywxcJcy0r9zG6/OLyLb2+E4ih60hsAdTS3fL2+Z396T1eDQNQpLFB/3l0spqHa5rL2FET5x1kgEDd+S2YQ84t6+Q3bt4efp84SD2gcZp0y646hc6VLLLmRvq/P1mkw4M65oO/N3Z8InYcoA+vx7JyhYxzoX3Vz6cJt/rTMnT2Ssc5HPekGH55JNkQbGJIwXUMa57Yf0Og== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oss.nxp.com; dmarc=pass action=none header.from=oss.nxp.com; dkim=pass header.d=oss.nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=NXP1.onmicrosoft.com; s=selector1-NXP1-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=4DzDtQseMZuX5sKjUD/UA/dKyLglmBLXWmetx1QwKEE=; b=oyMXuKmQJe2v+7ADTPse2Oj8K4GIzIzhFTrNKKGydniSfx7Z6d2WcbtthWZD2UkSTCdHOqb90EQN+ddKbj+ZPCsD6WLzrSk4opiMkVahUO1x5L8mBlPeC/b/A23YpUPgCoL0nvhVC04hNsuu97ZMYrrfU0Ft9gKXx5i/eBtEE54IolAwSGUEq5dTVF5uPj8xvT6b9gHvHIPKFirPbZ31i7GZfF+fCRvjcEixQovDuZgLrAJxSIKO+cmyDg0LOrEz9bVe4WpKbVi6FjXFiKCSFTH4IlDZUcwtS8r6Y8GgupErxFdb0WpANjI3xaN4UndiMx5LX8N6VhEUQFQ3QA1DWg== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=oss.nxp.com; Received: from GV2PR04MB11799.eurprd04.prod.outlook.com (2603:10a6:150:2cf::9) by PA1PR04MB10228.eurprd04.prod.outlook.com (2603:10a6:102:454::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.202.18; Mon, 13 Jul 2026 17:03:41 +0000 Received: from GV2PR04MB11799.eurprd04.prod.outlook.com ([fe80::2146:83a2:5329:b7c]) by GV2PR04MB11799.eurprd04.prod.outlook.com ([fe80::2146:83a2:5329:b7c%6]) with mapi id 15.21.0181.019; Mon, 13 Jul 2026 17:03:40 +0000 From: Frank.Li@oss.nxp.com Date: Mon, 13 Jul 2026 13:03:21 -0400 Subject: [PATCH v7 03/10] dmaengine: dw-edma: Move ll_region from struct dw_edma_chunk to struct dw_edma_chan Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260713-edma_ll-v7-3-6fb7498c901e@nxp.com> References: <20260713-edma_ll-v7-0-6fb7498c901e@nxp.com> In-Reply-To: <20260713-edma_ll-v7-0-6fb7498c901e@nxp.com> To: Manivannan Sadhasivam , Vinod Koul , Gustavo Pimentel , Kees Cook , "Gustavo A. R. Silva" , Manivannan Sadhasivam , =?utf-8?q?Krzysztof_Wilczy=C5=84ski?= , Kishon Vijay Abraham I , Bjorn Helgaas , Christoph Hellwig , Niklas Cassel Cc: dmaengine@vger.kernel.org, linux-kernel@vger.kernel.org, linux-hardening@vger.kernel.org, linux-pci@vger.kernel.org, linux-nvme@lists.infradead.org, Koichiro Den , imx@lists.linux.dev, "Verma, Devendra" , Frank Li , Devendra Verma X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1783962202; l=9193; i=Frank.Li@nxp.com; s=20240130; h=from:subject:message-id; bh=Ws1k9Bkmc89qdSWIsue5sq1t1ypebd+jQq6YLRGMxhY=; b=7pa9pM5qdsjpq3nzgDR7pZ6LrNVhPq3evnVaTELhA67j7gpXyN+gMYgk6Krv3U3jcUeBBtgVu LFq2KluOWN+AapQq4oYhfPAtmAAY5900m0WSA4dQp69H5LoMuWWNmh3 X-Developer-Key: i=Frank.Li@nxp.com; a=ed25519; pk=I0L1sDUfPxpAkRvPKy7MdauTuSENRq+DnA+G4qcS94Q= X-ClientProxiedBy: SA1P222CA0012.NAMP222.PROD.OUTLOOK.COM (2603:10b6:806:22c::16) To GV2PR04MB11799.eurprd04.prod.outlook.com (2603:10a6:150:2cf::9) 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: GV2PR04MB11799:EE_|PA1PR04MB10228:EE_ X-MS-Office365-Filtering-Correlation-Id: 8aced37f-372c-4991-2bc7-08dee100b03c X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|23010399003|7416014|376014|366016|19092799006|1800799024|921020|18002099003|22082099003|11063799006|56012099006; X-Microsoft-Antispam-Message-Info: ywldRhHbNCDcTDRKPNjKHwOwFvH8bvqIW+iIVwnWsNCZLjh7PBX/0oyRNpvE0oUdL8znKsG78Yym29369CVXxT5Mrh3X/Ir5/krIKPgAN6Bg9eFzQVgozFdjezH15H3DL7vnCRHTYDinm3VILqohwS53q56z+Zz5p0tRZSr9Oy+9GuV/jPYDZJnM6b0phHP9ldSmED61spN5T+iXu0GgYd9cbxOt8I1ipO5vIgy9nry8AclY105XZSQrtP3b4Ewk1iMthnFTvcwI3Qok6lPBVA7b39djyVGJatET7ObsEFQEmCmT3ahWXDiPZK2ELndc21d5J/XgQevshLEYsfbfb8mMhAbtXHpoYMUKMvjn5mBKE1O0mSNm+McAuXu6HZvYSsVDslHZoRrJVtVAI2fZcwuhMIJNlPc/wlQkvHtOkU2kbpic7RUTG0PAJLbTyqN6jWnLnFP3CO4c+y1zO6mKLU3txtoCAMw5u/SmEuXdTbKtTkcI8mxaNjNjs2YnDaF96mmUWCbzXycB/4XXAr8ZoXudUeXY7pzD+1u+LbX6GrdYExogn2RTwJzZz1XuDX7dyQNfdGmPcBlKJNbz7lkAUJ2/qdiMgLIkTTUgz6PrxpTeCmF3UPIB87mNqJWf2CCPbRWKOBTacwr7XV+IomHo7XZkl/F1VA/hebdZsc6o9DIgkFWPoPptMBQv2kwNFYe9QAHZ3V2LdWscQuPSgWiR4Q== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:GV2PR04MB11799.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(23010399003)(7416014)(376014)(366016)(19092799006)(1800799024)(921020)(18002099003)(22082099003)(11063799006)(56012099006);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?bTZXVmE2UzEyYXVCR1ZlY20rRjB6K1d0bnFEMTN6MWhxYjVQV25TaDZjU0FY?= =?utf-8?B?Q0xBZklxNUpTK2VuVXVISjZOSnJxdlk1REZJcXFQcmxFd0pZbU91ME4xYlN0?= =?utf-8?B?aWJPK3o5NCs3cjQ5dnpaZzFEVFdMeHE1L0M1OXJRSTF6VjlwL1lKVUtoY1ds?= =?utf-8?B?WkRrbCtOWFZYYXNoMUJGS1VVb1prSkw3cEtDcDhoOUVCQWQyNUhxME5OK2FD?= =?utf-8?B?Q040SG9RSWtHcEpxU1lxTUJ3cFlIM2gwZXRGK1dtelhnc3R3NzhsZW5hbVNE?= =?utf-8?B?TkpnY1JDL1FHM0l5SVViY0tnWWRPdkg3WllxWFlabGtzSEVqbzlhWDF4TjVt?= =?utf-8?B?T1IyU3dFb0RRMy96ZG42NC8zV2FZZmpNLzVGeUVQcHJ1bFZqQWxVRWYrN0Jp?= =?utf-8?B?NURJcnNKWlFUakZxUDdqQ0ZNZXV5RmtSYTNwQkNNY3cyM3dzaWw3eDNKTmNs?= =?utf-8?B?N2w0MU1oc3R4R2xNUDJDdExZQUc3VWNVRnZGM2JEaCtkcDhvWGZvcU9QOG1Z?= =?utf-8?B?K3M2RmRYYml5MjJKZWI3U1J3UGpILy9HZXFSQUNKbFVuM1FGdGVsTUxWbEdP?= =?utf-8?B?ZVpDeStoQ1VDMUcwdlhFeUN4YXNGTlV3cElaWDhUZFMrRk11NWJOZXgwL3g1?= =?utf-8?B?SmNsZlF1bEF1NndCUWNYL1VaWGQyNTYyakdmdXE1dzROZFd0ZE9STjJVbmpv?= =?utf-8?B?T1N5ZDZCRXVydEVtbGdkRUMxWUdHU2NsSXFIS00rVUZEb0NpZVdhZ3BVVWNE?= =?utf-8?B?RzlyT2JZejFKUVU0UkY1QmVkV2pBdHhEK0krNjlmQlNGTnpjZ1VERStBQlht?= =?utf-8?B?U2ZzMC9hcDY5WWNZUHBOUkxOTExkZDEzSFNYN3ZyTngycXJLOGZCcVlkbXJM?= =?utf-8?B?amZJaWhCUTlrV3orZDJSRGhVWGpGQUc2OHY5ZUp5UmtORkZrK2E5Vi84b0Q1?= =?utf-8?B?MFl4L01SNkZ4bU5JQlY1RUFRSjZOdWljQzB4OXU1NHhONGk3T0RnNjNGR05a?= =?utf-8?B?Y1lhZTMxb1kvUUVSdEhxTlBNcUdFdWRaU0hLMG5FaDNVRFNxQW4rSFpRZWE5?= =?utf-8?B?Z2NaTGFxc3ZvNXlkOG13V2gyblYxNWI3QUlxbkpuWTZpSjM5U0R1Y0c3K0JJ?= =?utf-8?B?NWFENXhvS2MvWUN0L3dYOFExc0JhaGYzRzlyOUVoNGszV0RsT3pVWVp6OGxK?= =?utf-8?B?eHZBSEt0ckVDekxJdEFUNXVveWROL1pPSnlxVTBtN0FkeVpTZENqMFA3UTZn?= =?utf-8?B?V05KRVhJcVc0aitDclhQemNjL1BsSGwxTTljL3prcEpIMHg1NUcyNE56eVhh?= =?utf-8?B?cmp1OFgrU28vMU8wb3NZaWxIczkxendJd28rT1B5QmRYN294bW5SN2RSK1gx?= =?utf-8?B?cW9SNU80RFYrRHpjSi9EYzJYNTVmclgzd0l2MXZYY2trTHMvd2pjaXhvQzVa?= =?utf-8?B?VHNHcC82RkZYUDE1MUQvenFPYlgwdGNMU1dYSllBTUVXMzdZNzRUcktkTlBL?= =?utf-8?B?ZjBsS0NEOEs4a2pWRk9nbElBUlp5Z2NoRGFYNGtzQThPOHhsZis2UzZHSmp6?= =?utf-8?B?cWZuOERuMWM4Ny81UGZvazBEZ1pJUmNyYUxEY1Q0ZFNLQUE3RFFXSmxRaWVT?= =?utf-8?B?bjJZWCtPdmpidmJrN29zaFVDcmNkL0VrRU1TeS91TnV0a29IVW9ob21McGcr?= =?utf-8?B?YnpjRFRsS01SNnZQL1lnMEZvT2tzMjZyanpQSnJRZzdLbjVQbm9EVEtReXNY?= =?utf-8?B?c0dYa1MvOWZhK3hFK2ZMWTRSem5odFhaN3J1S2FwdzZTNlJoR2RCWlB3aXRh?= =?utf-8?B?S2IzcWdrTi9WMmVvMmx3ZzU1b2xIeUZPbEpieHExOUtxUERCT1d2ZXl4c21G?= =?utf-8?B?WEVDdXZGaGFOWG9HQVA2N0s4RzFzdGRqcytnd3g3UDAyNGc5Sm1HWmtaZHFt?= =?utf-8?B?bnBzeWlSb0tVMitVcW5iTjYvRk9ld1FUellGRkw3djlCR2NoL2JBV0grMUpr?= =?utf-8?B?eWRxbUt0d0w5V0s5cVY2Zm1iZEJGUis5QnRMck5IRDZiWlZHbGRZRVFGR1NQ?= =?utf-8?B?RGhlSzFwQURZRHlZVHF2cFlEdG9WWnNxSWVzOExXMWkrZE5mSHg0RkZwcmh4?= =?utf-8?B?Qm1YUmk1U0taejhUdmtJZ3VNaHRIakErYWRJN2xXUVR3QnQrOXE1UGIzWFpD?= =?utf-8?B?S0lEczVaWVo5SmkzbjQxclV4cWppZWlmbzZQaGgzaXA4SzdVaUIxSU9xdkd2?= =?utf-8?B?Uk5NWGk3MGIrKzRwVVNEMTEzZFBzU1p0SjUvditSendvQ0UrdURLb3JhdDRi?= =?utf-8?B?VURJL3A4b08yUEpqMkF4ZGx5TUtadzY5SWxJcFRuVzFPZFpleWpBWkkzQk40?= =?utf-8?Q?bZcQZt4ihhmNWOwanCke9rrU57nN+AWX+A6BL?= X-OriginatorOrg: oss.nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 8aced37f-372c-4991-2bc7-08dee100b03c X-MS-Exchange-CrossTenant-AuthSource: GV2PR04MB11799.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Jul 2026 17:03:40.9215 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 6s4emM+Ohc+vqBWyrc+OwLgVfADaP6O9iawvCDmWcID/6BvpsvKIR7ejAAzerWek8QHZ+7vtjKDPvTBgDzpvts5iQGXbBHbgr/HPg5LmBl275UfX5z7bFj4SGEBXtRAH X-MS-Exchange-Transport-CrossTenantHeadersStamped: PA1PR04MB10228 From: Frank Li ll_region is identical for all chunks belonging to the same DMA channel, so there is no need to copy it into each chunk. Move ll_region to struct dw_edma_chan to avoid redundant copies. Tested-by: Koichiro Den Tested-By: Devendra Verma Signed-off-by: Frank Li --- change in v4 - collect Koichiro tag --- drivers/dma/dw-edma/dw-edma-core.c | 15 ++++----------- drivers/dma/dw-edma/dw-edma-core.h | 2 +- drivers/dma/dw-edma/dw-edma-v0-core.c | 18 ++++++++++-------- drivers/dma/dw-edma/dw-hdma-v0-core.c | 18 ++++++++++-------- 4 files changed, 25 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 53469c8c8b82e..2652ad8e7a8f6 100644 --- a/drivers/dma/dw-edma/dw-edma-core.c +++ b/drivers/dma/dw-edma/dw-edma-core.c @@ -64,7 +64,6 @@ static struct dw_edma_burst *dw_edma_alloc_burst(struct d= w_edma_chunk *chunk) =20 static struct dw_edma_chunk *dw_edma_alloc_chunk(struct dw_edma_desc *desc) { - struct dw_edma_chip *chip =3D desc->chan->dw->chip; struct dw_edma_chan *chan =3D desc->chan; struct dw_edma_chunk *chunk; =20 @@ -81,13 +80,6 @@ static struct dw_edma_chunk *dw_edma_alloc_chunk(struct = dw_edma_desc *desc) * - Even chunks originate CB equal to 1 */ chunk->cb =3D !(desc->chunks_alloc % 2); - if (chan->dir =3D=3D EDMA_DIR_WRITE) { - chunk->ll_region.paddr =3D chip->ll_region_wr[chan->id].paddr; - chunk->ll_region.vaddr =3D chip->ll_region_wr[chan->id].vaddr; - } else { - chunk->ll_region.paddr =3D chip->ll_region_rd[chan->id].paddr; - chunk->ll_region.vaddr =3D chip->ll_region_rd[chan->id].vaddr; - } =20 if (desc->chunk) { /* Create and add new element into the linked list */ @@ -925,10 +917,11 @@ static int dw_edma_channel_setup(struct dw_edma *dw, = u32 wr_alloc, u32 rd_alloc) chan->status =3D EDMA_ST_IDLE; =20 if (chan->dir =3D=3D EDMA_DIR_WRITE) - chan->ll_max =3D (chip->ll_region_wr[chan->id].sz / EDMA_LL_SZ); + chan->ll_region =3D chip->ll_region_wr[chan->id]; else - chan->ll_max =3D (chip->ll_region_rd[chan->id].sz / EDMA_LL_SZ); - chan->ll_max -=3D 1; + chan->ll_region =3D chip->ll_region_rd[chan->id]; + + 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", str_write_read(chan->dir =3D=3D EDMA_DIR_WRITE), diff --git a/drivers/dma/dw-edma/dw-edma-core.h b/drivers/dma/dw-edma/dw-ed= ma-core.h index db5f45bf048c3..b96089baf0f9c 100644 --- a/drivers/dma/dw-edma/dw-edma-core.h +++ b/drivers/dma/dw-edma/dw-edma-core.h @@ -58,7 +58,6 @@ struct dw_edma_chunk { =20 u8 cb; u32 xfer_sz; - struct dw_edma_region ll_region; /* Linked list */ }; =20 struct dw_edma_desc { @@ -79,6 +78,7 @@ struct dw_edma_chan { enum dw_edma_dir dir; =20 u32 ll_max; + struct dw_edma_region ll_region; /* Linked list */ =20 struct msi_msg msi; =20 diff --git a/drivers/dma/dw-edma/dw-edma-v0-core.c b/drivers/dma/dw-edma/dw= -edma-v0-core.c index ee5c3c317557b..51e50f1fdcac4 100644 --- a/drivers/dma/dw-edma/dw-edma-v0-core.c +++ b/drivers/dma/dw-edma/dw-edma-v0-core.c @@ -280,9 +280,10 @@ static void dw_edma_v0_write_ll_data(struct dw_edma_ch= unk *chunk, int i, u32 control, u32 size, u64 sar, u64 dar) { ptrdiff_t ofs =3D i * sizeof(struct dw_edma_v0_lli); + struct dw_edma_chan *chan =3D chunk->chan; =20 if (chunk->chan->dw->chip->flags & DW_EDMA_CHIP_LOCAL) { - struct dw_edma_v0_lli *lli =3D chunk->ll_region.vaddr.mem + ofs; + struct dw_edma_v0_lli *lli =3D chan->ll_region.vaddr.mem + ofs; =20 lli->transfer_size =3D size; lli->sar.reg =3D sar; @@ -290,7 +291,7 @@ static void dw_edma_v0_write_ll_data(struct dw_edma_chu= nk *chunk, int i, dma_wmb(); lli->control =3D control; } else { - struct dw_edma_v0_lli __iomem *lli =3D chunk->ll_region.vaddr.io + ofs; + struct dw_edma_v0_lli __iomem *lli =3D chan->ll_region.vaddr.io + ofs; =20 writel(size, &lli->transfer_size); writeq(sar, &lli->sar.reg); @@ -303,15 +304,16 @@ static void dw_edma_v0_write_ll_link(struct dw_edma_c= hunk *chunk, int i, u32 control, u64 pointer) { ptrdiff_t ofs =3D i * sizeof(struct dw_edma_v0_lli); + struct dw_edma_chan *chan =3D chunk->chan; =20 if (chunk->chan->dw->chip->flags & DW_EDMA_CHIP_LOCAL) { - struct dw_edma_v0_llp *llp =3D chunk->ll_region.vaddr.mem + ofs; + struct dw_edma_v0_llp *llp =3D chan->ll_region.vaddr.mem + ofs; =20 llp->llp.reg =3D pointer; dma_wmb(); llp->control =3D control; } else { - struct dw_edma_v0_llp __iomem *llp =3D chunk->ll_region.vaddr.io + ofs; + struct dw_edma_v0_llp __iomem *llp =3D chan->ll_region.vaddr.io + ofs; =20 writeq(pointer, &llp->llp.reg); writel(control, &llp->control); @@ -345,7 +347,7 @@ static void dw_edma_v0_core_write_chunk(struct dw_edma_= chunk *chunk) if (!chunk->cb) control |=3D DW_EDMA_V0_CB; =20 - dw_edma_v0_write_ll_link(chunk, i, control, chunk->ll_region.paddr); + dw_edma_v0_write_ll_link(chunk, i, control, chan->ll_region.paddr); } =20 static void dw_edma_v0_sync_ll_data(struct dw_edma_chunk *chunk) @@ -359,7 +361,7 @@ static void dw_edma_v0_sync_ll_data(struct dw_edma_chun= k *chunk) * last MWr TLP is completed */ if (!(chunk->chan->dw->chip->flags & DW_EDMA_CHIP_LOCAL)) - readl(chunk->ll_region.vaddr.io); + readl(chunk->chan->ll_region.vaddr.io); } =20 static void dw_edma_v0_core_start(struct dw_edma_chunk *chunk, bool first) @@ -430,9 +432,9 @@ static void dw_edma_v0_core_start(struct dw_edma_chunk = *chunk, bool first) /* Linked list */ /* llp is not aligned on 64bit -> keep 32bit accesses */ SET_CH_32(dw, chan->dir, chan->id, llp.lsb, - lower_32_bits(chunk->ll_region.paddr)); + lower_32_bits(chan->ll_region.paddr)); SET_CH_32(dw, chan->dir, chan->id, llp.msb, - upper_32_bits(chunk->ll_region.paddr)); + upper_32_bits(chan->ll_region.paddr)); } =20 dw_edma_v0_sync_ll_data(chunk); diff --git a/drivers/dma/dw-edma/dw-hdma-v0-core.c b/drivers/dma/dw-edma/dw= -hdma-v0-core.c index 1201f1ab5f359..20089d57f8ab0 100644 --- a/drivers/dma/dw-edma/dw-hdma-v0-core.c +++ b/drivers/dma/dw-edma/dw-hdma-v0-core.c @@ -156,9 +156,10 @@ static void dw_hdma_v0_write_ll_data(struct dw_edma_ch= unk *chunk, int i, u32 control, u32 size, u64 sar, u64 dar) { ptrdiff_t ofs =3D i * sizeof(struct dw_hdma_v0_lli); + struct dw_edma_chan *chan =3D chunk->chan; =20 if (chunk->chan->dw->chip->flags & DW_EDMA_CHIP_LOCAL) { - struct dw_hdma_v0_lli *lli =3D chunk->ll_region.vaddr.mem + ofs; + struct dw_hdma_v0_lli *lli =3D chan->ll_region.vaddr.mem + ofs; =20 lli->transfer_size =3D size; lli->sar.reg =3D sar; @@ -166,7 +167,7 @@ static void dw_hdma_v0_write_ll_data(struct dw_edma_chu= nk *chunk, int i, dma_wmb(); lli->control =3D control; } else { - struct dw_hdma_v0_lli __iomem *lli =3D chunk->ll_region.vaddr.io + ofs; + struct dw_hdma_v0_lli __iomem *lli =3D chan->ll_region.vaddr.io + ofs; =20 writel(size, &lli->transfer_size); writeq(sar, &lli->sar.reg); @@ -179,15 +180,16 @@ static void dw_hdma_v0_write_ll_link(struct dw_edma_c= hunk *chunk, int i, u32 control, u64 pointer) { ptrdiff_t ofs =3D i * sizeof(struct dw_hdma_v0_lli); + struct dw_edma_chan *chan =3D chunk->chan; =20 if (chunk->chan->dw->chip->flags & DW_EDMA_CHIP_LOCAL) { - struct dw_hdma_v0_llp *llp =3D chunk->ll_region.vaddr.mem + ofs; + struct dw_hdma_v0_llp *llp =3D chan->ll_region.vaddr.mem + ofs; =20 llp->llp.reg =3D pointer; dma_wmb(); llp->control =3D control; } else { - struct dw_hdma_v0_llp __iomem *llp =3D chunk->ll_region.vaddr.io + ofs; + struct dw_hdma_v0_llp __iomem *llp =3D chan->ll_region.vaddr.io + ofs; =20 writeq(pointer, &llp->llp.reg); writel(control, &llp->control); @@ -210,7 +212,7 @@ static void dw_hdma_v0_core_write_chunk(struct dw_edma_= chunk *chunk) if (!chunk->cb) control |=3D DW_HDMA_V0_CB; =20 - dw_hdma_v0_write_ll_link(chunk, i, control, chunk->ll_region.paddr); + dw_hdma_v0_write_ll_link(chunk, i, control, chunk->chan->ll_region.paddr); } =20 static void dw_hdma_v0_sync_ll_data(struct dw_edma_chunk *chunk) @@ -224,7 +226,7 @@ static void dw_hdma_v0_sync_ll_data(struct dw_edma_chun= k *chunk) * last MWr TLP is completed */ if (!(chunk->chan->dw->chip->flags & DW_EDMA_CHIP_LOCAL)) - readl(chunk->ll_region.vaddr.io); + readl(chunk->chan->ll_region.vaddr.io); } =20 static void dw_hdma_v0_core_ll_start(struct dw_edma_chunk *chunk, bool fir= st) @@ -251,9 +253,9 @@ static void dw_hdma_v0_core_ll_start(struct dw_edma_chu= nk *chunk, bool first) /* Linked list */ /* llp is not aligned on 64bit -> keep 32bit accesses */ SET_CH_32(dw, chan->dir, chan->id, llp.lsb, - lower_32_bits(chunk->ll_region.paddr)); + lower_32_bits(chan->ll_region.paddr)); SET_CH_32(dw, chan->dir, chan->id, llp.msb, - upper_32_bits(chunk->ll_region.paddr)); + upper_32_bits(chan->ll_region.paddr)); /* Set consumer cycle */ SET_CH_32(dw, chan->dir, chan->id, cycle_sync, HDMA_V0_CONSUMER_CYCLE_STAT | HDMA_V0_CONSUMER_CYCLE_BIT); --=20 2.43.0 From nobody Sat Jul 25 21:30:55 2026 Received: from PA4PR04CU001.outbound.protection.outlook.com (mail-francecentralazon11013018.outbound.protection.outlook.com [40.107.162.18]) (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 B09953438B2; Mon, 13 Jul 2026 17:03:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.162.18 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783962230; cv=fail; b=uHiCxmqRxEcqjsZQGrlux8fuVic3K0eMmzX2Z6kHRQgPu3/NYi7bsfLGQ8gGcYnBG80KB5YrNSCJjJjngQohUZgwIKGTru7t37nvw8USFLP83bZjsbTizGbEi5ZO/+srtb1roI6pW7dKAzaE5IDQtgZJNAy9v7RuVmbGMApnN8g= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783962230; c=relaxed/simple; bh=M4odctgfzBETkZew8EcEHVlXf6u9qdi/vo7X0vqNvuY=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=WaOS5OER+QGYK7GvI0Z7SYvTV9qABONhzc7dXGaZzio4SLXDSzZbzehUYDKshkHLq4AsPTCecLrT30w67GkcchhqmY94l0jjfh5GDo5fX/0sOrr9a6Xkk2UkTQ4akvSZyBATPDvry3IIVjt0BnbtJi4oOWS0S83eyuRKO3BTzlY= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=oss.nxp.com; spf=pass smtp.mailfrom=oss.nxp.com; dkim=pass (2048-bit key) header.d=NXP1.onmicrosoft.com header.i=@NXP1.onmicrosoft.com header.b=exHqw4sM; arc=fail smtp.client-ip=40.107.162.18 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=oss.nxp.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.nxp.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=NXP1.onmicrosoft.com header.i=@NXP1.onmicrosoft.com header.b="exHqw4sM" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=oyLC/t/oEWTlPkYK+mmRbs1TNTXLj5DhDUAppYUtcKmIWLfXyZO6AUmLiJ69YB2SwXvZ0FP2j3DWQSSFZWgjAKN1q3j5RgGkhqc/RqR9/m9m1XgBV+2qX/6gToUiczWDhL2YJe3w8WB03AvFECe4z1mSwo/atsoK7/E8KYsfIJupVLRGjMsLugIfVpJ8c+uVFoEByKeNDdwaxQA3NRdyMMhvBNBV93qJIPdYQALXuJoP4rS2EFa8hvZzzzTwY/6mTb++0zOR+Kx/TXwGkOPWEy6El/Gb740BT+DbYWxeOefsiCmTOE0+/QlFZDvdCsR69jnICjCPMue+zjDKaMu7hQ== 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=pmEomCailFWZKKRc0zUQw8FYrZ/qMFR/0IEdLLVwMJs=; b=gZqFQdAeN0N//iQmx8SB5x+r+9HBjQyh7+KeN/L/9I4CCTJ5oq4Sn/lofHZ71cHXek5sffGBzG8lJ9cENr49TriVVFCZhMk8xGHoQYbtQ1ljlbHALP4VO5FvPwy86F6vlJT1nU7W3/OFdDi2DemHkt8DvzlrR6jmylZx1nRkHZTVuek3uqvyU9LYsn4rJD9v8NIso/b8WtQF/PhIE0jBlP194+7zNZQq8KHUq/b4Hzb2lBrkFcM4Es4ajKqtbjIBVcIDKC/9XlK4FTtp+rfE1Qn+NC1oQt4cj4Hqw+TAjMpPTKNHhi3i+kSjqPuxbVqf6S/HUGd0gVGB4acgrHuA2Q== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oss.nxp.com; dmarc=pass action=none header.from=oss.nxp.com; dkim=pass header.d=oss.nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=NXP1.onmicrosoft.com; s=selector1-NXP1-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=pmEomCailFWZKKRc0zUQw8FYrZ/qMFR/0IEdLLVwMJs=; b=exHqw4sMUkr7UE1ACiZ2CLlLgVraRhAz0hY8tF/LIa12FKefbqJBSSctq2ISS3ajnflf7sNPq2IBlPeg+I1aDMb3HdB122b1PLgc8KSNFcq8WbyLtrKAfnXgL9+JLpj9VmNGBKips8Jh120jr+qDVzE0yFe8Fqjd7iF/2JvHj6R+/MfVFJJPqVdcoH/eRO6fu7rF+FHS0Li92kskmdVl/opIe+EZpSkdixPM5WbBNlulGhSSKGzwUX6Jk+P6pvQJH1M/CRDShy5eJImAxID/M3ETOnvWaP0p0tVyikd9jIKCUtMYnjttWj7Xa+c8wM9R4H+pQ/Ld0KrpR+zDvzTDjg== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=oss.nxp.com; Received: from GV2PR04MB11799.eurprd04.prod.outlook.com (2603:10a6:150:2cf::9) by PA1PR04MB10228.eurprd04.prod.outlook.com (2603:10a6:102:454::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.202.18; Mon, 13 Jul 2026 17:03:45 +0000 Received: from GV2PR04MB11799.eurprd04.prod.outlook.com ([fe80::2146:83a2:5329:b7c]) by GV2PR04MB11799.eurprd04.prod.outlook.com ([fe80::2146:83a2:5329:b7c%6]) with mapi id 15.21.0181.019; Mon, 13 Jul 2026 17:03:45 +0000 From: Frank.Li@oss.nxp.com Date: Mon, 13 Jul 2026 13:03:22 -0400 Subject: [PATCH v7 04/10] dmaengine: dw-edma: Pass down dw_edma_chan to reduce one level of indirection Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260713-edma_ll-v7-4-6fb7498c901e@nxp.com> References: <20260713-edma_ll-v7-0-6fb7498c901e@nxp.com> In-Reply-To: <20260713-edma_ll-v7-0-6fb7498c901e@nxp.com> To: Manivannan Sadhasivam , Vinod Koul , Gustavo Pimentel , Kees Cook , "Gustavo A. R. Silva" , Manivannan Sadhasivam , =?utf-8?q?Krzysztof_Wilczy=C5=84ski?= , Kishon Vijay Abraham I , Bjorn Helgaas , Christoph Hellwig , Niklas Cassel Cc: dmaengine@vger.kernel.org, linux-kernel@vger.kernel.org, linux-hardening@vger.kernel.org, linux-pci@vger.kernel.org, linux-nvme@lists.infradead.org, Koichiro Den , imx@lists.linux.dev, "Verma, Devendra" , Frank Li , Devendra Verma X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1783962202; l=6971; i=Frank.Li@nxp.com; s=20240130; h=from:subject:message-id; bh=1vaHqzrsWKOaOsysWk2j4TrmkwB9RMsaZMMXMwdx4uk=; b=AEzdrr1Q/scjZpTq+4H2gMZpe20o39H2/0KUZoffW5x6GAtwfgJoSXLolfVrIl30b3dz9c/jb nl3d7Uj30GgCzavrGxu0bgVcyTQduu00rRUSKbXeRrA4Ybd+iAHnSOR X-Developer-Key: i=Frank.Li@nxp.com; a=ed25519; pk=I0L1sDUfPxpAkRvPKy7MdauTuSENRq+DnA+G4qcS94Q= X-ClientProxiedBy: SA1PR02CA0012.namprd02.prod.outlook.com (2603:10b6:806:2cf::17) To GV2PR04MB11799.eurprd04.prod.outlook.com (2603:10a6:150:2cf::9) 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: GV2PR04MB11799:EE_|PA1PR04MB10228:EE_ X-MS-Office365-Filtering-Correlation-Id: 6b575d8d-fd32-4410-f3e2-08dee100b32f X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|23010399003|7416014|376014|366016|19092799006|1800799024|921020|6133799003|18002099003|22082099003|11063799006|56012099006; X-Microsoft-Antispam-Message-Info: EuWqNrjp9lv81LWjVLv1ve8PO5YX4J4kJBuDegNNDJoThbH6/EkP+QWVXk4fdk/iavjHLPY8D8fs2lX/BMy836Q/6Nn2uDaj/g6yhxmlTu57Vp88BbpY/LJ/9RfErCtB5dWbR0Fxxu4FlPz/JtjNz7WLgTKmSvL1F8G4bBkg0x0/oT4dUDzZRwgF0YCsql0ToZOmS58z+RXo8UHr/gh2/D2tY5b8J1XeV555TAFxQ7UJwEqps3UzyT8FMnCrQiG6PYdbGr/VmR9En6Ymii79gy9xsXwB/2RhGHc0LW7JxQXSHobvDirO6zqtWjh63QkexJGJq0Fzw82qBM308CgBu1LainQxNIe0aqJXxoaGUC37rWcnOZzvY3p841pk9b+LOfHboG/C+SJOsG0sx+IKKdt+H7ddmM9TJtK4NFBghiMW+Y8iuD3L9MQN8lea4gAZQkyAxJwkmDMUfIewcfaQPiQzgnyhI3nUh6d40flv6EmEcBd/tZ/wSjRXmKz0o5WIsbrEVB8IoudZebkEjbRYJycd/FBRZLTawez551jyEJBblkvEEp5Wdj3G+lRCVbD8a9lAA1lIZWr0E1x8fAIDGXojPIgteer9GectnF1YBOUmfJLjuNMzrnuR0cA/qnWsD8jTqnZgs7fEVYWi20c42DYIVgCqmgUuKhfYElREB1Q5VGnNTRu/YT8kcSSxcL4oWsPXSzxk4klVw7cnjdvVQA== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:GV2PR04MB11799.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(23010399003)(7416014)(376014)(366016)(19092799006)(1800799024)(921020)(6133799003)(18002099003)(22082099003)(11063799006)(56012099006);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?SlBIbGswM2VlM0VseWJHKzRCQmNJLzZSMWJCdEY0VDRwd2l1ZCttdjlZTjND?= =?utf-8?B?S1ZMUlQ0WGRhUWlZajl3MUw2eEVmNG9PUllCajZzS3E5dFVmNW52NkpWdjh1?= =?utf-8?B?UlNZazJZRUNrV3U5eXBBc3pHKzBBbHpQbnpKbENUUnhDWndoWG1kNjU4RTdK?= =?utf-8?B?anVta2xGZU53aVJYL2FWUFp0VTZkOFNIeGUvQUVpc0dzUkEyN3pXZ3BvZWx2?= =?utf-8?B?ZTJoSEhZaUJjT1pOa05HSE5ZMno3blF6dzFQdEQ5S0F3dnQ1QnpsSUUyQnI1?= =?utf-8?B?dmM5WGtKcVgrRUN5Y1FPUzRvUzcxS3RyeGJlQVdNRWQzWWZQTUN6MkNvaUtl?= =?utf-8?B?S2ZGbTJOeGZtUGVaQjRZUWNkc0o5b2VKb05BanJzWG9IQm5XelZsRzRVZ0RT?= =?utf-8?B?OHNCcnhOaDh4ZDZGUFp6NUlhdUtiRnREMkw3cElmZmkzcXVMeXNnWWwvNkV4?= =?utf-8?B?RXQwMUVpUDBMdWNuZ0EyaFJjeU8vcWVlblpWOHZEdUVabTlhQW1UdGpGdXZ4?= =?utf-8?B?RlZ4Rll2bldqOEM2S3NEb0lYMVpocHNQN0MwbVZUTUV1WGdwelVuT01mTlgy?= =?utf-8?B?RHE2TWhjRHJLbmZxbXBKZktKbmFxemJ2emxUV3cvMkp0c2NxVGtIVGJGM0F4?= =?utf-8?B?emxPTnFBaGNBZmdnMjkvSFJSNXhUNXRNeFZPQ05DQUwyL1pRaTArNWozeENI?= =?utf-8?B?UStJVXBxK1k5c0dGRnRxT3FZSEdDWDVQOUd0Y1Uwb01jeDZmVnB5NCtrQkVz?= =?utf-8?B?UVp0UmZCbG1TOVBwK21KNmFNUTJQa1BkNXkzZFhsbDkwR2NhTC8yL2dSMzBq?= =?utf-8?B?V1hMa0g1SnpkRzJyNlBDZzFMQnZ3d2VIc2w4enJLK0dhcXVWRjNEb2Rqck1E?= =?utf-8?B?Rm1jVmV1RGhiU25ZRWo4Qy81TTYwRUlGUlR3K3pOLy8xamRwNG10YmIvQ3lC?= =?utf-8?B?b0NJd0tPR2xsaUdsS3BBMzZtZkMvaVFMTFV5bW1JRkFBTXg2WVk3OEF5MDJO?= =?utf-8?B?OU1BY0J3cGwrZzNyV0M3N2RGQU9EZHVSRDFnYnFMR2dDK09la0ZEaFFrdE9P?= =?utf-8?B?QVRnZ29PbFNTMkY1RHhDNVp6OWZRVkZBaDhRRE5EOEUxcUN2b3hKU3Q2SnRM?= =?utf-8?B?ZWZNanVXbzUyVlFUNTRLWlBmR2tScHl3SisxMStpUWU2V1hHRnJjalZuRXk4?= =?utf-8?B?NklPNXRMamVaYlhUVDdlS05qblBqbFYrMFB0ZjZOdmFlOFB1WmlIa3lFLy9m?= =?utf-8?B?c0RTWlFoYytKdzBQZlR1K2tlRGxZb0tXSDk5dFdkd0w0L0t2Z29OSWdSR1FS?= =?utf-8?B?OVQ2TGhIcUI2NjZJZDlSam44eldsTldOVURWZ0tvZ3F3WWo5ODBxUHMzaE9O?= =?utf-8?B?eUhFM3cwV1h4Snc0bTVocUNzVW0wamIyT1ZNKzU2ZS9HV1JRVDlUcVJhYzJo?= =?utf-8?B?OHZVT2s2dEtRY2VMVXBZdjBGWWpGMDQ4dzh1MEg0YzdjeUZ5U1hzemlnUnNL?= =?utf-8?B?LzVsYTBHbld4bDNHVG0xWVVaTXdWM1BDRmlaZGV3WXhsNDlQNGhONHQwbkRh?= =?utf-8?B?UGVTVVlDaTZWc3JMdXFjQXB4SnZqa081WTJwM2VwbVdwOC9pUTFzQS91OGpt?= =?utf-8?B?KzIralNwVFdpVnlXeHlHZ3B3MGxkM1NuR1JHZExXTXY4RFRQK1JWdU1zNjhy?= =?utf-8?B?THNsZGp3L1JhSVZBcEZOb21vYTNvaDVCUXRIMkFyNklWOHJyb09mV2hOeUph?= =?utf-8?B?cnluMFEyc0dWR2dqSkZkMElrSkNYUS9INGwvRXBrRGJVYnkybTZxemhwWFNQ?= =?utf-8?B?MTNmbVE2U1RSQ2VWZldhN1JWWmx2TzZtWlZzVGg5ZkhXa3dsZ2UrZEhWTm5M?= =?utf-8?B?K2kvalRnVkFNc2FYeVFON3cwNDJrbnNzTHNkY01Zckh6YmpRNVhXTjZrc0VT?= =?utf-8?B?QldwaFEwQ1I4R1RWNUJqTHV6ZlRtUlJwNEI3NXBFZ2JvanBlbHFZZ3k2NWZG?= =?utf-8?B?VXI3QkJxazdUSC9SeGtDcjlhUW03Mm9McHBhaUFJUzJiMVpHYnBoV0o3ZWpl?= =?utf-8?B?V3VxSHNSa1pjemRwRlNzem9CakZJdjRkVC9wUy8renl5QWtLN3k3M3VlNGZG?= =?utf-8?B?WW5PdGVuVUpTNzgyYk83VExoNlFIeXVyZnpoUEN0akwvdStPZUNEbE9wUkpi?= =?utf-8?B?MTFOMWE2bnlibE56UVdHMm5COWYvbkN5OUZROUcyVU9Ubno4NTllTm5QM2ta?= =?utf-8?B?RCtiYjRSMXd1OVl4ZXBXQjdYcDNGS00wQWtHZ1lJc0N4cWp3ZUFodmlsRnJX?= =?utf-8?B?Vlp0TzZkN1N5bmMza1VaS2ZjUjZ5R09SaFREak1jZ2huS1ZnbE4xTUxzK1Iz?= =?utf-8?Q?ehU4xQ47T/lYzYY+rc6aKGjWCi19Z41HFHww2?= X-OriginatorOrg: oss.nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 6b575d8d-fd32-4410-f3e2-08dee100b32f X-MS-Exchange-CrossTenant-AuthSource: GV2PR04MB11799.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Jul 2026 17:03:45.7355 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: W2VabM7loBjfDkJvAECGUJVVo4bWxJZd2DxlsViUE0zWRIde4MFSGe0mhiZwxDnnI+IwxNyzyjHujU/nFO0/2FvALyRPxPxv2jdlKin/vi1yqtH0mQTy1gP+XMC2DqWD X-MS-Exchange-Transport-CrossTenantHeadersStamped: PA1PR04MB10228 From: Frank Li Some helper functions do not use any information from dw_edma_chunk, so passing a dw_edma_chan pointer directly avoids an unnecessary level of pointer dereferencing and simplifies data access. Tested-by: Koichiro Den Tested-By: Devendra Verma Signed-off-by: Frank Li --- changes in v4 - collect Koichiro tag --- drivers/dma/dw-edma/dw-edma-v0-core.c | 22 ++++++++++------------ drivers/dma/dw-edma/dw-hdma-v0-core.c | 23 +++++++++++------------ 2 files changed, 21 insertions(+), 24 deletions(-) diff --git a/drivers/dma/dw-edma/dw-edma-v0-core.c b/drivers/dma/dw-edma/dw= -edma-v0-core.c index 51e50f1fdcac4..c341aa5343417 100644 --- a/drivers/dma/dw-edma/dw-edma-v0-core.c +++ b/drivers/dma/dw-edma/dw-edma-v0-core.c @@ -276,13 +276,12 @@ dw_edma_v0_core_handle_int(struct dw_edma_irq *dw_irq= , enum dw_edma_dir dir, return ret; } =20 -static void dw_edma_v0_write_ll_data(struct dw_edma_chunk *chunk, int i, +static void dw_edma_v0_write_ll_data(struct dw_edma_chan *chan, int i, u32 control, u32 size, u64 sar, u64 dar) { ptrdiff_t ofs =3D i * sizeof(struct dw_edma_v0_lli); - struct dw_edma_chan *chan =3D chunk->chan; =20 - if (chunk->chan->dw->chip->flags & DW_EDMA_CHIP_LOCAL) { + if (chan->dw->chip->flags & DW_EDMA_CHIP_LOCAL) { struct dw_edma_v0_lli *lli =3D chan->ll_region.vaddr.mem + ofs; =20 lli->transfer_size =3D size; @@ -300,13 +299,12 @@ static void dw_edma_v0_write_ll_data(struct dw_edma_c= hunk *chunk, int i, } } =20 -static void dw_edma_v0_write_ll_link(struct dw_edma_chunk *chunk, +static void dw_edma_v0_write_ll_link(struct dw_edma_chan *chan, int i, u32 control, u64 pointer) { ptrdiff_t ofs =3D i * sizeof(struct dw_edma_v0_lli); - struct dw_edma_chan *chan =3D chunk->chan; =20 - if (chunk->chan->dw->chip->flags & DW_EDMA_CHIP_LOCAL) { + if (chan->dw->chip->flags & DW_EDMA_CHIP_LOCAL) { struct dw_edma_v0_llp *llp =3D chan->ll_region.vaddr.mem + ofs; =20 llp->llp.reg =3D pointer; @@ -339,7 +337,7 @@ static void dw_edma_v0_core_write_chunk(struct dw_edma_= chunk *chunk) control |=3D DW_EDMA_V0_RIE; } =20 - dw_edma_v0_write_ll_data(chunk, i++, control, child->sz, + dw_edma_v0_write_ll_data(chan, i++, control, child->sz, child->sar, child->dar); } =20 @@ -347,10 +345,10 @@ static void dw_edma_v0_core_write_chunk(struct dw_edm= a_chunk *chunk) if (!chunk->cb) control |=3D DW_EDMA_V0_CB; =20 - dw_edma_v0_write_ll_link(chunk, i, control, chan->ll_region.paddr); + dw_edma_v0_write_ll_link(chan, i, control, chan->ll_region.paddr); } =20 -static void dw_edma_v0_sync_ll_data(struct dw_edma_chunk *chunk) +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 @@ -360,8 +358,8 @@ static void dw_edma_v0_sync_ll_data(struct dw_edma_chun= k *chunk) * LL memory in a hope that the MRd TLP will return only after the * last MWr TLP is completed */ - if (!(chunk->chan->dw->chip->flags & DW_EDMA_CHIP_LOCAL)) - readl(chunk->chan->ll_region.vaddr.io); + if (!(chan->dw->chip->flags & DW_EDMA_CHIP_LOCAL)) + readl(chan->ll_region.vaddr.io); } =20 static void dw_edma_v0_core_start(struct dw_edma_chunk *chunk, bool first) @@ -437,7 +435,7 @@ static void dw_edma_v0_core_start(struct dw_edma_chunk = *chunk, bool first) upper_32_bits(chan->ll_region.paddr)); } =20 - dw_edma_v0_sync_ll_data(chunk); + dw_edma_v0_sync_ll_data(chan); =20 /* Doorbell */ SET_RW_32(dw, chan->dir, doorbell, diff --git a/drivers/dma/dw-edma/dw-hdma-v0-core.c b/drivers/dma/dw-edma/dw= -hdma-v0-core.c index 20089d57f8ab0..156b1cc225091 100644 --- a/drivers/dma/dw-edma/dw-hdma-v0-core.c +++ b/drivers/dma/dw-edma/dw-hdma-v0-core.c @@ -152,13 +152,12 @@ dw_hdma_v0_core_handle_int(struct dw_edma_irq *dw_irq= , enum dw_edma_dir dir, return ret; } =20 -static void dw_hdma_v0_write_ll_data(struct dw_edma_chunk *chunk, int i, +static void dw_hdma_v0_write_ll_data(struct dw_edma_chan *chan, int i, u32 control, u32 size, u64 sar, u64 dar) { ptrdiff_t ofs =3D i * sizeof(struct dw_hdma_v0_lli); - struct dw_edma_chan *chan =3D chunk->chan; =20 - if (chunk->chan->dw->chip->flags & DW_EDMA_CHIP_LOCAL) { + if (chan->dw->chip->flags & DW_EDMA_CHIP_LOCAL) { struct dw_hdma_v0_lli *lli =3D chan->ll_region.vaddr.mem + ofs; =20 lli->transfer_size =3D size; @@ -176,13 +175,12 @@ static void dw_hdma_v0_write_ll_data(struct dw_edma_c= hunk *chunk, int i, } } =20 -static void dw_hdma_v0_write_ll_link(struct dw_edma_chunk *chunk, +static void dw_hdma_v0_write_ll_link(struct dw_edma_chan *chan, int i, u32 control, u64 pointer) { ptrdiff_t ofs =3D i * sizeof(struct dw_hdma_v0_lli); - struct dw_edma_chan *chan =3D chunk->chan; =20 - if (chunk->chan->dw->chip->flags & DW_EDMA_CHIP_LOCAL) { + if (chan->dw->chip->flags & DW_EDMA_CHIP_LOCAL) { struct dw_hdma_v0_llp *llp =3D chan->ll_region.vaddr.mem + ofs; =20 llp->llp.reg =3D pointer; @@ -198,6 +196,7 @@ static void dw_hdma_v0_write_ll_link(struct dw_edma_chu= nk *chunk, =20 static void dw_hdma_v0_core_write_chunk(struct dw_edma_chunk *chunk) { + struct dw_edma_chan *chan =3D chunk->chan; struct dw_edma_burst *child; u32 control =3D 0, i =3D 0; =20 @@ -205,17 +204,17 @@ static void dw_hdma_v0_core_write_chunk(struct dw_edm= a_chunk *chunk) control =3D DW_HDMA_V0_CB; =20 list_for_each_entry(child, &chunk->burst->list, list) - dw_hdma_v0_write_ll_data(chunk, i++, control, child->sz, + dw_hdma_v0_write_ll_data(chan, i++, control, child->sz, child->sar, child->dar); =20 control =3D DW_HDMA_V0_LLP | DW_HDMA_V0_TCB; if (!chunk->cb) control |=3D DW_HDMA_V0_CB; =20 - dw_hdma_v0_write_ll_link(chunk, i, control, chunk->chan->ll_region.paddr); + dw_hdma_v0_write_ll_link(chan, i, control, chunk->chan->ll_region.paddr); } =20 -static void dw_hdma_v0_sync_ll_data(struct dw_edma_chunk *chunk) +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 @@ -225,8 +224,8 @@ static void dw_hdma_v0_sync_ll_data(struct dw_edma_chun= k *chunk) * LL memory in a hope that the MRd TLP will return only after the * last MWr TLP is completed */ - if (!(chunk->chan->dw->chip->flags & DW_EDMA_CHIP_LOCAL)) - readl(chunk->chan->ll_region.vaddr.io); + if (!(chan->dw->chip->flags & DW_EDMA_CHIP_LOCAL)) + readl(chan->ll_region.vaddr.io); } =20 static void dw_hdma_v0_core_ll_start(struct dw_edma_chunk *chunk, bool fir= st) @@ -261,7 +260,7 @@ static void dw_hdma_v0_core_ll_start(struct dw_edma_chu= nk *chunk, bool first) HDMA_V0_CONSUMER_CYCLE_STAT | HDMA_V0_CONSUMER_CYCLE_BIT); } =20 - dw_hdma_v0_sync_ll_data(chunk); + dw_hdma_v0_sync_ll_data(chan); =20 /* Doorbell */ SET_CH_32(dw, chan->dir, chan->id, doorbell, HDMA_V0_DOORBELL_START); --=20 2.43.0 From nobody Sat Jul 25 21:30:55 2026 Received: from OSPPR02CU001.outbound.protection.outlook.com (mail-norwayeastazon11013050.outbound.protection.outlook.com [40.107.159.50]) (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 5E660343897; Mon, 13 Jul 2026 17:03:53 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.159.50 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783962235; cv=fail; b=DDSdYeFNrae0vVeC1cwPLY8f5vONekMFduueoOEpha8zbe3ydjOBMzLNsaTCDzCIdXZyFKRyV9xNsgcYeq+UK9W5zHxIFHScnBQ1JXLuWH9gLxcL5v7jMnxZeO85LVRaFlOkHRR/gYMjdWXsXqJxmOJ5pqYsx3aB2gkglstpA0g= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783962235; c=relaxed/simple; bh=VIXcVHpy7kQfTjt492TSNc7+MpbBhUvCSi11vcu5Na8=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=nQaS1vNv6FPaxC1lnL6k39g1FYEXM/R0Oqxd8xmZzV/rGYih+YVPIKwLLZLR3QW36+k8/+VLSFQxacEjcaaiF9c+jebyDC1a1dbNAriTAp0MabCRMjMZuRPrVKPcoNN9FmljskjfKmNUB9uSKkeLpQdM1794cXf9z7HJfI4dVJA= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=oss.nxp.com; spf=pass smtp.mailfrom=oss.nxp.com; dkim=pass (2048-bit key) header.d=NXP1.onmicrosoft.com header.i=@NXP1.onmicrosoft.com header.b=S8c71qBI; arc=fail smtp.client-ip=40.107.159.50 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=oss.nxp.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.nxp.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=NXP1.onmicrosoft.com header.i=@NXP1.onmicrosoft.com header.b="S8c71qBI" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=LvCQ5ZBGG9ITX+EssH/77M/4zp/Ju/Hgj/xgc1UF0lxKVDEtXAXASmoMVaOE9GW88IvdV2JjJvpaKqwhiwGAx1DWMixw26FJuoJpQOnW72ERfY7S1BuDmpK6LHmVw3Mz6VOA9sagYZHjJ2j3Dn0Z+FdWqIdfRKq7QNYhLMamFV8i1K9wUtvIS9+F4jfO6W122fcxOuK1+p3YY5wgk9xKh7jjwyWaSvaJ7DxnyI6h4YAw+F/UMwCddSyiARoha2/QRITYBw0bKrwRsYyQH3N10GSxYWs5O/nf/mSPaqMAqKPA46uOCn0ymBivb+FnDhz03TwbZg9Ny1EUBYAQaHLbVA== 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=7PzXi9IEpwj1JLyF90STiidHK2In80PmZYLlF4RHm1Q=; b=KELN6qlLO+fsadxTiQ8r4BTZ9bTuc0SNx0vWfVFpVbcofkBf+xWVFGGu8PSMTFLipYAPmW2k0AVxG2H4YzVZ96CTy4JlUA5/4nlQBOMrNdW0Nu9e/Juyvjdf4uSL5QJdkAhsdYVGA2+NtBCxvQpvVn7Y/fIHDeOw/rS+C+biaBLBJk3cjPFIsa/x2UqHWEd+QUE9Qk6PyA++zXe0Gi6qGVRZAp58nsYKYH3rJgZoyg/T0iiAFiIM7xfNGDJ4ss3Qg3WoWVGTZT7+49Qw91u5ny2za6brjXQMEsDG4hlBWs8R6AzJhvnLmUZSwplmLCKjaBC1ZqqcWGMEBTOB/Hu1mA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oss.nxp.com; dmarc=pass action=none header.from=oss.nxp.com; dkim=pass header.d=oss.nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=NXP1.onmicrosoft.com; s=selector1-NXP1-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=7PzXi9IEpwj1JLyF90STiidHK2In80PmZYLlF4RHm1Q=; b=S8c71qBIOFYXf3iSjWWGSLI7YvvMT+0/Mgq7VwPzdzeFYHMLzQdvElP6yuUVe0Q4KjYaQkj09YntuYp3utYlhmQ0lN4Rc1ejJMkTA0fJGdAMdyxgCPrgECCiCesb3lue1HbNHRMCHra+LEO+OoP10vnX2i3Fy/DvsnQfWiJtT+Y60Et50pRpu+msG2NAwEqyXgMcMDBX4FXCES5nUGEtz4bS1djQBk2aQKYAtuhBstGCX6I9rOZeBgccf19QRC5SzGubRJ5DyWw11TnB+H/H98hpGxUmd1aLpV2X4WSzV5MyNiqN3uSMF+2Xb72Ay3lHyJf5KsTE/p2nZZ0wD47P4g== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=oss.nxp.com; Received: from GV2PR04MB11799.eurprd04.prod.outlook.com (2603:10a6:150:2cf::9) by PA1PR04MB10228.eurprd04.prod.outlook.com (2603:10a6:102:454::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.202.18; Mon, 13 Jul 2026 17:03:50 +0000 Received: from GV2PR04MB11799.eurprd04.prod.outlook.com ([fe80::2146:83a2:5329:b7c]) by GV2PR04MB11799.eurprd04.prod.outlook.com ([fe80::2146:83a2:5329:b7c%6]) with mapi id 15.21.0181.019; Mon, 13 Jul 2026 17:03:50 +0000 From: Frank.Li@oss.nxp.com Date: Mon, 13 Jul 2026 13:03:23 -0400 Subject: [PATCH v7 05/10] dmaengine: dw-edma: Add helper dw_(edma|hdma)_v0_core_ch_enable() Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260713-edma_ll-v7-5-6fb7498c901e@nxp.com> References: <20260713-edma_ll-v7-0-6fb7498c901e@nxp.com> In-Reply-To: <20260713-edma_ll-v7-0-6fb7498c901e@nxp.com> To: Manivannan Sadhasivam , Vinod Koul , Gustavo Pimentel , Kees Cook , "Gustavo A. R. Silva" , Manivannan Sadhasivam , =?utf-8?q?Krzysztof_Wilczy=C5=84ski?= , Kishon Vijay Abraham I , Bjorn Helgaas , Christoph Hellwig , Niklas Cassel Cc: dmaengine@vger.kernel.org, linux-kernel@vger.kernel.org, linux-hardening@vger.kernel.org, linux-pci@vger.kernel.org, linux-nvme@lists.infradead.org, Koichiro Den , imx@lists.linux.dev, "Verma, Devendra" , Frank Li , Devendra Verma X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1783962202; l=8113; i=Frank.Li@nxp.com; s=20240130; h=from:subject:message-id; bh=3qvghJAxIihdXBmc5CTD6vHaRL1InntJReUGZqSdZ6k=; b=/iDy4mUX3kveiaqKuCW7gasVbHF9DMTqIdgo1MhAJIRzj4vmzzwPI4NYStX8z9fW0T5ptOOxw uYqHyGrdM6oCxc2hrxx71Eaf/1MjXBIQjRn89aFqE4W7PyXnGCQArDx X-Developer-Key: i=Frank.Li@nxp.com; a=ed25519; pk=I0L1sDUfPxpAkRvPKy7MdauTuSENRq+DnA+G4qcS94Q= X-ClientProxiedBy: SA0PR12CA0019.namprd12.prod.outlook.com (2603:10b6:806:6f::24) To GV2PR04MB11799.eurprd04.prod.outlook.com (2603:10a6:150:2cf::9) 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: GV2PR04MB11799:EE_|PA1PR04MB10228:EE_ X-MS-Office365-Filtering-Correlation-Id: 731fd28e-0d9b-4694-6fb2-08dee100b5f0 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|23010399003|7416014|376014|366016|19092799006|1800799024|921020|18002099003|22082099003|11063799006|56012099006; X-Microsoft-Antispam-Message-Info: ezKWwQeDqpNrJ0X44iiUpAs2MA27ea7hFyqvn3fxJZms88oexnnwI69dYBFM1tPP224E7gseZKUZsz9G79HT23PVfL1VRH75sjR3SgGhk40f9lK8bv+retcUjwpWBaqDt7htasXfANfLxloLzNp4sTiHefWDwzmq1S2ARUTjdl0+ZD0U0FpTVb1S5x4p+hAhu/Xmu2Bp4V7CMlqWXLNwu0mDwTgIAprRscf2Mtj4+ZgW2racSu4L8JF00oHiK/e7bCOzmaKMoFDqQnqPocg6g/mPblH5oQ5rGLige4DZh/8UyUToAApWjB6DfjdgZ3l0Dbqys5wJXXl9VKWnPCZ6Eq7x4BHZhDlMYrW454aAiXuvDzP8bXJ+w5iuR7sZAkBKWOt6eK2rlcAiHM64sejIeIuk1AfGr8CJbRiqBOKTe2usDyGvQa+nvmWnbH0qv4CJsJdz9XYeMWOIVln16tUIwLUA3OJ3eV4T1qk2fMnZkR4Gib8IPA6lNMQjkfgMzcpb/gwuLAasax6Pe5DtjO6RnO1vxoB5p/ViuekeAQiUS0gHiAKAhjkNxzzWlZ0ZMhs2hx+FVagDgt+VGqDTgPgE6Un+OT/Wm5Ep+Ti9TTkctQSHlZ+aluNfz3v10uxs15DVI78y3PZNe216nEqFfjTKgZ85q0TrQgLzlm7gH4fPU2lW8gC//r4lYzqX8FAWkINFNvwyd/sWINOdBZ1HKJLHhA== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:GV2PR04MB11799.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(23010399003)(7416014)(376014)(366016)(19092799006)(1800799024)(921020)(18002099003)(22082099003)(11063799006)(56012099006);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?by96RTJDOGhySUNic1RzU2U2eGo4T0pXYnJjSWVZWG1FUmpEb0tmZkRjaTY2?= =?utf-8?B?K09UcHhoNFNBbzcwaWxIMTZlMUU5Qi9MaHF2UXFjSkY0d2JwUk9hbWlDbXpU?= =?utf-8?B?OW5pVHFicldUQmVuSXE1a3hPQkRIci8yYWR0bzlpanhSNytDZW9tczBETVFJ?= =?utf-8?B?VlBBdS9kTUZoM3N4eDVEWGtEcnl5Vzc3Sys3bHRpK1ZLSWlpbzkzNzV0VmRF?= =?utf-8?B?ejJqZTN6My9vMWVXejJwNXYvYm1WZVU3ZXpRdUZoZ1g3TkRxZFVFTnZrdE9r?= =?utf-8?B?VGxqZGMzUFZpVnhzVFhPSEhrNVBZUjZwSXdsaGtXNDNvRWY4RC9Ram5sdHcy?= =?utf-8?B?L2hCYlowTWNoNmpDUXF2NE5tK2dxWEF3NHRLeDF6bXBIUUVxY2w1SXd1OUdi?= =?utf-8?B?RWVmdXlXMlNkaUZJTUp6ekdwN1dhTHVqR1J2aXJQYWhQUktESHQwK2hhZlhC?= =?utf-8?B?R1VHbXIzS2xPeGwzenJPZi96bUVLU0lBTzRDK0J0OUNlZElmWktQanBUVFdl?= =?utf-8?B?TW5YdXV2dTJBbWFoMEhzNThtTnZINmRaVEJNK3BiQ0diT1MycVBWcTB0blNL?= =?utf-8?B?R0VXSFlTRkhmdzVYYm5RdjdjenAwNmg0QTQyN3k4Q05WTWxEN01nKzQ5cXNL?= =?utf-8?B?U3JzY1dzUG03N25qbVdEd3hDdEZKNDVRU2RTRWdVeGFac0VGaUJ4STBlV212?= =?utf-8?B?Zm1ZQlVEUFNFS0syRkp5VDBKTG11THFoMWVNQmF2Q3ZpbTVENG1DM25VU0NM?= =?utf-8?B?Qm5yMTZmd0lQdDVNTWx6d2hKaTdTYVFjaXBHdEc3NFJkQnhwQ2kxeGdiWHo2?= =?utf-8?B?SEl2a2NDMDU1TE1vOWcvOVVOeFJoU21UZUpjREZRbWE1Z1hhbkx4b3o4ZXgr?= =?utf-8?B?bjg2Ti9tbUFFbE5QLzVaTFVINXBUTUlaaTdrb0JJVFM1cGk1a2I1c3VmTTlz?= =?utf-8?B?cnBLdjlsckZVR3YwK2I4V0tlOSszanlBUXVxWW43Yml0ZWRJT1BidDlRYXpv?= =?utf-8?B?TDZ5WHNEUGdyaGdoUnljdDIxdTlOT2w2UTFxYmxjaUNGYU54VFQ0YUFxT0ZO?= =?utf-8?B?bjk1YmlyM0lZVVk4ZUd2VVQyY1JiSGQ1ZFJYcEE1UGNLR0ZWRDBDd2tqbFVF?= =?utf-8?B?QVlZV2tkN3BEMkZvSnMvMjdDK1hRTmpjSlNHaWJsVnVrQm1KTEgweHhobmdC?= =?utf-8?B?eHBLaEJyczBEUTBFZmpyL3hXMVJ5NHNFaHpieTdkVkRvWVR0WVZZWlhNazhu?= =?utf-8?B?Z295R3FmVTBiSlROVElRdDh6Z0s3aGtaQ2N0NGw0UGRxSXpRa01vcVdSZW85?= =?utf-8?B?Nng0RWlRUG44Yzlrb2J5WWhVRmxVY2VCZ2VOWW90MlRTYmxtYUVYT3JESWJM?= =?utf-8?B?Zk8xS3ZQUUNnUHkvbW5TdFFLTFNkWnA3ZWxGcHdCZ2RmVEFDbnZ5aExCaVdJ?= =?utf-8?B?ZFNHbXBhbGVFZDBwcWdIbjJTN0dlRWljOWZ0eGJSR08rcFgyK1ZjNzdVRG56?= =?utf-8?B?NHQrVyticytUZUtqRWgrbVBCY1ovTkhIZFI3OXkxNEJ0RVUzQUNRY1V3Qlk2?= =?utf-8?B?T2hGU1VNbXg2dUpXZ3ErWS9oLytjVStBeWpRNUVKMTFuRmpmT1F1dWtuUnVU?= =?utf-8?B?a1U3MnVUNVhyZFFPMmVIUU1iOVlSRlAwdTN0R0JveC82K2R1ZFR2U2EwVDNY?= =?utf-8?B?aWIvUUlpdjdyYkcrQUt6ZzVCdkJpUzBCTXNxWG9EdTFxK2VlUXFOMUZ5Nm1T?= =?utf-8?B?aTBMckNtYVpmRFFBSTQvSXBhanNhYlRhakVZclRDVVdjcW5jOFlDMUVGTUVl?= =?utf-8?B?ZGlrS0VSNDYrVmpiK05Gb3VLcWZvTzdjVmtSUkZyWTlOUExFcUVCVEhDSWhv?= =?utf-8?B?czZ0WWJmOHpyZ1YrLzF3dXA1ME5QRVp0QWpxbFJHUThuQzNKSWlWWkp3OHZS?= =?utf-8?B?dHJGbjdiRUkraEhyUlNrWm1oL1J4Y3dsaTVvWHhwc29xVWtyaGpvMWZVWHZV?= =?utf-8?B?VFM2bnVzNVlUR0tydDhJRlhvTEdPdjVEVkNJdDA0cVNoc1ZhZXlwTjdScDZY?= =?utf-8?B?cFNNZlh4U2tmK0M1K2ZWVFBUeXZPb0oycEZLd3VBSUpsWXlwaGpwbEtlQ0Uv?= =?utf-8?B?QUc5bGxhUXBXY0tOSVh5OEs3T2lxZFV4OC9kRHNZVXQ1VkpCeU1nWnB2UUJP?= =?utf-8?B?eDNHVnl0MlY3QmQ2a1pXeTd4WEJpdXRsYytMNXlRcDZSWVJxTnJaQ3Y1Y3NX?= =?utf-8?B?K2Rub3lhaDE5dGVJUTNvcWFMdzNMck1nNndkWU9FWExZaFNBelV0dnhiaXpV?= =?utf-8?B?SVk3WHNmNVBXU21PdVUxRU9LMERZZXZYUlhUYmM3TStXaTM2dTl2VVNPZmpn?= =?utf-8?Q?oC457UMbA6+Rsh/wkwiWSMA151m+Mhly7xRhy?= X-OriginatorOrg: oss.nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 731fd28e-0d9b-4694-6fb2-08dee100b5f0 X-MS-Exchange-CrossTenant-AuthSource: GV2PR04MB11799.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Jul 2026 17:03:50.3722 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: D3DBcLS5esvugS8yoJ5N2ANCOJqroRV1XxyZA6eMn1nf1GHqx3u+S0Xh3TVO+GRgnDheaoJpePdlr1eL+3WpMYPfhaBVQAjXRBCGPi0h7cCSVaVI5mD8QXP5O2xrQ4sa X-MS-Exchange-Transport-CrossTenantHeadersStamped: PA1PR04MB10228 From: Frank Li Move the channel-enable logic into a new helper function, dw_(edma|hdma)_v0_core_ch_enable(), in preparation for supporting dynamic link entry additions. No functional changes. Tested-by: Koichiro Den Tested-By: Devendra Verma Signed-off-by: Frank Li --- change in v4: - collect Koichiro tag --- drivers/dma/dw-edma/dw-edma-v0-core.c | 128 +++++++++++++++++-------------= ---- drivers/dma/dw-edma/dw-hdma-v0-core.c | 54 +++++++------- 2 files changed, 93 insertions(+), 89 deletions(-) diff --git a/drivers/dma/dw-edma/dw-edma-v0-core.c b/drivers/dma/dw-edma/dw= -edma-v0-core.c index c341aa5343417..8d38867cd9983 100644 --- a/drivers/dma/dw-edma/dw-edma-v0-core.c +++ b/drivers/dma/dw-edma/dw-edma-v0-core.c @@ -318,6 +318,67 @@ static void dw_edma_v0_write_ll_link(struct dw_edma_ch= an *chan, } } =20 +static void dw_edma_v0_core_ch_enable(struct dw_edma_chan *chan) +{ + struct dw_edma *dw =3D chan->dw; + unsigned long flags; + u32 tmp; + + /* Enable engine */ + SET_RW_32(dw, chan->dir, engine_en, BIT(0)); + if (dw->chip->mf =3D=3D EDMA_MF_HDMA_COMPAT) { + switch (chan->id) { + case 0: + SET_RW_COMPAT(dw, chan->dir, ch0_pwr_en, BIT(0)); + break; + case 1: + SET_RW_COMPAT(dw, chan->dir, ch1_pwr_en, BIT(0)); + break; + case 2: + SET_RW_COMPAT(dw, chan->dir, ch2_pwr_en, BIT(0)); + break; + case 3: + SET_RW_COMPAT(dw, chan->dir, ch3_pwr_en, BIT(0)); + break; + case 4: + SET_RW_COMPAT(dw, chan->dir, ch4_pwr_en, BIT(0)); + break; + case 5: + SET_RW_COMPAT(dw, chan->dir, ch5_pwr_en, BIT(0)); + break; + case 6: + SET_RW_COMPAT(dw, chan->dir, ch6_pwr_en, BIT(0)); + break; + case 7: + SET_RW_COMPAT(dw, chan->dir, ch7_pwr_en, BIT(0)); + break; + } + } + /* Interrupt unmask - done, abort */ + raw_spin_lock_irqsave(&dw->lock, flags); + + tmp =3D GET_RW_32(dw, chan->dir, int_mask); + tmp &=3D ~FIELD_PREP(EDMA_V0_DONE_INT_MASK, BIT(chan->id)); + tmp &=3D ~FIELD_PREP(EDMA_V0_ABORT_INT_MASK, BIT(chan->id)); + SET_RW_32(dw, chan->dir, int_mask, tmp); + /* Linked list error */ + tmp =3D GET_RW_32(dw, chan->dir, linked_list_err_en); + tmp |=3D FIELD_PREP(EDMA_V0_LINKED_LIST_ERR_MASK, BIT(chan->id)); + SET_RW_32(dw, chan->dir, linked_list_err_en, tmp); + + raw_spin_unlock_irqrestore(&dw->lock, flags); + + /* Channel control */ + SET_CH_32(dw, chan->dir, chan->id, ch_control1, + (DW_EDMA_V0_CCS | DW_EDMA_V0_LLE)); + /* Linked list */ + /* llp is not aligned on 64bit -> keep 32bit accesses */ + SET_CH_32(dw, chan->dir, chan->id, llp.lsb, + lower_32_bits(chan->ll_region.paddr)); + SET_CH_32(dw, chan->dir, chan->id, llp.msb, + upper_32_bits(chan->ll_region.paddr)); +} + static void dw_edma_v0_core_write_chunk(struct dw_edma_chunk *chunk) { struct dw_edma_burst *child; @@ -366,74 +427,11 @@ static void dw_edma_v0_core_start(struct dw_edma_chun= k *chunk, bool first) { struct dw_edma_chan *chan =3D chunk->chan; struct dw_edma *dw =3D chan->dw; - unsigned long flags; - u32 tmp; =20 dw_edma_v0_core_write_chunk(chunk); =20 - if (first) { - /* Enable engine */ - SET_RW_32(dw, chan->dir, engine_en, BIT(0)); - if (dw->chip->mf =3D=3D EDMA_MF_HDMA_COMPAT) { - switch (chan->id) { - case 0: - SET_RW_COMPAT(dw, chan->dir, ch0_pwr_en, - BIT(0)); - break; - case 1: - SET_RW_COMPAT(dw, chan->dir, ch1_pwr_en, - BIT(0)); - break; - case 2: - SET_RW_COMPAT(dw, chan->dir, ch2_pwr_en, - BIT(0)); - break; - case 3: - SET_RW_COMPAT(dw, chan->dir, ch3_pwr_en, - BIT(0)); - break; - case 4: - SET_RW_COMPAT(dw, chan->dir, ch4_pwr_en, - BIT(0)); - break; - case 5: - SET_RW_COMPAT(dw, chan->dir, ch5_pwr_en, - BIT(0)); - break; - case 6: - SET_RW_COMPAT(dw, chan->dir, ch6_pwr_en, - BIT(0)); - break; - case 7: - SET_RW_COMPAT(dw, chan->dir, ch7_pwr_en, - BIT(0)); - break; - } - } - /* Interrupt unmask - done, abort */ - raw_spin_lock_irqsave(&dw->lock, flags); - - tmp =3D GET_RW_32(dw, chan->dir, int_mask); - tmp &=3D ~FIELD_PREP(EDMA_V0_DONE_INT_MASK, BIT(chan->id)); - tmp &=3D ~FIELD_PREP(EDMA_V0_ABORT_INT_MASK, BIT(chan->id)); - SET_RW_32(dw, chan->dir, int_mask, tmp); - /* Linked list error */ - tmp =3D GET_RW_32(dw, chan->dir, linked_list_err_en); - tmp |=3D FIELD_PREP(EDMA_V0_LINKED_LIST_ERR_MASK, BIT(chan->id)); - SET_RW_32(dw, chan->dir, linked_list_err_en, tmp); - - raw_spin_unlock_irqrestore(&dw->lock, flags); - - /* Channel control */ - SET_CH_32(dw, chan->dir, chan->id, ch_control1, - (DW_EDMA_V0_CCS | DW_EDMA_V0_LLE)); - /* Linked list */ - /* llp is not aligned on 64bit -> keep 32bit accesses */ - SET_CH_32(dw, chan->dir, chan->id, llp.lsb, - lower_32_bits(chan->ll_region.paddr)); - SET_CH_32(dw, chan->dir, chan->id, llp.msb, - upper_32_bits(chan->ll_region.paddr)); - } + if (first) + dw_edma_v0_core_ch_enable(chan); =20 dw_edma_v0_sync_ll_data(chan); =20 diff --git a/drivers/dma/dw-edma/dw-hdma-v0-core.c b/drivers/dma/dw-edma/dw= -hdma-v0-core.c index 156b1cc225091..31bbdc6a40642 100644 --- a/drivers/dma/dw-edma/dw-hdma-v0-core.c +++ b/drivers/dma/dw-edma/dw-hdma-v0-core.c @@ -194,6 +194,34 @@ static void dw_hdma_v0_write_ll_link(struct dw_edma_ch= an *chan, } } =20 +static void dw_hdma_v0_core_ch_enable(struct dw_edma_chan *chan) +{ + struct dw_edma *dw =3D chan->dw; + u32 tmp; + + /* Enable engine */ + SET_CH_32(dw, chan->dir, chan->id, ch_en, BIT(0)); + /* Interrupt unmask - stop, abort */ + tmp =3D GET_CH_32(dw, chan->dir, chan->id, int_setup); + tmp &=3D ~(HDMA_V0_STOP_INT_MASK | HDMA_V0_ABORT_INT_MASK); + /* Interrupt enable - stop, abort */ + tmp |=3D HDMA_V0_LOCAL_STOP_INT_EN | HDMA_V0_LOCAL_ABORT_INT_EN; + if (!(dw->chip->flags & DW_EDMA_CHIP_LOCAL)) + tmp |=3D HDMA_V0_REMOTE_STOP_INT_EN | HDMA_V0_REMOTE_ABORT_INT_EN; + SET_CH_32(dw, chan->dir, chan->id, int_setup, tmp); + /* Channel control */ + SET_CH_32(dw, chan->dir, chan->id, control1, HDMA_V0_LINKLIST_EN); + /* Linked list */ + /* llp is not aligned on 64bit -> keep 32bit accesses */ + SET_CH_32(dw, chan->dir, chan->id, llp.lsb, + lower_32_bits(chan->ll_region.paddr)); + SET_CH_32(dw, chan->dir, chan->id, llp.msb, + upper_32_bits(chan->ll_region.paddr)); + /* Set consumer cycle */ + SET_CH_32(dw, chan->dir, chan->id, cycle_sync, + HDMA_V0_CONSUMER_CYCLE_STAT | HDMA_V0_CONSUMER_CYCLE_BIT); +} + static void dw_hdma_v0_core_write_chunk(struct dw_edma_chunk *chunk) { struct dw_edma_chan *chan =3D chunk->chan; @@ -232,33 +260,11 @@ static void dw_hdma_v0_core_ll_start(struct dw_edma_c= hunk *chunk, bool first) { struct dw_edma_chan *chan =3D chunk->chan; struct dw_edma *dw =3D chan->dw; - u32 tmp; =20 dw_hdma_v0_core_write_chunk(chunk); =20 - if (first) { - /* Enable engine */ - SET_CH_32(dw, chan->dir, chan->id, ch_en, BIT(0)); - /* Interrupt unmask - stop, abort */ - tmp =3D GET_CH_32(dw, chan->dir, chan->id, int_setup); - tmp &=3D ~(HDMA_V0_STOP_INT_MASK | HDMA_V0_ABORT_INT_MASK); - /* Interrupt enable - stop, abort */ - tmp |=3D HDMA_V0_LOCAL_STOP_INT_EN | HDMA_V0_LOCAL_ABORT_INT_EN; - if (!(dw->chip->flags & DW_EDMA_CHIP_LOCAL)) - tmp |=3D HDMA_V0_REMOTE_STOP_INT_EN | HDMA_V0_REMOTE_ABORT_INT_EN; - SET_CH_32(dw, chan->dir, chan->id, int_setup, tmp); - /* Channel control */ - SET_CH_32(dw, chan->dir, chan->id, control1, HDMA_V0_LINKLIST_EN); - /* Linked list */ - /* llp is not aligned on 64bit -> keep 32bit accesses */ - SET_CH_32(dw, chan->dir, chan->id, llp.lsb, - lower_32_bits(chan->ll_region.paddr)); - SET_CH_32(dw, chan->dir, chan->id, llp.msb, - upper_32_bits(chan->ll_region.paddr)); - /* Set consumer cycle */ - SET_CH_32(dw, chan->dir, chan->id, cycle_sync, - HDMA_V0_CONSUMER_CYCLE_STAT | HDMA_V0_CONSUMER_CYCLE_BIT); - } + if (first) + dw_hdma_v0_core_ch_enable(chan); =20 dw_hdma_v0_sync_ll_data(chan); =20 --=20 2.43.0 From nobody Sat Jul 25 21:30:55 2026 Received: from DUZPR83CU001.outbound.protection.outlook.com (mail-northeuropeazon11012001.outbound.protection.outlook.com [52.101.66.1]) (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 9B35D33F8B7; Mon, 13 Jul 2026 17:03:57 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.66.1 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783962239; cv=fail; b=G7rPd/kL/zHpMkN79qpUQMGltU+l3AqyZ6CO9vKsx+BVV01dT3R7GEmrVvgdbDr7mHU7s4cEfo+90mcnLb9LrcPwmxBgruG+FMyJD2O7Db23FmJwfiqK+z8ZZudXAccE+EINAuNp27qV9OV9WVe9kF/rdQWnMMyYnRcJwQiApbA= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783962239; c=relaxed/simple; bh=CRItB+1fulewQ1KoXTqdqVMTtqDzIaLrROB9cMKEeHA=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=P1UyoIqKGb9k0SAnLkY/jaB3uS626DwVMMY5aVa7Z+6e5bUXTC8/YvW7fPxHPK6aTSgny+RlATBMpS/N4lNo7l8PIHXKQbvdte3lE0w6EeuvM6d2rak7ciVMK0J839lZaPOmptMU1bzOfRhH5cG6yt6rBDfMrMly4Bhi1w80ipg= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=oss.nxp.com; spf=pass smtp.mailfrom=oss.nxp.com; dkim=pass (2048-bit key) header.d=NXP1.onmicrosoft.com header.i=@NXP1.onmicrosoft.com header.b=WHxIG0aw; arc=fail smtp.client-ip=52.101.66.1 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=oss.nxp.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.nxp.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=NXP1.onmicrosoft.com header.i=@NXP1.onmicrosoft.com header.b="WHxIG0aw" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=dC51pwq7gtQytNZxFPXSYaaJkxuzsMpZeM37BaqcYz+HLif/nvHk1ZOHqzly0eZGN5keP1RBn3jVguodqyjpNymVvpbUv5oqlNo7GeIBo2cKXje73igYj5K1K1jDVPR0GB5QxYBRB1Kq7AjuhXyCAHVZBXzQe1NADUFKWaUF5v17WO8C6rZ8+LIMHGzaGpsfx49kljkgA51xtnUFSxdGjaSAfk34/m17C/r/RwOpysAg62SFOMv6Ak2cznZCBPTqo+zgW7JF6dAaueGHrK4ljC2RQm6ZyiGLfWQz7drEkxIo1UfnRYG/QG6dLXpzADKD2ecPb0Zyz+BPFUVWF3r/GQ== 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=A0HYdoCHDVVqPT2A/8bJ2VXDlGvMBZhfxuZvYBmiLeI=; b=JkBwaJ2AajcPPNRaskRwqdgGEjO3dtmVhuKz78dPprU/5iYIVdijFQxndgf2auqUJITwc/OWWGp2xjCwuEsfvFYXnYede8sxU6R8zCTA6MacJaHciutT7GYRhine4oog1q0ZF7t7xhy5zRssPbUBB9G/FSwyf5PEccwxA0mgzefgckOLjZkkKLWgFS3ETKqtvDVizkK+BKrqyIyqXG2OCo1AI8Sde/ReS8baxpgVeGfxUUeKXNfviaTxqGPy0jAm7pFrUWADF8D0ydhCIDBcQHKwjTjJDHmnBVo75998Jy/dt7+ry1+8NNa0Wp8Qw2cK1cI9C4q84idHVuaKEyLIPw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oss.nxp.com; dmarc=pass action=none header.from=oss.nxp.com; dkim=pass header.d=oss.nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=NXP1.onmicrosoft.com; s=selector1-NXP1-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=A0HYdoCHDVVqPT2A/8bJ2VXDlGvMBZhfxuZvYBmiLeI=; b=WHxIG0awEFwcDcaYeUn3yS6lD/xKnX8R3zew41qDLYZHs6gzDtHbkn/BlrhA04cZ0f4ePOgvSK9TxHhwGSLZRey6Z+RjV4UIUXSKO6ACMeB0bLn5bsGRIBvbiB8IWYZgfucAzxNOI+FtSvVgCLy2O6r2zPN3aQOkF9vkoFIf+eo6vd/jCap6sRyKKC3uUkZw/i4xpuX8Y9hkTogmpSzrMXGTgJr7SsUJCGOTEPe0QjU0ezc0K64+qu8yEXB5c964eu41O/3SJK+8Ci5HiF6A86t2+fae7jGchXygCcpTXT1aWqPiFH6sd4LI2MnybfNfK/bMA29sdAmlgF+uahmNFg== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=oss.nxp.com; Received: from GV2PR04MB11799.eurprd04.prod.outlook.com (2603:10a6:150:2cf::9) by PA1PR04MB10228.eurprd04.prod.outlook.com (2603:10a6:102:454::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.202.18; Mon, 13 Jul 2026 17:03:55 +0000 Received: from GV2PR04MB11799.eurprd04.prod.outlook.com ([fe80::2146:83a2:5329:b7c]) by GV2PR04MB11799.eurprd04.prod.outlook.com ([fe80::2146:83a2:5329:b7c%6]) with mapi id 15.21.0181.019; Mon, 13 Jul 2026 17:03:54 +0000 From: Frank.Li@oss.nxp.com Date: Mon, 13 Jul 2026 13:03:24 -0400 Subject: [PATCH v7 06/10] dmaengine: dw-edma: Add callbacks to fill link list entries Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260713-edma_ll-v7-6-6fb7498c901e@nxp.com> References: <20260713-edma_ll-v7-0-6fb7498c901e@nxp.com> In-Reply-To: <20260713-edma_ll-v7-0-6fb7498c901e@nxp.com> To: Manivannan Sadhasivam , Vinod Koul , Gustavo Pimentel , Kees Cook , "Gustavo A. R. Silva" , Manivannan Sadhasivam , =?utf-8?q?Krzysztof_Wilczy=C5=84ski?= , Kishon Vijay Abraham I , Bjorn Helgaas , Christoph Hellwig , Niklas Cassel Cc: dmaengine@vger.kernel.org, linux-kernel@vger.kernel.org, linux-hardening@vger.kernel.org, linux-pci@vger.kernel.org, linux-nvme@lists.infradead.org, Koichiro Den , imx@lists.linux.dev, "Verma, Devendra" , Frank Li , Devendra Verma X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1783962202; l=6462; i=Frank.Li@nxp.com; s=20240130; h=from:subject:message-id; bh=rs5l6wPLdrsI8W14mvik91/05jmfzlZQq4zCM/GjM8U=; b=rTiZt5ARSi/0Z414KBEz61nvT22Pa+bUgCSZlxEHLBeeOiLSFgkktW+z9KfNKii17LJ+nHjFg TMJPgsr9HDbBPUN6UTnZmeOk1fyTc80Lss80yGnWIFNF9W2j7vJ6xUI X-Developer-Key: i=Frank.Li@nxp.com; a=ed25519; pk=I0L1sDUfPxpAkRvPKy7MdauTuSENRq+DnA+G4qcS94Q= X-ClientProxiedBy: SA1PR04CA0016.namprd04.prod.outlook.com (2603:10b6:806:2ce::21) To GV2PR04MB11799.eurprd04.prod.outlook.com (2603:10a6:150:2cf::9) 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: GV2PR04MB11799:EE_|PA1PR04MB10228:EE_ X-MS-Office365-Filtering-Correlation-Id: bf5a6e3c-5280-4029-b1fa-08dee100b897 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|23010399003|7416014|376014|366016|19092799006|1800799024|921020|18002099003|22082099003|11063799006|56012099006; X-Microsoft-Antispam-Message-Info: fzzJZEXLAt0UJ8jBqFdtV9U2eL4qelCgF9Y8sSqsqRBkd12KWqWi4+UgmzgFXim8EzWWHKGtXm1TCal8iMsjZKAwjDrB/ovAILmHy/44UvRblOg/BlDa8FwjjqIiqWElFtXKkBSoeKDK+G3sJFbG69n9+FFO0/iOPA/05lDSVsvJzdtM0/Xzcr89AjOL1ZNlvHplI4WkN83w98AFzR09eHE7YQccoqPCiKblX/xNxPlbVA20TrYVr9TEtUf45XEljeRkPA8KXoZSLJhogLKq+yHxLIU1PvxKTIB8rNJkn0T16tLo4PLkXKh43pcQYzYfDiea5WzwLqcrHq5gSwkNXSfNyQrtFr4r2wuFMcylJdTCb3fhYOz/Yee1/hYCtY4isLmmrr478YDPuiG1QOSo3xMMxsZwyZQukyZwozpKmvRk1xgKAvp+3SN5UiU3PrdtXUq2vEe93xWb/+39PFSdkjlSiD3PwLhj+BynHANUMEXrzJYOa9AT0Udf9mPSFZLgbnzbCvv5BAFCFWP5+0arDEjVq6uQGAgdi5UX3rhUqnWQ3fuCpIW5MJ5nyqlZUYH45x4VlBT8DYfqijHsnvi8jUK3VRYg7YxMclnMpMV14vzqu2BCb2Z92/MviQhjnuPyM84Td2uOJeGxciV0kxZ+/hwCG+Na2iQwZOgs7DGYt1PMPdozItE3egOzgJOZcfQ1g+3SjlnxexciS2X8Oghsxw== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:GV2PR04MB11799.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(23010399003)(7416014)(376014)(366016)(19092799006)(1800799024)(921020)(18002099003)(22082099003)(11063799006)(56012099006);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?VU02L2puaW93U3JUWmZvT0Q0VE1ITSsraGZ6RTlpbERrN3lZazdERjBhUVBB?= =?utf-8?B?ZjZJYm9WV3AzL1hOZ2NsM2VCRjZaZ0VpaThIa2tRZHY2R0h2TmhZUUF0Y1pi?= =?utf-8?B?ZUtobTJFZGtKaWRvalBMNkRrSmdGUnkyMDNJVS9UdHhTU1pBS013eHFudklM?= =?utf-8?B?bHIwUVJJWU1yYjFPKzBHQzZWTG95L0dOWHBzUUM0S1ExT09YdVQvL3lNaHNp?= =?utf-8?B?Ymhhbkh4WnB4bjNLdXBTaStMZlVqWTlGQ0Y4Zk02cXFORFZPVHJVSlZMSEsy?= =?utf-8?B?bnNLZkE1cXNhUEJpbTl0S3R2NHhnRVhvdHI4cEc1Tjg5ZDBXQUlVcmJ4N3VJ?= =?utf-8?B?WVREY0ZmZ05xUkR2ZEIvYkhaOXdTUTlERUE0eTFYUWc3dnlYNEtDcitFVkww?= =?utf-8?B?LytiTmRnZVVmVkw0VXBxQnQ0MkNYR2w1d0trdHdvMjRNVGhONlloUmNNMnRD?= =?utf-8?B?ckVWcGxyQWJ5R3FhNDc3WkVpYlVyZDM0SUdRMTFvMGJMak9TK1h3cFdvaFpU?= =?utf-8?B?SGhaRU0wbEcwRUk1SXlPTE0wSmtGZFBjOFNWSTlSSWpxYWtuaEljd1ZFTUFl?= =?utf-8?B?Nzc1clZON0VNVzkvc3hGSVBIWEhVTjZCQXNEcTNhUVZqUGJHTHBSQmNFUENH?= =?utf-8?B?U1hxNFg2aXRzNUJZS1EzYWdWOElyUStlc1l1NlpzQjN6VURTdDRtQ2Y5dy93?= =?utf-8?B?UHVyaHB0TXg2SndlbElhb0VDYXMrcmVBQ0E5ai82bmtIUG9SOWNwajFUdTlE?= =?utf-8?B?YjAzWi84ODlDdmRRZHRvSFhWVEtRMlJUZjRqT3FBd3hvRDVGQ3ljQ1VLL3J2?= =?utf-8?B?TUhqV3RwaFBlc21wTUVVVjljL0RRek9hVkVzQVIvNWtWVWREVTdBYnN4Nktn?= =?utf-8?B?WTBaVysvNFQ2SWNTYUZvS2oyMk5JYzF3ZlpZWXJJTmxDUjkxQmtQM3ZHclVR?= =?utf-8?B?NEFsMnRQK2Y2T3FUa1B2L1RubkpCZ0xyVXR0WmtvNHN2ck5OUXV2ejJDUHJz?= =?utf-8?B?T2h1Q2Z1clI2RVFjd213dGoxSDR4VXVSZjVXejI3NHQ0aCs5dUM1TG5NM3lv?= =?utf-8?B?d1o0R2FGa0J2VVBCNUFBRmYzMmZwMlhPNTYwVmZDM28rbElLczJ2NEtTdzh4?= =?utf-8?B?MW9zUEZ1QUFYTUJUVFZ2TEdaaGZMZnFhREFHVmswa3BTUFhFYTd1YVF4dktY?= =?utf-8?B?ZStnM2pTMVcza1A2L1h2WWtvZkptVjhRTkhXQk56SmQ0dXpNbEhhTnJjcDVs?= =?utf-8?B?RUJSRHY1b0E0dWdwb2dYOUU3OWNDV0pHNytqeEtyemVjN1JmRVZINGEyNndo?= =?utf-8?B?cnlsaTljUiswdUorZzg4S2lRbmF0aGFtRHBsLzc1VFBJaXNlNTM4YS9iK0hl?= =?utf-8?B?MURLREw2bmFEU2hCMG82UEtMdWdBc2doTmFhUkZIdkdJZXBlRy93WldhTVRy?= =?utf-8?B?Q29qRkh3NWlKV3hJT05sSktPYzdsWjlXVFdWL0NZbEZFeFJYRkFOaW1GdUpp?= =?utf-8?B?MUN5S0Z1ZURXTkg4TnVITFNDQ05ZVnJSUWRuWnRmNEx2MEpJS3lFUytnd083?= =?utf-8?B?Y095NzlpUDNzOUVSSmdhWGtPOUhwQnplZ3FxS2huL2UyOUdMRG9tazh5MkF6?= =?utf-8?B?WGxSa0hBQjlxbmY1Zm5UbDBQU3hRSmR6cktlZHFIdnJNODRFSk9yZWJadURX?= =?utf-8?B?Z29IZTJaUDgwVGpQNit0cFQ1L3dKRVQ2MWEzOGI1TzltMVd5OHVyWmpKYjNx?= =?utf-8?B?cmE4YVJIYTZQNWJrTGYwSloxVytpT1pqQk0yMVlQRG5WNTg2b1JORCt2aDlX?= =?utf-8?B?b1Q3Nk1VTFNGM2lNMm5vNWNnNEw1T0tDMnlNcUpUNkRoMzhvTHFSRCtNa0l4?= =?utf-8?B?VE5mR1RxWE44OC9Md05lWkxjSGwrTkZjeStLZkRKc1RCUGU3THZWNVR3QUNl?= =?utf-8?B?eFBvNm0rVjR5bnJGRVNFZUZwMFdEcVQ0V3Rjc2JtSC84OXFWUDNtZ3BEck15?= =?utf-8?B?MVpoM2xIbCt4bytBQUlMK1JLaWpSMjB3NWZwTGJZZWY1OG02bVhZZEJoajlL?= =?utf-8?B?aHVhdXR0cS8xMnhwNzh3dzFVTTAzd1oyRnZORGtEMTcvaWIvNkNYWWE0QVlT?= =?utf-8?B?WTNtUGtLbVYyL0tSZXlqSU5CeHRSRi8yZnkyM1BlTkJMTWY1VVkvcTM1ZlZP?= =?utf-8?B?SXNoZ08rQVRxSWdrUnpzSzZ1ektLeDU4eTZMSzh3WkNCNlpKMXBQR1ZGbXZm?= =?utf-8?B?RzRBQ25pcHNyY0lWRXNDRWxINm1hNEdTMUlJVFo2b2dzQVFlWEw2SzFxcS9X?= =?utf-8?B?MGZDbU8vWlluTXVrbjV0NUFyNGdIa0gvUHhZOGdSalpXb1Rob0c0bzNZZjRi?= =?utf-8?Q?xp718kyHnbo0COqni482oxlon7Y9coqku8G8E?= X-OriginatorOrg: oss.nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: bf5a6e3c-5280-4029-b1fa-08dee100b897 X-MS-Exchange-CrossTenant-AuthSource: GV2PR04MB11799.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Jul 2026 17:03:54.8793 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 6jqdKAJK2LzIblZba/Fv0ft3g7HQ0OSPdyWHTUZA1oAvwbcAecsAZXU8n0D7sh90Wv/2RCWY+BsAT286KBW92o+jnU0bAkk/L8v0zKfroXFVLLwAojiqmDieiIiUX736 X-MS-Exchange-Transport-CrossTenantHeadersStamped: PA1PR04MB10228 From: Frank Li Introduce four new callbacks to fill link list entries in preparation for replacing dw_(edma|hdma)_v0_core_start(). Filling link list entries is expected to become more complex, and without this abstraction both eDMA and HDMA paths would need to duplicate the same logic. Add fill-entry callbacks so the code can be shared cleanly between eDMA and HDMA implementations. Tested-by: Koichiro Den Tested-By: Devendra Verma Signed-off-by: Frank Li --- Change in v4 - use argument in dw_(hdma|edma)_v0_core_ll_link(addr) to set link to addr report by sashiko - Add Koichiro tested by tags change in v2 - update commit message - use eDMA and HDMI - keep inline to avoid build warnings. dw-edma-v0-core.c also include dw-edma-core.h --- drivers/dma/dw-edma/dw-edma-core.h | 29 ++++++++++++++++++++++ drivers/dma/dw-edma/dw-edma-v0-core.c | 46 +++++++++++++++++++++++++++++++= ++++ drivers/dma/dw-edma/dw-hdma-v0-core.c | 38 +++++++++++++++++++++++++++++ 3 files changed, 113 insertions(+) diff --git a/drivers/dma/dw-edma/dw-edma-core.h b/drivers/dma/dw-edma/dw-ed= ma-core.h index b96089baf0f9c..bab4d49c92feb 100644 --- a/drivers/dma/dw-edma/dw-edma-core.h +++ b/drivers/dma/dw-edma/dw-edma-core.h @@ -126,6 +126,12 @@ struct dw_edma_core_ops { 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); void (*start)(struct dw_edma_chunk *chunk, bool first); + 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 (*ch_doorbell)(struct dw_edma_chan *chan); + void (*ch_enable)(struct dw_edma_chan *chan); + void (*ch_config)(struct dw_edma_chan *chan); void (*debugfs_on)(struct dw_edma *dw); void (*ack_emulated_irq)(struct dw_edma *dw); @@ -204,6 +210,29 @@ void dw_edma_core_ch_config(struct dw_edma_chan *chan) chan->dw->core->ch_config(chan); } =20 +static inline void +dw_edma_core_ll_data(struct dw_edma_chan *chan, struct dw_edma_burst *burs= t, + u32 idx, bool cb, bool irq) +{ + chan->dw->core->ll_data(chan, burst, idx, cb, irq); +} + +static inline void +dw_edma_core_ll_link(struct dw_edma_chan *chan, u32 idx, bool cb, u64 addr) +{ + chan->dw->core->ll_link(chan, idx, cb, addr); +} + +static inline void dw_edma_core_ch_doorbell(struct dw_edma_chan *chan) +{ + chan->dw->core->ch_doorbell(chan); +} + +static inline void dw_edma_core_ch_enable(struct dw_edma_chan *chan) +{ + chan->dw->core->ch_enable(chan); +} + static inline void dw_edma_core_debugfs_on(struct dw_edma *dw) { diff --git a/drivers/dma/dw-edma/dw-edma-v0-core.c b/drivers/dma/dw-edma/dw= -edma-v0-core.c index 8d38867cd9983..c0746e5351410 100644 --- a/drivers/dma/dw-edma/dw-edma-v0-core.c +++ b/drivers/dma/dw-edma/dw-edma-v0-core.c @@ -509,6 +509,48 @@ static void dw_edma_v0_core_ch_config(struct dw_edma_c= han *chan) } } =20 +static void +dw_edma_v0_core_ll_data(struct dw_edma_chan *chan, struct dw_edma_burst *b= urst, + u32 idx, bool cb, bool irq) +{ + u32 control =3D 0; + + if (cb) + control |=3D DW_EDMA_V0_CB; + + if (irq) { + control |=3D DW_EDMA_V0_LIE; + + if (!(chan->dw->chip->flags & DW_EDMA_CHIP_LOCAL)) + control |=3D DW_EDMA_V0_RIE; + } + + dw_edma_v0_write_ll_data(chan, idx, control, burst->sz, burst->sar, + burst->dar); +} + +static void +dw_edma_v0_core_ll_link(struct dw_edma_chan *chan, u32 idx, bool cb, u64 a= ddr) +{ + u32 control =3D DW_EDMA_V0_LLP | DW_EDMA_V0_TCB; + + if (!cb) + control |=3D DW_EDMA_V0_CB; + + dw_edma_v0_write_ll_link(chan, idx, control, addr); +} + +static void dw_edma_v0_core_ch_doorbell(struct dw_edma_chan *chan) +{ + struct dw_edma *dw =3D chan->dw; + + dw_edma_v0_sync_ll_data(chan); + + /* Doorbell */ + SET_RW_32(dw, chan->dir, doorbell, + FIELD_PREP(EDMA_V0_DOORBELL_CH_MASK, chan->id)); +} + /* eDMA debugfs callbacks */ static void dw_edma_v0_core_debugfs_on(struct dw_edma *dw) { @@ -540,6 +582,10 @@ static const struct dw_edma_core_ops dw_edma_v0_core = =3D { .ch_status =3D dw_edma_v0_core_ch_status, .handle_int =3D dw_edma_v0_core_handle_int, .start =3D dw_edma_v0_core_start, + .ll_data =3D dw_edma_v0_core_ll_data, + .ll_link =3D dw_edma_v0_core_ll_link, + .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, .debugfs_on =3D dw_edma_v0_core_debugfs_on, .ack_emulated_irq =3D dw_edma_v0_core_ack_emulated_irq, diff --git a/drivers/dma/dw-edma/dw-hdma-v0-core.c b/drivers/dma/dw-edma/dw= -hdma-v0-core.c index 31bbdc6a40642..16fe3ef43948d 100644 --- a/drivers/dma/dw-edma/dw-hdma-v0-core.c +++ b/drivers/dma/dw-edma/dw-hdma-v0-core.c @@ -348,6 +348,40 @@ static void dw_hdma_v0_core_ch_config(struct dw_edma_c= han *chan) SET_CH_32(dw, chan->dir, chan->id, msi_msgdata, chan->msi.data); } =20 +static void +dw_hdma_v0_core_ll_data(struct dw_edma_chan *chan, struct dw_edma_burst *b= urst, + u32 idx, bool cb, bool irq) +{ + u32 control =3D 0; + + if (cb) + control |=3D DW_HDMA_V0_CB; + + dw_hdma_v0_write_ll_data(chan, idx, control, burst->sz, burst->sar, + burst->dar); +} + +static void +dw_hdma_v0_core_ll_link(struct dw_edma_chan *chan, u32 idx, bool cb, u64 a= ddr) +{ + u32 control =3D DW_HDMA_V0_LLP | DW_HDMA_V0_TCB; + + if (!cb) + control |=3D DW_HDMA_V0_CB; + + dw_hdma_v0_write_ll_link(chan, idx, control, addr); +} + +static void dw_hdma_v0_core_ch_doorbell(struct dw_edma_chan *chan) +{ + struct dw_edma *dw =3D chan->dw; + + dw_hdma_v0_sync_ll_data(chan); + + /* Doorbell */ + SET_CH_32(dw, chan->dir, chan->id, doorbell, HDMA_V0_DOORBELL_START); +} + /* HDMA debugfs callbacks */ static void dw_hdma_v0_core_debugfs_on(struct dw_edma *dw) { @@ -366,6 +400,10 @@ static const struct dw_edma_core_ops dw_hdma_v0_core = =3D { .ch_status =3D dw_hdma_v0_core_ch_status, .handle_int =3D dw_hdma_v0_core_handle_int, .start =3D dw_hdma_v0_core_start, + .ll_data =3D dw_hdma_v0_core_ll_data, + .ll_link =3D dw_hdma_v0_core_ll_link, + .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, .debugfs_on =3D dw_hdma_v0_core_debugfs_on, .db_offset =3D dw_hdma_v0_core_db_offset, --=20 2.43.0 From nobody Sat Jul 25 21:30:55 2026 Received: from OSPPR02CU001.outbound.protection.outlook.com (mail-norwayeastazon11013071.outbound.protection.outlook.com [40.107.159.71]) (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 11360344052; Mon, 13 Jul 2026 17:04:03 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.159.71 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783962245; cv=fail; b=DPs4FXazPtkHl1C6eN4q3YtRx05iWIblW5T3Kv0qRJ8Sor9ExT1oAMMAdDOSr8HWgfAB9G7VCD6eYFSTc+6cGrfzcWApNwqNoOIYUFHZvfbJlp879DJ4bn81GN83wnG4rBPgzjsn52Nclm5ZVi7M7OAVRWOWOkSF+6AtzWm2bTY= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783962245; c=relaxed/simple; bh=XgU71pUT/KCeZU0U6ewuYFUOO25aUcdHqgL5XWxadbU=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=UHQS2SLTff8bNJrQnqfYkrRL+pvjyLur3fUvK1SvGHC1Gs1a1rz6IAEJyXpLt2K3O97bZCgYM1GGEcg4w1qcRMR/edwOYoJpZouDBRej8PVusa3hVfR/vWKRQsgtdkIYuXg6mz1XfUK85NI2Ob33DYQIPfJ1UD4SCQZXKUAYTRY= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=oss.nxp.com; spf=pass smtp.mailfrom=oss.nxp.com; dkim=pass (2048-bit key) header.d=NXP1.onmicrosoft.com header.i=@NXP1.onmicrosoft.com header.b=kpSjysxl; arc=fail smtp.client-ip=40.107.159.71 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=oss.nxp.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.nxp.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=NXP1.onmicrosoft.com header.i=@NXP1.onmicrosoft.com header.b="kpSjysxl" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=xmC+k+RsNq6TDjDpunNJxJXy1X4Vj3/CekBScjEN13GWOxZiW1PlmXwwq0e938n7ffk+AbwNUvEytmqNxhpXOsVDvfWDXMc1P8NwDCBT19tkO9bLkFc8S+4pG7unwqxh7ah9e3ooDD2ppqLiSprqYJ/vCVpD5NIaR+sB0GLFg0LJgAG4chVwXWaLIoIy6OvgK+DgEr3Vr2J1Gi0PTvbdI/dBg4tm1mkifIrWze63T2momwH65iIU8GtmS7o/u+uJ8cXsKPGP1etTBWh/OWrBpQLFEdmOfslLP1lr7/ZhCR3/ra1799AcPvq13QvORhGRf8i68w/EoOdDbnyeBojm/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=zuUzXrF9q5+NhxxCA45oJSm5gtJKgjn2+nefs1DTR7o=; b=ZrPYr+3v7UXCXNyoi5B/eT9OO+TelhvE13dg9XwOUXEoto58bnribjGhf1vKbEDGJRSJFTe1z5UVC/WRbJQAnwsc+t6chfksXZvo5LDNkOXwuPu/BOeP3pANRK9BxBh+VJy9I3WBibrZ0NV0v8EkI7cendAjv0DXVKif16vYO2eY/PpWq+h0pJi7eEIVhkPYR/yxOWnoWhvcPcD2e1U8ygRcLWYLYmciYts3JJStHv17toerMQSjmI4/e4suJTpyBajp4YuaAObTQ5SvsA35z7Q1XsYvHdqUWO7z2RIkS0jgcWqpJGhkeGma7DZIGBtSStXrVlVIk+UAy9ClikUZTg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oss.nxp.com; dmarc=pass action=none header.from=oss.nxp.com; dkim=pass header.d=oss.nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=NXP1.onmicrosoft.com; s=selector1-NXP1-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=zuUzXrF9q5+NhxxCA45oJSm5gtJKgjn2+nefs1DTR7o=; b=kpSjysxlM0542nfdNA50LFl8o1NTgqxOvjvqSxD5m0kGNdGdX4saXEdD4voThBM4e5/OXLZLOERN88EeMvImc/OFVthJSGeMPrTwwibciLY47Gn9sru+TfIkMFOqzFdwGsI6gahVTO4mskaUxjMZHsowyjRddDzG0Vvrcapn7qPYxR44VoQ7DWUsJ4e40gY3mTCaiYTA1l5Lyph5LjM47rhH2ZSDHzNM9PVH7wdHidx7q2+4yu8AZ40mE05qzGuDS8oK5ezrDyi0eMrQxGj3VPCPPYejILwC/9GabqyIAXhriuZ+VIDBvByn8ESUsHWCO/I8ukia+nrPw+mtWPFf8w== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=oss.nxp.com; Received: from GV2PR04MB11799.eurprd04.prod.outlook.com (2603:10a6:150:2cf::9) by PA1PR04MB10228.eurprd04.prod.outlook.com (2603:10a6:102:454::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.202.18; Mon, 13 Jul 2026 17:04:00 +0000 Received: from GV2PR04MB11799.eurprd04.prod.outlook.com ([fe80::2146:83a2:5329:b7c]) by GV2PR04MB11799.eurprd04.prod.outlook.com ([fe80::2146:83a2:5329:b7c%6]) with mapi id 15.21.0181.019; Mon, 13 Jul 2026 17:03:59 +0000 From: Frank.Li@oss.nxp.com Date: Mon, 13 Jul 2026 13:03:25 -0400 Subject: [PATCH v7 07/10] dmaengine: dw-edma: Add non_ll_start() callback Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260713-edma_ll-v7-7-6fb7498c901e@nxp.com> References: <20260713-edma_ll-v7-0-6fb7498c901e@nxp.com> In-Reply-To: <20260713-edma_ll-v7-0-6fb7498c901e@nxp.com> To: Manivannan Sadhasivam , Vinod Koul , Gustavo Pimentel , Kees Cook , "Gustavo A. R. Silva" , Manivannan Sadhasivam , =?utf-8?q?Krzysztof_Wilczy=C5=84ski?= , Kishon Vijay Abraham I , Bjorn Helgaas , Christoph Hellwig , Niklas Cassel Cc: dmaengine@vger.kernel.org, linux-kernel@vger.kernel.org, linux-hardening@vger.kernel.org, linux-pci@vger.kernel.org, linux-nvme@lists.infradead.org, Koichiro Den , imx@lists.linux.dev, "Verma, Devendra" , Frank Li , Devendra Verma X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1783962202; l=3734; i=Frank.Li@nxp.com; s=20240130; h=from:subject:message-id; bh=beK3LZn8ZMDqfLRn7/Lq3YRDZ54vqb5FL3Y8sq62qQw=; b=T+i4jeE0MYja9BXNUO6EdkcurMyHBDXvkdUCvlaL7S9hg9Hwv3ow/EKs5Q8HAiy+ku1Hnbkdc nPxj2L9vYGgC1HjNB+xVwCPNQRqjFVNPh6WPU9PPoZR/Avm1lfXyMz5 X-Developer-Key: i=Frank.Li@nxp.com; a=ed25519; pk=I0L1sDUfPxpAkRvPKy7MdauTuSENRq+DnA+G4qcS94Q= X-ClientProxiedBy: SN7PR18CA0020.namprd18.prod.outlook.com (2603:10b6:806:f3::14) To GV2PR04MB11799.eurprd04.prod.outlook.com (2603:10a6:150:2cf::9) 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: GV2PR04MB11799:EE_|PA1PR04MB10228:EE_ X-MS-Office365-Filtering-Correlation-Id: db18bd55-6394-4042-c067-08dee100bb7a X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|23010399003|7416014|376014|366016|19092799006|1800799024|921020|18002099003|22082099003|11063799006|56012099006; X-Microsoft-Antispam-Message-Info: 0Spi9dR2aB42glj5VqOwlrY8x9FAv4HUeObc+ebvQifpZaJiRehGsU85Y9ktGOm57qrvsT3919lrVNxO5O0GsveLnmMg8Yxvws48SXR52yskJgmtFo4UUAycOW3nK9YacQGnGKe8P89zGOAw2Q8tXUXMg31qEV5QbnGFgAy2r2mcLrbjFSFNmizLZ7pCt4L2UrfCVtbcXojuJdt3qlHu+gIzXLt+xiHjTrFSeZWFvRbmyUCputA+qwr+gpu/aC+8cLBnhy5HRFJ3yWTMt1b7HmnymLJwRS6JrmbkQhH0X8zuIuYhORfHUNZ9OzVRtzOuxqfi74nteHPk/h3bvSKekyaqwyLpC+q0VvG8WsM1XIgkhMCoTqoufGLy/orC0raq8Yx/mc/YiTBdBbMOGzhxj9B9m3eLljUeFSoM6bGSDSo0+O1AN3vr/Beu0c3SLFbuxSUOtm2XJYNYIcHyPXfbndlMiIPFdeFh6DpONwvLgG7C+2xr3ri6O0bOUjtcHVTDdtPVpRp5WhAeQJoU5p15kqmEKVHrZ/hGMnwVlfAZP05OdX/rRP2L31saqu5ozF1AvflOgii1SArTlCZu3C48MsNQl/pHBp58GZIkRkCHM94dDZQM3JTYLme5sM26u+DB1saecktMvuM1hClKxTyVZtWJubSdGIvyI1EiaRXtt/0kkvwmnrePTOafsFGTbUPIKe26se9nhZRpaSj88KRq3g== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:GV2PR04MB11799.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(23010399003)(7416014)(376014)(366016)(19092799006)(1800799024)(921020)(18002099003)(22082099003)(11063799006)(56012099006);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?TDJmWllISkRLaHN3d1J4aTd6QjRLMlVHajhlR3lTRXhqVEtwcUVrLzVlUUVm?= =?utf-8?B?ajV1WTVRSlVXbFl4MlppZHd6VGpHOEhjYzJZMHNQRkhYaFFobzBVQkNVWG01?= =?utf-8?B?ei9LbmhpMmtBQ0VXR2hML3RoeUd1TlF4ZFl2Q0JjUGMyakNHZjhGZkE3OFY2?= =?utf-8?B?OGVUZExUQ3pKNDEwQ1grODVDWmF4ZC9HSlYrTDBvRC9tM3Y5REZPVlZXdHdD?= =?utf-8?B?RkNEOG43UWxDSDdiSWdoL05Ncll2cDlJcFNYbEpHVVNEZ0tsZTVaUDlUK2dy?= =?utf-8?B?ZG9LUFp5UkdtS1AydHh4cEw2bjFmaEZ2YWRGdm9uSk9vTkpiZ3BSK3dkZHhX?= =?utf-8?B?NWlXL2YzdmZ2ZndhaVFBNXhwK3ZNM0llMVZSb1EvMHJEV0hlWXVlK0o1cXEv?= =?utf-8?B?d0pqYUlyTTQvU2JQdXNnVkwvalQ2OGRJTXUzYWZFOWVjK0EzTVZiK2QvVVdr?= =?utf-8?B?NHJxdVlKYW9rb3FObktSVUZBb2N6Q290VEZVZEhPRStudm5SUlFFTDdoUUM3?= =?utf-8?B?KzdxelhvQ1RpQWxzeCtrb2tDM0xnRGZpWDlrUEc2UmFtUWVBS0pHUlhoekhz?= =?utf-8?B?Y1dkUTVvNFhQOEFCTk5Fb1A5WGFOaTdLWkVHY1hmNmlTNUVxU1NxSGIyOXBX?= =?utf-8?B?ZThKaUNKeTJBN3pmT01Tak5FQUR5akxsREpLUDZ5NGdaQ1gxbE5lWjFweWNo?= =?utf-8?B?Y0wrSDg1RExVby83ZnJCZ21PTzdub3EwTlB2LzhQbzZjWVM4T01raUlGNXA2?= =?utf-8?B?TnVDd0cvbVpacXpNS0NSbUZRbWFJRVJ5MFExU3pFVTliMkFnSEhxbUtzemFJ?= =?utf-8?B?YzUzQUJzZmpqcW0vN0RCaW12STJEcGdSNExCVnoxMW1DNjgzb2N5SFk0Smp4?= =?utf-8?B?M1JUSXlKQ1Zwdm5IcE00Z0pxeURxTmdEdktqandMOEEyVW5mS3psem96a0ky?= =?utf-8?B?MXNFelNuTVBlanREQVlzbnF2U2JzWWJ4MkZxajRVd3pOSDVRWmcwMjBPR2Yz?= =?utf-8?B?QWl1a3poalhwV3hUU3RpTXliOVQvazBWK2JOdUtWZ0tMbHppM2liUkxZOU5a?= =?utf-8?B?SEwxbVduQXdGcXZVd0krb01pbkIwbE9mRTJpSGlmYmNQT1ZlZURZbHhuK0dQ?= =?utf-8?B?a0d0SnZJbERtd1EwY3QwNjdmcmk5bkN0Yk5VODQxUkh5VUFEQk9sc1VmMHlZ?= =?utf-8?B?Uyt3VUVRYmxWbmZTREx4cFNiSUpYWktPZ0JadWYvbVhaZFlzMThHT1NVdWhP?= =?utf-8?B?TW1GcXk3MGJCeTE3eU5xZTYxbm5IZTVwRlQxZ0hyeEVHUjBuai83QzREN0JT?= =?utf-8?B?OFFoWG5mMEpKTVliTFZLZFpwYzhBMCtaOEdwQWlOdC9CMkxhNmdWOEJIMll1?= =?utf-8?B?S0w5R2EvVzVlRGsyQzJ6THJacHQ4UGlkWE9JL3d6NEREbTIveWg1emlvckti?= =?utf-8?B?RC9ubzN6SWplNkZaS3JRRmtibWhzL1JMZ2NpL2hjUzlSUm9HdUlPOThaMGRP?= =?utf-8?B?bmpnOC8reXIwUDdvT2hkVDZ4V3RZLzJFcnptN1RSRlkzeUZGNjhRZkpleGxM?= =?utf-8?B?cHFpSTQyL2s0U0JldHJpQ2RpVFQyVDkrZ3pSMjV1OTE1LzlkdlZ1anppQ2dr?= =?utf-8?B?a3BDS2krdEJES01mMk04eW9tYk53eU1vay9PZWNHMFBSMGxHKzhtNlJWMjdu?= =?utf-8?B?bDQzU3o2NzJYbEJCVDhFNEw5QmdxV3NXNFpla3FYeDh3ZEpTZVFZNW15OG43?= =?utf-8?B?V3ZlbGxxNjBnUW50QklXVm0vUyttbDFCMDFzdTRPTnc5M3huTG1JS2RjVnEz?= =?utf-8?B?SUxnSGh0WVloZ3RkcjFReWVLVGUySkgwMGRqQ3lIUXpKSjlZcnJ0aVI0QmRh?= =?utf-8?B?THJyak1SQ2x0L1lhZGQwU0tBcThzRjNjdUpESmxLOE0rOHh3K3dLU200REti?= =?utf-8?B?WWRhWGt2cWpTSnkxRmpPT255a09xVU9rZTNGbkkvLzhmQlF4WE01ckFsNlRa?= =?utf-8?B?Nm1OMFQyNkRKaG1TaVUrTHZ5M2hzVFJBNHljWHFtN3liR1ZWaGlJR2tibWh6?= =?utf-8?B?S1hVdzQ3Z3MxU3B1OXhiZVRkRDAxYWpTVjhySDFmTklJZXByN2J0ejN3bkhB?= =?utf-8?B?RjN3YUdCUExNeGRIeXZHcmwrclh3SUNHaGxsbmNQTCtuZ1VEaUNHNUtvR3hZ?= =?utf-8?B?cjBpRkQvS1lUWG84VjdQOVBUTXQvNFBBQ1hnRjErUTZMdCtHNkx2SjlyNm0x?= =?utf-8?B?bFZoNXR1dXd1UktuL3RwUXBWZjRydUk3M1RZL1phK09PSWZnWUovcW1OWEdI?= =?utf-8?B?WnNvekZES1VPR2pzdEIvUS93N0l6YUlqTExXSUZOcEhTUlBXZ1FIRlk2N0N6?= =?utf-8?Q?j57ltaewvm+3vUPZvImv63efDgXrXEhhCcwAx?= X-OriginatorOrg: oss.nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: db18bd55-6394-4042-c067-08dee100bb7a X-MS-Exchange-CrossTenant-AuthSource: GV2PR04MB11799.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Jul 2026 17:03:59.7519 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: kI7r+nua+XR9wFq6jD/1sc2iTW1ByKqzCf+uZncixtZbgt3V0sb1QL/lKzulHaMIGz5xDokp/y0aZLS6sWoBEvq/Q3kjy34VqpK6f0+XW057cGBH/uP5whDf/lGaqS7y X-MS-Exchange-Transport-CrossTenantHeadersStamped: PA1PR04MB10228 From: Frank Li Add a non_ll_start() callback and move the common non-linked-list channel handling into the EDMA core so it can be shared by both the EDMA and HDMA. Prepare for the upcoming reorganization of the burst and chunk structures. Tested-by: Koichiro Den Tested-By: Devendra Verma Signed-off-by: Frank Li --- change in v4 - add koichiro tag --- drivers/dma/dw-edma/dw-edma-core.h | 12 +++++++++++- drivers/dma/dw-edma/dw-hdma-v0-core.c | 23 ++++------------------- 2 files changed, 15 insertions(+), 20 deletions(-) diff --git a/drivers/dma/dw-edma/dw-edma-core.h b/drivers/dma/dw-edma/dw-ed= ma-core.h index bab4d49c92feb..e18d6e827c2c9 100644 --- a/drivers/dma/dw-edma/dw-edma-core.h +++ b/drivers/dma/dw-edma/dw-edma-core.h @@ -126,6 +126,7 @@ struct dw_edma_core_ops { 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); void (*start)(struct dw_edma_chunk *chunk, bool first); + 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); void (*ll_link)(struct dw_edma_chan *chan, u32 idx, bool cb, u64 addr); @@ -201,7 +202,16 @@ dw_edma_core_handle_int(struct dw_edma_irq *dw_irq, en= um dw_edma_dir dir, static inline void dw_edma_core_start(struct dw_edma *dw, struct dw_edma_chunk *chunk, b= ool first) { - dw->core->start(chunk, first); + if (chunk->chan->non_ll) { + struct dw_edma_burst *child; + + child =3D list_first_entry_or_null(&chunk->burst->list, + struct dw_edma_burst, list); + if (child) + dw->core->non_ll_start(chunk->chan, child); + } else { + dw->core->start(chunk, first); + } } =20 static inline diff --git a/drivers/dma/dw-edma/dw-hdma-v0-core.c b/drivers/dma/dw-edma/dw= -hdma-v0-core.c index 16fe3ef43948d..641a513bc52e7 100644 --- a/drivers/dma/dw-edma/dw-hdma-v0-core.c +++ b/drivers/dma/dw-edma/dw-hdma-v0-core.c @@ -272,18 +272,12 @@ static void dw_hdma_v0_core_ll_start(struct dw_edma_c= hunk *chunk, bool first) SET_CH_32(dw, chan->dir, chan->id, doorbell, HDMA_V0_DOORBELL_START); } =20 -static void dw_hdma_v0_core_non_ll_start(struct dw_edma_chunk *chunk) +static void dw_hdma_v0_core_non_ll_start(struct dw_edma_chan *chan, + struct dw_edma_burst *child) { - struct dw_edma_chan *chan =3D chunk->chan; struct dw_edma *dw =3D chan->dw; - struct dw_edma_burst *child; u32 val; =20 - child =3D list_first_entry_or_null(&chunk->burst->list, - struct dw_edma_burst, list); - if (!child) - return; - SET_CH_32(dw, chan->dir, chan->id, ch_en, HDMA_V0_CH_EN); =20 /* Source address */ @@ -324,16 +318,6 @@ static void dw_hdma_v0_core_non_ll_start(struct dw_edm= a_chunk *chunk) HDMA_V0_DOORBELL_START); } =20 -static void dw_hdma_v0_core_start(struct dw_edma_chunk *chunk, bool first) -{ - struct dw_edma_chan *chan =3D chunk->chan; - - if (chan->non_ll) - dw_hdma_v0_core_non_ll_start(chunk); - else - dw_hdma_v0_core_ll_start(chunk, first); -} - static void dw_hdma_v0_core_ch_config(struct dw_edma_chan *chan) { struct dw_edma *dw =3D chan->dw; @@ -399,7 +383,8 @@ static const struct dw_edma_core_ops dw_hdma_v0_core = =3D { .ch_count =3D dw_hdma_v0_core_ch_count, .ch_status =3D dw_hdma_v0_core_ch_status, .handle_int =3D dw_hdma_v0_core_handle_int, - .start =3D dw_hdma_v0_core_start, + .start =3D dw_hdma_v0_core_ll_start, + .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, .ch_doorbell =3D dw_hdma_v0_core_ch_doorbell, --=20 2.43.0 From nobody Sat Jul 25 21:30:55 2026 Received: from DUZPR83CU001.outbound.protection.outlook.com (mail-northeuropeazon11012020.outbound.protection.outlook.com [52.101.66.20]) (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 86A38346791; Mon, 13 Jul 2026 17:04:07 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.66.20 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783962249; cv=fail; b=JLIBWyYbojp8htQNKCceAeQ+o/KUzyAet1z04DJTh2qmSot3QWNPZQZdcyC3x6b3zbud+Z/nO4fT0uz0VcEeA/XWMmEGHK9rabbEejt7GcIfLGB2ocMQhzs/4rrRwcGXU5ad9qiBSizyH12aECdRo7pRnb/8Tt5QBtT/b9r5deM= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783962249; c=relaxed/simple; bh=bCs8dWmGpCsLwHPhagEXebof8+UynoVPA2GSNARy5Yo=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=h+7OL4UTeOVJqlWnjIx69QTLjfqUNy/fRcRPvRGAvK4lb/nF99bveoh5H9FQ/XIKjpY8OQ3/SZqkj5rDkpG9OGEvtdKLPLJltPP6ednLrj8MzL8vHJaUCSujZ3hERXP//2iMnoo0frWLc60MK4xveVvRf9/Hwnkp671gAOG+798= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=oss.nxp.com; spf=pass smtp.mailfrom=oss.nxp.com; dkim=pass (2048-bit key) header.d=NXP1.onmicrosoft.com header.i=@NXP1.onmicrosoft.com header.b=vw2d8nZY; arc=fail smtp.client-ip=52.101.66.20 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=oss.nxp.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.nxp.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=NXP1.onmicrosoft.com header.i=@NXP1.onmicrosoft.com header.b="vw2d8nZY" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=R9Tjq5PFYPSy6bbv0aEgAKX9LbflncdfLL2IF9iRw5YvV7BLzTqBotka0kQ8MY8HBe68GVYB6XKqh6NXJY/g02/pLcBwwGKZ071IVUo0/NDmk8oYqvBxrHZ2KHhzm8YAFnE4i3AdqGUSAQIKIk9t209RoQBmlHpCd75HynAeWn5mT5vPl1Aw1MgWje+ZT/pasq9dELpIhTGsHQQ/6o0oWl7+cX6dEA7WAg3S+HCsQb+On6Z2GT8ChDuXLrFw5BYMGLTIKEU5IB1DaK6PXExh1Uh15pzBRCHx7vQ6DFtA/kle7AMx4HYow5QMbF/f3EWhbYlTEwvWTWHDm/1ZQcygTw== 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=41j4i2J8jTE8wl1mRck/rqqTuxk85pIUeCNvbJh71/s=; b=XQUs4UkYSNyVwET1zgKirwf+VCLssWuKeqA1NjMhhlxKwEVUA2VErXLSB1E4LL6equ3d+vkd5xWksyG6BrX4JNq6Re50nuFhjIaLBM46mRopXbDqUuwvxTZLUD9uxiDQ1PsD4Kpd4IQOKptBOpgvvSjwciK7iR0oAtqha4ydrRTr0ls+sVV2ieHmbgoA5MTqy9a7gIHauLctB3UTRPtLMabMlDMoU04r4yk19Py5d1wEIPBezDoOUMS7ej4dEiIanIlgPt96CC9J/R5DnYiEeajsoF1zUlVOQRPdNrT+HEhyOENYEhPAaynMz4xtwYGFQlj41RLlMilxFjx60ks6QQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oss.nxp.com; dmarc=pass action=none header.from=oss.nxp.com; dkim=pass header.d=oss.nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=NXP1.onmicrosoft.com; s=selector1-NXP1-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=41j4i2J8jTE8wl1mRck/rqqTuxk85pIUeCNvbJh71/s=; b=vw2d8nZYXJN9m3vFu7VxxFHPd+tgTlS4hs5N6Z3kIoPvnxTADBYSa73qkIAR/0QANeBA8bG/I/igYNkf3ezr/XRXEKaUsOfJmnt5LNEhKKFlXLEqR+CLcWR/wghTXVdd9Z/mQh1XsmAc2Ib5jznJAvYrMQUIvPB2V61TxilJvW/H6CkZ44UJVk9qAMO/PQ71xIWN2gP1WwLzUWC6zxmA3VXr6a7qao9wXV9316NUPgadGM1V1JrRXTftqs/8VtF8FbZp9E/rOz+XjuQmYDH0SYETxi1n3beZYDtrpg3SoRjcVlG65tgWsp+p8kYAn/5FR6qXIcjuJIT3jAhqUGnU/A== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=oss.nxp.com; Received: from GV2PR04MB11799.eurprd04.prod.outlook.com (2603:10a6:150:2cf::9) by PA1PR04MB10228.eurprd04.prod.outlook.com (2603:10a6:102:454::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.202.18; Mon, 13 Jul 2026 17:04:04 +0000 Received: from GV2PR04MB11799.eurprd04.prod.outlook.com ([fe80::2146:83a2:5329:b7c]) by GV2PR04MB11799.eurprd04.prod.outlook.com ([fe80::2146:83a2:5329:b7c%6]) with mapi id 15.21.0181.019; Mon, 13 Jul 2026 17:04:04 +0000 From: Frank.Li@oss.nxp.com Date: Mon, 13 Jul 2026 13:03:26 -0400 Subject: [PATCH v7 08/10] dmaengine: dw-edma: Use common dw_edma_core_start() for both eDMA and HDMA Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260713-edma_ll-v7-8-6fb7498c901e@nxp.com> References: <20260713-edma_ll-v7-0-6fb7498c901e@nxp.com> In-Reply-To: <20260713-edma_ll-v7-0-6fb7498c901e@nxp.com> To: Manivannan Sadhasivam , Vinod Koul , Gustavo Pimentel , Kees Cook , "Gustavo A. R. Silva" , Manivannan Sadhasivam , =?utf-8?q?Krzysztof_Wilczy=C5=84ski?= , Kishon Vijay Abraham I , Bjorn Helgaas , Christoph Hellwig , Niklas Cassel Cc: dmaengine@vger.kernel.org, linux-kernel@vger.kernel.org, linux-hardening@vger.kernel.org, linux-pci@vger.kernel.org, linux-nvme@lists.infradead.org, Koichiro Den , imx@lists.linux.dev, "Verma, Devendra" , Frank Li , Devendra Verma X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1783962202; l=7835; i=Frank.Li@nxp.com; s=20240130; h=from:subject:message-id; bh=iEo6c3L0nFKwZa590SO8zR4RfzzxZwQtYzu3blwy25Q=; b=XY7XBWBflD600BYUH4f6lc5stqNFZ/Z4K/IALrw2Oi1xlvcgkO66VsKHgNE8iVtJ4qXDcAnl9 vhYGictvd/uBqqPLhSCi3VlvsnUxenBwET/2ILHaZW4DEWpk2USrXml X-Developer-Key: i=Frank.Li@nxp.com; a=ed25519; pk=I0L1sDUfPxpAkRvPKy7MdauTuSENRq+DnA+G4qcS94Q= X-ClientProxiedBy: SN7P222CA0005.NAMP222.PROD.OUTLOOK.COM (2603:10b6:806:124::22) To GV2PR04MB11799.eurprd04.prod.outlook.com (2603:10a6:150:2cf::9) 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: GV2PR04MB11799:EE_|PA1PR04MB10228:EE_ X-MS-Office365-Filtering-Correlation-Id: c73dc6de-0bed-409d-8a75-08dee100be66 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|23010399003|7416014|376014|366016|19092799006|1800799024|921020|6133799003|18002099003|22082099003|11063799006|56012099006; X-Microsoft-Antispam-Message-Info: /P6Y57eWESxMmY4kljmNFquR8HhovDaGut/83R0Yjz4iokE5WIqzOlRHpdK+//Yjer4mHTPpM4UX/321OxHMqRJJRLQLDoox40x7SvJ5THsSOzeZ+J6Nb4hpLRhYxLNOk4h9PKSQiqzhWo5DDgPSMccNkXYUNBHTYIXQyGdrGFYjUBEg4ohlA2Zz5XNsbM6jxLD4kb11trIxFiJpCRl/qKUk8Tb2F5coc28T8W77F1hahsdd34CMuR2nOFEATOhqAvy0ve5VXHtAgNeFuezUSYPn64k29FiejE4hovJ0q/ti1iWEaKUmXU90r3+Yv5Ve+Qx479lmvnQaIx+AwlyAZeKbelP7od0NONnzAH8tBAZI1SGcoqgtiii0tyEW/Eljy3JXcQO6VlfKEHAAGInbIoWz69vzsEMAe8Fe225yfNd5vLSAOsjKLI2fQmjyjuOJp9FldAx+9GGkg4xbqAQ5U/URgBeua9zs81+qSJuSa/BDxovonzifA2CX+KjO3v4lJnRcrEH1LR5AgHE8o7/p9EbEABjFBJZ4JdN+2yPn7lJlaKo+pee8rGNxDmudb3i9mO1zlthFoRms7lWcia7Mm/TRZb/md+bPnsJ2rQFPPrA27XEqyfS9duTIn0XvvBmUIx02BdPvf7W1sjivBo+67A/fKb01n84jMv+aYOigdzovIVxLxndpgakmpWPhvK93PDVMPyDd4HZoWouLCtnA5A== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:GV2PR04MB11799.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(23010399003)(7416014)(376014)(366016)(19092799006)(1800799024)(921020)(6133799003)(18002099003)(22082099003)(11063799006)(56012099006);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?d2dBcnBsZTJIbVBQa0J3c2JoeHhTeTN5NXZXYVhwb1ZsWmpYQXE0ck1SSFVH?= =?utf-8?B?R1EvVStJY01sdEJVcVJZUWtNRWdoY05mWkp5NFROU3lQOEtIaFYzZDgxLzFW?= =?utf-8?B?bUNtMWd4M1k2dnFYM0tubGFaN3dSdFExaTVzSy9NZktzME5LSlZWSTIweE5Z?= =?utf-8?B?c2pjR1lFZ3d1ajFNeUJVZmRYdHpyejh0UDRBdC81V1BxMjNBcGhwTGkrNWor?= =?utf-8?B?QktpRFVQOSs1LzF2ZUNzRytXUklFd3JnL3dvYWg3WVhtNFZnRUJjZWhVMm9X?= =?utf-8?B?WFdKZXZwYjJrcFhoQ1NWcXBZSTlleTNrWFUxaUwxQkppdHRHZHpRQllvSW9B?= =?utf-8?B?aXR0VnlBV1QrdTFaR3Evb01kT3dXT0R4bGNENWpaRjJNTE56T0ZUNkZISVhL?= =?utf-8?B?TGlDdU5NOHo4eW5HZlpGd1crWkhxYVN0OEYzV1JCWjBhc014STEzL3laSmpU?= =?utf-8?B?aTNYblZNRmxRTjEvMUk3TUxCQTh1K2dZQStnOXFnaGo4clo4TDRXRG5pMUgv?= =?utf-8?B?eDlNVU10M2pDMGs5cXN3NUlEMjlaVnF6VFF4VldyVjcvODhJQnZxc1U5WEU4?= =?utf-8?B?Z0tyVU04Vy9WbGZJSGNtQ2NjQ0JrTiswWUJUaldFL2pmR2xYc3hBN0ZyRnR3?= =?utf-8?B?K3djQzEzVHRPenFxQWQyNmR0NStTZjkrcFpuMWJnM095MXM4ZEg5ak1Nanl1?= =?utf-8?B?akhRUDlJSStLU01WUWZuZkJ2OVdZd09Zc3MwMWp2TE5TTFlUTXlHRHR0dEZr?= =?utf-8?B?SVNxMGJmOEJtZldPQ3hFTm1BY05sdlZaTDZ1Z0tPL1lQOHFsd1JtWnRVS2tp?= =?utf-8?B?YXJ1Z25pNkNzc21GNUtaRmt0RWxsUzVVeDlHQzNwQzJJMHhGSFRDaDNnamc2?= =?utf-8?B?WlBSQ0RZQkV1T1Z6ZytIQWVOYWg5ZWhjQU0vUUkwYmRHK3kvSUFvSmIyb3gy?= =?utf-8?B?NVhpWjNMTHAyMEJaWlBWVVhrNEU3QU1Wa1FsQ0xZbEM2OUZjNEVWOTViWFY4?= =?utf-8?B?OFFFeHhpZU4renRHYVJEQ2lxOWpQQzZ2Z0dXcTVvYjFXSUNlTTFucGZzRktl?= =?utf-8?B?UVBpUE0rRmJ0Rng2UEU5Rkg2OWlmNjlBSitKb0luZXQvWndJRXNnSWJIMG5K?= =?utf-8?B?NVZQWXBoZC81RUc4VjlGVWdxUUhONS9Cay8xSUExTDA1ckk4M012OENGcW0z?= =?utf-8?B?Qm9BN0NuaU81cGgrWDNieVFESTFvSVpVVUlqTG4zVEk4aE1qd3BMNU1uODFv?= =?utf-8?B?cXE3Q0JPN0paUVVTNjNCUVNmT21BSldoTzlLYVo2YU52c0lkY3ZiT21RVG1k?= =?utf-8?B?K2JxSkxGd1ViM3BCYXpBYk1mS2tFb1hOblFoZnN2c3ZHQzBPQXUrOHF3SWsx?= =?utf-8?B?VHBwN003N2tDN0ZOU29pQ1htUTNSMlJtL1VnajdkcjhwYjdidEFESVlrdTNP?= =?utf-8?B?dm04dnZsQmFmNW5NZ3B4aitJbElRZUJBaFNwVzdpZXQyNUYzWG1VMzFEOFdU?= =?utf-8?B?SFJ0SlE3MDJpZytwbmRNREV1M1pZU2lNUW5nVVY0OTB2em14NGJoVTczN1lK?= =?utf-8?B?ZzQvOENkL0VLWHZycmlKMVBHNTY3ZDRIVmVWbXZYSWMxVzNlM25EeXE2ZHR1?= =?utf-8?B?ZE9kNkZGOGFFdWdBeE1ObGlSZUtxajdmNXNwc1g5Nk1JMStQL0I5bC9kZ0pk?= =?utf-8?B?VnNIaXZNZlZXTFpwckJFeG1BUVArZkpIVHpnS0tUMFdFN2ZzVkhwZzNZMmxY?= =?utf-8?B?aVZnSC9lZ0p0eG9DWHF1M0NjOXZyNjdSSWZsTXlaYndkVk1lUmFrblA5UjBz?= =?utf-8?B?SmxHcUNWVGwzR2lNem10RGhVYXNkNnJLUlZodjc2clpHeVRZcVBxUFBZR1Fl?= =?utf-8?B?Q0RPWXI0ckZNdVlnQVNaOGlaa0JrTVdETExNU3loQ0lTL2FHSnNVbXhPSGlQ?= =?utf-8?B?QlBERjRVelpNRVI3VE8zYXlVNTQ3OEk2TitudWwyZnpkeXlDMWxVOGpya1I2?= =?utf-8?B?ZTM0SmNRK0dyTlNiMTVJKzlqc2xoWG9kRjhOZXY5YW56YVc1Y1lZRVFxUkxP?= =?utf-8?B?eWVTYnBCQ29LR3hQa0l1UmZ2YTFORFdkZTFHYTVLcDBneDNuRzhLa25FZkY0?= =?utf-8?B?VTdHcjhXWThSMERORmJzWURXbTRHQmxvUWJsaTlNanZvT2lsVVd6QURQN25n?= =?utf-8?B?Q1VGNmh1d0Zrb1VsQUwzQ3M5aGw4OFExOWd5Q2cwL1hramkyTFVpQW1BVnBR?= =?utf-8?B?eUF4QjhDS3ljUGtXL1V1RjJWZW5hOThJdUpMeHdTZkFBNnBxUzVHK1RiMC9U?= =?utf-8?B?UG44TitUS1Avd2tzZ3NaWlg0NDFnNmhkSmR4NTVhZFlTM3FneGtoQ1R6OWNH?= =?utf-8?Q?5avhFcbsGCJiraRhWLddBUQ3SWWBmwhPsEBBb?= X-OriginatorOrg: oss.nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: c73dc6de-0bed-409d-8a75-08dee100be66 X-MS-Exchange-CrossTenant-AuthSource: GV2PR04MB11799.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Jul 2026 17:04:04.6011 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: l8cAlXHKz4bk7PiA8M75NfuwUt1JOHHe7ejYk3KYbypXEWmjJNRNlXILjuTGaoMM3keoI026qsmr3HM+0q/zyLP4/UL/K78oWSIjQteDdEp9KIyJSxEr/jC7XglOY9Mx X-MS-Exchange-Transport-CrossTenantHeadersStamped: PA1PR04MB10228 From: Frank Li Use common dw_edma_core_start() for both eDMA and HDMA. Remove .start() callback functions at eDMA and HDMA. Tested-by: Koichiro Den Tested-By: Devendra Verma Signed-off-by: Frank Li --- change in v4 - collect koichiro tag change in v2 - use eDMA and HDMA --- drivers/dma/dw-edma/dw-edma-core.c | 32 +++++++++++++++++++++-- drivers/dma/dw-edma/dw-edma-core.h | 16 ------------ drivers/dma/dw-edma/dw-edma-v0-core.c | 48 -------------------------------= ---- drivers/dma/dw-edma/dw-hdma-v0-core.c | 37 --------------------------- 4 files changed, 30 insertions(+), 103 deletions(-) diff --git a/drivers/dma/dw-edma/dw-edma-core.c b/drivers/dma/dw-edma/dw-ed= ma-core.c index 2652ad8e7a8f6..f52d9fd18e573 100644 --- a/drivers/dma/dw-edma/dw-edma-core.c +++ b/drivers/dma/dw-edma/dw-edma-core.c @@ -163,9 +163,37 @@ static void vchan_free_desc(struct virt_dma_desc *vdes= c) dw_edma_free_desc(vd2dw_edma_desc(vdesc)); } =20 +static void dw_edma_core_start(struct dw_edma_chunk *chunk, bool first) +{ + struct dw_edma_chan *chan =3D chunk->chan; + struct dw_edma_burst *child; + u32 i =3D 0; + int j; + + if (chan->non_ll) { + child =3D list_first_entry_or_null(&chunk->burst->list, + struct dw_edma_burst, list); + if (child) + chan->dw->core->non_ll_start(chunk->chan, child); + return; + } + + j =3D chunk->bursts_alloc; + list_for_each_entry(child, &chunk->burst->list, list) { + j--; + dw_edma_core_ll_data(chan, child, i++, chunk->cb, !j); + } + + dw_edma_core_ll_link(chan, i, chunk->cb, chan->ll_region.paddr); + + if (first) + dw_edma_core_ch_enable(chan); + + dw_edma_core_ch_doorbell(chan); +} + static int dw_edma_start_transfer(struct dw_edma_chan *chan) { - struct dw_edma *dw =3D chan->dw; struct dw_edma_chunk *child; struct dw_edma_desc *desc; struct virt_dma_desc *vd; @@ -183,7 +211,7 @@ static int dw_edma_start_transfer(struct dw_edma_chan *= chan) if (!child) return 0; =20 - dw_edma_core_start(dw, child, !desc->xfer_sz); + dw_edma_core_start(child, !desc->xfer_sz); desc->xfer_sz +=3D child->xfer_sz; dw_edma_free_burst(child); list_del(&child->list); diff --git a/drivers/dma/dw-edma/dw-edma-core.h b/drivers/dma/dw-edma/dw-ed= ma-core.h index e18d6e827c2c9..27415f3a2d04b 100644 --- a/drivers/dma/dw-edma/dw-edma-core.h +++ b/drivers/dma/dw-edma/dw-edma-core.h @@ -125,7 +125,6 @@ struct dw_edma_core_ops { 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); - void (*start)(struct dw_edma_chunk *chunk, bool first); 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); @@ -199,21 +198,6 @@ dw_edma_core_handle_int(struct dw_edma_irq *dw_irq, en= um dw_edma_dir dir, return dw_irq->dw->core->handle_int(dw_irq, dir, done, abort); } =20 -static inline -void dw_edma_core_start(struct dw_edma *dw, struct dw_edma_chunk *chunk, b= ool first) -{ - if (chunk->chan->non_ll) { - struct dw_edma_burst *child; - - child =3D list_first_entry_or_null(&chunk->burst->list, - struct dw_edma_burst, list); - if (child) - dw->core->non_ll_start(chunk->chan, child); - } else { - dw->core->start(chunk, first); - } -} - static inline void dw_edma_core_ch_config(struct dw_edma_chan *chan) { diff --git a/drivers/dma/dw-edma/dw-edma-v0-core.c b/drivers/dma/dw-edma/dw= -edma-v0-core.c index c0746e5351410..7b4933c66f9f2 100644 --- a/drivers/dma/dw-edma/dw-edma-v0-core.c +++ b/drivers/dma/dw-edma/dw-edma-v0-core.c @@ -379,36 +379,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_core_write_chunk(struct dw_edma_chunk *chunk) -{ - struct dw_edma_burst *child; - struct dw_edma_chan *chan =3D chunk->chan; - u32 control =3D 0, i =3D 0; - int j; - - if (chunk->cb) - control =3D DW_EDMA_V0_CB; - - j =3D chunk->bursts_alloc; - list_for_each_entry(child, &chunk->burst->list, list) { - j--; - if (!j) { - control |=3D DW_EDMA_V0_LIE; - if (!(chan->dw->chip->flags & DW_EDMA_CHIP_LOCAL)) - control |=3D DW_EDMA_V0_RIE; - } - - dw_edma_v0_write_ll_data(chan, i++, control, child->sz, - child->sar, child->dar); - } - - control =3D DW_EDMA_V0_LLP | DW_EDMA_V0_TCB; - if (!chunk->cb) - control |=3D DW_EDMA_V0_CB; - - dw_edma_v0_write_ll_link(chan, i, control, chan->ll_region.paddr); -} - static void dw_edma_v0_sync_ll_data(struct dw_edma_chan *chan) { /* @@ -423,23 +393,6 @@ static void dw_edma_v0_sync_ll_data(struct dw_edma_cha= n *chan) readl(chan->ll_region.vaddr.io); } =20 -static void dw_edma_v0_core_start(struct dw_edma_chunk *chunk, bool first) -{ - struct dw_edma_chan *chan =3D chunk->chan; - struct dw_edma *dw =3D chan->dw; - - dw_edma_v0_core_write_chunk(chunk); - - if (first) - dw_edma_v0_core_ch_enable(chan); - - dw_edma_v0_sync_ll_data(chan); - - /* Doorbell */ - SET_RW_32(dw, chan->dir, doorbell, - FIELD_PREP(EDMA_V0_DOORBELL_CH_MASK, chan->id)); -} - static void dw_edma_v0_core_ch_config(struct dw_edma_chan *chan) { struct dw_edma *dw =3D chan->dw; @@ -581,7 +534,6 @@ static const struct dw_edma_core_ops dw_edma_v0_core = =3D { .ch_count =3D dw_edma_v0_core_ch_count, .ch_status =3D dw_edma_v0_core_ch_status, .handle_int =3D dw_edma_v0_core_handle_int, - .start =3D dw_edma_v0_core_start, .ll_data =3D dw_edma_v0_core_ll_data, .ll_link =3D dw_edma_v0_core_ll_link, .ch_doorbell =3D dw_edma_v0_core_ch_doorbell, diff --git a/drivers/dma/dw-edma/dw-hdma-v0-core.c b/drivers/dma/dw-edma/dw= -hdma-v0-core.c index 641a513bc52e7..4bf5a441afbfd 100644 --- a/drivers/dma/dw-edma/dw-hdma-v0-core.c +++ b/drivers/dma/dw-edma/dw-hdma-v0-core.c @@ -222,26 +222,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_core_write_chunk(struct dw_edma_chunk *chunk) -{ - struct dw_edma_chan *chan =3D chunk->chan; - struct dw_edma_burst *child; - u32 control =3D 0, i =3D 0; - - if (chunk->cb) - control =3D DW_HDMA_V0_CB; - - list_for_each_entry(child, &chunk->burst->list, list) - dw_hdma_v0_write_ll_data(chan, i++, control, child->sz, - child->sar, child->dar); - - control =3D DW_HDMA_V0_LLP | DW_HDMA_V0_TCB; - if (!chunk->cb) - control |=3D DW_HDMA_V0_CB; - - dw_hdma_v0_write_ll_link(chan, i, control, chunk->chan->ll_region.paddr); -} - static void dw_hdma_v0_sync_ll_data(struct dw_edma_chan *chan) { /* @@ -256,22 +236,6 @@ static void dw_hdma_v0_sync_ll_data(struct dw_edma_cha= n *chan) readl(chan->ll_region.vaddr.io); } =20 -static void dw_hdma_v0_core_ll_start(struct dw_edma_chunk *chunk, bool fir= st) -{ - struct dw_edma_chan *chan =3D chunk->chan; - struct dw_edma *dw =3D chan->dw; - - dw_hdma_v0_core_write_chunk(chunk); - - if (first) - dw_hdma_v0_core_ch_enable(chan); - - dw_hdma_v0_sync_ll_data(chan); - - /* Doorbell */ - SET_CH_32(dw, chan->dir, chan->id, doorbell, HDMA_V0_DOORBELL_START); -} - static void dw_hdma_v0_core_non_ll_start(struct dw_edma_chan *chan, struct dw_edma_burst *child) { @@ -383,7 +347,6 @@ static const struct dw_edma_core_ops dw_hdma_v0_core = =3D { .ch_count =3D dw_hdma_v0_core_ch_count, .ch_status =3D dw_hdma_v0_core_ch_status, .handle_int =3D dw_hdma_v0_core_handle_int, - .start =3D dw_hdma_v0_core_ll_start, .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, --=20 2.43.0 From nobody Sat Jul 25 21:30:55 2026 Received: from AS8PR04CU009.outbound.protection.outlook.com (mail-westeuropeazon11011007.outbound.protection.outlook.com [52.101.70.7]) (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 B7E5B3451CC; Mon, 13 Jul 2026 17:04:15 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.70.7 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783962258; cv=fail; b=R5ddRlcB811kHFjtIF/ARdL45zuWWPvpyUXBxM6vjud3p08TAS8QRQ1j1z4OVBIMZzEyYz7SgXZzn0pERMN10/gA54A9/NZsRlThTLrvsJ/CZEHE+Fs4RHOV7S8k0FxNUsym1+FFg0LKVqVOyEabAt05SoolDA08IyU7zlKcW6w= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783962258; c=relaxed/simple; bh=WcasGRwXS4tGBntr8l/pZRkjKm3/6TUvGZkMIvf260M=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=if26125wEFsZPdoX2HkNzFBg0su4JrN8GERdKQdKvEiCwLFoOpH5jCj7St6SSxJgUdHFFdFwun/OcloWsW/d61hcmP8xCCYaERrxLhSAZxB6W20//e0WqKupKhmb2ez4NILRMQiPWDtC6PnB81L4VzaCnFu9V4S/dW/ESCTUE3I= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=oss.nxp.com; spf=pass smtp.mailfrom=oss.nxp.com; dkim=pass (2048-bit key) header.d=NXP1.onmicrosoft.com header.i=@NXP1.onmicrosoft.com header.b=NgvL8Aen; arc=fail smtp.client-ip=52.101.70.7 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=oss.nxp.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.nxp.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=NXP1.onmicrosoft.com header.i=@NXP1.onmicrosoft.com header.b="NgvL8Aen" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=JO3hBbZ6guc8wjM07kFWYFV+y9hmhS6acbC+Ienkn2NY9la5Ym9EKCjTf75OffMsabuuoaDSgcuDrailsntQHsDApprOxVK5LYtxw5Cyn45E7qg4Vc6j5eBKfrFmOml20SSIwNWONSqPT2Hn+TNd4C9BGQSYj80zgO1EggduESEFxN6NyZs5cAISgumXnfHMW+G+1y159t84g0Vmv+bO9izjfpf/NpIQWoCD0OA83EOuAP7FWzTLsMJD9dVRlr9Qw06mJvr4kOx8nncQKW3M2iFU2Vp72PlziN0oXrcqz/RNKz9tqtf59OD3i6xzJyVPESfe0iSJ6J1pr+LGgJAVlA== 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=aVb5QdCd1+vq0mawbB2lEK3nqqNvHiB3vMQrQDBteLM=; b=QXFjuAa8tk3zkpxtv3cGe8RCIhrv50kf3iH0emUZ+OBVEiYFswfAy31jqXwnJyOf3j91kn9vHVFbq7yb2ZtQapUlB6DUD/SraUu3MnZV3qndKfWq5qlGuHVkTQ7SncQ+sEes6Yn53fN+njaCfttrY3IgKI8adHah8KoWDTKKKBItHGWsRAoA4xvwl8eAGOThrEJCYu2t6R7dLEClBKUN6c6HtULP2yCApGgN2LBVcK/KlBZyIs+uF7s+brIyUZuh/kA+rUhI2Tw2fE6PXtLFkpNqxtK8Siq+kkzDNQGiNGdRJVRUj6OS7371nCItFqnssZmgUgeer3HmR8enjxzt6Q== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oss.nxp.com; dmarc=pass action=none header.from=oss.nxp.com; dkim=pass header.d=oss.nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=NXP1.onmicrosoft.com; s=selector1-NXP1-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=aVb5QdCd1+vq0mawbB2lEK3nqqNvHiB3vMQrQDBteLM=; b=NgvL8AenBTR203W2ZP0A3DeIEltscQ6ooSaq4PBEo7jyoZfhClNVneKDDvYXJ7MSuG7xizhm6JKNmWaD87eEaiPQ3cnB21lJaCT7mfAKEjf1EFQRMrLNv8Z+CEJ+Dr07don8W0KQRUqMUy9t1qs7x9yqYe+iGVImo1IwFPo3KtMy2Kc1SSB0sfHlvOKKZzkCi+uMO+AG3M9HvOD4CeR3/xxMtA+AHruk6haZM4odO5URqWfUF5OpYY60SPpBFaV6WaQ9uAsTH29/toa91zCv/MUJRNQ/5spXZ8Lx+EVMjgcYsVriQZ6NGGaITn3YBlbC/sm/5DsTIIW11jufDhdc3Q== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=oss.nxp.com; Received: from GV2PR04MB11799.eurprd04.prod.outlook.com (2603:10a6:150:2cf::9) by PA1PR04MB10228.eurprd04.prod.outlook.com (2603:10a6:102:454::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.202.18; Mon, 13 Jul 2026 17:04:09 +0000 Received: from GV2PR04MB11799.eurprd04.prod.outlook.com ([fe80::2146:83a2:5329:b7c]) by GV2PR04MB11799.eurprd04.prod.outlook.com ([fe80::2146:83a2:5329:b7c%6]) with mapi id 15.21.0181.019; Mon, 13 Jul 2026 17:04:09 +0000 From: Frank.Li@oss.nxp.com Date: Mon, 13 Jul 2026 13:03:27 -0400 Subject: [PATCH v7 09/10] dmaengine: dw-edma: Use burst array instead of linked list Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260713-edma_ll-v7-9-6fb7498c901e@nxp.com> References: <20260713-edma_ll-v7-0-6fb7498c901e@nxp.com> In-Reply-To: <20260713-edma_ll-v7-0-6fb7498c901e@nxp.com> To: Manivannan Sadhasivam , Vinod Koul , Gustavo Pimentel , Kees Cook , "Gustavo A. R. Silva" , Manivannan Sadhasivam , =?utf-8?q?Krzysztof_Wilczy=C5=84ski?= , Kishon Vijay Abraham I , Bjorn Helgaas , Christoph Hellwig , Niklas Cassel Cc: dmaengine@vger.kernel.org, linux-kernel@vger.kernel.org, linux-hardening@vger.kernel.org, linux-pci@vger.kernel.org, linux-nvme@lists.infradead.org, Koichiro Den , imx@lists.linux.dev, "Verma, Devendra" , Frank Li , Devendra Verma X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1783962202; l=8343; i=Frank.Li@nxp.com; s=20240130; h=from:subject:message-id; bh=9GJ8FbtVyhi/XUXTaNKKA7UjMTGkE8Fwsbh7PswC91k=; b=Ktr/HPoWHGPzQ0UbG6UwUxYHWUg0l8VtvFRNmazzHOQNLjTfAuuK1Yv+3ksGBOhx5xwGssvz7 lzczQwa4n3cBy7/UPwchICl+OJ97CWqMoOrO8Qzj/HaY3jEpiTbOT/Q X-Developer-Key: i=Frank.Li@nxp.com; a=ed25519; pk=I0L1sDUfPxpAkRvPKy7MdauTuSENRq+DnA+G4qcS94Q= X-ClientProxiedBy: SA9PR13CA0062.namprd13.prod.outlook.com (2603:10b6:806:23::7) To GV2PR04MB11799.eurprd04.prod.outlook.com (2603:10a6:150:2cf::9) 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: GV2PR04MB11799:EE_|PA1PR04MB10228:EE_ X-MS-Office365-Filtering-Correlation-Id: a54d84a0-1b5f-4e6f-b61c-08dee100c169 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|23010399003|7416014|376014|366016|19092799006|1800799024|921020|18002099003|22082099003|11063799006|56012099006; X-Microsoft-Antispam-Message-Info: kOWId4nE0EqeA0uOFmOEBodQhIMb6vNuDYCV5KB8JH2eOVA2pz5OHKcyvpFaX6LxTFEweOiQTUaHMuE43YvZ4IFP5o10w3LW5n67LJk2yrSY4A7xNSCUmwG6sE9sTHzN3gJ1i+wrv3LJ5pITTIlGzPf3aZHPajjXxpNwkQiaUVsO13AFis9IWcbq/7t2b8MHSVrlKe++W4NO19DzWCpuD8gCEJd57afNJrINq8mVgJ0fsHn75/9+hYfyIcZuxCZ1cFsVqNr8Cm2xwJMfY60Of3tZTGu+BA/o9nUr+n9cEG0o8SfSlnS/g+bqzD3jsSmhP6lmPG/SXfEeQORVxov2EPevyXrRr6e6hNlHzK60k65FczIpivLZqd1jD6IDXhLl5q602DG9/xS0ZPwF9zL+l0q5zxhjRy6o8wb+MJs+rSidUY9XDpmH71sAbfE15eBaLIw6BWzlHJk5+eVgrI/JCr4q7liQ3HA+KEFROIdua/Jp/Q6zP9aP2F6HSXSLCkBBxXH6GbJ7NSjLWk6JKU5z2h1VlAJhzfkqfO8xyrzpd2NJyuEMyABOuyV2n7qKTEeeEeNFunwXLxdZP73R2VdFqrD85UdZLmnU07x8VyPZmdcEMf9R6+pazfuW50rQ4GE721PJIf3i6cM62vXkFj8L8bGugzobAhtphDAPbU1tbzdyz8cqG+SHdPcBk9CDGGGceRz9ba3cKihlUqKIF1Mg4A== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:GV2PR04MB11799.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(23010399003)(7416014)(376014)(366016)(19092799006)(1800799024)(921020)(18002099003)(22082099003)(11063799006)(56012099006);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?VGJ4bURnOE54UGNpQ0EyRkhUVjNHaEdjR2JDT3dZL3Nscm9jM05mWTIzL0Vy?= =?utf-8?B?WVBSTFluRjgxNnRhbS9hOVNJblJWWXIzcFJvZ2hmZEM2QU1YcHVpQ24zWUxK?= =?utf-8?B?a01ub0Q1WUlPL2ZndWNod1Q3aXRzN0xhVzJzRFkrOVIzazhuZHZackx0Mlc3?= =?utf-8?B?QW84R0hPTjVEMGhCb0U2emdRaHRudGxBWTdpLzhYblh2ejVpRTlHUWtRQjZJ?= =?utf-8?B?SXBrdDJiNVFpK0FtU2JtaGlBZmhQR3FKSGs1N2F2SHk4RFhlNUxHTExjWTZn?= =?utf-8?B?MUZNMEl3elAxYlpYbmoyTmh4VFJlS2lpQ2xUT2VpQU1HcXB1YTJQWjRlanNm?= =?utf-8?B?V2IxbWd3U01IeUVuNUpwUDdIbDNIOUtLVFhyOVZKVERrNEkxZWxxSmhyKzJi?= =?utf-8?B?Rlp1cE9IbzFDUEJSVFFNZjNkemRMQWxxWWlEWTl1S1NPb0wrcSt3REtHc01Q?= =?utf-8?B?eTF5dElUVjlxd1ZpakJvRUNqV1NCWFVkaklsODFadXRHRnlRa0RmYVZtNk9C?= =?utf-8?B?aXdrM3VWS2VEbmpCOEQvbXcrYm5sNi9BNDZVekQwR3ZtNTAvZG9ZVDVBUmRU?= =?utf-8?B?UVdZV1BzOXJWaGsvdVhDb1JUUTJBUDJySmc2ZU8wSHdpeElxNW8wMWExcE5P?= =?utf-8?B?dGY0VE54d0ZWNldLOUh1MGU5U3c2UEdmVXFCNXp4YXJnTlNHRTAvL1hKY21P?= =?utf-8?B?RWF2SFVTOU5pNGpFaVR4UlNKbDZTdHNQMHloa3hlamtiN0tSZFlnaHhRMUZT?= =?utf-8?B?eGxWRXBENUhnM1hxSlYxc2FBbExJMGZXOEF6eFMwWEJpdFBhbEdoT1JXb2c0?= =?utf-8?B?SFdUWVNyZm1VNjl6SUdGS2hxaUY2K0NaRjhKZjR0UHJ6RVBzOWN0T2ROcGpY?= =?utf-8?B?eU1iMHEvSTg2NE1tS1FSQzRzWFJlSnBzMXYxbEROSmZTS3BFeHJxeVc2TmNR?= =?utf-8?B?Y29TVGhJRjRFKzRORzhFc3hrUUdad0JzQ2FaNCtxY2JZSVdCUVNoVTF6ZVJV?= =?utf-8?B?U3pCQ05WSHFGVDBwbUZGemtzelkyUzNMeE1JcXJ5QitLRDEyVEsrdVV1MTZX?= =?utf-8?B?a2tYa0t6ZnZQeUtOZzlhYzNrNWpvMGsyVGxabWhWdzZmSHgwV1pJTmdCK2Ez?= =?utf-8?B?VUlmNWJvVUdOM3l6MFNQcUpzc09TQjFrMTZUUFBONkNZQkVYdjMvNWh2V0pY?= =?utf-8?B?cWV3M2RxYi9PRGZiSmgrcjg4dlVGclk4M2MxdjlSdVZ3ZjZucFlMeUtySm9a?= =?utf-8?B?S3E3YURublpPYlVBT2lXcExvcW01QnEyQWI5MlB3d0hwQUdhTFpic1RNVDlj?= =?utf-8?B?WlBETDZQRGxKMk8ycC9aUE02eDFNRlpTWlVtSGY4WjRzRkYvMUNTTlBkYk9E?= =?utf-8?B?dmVQMlNIYndXN3pDcmJ4MnZjd0I5aklwNEtISUJKSDBPVDBuRkoxcWd4ckp5?= =?utf-8?B?UlZyZEIxWEFMNjZQMWdYYTVWK2ZHZXUvQi9ZdjMvaVNQTnk0OFdDNEM3elhq?= =?utf-8?B?YTZsT3Z3K2EwL1FHVzErS2YrKzRXSzlSNTJ3d043bm9Ka2tDS1NkM3ZNSjBO?= =?utf-8?B?WHdKZnFPQVZ6ZDcvU0k4dnJCTUZ0QnN2c1ZydkpHMW5FRXZsUlVCVU1OQzZu?= =?utf-8?B?TGRQWmVyaERVRkVNSU9za3hpL3oyY0N4QUZOdkV0OVlTZ1BUeHhPa3cwQWxu?= =?utf-8?B?ZDgvb2plcnFQdWI1cWNMbXNXWVcwR2hQOWQ1anRvY0JEWFE3cHJxaUR4WkRM?= =?utf-8?B?ZXJYYTErdjNNaGV4ME1pVmUrQlhhN09pY0dKcXViOFlxVzd1UFpOUVQvekVw?= =?utf-8?B?L0UrcGRjS3poZCtYSER2MzVzREZ0YmFnRlZGWkxVZEd6dVduNjNPSzF2Yk5W?= =?utf-8?B?T2tsWXpVQkhxVEluMmRXNWRPNTZhWUpvMzZINk9jTC8zeWV4U2NFTktFZGo1?= =?utf-8?B?MXBNWDlWV2pvUEhHV2pFbm0wUk1jS1h6TnhlWGNOWDBuOUVkT3pDN2d2MlNB?= =?utf-8?B?MkJnL0MxMy9PbDYwNHZ6MHVnK2FjMk9Ib01uNG9rcGZyWUdrOVJWRllGNXU1?= =?utf-8?B?YUJ5VjBDZVhrUXpFVVJBUHlPNVE0WndzQ2MrbEV4T1czNlVnVGFzMTRLWEZq?= =?utf-8?B?R09idzVMNGxueTE5NjZNWVVPQ2hObzM5eU5VQ3JDaUM3TDVrSlVQM3ZNcmpJ?= =?utf-8?B?WDlQaTdXanZxNTRSNWhIY1NyUVF6cHNzSi85NUVuQ2oydUZDS3dWRDJzVDVn?= =?utf-8?B?ZFo0VXNtZmJpcW9VcTVYTTNaK0JiLzZ1VjJ4U0hzdnIvK1lKK2NldjhsKzR6?= =?utf-8?B?bjN0YUp6RjlvVi9YWWZoQUJVNVF0TjY2VjBVK1huTS9JdWlzakVkZDFzRWtQ?= =?utf-8?Q?NaUM6ST/YwIBPe83bfWLMcYQELonmj8yD6kh8?= X-OriginatorOrg: oss.nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: a54d84a0-1b5f-4e6f-b61c-08dee100c169 X-MS-Exchange-CrossTenant-AuthSource: GV2PR04MB11799.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Jul 2026 17:04:09.6068 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 0apEUcGXxuxvp8jeaI72RjUlU2Sf0cESWUrUyss2+Yd8qkkBB3dSpfaNH4xcROa35d0d+zKd2jWlrYtiFTbTNnGwbCXLnaPtbDRAdPFrzy6KLFNndFDHp7VF3WJG6JGU X-MS-Exchange-Transport-CrossTenantHeadersStamped: PA1PR04MB10228 From: Frank Li The current descriptor layout is: struct dw_edma_desc *desc =E2=94=94=E2=94=80 chunk list =E2=94=94=E2=94=80 burst list Creating a DMA descriptor requires at least three kzalloc() calls because each burst is allocated as a linked-list node. Since the number of bursts is already known when the descriptor is created, a linked list is not necessary. Allocate a burst array when creating each chunk to simplify the code and eliminate one kzalloc() call. Tested-by: Koichiro Den Tested-By: Devendra Verma Signed-off-by: Frank Li --- Change in v7 - One more place, use bursts_max instead of chan->ll_max because non-ll mode only allow 1 burst pre-transfer. Found by sashiko AI. change in v6 - use bursts_max instead of chan->ll_max because non-ll mode only allow 1 burst pre-transfer. Found by sashiko AI. change in v4 - collect Koichiro tag --- drivers/dma/dw-edma/dw-edma-core.c | 120 +++++++--------------------------= ---- drivers/dma/dw-edma/dw-edma-core.h | 9 +-- 2 files changed, 26 insertions(+), 103 deletions(-) diff --git a/drivers/dma/dw-edma/dw-edma-core.c b/drivers/dma/dw-edma/dw-ed= ma-core.c index f52d9fd18e573..c028011cc61ca 100644 --- a/drivers/dma/dw-edma/dw-edma-core.c +++ b/drivers/dma/dw-edma/dw-edma-core.c @@ -40,38 +40,15 @@ u64 dw_edma_get_pci_address(struct dw_edma_chan *chan, = phys_addr_t cpu_addr) return cpu_addr; } =20 -static struct dw_edma_burst *dw_edma_alloc_burst(struct dw_edma_chunk *chu= nk) -{ - struct dw_edma_burst *burst; - - burst =3D kzalloc_obj(*burst, GFP_NOWAIT); - if (unlikely(!burst)) - return NULL; - - INIT_LIST_HEAD(&burst->list); - if (chunk->burst) { - /* Create and add new element into the linked list */ - chunk->bursts_alloc++; - list_add_tail(&burst->list, &chunk->burst->list); - } else { - /* List head */ - chunk->bursts_alloc =3D 0; - chunk->burst =3D burst; - } - - return burst; -} - -static struct dw_edma_chunk *dw_edma_alloc_chunk(struct dw_edma_desc *desc) +static struct dw_edma_chunk *dw_edma_alloc_chunk(struct dw_edma_desc *desc= , u32 nburst) { struct dw_edma_chan *chan =3D desc->chan; struct dw_edma_chunk *chunk; =20 - chunk =3D kzalloc_obj(*chunk, GFP_NOWAIT); + chunk =3D kzalloc_flex(*chunk, burst, nburst, GFP_NOWAIT); if (unlikely(!chunk)) return NULL; =20 - INIT_LIST_HEAD(&chunk->list); chunk->chan =3D chan; /* Toggling change bit (CB) in each chunk, this is a mechanism to * inform the eDMA HW block that this is a new linked list ready @@ -81,20 +58,10 @@ static struct dw_edma_chunk *dw_edma_alloc_chunk(struct= dw_edma_desc *desc) */ chunk->cb =3D !(desc->chunks_alloc % 2); =20 - if (desc->chunk) { - /* Create and add new element into the linked list */ - if (!dw_edma_alloc_burst(chunk)) { - kfree(chunk); - return NULL; - } - desc->chunks_alloc++; - list_add_tail(&chunk->list, &desc->chunk->list); - } else { - /* List head */ - chunk->burst =3D NULL; - desc->chunks_alloc =3D 0; - desc->chunk =3D chunk; - } + chunk->nburst =3D nburst; + + list_add_tail(&chunk->list, &desc->chunk_list); + desc->chunks_alloc++; =20 return chunk; } @@ -108,53 +75,23 @@ static struct dw_edma_desc *dw_edma_alloc_desc(struct = dw_edma_chan *chan) return NULL; =20 desc->chan =3D chan; - if (!dw_edma_alloc_chunk(desc)) { - kfree(desc); - return NULL; - } =20 - return desc; -} + INIT_LIST_HEAD(&desc->chunk_list); =20 -static void dw_edma_free_burst(struct dw_edma_chunk *chunk) -{ - struct dw_edma_burst *child, *_next; - - /* Remove all the list elements */ - list_for_each_entry_safe(child, _next, &chunk->burst->list, list) { - list_del(&child->list); - kfree(child); - chunk->bursts_alloc--; - } - - /* Remove the list head */ - kfree(child); - chunk->burst =3D NULL; + return desc; } =20 -static void dw_edma_free_chunk(struct dw_edma_desc *desc) +static void dw_edma_free_desc(struct dw_edma_desc *desc) { struct dw_edma_chunk *child, *_next; =20 - if (!desc->chunk) - return; - /* Remove all the list elements */ - list_for_each_entry_safe(child, _next, &desc->chunk->list, list) { - dw_edma_free_burst(child); + list_for_each_entry_safe(child, _next, &desc->chunk_list, list) { list_del(&child->list); kfree(child); desc->chunks_alloc--; } =20 - /* Remove the list head */ - kfree(child); - desc->chunk =3D NULL; -} - -static void dw_edma_free_desc(struct dw_edma_desc *desc) -{ - dw_edma_free_chunk(desc); kfree(desc); } =20 @@ -166,23 +103,17 @@ static void vchan_free_desc(struct virt_dma_desc *vde= sc) static void dw_edma_core_start(struct dw_edma_chunk *chunk, bool first) { struct dw_edma_chan *chan =3D chunk->chan; - struct dw_edma_burst *child; u32 i =3D 0; - int j; =20 if (chan->non_ll) { - child =3D list_first_entry_or_null(&chunk->burst->list, - struct dw_edma_burst, list); - if (child) - chan->dw->core->non_ll_start(chunk->chan, child); + if (chunk->nburst =3D=3D 1) + chan->dw->core->non_ll_start(chunk->chan, &chunk->burst[0]); return; } =20 - j =3D chunk->bursts_alloc; - list_for_each_entry(child, &chunk->burst->list, list) { - j--; - dw_edma_core_ll_data(chan, child, i++, chunk->cb, !j); - } + for (i =3D 0; i < chunk->nburst; i++) + dw_edma_core_ll_data(chan, &chunk->burst[i], i, chunk->cb, + i =3D=3D chunk->nburst - 1); =20 dw_edma_core_ll_link(chan, i, chunk->cb, chan->ll_region.paddr); =20 @@ -206,14 +137,13 @@ static int dw_edma_start_transfer(struct dw_edma_chan= *chan) if (!desc) return 0; =20 - child =3D list_first_entry_or_null(&desc->chunk->list, + child =3D list_first_entry_or_null(&desc->chunk_list, struct dw_edma_chunk, list); if (!child) return 0; =20 dw_edma_core_start(child, !desc->xfer_sz); desc->xfer_sz +=3D child->xfer_sz; - dw_edma_free_burst(child); list_del(&child->list); kfree(child); desc->chunks_alloc--; @@ -425,14 +355,14 @@ dw_edma_device_transfer(struct dw_edma_transfer *xfer, struct dw_edma_chan *chan =3D dchan2dw_edma_chan(xfer->dchan); enum dma_transfer_direction dir =3D xfer->direction; struct scatterlist *sg =3D NULL; - struct dw_edma_chunk *chunk; + struct dw_edma_chunk *chunk =3D NULL; struct dw_edma_burst *burst; struct dw_edma_desc *desc; u64 src_addr, dst_addr; size_t fsz =3D 0; u32 bursts_max; u32 cnt =3D 0; - int i; + u32 i; =20 if (!chan->configured) return NULL; @@ -499,10 +429,6 @@ dw_edma_device_transfer(struct dw_edma_transfer *xfer, if (unlikely(!desc)) goto err_alloc; =20 - chunk =3D dw_edma_alloc_chunk(desc); - if (unlikely(!chunk)) - goto err_alloc; - if (xfer->type =3D=3D EDMA_XFER_INTERLEAVED) { src_addr =3D xfer->xfer.il->src_start; dst_addr =3D xfer->xfer.il->dst_start; @@ -530,15 +456,15 @@ dw_edma_device_transfer(struct dw_edma_transfer *xfer, if (xfer->type =3D=3D EDMA_XFER_SCATTER_GATHER && !sg) break; =20 - if (chunk->bursts_alloc =3D=3D bursts_max) { - chunk =3D dw_edma_alloc_chunk(desc); + if (!(i % bursts_max)) { + u32 n =3D min(cnt - i, bursts_max); + + chunk =3D dw_edma_alloc_chunk(desc, n); if (unlikely(!chunk)) goto err_alloc; } =20 - burst =3D dw_edma_alloc_burst(chunk); - if (unlikely(!burst)) - goto err_alloc; + burst =3D chunk->burst + (i % bursts_max); =20 if (xfer->type =3D=3D EDMA_XFER_CYCLIC) burst->sz =3D xfer->xfer.cyclic.len; diff --git a/drivers/dma/dw-edma/dw-edma-core.h b/drivers/dma/dw-edma/dw-ed= ma-core.h index 27415f3a2d04b..4950c57fca34f 100644 --- a/drivers/dma/dw-edma/dw-edma-core.h +++ b/drivers/dma/dw-edma/dw-edma-core.h @@ -43,7 +43,6 @@ struct dw_edma_chan; struct dw_edma_chunk; =20 struct dw_edma_burst { - struct list_head list; u64 sar; u64 dar; u32 sz; @@ -52,18 +51,16 @@ struct dw_edma_burst { struct dw_edma_chunk { struct list_head list; struct dw_edma_chan *chan; - struct dw_edma_burst *burst; - - u32 bursts_alloc; - u8 cb; u32 xfer_sz; + u32 nburst; + struct dw_edma_burst burst[] __counted_by(nburst); }; =20 struct dw_edma_desc { struct virt_dma_desc vd; struct dw_edma_chan *chan; - struct dw_edma_chunk *chunk; + struct list_head chunk_list; =20 u32 chunks_alloc; =20 --=20 2.43.0 From nobody Sat Jul 25 21:30:55 2026 Received: from AS8PR04CU009.outbound.protection.outlook.com (mail-westeuropeazon11011007.outbound.protection.outlook.com [52.101.70.7]) (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 2119D345CC0; Mon, 13 Jul 2026 17:04:19 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.70.7 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783962261; cv=fail; b=fJUQANBsw+iidXb+y7xW/aE/Qy4/yKxT3nhSvz44zb2Xy/wZgJIGdP5oZamhT77Qi6msaTu4FJXmjcm7zwTGboAPDJVWRnETbMHFFEl7IfBOHYkXFHcxcugmqfMQSaApVYaJjecatrbnhci/7lULENyHNsrZWfyJdeFT9P1ZJBw= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783962261; c=relaxed/simple; bh=/p7Ls6GXsbzHlS5idKFDnOz/BFiaIx7ZQzoJmjUaku8=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=rUnRA/+AHm135CaKyZGeSYD+FhvuHOkIC9L6O6klDX8vDztYQKu2CK2m7F+nYUamDR6ZxRwQ1fTU39XSCUPJ/fSggQGYwaQDi5mG0KzFN8MDoxVZiF4F/flT/WVk+qvMp9ayo9h25G31FF2M25hXwFrrkptBr1bjsh7l0WVgQao= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=oss.nxp.com; spf=pass smtp.mailfrom=oss.nxp.com; dkim=pass (2048-bit key) header.d=NXP1.onmicrosoft.com header.i=@NXP1.onmicrosoft.com header.b=wGEPzh/X; arc=fail smtp.client-ip=52.101.70.7 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=oss.nxp.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.nxp.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=NXP1.onmicrosoft.com header.i=@NXP1.onmicrosoft.com header.b="wGEPzh/X" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=IZGKOiiMWDElvx36WRgxHoltSvxsDAd0Shp3PTwZJ+DjQmS+y+ahomqRQ28MXlGAxbC/TqBh1TYVRs58MOwhfyMZn/dZ/CyE/SEsH3OQRpdnc1AyQoR80a0N4hXtU27SbaLMaZtvdkbtty9/JqoaNNLMKpN4hM+qG971GyuXjfY01EoLTVOzfPw384y+XypWjNz2+pVaJTIMZ8SH7MSOPLGr1bvgrbTRRZ/jUxDkmOIm4sU1UVWMA9ZgLZ6CAxqndKBXiXgpJ1BpvoGeMFQyDhc43NC5W6uTh+s+WRrJT312EE2VDEDS9Vpf31gS1VGEScI5g9ItZlLJetqr3ZFlnQ== 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=k39UjNLpTNRT++ViwFZSjHu0E8BkJ2UyIvgH3oKd2nM=; b=pUVMjazejaJf/p39D6ldekyU7Q3+b17XsPoHLPm7fHxbBOOlDXYxSEZiN7yZ8rT+zoL8khQJozg1eYCTTiOuNHsXkcVyaM9PKC9dFiogIJhydpWmXxElUQOij4r88qMYObNDrUSQf14vjAGmqPkDHe0+thchJjBb3HyQlGde2iA8C332AkHId4I5KUxaPzPPosni1Fbzr3FcagOy5xduHwAOYsDymuHS4JSQnr7mS/HPJknl16MJSu5g3vcWPHYq6XHbe2zG0+6sg6Ci0X42d0rQl6sO61XkggCZU5tPWUWwyStZZjkONuMsGayI9A4mhr32xddL5VDeMm2YCDSgmQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oss.nxp.com; dmarc=pass action=none header.from=oss.nxp.com; dkim=pass header.d=oss.nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=NXP1.onmicrosoft.com; s=selector1-NXP1-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=k39UjNLpTNRT++ViwFZSjHu0E8BkJ2UyIvgH3oKd2nM=; b=wGEPzh/XKzvUkyAQQbmD2s0DbkuOT+sssCtDyJEv7Y3A2xcqM7TEmqdof5g8AV895Cl35dASVmEcZgDimMbSYkBiLq9RiSGXABwlEQeV5RtYr/TlI31tNVPzVvT93ORlOifWFeBKJAXewlfwXadI/sjAXbpZ1g2Ski3kyEusGUXNDCS6Lq6Ebd/BWPfh2jHTb9rayeDTGAZTJAzEJLfWXtNsERSmBxH8y/w9HA3DsxJpqJ+NGDSz/WYUF+2a8HOnvTPb95zKnRT/FMjH8JvQaqdRcnnrWKIE6s2nyDH2ouC/PpycSV5sTenmpt5VaIE9+Vvxbi7CfYa/ZNMrMZGndA== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=oss.nxp.com; Received: from GV2PR04MB11799.eurprd04.prod.outlook.com (2603:10a6:150:2cf::9) by PA1PR04MB10228.eurprd04.prod.outlook.com (2603:10a6:102:454::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.202.18; Mon, 13 Jul 2026 17:04:14 +0000 Received: from GV2PR04MB11799.eurprd04.prod.outlook.com ([fe80::2146:83a2:5329:b7c]) by GV2PR04MB11799.eurprd04.prod.outlook.com ([fe80::2146:83a2:5329:b7c%6]) with mapi id 15.21.0181.019; Mon, 13 Jul 2026 17:04:14 +0000 From: Frank.Li@oss.nxp.com Date: Mon, 13 Jul 2026 13:03:28 -0400 Subject: [PATCH v7 10/10] dmaengine: dw-edma: Remove struct dw_edma_chunk Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260713-edma_ll-v7-10-6fb7498c901e@nxp.com> References: <20260713-edma_ll-v7-0-6fb7498c901e@nxp.com> In-Reply-To: <20260713-edma_ll-v7-0-6fb7498c901e@nxp.com> To: Manivannan Sadhasivam , Vinod Koul , Gustavo Pimentel , Kees Cook , "Gustavo A. R. Silva" , Manivannan Sadhasivam , =?utf-8?q?Krzysztof_Wilczy=C5=84ski?= , Kishon Vijay Abraham I , Bjorn Helgaas , Christoph Hellwig , Niklas Cassel Cc: dmaengine@vger.kernel.org, linux-kernel@vger.kernel.org, linux-hardening@vger.kernel.org, linux-pci@vger.kernel.org, linux-nvme@lists.infradead.org, Koichiro Den , imx@lists.linux.dev, "Verma, Devendra" , Frank Li , Devendra Verma X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1783962202; l=10731; i=Frank.Li@nxp.com; s=20240130; h=from:subject:message-id; bh=NfjrY/HC6ctiP8+xxiriX9kp/RmMZzab/DIIn/ObVZM=; b=t5kBy3zNJfZnd0b6kxy83MtbFZunYOYgS0rz3cVtuZfMzoKa6MqfbCMEPzfBIcwmxOaDZOA98 XJLLPpS2+U5D7mBPw3kGXslsY3I9aZyPNU848z+97H8rwXmkZ2jhuy8 X-Developer-Key: i=Frank.Li@nxp.com; a=ed25519; pk=I0L1sDUfPxpAkRvPKy7MdauTuSENRq+DnA+G4qcS94Q= X-ClientProxiedBy: SN7PR04CA0223.namprd04.prod.outlook.com (2603:10b6:806:127::18) To GV2PR04MB11799.eurprd04.prod.outlook.com (2603:10a6:150:2cf::9) 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: GV2PR04MB11799:EE_|PA1PR04MB10228:EE_ X-MS-Office365-Filtering-Correlation-Id: 3b1e07a5-e460-4e47-19e3-08dee100c422 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|23010399003|7416014|376014|366016|19092799006|1800799024|921020|18002099003|22082099003|11063799006|56012099006; X-Microsoft-Antispam-Message-Info: BFYTWsPc2atPcsz/Mb3T/ha7crbOYD3lBjF7daRomJCjJLvPjSaXY45W9BcFGLwb5y3E4DRTgfSMzg471tDa/Fnd5qkX38/rm6biLzSu1X0dVEgS6NMO3XP9kbmo3CO0uL21eS7ctckPpLzzaRbxvx6E2vFDjxbq3x1dBjK78jQBlLFwmb3t+d9U5fw0A5Bde3PPrhSbj28pHDpVNiJu93aEExhS0BRj3VvNf+7/oW4uM2kGOCyygYfeC11GYv4nyhu8VCEywmsLJGfDJJK5fcuDA5O6B+N9yhbqoYOE61JITBJd+CXUSh5FWa/boq0CxBSOOajC/+QUpm69RMOQKYSzcv+/dt+014wBWeQ4YcxkKBinjP1zdzY7hBCTeEqS2ITQgS4reZh46LV/yTZVW8sroPMw1mRcApxtVe5WKVokOrBuQ39FlTzPq5LZEQ2whuoCD/c3ClZFXtPNLRYd05JdwzQ6Q5Qa6vvi8PXcIc+9rmIW1q4dRZLhbZV72o+M0zJWV4vJPWGqxRvlNhBLQAh5zqs1sFQwRICoLdpuuFqFsndLTv+/IPfblD2IiUYKIqrh6opSFqJ6hQhBd9FVGLlVecCmAGGwGKy8rYYRG2YFYzpYYrADze95DGvBbIIS5xQB+9yYGx1V5lK3XfQ6GeTbLCs3HZ8m5rmKnYjmyPjI1UGzJNj8IA/I5GElofWuYN1fJ8Kz7o0rTApcGoUL0g== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:GV2PR04MB11799.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(23010399003)(7416014)(376014)(366016)(19092799006)(1800799024)(921020)(18002099003)(22082099003)(11063799006)(56012099006);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?ZXc2UFdvWkhVRGorZThYN2ZXQ0RYUkk1ampkKzNEL2ZZUUo1QXpuYWpqYWxI?= =?utf-8?B?Z0NHNHhJWTlXVXRPMFIrbTRHVENwSy9CMmpZT0RzTGtVOXlTUG94NkJ4dlAy?= =?utf-8?B?blkyVElSV3dDZTIrZGhMUzh6cm1tRDJobjZrenBwRWFqdHRVMWNNeStGZjY0?= =?utf-8?B?WlZ0T0dxTm03RG9XcnBDZHJ1b0ZGQUg0L3FKZUd5K3RNU1M0aFJZa0pra24r?= =?utf-8?B?QjNjd0EyWjdodmNLQkhpQytBRVptOFJZZkVxbXBvSXhuNC9SaVBlNUc4YVpt?= =?utf-8?B?WWx5VlhUL0t1VUNHaXVOVmc0eklKUndvOE9uT3RjQUVKTjZ3bitkNzBvak93?= =?utf-8?B?SzlScUpwc2J2Z1dPQmxhM1hGRE90aThkL0plNFZqOXI1TGNpeUxVZVdRNTNI?= =?utf-8?B?NW8zVjczOFhKMXdsdjh0YmFvS1hGL0lnbW9SZlJDb2FMbHU5LzFvaGpJZTdF?= =?utf-8?B?YURrN1o4TEdhL1R4dHg2K1ZrTXA3VkRuSFdyMkMraHd2dzQwWGdwS3hHV0lP?= =?utf-8?B?amFla3FRcHFmZG9lbU44Y0loUHlCbGNsaEFNVzBzYlk4Qm9TRjlxd09jOFF0?= =?utf-8?B?YTlUckN0M1B0ZkszZlN0WEdFSXAwS3cvNE9yR0pwK29VR2R6RWwvN3RUL2dS?= =?utf-8?B?TDF6aituZ0hodEFod093UWVsRU5NOC9GRmc2dTVPaVBwRVVhcnAvUjVsMTRJ?= =?utf-8?B?aXRSWmVTTGtYTXhZMDlsMC94bXNCanBQbnNxNXdzSEhaamVpbzdUWXRpMHBp?= =?utf-8?B?UWdvUzVMN2V2dndPL2VRbDB3Mkg1Y2FndGxObThLcHFIbmthaUdyWmsxa2Fo?= =?utf-8?B?SlYwcnI1TnAvTFJWYXdYQVdlbUlVMzkzMmlWbVRoMkYwWVRSK1VvYTJDcDRL?= =?utf-8?B?UVFCbzFCbzhmOGVEOXhGYm55Sm5oUU93eHNOZkIrSnZmemJMcnNQaGlmRU04?= =?utf-8?B?bDlqb015c1UwejVOUlFyUFhjcTdpS2JmQmZkRVQ3NGRGQ1RMYS9zbHh5OUgr?= =?utf-8?B?SnF1U2xiNE1PQ0pNdTgwR2s3YTNQUndja0lRQnBuamZOZVpmSzk2eUdjNk81?= =?utf-8?B?Z1F6cW95MEhac3E4TlNUWWd3Q3RSc3ZvSmRBbmlsWmR1UzdFVDRjb1NKSmdz?= =?utf-8?B?WVg3eHVmT2F1S2cwNGc0MFVoc2kyRG5jdGx0OFZOeFMvQS9KUDgxalZvSGdr?= =?utf-8?B?UytrNzRYKzJaS2pPYXFialZFbENaMlZGMm00R1RzYjRBaWRURXNIbmNrSVlq?= =?utf-8?B?RW1DR1N1YWNCVWI4ZFlBV3ZONWdjUUhHZXdCNnlUbjhRZytrcjFKOSsvMHBW?= =?utf-8?B?V1FKekRMUUNMVVFrU2JsTDRwS3JGbHB1cTFIS2NjSVN6SlVkRXhGbjB5RUQ0?= =?utf-8?B?d2tQM3dXOW1DK0g2WnBDWXZMYVFISThRMFpKeEpVNTMyYnkwdmhYTWlMc0VM?= =?utf-8?B?RDVacm5ETFBxNkI0R0NzSDNOblhVQ2JDR0s1OEVpajlUUHlSWXF1UXMwVHRN?= =?utf-8?B?WkpvbjdIM1lOYkNCelN1Zkx6NEZhbGhBNW9FcWZEbURiUk9Ja2NXc0t3R2hH?= =?utf-8?B?dHVQQXBQZGVQZmlvNWwvWWZvZkVJSm13bFFHOUdpaExwWXErTjFCLzZ2Rkhh?= =?utf-8?B?dWF4bDBGVk5CQnF1TkFSM0NycUVvdFRaeFEyQlFSaEh3Z3pVVnJScFMzQ2dP?= =?utf-8?B?dlY1SWF4MzM1R0c1QmNxRGgyVy9vc1FOdUZTRXg1QzhscW5nNHR2ZU9nMnJH?= =?utf-8?B?SE1sZDJ3Wlh2NHNGbjk0YXorL3duNUpZZ2RwSkxzMU5lLytMSXlvZTFkVFph?= =?utf-8?B?c0g2M1pwREJyNi9jK0VzQjN1VFEzdE1OL3hYN3hzUXAxeXUrczRCYk5aamVR?= =?utf-8?B?em9GcVZGRjlwd0Q2K0lRZTY2cDR4WDdiK3orTUxpMzFXUDdiMm9zV2Q4d2pY?= =?utf-8?B?ZDZLRzhDQ0lUNk5lSjg2S2JTaTd3N3pFMlVzMFQ2MnZUaTZTQWsrZXhmeVhS?= =?utf-8?B?bW1xT0JiL2RzcXhLaVNBbWMyT1EyYVZQWFVBWDlGeWVRREFDZTEwV3QwSGtJ?= =?utf-8?B?QzZRSncvVnI5VHlzenFHR0tqOFhscTI0cVViSC9EdVlMUk1FYVcvdmlRU01o?= =?utf-8?B?L2VCR1QyMndaODBvMk1xUVdJeGJrcG9FcVJVYmxodHRVNkFyWTQ4ZjBHU0Ny?= =?utf-8?B?NGZ5TXdwdy9ialpyUVJndk9VMFIwREd6cENqUFNONUxDbnRINy95cGpFMk5M?= =?utf-8?B?SlhsSE9BMDh3NjlCQUlPMXRZay96S291YTZkT2FHY1B0WGo2ZGtpckZUOEwx?= =?utf-8?B?K251eUNlS1dqellUVVl4bUdUZTZXWjQxUmxQV1NMQzRSbWFsWjdqRUNJK0Uv?= =?utf-8?Q?4sexhQRsu8yGmQzY=3D?= X-OriginatorOrg: oss.nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 3b1e07a5-e460-4e47-19e3-08dee100c422 X-MS-Exchange-CrossTenant-AuthSource: GV2PR04MB11799.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Jul 2026 17:04:14.4031 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: wOAp7aCN4By5f3kEOAIj7VytDZJOwEgOfEhandYQp4ilNVDzquK6lskJfsEj7XpjIIQWXO5MjS5f4/R+BFXduec/AcLol1EcGxnTmye8eL1O2H1GiAha5eq0iw2VqKuS X-MS-Exchange-Transport-CrossTenantHeadersStamped: PA1PR04MB10228 From: Frank Li The current descriptor layout is: struct dw_edma_desc *desc =E2=94=94=E2=94=80 chunk list =E2=94=94=E2=94=80 burst[] Creating a DMA descriptor requires at least two kzalloc() calls because each chunk is allocated as a linked-list node. Since the number of bursts is already known when the descriptor is created, this linked-list layer is unnecessary. Move the burst array directly into struct dw_edma_desc and remove the struct dw_edma_chunk layer entirely. Use start_burst and done_burst to track the current bursts, which current are in the DMA link list. Tested-by: Koichiro Den Tested-By: Devendra Verma Signed-off-by: Frank Li --- change in v6 - use size_t for nburst, start_burst, done_burst, to fix sashiko report integer overflow problem. change in v5 - fix double substract and done_burst -1, found by sashiko AI - remove unused field chuck_list, xfer_sz and chucks_alloc, found by sashiko change in v4 - fix loop condition check in dw_edma_core_start(), found by sashiko AI. - collect Koichiro tag change in v2 - remove debug code - move "residue =3D desc->alloc_sz;" in if(desc) check - keep inline to avoid build warning --- drivers/dma/dw-edma/dw-edma-core.c | 147 ++++++++++++---------------------= ---- drivers/dma/dw-edma/dw-edma-core.h | 28 +++---- 2 files changed, 63 insertions(+), 112 deletions(-) diff --git a/drivers/dma/dw-edma/dw-edma-core.c b/drivers/dma/dw-edma/dw-ed= ma-core.c index c028011cc61ca..30eeb7bffad80 100644 --- a/drivers/dma/dw-edma/dw-edma-core.c +++ b/drivers/dma/dw-edma/dw-edma-core.c @@ -40,82 +40,54 @@ u64 dw_edma_get_pci_address(struct dw_edma_chan *chan, = phys_addr_t cpu_addr) return cpu_addr; } =20 -static struct dw_edma_chunk *dw_edma_alloc_chunk(struct dw_edma_desc *desc= , u32 nburst) -{ - struct dw_edma_chan *chan =3D desc->chan; - struct dw_edma_chunk *chunk; - - chunk =3D kzalloc_flex(*chunk, burst, nburst, GFP_NOWAIT); - if (unlikely(!chunk)) - return NULL; - - chunk->chan =3D chan; - /* Toggling change bit (CB) in each chunk, this is a mechanism to - * inform the eDMA HW block that this is a new linked list ready - * to be consumed. - * - Odd chunks originate CB equal to 0 - * - Even chunks originate CB equal to 1 - */ - chunk->cb =3D !(desc->chunks_alloc % 2); - - chunk->nburst =3D nburst; - - list_add_tail(&chunk->list, &desc->chunk_list); - desc->chunks_alloc++; - - return chunk; -} - -static struct dw_edma_desc *dw_edma_alloc_desc(struct dw_edma_chan *chan) +static struct dw_edma_desc * +dw_edma_alloc_desc(struct dw_edma_chan *chan, size_t nburst) { struct dw_edma_desc *desc; =20 - desc =3D kzalloc_obj(*desc, GFP_NOWAIT); + desc =3D kzalloc_flex(*desc, burst, nburst, GFP_NOWAIT); if (unlikely(!desc)) return NULL; =20 desc->chan =3D chan; - - INIT_LIST_HEAD(&desc->chunk_list); + desc->nburst =3D nburst; + desc->cb =3D true; =20 return desc; } =20 -static void dw_edma_free_desc(struct dw_edma_desc *desc) -{ - struct dw_edma_chunk *child, *_next; - - /* Remove all the list elements */ - list_for_each_entry_safe(child, _next, &desc->chunk_list, list) { - list_del(&child->list); - kfree(child); - desc->chunks_alloc--; - } - - kfree(desc); -} - static void vchan_free_desc(struct virt_dma_desc *vdesc) { - dw_edma_free_desc(vd2dw_edma_desc(vdesc)); + kfree(vd2dw_edma_desc(vdesc)); } =20 -static void dw_edma_core_start(struct dw_edma_chunk *chunk, bool first) +static void dw_edma_core_start(struct dw_edma_desc *desc, bool first) { - struct dw_edma_chan *chan =3D chunk->chan; - u32 i =3D 0; + struct dw_edma_chan *chan =3D desc->chan; + size_t i =3D 0; =20 if (chan->non_ll) { - if (chunk->nburst =3D=3D 1) - chan->dw->core->non_ll_start(chunk->chan, &chunk->burst[0]); + 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; } =20 - for (i =3D 0; i < chunk->nburst; i++) - dw_edma_core_ll_data(chan, &chunk->burst[i], i, chunk->cb, - i =3D=3D chunk->nburst - 1); + for (i =3D 0; i + desc->start_burst < desc->nburst; i++) { + u32 idx =3D i + desc->start_burst; =20 - dw_edma_core_ll_link(chan, i, chunk->cb, chan->ll_region.paddr); + if (i =3D=3D chan->ll_max) + break; + + 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); + } + + 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); =20 if (first) dw_edma_core_ch_enable(chan); @@ -125,7 +97,6 @@ static void dw_edma_core_start(struct dw_edma_chunk *chu= nk, bool first) =20 static int dw_edma_start_transfer(struct dw_edma_chan *chan) { - struct dw_edma_chunk *child; struct dw_edma_desc *desc; struct virt_dma_desc *vd; =20 @@ -137,16 +108,9 @@ static int dw_edma_start_transfer(struct dw_edma_chan = *chan) if (!desc) return 0; =20 - child =3D list_first_entry_or_null(&desc->chunk_list, - struct dw_edma_chunk, list); - if (!child) - return 0; + dw_edma_core_start(desc, !desc->start_burst); =20 - dw_edma_core_start(child, !desc->xfer_sz); - desc->xfer_sz +=3D child->xfer_sz; - list_del(&child->list); - kfree(child); - desc->chunks_alloc--; + desc->cb =3D !desc->cb; =20 return 1; } @@ -337,8 +301,10 @@ dw_edma_device_tx_status(struct dma_chan *dchan, dma_c= ookie_t cookie, vd =3D vchan_find_desc(&chan->vc, cookie); if (vd) { desc =3D vd2dw_edma_desc(vd); - if (desc) - residue =3D desc->alloc_sz - desc->xfer_sz; + + residue =3D desc->alloc_sz; + if (desc && desc->done_burst) + residue -=3D desc->burst[desc->done_burst - 1].xfer_sz; } spin_unlock_irqrestore(&chan->vc.lock, flags); =20 @@ -355,13 +321,11 @@ dw_edma_device_transfer(struct dw_edma_transfer *xfer, struct dw_edma_chan *chan =3D dchan2dw_edma_chan(xfer->dchan); enum dma_transfer_direction dir =3D xfer->direction; struct scatterlist *sg =3D NULL; - struct dw_edma_chunk *chunk =3D NULL; struct dw_edma_burst *burst; struct dw_edma_desc *desc; u64 src_addr, dst_addr; size_t fsz =3D 0; - u32 bursts_max; - u32 cnt =3D 0; + size_t cnt =3D 0; u32 i; =20 if (!chan->configured) @@ -418,17 +382,6 @@ dw_edma_device_transfer(struct dw_edma_transfer *xfer, return NULL; } =20 - /* - * For non-LL mode, only a single burst can be handled - * in a single chunk unlike LL mode where multiple bursts - * can be configured in a single chunk. - */ - bursts_max =3D chan->non_ll ? 1 : chan->ll_max; - - desc =3D dw_edma_alloc_desc(chan); - if (unlikely(!desc)) - goto err_alloc; - if (xfer->type =3D=3D EDMA_XFER_INTERLEAVED) { src_addr =3D xfer->xfer.il->src_start; dst_addr =3D xfer->xfer.il->dst_start; @@ -452,19 +405,15 @@ dw_edma_device_transfer(struct dw_edma_transfer *xfer, fsz =3D xfer->xfer.il->frame_size; } =20 + desc =3D dw_edma_alloc_desc(chan, cnt); + if (unlikely(!desc)) + return NULL; + for (i =3D 0; i < cnt; i++) { if (xfer->type =3D=3D EDMA_XFER_SCATTER_GATHER && !sg) break; =20 - if (!(i % bursts_max)) { - u32 n =3D min(cnt - i, bursts_max); - - chunk =3D dw_edma_alloc_chunk(desc, n); - if (unlikely(!chunk)) - goto err_alloc; - } - - burst =3D chunk->burst + (i % bursts_max); + burst =3D desc->burst + i; =20 if (xfer->type =3D=3D EDMA_XFER_CYCLIC) burst->sz =3D xfer->xfer.cyclic.len; @@ -473,8 +422,8 @@ dw_edma_device_transfer(struct dw_edma_transfer *xfer, else if (xfer->type =3D=3D EDMA_XFER_INTERLEAVED) burst->sz =3D xfer->xfer.il->sgl[i % fsz].size; =20 - chunk->xfer_sz +=3D burst->sz; desc->alloc_sz +=3D burst->sz; + burst->xfer_sz =3D desc->alloc_sz; =20 if (dir =3D=3D DMA_DEV_TO_MEM) { burst->sar =3D src_addr; @@ -529,12 +478,6 @@ dw_edma_device_transfer(struct dw_edma_transfer *xfer, } =20 return vchan_tx_prep(&chan->vc, &desc->vd, xfer->flags); - -err_alloc: - if (desc) - dw_edma_free_desc(desc); - - return NULL; } =20 static struct dma_async_tx_descriptor * @@ -605,8 +548,14 @@ static void dw_hdma_set_callback_result(struct virt_dm= a_desc *vd, return; =20 desc =3D vd2dw_edma_desc(vd); - if (desc) - residue =3D desc->alloc_sz - desc->xfer_sz; + 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; + } =20 res =3D &vd->tx_result; res->result =3D result; @@ -625,7 +574,7 @@ static void dw_edma_done_interrupt(struct dw_edma_chan = *chan) switch (chan->request) { case EDMA_REQ_NONE: desc =3D vd2dw_edma_desc(vd); - if (!desc->chunks_alloc) { + if (desc->start_burst >=3D desc->nburst) { dw_hdma_set_callback_result(vd, DMA_TRANS_NOERROR); list_del(&vd->node); diff --git a/drivers/dma/dw-edma/dw-edma-core.h b/drivers/dma/dw-edma/dw-ed= ma-core.h index 4950c57fca34f..3c958ca05144a 100644 --- a/drivers/dma/dw-edma/dw-edma-core.h +++ b/drivers/dma/dw-edma/dw-edma-core.h @@ -46,26 +46,21 @@ struct dw_edma_burst { u64 sar; u64 dar; u32 sz; -}; - -struct dw_edma_chunk { - struct list_head list; - struct dw_edma_chan *chan; - u8 cb; + /* precalulate summary of previous burst total size */ u32 xfer_sz; - u32 nburst; - struct dw_edma_burst burst[] __counted_by(nburst); }; =20 struct dw_edma_desc { struct virt_dma_desc vd; struct dw_edma_chan *chan; - struct list_head chunk_list; - - u32 chunks_alloc; =20 u32 alloc_sz; - u32 xfer_sz; + + size_t done_burst; + size_t start_burst; + u8 cb; + size_t nburst; + struct dw_edma_burst burst[] __counted_by(nburst); }; =20 struct dw_edma_chan { @@ -128,7 +123,6 @@ struct dw_edma_core_ops { void (*ll_link)(struct dw_edma_chan *chan, u32 idx, bool cb, u64 addr); void (*ch_doorbell)(struct dw_edma_chan *chan); void (*ch_enable)(struct dw_edma_chan *chan); - void (*ch_config)(struct dw_edma_chan *chan); void (*debugfs_on)(struct dw_edma *dw); void (*ack_emulated_irq)(struct dw_edma *dw); @@ -170,6 +164,14 @@ struct dw_edma_chan *dchan2dw_edma_chan(struct dma_cha= n *dchan) return vc2dw_edma_chan(to_virt_chan(dchan)); } =20 +static inline u64 dw_edma_core_get_ll_paddr(struct dw_edma_chan *chan) +{ + if (chan->dir =3D=3D EDMA_DIR_WRITE) + return chan->dw->chip->ll_region_wr[chan->id].paddr; + + return chan->dw->chip->ll_region_rd[chan->id].paddr; +} + static inline void dw_edma_core_off(struct dw_edma *dw) { --=20 2.43.0