From nobody Sat Sep 26 22:58:02 2026 Received: from OS0P286CU011.outbound.protection.outlook.com (mail-japanwestazon11020085.outbound.protection.outlook.com [52.101.228.85]) (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 BA0C1388E58; Fri, 28 Aug 2026 16:36:22 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.228.85 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787934986; cv=fail; b=RyMkkiWQTCyn5MK6WCZnQv2y7u7mGzQk9MG7sB/jp4uHqw++e7WHdLYsYQZot/A8tNlPggNhDE3jVy5Mz3gLARG1ahP3RaYxI8NJD5sQpMCXgamJNp4GRHZdKfh7fYtaUJLLnAAyFTCWlMyikU2wful2NOEP6/TaObZNmrQ/L5s= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787934986; c=relaxed/simple; bh=iLYNPMLXnDMasX21wSTHbE6aL0AaKNQB2SoiVuXajmM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=ZhE4o1+0N8E6IzLaL1lO9YQlBrfEHxpijUY0syx+ddnCVTm/7VZmzA3ZKy7V4d5emRjOmtS20ewLRu8ipJWZYxkyL7Hz7o6cmedlD72LAxcJNg/E04a8iyvQezbdcd6K6YB3tP8E4vvw90ZCYo57x3N/PO1TyyO3YwzIgRNLILY= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=valinux.co.jp; spf=pass smtp.mailfrom=valinux.co.jp; dkim=pass (1024-bit key) header.d=valinux.co.jp header.i=@valinux.co.jp header.b=je1YZFXD; arc=fail smtp.client-ip=52.101.228.85 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=valinux.co.jp Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=valinux.co.jp Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=valinux.co.jp header.i=@valinux.co.jp header.b="je1YZFXD" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=QFInmRrYKG5nnlwxW8q+Da2T02Z5cG1uPLnxjDchbbqQI60cydARDG5XoDKciHGHaPQZInIPEJgdLC6TQNK8pLMwuA0sWgU0tvpEEjpjHcxDfNk6kAKIfCSOgwahWS8nBv9BdLCXZg2GMqQnVIq/t5TKP/CpROLyqckpX/IZM8AREhfkkShDSBafJ0TEkTWuoIenWnvKqBeEHA6fdamFxxGNBpQFbozNaDWG2FhE1+D+NXpUsZUi8bQ92VvTs1ZmNIwvEHPvI+aEv9Xp9Kruga0+C1lx6wxiNp2j79Hcpu3J/MI+jriU5cxSwlL/Vd2j3JD12v8M6Mb0/d1ilO+qwg== 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=Oa5Xk/Twd4BUh3v80A3uUAaDn1Vbhy0ZMXJDAxomOUY=; b=mAlbLxmMgdlmhZe4MJEbJsBfwXtIIXoO7qVMcudSFEkYkGV9ZxStf7bBjCpVd82E1HFfiWtmocP9XwtBh6QLaGfhpZlBDUPa/OwiwINV/Ik/5xfVLEwksEykhp07Exs/+HBumKwZjmxUPYigtvWPsfK2ZkKFoDSdqmdr454HrZCjIlCMrF+zYIYQpvtMOtXe/JHNNOAGWxVOC2H8kcCN3UV6g8aMEg3iL/1QGGBa1IvBMgIAUPz5JCiYQJRXy32L4qK8VHP0JZqp0F+qqxKLpjmiUZopQSHReq97FbOfQZZVDF5jt23pnSD/pe7r/JDmVo+h4l1L+Rysy7sJGKHpAw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=valinux.co.jp; dmarc=pass action=none header.from=valinux.co.jp; dkim=pass header.d=valinux.co.jp; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=valinux.co.jp; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Oa5Xk/Twd4BUh3v80A3uUAaDn1Vbhy0ZMXJDAxomOUY=; b=je1YZFXD9vuPvVjvPReAyvD0dTjhW9eroVA/YdouuPjGV4tr4PCjMqDdpr5a2WCJFruseKXcoUN2ZmVBfujUUfZCRp9YNUzHOISha3hbfcMS3rRLQcOOh3lqrVVQqvtO79rHIA70cyyZ3ucvb6dQ/3uP0FmJYIfJQrocxe/4qU4= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=valinux.co.jp; Received: from TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:38f::10) by OS9P286MB7093.JPNP286.PROD.OUTLOOK.COM (2603:1096:604:414::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.360.11; Fri, 28 Aug 2026 16:36:19 +0000 Received: from TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM ([fe80::2305:327c:28ec:9b32]) by TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM ([fe80::2305:327c:28ec:9b32%4]) with mapi id 15.21.0360.008; Fri, 28 Aug 2026 16:36:19 +0000 From: Koichiro Den To: Vinod Koul , Frank Li , Manivannan Sadhasivam Cc: dmaengine@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v2 1/3] dmaengine: Allow drivers to assign static channel IDs Date: Sat, 29 Aug 2026 01:36:09 +0900 Message-ID: <20260828163611.2691264-2-den@valinux.co.jp> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260828163611.2691264-1-den@valinux.co.jp> References: <20260828163611.2691264-1-den@valinux.co.jp> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: TYCP286CA0033.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:29d::7) To TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:38f::10) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: TY7P286MB7722:EE_|OS9P286MB7093:EE_ X-MS-Office365-Filtering-Correlation-Id: 5576cb98-2468-4fa5-2cdc-08df05227cf8 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|23010399003|10070799003|366016|376014|18002099003|22082099003|56012099006|10067099003; X-Microsoft-Antispam-Message-Info: gxDuvnKPmk25qJrKOLh4COqIdxPMcXOCGzmN3dBheu3lxtL1p4m2Qq/KWLMw/wX0Vc0dSW2T6q5qGq1TK+veS0nw4dApGcP8QW3jZ8XSr5RxoIBNaNfJttUr/M0HMuWJSbOOtiQ6rAICthPExF0kITONiiOmUyfny7bInmIEC87CwCF/RIBLl7HYi5ddPP5vNqaAQa4OcQG82LXKkbjrZWZIxdy7KgqWWCpwCGVhrZsADaeCP3PrIrtbbA9+LeYra+gmVnWFCaPonPhDYJC3uepdsPCbdYnhgl4C141Pu1l6Bct4GI0uNTK/cQd4vRs2Ak1tj4Cn+4h3CqAD7Lvk30+OUJXFZxogIeyKUVdGL4FfOtWPNkroi6piHtPNpqwJlePKnV41vxX8UXG4nq8Bhr8M/9xA4IIi2jxA0tIQdbBQ28DGPRLAHZQb8OInTaf9SB2Sjcu1EyxX2ySFuCGPgKFswjZ96F+tphPLk/B8mWmwIAVX9I7R8/+2KRfuT/n3hhvsRUKGFu8f8TIObj0faPHQ4VqETbkFSFfWIjm06FiDJPq2DEIwD6AGEMXglsTu0LP00s+p3eMa0bUp/WSzkyX+S03vHqQpNuw61H9a7t6pMdpg4YIcthJBcqhSepEh X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(23010399003)(10070799003)(366016)(376014)(18002099003)(22082099003)(56012099006)(10067099003);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?T21OCJ+EsjwO9oq/7pvxaDFuSbwJm4cq16dAUtSD5IJ9SJJhOMIDWu7Era6t?= =?us-ascii?Q?YNChz1UaMfmOaA+baGcwnw+rCNLkJN+Iruk3dBKuYixJopxODIjiU7nH4qaO?= =?us-ascii?Q?cHqBYE6UqRIkRaLvAU0ZNi08pXBpyy6xCl7Z4B3kBo1AoAaVv6ldjBVLnrQW?= =?us-ascii?Q?wdCou/tlbonmrWBHEixj9MWPKnlckJG58d7fcC/UOUSmR7Af+BPw7TvxWZrM?= =?us-ascii?Q?rujQaQJzHvj1thMm7xyKcgE7ITtIT8cb/rKAZ3nQt8HmJviMAz+r3hEK++a7?= =?us-ascii?Q?fXhs2ki4h79HBXScJs6BMe+ebkBAQBhiFdVGwey53Qawyv9QrDGyvZDD3lTO?= =?us-ascii?Q?r4Yws4QLEJ07GbkZuSmz7oVdH20CWT0laSXm+wgmGo5eVEYDYGWh7/Oxggl7?= =?us-ascii?Q?u93bi6aLMhp7OjKXzZvGmSqa0brobI3ETuBur3FuBqs6DMtjX2bbDT+Tl7+H?= =?us-ascii?Q?pbx2BTo1YXODolLLexHLUmIFYV8+H/02YehVF1qx1Q7zRkYyBpwjUbnn2IVL?= =?us-ascii?Q?II4yHFdAlkW1hjm/asptL5YBc8Rylkpy2qFTqNYRGVZ+uaWWqma9GAlRZim0?= =?us-ascii?Q?CokAj8B6ow9pJ9FX1aZ4tcAFiBxGTpXRhtyrDMhIQHoez/wn9nALxCVWLWp6?= =?us-ascii?Q?S4nFdfJePhLMA6hF1NA9KQ2hwfxudiqqxZwKobfb5GKCD80q5aMEuQWZDZye?= =?us-ascii?Q?xJN6rOwu0k//ShdQuPBWAYANU+OpANoEHuHA7yVlg4Wu0AVnZyz8zcGyUKC/?= =?us-ascii?Q?xKGPwVMPWPNz/5aLloAYuLF/QpouZn/9oDnv+gp82WUr8eLrqiv42PjoF4O+?= =?us-ascii?Q?IAjVxwkUhUMj9u7o5zzPhfN/jYEDB/7DkcH0aAGHT72GrkooysIRWN+k3bor?= =?us-ascii?Q?aY3Wa0AuvmYidtArJTIauheIrFTFCU9Uh1u2dLDZChGRp3+c24AmDYohdwnT?= =?us-ascii?Q?EPmTif6VmZI+HvDXgF25mVrMEvyXM/iMx0hnHAYm+ugTR0VTdHSvsFXhoNwM?= =?us-ascii?Q?5XwRzs9AUAj2/0FeYdLnBrcpWg2dYvYwOiuO0KTL72ZLbzM8grY9zRwyrY6Z?= =?us-ascii?Q?nwUr+pDaMbYV/ihfV9eoHXM69qu10/3wypZfyh8QyWpoy1yXI6M5MrqidDHx?= =?us-ascii?Q?o8/V02hgsR/0zk97X1hzJgiacfDIDr0PPn6wudTwKv1CfnIhztwegRPZfjK8?= =?us-ascii?Q?9NaP5HTz91pmZ6EzTM91bGW4uxCGy51fZYzrOkTH56J200AiMZbAoS1FbW8J?= =?us-ascii?Q?McnpvDe5yGf0A1iPuTGzL/6d22I3RgO6ZqAVGAP1RVGNbEcD9a2uufp2f4Qm?= =?us-ascii?Q?1F6RUIiB94iXzn03pxrdmWHmQmSVwnAG4g5SY5JMTvahCwPAhkoCoxFxTiTp?= =?us-ascii?Q?Dbxfc/dSuGTdP8YcQ/WzDzzfMIK12oNGU0jS/yPCCasQD4BLxd5aus59oDNc?= =?us-ascii?Q?VmRWo7FsAKfjLcsR9vHRJ7WB3KYNud92pUNoH01U5qmdN3QbtCCUpnGxIL7O?= =?us-ascii?Q?7+mxSaX0cnAFggSkbXP1iEFnW3mDbYAkS0EjXIgvvw3DJElA4/wPcTOOhrS4?= =?us-ascii?Q?nOtMQ/5vpLgAy1q36nhBe4MwdTzM3Fs0usmB927yLAKg5h/KUBTEcewa1FC4?= =?us-ascii?Q?FtiKaZd9p//z49nQTyrf0swNJ6BDATtRZy+0WckuX1x2HIvmwIzc5TnZ2H0M?= =?us-ascii?Q?+//+7DIpxP/m52owqaMghJPZtfcf3CLMHH0e7SZfABeiah6pUn9gczUywWW0?= =?us-ascii?Q?NIcndEt132SwikydWkd/73a2jT8gR6/vFb5G8lyusQdTvYhhLuvX?= X-OriginatorOrg: valinux.co.jp X-MS-Exchange-CrossTenant-Network-Message-Id: 5576cb98-2468-4fa5-2cdc-08df05227cf8 X-MS-Exchange-CrossTenant-AuthSource: TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 Aug 2026 16:36:19.4118 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 7a57bee8-f73d-4c5f-a4f7-d72c91c8c111 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 8Au5HEccM+P+x3i8dtBDwr5REdiFr/VKYixPcn+iQujytb78ZK6kZ7kASORO9bqNBY2jKOfPyssD3m9XOA5zGg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: OS9P286MB7093 Content-Type: text/plain; charset="utf-8" The dmaengine core assigns channel IDs in registration order. If a driver skips a hardware channel, chan_id can differ from the hardware numbering and a client cannot reliably correlate a requested channel with hardware resources. Let a driver request an exact channel ID before device registration. Reserve static IDs through the existing IDA so they remain unique, while retaining automatic IDA allocation as the default. For example, idma32 uses chan_id to select DMA_CTL_CH() and DMA_XBAR_SEL(), so it relies on ascending registration order to match chan_id with the hardware channel number. Use direction-flattened IDs for dw-edma channels. Unlike the direction-local hardware channel number, these IDs are unique within the DMA device. Suggested-by: Frank Li Reviewed-by: Frank Li Signed-off-by: Koichiro Den --- Changes in v2: - Carry over PCI DMA EPF v7 patch 1. https://lore.kernel.org/r/20260813063757.3131865-2-den@valinux.co.jp/ - Add the idma32 example requested during v7 review. (Frank) https://lore.kernel.org/r/an4TXwT37vWYEzCn@SMW015318/ drivers/dma/dmaengine.c | 13 ++++++++----- drivers/dma/dw-edma/dw-edma-core.c | 1 + include/linux/dmaengine.h | 20 ++++++++++++++++++++ 3 files changed, 29 insertions(+), 5 deletions(-) diff --git a/drivers/dma/dmaengine.c b/drivers/dma/dmaengine.c index 6ffd8bd82154..cc64a4679e6f 100644 --- a/drivers/dma/dmaengine.c +++ b/drivers/dma/dmaengine.c @@ -1078,6 +1078,7 @@ static int __dma_async_device_channel_register(struct= dma_device *device, struct dma_chan *chan, const char *name) { + unsigned int id; int rc; =20 chan->local =3D alloc_percpu(typeof(*chan->local)); @@ -1089,11 +1090,13 @@ static int __dma_async_device_channel_register(stru= ct dma_device *device, goto err_free_local; } =20 - /* - * When the chan_id is a negative value, we are dynamically adding - * the channel. Otherwise we are static enumerating. - */ - chan->chan_id =3D ida_alloc(&device->chan_ida, GFP_KERNEL); + if (chan->chan_id & DMA_CHAN_ID_STATIC) { + id =3D chan->chan_id & ~DMA_CHAN_ID_STATIC; + chan->chan_id =3D ida_alloc_range(&device->chan_ida, id, id, + GFP_KERNEL); + } else { + chan->chan_id =3D ida_alloc(&device->chan_ida, GFP_KERNEL); + } if (chan->chan_id < 0) { pr_err("%s: unable to alloc ida for chan: %d\n", __func__, chan->chan_id); diff --git a/drivers/dma/dw-edma/dw-edma-core.c b/drivers/dma/dw-edma/dw-ed= ma-core.c index 03b2c2188351..a678c70a78fe 100644 --- a/drivers/dma/dw-edma/dw-edma-core.c +++ b/drivers/dma/dw-edma/dw-edma-core.c @@ -988,6 +988,7 @@ static int dw_edma_channel_setup(struct dw_edma *dw, u3= 2 wr_alloc, u32 rd_alloc) &dw->chip->dt_region_rd[chan->id]; =20 vchan_init(&chan->vc, dma); + dmaengine_set_static_chan_id(&chan->vc.chan, i); =20 dw_edma_core_ch_config(chan); } diff --git a/include/linux/dmaengine.h b/include/linux/dmaengine.h index fe33a20abc61..f669b79d7731 100644 --- a/include/linux/dmaengine.h +++ b/include/linux/dmaengine.h @@ -369,6 +369,26 @@ struct dma_chan { void *private; }; =20 +#define DMA_CHAN_ID_STATIC BIT(30) + +/** + * dmaengine_set_static_chan_id - request an exact DMA engine channel ID + * @chan: DMA channel + * @id: channel ID, unique within the DMA device + * + * Drivers may call this after initializing @chan and before registering i= ts + * DMA device. The dmaengine core reserves @id from the device IDA instead= of + * assigning the next available ID. + */ +static inline void dmaengine_set_static_chan_id(struct dma_chan *chan, + unsigned int id) +{ + if (WARN_ON_ONCE(id >=3D DMA_CHAN_ID_STATIC)) + return; + + chan->chan_id =3D DMA_CHAN_ID_STATIC | id; +} + /** * struct dma_chan_dev - relate sysfs device node to backing channel device * @chan: driver channel device --=20 2.51.0 From nobody Sat Sep 26 22:58:02 2026 Received: from OS0P286CU011.outbound.protection.outlook.com (mail-japanwestazon11020085.outbound.protection.outlook.com [52.101.228.85]) (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 3071F38DC49; Fri, 28 Aug 2026 16:36:35 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.228.85 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787934997; cv=fail; b=PH/zWazQZ9vOCjW28euZXTfSo4X0Q4fgjenOr/CWlcde0jRR9JxPU6ehEWPm0nKyJe0hsR1Q2bhsLRg5Wp2b0M2kdYJozQtrFKhvWmk26+rkWxR2Oz1yvElxPT3yi5hcCpZ+CdcqfZWTZq8P+LOw3cZxK9HknR+zMAnJGs6IjaY= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787934997; c=relaxed/simple; bh=E+PdjsMMqe2OEL+1cuoSo6h/w/wwIseGJIUk+iOL2Us=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=m37nf/nFRnwUBCgUIWZxnT4mW6QN1thZnn6yDmM2R8IFXaQZd1mqh7eMNgnPMc/bA7xD9iM19gKBpn5NPsm1i/UsQFl//ebeF688uBEkTUc2wuTL6BbP2XNwTJTmprercQTuIu1QyyanagC1ZP8cPyIK1+1v9F6UiVL9K6C6+DY= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=valinux.co.jp; spf=pass smtp.mailfrom=valinux.co.jp; dkim=pass (1024-bit key) header.d=valinux.co.jp header.i=@valinux.co.jp header.b=lUxb0X1c; arc=fail smtp.client-ip=52.101.228.85 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=valinux.co.jp Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=valinux.co.jp Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=valinux.co.jp header.i=@valinux.co.jp header.b="lUxb0X1c" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=MNG7U5muM6WTRuiaJ9h25iOF0b7j1MvSgQbzEpXSJEQXKDu9K/eW51/4VEzP/ukmy6C9k8BvwPuw+1+Tibw7wshumtWLXMQonat8w/+NexZo3Hb9IY0BoYCcyosd6izIPS+3vNDCEfvL5/Q/ijatcSFvhFt4s6YUZUNqIe3Usq8Rzj0SROq83YRmzUUz9xWfCHFIQEBlfPbiUmtGC1xcq8Tdh0Q1UlrLuUWoIE6XvYHj9iOk1rGGQqcVkhCwRjFTwCAsL3GMinn+UJBiG838lpwUXm/GMJDXME61dw9MoFBo9YXJHm0J7sg+uc5kF5G3thiO7vTdHVH2g12jAvxEeg== 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=O5u9IMIo4Nnd/OQyyo9QiDjDV828TzZqPrCNkBNKTT4=; b=aTe5YIB7Di9kVwtS355uUZFD51uxnKaTQKn5QomtWs4EbVEDbucO6cbq4XdEX9edTBDqFDWyOeD5gyNTqqVxMtvF3CvwJy/yr/vD7l1lUIRYZMRlP0ne9e2zMAchF9FU6UUFlvCZRAp15NGanK0lfpDL+7wEL8WIgWy2YBh1FXzU4wf1/b1VamNuIH6EZKHqOB9AEeD0B4NgIUZT4J5FoHrZ+0+Zv0mPL/k0iAOw0VESUg7F18pg+vqi0GtB7Cijufg4pavJPBfj4LvbblYg9ol24eGrj+OYC7R/8OJK842vvvUcH0CMXOqNcFLghAY/k42lOyggbl+Mm3zLLbLvWw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=valinux.co.jp; dmarc=pass action=none header.from=valinux.co.jp; dkim=pass header.d=valinux.co.jp; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=valinux.co.jp; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=O5u9IMIo4Nnd/OQyyo9QiDjDV828TzZqPrCNkBNKTT4=; b=lUxb0X1cTY052lYshsN1nxurCEoQFgM3JPtSQw8ZfTaVPKfYEkn9Wvs4Sip700SNR3FFlJnDz6/YP4K7tskfWNhxOZ9MBBB5D6ROAaVV7BrloSzcUwqgVY2ic4d15mWRlAvyetxhqVyGZso26ydIFbkDnOEVEWTFPlz/sJS7h8g= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=valinux.co.jp; Received: from TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:38f::10) by OS9P286MB7093.JPNP286.PROD.OUTLOOK.COM (2603:1096:604:414::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.360.11; Fri, 28 Aug 2026 16:36:20 +0000 Received: from TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM ([fe80::2305:327c:28ec:9b32]) by TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM ([fe80::2305:327c:28ec:9b32%4]) with mapi id 15.21.0360.008; Fri, 28 Aug 2026 16:36:20 +0000 From: Koichiro Den To: Vinod Koul , Frank Li , Manivannan Sadhasivam Cc: dmaengine@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v2 2/3] dmaengine: dw-edma: Configure remote interrupt routing Date: Sat, 29 Aug 2026 01:36:10 +0900 Message-ID: <20260828163611.2691264-3-den@valinux.co.jp> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260828163611.2691264-1-den@valinux.co.jp> References: <20260828163611.2691264-1-den@valinux.co.jp> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: TYWP286CA0015.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:178::13) To TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:38f::10) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: TY7P286MB7722:EE_|OS9P286MB7093:EE_ X-MS-Office365-Filtering-Correlation-Id: 2f607b9f-08e6-4d43-97e9-08df05227d6c X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|23010399003|10070799003|366016|376014|18002099003|22082099003|56012099006|6133799003|10067099003; X-Microsoft-Antispam-Message-Info: SI6XalpEobwBkXYPN+Ac9zWVZDIii9K7dUw6gbDSZMDX7XPwSk3UFFtN97A06HY4nc/8fsuQI5m2tdN/BqzUO4cKM10kTFe3DgJIjR9qccRDf3ccRVRmoqerinY4B65uJ8ZTYK2Y2NzmHr+vCR2vMSMUVCTnilkxWVcVZTExYAn15zunwraHAwfDYmpQcZ/FSszz/b/naboMk6WjzMEoJrnrKP/hm/yWtt1KdQshyYeLb45gnCLY2L3OxibEsxJZBOBiIwKI5auJ34f1QmzWA5SpY0uagH02oL2e67G9YFjNSXYfNijZ3J1jNMBf6ixiyPZrijD6FX0/RZdVM8s58z2JqY4rXs/g+eUbWnL7IgV1uWHh+BItXu6eUCzm/0MbfRgmtjJSHKsUtaoKMnS0BgQpuLciSkiCz5zEkX2ngARfQmZoDaojl4gq40GLn4ZXQTsE2/jo6JDXAPzU1G6bQZZj3mDw2P9GAqmO6aJX4S84JrAmfAG2PwVpKhZNG39ZxjXBl/G3U/c5DZF/IxGpT6580Q2+2APdvcyXMRU87bJnD5kfY9eF2cj3BtaPjFBhgtiqdR4GnXAYkcJ7uoHzjaqeAdx6cPCUqVKPxW51n7+cni8u+vItkPKS18DQCcch X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(23010399003)(10070799003)(366016)(376014)(18002099003)(22082099003)(56012099006)(6133799003)(10067099003);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?UN98jKiJBbgamXCt4sTFDPDm5C2+bfWm/BZHsJLAfmq4ya8jDhymKHDcMrAV?= =?us-ascii?Q?PL8Ht81j7V0DqMX3aHzYE3oC8hE9R1HJQCSkd8j5oXRsY0TkaJDZmeDJUrTI?= =?us-ascii?Q?LmNb3VeIhFqVFlTLJ+F2uxCOuuEEdHf0d8LARiG5bagPKWQ/bEk0/XZ1757k?= =?us-ascii?Q?KTVm+S1GOfQACQvCBg9tngUFY+6UipbWujDbn2RhvWs6zqtHPJR3RXy9RIsm?= =?us-ascii?Q?YPvf9WqeVK6DjM7Biqmad4kC/rU2eUql38RH3meiRWgPpN5HqizOQ33t5o4A?= =?us-ascii?Q?cDTpQF1iOiqv8f9r26R+YKfqsC+eV3j1EiIp+JgepZnJnST+viPlqbUiQuNt?= =?us-ascii?Q?zaMMb3Y2pH/gni5MPmt/4EeRgfoo87Uc+S8Qkq89x723Dal7KqMUKn2WWk6Z?= =?us-ascii?Q?HpLJUopztNoUaEgL5g9hRqupyOmWQvF4LdGSJJpdwACXzdPmErRe/2pCjFL+?= =?us-ascii?Q?kBNSWkxjku6psezjhLFCx4GvNavmII0Lt8JpaYAJE8K1Oj0sFAOEa39eVgnv?= =?us-ascii?Q?u9id5OYY8x6LTJCJPFeKTe8Z1qA7yoRp3j3VI9IOOkvu07rcqxvmIcppqqjW?= =?us-ascii?Q?uPZCAftA3szMnkz9SWhXgcCLwKbqY5Dq1IYb7riJnEvKGNFKSWe6x/uBDUlm?= =?us-ascii?Q?PT8kFGtqRUsMDKqu02tpNNNIvrCye7BTEt8kn1RcuOOuvZVumqGyxvy+dEVQ?= =?us-ascii?Q?fR1CHV61huraKte4FH1wJjZcA81Y3fM9cJJpIeDbN7KSDe5Y+mkctDooCNZy?= =?us-ascii?Q?sfLZZGcnXR26DhzuFLhx4OvkziPw4Gzywbu+c9ccyZafheK3ab7VFmW/WmUm?= =?us-ascii?Q?4j5vTjijSF2bZwh4tT4dqNu2HMbGfJpNMsw3Q9xRysKzANlWpkIOm569QB8y?= =?us-ascii?Q?gNLct8KvQXEZxq3RRQ0UV45iM5D3d8S7H8ApAbcNxAYpGuYU5pt67tXz6vIT?= =?us-ascii?Q?PEpx9gqf/rKrK9FqfJoE8hT9W8vgV0jNYOLpVKlKg2dHqBhLRVXwTQ8YSgqK?= =?us-ascii?Q?jz1nDdbKY6DrZmVhn2T4mKEkohGIkHxI1CWGq58sCVuTjHzrh/gzvkT+bA3c?= =?us-ascii?Q?Lzsmj/WqWXl4m6o2jcTDty4qmjgIbNtVA4Bh3ds3IIpGuUrFE0SYzg0+6hxp?= =?us-ascii?Q?/cbu4YcO2byusINs0Xr/QRhQnqeKlDXZSE+ZeEfC4fYOUpcA6l1iwmzm5vt7?= =?us-ascii?Q?971ZBpDiNgKI+picnzR4P4hrKMUPwxIrXqdRacvzHUomXiMCFghmd4L3c1Al?= =?us-ascii?Q?/ZVWcfrX5tNoB19Hr1l2QiBqCfxNX6OsVLGVVAXEYDPGbl2eS7elpdUYZPfT?= =?us-ascii?Q?CRAGIZmOGMKuLnLP+D3D1M0HI6aWBn1sSCqe/hgYSV/YC+b5NIu+1FxE1kLl?= =?us-ascii?Q?cUG1b1w8nNWD+EitBvyaoiqq34CwEouoccG25D5MpscnMzAGIp9RP1bBpXF4?= =?us-ascii?Q?VWA4T0dbxmAlzUr5oLetpZqLK1UQmOzyFY9pcubSFV0k/qvzMTxILe7k8v7i?= =?us-ascii?Q?kAV8Plhn4AXYiqClHMhfHA2bwH3UKD5iBPzMWxQj4hc/HKXk2q8J0TjEQDR3?= =?us-ascii?Q?NMFIGVo9EkgjILoOMyxPeRVGii4ORpawUhzRpfq+z8zuVaBipFZqAicsbsDS?= =?us-ascii?Q?Uka2wMZQawu8EBZ5vGOer2I0SlIOqOT9bGye23dFDcAyj0HpqSATFvSoYgNT?= =?us-ascii?Q?EZIe3rFSNZyVa/Z4Xi76+92AV72znw2T3jjR8w8l7SD+sTvvGjVv+oS981yo?= =?us-ascii?Q?YHu5QmMjqLS41t5i1uhkCWH3S+s9bDCFGVAvFgqfuwQY/rpO/po2?= X-OriginatorOrg: valinux.co.jp X-MS-Exchange-CrossTenant-Network-Message-Id: 2f607b9f-08e6-4d43-97e9-08df05227d6c X-MS-Exchange-CrossTenant-AuthSource: TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 Aug 2026 16:36:20.1798 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 7a57bee8-f73d-4c5f-a4f7-d72c91c8c111 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 5upyn/zLWe64Cf58Dm76nbYRgKxE3FXbMhfO4PxBk84BbhuRamKZ5fbXdjIcD8i+mgJAP2YkbUuLhpiF6ZR+Ag== X-MS-Exchange-Transport-CrossTenantHeadersStamped: OS9P286MB7093 Content-Type: text/plain; charset="utf-8" An endpoint function can reserve an endpoint-local channel while the RC programs it through an exposed register window. Such a channel must route interrupts remotely and ignore them on the endpoint. Use dma_slave_config to set enum dw_edma_ch_irq_mode on idle channels of a local eDMA-compatible instance. Synchronizing a remote-routed channel quiesces the hardware, after which the caller can restore its routing and release it. The eDMA quiesce may stop a complete direction. The caller must own every channel in that direction and stop remote programming first. Suggested-by: Frank Li Signed-off-by: Koichiro Den --- Changes in v2: - Rework the channel routing from PCI DMA EPF v7 patches 5 and 6. https://lore.kernel.org/r/20260813063757.3131865-6-den@valinux.co.jp/ https://lore.kernel.org/r/20260813063757.3131865-7-den@valinux.co.jp/ - Use dma_slave_config instead of private delegation helpers. (Frank) https://lore.kernel.org/r/ao2nHoCwfTEEiFSr@SMW015318/ drivers/dma/dw-edma/dw-edma-core.c | 51 +++++++++++++++++++++++++++--- include/linux/dma/edma.h | 6 ++++ 2 files changed, 52 insertions(+), 5 deletions(-) diff --git a/drivers/dma/dw-edma/dw-edma-core.c b/drivers/dma/dw-edma/dw-ed= ma-core.c index a678c70a78fe..a8c6bd508fcd 100644 --- a/drivers/dma/dw-edma/dw-edma-core.c +++ b/drivers/dma/dw-edma/dw-edma-core.c @@ -177,6 +177,30 @@ dw_edma_get_default_irq_mode(struct dw_edma_chan *chan) DW_EDMA_CH_IRQ_REMOTE; } =20 +static int dw_edma_device_config_irq_mode(struct dw_edma_chan *chan, + struct dma_slave_config *config) +{ + enum dw_edma_ch_irq_mode mode; + + if (!(chan->dw->chip->flags & DW_EDMA_CHIP_LOCAL) || + config->peripheral_size !=3D sizeof(mode)) + return -EINVAL; + + mode =3D *(enum dw_edma_ch_irq_mode *)config->peripheral_config; + if (mode !=3D DW_EDMA_CH_IRQ_LOCAL && mode !=3D DW_EDMA_CH_IRQ_REMOTE) + return -EINVAL; + + guard(spinlock_irqsave)(&chan->vc.lock); + + if (chan->configured || chan->status !=3D EDMA_ST_IDLE || + chan->request !=3D EDMA_REQ_NONE) + return -EBUSY; + + chan->irq_mode =3D mode; + + return 0; +} + static int dw_edma_device_config(struct dma_chan *dchan, struct dma_slave_config *config) { @@ -184,6 +208,10 @@ static int dw_edma_device_config(struct dma_chan *dcha= n, bool cfg_non_ll; int non_ll =3D 0; =20 + if (chan->dw->chip->mf !=3D EDMA_MF_HDMA_NATIVE && + config->peripheral_config) + return dw_edma_device_config_irq_mode(chan, config); + chan->non_ll =3D false; if (chan->dw->chip->mf =3D=3D EDMA_MF_HDMA_NATIVE) { if (config->peripheral_config && @@ -213,10 +241,6 @@ static int dw_edma_device_config(struct dma_chan *dcha= n, =20 if (cfg_non_ll || non_ll) chan->non_ll =3D true; - } else if (config->peripheral_config) { - dev_err(dchan->device->dev, - "peripheral config param applicable only for HDMA\n"); - return -EINVAL; } =20 memcpy(&chan->config, config, sizeof(*config)); @@ -893,6 +917,17 @@ static void dw_edma_wait_termination(struct dma_chan *= dchan) static void dw_edma_device_synchronize(struct dma_chan *dchan) { struct dw_edma_chan *chan =3D dchan2dw_edma_chan(dchan); + bool remote; + + scoped_guard(spinlock_irqsave, &chan->vc.lock) + remote =3D chan->dw->chip->flags & DW_EDMA_CHIP_LOCAL && + chan->irq_mode =3D=3D DW_EDMA_CH_IRQ_REMOTE; + + if (remote && dw_edma_core_ch_quiesce(chan)) + dev_warn(chan->dw->chip->dev, + "failed to quiesce remote-routed %s channel %u\n", + chan->dir =3D=3D EDMA_DIR_WRITE ? "write" : "read", + chan->id); =20 dw_edma_wait_termination(dchan); cancel_work_sync(&chan->irq_work); @@ -903,12 +938,18 @@ static void dw_edma_device_synchronize(struct dma_cha= n *dchan) static void dw_edma_free_chan_resources(struct dma_chan *dchan) { struct dw_edma_chan *chan =3D dchan2dw_edma_chan(dchan); + enum dw_edma_ch_irq_mode default_mode =3D + dw_edma_get_default_irq_mode(chan); =20 dw_edma_device_terminate_all(dchan); dw_edma_device_synchronize(dchan); =20 - scoped_guard(spinlock_irqsave, &chan->vc.lock) + scoped_guard(spinlock_irqsave, &chan->vc.lock) { chan->configured =3D false; + /* Avoid a redundant write racing with shared-IRQ readers. */ + if (chan->irq_mode !=3D default_mode) + chan->irq_mode =3D default_mode; + } =20 vchan_free_chan_resources(&chan->vc); } diff --git a/include/linux/dma/edma.h b/include/linux/dma/edma.h index 3c8e2ef9dee0..54491c9e4b5e 100644 --- a/include/linux/dma/edma.h +++ b/include/linux/dma/edma.h @@ -92,6 +92,12 @@ enum dw_edma_chip_flags { * handed over to and driven by the remote side, and the recipe above is * applied by the driving instance. * + * On a local eDMA-compatible instance, clients may pass this enum through + * dma_slave_config.peripheral_config to switch an idle, unconfigured chan= nel + * between LOCAL and REMOTE routing. Before synchronizing a REMOTE channel, + * the client must stop remote programming and own every channel affected = by + * the hardware quiesce. + * * HDMA linked-list watermark interrupts have the same LWIE/RWIE guidance.= HDMA * non-linked-list mode has dedicated local and remote stop/abort interrupt * enables. --=20 2.51.0 From nobody Sat Sep 26 22:58:02 2026 Received: from OS0P286CU011.outbound.protection.outlook.com (mail-japanwestazon11020085.outbound.protection.outlook.com [52.101.228.85]) (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 CFE51364EB2; Fri, 28 Aug 2026 16:36:29 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.228.85 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787934994; cv=fail; b=SFB/OaOyQZNVBh+PaYTZQWNKKtLhGR3kEZQxPPvLyMpkVVDa3IBmpXsfRx52pb9CeilE7oSZYKebNvA+EgRg45EdhJhTep4x3h0Wjb8G+ulf4L9xyh0MwwIQVvyBh8SrldN0vMOfypm+HyMoGjyCrRw/WE0mpfPz7EBrVlMm2Yo= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787934994; c=relaxed/simple; bh=/QJc3sYa06YjxgvMEIhoHb5OM74z5/SpQzJalKcDDcQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=eL5hlb5lUBTk/XCfljtBpzxo0lHpDoJNMkLVxXk+MB/hOyweHaiTDqd/KjPYyp53KI0IqWQ10S0wIvJQRpT+0XUz7pgwZcqU4fvDA8KJ7RssnZQ47KN7UhQ5PpcmxitsWzWMe4hopJIX0Gp/1PbrWzSEsZT5KCCqPZXUT06bVr4= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=valinux.co.jp; spf=pass smtp.mailfrom=valinux.co.jp; dkim=pass (1024-bit key) header.d=valinux.co.jp header.i=@valinux.co.jp header.b=ciBZ+1cs; arc=fail smtp.client-ip=52.101.228.85 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=valinux.co.jp Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=valinux.co.jp Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=valinux.co.jp header.i=@valinux.co.jp header.b="ciBZ+1cs" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=wGvamblRU3qzNJ9cVYpSXmJ9CIIbCpdp9V0kmbliH+oRLA4uSZrTGn385IeUEB5Oq4EL/fncUXWURzLc1N2ef0KnMSCQOZg+3ElpxilzIeoyaLqGigbl4tpveYAnXF/TDlf8OfEO28kxfPc2rX5gkV/kpj5mIQmhqB49CI8tZfpO+CJH7tbn5WPu9fM5a69UFkAm3IZCerWmQL9nLEGvZ+pn3+Tfn871pLA4Ux1twAbsDlwFwAKtGwH8fpHO8XnhMDuJ4GEr4lGZ6Pei/+0InMpNbZVPvY8TLhYgNfHUTIjNacYiWHfszeFG5laRoGWcqOF0ro/syzCoTgcEVyar8w== 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=Rw+wG6U5FOKCDBqiJQMOsffEmQQac1PxxUls0/ytRoY=; b=tL4pbkTzvrrKxy/AFTukgR5w33FfV83Mv+XkYjCC8iQe/iq59A6dQ3mRF6tNVF8tsILSwaMnzMf3U56KhhNe/FL66awdMADKsvtOflp5GwQ5DFBJq7lAxhaa6cPe9PuaMbEAnOYjw9Cgkb01mQGgN5a4ijk4rvKK86JaDrpfk0UtmGULSfQwbknXtEA5CS9FGItboIqkfZ03xnsxJs1n6LR1aGbs4TZ7yLMq/+8Trr6zHA/6EoY4S5pNS1ZY3TajT2hbEcZ4BqH0Jeea7Gn9dkvX5MI1TAeiO9J+1k7tQ3NGq9jSydVWaZ+z57revXZF+3jZSu9BSSMWsbh+XTIz+Q== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=valinux.co.jp; dmarc=pass action=none header.from=valinux.co.jp; dkim=pass header.d=valinux.co.jp; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=valinux.co.jp; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Rw+wG6U5FOKCDBqiJQMOsffEmQQac1PxxUls0/ytRoY=; b=ciBZ+1csVx3dP0u5w+KMAhDlMmHJVdOkuVIqn2uy3nA64CPcorz8Jmyahc1VrFFa/WwWEmZqF5j+7DBLtteTTymI7oR3uzW+0949+ohT6OeVzMsCLtRT9nU46HtilcEPnioe1xR7aeq2WBahqykYV8FlTug45076aSSa11az2MU= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=valinux.co.jp; Received: from TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:38f::10) by OS9P286MB7093.JPNP286.PROD.OUTLOOK.COM (2603:1096:604:414::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.360.11; Fri, 28 Aug 2026 16:36:20 +0000 Received: from TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM ([fe80::2305:327c:28ec:9b32]) by TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM ([fe80::2305:327c:28ec:9b32%4]) with mapi id 15.21.0360.008; Fri, 28 Aug 2026 16:36:20 +0000 From: Koichiro Den To: Vinod Koul , Frank Li , Manivannan Sadhasivam Cc: dmaengine@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v2 3/3] dmaengine: dw-edma: Account for the MSI vector offset Date: Sat, 29 Aug 2026 01:36:11 +0900 Message-ID: <20260828163611.2691264-4-den@valinux.co.jp> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260828163611.2691264-1-den@valinux.co.jp> References: <20260828163611.2691264-1-den@valinux.co.jp> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: TYWP286CA0017.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:178::10) To TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:38f::10) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: TY7P286MB7722:EE_|OS9P286MB7093:EE_ X-MS-Office365-Filtering-Correlation-Id: c720edd0-daf2-4fd5-a999-08df05227dde X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|23010399003|10070799003|366016|376014|18002099003|22082099003|56012099006|10067099003; X-Microsoft-Antispam-Message-Info: 4K7oZsvFNg+2rANXoU2bwaTZAr00jYUMwPGA9lb7vwKR463pENdN8wqMB0F3U0cKF1w8zfmOcllEUUL6GQd3JPYdcdHVHa8g2oFFUlTcXr8c3pIKd64+ipw26Q0SBkRDJnHc59b6677EyiC2PDgfn4WTrlG5rB771cCo1gipr0LXIpz3vcJ9bFKNQ6Dd8Eoj3hZNR6gxYjlcWIozEbhDyCXho7DvqrWjRlmGXSnIlTJRK0WYe0FM0kcT09ycHUW65OLmzpq0YpDiQ+jLimGzxv1oFoXkOcgZSa44pNEti+NPFm6xr6NxV6is0akqZlEoqVhW8WMkfCaLkHWHqswm4Pc9+u5ON+rOZZBjeXV/V3LhQ1HVcISqXBfdjYBAlr3Fm2OpNUCIAzAtRGmVaS030j0FLjvR7KYMzen2wEJAoPQ7ka119LSJXOYtVW+Y3YXMK+SECCd8wI9RJ5v0drSlNGgkBqslTh93zi+mDFkvWmFv5EdnacunuB09B05ztvWglhjRvZlpAGYAbO67sMg04H+oojCLAmx+FecbYsy+BYLVdnBDAg2o6tIJSdmoUfYtQP2MdAJReDaxUYSJI2uCG7qOkSoKBeY2veQXzLQ4r3U= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(23010399003)(10070799003)(366016)(376014)(18002099003)(22082099003)(56012099006)(10067099003);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?8cb1IY34CqlbfFoi2275blMfMiZ5Bi8cPfdItnYF7y+hKpZ3+zlYR7ysMiup?= =?us-ascii?Q?EXz/WnmRuqzQf0AfmnLpZnfxnLim4FBlBpdAKr7vQ11vXKlPWSuGLvH4MFdR?= =?us-ascii?Q?vI8p6BXzO78s99wfzj0dvk/FNihry8xCL4NyPr6eRiHc/Qj2/ernRoSrb0ud?= =?us-ascii?Q?kdo6Yx7Hv9+XzSquGVd4TxnO576amNSzZC3ScxKzycJ8EexITMLmcw629VJC?= =?us-ascii?Q?MWTyz72kSDxW+H91BsBUUGLOCG69GfJiiZmq3fHbPQJOAc4HRPCdWeFLxW76?= =?us-ascii?Q?WjJTq6OIEvYKPI4XKrQVvmYSwItTZtoHPIR2csu8+JcMcz88OOVNJ1vJwdBQ?= =?us-ascii?Q?8FRjdyRXhd4Ttg4kpf4fVTu/QsvP/Sy8tGpGdRe5wY1+jGumHRfJu+15zEKV?= =?us-ascii?Q?tTA/ZYkyrZFVxK8tfuOVdhr7FnctViheGTEicSMamyUoEhOABj9r8Wayfr8x?= =?us-ascii?Q?TKyLZhhbAV1bpnV33HTSQLr56Qo4Rm0KDvxy9RxNXY36ureBd2HRv97cg7be?= =?us-ascii?Q?rcwQP/VbVjW/6DSWG1O3myl4NxVCAfnrIORmQXRsj4GybBHElYpeRdJWfr9V?= =?us-ascii?Q?cKVGi2RDaJmW+1RbCBW5ZUeDhz39vnQBUmoilooaLFvYrWfTO0YmTpsqmXUR?= =?us-ascii?Q?0lI1tSRnJg+W3dQd1zW6o9Q8RAGjdDo1aYQhFCec+RHQA7hoWBDqlT9yV/V6?= =?us-ascii?Q?0TTaJP6LW7wEGTTjfU+5vBVI1nbcIbOHQ8AaU3ZCpEThy5IaeJBH+tvH8Rvs?= =?us-ascii?Q?9PiQWpV1sWBFTaim2jXqYAe4k1eHW1HfIuvS4Jb39e/kloPkJWPH0hd33fn8?= =?us-ascii?Q?92XOKc/ua5pva2EWLs6Y78iGLlAOFfES5EWaVX34jBy9IhyXzvAqHN+AIBeM?= =?us-ascii?Q?Bobbd/wrsAReUKESEcHeKWRMTTOOpLbaCjst/xVqondvEirH1lr+UOnAlfvl?= =?us-ascii?Q?xvV+wSSTNrVVcGddQO8OytllkSrYGqg2WijnlU1b/xV7dI+xMaSi6kXFwuHj?= =?us-ascii?Q?cxvpalxYm2sQCpf38B8M/a+V8RyEieX7MXlbzcAeUU/a9MzvmPp3frPfDAqD?= =?us-ascii?Q?Gt6XBOOtG/4Y7unQ1Y6Z3EVybTWlxXs/tPdbvg0rdUKtZIPRaZvzkd5z+vY4?= =?us-ascii?Q?MGc3mdbOvbU7Atc0XsyHkzdbcG+0EKflfdYzoB6XjRIUOKobYrCMdtYojISz?= =?us-ascii?Q?JtvKoFlukQ/0qgczGOUgs6d5k1/aVlW00+Gqgd0rWCR4o1w9d3OIfJ8G7M+8?= =?us-ascii?Q?X/W8DoKdAg/O1mQs77hQZWY1RSs5mnECS0tSr3TZqeViX8aphkzlrR3RxGoR?= =?us-ascii?Q?2+ydNw9ZrtaZ8Q5/s61Er15+xjgTjF6THyxO4Y5BB8Q7sP9nUKEnr2XWRLNE?= =?us-ascii?Q?tV0/cEkHeHCEm4x/29FLODoHs16eOQUeLH3Lt6g6Toe9UI6Lfd5bknLYIBGm?= =?us-ascii?Q?lmzUcutecRDflfwguCzG2cwlxx2a7kcnV0XB0i18YEV+RlncWvy7ecNRZGXn?= =?us-ascii?Q?XBlBws0YGwyem5sI0TbjDEb4qdHwlyVjq3WfwVr1E0bG7jsC63JuDrwIrIeN?= =?us-ascii?Q?zUM6WpiteNh09fyQlJ//Kav1ABmZ+u25vgIVya7Iul1cBlychZ87SauUE82l?= =?us-ascii?Q?90cN6iVjzgUFq0TJicE+gen+ItkbSIvUJ3z6ODx0uFRrC1Tyk8bLYT6gUjNq?= =?us-ascii?Q?XYLpdOqbKgBx5fIHK5YQaVOkiZ88BNx69TaKa1NE2bebMOHFCVquwZnaB/Cm?= =?us-ascii?Q?Z9HJs6R1wqtfXUF4RTnj7xPj/XEPUD4eFa3i/nsg2Tv8L50EPDBC?= X-OriginatorOrg: valinux.co.jp X-MS-Exchange-CrossTenant-Network-Message-Id: c720edd0-daf2-4fd5-a999-08df05227dde X-MS-Exchange-CrossTenant-AuthSource: TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 Aug 2026 16:36:20.9106 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 7a57bee8-f73d-4c5f-a4f7-d72c91c8c111 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: AUUDHVBmDttji381aJX81S4Qi5NAy3phpWxlW2m4c/gh6muScCmLIw8b60pPfFHkpHzpqKwH6AedJpyTNJA8Ug== X-MS-Exchange-Transport-CrossTenantHeadersStamped: OS9P286MB7093 Content-Type: text/plain; charset="utf-8" get_cached_msi_msg() returns the base message shared by a multi-MSI descriptor. dw-edma currently derives per-channel data from its local IRQ index and does not adjust a common IRQ at all. Both assume eDMA starts at the descriptor's first vector. That is not true when eDMA receives a tail subset. Compose each message from the IRQ offset relative to the descriptor base in both paths. While at it, avoid reading PCI MSI attributes from descriptors owned by non-PCI devices. Signed-off-by: Koichiro Den Reviewed-by: Frank Li --- Changes in v2: - Rework v1 patch 5 for an MSI allocation shared with vNTB. https://lore.kernel.org/r/20260312165005.1148676-6-den@valinux.co.jp/ drivers/dma/dw-edma/dw-edma-core.c | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/drivers/dma/dw-edma/dw-edma-core.c b/drivers/dma/dw-edma/dw-ed= ma-core.c index a8c6bd508fcd..6af8a414e4a2 100644 --- a/drivers/dma/dw-edma/dw-edma-core.c +++ b/drivers/dma/dw-edma/dw-edma-core.c @@ -7,6 +7,7 @@ */ =20 #include +#include #include #include #include @@ -1075,12 +1076,23 @@ static inline void dw_edma_dec_irq_alloc(int *nr_ir= qs, u32 *alloc, u16 cnt) } } =20 +static void dw_edma_compose_msi(int irq, struct msi_msg *msi) +{ + struct msi_desc *desc =3D irq_get_msi_desc(irq); + + if (!desc) + return; + + get_cached_msi_msg(irq, msi); + if (dev_is_pci(desc->dev) && !desc->pci.msi_attrib.is_msix) + msi->data +=3D irq - desc->irq; +} + static int dw_edma_irq_request(struct dw_edma *dw, u32 *wr_alloc, u32 *rd_alloc) { struct dw_edma_chip *chip =3D dw->chip; struct device *dev =3D dw->chip->dev; - struct msi_desc *msi_desc; int i, err =3D 0; u32 ch_cnt; int irq; @@ -1105,8 +1117,7 @@ static int dw_edma_irq_request(struct dw_edma *dw, return err; } =20 - if (irq_get_msi_desc(irq)) - get_cached_msi_msg(irq, &dw->irq[0].msi); + dw_edma_compose_msi(irq, &dw->irq[0].msi); =20 dw->nr_irqs =3D 1; } else { @@ -1129,12 +1140,7 @@ static int dw_edma_irq_request(struct dw_edma *dw, &dw->irq[i]); if (err) goto err_irq_free; - msi_desc =3D irq_get_msi_desc(irq); - if (msi_desc) { - get_cached_msi_msg(irq, &dw->irq[i].msi); - if (!msi_desc->pci.msi_attrib.is_msix) - dw->irq[i].msi.data =3D dw->irq[0].msi.data + i; - } + dw_edma_compose_msi(irq, &dw->irq[i].msi); } =20 dw->nr_irqs =3D i; --=20 2.51.0