From nobody Sun Feb 8 14:31:39 2026 Received: from TY3P286CU002.outbound.protection.outlook.com (mail-japaneastazon11020123.outbound.protection.outlook.com [52.101.229.123]) (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 15EB841C2E2; Wed, 4 Feb 2026 14:54:52 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.229.123 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770216892; cv=fail; b=lk8UTN07iyrLQ7xkbFm3g3hbvc1iE4VjzKsju7g99nkmIICjuWjAwFKSFsMHFxzc3RA8KrVKfCejuK+mObvEtj8ex/oHHdQiD5xCFrNtN2k0I489nNMwZufn3/bJI5ne7wnuntRDbom6tbrxBkvyJT36SwdBP0UqMjZ61DpF1Zw= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770216892; c=relaxed/simple; bh=51Qf6qtqpHPSrOevyQgT2E7D6WnkVcrLw44/aVXHoCc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=QXrVEmAVV5GHAlc5wDQve+0h17+u5AyoK2wUabNgPPJ/aSSBWUYKSVY0KB5PO+vhVKnC1L3OwU7kvT7Pn/60toBFBtZCzRlLf1cp3lR8c8u++p8pCNBLmXECz2eoOF2QpMeBv2na0HHBDN/YOe2+ANb8W+i0LFR5ke0fsg81LJE= 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=i+XQfidU; arc=fail smtp.client-ip=52.101.229.123 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="i+XQfidU" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=Hj9Nz/AzEn7Thfw5e/j3b2rqoWA0yikcsD3+FSj8jrtmhxhhRzdeSLBZW3OR0dXLGVT79tb6iH6DSXnjq14BBgXee5lgz3enLh1m20p8QZfgufPjfux7fdDPDhTLymqDoSbBYBBj8ZSQ84u4cRY33YkFO30i4TwgpHOTnTFHRKKG4zgFCk4q8OxIs+hnZoU8XLoEIeAyx/eb08IfBt2QE5l/LFfGSOm0nCy6m0AsBdfySMUb1npXGM4AmHWB9bnZuOaCeC8o5bWtXpH2kJBxAQOEEcWeKtb91yKz2eJE457w1D/VwCfG3/tZFXmCvqlPY007pKLv7tsjzNdu+GrLyg== 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=dxSyS2mhCqhW3G6O9AwHIc0j2k4qcGaEtcjBNZM1SLE=; b=NZuHVD9IL+cNqxOYhmOL3SXqzTqEoBHPenaq/cTGSuRoLef0f/xJI50pR0d1Hh+obccgrYi9sZCc5Kf6GDQfGlR+MfFoR7DtZiy7bowXpquJbnC349Plh3uM5r3R5o7MimJ+IKSvmbwBN+tCsFILCkW4YwRnBUSCZ/hUIX9hZJl6uFcXsIKUsBxblDlhhTrdOqrrceRhpt4dOGLDf4HTS9WvM7Opkn+KwxUYepBm+vSV1LM9f2iYIDzqJzlFYqUe4bAy/Po0RET1qp/dV3WL+XpH4zlHrDxO1Kk0vmJOUOnD1y26VY7XZeObefKsp71BOiekaesJSm/i3BxRnP9crA== 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=dxSyS2mhCqhW3G6O9AwHIc0j2k4qcGaEtcjBNZM1SLE=; b=i+XQfidU7mQAUMhDz3wZ5qMteWQ+6ypZpZ5VbECO6KQF5FXywfms70ynR948mipzWff+1M909o3YMyFzhWxjFkB+siSKABFZxIUBTnEpZn/wMLpgpJTrCCnBlb2ArpXO0A0GYp9WusSUVHsiVJ3mf3rJ0om1INyXIXt1xx54ZgE= 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 TYCP286MB2976.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:302::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9587.12; Wed, 4 Feb 2026 14:54:48 +0000 Received: from TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM ([fe80::2305:327c:28ec:9b32]) by TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM ([fe80::2305:327c:28ec:9b32%5]) with mapi id 15.20.9587.010; Wed, 4 Feb 2026 14:54:48 +0000 From: Koichiro Den To: vkoul@kernel.org, mani@kernel.org, Frank.Li@nxp.com, jingoohan1@gmail.com, lpieralisi@kernel.org, kwilczynski@kernel.org, robh@kernel.org, bhelgaas@google.com Cc: dmaengine@vger.kernel.org, linux-pci@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v3 01/11] dmaengine: Add hw_id to dma_slave_caps Date: Wed, 4 Feb 2026 23:54:29 +0900 Message-ID: <20260204145440.950609-2-den@valinux.co.jp> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260204145440.950609-1-den@valinux.co.jp> References: <20260204145440.950609-1-den@valinux.co.jp> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: TYCP301CA0089.JPNP301.PROD.OUTLOOK.COM (2603:1096:405:7b::11) 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_|TYCP286MB2976:EE_ X-MS-Office365-Filtering-Correlation-Id: 3d1d9a18-9ff5-4a9c-259d-08de63fd578f X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|10070799003|7416014|376014|366016; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?HMkk/bmXLxK3Y8HnOZHSQQykSFE3c2SYxcSapdq8MSJTJ+Nyp4s9/bOOj/yi?= =?us-ascii?Q?OM1mvP8VUqdhRsrW4xkIwKF/kYMb0mGucyhng2rjP6PAA9QVS1eJ8Oj/kHap?= =?us-ascii?Q?+fpMEGqgNJuvSwAHsqskRJiBR+jusfMEG1FxK4EesAW8jutFhkT8nSLJ3/Ny?= =?us-ascii?Q?aFT8+9wuWfsPrBTg42kInKPG/2LbMg4F0TxAGS7KbXDXCeoiBqQ3XZCOlPhJ?= =?us-ascii?Q?BzvnPtI1fKvrqZOIWVuq6nbN95lZbthGxr6N1/Z7aA6d66/SEzX2iyEQ9n5J?= =?us-ascii?Q?6brZw1pYjuTE0DaRtVSCfU7IcZ9v6IXCOc1j314KZggXwQX0tD3b9YXaGY6X?= =?us-ascii?Q?AYSC3+RgzsiIlBgCH9I9ZfMT+gpWa1+Ebm+woVTM+uOLcuPEoJZjlWN8jyR4?= =?us-ascii?Q?7EAyrMXaejDayg9EnXjtXwKfK1mjsGe/5aV1qcw0bLvcsZQ2HaQwPgtgxlBY?= =?us-ascii?Q?T5qnAM3LeuQF3D/eahuk0BxSUH39LRdlW3y1JysSG1XKaR/dysZ3msQCEozw?= =?us-ascii?Q?onsO6v2pProRydKV/c+cVx5iVPSxgKd89IaC/j2TqIZwz/ZcA9c/ykomklSF?= =?us-ascii?Q?HHSNKqSUApHeuQskqKGLjXHJzidsDtEcbOge7d1gBqVUqKda6/W8zF/lZPGr?= =?us-ascii?Q?iOGhK6+5oS2U7Jv4jO9Gg8y7VT2UwqNtz0p4dNekVGHdDknoMSPKMcsriSxi?= =?us-ascii?Q?h9RPzaMlj4C0LPdw3MvhiOSYG59NrZC+ybW/YTc/iht59/LgAl58d+jDIL56?= =?us-ascii?Q?PpewBpmK1+vfeGeWR/cvv1hWENdlCTRsL44JM13jZTcHExT9WwtxeUJTBqaR?= =?us-ascii?Q?OQsszMySQ/AGvWlYjPsUVnUZSiewSVRvpfHE59T/35Hgb8Cs7RTQhWerR0Jj?= =?us-ascii?Q?YGLnlTkbAFLUowzt7a7a+rTd415YRqwEgZgffX65+4NvUFB8h+cGWmU2/+LF?= =?us-ascii?Q?qiIAlZikgXd/Sexifvv0umGGuRcSO/bvvqRIl0H6ANZ2ILumdcZhb9MSoOfJ?= =?us-ascii?Q?EsTT8JxN1bY5DEqCqj2dgDNXDnYjSfhVpKuCcOqQyUT2W18Nay5aqg05KZE0?= =?us-ascii?Q?CJSYh6MWOt8lGOx5UetVC7GhnHKionssgsvFZ+1xG+r7cBMKzLv5fUbvjHEA?= =?us-ascii?Q?13peMXid/Iy0owQdbU3htmEqsBiygAYJiLXkKlijvFEO6G5rwCoqk/JSYdmu?= =?us-ascii?Q?vbAdlVS5aIO0zrbE83ZCgiuPkrXD5LWTtc/eJqGM9QE9kO+ZEPRG+kOaT2QE?= =?us-ascii?Q?Cmqt3ju4ILBwIYtZ3N0L6xVbno9/W4lML1o9RlU7dQZ56glrkwo+lFL1GS2q?= =?us-ascii?Q?R8AxjXw7Kv73Z7wFm2RbPGuOsAtfE+C1nJsbCKYwmqQcIUuYQ34JdttO56m3?= =?us-ascii?Q?VKzPGIjDmUc4KdvjAfFbMX0wUR6UT5cnyb4yESDelriCcGQWOxrFozU9yitd?= =?us-ascii?Q?1W+f4bE0kwM5Wz2Oy8TvwaGCp/ZC24Uj3Y+OB8IgwwqQf0RyeJGX0Vz2NDIZ?= =?us-ascii?Q?FqWhODUdE0q1xfC/ZfOV392Q2LbcBku/tvW8uA2mwFoq9sVxnTsDcRPXgqQl?= =?us-ascii?Q?wnLuaUCQqXnIm7Wy5fU=3D?= 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)(10070799003)(7416014)(376014)(366016);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?wn2CstZCh4l8XNxhXLSg51zOnPhlfC1+YcA+W9N8Ztm4U9KvGl2sIeJERAOh?= =?us-ascii?Q?xDqz7noVFRvO7IDCjc0Dp9pPjvlGx456pmhj6iveWZi02rRt78IzztDeic+9?= =?us-ascii?Q?JGcrxvsSm9uzAMedZys5qgkCxH8JsArtaGWqGkCPch63zHEObm9WBDP9iLlV?= =?us-ascii?Q?a0VKdHwJq6wr+7uyX0Yxgefq4egm+McDAEC3VhZOy0LVsY4kwnEv6KPTpwRV?= =?us-ascii?Q?j62P3Ef2ifJNwTTzUydhesrQDaIOljPOeuCF8vPSLNYpbaEssUmqgGJ5CcDI?= =?us-ascii?Q?KtuG3UiQtcOYe8oXtD7UlqfT5h6ef+QebnfvayKd1/TQJe4n4GvAyauIX0yk?= =?us-ascii?Q?GSrHiPOY3cWJqYNwG1R4tQAQDVtUXOMBpvAMLGTDA+ZhhexQEVgJDeRNLBZM?= =?us-ascii?Q?/fsZd3fYpOX7n2mRbMkpe+hrWLLJf8eL43Xo7UzNDT4I16iKhHTYfIZ2f3eH?= =?us-ascii?Q?qTCFWoSYRXvSrQssm9tOs1vQnCIHN8VgavdaWJJ/ROxP05kF+iXok9HiEaId?= =?us-ascii?Q?LWSwihiIIjhKPMAyzPoMpQza/XuROMucUY0acoVkiiR5nthxHcoLgbKd26CZ?= =?us-ascii?Q?PIX/sQcc098jr9/rIU+X+4T0yxbVqZgu0hur3NnFgzhmr6g/wQIo9YwoVHAR?= =?us-ascii?Q?CuRhyzyZFfZKiptS7R8LGxdoHss+TgdLSBTEmo8etkGBu4ykjCaSjQ9g9zM+?= =?us-ascii?Q?NZMUy0GHL4+rdneFJfy+onpf7mu781OrdALkG90Fw5ZUpSj0g8XJzP/K3AUx?= =?us-ascii?Q?xfSm9COW3LwTpqxvTv1wq8KxmB/xRhf+X+uzkfyd1cnv2XhYBoJydoLbOfLn?= =?us-ascii?Q?n97ZXJnwJrAl8Y1POCak6TtadUwFlz00xxGLwTWleEwI1WWX5w9cjGHKjKFO?= =?us-ascii?Q?yv4kKaOEsX2yxUpOhYLuIOjRt7txxQXfLV9gpDlbE9C1u8bfrXmJ6TT5MJWG?= =?us-ascii?Q?Nnhw5Gvkz89BZf/UK9Zo9i/z0smy7G0ZeOcQzz63VJK/GIpsVUQwqID/+gB4?= =?us-ascii?Q?AFOuo2TPSyaqYYaShJkC051G8MICU7vIcL/pAUq3eTMm9UHQEsft9vDQQ3PJ?= =?us-ascii?Q?tVHL5gmwVoiCff72nMY2pXeX4cq8pc63HufHCiRSLehXpdf8ykpmajHzP+tU?= =?us-ascii?Q?H/fnykr2ZDdW3uyoJIlr5JWQSvFCEBNJysqoLtDprQ3NDjtjxRvy7xM16xI+?= =?us-ascii?Q?jHyfjWbKyyOrP53+TMbXSwq5ORQpQ2vWt57DnoQTHl7ot8CykbA5mlVFx7A7?= =?us-ascii?Q?JrHKBDiunNl4EhXwxMHqe4BWNg1QW7jXFjkBtqbadeSmio194kvqbvXrWIGb?= =?us-ascii?Q?1Q9+H2FgEqdJoWbrT1esKXtJr8OB8n4yDnLBC3qJefgw6KitHiZTrws2t1c/?= =?us-ascii?Q?UpV0KCvMV4yzXw2r6k4KN+DTL95AuKw2nobYzr3rq3hurdQVmshBYcJ21GDf?= =?us-ascii?Q?b1bqEhLM/JwpxP8szQj0lrrBnz74vRd1cqmkYgGaXCJJMPkILokz44RKbuIu?= =?us-ascii?Q?Z0fc9yqWZm7TfbZeAzdF0V13qdkNJ9o40tzcsayyGeV4uhu7QUUvfJbYSc3e?= =?us-ascii?Q?IqeDMe9uSxHNErSH3MAe3CwZc6kIWFMFcICdibYHQZNH2BisIN/6IVgs6kxn?= =?us-ascii?Q?I2h30t3q1J3K68J4A0BwSn+Hvxzs6OF7jwo4opL/yOuyLn/X9lynd2fIhS52?= =?us-ascii?Q?QKwq0YmK32yDYYxCLJIKCFbuz7W6P/9ZTfbyDb3yQStc2xomDc292z35Bx4H?= =?us-ascii?Q?0x5ox3uMcf8c0oy/RILVq//8QI0NDG6AdqqM6ArudizdesROz3if?= X-OriginatorOrg: valinux.co.jp X-MS-Exchange-CrossTenant-Network-Message-Id: 3d1d9a18-9ff5-4a9c-259d-08de63fd578f X-MS-Exchange-CrossTenant-AuthSource: TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Feb 2026 14:54:48.0507 (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: OuGdttuc+XBzVSjp/n7Lz0HNaVI0ghEABZJups5/pSJBR1+DBbfPHZvgLFzLamTE8GRPvnVXV4Ub/OGW3LtRqA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: TYCP286MB2976 Content-Type: text/plain; charset="utf-8" Remote DMA users may need to map or otherwise correlate DMA resources on a per-hardware-channel basis (e.g. DWC EP eDMA linked-list windows). However, struct dma_chan does not expose a provider-defined hardware channel identifier. Add an optional dma_slave_caps.hw_id field to allow DMA engine drivers to report a provider-specific hardware channel identifier to clients. Initialize the field to -1 in dma_get_slave_caps() so drivers that do not populate it continue to behave as before. Signed-off-by: Koichiro Den --- drivers/dma/dmaengine.c | 1 + include/linux/dmaengine.h | 2 ++ 2 files changed, 3 insertions(+) diff --git a/drivers/dma/dmaengine.c b/drivers/dma/dmaengine.c index ca13cd39330b..b544eb99359d 100644 --- a/drivers/dma/dmaengine.c +++ b/drivers/dma/dmaengine.c @@ -603,6 +603,7 @@ int dma_get_slave_caps(struct dma_chan *chan, struct dm= a_slave_caps *caps) caps->cmd_pause =3D !!device->device_pause; caps->cmd_resume =3D !!device->device_resume; caps->cmd_terminate =3D !!device->device_terminate_all; + caps->hw_id =3D -1; =20 /* * DMA engine device might be configured with non-uniformly diff --git a/include/linux/dmaengine.h b/include/linux/dmaengine.h index 99efe2b9b4ea..71bc2674567f 100644 --- a/include/linux/dmaengine.h +++ b/include/linux/dmaengine.h @@ -507,6 +507,7 @@ enum dma_residue_granularity { * @residue_granularity: granularity of the reported transfer residue * @descriptor_reuse: if a descriptor can be reused by client and * resubmitted multiple times + * @hw_id: provider-specific hardware channel identifier (-1 if unknown) */ struct dma_slave_caps { u32 src_addr_widths; @@ -520,6 +521,7 @@ struct dma_slave_caps { bool cmd_terminate; enum dma_residue_granularity residue_granularity; bool descriptor_reuse; + int hw_id; }; =20 static inline const char *dma_chan_name(struct dma_chan *chan) --=20 2.51.0 From nobody Sun Feb 8 14:31:39 2026 Received: from TY3P286CU002.outbound.protection.outlook.com (mail-japaneastazon11020123.outbound.protection.outlook.com [52.101.229.123]) (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 D02CF3D413D; Wed, 4 Feb 2026 14:54:50 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.229.123 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770216891; cv=fail; b=COoAFDa/MQYOA44s26AubwrUD9FIm5O+W0D6g277pTvPPfZ4wEzh6h4OHfCfLDGzQPKv1uWCsQkwzim0zBNpBvegmr9xdPdS5iSkC6dsAMHrpiAsB0VIy79+eqYGvqeCNtx0d0HHU/iGvgBx+g7e8uMEK7TiWhl0Moej2j5MQ5Q= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770216891; c=relaxed/simple; bh=ZFddtiIljJV8bPqalopfGap5kq/xyBhgA9QFpi+GzAM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=eJsFXqZ6/1ZfzIL8pPrtpqNDfmLJ/oPXb0EFWSLBWfWv/skLdCXnYw1JROpu5u5hkbsb0Bw/iddUTm+AYkulAPMU3mdD6EWovB1jppToXpHa9jkWJ2kSQLinVAdUQSLcwnEWEmOLHR5dlsp8Gbl7YhKBcF1Kaq1oNZjXaE5u2Dw= 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=SqejZePW; arc=fail smtp.client-ip=52.101.229.123 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="SqejZePW" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=o5DKa9jPB3Y9yYRq58WgQHqSdoiEngtPN+kkP1PH+v2bdNxEBPv0CiJsnvrLg0lHEIwHkTxlhRk+rPRTKLc5urSY8U7fJC0QzjcQyHjaz4/llIXl7+8AZIaLHQ4HpvO62Ccm1wkgAWrVXn773p1aUjWQmd7YibA02DkDcZfH5Qn2VQbitSpmFEU8+0EpF/PXqS1kCFttfqbN4w/R404jUdwywNoXcAWChDPM/YGi8YsNfXZsdSR4qkfVxMVEfWTkaG/E4NR2nUhVG+oaXF4BfI8HyWBweYvleecemeMBLToC3xoS4Yp2R2Kun4bVfaVZLe9LZeBjA357oEH8OH5Egg== 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=tdygeLCEVrYabW1EEZ3BFK0qUUx6AbRgKmOsoz5Kl4w=; b=f+GcJorIMp5/krnhu/Ff47zBbe4yfg0BNtnkeMRrM7M98PvJ++i3opdaTfNYFcuYI9Ml6uX3NZUFF3Ljsq1SY6UaFoZGqZXkMSCtUVsXCbR2Ses3kAVKldJjHiygyPM4GdByZH/e9Rzb7ScJugBSHxrIc95g4ZVLFaAT/3Xmra5T7YudrElMhf2yGdNuXI6hQ7lyw6oYh4AG1ulZ7vXl/9b00+b58HThF+VEh2owCxZlfEJ1dOWLv8DfDP9MPXLz0IVnEfbBJJaigSA0n8Qr+hm5QXfcZaISlVzu7nyxP7IQ2/ivGDuu+EtBB+rabb/6BZvagCmnwkySTn+3lFBt8Q== 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=tdygeLCEVrYabW1EEZ3BFK0qUUx6AbRgKmOsoz5Kl4w=; b=SqejZePW5PfYvaH4UPaWxiMG3LuzkH/u04NyeiGalAdOfsopHnUAegWTgPn63S7eWWL5wUFuOTBwSzAk6FL2e7t3AEcOkW47RQ3BBSfoPX7v/wT+KLJrsan7ydS9RMJIpN87T/EuHji8Xq+A42i36RyEd7dQukd+gEm6I2PcQFQ= 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 TYCP286MB2976.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:302::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9587.12; Wed, 4 Feb 2026 14:54:49 +0000 Received: from TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM ([fe80::2305:327c:28ec:9b32]) by TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM ([fe80::2305:327c:28ec:9b32%5]) with mapi id 15.20.9587.010; Wed, 4 Feb 2026 14:54:49 +0000 From: Koichiro Den To: vkoul@kernel.org, mani@kernel.org, Frank.Li@nxp.com, jingoohan1@gmail.com, lpieralisi@kernel.org, kwilczynski@kernel.org, robh@kernel.org, bhelgaas@google.com Cc: dmaengine@vger.kernel.org, linux-pci@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v3 02/11] dmaengine: dw-edma: Report channel hw_id in dma_slave_caps Date: Wed, 4 Feb 2026 23:54:30 +0900 Message-ID: <20260204145440.950609-3-den@valinux.co.jp> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260204145440.950609-1-den@valinux.co.jp> References: <20260204145440.950609-1-den@valinux.co.jp> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: TYCP301CA0030.JPNP301.PROD.OUTLOOK.COM (2603:1096:400:381::20) 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_|TYCP286MB2976:EE_ X-MS-Office365-Filtering-Correlation-Id: 3d5ca156-7f9d-41fc-b2a0-08de63fd57fe X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|10070799003|7416014|376014|366016; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?Xn3Ym6wdWNuGRMpSQ8u6V1I6I9Pb3XOVJYnn9bQps5BNzZNiFSafK4oS7Nd1?= =?us-ascii?Q?PpWbqFXXImvgeO2kTKvzSNHspCQjAaZf3Dj1yMMHAVD3wL7o9tF8uHRQ8eu8?= =?us-ascii?Q?nLzta2MmLsbNh+FYP3SkTU0vQMisSQRPAoji9UaFxlanZheFWU2mR9rqifzE?= =?us-ascii?Q?B89W37atnAnRuK2KMDbr3DVzidC5rke//lIPzQ41XZfhuwq9aHc8/+It6JHH?= =?us-ascii?Q?nZo5GLKqFzm3C6rT6Nm3nrqjRCe6kPK5qOXm3vJHxqYIXB6WyCAJqnqIw8/E?= =?us-ascii?Q?mFZj8y//9D004n+6s2/sTdtKViKmvevo+Ohmh2+tnwPvrKMUbzT1ATbA7J2Y?= =?us-ascii?Q?bZMI45aUo8AqaNiOrRQ3uDgjrxyPLyp8JKr12x95EHnX8NZcWwY1Cecj+RA1?= =?us-ascii?Q?JGDFD4B4uSqAgVPkl1zTftCQSz//WM8cfs+2q9WsWOnSNPBjyF3H3xkb03oz?= =?us-ascii?Q?jqwkVgmJrcMxmLK0AHI7lQa23XyS58VS/PUBNSlIi4IoHOJJIm76xOqIrxRm?= =?us-ascii?Q?Qs7rAjKsiNU6nrZ64DzOQYmluJtuCUh+qzBEMa4Q9MvH8NGcrybNZr7fIU2O?= =?us-ascii?Q?TmC/PHwZn05C9XdGFOaLrLp5B9rjTEvttDtUzw5k4uYRTQSQrO08ftI7YY6n?= =?us-ascii?Q?nT32smKhAT79eUD0UANWzdg5IRSFUMOVws5iYNd92d3+ogzQCSKr4w+v8Y6D?= =?us-ascii?Q?Nh0ZyymzIcBYqO6DmycfHx0kXTrEFktkkI6AcJtOh7cz2pSa0iWDlucn9DXk?= =?us-ascii?Q?mcO4XUkATRvlVnFppisno0Fwr3+lQ6HvbMSF/2DMPY20t18Hb8/ljA/cFg+m?= =?us-ascii?Q?TWdmZUe+fBGnPJRStd7tYoeb7PXkyYpixsPUKsJtYlvUUjdiweJAemKZZYkv?= =?us-ascii?Q?qbpeERkm42CqGJqDLW7l7wSCDDLtruCZ+8D6RX/A6N6Y92tvKzr7JOTb84f6?= =?us-ascii?Q?3tW2jH+G7OGO8gtBUG8g9gu/7tafjQx/QL2OdifIXs6mku0XgFfarJT1QDGq?= =?us-ascii?Q?Oa7TOic4Mu9XpGGO1u2h7wkAqrZh3ohajOEkCx7AY6rWZ+3WO3k+Z/SZwZp9?= =?us-ascii?Q?3skK/++3yuvleWUn/SOe9mUlgt6vOWQWVrS+J+YxhTXHhajbEpwAlRsgMMQp?= =?us-ascii?Q?un/cGc2WLRVfJIHE0xrA0QtMQM9LUFxVLQTtl9Mg7k2oJlPHRspkyn/bfUO2?= =?us-ascii?Q?KYM7VSA0gluEbrhYUV+HZ/ufufdwc3+MkBFUVC4pNzfwm4bW84x5+OGtH8eS?= =?us-ascii?Q?BtKB8R03iRZO2+vgaDhKuDS2M1n6OQiJqVUlNiVuWzMPH2KIqND0rdk4eEwP?= =?us-ascii?Q?IQb54cuaZWNzEjd3EYxbprIzIfQIf8vqOrPrmuxUPCOL4/PeU/J36u/1dwVW?= =?us-ascii?Q?8+Es9m/kbSBPv5IIxf/CyGnu/0I1CIQh/car6+LhC1QMZHcjl+3gecKVplpx?= =?us-ascii?Q?CY6clw6KprltP1b4eCrMKXsLOpbD/AIVJnAmQ3NW6CXg2w/DXhXfAW6dv3ae?= =?us-ascii?Q?4+DG9EkhTXyMAVcXrLo2g+jS4mjyjxatHVIL0kdSeG4nhmnz9ol5g1TNMtEG?= =?us-ascii?Q?1t9Hql4ZLkw5QRvoN3g=3D?= 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)(10070799003)(7416014)(376014)(366016);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?JjLN4u3PubgfYMziBcdmtV1rpr3JISEBj5YcLAc1fULT5038/2RvUEqhKzGp?= =?us-ascii?Q?CC6yFq/P6LzUahEY52NqGS+uueG4JrdvW1euIRnXNCUPDIJyQxEEAOgO4qp2?= =?us-ascii?Q?oKdHNuQGXLAc+XhGJLrTFmpuGdDCnmbwykzOBLanGPaYyKUuJWHsTxMKvBNk?= =?us-ascii?Q?m2U0AvjdUnvXF7DwrfV/fv+ShkJexiciKaUtKIWv5PEF0K+QM47LqphAcwd5?= =?us-ascii?Q?HTLz2LO65HY0P6Xg0VSfsgaPP11hRbG1JGsshSm+e4vTDjKz4QDf6aY6sZID?= =?us-ascii?Q?F+t+tZEoQOPf99Xf32ChJTyAxtjX2GiAfRS3z1yX9FALvHA9ntaG0M0vTD8H?= =?us-ascii?Q?Jzsy6urQoigH5vusDVCpEbW+UsbByR7izHzV2E7ujVU9QWM4dQmmr303GNiA?= =?us-ascii?Q?7vxTHo1NGm6g4CEO/rAlV79wNaQrb1soHyIpkfG5a2mQW03k1czsCe4L/Kzr?= =?us-ascii?Q?HgitGVuNe/rJpPIvfnkRYBWdOABlLmxuBtfJi4q5aYsOiWevvQWT8yX/aEo5?= =?us-ascii?Q?GQwngQ0ox7YXziY9u9Dsq3+3Zxe+sNBK8tVJF+kQ7SSIG9af243H728KlzmD?= =?us-ascii?Q?45QMyEmuCpceyO91K7MGRGxCxqtTRXMmzblhzAFxqfagbAS4DOh51FKfGvCK?= =?us-ascii?Q?Ji5l6KiaZgumcmj4JQ6QGUKI7dbl1tcUxcxPiV5rFlsaShvzULZ8RzybgeW3?= =?us-ascii?Q?jj+bJiq0czuWzbn5unmcD1gohm/UQlPVugdP/YnVhMlzOp9gFYKiKlCXjdCT?= =?us-ascii?Q?gvNsPQ79/FqPlt6uSoNMPo95WgDSU6iyg5XfTzJXQi9/rv6ZQ2SlGUp6hj4g?= =?us-ascii?Q?NB9FbiH5IR1z8EacUpkd+F7IxGyaIQFsGDRohL2faPbHpSyPL2KAdUq42aLj?= =?us-ascii?Q?AfhBpADVvb+ySthf4m5v5RWvnoyX5m1FYyc7w3d0uZxUsZmxhnLKRQLxemC1?= =?us-ascii?Q?DI+rdzZDXLoppMW/vvpcdc4DKyqGpF26uphPbRzPOfP/B4J5mSHoSRB6GinA?= =?us-ascii?Q?0nd+8slRii76GW1jyuTzpn2CAMn9IB/fxdRraPUxOFjHXTPndH1RX665bhA3?= =?us-ascii?Q?xpG9dLuoP1SsFPAyVn5xQSMOO3VkJ009pYyadB5CK8dZHVX7MTuYYlnMRpmd?= =?us-ascii?Q?TM2GjOm6fIKqmFXOsCiIExs74G3GXz3vNK583GCN0KFhsjnAwPBpf9Pf8e3D?= =?us-ascii?Q?k/6soVP/2XacNwVSLEG4WRS4TT/3kz2DRlhtQP3vIU1Uw1dtIdi+srHF3mOx?= =?us-ascii?Q?hFhdVfnKgUUjximTbKhvxkKZL7IhbABw1stFGpTOCq/y71w3gDXJLMolLUi9?= =?us-ascii?Q?VPXnQrbs3PwcftVYTj4N/CzNoeGU7/ZudI7fJZhqQCPT5DOHm8pnly7kZg1Y?= =?us-ascii?Q?zo2FxxbaGLRC0XeLBqIB6zwGRq5GMQJbfPStU95f4Lyvwdg4Qs3AwDGNoFo+?= =?us-ascii?Q?iVVnCjIfEJ0cZ7/I07sGBTJnQiKufA19OWkLkQmvB/8UXMPhuViWBgIMvIyP?= =?us-ascii?Q?kFQrjV+DltBxyuc9SQR6S1Q7QC3csP2FvpHB4NMH2FTO0KDb9nsL/T7TI8pq?= =?us-ascii?Q?3cVCEi4sojZSqusCg0goh5Xk+p6+NT+XiP+71aLt6+PAfAdlB+gqNWtSQS1a?= =?us-ascii?Q?AQXTaxEuGBn5D5BkavmZXwAeQiO/jWiYKrE6kio3ctSVr95lXu9mVzPesiC+?= =?us-ascii?Q?5vFHjI5OYwu93znY979YqTEE8kb2LW+pjhS/AxIjJHU84eIYc99At2Mz8oWK?= =?us-ascii?Q?L2ZO+YKtRsxwXOSzWExpq9R+H3oG4tfyc2vwrzVfPXPUuOMdAU9M?= X-OriginatorOrg: valinux.co.jp X-MS-Exchange-CrossTenant-Network-Message-Id: 3d5ca156-7f9d-41fc-b2a0-08de63fd57fe X-MS-Exchange-CrossTenant-AuthSource: TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Feb 2026 14:54:48.7770 (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: VyFo/4WG9kMvoNYM6suic3rMPwLUrxk4IbpGSc/o8Erh8/PLBBqABvvj7HqsBK2o5bHcgrvQzSSjt1rxsuF/mA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: TYCP286MB2976 Content-Type: text/plain; charset="utf-8" Expose the DesignWare eDMA per-channel identifier (chan->id) via dma_get_slave_caps(). Note that the id space is separated for each read or write channels. Signed-off-by: Koichiro Den --- drivers/dma/dw-edma/dw-edma-core.c | 1 + 1 file changed, 1 insertion(+) diff --git a/drivers/dma/dw-edma/dw-edma-core.c b/drivers/dma/dw-edma/dw-ed= ma-core.c index 8e5f7defa6b6..38832d9447fd 100644 --- a/drivers/dma/dw-edma/dw-edma-core.c +++ b/drivers/dma/dw-edma/dw-edma-core.c @@ -217,6 +217,7 @@ static void dw_edma_device_caps(struct dma_chan *dchan, else caps->directions =3D BIT(DMA_MEM_TO_DEV); } + caps->hw_id =3D chan->id; } =20 static int dw_edma_device_config(struct dma_chan *dchan, --=20 2.51.0 From nobody Sun Feb 8 14:31:39 2026 Received: from TY3P286CU002.outbound.protection.outlook.com (mail-japaneastazon11020123.outbound.protection.outlook.com [52.101.229.123]) (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 73A0741C2E3; Wed, 4 Feb 2026 14:54:52 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.229.123 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770216892; cv=fail; b=MnaiFzzo7Rzj7oprB8bGjWHxKfsSkldWTg8bqpTjRI2wZXbpT19JrbJXOpUm2NPtwAaKYP43Rme3GetIXXkCVjR88ysP7YePWhIftu4D0H33Hvc0ukx31IkAqOF7TGcCN+shLo9UQqedQhnyWhPcycCe2s2T8027wSobCu4+lV0= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770216892; c=relaxed/simple; bh=wgkBBFcTA6KfbHUStJVjEyCthBQPrzXc3efL5bcsnVQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=XNcHV7gZkfisxApkDwSIQOd1HhhZJnhYcVc2Bl+h0CPSD2BstxYQLqE+ZnC/TIoyGAOqrWb+yFUsauJNyPdpUgxI9RP6xZ9pkq5JrgzP0N3fddl8h9YplUjnZhM4om35WL3prrE6KyG1IlcWbxQ8aYzoVDwPSp6osY7NCrP3eac= 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=qNI532DW; arc=fail smtp.client-ip=52.101.229.123 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="qNI532DW" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=xBXUseJc2Cp9TplPSvmTYi1O+Ta/nQIxBYaCnIaVOym4RvlOR7GHRCBe36XdmkISWA19MXPhYZI9mUiaq3Kmcvuzkt7/Mxgnh31jrz6izaybt+TrmDC8b0TJMdHNXobfrLBfxJY1IvJpSc7KiyYoo9o5bbQ+L+UCG6Saw6u1FFAlsslXyXfFkgenExwwxl4xfZ8zq84IW8sTcsI45h6vaqNpJrNfAOzzg3esOmtITMdW1/Kskv1lZLZZjnEw7jOzYXDjbMTfGT8v5FpoM6djKLfIdaD7YRM6GcglQuM8DPzP2b1Ofu5n/CKrlMKaXGQSac1UMMyD84dc72aMp+6exg== 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=3Hflq1SXvtncDpYac4dxU6ZvDfZZlKQ13Gaic95laoQ=; b=oAnU7yzrV7yMbtxp90RkhF7psHuLVw6J0b73jO7PBsSxqTfdB++8DQUCBde34P9RjaWk/j5J3Lk+Pg+1VSgOsaJsvwgo/F7zsoqTWyDZ6FNv0xYETPClRH7hPkcggr5UMbtPvvF6Mr+SokGI+BdISgikCTe11IvvKZ23Q5S5bhjD2/kiYnr2hgU2ImJwmeuYvPUPzUtfLD34bgPqVdVkQELTNnyz8ebC+6DY5e9SxwHTaHHEBbYYq8jOoPnv9tgnmUQkLORtb7I/8javB8nBTLSp+vXKXI5ATpJUBOVyR/sdMM1jF17odTvnE7ekuWG4XoD9QGNOtPepVHFMEPWcZQ== 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=3Hflq1SXvtncDpYac4dxU6ZvDfZZlKQ13Gaic95laoQ=; b=qNI532DWRWSNHNgv7FHYl9lluHuqGh93L8B02HduvRE3O5k4AaCaiayQHkWAiOWYUOrdvIUJiD35ON/islBu7IsY5PVqjI9w/RzGpiqnD3J93bN6R5Qc6uH8xRWYB2zrwkL3ahGrhYayBQjtfIO2a4jhgKmtfmnDtL0ViKeQrJ0= 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 TYCP286MB2976.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:302::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9587.12; Wed, 4 Feb 2026 14:54:49 +0000 Received: from TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM ([fe80::2305:327c:28ec:9b32]) by TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM ([fe80::2305:327c:28ec:9b32%5]) with mapi id 15.20.9587.010; Wed, 4 Feb 2026 14:54:49 +0000 From: Koichiro Den To: vkoul@kernel.org, mani@kernel.org, Frank.Li@nxp.com, jingoohan1@gmail.com, lpieralisi@kernel.org, kwilczynski@kernel.org, robh@kernel.org, bhelgaas@google.com Cc: dmaengine@vger.kernel.org, linux-pci@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v3 03/11] dmaengine: dw-edma: Add per-channel interrupt routing control Date: Wed, 4 Feb 2026 23:54:31 +0900 Message-ID: <20260204145440.950609-4-den@valinux.co.jp> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260204145440.950609-1-den@valinux.co.jp> References: <20260204145440.950609-1-den@valinux.co.jp> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: TY4PR01CA0100.jpnprd01.prod.outlook.com (2603:1096:405:378::6) To TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:38f::10) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: TY7P286MB7722:EE_|TYCP286MB2976:EE_ X-MS-Office365-Filtering-Correlation-Id: e603ee89-f78f-4840-451b-08de63fd589f X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|10070799003|7416014|376014|366016; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?c/MU86J3meqylJPGwuBVB4akq9AiUCmVhuHOVd4i18+QckeCpydofMKKGTu6?= =?us-ascii?Q?1g5imp/qeuX0+X2BpA1+y77iFwfd4I0aZTyAi+HBPoLGtUIHbbTvuDq5T/fc?= =?us-ascii?Q?d3VD+K7DUKLanMTaOFB6Sipw/dUQs2h8JbtZE3ujfnjgu/o1f0ReDarcThTT?= =?us-ascii?Q?GP+QnUbq+VElAlGtEKwem0rqLw1PoLw8HFbQf69GGJ0UHBQ3nvycpLzGICAv?= =?us-ascii?Q?Ah94jGry/tFRj3+mPNoOCi1xAsLBb4Jr2rdsyQRUi+D4LeAg+lpOveCK2MRo?= =?us-ascii?Q?7fzJYY1nqBWJBi9NLuGDfgIg/murYL91Yt/TQ7t3e8bZ/k/G1SFgR5ewTTzf?= =?us-ascii?Q?IdaUy4o5PrJBc0e8cOnbH9MH4tQQ5XrXjGMfNWcSxM/9J6iXmqZ8Da2NpxRG?= =?us-ascii?Q?y+r855zaVeAnCf2JJuEgGc4vU+h2pHlZ+bGaAjGDJKQSh28OTDJ7F7MuSDQ7?= =?us-ascii?Q?ET/GVANViI2QFhd9QcrRF7e8crXg1OuUSomWy/fG9Fj0l0xsmFkUrMb/hO+r?= =?us-ascii?Q?QCmlpyirUZoACB5u4xqXAoyIlxHSWYwbkT/zH7RkMaY/TEyuWIRuQyBqYMJ4?= =?us-ascii?Q?hQIlUjf6GMlPahyQYt60GJDpLBTWMmXK+Pbts0NLmoCkoQ9Gh6qqTcphaCv0?= =?us-ascii?Q?uVyMA8qVrio/Ojy+AMORGWdVamkoogCtRbku4s2wgiQmtNBWaqUxkq39tamV?= =?us-ascii?Q?P/FaFLSN6UY5yJgR/lI43Vc94SVZgZr/oG5HD2R9orEfup4aGVVU+WvCO37m?= =?us-ascii?Q?w/bRo3Pb3j9QJzmTl/InPcreYeQNzEZKiYTktqOFxx4czvLPHHmU1XVLWEjz?= =?us-ascii?Q?Ph13qDSwTjvS7MXM/ZZyuN1MtKvWhs32HUWwEOb2sZfvR/5F5UvcKNbEmmyx?= =?us-ascii?Q?GPebKzsC9IIgqvj+nterMg7cPMZwQ2rqZpDX11t8XkVBaYT10pgGsKkdph80?= =?us-ascii?Q?9NncxqJ8ySaODk8WevgJV+uJScGxZIRgk41ETXCA3hybpXx+IBI1+tSJmceX?= =?us-ascii?Q?zQhdRIWpyLrIJa/RKkhDuwKL5QnmvTAqGXir/1PoK+4jt+ZL9QxSrNBE5EPV?= =?us-ascii?Q?GStgkhxoVSDXRvpxet2Cwoj8eCzqdwEaM+6Q3HO+yH8vVzY5qeUvtG9uUnPh?= =?us-ascii?Q?8jXZ8nCmgW/1B+EGbF2VQ0qLE5fnwyuhkMjw2HEffsqGfNnpOOAsRwd5dFnp?= =?us-ascii?Q?kzRxn0LXPfJkr8dvOeOkQ0zRQGC4PyFQMMisuAFHRUurV+MfbkenDiooXmsA?= =?us-ascii?Q?9VT943wxlgaWFv4xwOmdic/lH/Tozi+sV4BaM/AzSa4yj9OxVoeCZWHNiEaj?= =?us-ascii?Q?NowdUzhWHyGPhZ7qNtEv4e8GY0ezWPQVcs5raMSJAwfQsqJsnnhoYm6/WcFw?= =?us-ascii?Q?G8FpM3Foo5SGavZQay6jjdiqI3n0cRoRbBhXyT55RnsGjRZKEMd4UJkg5ejl?= =?us-ascii?Q?epXA4zJs0vGDSuKvY74BwupgBOVaf7L4mRuJXyQoJejQ0vkg+w1vT1MOiqGO?= =?us-ascii?Q?7NpJ8UaHhnHB6ZCBnkbgF+wh7zbyB70tlCV926pw0bDLfyb7GKOfkZmvhjpf?= =?us-ascii?Q?Iog1QT9TTV9TxeKDM/A=3D?= 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)(10070799003)(7416014)(376014)(366016);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?dfULy7YGRgZKf6m7HLdKgKrpuerMs7U1tetN/hy9uMNgpUZQSXzXFQ8t7RYJ?= =?us-ascii?Q?QQtjD0zMRz/V9Ag8Tgz5r1L6pJqPSnXIog+6q53An48YXxNgGd8wKWDKMURe?= =?us-ascii?Q?k1C0UO1YfIgdCbWaRm+S/hnqomLy0sT2shtrxeSZXaOb1HRRkSXOFKHjF0//?= =?us-ascii?Q?L5Py1UBHZZTGMKOQc+puL+G9qzAeXEEijcRZmBv0q/We3tWoR2S7S+N+kn4o?= =?us-ascii?Q?14LlDE8nqABUlTJLFtoycJFHUc1Z6EuAfk5/eJagzxsUsRm7nfZL0PIbAdp3?= =?us-ascii?Q?AB9rHwhpE/U2akie+VjFvYD4BFDGfxC4p4OwzKQTtDLMBt+6QF5XmhgCv/cK?= =?us-ascii?Q?FUGv/bfCbSpgKafMMZXe/81Orz0szzzIYfMJ+AHCICu+qF9su7eLWrgSORGG?= =?us-ascii?Q?BtUDNczgKY5fTIFPg5a+lemVl3fW6wzLyS3RCeua/rLGiQbfoR/7rNp+slkD?= =?us-ascii?Q?rRZStIs0ZeP8fbWcG+LQTwqGUpBY40FrW/XC3CHpDh88bmqKFy2PivvW5mbs?= =?us-ascii?Q?WazfoHMDyfncDFyfda4++uNFgmEOXZDInE+QID3fG76jF+VI8uxBHzoa4OWp?= =?us-ascii?Q?etVFfZZY3gdDI7inyjq0e6dDIZuE/V1RXY1u57p5oaa+4cqUWIVew6Ug+hzp?= =?us-ascii?Q?O867UhRNXcFj2wCRxuiSIb36h+NnhTyPDAH2RueyJ5/5ORVB/COe8H2FpOY8?= =?us-ascii?Q?QBlXZwwFm/MOQyaNQOfbna+JFrRttZkPk0heAWOvEqV6ms8onaQgE8Abm7fm?= =?us-ascii?Q?CW8R+EvyYPWfO1m/Gx1s+9jrqnwEA6cq9TkDivaAZs0KEe1ZU2/NY642D+uj?= =?us-ascii?Q?++MWsTXGtJOyCNh1CGxQMoSzKRJCeVkY+EZwFoR7zUZHqAqElg72AzLN0nWM?= =?us-ascii?Q?wkxk6GJWqM3sDHQ+iMAxD9G8y4l69ZqV/pxAppvet/c18IJnTEkzShtRMvx/?= =?us-ascii?Q?SvZhlkC0JhjzV9y0Y8XvwD+sitJjKdr+Qk4RvXe1JXHF8fVmn4kCuMkqrYkb?= =?us-ascii?Q?soC5foSSM6LHmNKHVLs6bKE6t+cMwD2z6pAJ+wtCLq8hyc3p1+P60H57LCWQ?= =?us-ascii?Q?4cU3oom8p+0z///FgXAfOL3xkey5lwzzLOqaRNYTheXxEDuu1xY6meEq+3rd?= =?us-ascii?Q?3t6J/GtlkPb5Z+CSh5W1wEholSX7f8WctLowqMCqulhYC/TIg31bhekmrfzr?= =?us-ascii?Q?odzwhmImcTqQpQ3CvNSJCTcbGppnOktWM3i5OV0ltSclSO35xYLboLS42JGO?= =?us-ascii?Q?OHWeASPAadS2HKUkV3gld9i59l3ssipiznLTH3y2InvMoqCLqKluL7sAT9vx?= =?us-ascii?Q?G5jQMhvAoWNFIPHneo8QITjeqivtpdfWNd2Xv/XgL8Mwk1M/q1w2gGgS/Yoo?= =?us-ascii?Q?GJFrV/5x8McbRRKovsjwttO8TxFOT0J+NNtzy2j/ougw32BpPtdy5ak3NE3i?= =?us-ascii?Q?q1KVn05snqL/0GuxxGXPfz6/twK+oKESBKsWTNVf/4rT8+XCOXshBrXUN1Xt?= =?us-ascii?Q?YLDoFOOBYFzolhOWh687Ih2F6TNMIHGKA9EvLa9ithjAs8HMCc3ao4PFzl+2?= =?us-ascii?Q?WCsGV7TWLBeHOOXkmD0NpIYvbIdjZlgTaHRQVi5VXCqsWkC4fZEDcy7uppQt?= =?us-ascii?Q?Qf27QRBA6EVbfvwB+9+c/I1CPFAjlg2fZPDewtTaVAw7bn0uq77kImxvQVAj?= =?us-ascii?Q?tDvVV8osQlPZ//ZyKJxR5GOv1cRsVuBpH4diYfXmTdH90dolO0UJ8s3hh+Rf?= =?us-ascii?Q?X+9RfAWcbzhfr+3uDzqIGhOw71Op5Ipf6Vu3QWXkkayL4cOSSajM?= X-OriginatorOrg: valinux.co.jp X-MS-Exchange-CrossTenant-Network-Message-Id: e603ee89-f78f-4840-451b-08de63fd589f X-MS-Exchange-CrossTenant-AuthSource: TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Feb 2026 14:54:49.8362 (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: DM7HMfdTbWKAKrEQpN19ArMMR6cW4gADmqj/GlXUDnOZw9FtaglYEIeUytSx6unTh7ekkd7QfEc/QA/TILcpWA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: TYCP286MB2976 Content-Type: text/plain; charset="utf-8" DesignWare EP eDMA can generate interrupts both locally and remotely (LIE/RIE). Remote eDMA users need to decide, per channel, whether completions should be handled locally, remotely, or both. Unless carefully configured, the endpoint and host would race to ack the interrupt. Introduce a dw_edma_peripheral_config that holds per-channel interrupt routing mode. Update v0 programming so that RIE and local done/abort interrupt masking follow the selected mode. The default mode keeps the original behavior, so unless the new peripheral_config is explicitly used and set, no functional changes. For now, HDMA is not supported for the peripheral_config. Until the support is implemented and validated, explicitly reject it for HDMA to avoid silently misconfiguring interrupt routing. Signed-off-by: Koichiro Den --- drivers/dma/dw-edma/dw-edma-core.c | 24 +++++++++++++++++++++++ drivers/dma/dw-edma/dw-edma-core.h | 13 +++++++++++++ drivers/dma/dw-edma/dw-edma-v0-core.c | 26 +++++++++++++++++-------- include/linux/dma/edma.h | 28 +++++++++++++++++++++++++++ 4 files changed, 83 insertions(+), 8 deletions(-) diff --git a/drivers/dma/dw-edma/dw-edma-core.c b/drivers/dma/dw-edma/dw-ed= ma-core.c index 38832d9447fd..b4cb02d545bd 100644 --- a/drivers/dma/dw-edma/dw-edma-core.c +++ b/drivers/dma/dw-edma/dw-edma-core.c @@ -224,6 +224,29 @@ static int dw_edma_device_config(struct dma_chan *dcha= n, struct dma_slave_config *config) { struct dw_edma_chan *chan =3D dchan2dw_edma_chan(dchan); + const struct dw_edma_peripheral_config *pcfg; + + /* peripheral_config is optional, default keeps legacy behaviour. */ + chan->irq_mode =3D DW_EDMA_CH_IRQ_DEFAULT; + + if (config->peripheral_config) { + if (chan->dw->chip->mf =3D=3D EDMA_MF_HDMA_NATIVE) + return -EOPNOTSUPP; + + if (config->peripheral_size < sizeof(*pcfg)) + return -EINVAL; + + pcfg =3D config->peripheral_config; + switch (pcfg->irq_mode) { + case DW_EDMA_CH_IRQ_DEFAULT: + case DW_EDMA_CH_IRQ_LOCAL: + case DW_EDMA_CH_IRQ_REMOTE: + chan->irq_mode =3D pcfg->irq_mode; + break; + default: + return -EINVAL; + } + } =20 memcpy(&chan->config, config, sizeof(*config)); chan->configured =3D true; @@ -750,6 +773,7 @@ static int dw_edma_channel_setup(struct dw_edma *dw, u3= 2 wr_alloc, u32 rd_alloc) chan->configured =3D false; chan->request =3D EDMA_REQ_NONE; chan->status =3D EDMA_ST_IDLE; + chan->irq_mode =3D DW_EDMA_CH_IRQ_DEFAULT; =20 if (chan->dir =3D=3D EDMA_DIR_WRITE) chan->ll_max =3D (chip->ll_region_wr[chan->id].sz / EDMA_LL_SZ); diff --git a/drivers/dma/dw-edma/dw-edma-core.h b/drivers/dma/dw-edma/dw-ed= ma-core.h index 71894b9e0b15..0608b9044a08 100644 --- a/drivers/dma/dw-edma/dw-edma-core.h +++ b/drivers/dma/dw-edma/dw-edma-core.h @@ -81,6 +81,8 @@ struct dw_edma_chan { =20 struct msi_msg msi; =20 + enum dw_edma_ch_irq_mode irq_mode; + enum dw_edma_request request; enum dw_edma_status status; u8 configured; @@ -206,4 +208,15 @@ void dw_edma_core_debugfs_on(struct dw_edma *dw) dw->core->debugfs_on(dw); } =20 +static inline +bool dw_edma_core_ch_ignore_irq(struct dw_edma_chan *chan) +{ + struct dw_edma *dw =3D chan->dw; + + if (dw->chip->flags & DW_EDMA_CHIP_LOCAL) + return chan->irq_mode =3D=3D DW_EDMA_CH_IRQ_REMOTE; + else + return chan->irq_mode =3D=3D DW_EDMA_CH_IRQ_LOCAL; +} + #endif /* _DW_EDMA_CORE_H */ diff --git a/drivers/dma/dw-edma/dw-edma-v0-core.c b/drivers/dma/dw-edma/dw= -edma-v0-core.c index b75fdaffad9a..a0441e8aa3b3 100644 --- a/drivers/dma/dw-edma/dw-edma-v0-core.c +++ b/drivers/dma/dw-edma/dw-edma-v0-core.c @@ -256,8 +256,10 @@ dw_edma_v0_core_handle_int(struct dw_edma_irq *dw_irq,= enum dw_edma_dir dir, for_each_set_bit(pos, &val, total) { chan =3D &dw->chan[pos + off]; =20 - dw_edma_v0_core_clear_done_int(chan); - done(chan); + if (!dw_edma_core_ch_ignore_irq(chan)) { + dw_edma_v0_core_clear_done_int(chan); + done(chan); + } =20 ret =3D IRQ_HANDLED; } @@ -267,8 +269,10 @@ dw_edma_v0_core_handle_int(struct dw_edma_irq *dw_irq,= enum dw_edma_dir dir, for_each_set_bit(pos, &val, total) { chan =3D &dw->chan[pos + off]; =20 - dw_edma_v0_core_clear_abort_int(chan); - abort(chan); + if (!dw_edma_core_ch_ignore_irq(chan)) { + dw_edma_v0_core_clear_abort_int(chan); + abort(chan); + } =20 ret =3D IRQ_HANDLED; } @@ -331,7 +335,8 @@ static void dw_edma_v0_core_write_chunk(struct dw_edma_= chunk *chunk) j--; if (!j) { control |=3D DW_EDMA_V0_LIE; - if (!(chan->dw->chip->flags & DW_EDMA_CHIP_LOCAL)) + if (!(chan->dw->chip->flags & DW_EDMA_CHIP_LOCAL) && + chan->irq_mode !=3D DW_EDMA_CH_IRQ_LOCAL) control |=3D DW_EDMA_V0_RIE; } =20 @@ -407,10 +412,15 @@ static void dw_edma_v0_core_start(struct dw_edma_chun= k *chunk, bool first) break; } } - /* Interrupt unmask - done, abort */ + /* Interrupt mask/unmask - done, abort */ 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)); + if (chan->irq_mode =3D=3D DW_EDMA_CH_IRQ_REMOTE) { + tmp |=3D FIELD_PREP(EDMA_V0_DONE_INT_MASK, BIT(chan->id)); + tmp |=3D FIELD_PREP(EDMA_V0_ABORT_INT_MASK, BIT(chan->id)); + } else { + 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); diff --git a/include/linux/dma/edma.h b/include/linux/dma/edma.h index 3080747689f6..16e9adc60eb8 100644 --- a/include/linux/dma/edma.h +++ b/include/linux/dma/edma.h @@ -60,6 +60,34 @@ enum dw_edma_chip_flags { DW_EDMA_CHIP_LOCAL =3D BIT(0), }; =20 +/* + * enum dw_edma_ch_irq_mode - per-channel interrupt routing control + * @DW_EDMA_CH_IRQ_DEFAULT: LIE=3D1/RIE=3D1, local interrupt unmasked + * @DW_EDMA_CH_IRQ_LOCAL: LIE=3D1/RIE=3D0 + * @DW_EDMA_CH_IRQ_REMOTE: LIE=3D1/RIE=3D1, local interrupt masked + * + * Some implementations require using LIE=3D1/RIE=3D1 with the local inter= rupt + * masked to generate a remote-only interrupt (rather than LIE=3D0/RIE=3D1= ). + * See the DesignWare endpoint databook 5.40, "Hint" below "Figure 8-22 + * Write Interrupt Generation". + */ +enum dw_edma_ch_irq_mode { + DW_EDMA_CH_IRQ_DEFAULT =3D 0, + DW_EDMA_CH_IRQ_LOCAL, + DW_EDMA_CH_IRQ_REMOTE, +}; + +/** + * struct dw_edma_peripheral_config - dw-edma specific slave configuration + * @irq_mode: per-channel interrupt routing control. + * + * Pass this structure via dma_slave_config.peripheral_config and + * dma_slave_config.peripheral_size. + */ +struct dw_edma_peripheral_config { + enum dw_edma_ch_irq_mode irq_mode; +}; + /** * struct dw_edma_chip - representation of DesignWare eDMA controller hard= ware * @dev: struct device of the eDMA controller --=20 2.51.0 From nobody Sun Feb 8 14:31:39 2026 Received: from TY3P286CU002.outbound.protection.outlook.com (mail-japaneastazon11020123.outbound.protection.outlook.com [52.101.229.123]) (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 D0CD041B360; Wed, 4 Feb 2026 14:54:52 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.229.123 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770216893; cv=fail; b=fYpofzV3qg70AylVRdmrdRQaJ75xbPQyQV4fQKKBkbcsB3NpT6pXwsFPrVtYlQAAgRINkgZRZsS0UHxtk8xz3aCTeFVc+QBpoKB9zASMSDoh+m3+ByJhLRSZxUqWoZTFF5cGiAUDHBC3GvMJOkxn0nz+XIPq9WYHRIp5egYf4iU= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770216893; c=relaxed/simple; bh=uSc8jnMw65UAwpppC9W3csYQ3j+MQiadZOubMSe18nY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=BvfrRW/prGnPngrp1Ha3EZ7oBMgUBRg9IdMZqIUiF3E719YlPqnwSElLng0f7+SceVceriMj3Yo11/iyTXDo9up3q9aPGdaDkCEUSTbEHm70pYfK1EHHIr44vOEGC5MtEBPCWecQhfAHggzMHyWHkihq0QEXwg6t330eysSj6i8= 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=Xi9BHRDs; arc=fail smtp.client-ip=52.101.229.123 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="Xi9BHRDs" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=iWZz+fqvWNbQwvfOImN6Ltj3LfwF3+Tv2bR2IdQ3t04pu7kX4S1frTMZ4Ca5em4+ycaCm31OtDN33NoMW7UzUj7i7f5Yx3K/Uc2wshaHRK48iumblAbZaRppz32uQL/tkd7U2GAUFyq8tW1pdMOc3IbLjHlWXYuJm3HNeG4Wq5kDcBUjj+93BMN/BVuhU8r2UGGM/bUYHWHxJSp6RL8KNCI3gMQiHqnhFoQzh+cnW6S8g/AcIzmQ37fiaXdiYgQx8AWWzmW3UFfu79O2gJGN6FAve+4ZhHGbmmO/t3fxVO+a2UGcPbFQwOoH41KZUFbHhXLi3mCjt0xmi1WQDiUg8Q== 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=zAFRcYEfaAj6KIUNvh0SVEq4ul4PRBJTlxaztB5mKuI=; b=jEhRHuVoj73BbYuCb2QFWnAZQoGxGLnLMveCma0p+GShAh6pPZHJhQdqsn4gy+wjVULQd3DwJhdK6dbFAK1X1AuWGq01CwRqNjIpYG0b7LdFRHu5ddxA1ChZo9lpSvdTRqxMRayHzg5iYDPdACfS3nx8SWMevqRz4OLVev8PXI8Di+HgD/yNeFIGUG1Z8l6HpsodurHG8jE9+TQyz5pCdP6x7asxB9T2S5oP48GRayFx4gd+lHgSoxgzr4MkHN2etSQ054ypiZr9S9X8Z1zMo8wBaaqplsg6SNu3n3PBJqBO9KbTLArt0AUq0hYsDBtEkA+8szJ/NEzmj2gMEJmhag== 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=zAFRcYEfaAj6KIUNvh0SVEq4ul4PRBJTlxaztB5mKuI=; b=Xi9BHRDsriumpn3Tpjryf3he9ZsI1N/h+yceNvnZBb8BSZXSdbmZ2VNHuo7vhg2PvvPR6zIhLC0kt/pekoY1oHfwtLZPT4TKkygL3Y2FLrtTxij+BrYEnhj/qIYFM8xAqB7a5tPn1SVK59M+1e82+dM3VB8I7PCQuaq5LKL2Gp4= 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 TYCP286MB2976.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:302::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9587.12; Wed, 4 Feb 2026 14:54:50 +0000 Received: from TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM ([fe80::2305:327c:28ec:9b32]) by TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM ([fe80::2305:327c:28ec:9b32%5]) with mapi id 15.20.9587.010; Wed, 4 Feb 2026 14:54:50 +0000 From: Koichiro Den To: vkoul@kernel.org, mani@kernel.org, Frank.Li@nxp.com, jingoohan1@gmail.com, lpieralisi@kernel.org, kwilczynski@kernel.org, robh@kernel.org, bhelgaas@google.com Cc: dmaengine@vger.kernel.org, linux-pci@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v3 04/11] dmaengine: Add selfirq callback registration API Date: Wed, 4 Feb 2026 23:54:32 +0900 Message-ID: <20260204145440.950609-5-den@valinux.co.jp> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260204145440.950609-1-den@valinux.co.jp> References: <20260204145440.950609-1-den@valinux.co.jp> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: TY4PR01CA0082.jpnprd01.prod.outlook.com (2603:1096:405:36c::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_|TYCP286MB2976:EE_ X-MS-Office365-Filtering-Correlation-Id: d1ea5958-f592-4fc6-bb3f-08de63fd5913 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|10070799003|7416014|376014|366016; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?iTkO47YFNVjZzTXP1NNli8PhNwg6t9TkUSSR+Ps8u+EYnDLjcsIqQ0GcvvMO?= =?us-ascii?Q?PshRu5OVapHl3Kvix2s5B/cJ3kKLpWUWB14P8LWU9tO4Iz/L8wVYFOseHmbL?= =?us-ascii?Q?WR81QMdHXtSJdUH5n+9ezqYZEFHpvmiW9hbY8vxtc+DsL3bd0o8J/TDZ92H4?= =?us-ascii?Q?X5UO6+vEpFNWE+KeFUcO3glDh0MViUkQ4uQL+CvUE8IPOGg6iCVZGk69EMWt?= =?us-ascii?Q?jMEyvGFevFyIbcnx/hjG0+Sf7qq0LrSZXLtpIhBDyJkQJgoIh1Ujy83z+dkT?= =?us-ascii?Q?WOyUFZqBNUdA8Dj2cIGEQMEaDdSU4tjfz87OcDi0py71lcMrgiS5KQFxbrBD?= =?us-ascii?Q?ZZCBBdUR42v8RIFRHe5UwPTLDZqDpjuJYRdBeBV4YWblZ95RSuBZmZ55Hsuc?= =?us-ascii?Q?yQZrrYnlCxIz/eyJrQw5b90n4ThXFQdhcc0KtTlZx3TOVOulbz9W06INqyJg?= =?us-ascii?Q?SDaLx+zfAi1/9Hh2zMt4lu/92Hpi/HyeJvFts4zKZkOQ5oVrc9kfI0YUOlT/?= =?us-ascii?Q?t2j3GmzfVlsmr1K8oAWnMm8A12q5ZNv8LG4kEXvEmYiDx4Bvmn87wSs7pwjn?= =?us-ascii?Q?QNybXk5O3QfY9zdu079EoyenVIAFwkZiKmHjBpSHXLD7R1+modDbWz/bJK/c?= =?us-ascii?Q?SXJavNf8nQHmCdzDDhjduLgP9MXScx+zvzcZdXZ+GnK0D9pRFcP6AjUCHcpa?= =?us-ascii?Q?crB2u4cM18I4rpJCLUES2NBNRStyaDTuP8vHnODdTCMHcoGfpsTHHE4a2qIj?= =?us-ascii?Q?bwSR9Dw76LfLbe6HWtN8+EeB4atiRTVRZMQTLi+hkzJtSpvwHuTn26eOvTri?= =?us-ascii?Q?rpSSL+YmC2MMd1lsvywbOmfEem2qg8+P3l706ifZlWsn6Wx6LDahd1nKGOxN?= =?us-ascii?Q?c25bgLUiz0A0/NScfgqtXfy8DVS/ub7l001FH/Flat0P3F6nf69nL2qtng7o?= =?us-ascii?Q?9L7UE2uM62m4OXUjvtdGopLp0sTwcnnnot53vYXWhzRPcpbgBitTylbKV0oK?= =?us-ascii?Q?yvbSdF4rHMc013aKXKDNqhgBn7+DdqM3LvXxBCJ6qDC9Jbh43jED+Yd0D6y1?= =?us-ascii?Q?OQyOyEzzIXfob4V6ajieWjMr9ar9aik2MVJqGa0nwktzD1TZrbJDS5vRUxIX?= =?us-ascii?Q?P1noO1I8FnzjMicqpWeIOTihpwdL7osk1mQGLXzqO/6oHgHXke2ricetLtMa?= =?us-ascii?Q?W4t07R5vvMYOaeHW1ZbhN/lJv/5Qx6R2K1KlmfPbiFCRopVfyCOv+1AU9s8g?= =?us-ascii?Q?m3AtMmsv5o/7s+P1936s8Q3tK/o4xIrm8JH4Qguv/9R5xyhB3K02Anb9O/fa?= =?us-ascii?Q?dwcQ0lD4EBAtflUwKqmczeTieY8qRrbabw9I8GcYxK6FEcyzwORa0gPPkFgy?= =?us-ascii?Q?zvXrCnJONHgXv583Y9nND9djJNzMOdpDTKIpAZYjqcs2gebsznx4Al6Z5bs5?= =?us-ascii?Q?DWMWjJHJdvapl+/09VdpMdedrpaEW+WiC5keETfFijF8M02mWZjmW2xPpkBL?= =?us-ascii?Q?msT4GUsbBlGd0zvdE7e18iC5/VDgnF00ZNzgC0fdGI5dtAYrIrkw/TBJ2H5w?= =?us-ascii?Q?pyX9lmFMBFgYb9WvyG0=3D?= 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)(10070799003)(7416014)(376014)(366016);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?aePWy4BbkxYMuCRaiMUKXqaXGGX6Zxx1HP2d52+l+g8QIkaQCXiXlzFM0XiR?= =?us-ascii?Q?yb1UiYC3cytKxfUfn7D/3GZ1Hb/0GhWJ30PYuIDSQi2JpYZRg6g9vBj+TU/Q?= =?us-ascii?Q?OGk9Xcf3gUQD260J3NuyZ1VCEAfeE2jh7PHRkwDB2eRJsMRyFv6XKV+jU2XT?= =?us-ascii?Q?bLuTE+C36J15tWTc5fUTwEKvst6SmlV4R4tzElkOLew7+n8nwo56Qdkpjxcp?= =?us-ascii?Q?E8Hcd4J5UBYjHjK0EWuGN7YqM/urkzoYYZiPlSfcvzFiwL5QVbeEG8ngLmpo?= =?us-ascii?Q?rZGHjex7QvfXSGssRO87DjxmRMCky+BYBeiVw0uQa7qX5ZI8z4hrVsoUpi20?= =?us-ascii?Q?BgZE7ZlZJdu6WzocchWxn7sUo9I1GL8npLYBE9m1g2vauFn175xu/KZzAweQ?= =?us-ascii?Q?8/aGLnUljIXcYWO07t4fqR6GpWcoROb7rWlFnpEuC3Re0/MWFsdfq3VVtuMK?= =?us-ascii?Q?mVqZVaok9k+D7hsgvujDdY7X4N/MfT0LuiBhK5C507EO91fOvN9KqPGM9h+e?= =?us-ascii?Q?nqxWEY9x0S/1fJZZ0Z1yTtplsBQWF32q2jA2kjcAEp6+QhjlMsFZ/QWwlEXb?= =?us-ascii?Q?DO1aWt9i6LzotyG6u2vZEjvgk/qhsELK2X+oKHDX+q52tEDFbWcN8VZMitTO?= =?us-ascii?Q?nBkC0kALSaVzbMdapWCLGe9xqC9i81uwdb+zUlW0BszPWcaQ9tGIMQZqEKiR?= =?us-ascii?Q?7sOkSd1Y6J872mS1xdqi9Wu32Apr1GRXtGYgjHudos8mWe+GuamdfgdBOjYe?= =?us-ascii?Q?t8D4Cx+6JbMXQj5/g62bvnGRgu81mOxwybU8C6CKT0FX4uULEt2XYte1t69j?= =?us-ascii?Q?ZrFBVMG+tvFNGUZzY6acpku4i6Pe+2rJobJrPY9YRD4n9IRlv742p0xywOZ+?= =?us-ascii?Q?i9uDAWNd9b9tyuZ3J18t1GP4a9K9lhreeTu7ZZecHls2cUdO3/NRC8CKCqPU?= =?us-ascii?Q?v1xeL1L1BT7/dB5h4+IBVytRHEugRFaT/cDuCbrkNWzAr9tfWrIZ8M+yzmVk?= =?us-ascii?Q?Yfgobhx0Zt6wf6merSku1BsWeKyiPZZ+2Rf8EoxBskUAgP65XHKbh/Tur5NO?= =?us-ascii?Q?AEyaaZQlmhij3CayqZ/9NhC0sYdyzig5S9uRWIqun3QZYIwKJ0ZvLnngVgLC?= =?us-ascii?Q?dldgU2PqT6D0XTMXER+ZtyR2jK8rFTBrNvJ0/M4FnvAiQx50Xf7Sb/H1Ga7e?= =?us-ascii?Q?KdYcZfZPS1ga55fNM4Z1jpW76sfPL9qbP4/D0bTmTecOd9RlAdlsAV4lpf5S?= =?us-ascii?Q?O14hskLU35nJT8mH6CkAIWQayeVuUqtbd+xVGhW10Nl3fov50Y1f7L1AZabv?= =?us-ascii?Q?Eq4C53zDYOVzhUpXnEs/RkXl5nVBHD9TiP/9QUOQuq+Z3xM+htuMUAYLd+86?= =?us-ascii?Q?WNjKfk6HKpGTLmhAXGql4y6g5Hu0+32remlpSjdrjJArPNOqzmjyVIzS5aoI?= =?us-ascii?Q?XdcG3jqhxc52mqO8fy6f46vXFesOOn9QfSNUdHTbsan5JXTwr4fypUWRJ2hs?= =?us-ascii?Q?vqNdS75oX9xb5rDC0Em/0y+lEgAT67Ihpoj3x1x0IqfDDw8LMZKBPI/paXB/?= =?us-ascii?Q?FRRibhJun7DzSA7GhiEw53CzczqkEyTGTF1GdyT06PLGtHivczpZEPxtpSVs?= =?us-ascii?Q?a97G7teitK+1Dr5LTMPzl6/hdXpgPdkL+aiBgCyBvsST9pJwz6EUlWnBKS0x?= =?us-ascii?Q?QsBgu/9pL0355qKUOFoMzboJWzSis+8IR/aNVReBxSH+w8owvNmlzOIKFOlh?= =?us-ascii?Q?cNOlt8TIfBrP6414mI8tdXZmUzn7kVVaRPTubDlxMl5M+OWfJiQv?= X-OriginatorOrg: valinux.co.jp X-MS-Exchange-CrossTenant-Network-Message-Id: d1ea5958-f592-4fc6-bb3f-08de63fd5913 X-MS-Exchange-CrossTenant-AuthSource: TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Feb 2026 14:54:50.6073 (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: 1+9GndvR62icB/g7YoDUE31yxRJK+gH6zxUyfgL2wzYeiiKvyK9sFqVjDsLTgo8I5GWG5I3zlEpC46TftLBHoA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: TYCP286MB2976 Content-Type: text/plain; charset="utf-8" Some DMA controllers can generate an interrupt by software writing to a register, without updating the normal interrupt status bits. This can be used as a doorbell mechanism when the DMA engine is remotely programmed, or for self-tests. Add an optional per-DMA-device API to register/unregister callbacks for such "selfirq" events. Providers may invoke these callbacks from their interrupt handler when they detect an emulated interrupt. Callbacks are invoked in hardirq context and must not sleep. Signed-off-by: Koichiro Den --- include/linux/dmaengine.h | 70 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) diff --git a/include/linux/dmaengine.h b/include/linux/dmaengine.h index 71bc2674567f..9c6194e8bfe1 100644 --- a/include/linux/dmaengine.h +++ b/include/linux/dmaengine.h @@ -785,6 +785,17 @@ struct dma_filter { const struct dma_slave_map *map; }; =20 +/** + * dma_selfirq_fn - callback for emulated/self IRQ events + * @dev: DMA device invoking the callback + * @data: opaque pointer provided at registration time + * + * Providers may invoke this callback from their interrupt handler when an + * emulated interrupt ("selfirq") might have occurred. The callback runs in + * hardirq context and must not sleep. + */ +typedef void (*dma_selfirq_fn)(struct dma_device *dev, void *data); + /** * struct dma_device - info on the entity supplying DMA services * @ref: reference is taken and put every time a channel is allocated or f= reed @@ -853,6 +864,10 @@ struct dma_filter { * or an error code * @device_synchronize: Synchronizes the termination of a transfers to the * current context. + * @device_register_selfirq: optional callback registration for + * emulated/self IRQ events + * @device_unregister_selfirq: unregister previously registered selfirq + * callback * @device_tx_status: poll for transaction completion, the optional * txstate parameter can be supplied with a pointer to get a * struct with auxiliary transfer status information, otherwise the call @@ -951,6 +966,11 @@ struct dma_device { int (*device_terminate_all)(struct dma_chan *chan); void (*device_synchronize)(struct dma_chan *chan); =20 + int (*device_register_selfirq)(struct dma_device *dev, + dma_selfirq_fn fn, void *data); + void (*device_unregister_selfirq)(struct dma_device *dev, + dma_selfirq_fn fn, void *data); + enum dma_status (*device_tx_status)(struct dma_chan *chan, dma_cookie_t cookie, struct dma_tx_state *txstate); @@ -1197,6 +1217,56 @@ static inline void dmaengine_synchronize(struct dma_= chan *chan) chan->device->device_synchronize(chan); } =20 +/** + * dmaengine_register_selfirq() - Register a callback for emulated/self IRQ + * events + * @dev: DMA device + * @fn: callback invoked from the provider's IRQ handler + * @data: opaque callback data + * + * Some DMA controllers can raise an interrupt by software writing to a + * register without updating normal status bits. Providers may call + * registered callbacks from their interrupt handler when such events may + * have occurred. + * Callbacks are invoked in hardirq context and must not sleep. + * + * Return: 0 on success, -EOPNOTSUPP if unsupported, -EINVAL on bad args, + * or provider-specific -errno. + */ +static inline int dmaengine_register_selfirq(struct dma_device *dev, + dma_selfirq_fn fn, void *data) +{ + if (!dev || !fn) + return -EINVAL; + if (!dev->device_register_selfirq) + return -EOPNOTSUPP; + + return dev->device_register_selfirq(dev, fn, data); +} + +/** + * dmaengine_unregister_selfirq() - Unregister a previously registered + * selfirq callback + * @dev: DMA device + * @fn: callback pointer used at registration time + * @data: opaque pointer used at registration time + * + * Unregister a callback previously registered via + * dmaengine_register_selfirq(). Providers may synchronize against + * in-flight callbacks, therefore this function may sleep and must not be + * called from atomic context. + */ +static inline void dmaengine_unregister_selfirq(struct dma_device *dev, + dma_selfirq_fn fn, void *data) +{ + if (!dev || !fn) + return; + if (!dev->device_unregister_selfirq) + return; + + dev->device_unregister_selfirq(dev, fn, data); +} + /** * dmaengine_terminate_sync() - Terminate all active DMA transfers * @chan: The channel for which to terminate the transfers --=20 2.51.0 From nobody Sun Feb 8 14:31:39 2026 Received: from TY3P286CU002.outbound.protection.outlook.com (mail-japaneastazon11020123.outbound.protection.outlook.com [52.101.229.123]) (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 4C66B41C310; Wed, 4 Feb 2026 14:54:53 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.229.123 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770216893; cv=fail; b=ZSRQRG1YxkUhcemyVX7enKIXjnkwLo/3KiK1fsNHnnxOQ13SoRL2IYk+H4KFWHHik21Bqcg0cMFI0LoMGREZ+1iBkCEog4Ekp6qzaqIOBfaLxhrIKEdvKnlE1IuUg6TC1uolRxbqD1Jc0RQkIwG+4V9+ts4e2VafMNQ2ghlZzAE= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770216893; c=relaxed/simple; bh=2KYDiBG/+LovTF0NV4VyW8gbdRNvTMXEUU2suACySsM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=X9mMgmKOid1GOcAkHAdGGPOZDFzUIXS2xC/VHaWFahwDD2irELDM7cvpsvvDxzqN5WHCEc0qELfcawVY4DVTMGq0ixrb1rbW2qeitvLZQjmsySIJzpv8IoPYOVm5J597YYZLUviQiqsmTgggHmmAmjHNcuGO5n5xZh+3LMmN1Fg= 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=wFWp97lg; arc=fail smtp.client-ip=52.101.229.123 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="wFWp97lg" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=J79++Q3ZZnFgEW51qUjJxMq/pjiCUVuyzz4Jmx5q5CQf+efpzWtF5A0wzB+NLH85nph6/3aKDnsjjex2y8gIZsqyFnGvN25QYYRBCyNkW+S+8dbMbm2sbSXzQd/Zt3AjBC+x4KmCgkHlT/kdjdUmwZQYUA3QgQSe9NUAix2bL6IjQqOxCPtiZqLQsW7FNJ63nk1f8zPuM6e++iDEfSUqfNhzoI4g70q+94atKandnJ8rBEI9j8vYHNANiRh2T5H2ljxYgskro+z5VkD9+KNKfbRRFbvp98OU86OoLF2tT3cchgUpEGD0RIGFFSsYPXElO4SAl9efQ71fSf6r6Oy9Vw== 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=/4IDx9+lRgpg8PBhuDiR2mN8Hod3uNzw5CP301hji4Y=; b=LqjxpB4AQ6eLpCbw/VsZ2qWa+Cd1/VD/+mcLE7C3ClJsMj6o8GvzhwDPlHaPAj43Z0upyTYQ2Pv3girycbKYXnw1pEzE17Tlb2eqG32LBb61AONERMD+z/8Tu99MR3BRGLpFp/i5nehkZL272TG4VdiI475T5QoClax+K1AbqNMvtU3cDQ8Qxvab64CgY83JY57jI6dctkFXQt6lnfvlgTViSDzARwwYsoYxZ0Zypu1vD4pORZmKMpO+7xNFajJT6Gev6HJHJDIRxw6hI9wyAkX212ivm1bqFqgJmvrJNtYbkv9Kp69YV3841Vls4GbKVEnXVR8LT0s8lcnyPT/tSQ== 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=/4IDx9+lRgpg8PBhuDiR2mN8Hod3uNzw5CP301hji4Y=; b=wFWp97lg5lw3JXThWZA3JfqQBOyX8JDrw2SFJslBo7M4W2iBmFTIet0EmDeuMeEWuoei/jz5FYfBVlpYXr2HXA0y8+V+5fPlZ1LGK4Qu2HnxnoePUKlld7HW3aer4xZ1qCeoFg9Hs0fcZOVCKASiryBjAfDpNsneTLVg4KclCzQ= 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 TYCP286MB2976.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:302::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9587.12; Wed, 4 Feb 2026 14:54:51 +0000 Received: from TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM ([fe80::2305:327c:28ec:9b32]) by TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM ([fe80::2305:327c:28ec:9b32%5]) with mapi id 15.20.9587.010; Wed, 4 Feb 2026 14:54:51 +0000 From: Koichiro Den To: vkoul@kernel.org, mani@kernel.org, Frank.Li@nxp.com, jingoohan1@gmail.com, lpieralisi@kernel.org, kwilczynski@kernel.org, robh@kernel.org, bhelgaas@google.com Cc: dmaengine@vger.kernel.org, linux-pci@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v3 05/11] dmaengine: dw-edma: Implement dmaengine selfirq callbacks using interrupt emulation Date: Wed, 4 Feb 2026 23:54:33 +0900 Message-ID: <20260204145440.950609-6-den@valinux.co.jp> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260204145440.950609-1-den@valinux.co.jp> References: <20260204145440.950609-1-den@valinux.co.jp> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: TY4PR01CA0077.jpnprd01.prod.outlook.com (2603:1096:405:36c::6) To TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:38f::10) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: TY7P286MB7722:EE_|TYCP286MB2976:EE_ X-MS-Office365-Filtering-Correlation-Id: 00b29b56-f56f-4e70-7eac-08de63fd5984 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|10070799003|7416014|376014|366016; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?BNQ9m6u9xmV1moPCfwozpAHaWjZ2pr7cYz6ppzEC0uYp7KdrTGvVQPoMH703?= =?us-ascii?Q?Z/c752/S90dT92er8dVvJj5FrqCLkq4ZSdl8qksHwK0PKl5K+k3LBeQc6JBl?= =?us-ascii?Q?dHelu29qWoLeBYEcpNE36MJFBRuSOwbh9WAbhsnGsnUvHCd8kVAkp5Lw5G5m?= =?us-ascii?Q?6h2dqWtYgYlFFY9Zd9NHD9meNzGD4vmINblhk/WOY6GbXZkcMF1qY/1pmXxW?= =?us-ascii?Q?y9W237zGgrgENRbhJkIuKa9psEGZk7Z2ylU8pjQlf4kcGv/dkwilNqLx9kN9?= =?us-ascii?Q?EDzGrNnZ++lEW1MkvloMyPWtLkM+kemT6MkDqnXFG7ZNpy0coK5eA7GOHRCO?= =?us-ascii?Q?kQLlKQa61AWSyaepxQkRI5lTpOh/6J0IRamta7iqzSbWulNKdTTqL8kDwGAT?= =?us-ascii?Q?9zu7pKFfUWQ8DW80AgUjTYe6YhxgDF+xithv1Z66t4I/o5o8ShhpYULnsCDB?= =?us-ascii?Q?P+EOZT9w7rtJyu8tNgIaZsPrV0FWtWwLaX5Ib03m9CBEv+t963aSCagUBjby?= =?us-ascii?Q?uKO/tqdaj0jIK/CsGWsZAvgO0Qw533mjvUDM+3lyi90EU/gXi93+qAhuShbI?= =?us-ascii?Q?iaNIjraoCeoW9ikQrgnRWM1r5GKIyBcPri46Y8rMnymDUSgwVphn67el7zYn?= =?us-ascii?Q?CbfwicDnwTcHeuTuC6ZSpDK/iP4YC4snY7EZqwQeW/6Kzc1StACWc6NfxtwY?= =?us-ascii?Q?Q+ydJU7a+2KjnZ9Oc+Pna0k6xUAlz8lTMfVaUMeYIzaVRHtlgHjbXSndcGtB?= =?us-ascii?Q?QW3c4s6A5kl7afbKZQeEFjv2pZzc1emqr7RyNm13V3GD55zNtdPFewo0h55P?= =?us-ascii?Q?yoRhGp8ikL4ozC0/oeVFP9zflrDerasYfitvng3U0Eb5Jq3wxmYZ6yQAeR/L?= =?us-ascii?Q?PnDl/4gUH5t4JD8tmjvNQFU5eb3FCGofnF72ddP1uBehDy69OYtVoBtJdCU0?= =?us-ascii?Q?ktR4byz3U5aOvgDwUEf4azTISK2qzvesXYDMB9kqvfopflnlcb0fMI/cYEgy?= =?us-ascii?Q?HF30LbvFHJmMM4Ncwo8XyCjwxKrC1QdnN0GYpoaGbUPX0JGe6x4K6/BYIQoX?= =?us-ascii?Q?ydJu8Jmdu2TDF46TIARaX7gUwaL+qzERUi7LcYBW4c8/ZbLnyDat62CJKcy+?= =?us-ascii?Q?AYOUk2oVFk7uxWCGzsr2u0/63tZjVCziH1raQd54vUa9q/dWtm/RnngMN3wg?= =?us-ascii?Q?2rZS1voaog6/AnS51YzrUposc4iKcHl8qMzd+yomkBhLnusCe7KqSYdzk398?= =?us-ascii?Q?eqfluZ1P1p8uInK7aJnb1qQcw9bJ9B++SZn4t4vIYhqBDYz+p/rQiZRog0Z8?= =?us-ascii?Q?6PgKOW5/FCaMFbIAL2TVhjugQgKfBwoQ5vNzd1Wy7RxfMZJs38o2xlupC13u?= =?us-ascii?Q?FYbCpy+r+imidXtNUTgSeRj+grAo8Q5Jq9RUWd65IRvVF4sm0Oa3Hvae8jV3?= =?us-ascii?Q?i3eG1YmYzQzLXQ7uA5q8TMtJZsZFd7T1nCsZNdM7I4W8f/N+qaZ/7BT5qKl5?= =?us-ascii?Q?KlBacoqlCTnb4onHKjkJpxjyt0WIVK11xJXLJGIQFP71t2Dxat/k0YvcndFU?= =?us-ascii?Q?K+lNlnX+6mgJqxeRwLU=3D?= 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)(10070799003)(7416014)(376014)(366016);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?UUMfirXfDssP/AH7OlcYiigZwlbHfTsio2N0p+I3tz6Fg+Yj7bO5qGghVM9h?= =?us-ascii?Q?N1Ucr8Q1I3A2hfh7yQUTtyjvbwTpVVGFRNsINBn4lFuqHMnMC+M9Sd8m3EYw?= =?us-ascii?Q?Gy0KU1+OhhF9Y8Mx3B0saimmk3jkyPoCPbLl+H3guGc5vLSg3Y/lecTo2VOB?= =?us-ascii?Q?UCQdbGOQ2/n9ZsYLOKbFcBOnCRIAuSI0uQOepgV89efBGfnpSenBt0TMgw4c?= =?us-ascii?Q?70D9jPpB/MW6hy1AJB7mRtwPwKNS4KSzC+JLs5IRjibuevs/c5pK6M+iafAQ?= =?us-ascii?Q?J9Y38VG/ROINRzus7+kYfKWRQEOnvFnKFYNtRqwgPEiurHcTvNQm34Qbvmi7?= =?us-ascii?Q?vC6I0VqXabcN3y33D+ZXRttAIoGpPKHm3SqT2LpN3filXBSAJLs9yLl95D/j?= =?us-ascii?Q?pVydNlIZPJtnyNyNkIYk9oh5Y3iyLWOd3yspLbqpKZs6CPEKVL0wQIYceu4n?= =?us-ascii?Q?lwliAUWF2YRXsw/T+chFoaGtX4lwtpuEIhzd/Og8/iCWWOrC4Bey3lkOZPk3?= =?us-ascii?Q?LgWWHmkO23hISjCP6QfgbjmRdou0n7ryeFRlSEhIyQ/S6iiFSrODYNctWaOZ?= =?us-ascii?Q?K9ee67LnWupjX1LXlvzr0szDgnR9H/LXMUKNLA2ctYZ6a40llmayic14MQRJ?= =?us-ascii?Q?MtWqTFgUSS79cIhz0t03IBLYIZ8w2dAPzPdRYgC9AAjZ7xqQvWcG5Yn2YYPZ?= =?us-ascii?Q?AEaNK7D8qmPPhJPFXIcAbtvQViq0y/bTFUKBy4m7sx7Acakblr7wmorH621v?= =?us-ascii?Q?1Mnk8P81uloUYSWDlBiAzKwWkU2FGpVRZaByXvjTAb+vLDj3ovqlPwzpLvyy?= =?us-ascii?Q?Y56+qEUcpRXy/LZhsJu5XSMHt0K47yxDgZRfRAHetpdAQ9n4WMOJ26ToH6mB?= =?us-ascii?Q?YP7HvNq9Uwtfxzr/H4OEIdz0mGve8XY6CMqVbtosIZwePunSHo9Xe7NalNbY?= =?us-ascii?Q?cYT7B3/TsDAONMocuvoJIH/GKgTqDAIUuTKgkBFiIitQp+Wmcar+8pUlB9MP?= =?us-ascii?Q?c8qtNCP+VtxNis4RL2H/UbSuZWwnv63s4WtcD6Nt+4YenJsxp0GARLieXLhS?= =?us-ascii?Q?Bl1Myjisid0Ob/O5be4R8h9UH+TYvFmbCTu/lKdw8QaQiu6fFlPTIWXy5f2F?= =?us-ascii?Q?U2jRLJq9abX1TczBfQXZcLFmajiC7Bq9wv8xzdaxojZCDIqemAQqGuwuaTyh?= =?us-ascii?Q?J+S2MhUJEboHExMT6e6iF6I4FRy7iotQJnAjjev8i+exfNa7iXD3fCHIgolV?= =?us-ascii?Q?L1OXypZZqKgiHDEehRmOEGK9N1ZRdQpLLkuOO0o4/J32/rPK4OA9OEIW43CN?= =?us-ascii?Q?oOOjxHnVo377G51VDSBYpzKb/6rTna9qkwnFDz91JKrkujHnH5vRqXZjIC95?= =?us-ascii?Q?fe1qxl5fiakXg1tHfeyxO3+VaJNxsVBvFjpQlmRVJ+XprPe02oTb8O71/6Py?= =?us-ascii?Q?KJo3JtZkPzX+1Uf1/hfzeE1u/8L+YfErZ7VVl/DyZ/+s8gJiwyMaBZRqdayC?= =?us-ascii?Q?7umgZGq3F87jXSf4pAQepTu+BcMN0rUsP3v8qkDy0Ea7iLVdN9/btX68Zjh8?= =?us-ascii?Q?itY1+GH2mgwnOzzb03vGXUkLN2r99G7tw3pZ1Zl5zMauKusLaMvuAXk0orht?= =?us-ascii?Q?/5A424tuklBq8Z4Qkox+nao/5m66kPxU+iOwjYPV1HCkKKR35jhCDYyYtTxI?= =?us-ascii?Q?PfMXd794nzsj24iS9TmmjTcP5cp+nmB3ImLVceqL3CkUxJCSuFctD96pWZPp?= =?us-ascii?Q?zER4OAoXGzgyHq/uJC7ZEHM0IuCOo66wpd2V5UBrXG5kxMK8Q6H9?= X-OriginatorOrg: valinux.co.jp X-MS-Exchange-CrossTenant-Network-Message-Id: 00b29b56-f56f-4e70-7eac-08de63fd5984 X-MS-Exchange-CrossTenant-AuthSource: TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Feb 2026 14:54:51.3295 (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: oDLarUFCOGlWOu+fsXMY8Qog4dy0UxO3mEEPwfxlXZiarNaPYV5wNBDkZm0gNAm5UtSZ4EQ5fg7EhUMy6n6cBw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: TYCP286MB2976 Content-Type: text/plain; charset="utf-8" DesignWare eDMA can generate an interrupt when software writes to the WR_DONE_INT_STATUS / RD_DONE_INT_STATUS registers without setting the normal DONE/ABORT status bits. This behavior can be used as a lightweight doorbell for remote DMA use cases. Implement the dmaengine selfirq registration callbacks for dw-edma, and ACK emulated interrupts in the eDMA v0 core by writing 0 to INT_CLEAR. Because interrupt emulation does not set any DONE/ABORT status bits, dw-edma cannot reliably tell whether an IRQ was raised solely due to normal DMA completion or whether an emulated selfirq was also raised around the same time. As a result, selfirq callbacks are invoked on every IRQ. Note that dw-hdma-v0 does not implement the ACK path yet due to lack of hardware access. Signed-off-by: Koichiro Den --- drivers/dma/dw-edma/dw-edma-core.c | 118 ++++++++++++++++++++++++-- drivers/dma/dw-edma/dw-edma-core.h | 17 ++++ drivers/dma/dw-edma/dw-edma-v0-core.c | 11 +++ 3 files changed, 141 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 b4cb02d545bd..398328b0a753 100644 --- a/drivers/dma/dw-edma/dw-edma-core.c +++ b/drivers/dma/dw-edma/dw-edma-core.c @@ -15,6 +15,7 @@ #include #include #include +#include #include =20 #include "dw-edma-core.h" @@ -687,7 +688,30 @@ static void dw_edma_abort_interrupt(struct dw_edma_cha= n *chan) chan->status =3D EDMA_ST_IDLE; } =20 -static inline irqreturn_t dw_edma_interrupt_write(int irq, void *data) +static inline irqreturn_t dw_edma_interrupt_emulated(void *data) +{ + struct dw_edma_irq *dw_irq =3D data; + struct dw_edma *dw =3D dw_irq->dw; + struct dw_edma_selfirq *h; + + /* + * eDMA interrupt emulation does not set DONE/ABORT status bits, so + * a shared IRQ handler cannot reliably tell whether or not the + * emulated interrupt has been raised when the status bits are + * non-zero. Invoke selfirq callbacks on every IRQ and always claim + * the interrupt. + */ + dw_edma_core_ack_selfirq(dw); + + rcu_read_lock(); + list_for_each_entry_rcu(h, &dw->selfirq_handlers, node) + h->fn(&dw->dma, h->data); + rcu_read_unlock(); + + return IRQ_HANDLED; +} + +static inline irqreturn_t dw_edma_interrupt_write_inner(int irq, void *dat= a) { struct dw_edma_irq *dw_irq =3D data; =20 @@ -696,7 +720,7 @@ static inline irqreturn_t dw_edma_interrupt_write(int i= rq, void *data) dw_edma_abort_interrupt); } =20 -static inline irqreturn_t dw_edma_interrupt_read(int irq, void *data) +static inline irqreturn_t dw_edma_interrupt_read_inner(int irq, void *data) { struct dw_edma_irq *dw_irq =3D data; =20 @@ -705,12 +729,33 @@ static inline irqreturn_t dw_edma_interrupt_read(int = irq, void *data) dw_edma_abort_interrupt); } =20 -static irqreturn_t dw_edma_interrupt_common(int irq, void *data) +static inline irqreturn_t dw_edma_interrupt_write(int irq, void *data) +{ + irqreturn_t ret =3D IRQ_NONE; + + ret |=3D dw_edma_interrupt_write_inner(irq, data); + ret |=3D dw_edma_interrupt_emulated(data); + + return ret; +} + +static inline irqreturn_t dw_edma_interrupt_read(int irq, void *data) +{ + irqreturn_t ret =3D IRQ_NONE; + + ret |=3D dw_edma_interrupt_read_inner(irq, data); + ret |=3D dw_edma_interrupt_emulated(data); + + return ret; +} + +static inline irqreturn_t dw_edma_interrupt_common(int irq, void *data) { irqreturn_t ret =3D IRQ_NONE; =20 - ret |=3D dw_edma_interrupt_write(irq, data); - ret |=3D dw_edma_interrupt_read(irq, data); + ret |=3D dw_edma_interrupt_write_inner(irq, data); + ret |=3D dw_edma_interrupt_read_inner(irq, data); + ret |=3D dw_edma_interrupt_emulated(data); =20 return ret; } @@ -742,6 +787,63 @@ static void dw_edma_free_chan_resources(struct dma_cha= n *dchan) } } =20 +static inline struct dw_edma *to_dw_edma(struct dma_device *ddev) +{ + return container_of(ddev, struct dw_edma, dma); +} + +static int dw_edma_register_selfirq(struct dma_device *ddev, dma_selfirq_f= n fn, + void *data) +{ + struct dw_edma *dw =3D to_dw_edma(ddev); + struct dw_edma_selfirq *h, *iter; + unsigned long flags; + + if (!dw || !fn) + return -EINVAL; + + h =3D kzalloc(sizeof(*h), GFP_KERNEL); + if (!h) + return -ENOMEM; + h->fn =3D fn; + h->data =3D data; + + spin_lock_irqsave(&dw->selfirq_lock, flags); + list_for_each_entry(iter, &dw->selfirq_handlers, node) { + if (iter->fn =3D=3D fn && iter->data =3D=3D data) { + spin_unlock_irqrestore(&dw->selfirq_lock, flags); + kfree(h); + return -EEXIST; + } + } + list_add_tail_rcu(&h->node, &dw->selfirq_handlers); + spin_unlock_irqrestore(&dw->selfirq_lock, flags); + return 0; +} + +static void dw_edma_unregister_selfirq(struct dma_device *ddev, dma_selfir= q_fn fn, + void *data) +{ + struct dw_edma *dw =3D to_dw_edma(ddev); + struct dw_edma_selfirq *h; + unsigned long flags; + + if (!dw || !fn) + return; + + spin_lock_irqsave(&dw->selfirq_lock, flags); + list_for_each_entry(h, &dw->selfirq_handlers, node) { + if (h->fn =3D=3D fn && h->data =3D=3D data) { + list_del_rcu(&h->node); + spin_unlock_irqrestore(&dw->selfirq_lock, flags); + synchronize_rcu(); + kfree(h); + return; + } + } + spin_unlock_irqrestore(&dw->selfirq_lock, flags); +} + static int dw_edma_channel_setup(struct dw_edma *dw, u32 wr_alloc, u32 rd_= alloc) { struct dw_edma_chip *chip =3D dw->chip; @@ -846,6 +948,10 @@ static int dw_edma_channel_setup(struct dw_edma *dw, u= 32 wr_alloc, u32 rd_alloc) =20 dma_set_max_seg_size(dma->dev, U32_MAX); =20 + /* Set DMA device callbacks */ + dma->device_register_selfirq =3D dw_edma_register_selfirq; + dma->device_unregister_selfirq =3D dw_edma_unregister_selfirq; + /* Register DMA device */ return dma_async_device_register(dma); } @@ -959,6 +1065,8 @@ int dw_edma_probe(struct dw_edma_chip *chip) return -ENOMEM; =20 dw->chip =3D chip; + INIT_LIST_HEAD(&dw->selfirq_handlers); + spin_lock_init(&dw->selfirq_lock); =20 if (dw->chip->mf =3D=3D EDMA_MF_HDMA_NATIVE) dw_hdma_v0_core_register(dw); diff --git a/drivers/dma/dw-edma/dw-edma-core.h b/drivers/dma/dw-edma/dw-ed= ma-core.h index 0608b9044a08..4b9c4b28b49b 100644 --- a/drivers/dma/dw-edma/dw-edma-core.h +++ b/drivers/dma/dw-edma/dw-edma-core.h @@ -97,6 +97,12 @@ struct dw_edma_irq { struct dw_edma *dw; }; =20 +struct dw_edma_selfirq { + struct list_head node; + dma_selfirq_fn fn; + void *data; +}; + struct dw_edma { char name[32]; =20 @@ -115,6 +121,9 @@ struct dw_edma { struct dw_edma_chip *chip; =20 const struct dw_edma_core_ops *core; + + struct list_head selfirq_handlers; + spinlock_t selfirq_lock; }; =20 typedef void (*dw_edma_handler_t)(struct dw_edma_chan *); @@ -128,6 +137,7 @@ struct dw_edma_core_ops { void (*start)(struct dw_edma_chunk *chunk, bool first); void (*ch_config)(struct dw_edma_chan *chan); void (*debugfs_on)(struct dw_edma *dw); + void (*ack_selfirq)(struct dw_edma *dw); }; =20 struct dw_edma_sg { @@ -208,6 +218,13 @@ void dw_edma_core_debugfs_on(struct dw_edma *dw) dw->core->debugfs_on(dw); } =20 +static inline +void dw_edma_core_ack_selfirq(struct dw_edma *dw) +{ + if (dw->core->ack_selfirq) + dw->core->ack_selfirq(dw); +} + static inline bool dw_edma_core_ch_ignore_irq(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 a0441e8aa3b3..68e0d088570d 100644 --- a/drivers/dma/dw-edma/dw-edma-v0-core.c +++ b/drivers/dma/dw-edma/dw-edma-v0-core.c @@ -519,6 +519,16 @@ static void dw_edma_v0_core_debugfs_on(struct dw_edma = *dw) dw_edma_v0_debugfs_on(dw); } =20 +static void dw_edma_v0_core_ack_selfirq(struct dw_edma *dw) +{ + /* + * Interrupt emulation may assert the IRQ without setting + * DONE/ABORT status bits. A zero write to INT_CLEAR deasserts the + * emulated IRQ, while being a no-op for real interrupts. + */ + SET_BOTH_32(dw, int_clear, 0); +} + static const struct dw_edma_core_ops dw_edma_v0_core =3D { .off =3D dw_edma_v0_core_off, .ch_count =3D dw_edma_v0_core_ch_count, @@ -527,6 +537,7 @@ static const struct dw_edma_core_ops dw_edma_v0_core = =3D { .start =3D dw_edma_v0_core_start, .ch_config =3D dw_edma_v0_core_ch_config, .debugfs_on =3D dw_edma_v0_core_debugfs_on, + .ack_selfirq =3D dw_edma_v0_core_ack_selfirq, }; =20 void dw_edma_v0_core_register(struct dw_edma *dw) --=20 2.51.0 From nobody Sun Feb 8 14:31:39 2026 Received: from TY3P286CU002.outbound.protection.outlook.com (mail-japaneastazon11020123.outbound.protection.outlook.com [52.101.229.123]) (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 A369B41C31E; Wed, 4 Feb 2026 14:54:53 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.229.123 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770216893; cv=fail; b=CkDdp8r9DtNFhsbggFU7HcnUVuplI5h4bbUsJsZhhvXsEKteAmpdYFpXgFYvr3bbos30s0ttwUfKXkiI+gHcYrbrVrMF7MZlHDLtpUgiOIwfYc3u5sYk1xHt0gKKQG4Lfjw/i/Tqt5terdbOciTCxznYXnARD8AvbtWaZ7voQKY= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770216893; c=relaxed/simple; bh=jLFj335Vo5tlFTvTPK0YO0+7A+iEJq3NcIXNuObSn2E=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=tjPw1efZwdbpDu2haKwd9TFiQnWXkO+8A57ljyBoOyeQrD83I84rcqlV8kjGVu/leNiulWhMcg/W1ayLbui8Z/2g+l0Wj10vJz3YczNWQT6VkbBJiV9l+8T3Cnzl9jYmPKLaAE7aPSeNdlK4fzY2SqKl3GYT0tRmH2NZ6UsYYA4= 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=COtQunve; arc=fail smtp.client-ip=52.101.229.123 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="COtQunve" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=BXkKMB76CQ5UGQxR/zds+xo5R05wI4d3D92RSoyYBH0ScQOW73jdNeNEJRhjAPAnN3JQpAbqFMnQbnBDCknnNOWFne+/SmGqbbP5wNIgzT97RUJwgufx5b0kCgQRCAtEeNbRbSShA5BS2MeOZGNWzD9/9mDDCvc4/y5vkZZamwV6qId0PJ4DuLv7A8lWL7ORicfaJw2GttMYLD1JptUcKsmkhuo3UEweZyEwBk9m6KSyPuBkss84yHzst4Nb2CmiT9enzjmLE5QeZthclG02dzbKkLevCbfEJi1bxl1VIRevk4GysR53leohYKQPRhpZZ7HvkBM1QegXyjq5GNuxVw== 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=eSmGhsqC8E3qz+cPAPson6GNm2uua/mZB8XngUcTFfg=; b=Fl+diwODwpVJgoQzXMydZKvDRaOaFd4nT8KAcSUgOhstDuRdDyYu+wmPLyHj4sAgtonFif4k1D2eNw53Uo4bu1+ZiwWMAVTQ1jMJN8u4UPBilKLK/UgLhrMSRwsyKjIAySfYSIOY+7iHiblvTzYTz8+EfBLiF1X2AhCZ5cpxVq2VrMKx01bA/oGEiMdxVuIiGsDJh0Jn8Dkl5jUN/xK5KK2nvUnqSoaRN0xuS9vMvv78jpDmsVn/4PVyW9giqOEbq2gEh5079scyQRgTq8+7pnXKnnY73sfd/sAemZlxhMm7vQE54kRG1xbo20s2gQ7IG1suTeN2veNujqU9FKs5gw== 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=eSmGhsqC8E3qz+cPAPson6GNm2uua/mZB8XngUcTFfg=; b=COtQunvemhOb3awgfdULeAVSrXaYH0V4Uxg8N2yVCCR+ZRnMoxpagS3F2yNUF6tGnzVuV+FieD5nRg+6ffY34MaBSQkRuB3ekuQQOud3ur9/ygCmqTSXKKBTZCtsGaSJJeGJ7Bt+bCnBwGIaDZSh6GkulwcjRwBIHTdyorUjRqc= 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 TYCP286MB2976.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:302::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9587.12; Wed, 4 Feb 2026 14:54:52 +0000 Received: from TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM ([fe80::2305:327c:28ec:9b32]) by TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM ([fe80::2305:327c:28ec:9b32%5]) with mapi id 15.20.9587.010; Wed, 4 Feb 2026 14:54:52 +0000 From: Koichiro Den To: vkoul@kernel.org, mani@kernel.org, Frank.Li@nxp.com, jingoohan1@gmail.com, lpieralisi@kernel.org, kwilczynski@kernel.org, robh@kernel.org, bhelgaas@google.com Cc: dmaengine@vger.kernel.org, linux-pci@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v3 06/11] PCI: endpoint: Add remote resource query API Date: Wed, 4 Feb 2026 23:54:34 +0900 Message-ID: <20260204145440.950609-7-den@valinux.co.jp> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260204145440.950609-1-den@valinux.co.jp> References: <20260204145440.950609-1-den@valinux.co.jp> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: TYCP286CA0025.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:263::16) To TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:38f::10) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: TY7P286MB7722:EE_|TYCP286MB2976:EE_ X-MS-Office365-Filtering-Correlation-Id: c34883a3-235a-433a-c033-08de63fd59f0 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|10070799003|7416014|376014|366016; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?AQpFg22gWyNvay5Nu8OVYfUi/rJyID3y5zy4fKSYz9MK/x220CbHnS5sXZFw?= =?us-ascii?Q?6/YjqU5d6KNFv5zZ9/CUEDUaay69GhwvbqnQ/juto2T2a2egiQOhYplQWBQF?= =?us-ascii?Q?akdAlQKIzZbliOerkQY1bidDe2HjUHEHduBmfJlza+2iAGhjSAP4emSBbGZ+?= =?us-ascii?Q?/jcEfMaFf56N7UYVMKqRYJtvoOYlLkj7H620Vr6TlLDEkRKwxCd/jvL3bX69?= =?us-ascii?Q?jR7EoYo5HcAq94XgPzTtZO7FAxSl1MQhcMd4vmAJTQBnS6zpv99QUnQ3BGn/?= =?us-ascii?Q?2OfBY4sw9Jusfj6i7+KdgfRXJOUKOlrwvNoquj6bbIWR+FsY/ctuwbhPs4Md?= =?us-ascii?Q?JkI87Umty0cA+KmT3qumjPXKDteZ+qWHSuWGmKm8lwGzkZRcwDUnGUOpMw7R?= =?us-ascii?Q?ewR8xg75SnVkm/saWMfNS15r02jh4akXCBJ17cgOoqGDxYz0wjvVQp9T0FBs?= =?us-ascii?Q?h7ee5bdcqR1O3YDNCNNVkXThXI55gb3SpS3NHUCe3Lu1+Pg5rhgSOul/JAis?= =?us-ascii?Q?YR2FeTODJobU6v9endKToLaPDsQBjDGMr5pK+GBvNl3xcBLZ6bPBvpXOMhh+?= =?us-ascii?Q?YyYSa5F+JQPURZ09Bdlscb0tp9gBaOBkOG1+9A3SK66saOvOc1uHsVMEqkaJ?= =?us-ascii?Q?BCi0v4dQRTzt5PLh56cFb7Ap7SrVR0W5xZqIwJ62kgtiHlSyFwzoqvXscD7E?= =?us-ascii?Q?QRFx3cW+rZh04L4m38idS5rY0zvWvH/eXnl4Lte3yK2FQ8tVLWcuFdcfxlAr?= =?us-ascii?Q?3D/4AKQz2ClDh22j5qgQTEtNl9Sh9OpbbVVBGvfA/Nw5EWvwULtJ9GG7RL59?= =?us-ascii?Q?vvJxnTWcYSPa5xWU2fQ2l3qxoyQTwoGxWC8uNPQ49RHKNpDxPq+fiN6qbUBx?= =?us-ascii?Q?wJ5MYQ8eJ8ZqcyHdPAOk3eNDcnFOiJ1bmcnDxAM3NHZ0flWRuz+AUK8itDDo?= =?us-ascii?Q?KBIwVEMq0/TqM9pcOE/q1pH0Zb6jOfWyvFSudrWQZk6MQsjbECQvUnyofaeu?= =?us-ascii?Q?nO/sUWB98N1uPGdd8iKcAa1ixvWndaX/IRrodXgBKjKsKecVW/BlcK3+DC1N?= =?us-ascii?Q?0B3oS93lcCHbKv86vj5jbJ1rcdawNKQnmVmGwIXehrfCMRY7hz+pjV2K8K9V?= =?us-ascii?Q?F9Xuacx6P9qBzPTA8Xd6q5V17ig+uM3JLRHZArnlloZP++ZczmdzOZtXOpna?= =?us-ascii?Q?pHvm8Sn9IeOG1bXQZreZEQ1ExgJR/n79Ob9DwXdFr5NMyeWj9jguwOASGNiN?= =?us-ascii?Q?A0IHxql19P5syKW9qWOgXB1GHidtK9/g6jq+zYk8zy3Ca2SZOn6DPXdXRnzf?= =?us-ascii?Q?AIZKQVs3xOkVVCQxH+AHB7DUf7S1my9LGvdjhyh/UHLyeovGNdEKDUPKzW5k?= =?us-ascii?Q?AV9kWm1SnhFbOYgzcGR4sMc8jtOHZTCGw6XzkypR+n8TxEpsoE9mmi6lsZN8?= =?us-ascii?Q?xeH0kI/Qwbw2l1whK7igk4jWHno9lmQAtxbPLTurLCy+jklr7vS7zRWyUylT?= =?us-ascii?Q?c+pOCZyq2V37P4FJYLyw0FnlYxbvnycEpQ79zdBlrIaocbtJt1w0s5z62EK7?= =?us-ascii?Q?A7J8iwtqjTND2OgZoSs=3D?= 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)(10070799003)(7416014)(376014)(366016);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?0iMf3bg+Ilfc0cTfw6FR94DYouLsBN7Tq7bLSQA1imiwA0B5I5yw+LfgHsEV?= =?us-ascii?Q?FbdzfgOWvbnR3y/u3kpvBePb+EqytWBhdbNUVQPPcyVoIV6sI2Nz+JaQ18dQ?= =?us-ascii?Q?iw8TRtsnCEfhphlsEuTBz+CcKR1tC/J9NHYwn3qCpFxKFkQ7gjS506oVLfvy?= =?us-ascii?Q?ds9OaApjKTdeSynl9c7FhIwttxTop784WGgwLukyH4477nqhDBRkkQ8r1FAH?= =?us-ascii?Q?XcBJUwCeOFtEjW8aB5o1C4X31UflSg8jmvglM1KlYodYwmkjwWS41+nkLZWO?= =?us-ascii?Q?qoAYph0Gb+3JQp82VWznbKJcSww0yMinPXaIRxKHkWma9eRUqXyvbWJwpgGA?= =?us-ascii?Q?PFyV1SqU303OMxHoMunvVwetNIBNEhTLPIZnSh8C6xvo4HcPi2pGjc7yY44H?= =?us-ascii?Q?zEHID9iELHnef0OVNlC68or8YRQktCTQibmoJj/h8CKBFG713wR8HGBxouEF?= =?us-ascii?Q?wYNTm7mGuNAW0f4N7ZsOKE7xJTa5dbbcds9a+Wbuki8RUwxEF7+syNqqK0Wq?= =?us-ascii?Q?txH733GjosssyIpJxfL9nkmwDbfkGY0g2fZCnpNgpQZfAJ/whaSiXwxZ6ZEo?= =?us-ascii?Q?wCDXObKeHZKOI9G3uvWmIhRKdPchwOtRvHrVUIR+ZqDf7jZNRkhf4OlOFAZN?= =?us-ascii?Q?0RTkgjj2xAUNiXgIVE1G3FIUdi81vQUxud571LL5HKLnF8ZS5gAVrg+PxjT7?= =?us-ascii?Q?q7QNGFh8UUTRaAw94yl808TxU/uEuP8Kc0PstgMMYKvRxJbhLd0FJULRBm1a?= =?us-ascii?Q?dqUB8Y1mTVTy3Mso92OgN9G9GUPelQ7kliAouE2GHEvJf3YE3FNgVZ0p86Pr?= =?us-ascii?Q?HCB0H8d2EdEWm7FsrnZnPOhOYSkySaC/2xEkTtC2/DT7V8jPeelGuwlOfO9v?= =?us-ascii?Q?wp0IDhlCJZaOEGM9z4cH8fVS7BFOkYy7In1/fR5q3AEl+rNElwbIolCXSMrN?= =?us-ascii?Q?CWt4cNxR0OLfcyYwREG36aGOhJLiHRpCNFdv1BJVRS0ny+8NXfzals4zwwxF?= =?us-ascii?Q?3GkSEifPVrRCcwc98grzvf/hrjq7mBDdgEpyvtWHiZ8dnQ+RExnHhMhRTDaq?= =?us-ascii?Q?rzMQrvfX3cQvhLgmKL7cVD49poEez5zHMGN6qrMtid0z4u575S4VtHB22+JT?= =?us-ascii?Q?CqW2dI049LsRqgrPjfh6c1WJm6fWp1BWas1EAQzTR+dC8/ypyLL0Ay88vVZv?= =?us-ascii?Q?Fa8LkxRmuQwMulpdWCBx/yUWVFsJAcu2g6yLgVK3Vkg0myGoBsYe/SKjinbB?= =?us-ascii?Q?oyhmUhyQ2GpGGwoOYNwMof/dWEkPzqepx8ioUdVMJdGZqBvnTHLITpErsN+x?= =?us-ascii?Q?4UreC7lGX+m9/wyyn6I5hHtZfStbH2VYU/XKXwyMKOhAOcZpwAGwL9RCqrq+?= =?us-ascii?Q?Zn61LjbXRqa22Sm2C/1IYESelTtHQRf1UuWE+wLOnAD6eE7mvKnI1dk/pdDV?= =?us-ascii?Q?g0PA0hLF1BsCaF3X0aa2tdf1vxtycGLEV4rDwNrGn40i6sKlb0Wh1Ik3eKqU?= =?us-ascii?Q?ROE+FhfJycMMCJVcoEIcOqkkuSs26+U5TQcvYsiXkKattPSw4EH+udTdEAPL?= =?us-ascii?Q?+uW6Vf9FCQNXbYFP8IpA1Qoll5LvomFqB47DNodJc+yMb8NACVF70W/+yaGS?= =?us-ascii?Q?XDpWgJYm5wEQem2vGbO1KcFLKBjAE2yIMa6JeIXWZBFVN5A/1VEEffhm5HZh?= =?us-ascii?Q?+dbLAEoGKdkCfZltpm7u/LNfAeOwpyew/jUl3vk7zavPQY9CK529rXmFQukL?= =?us-ascii?Q?37G/JKBy8j+FqzlOuhItdLrKGzl4YWUPCDtW6RwedteEclloQ9Fr?= X-OriginatorOrg: valinux.co.jp X-MS-Exchange-CrossTenant-Network-Message-Id: c34883a3-235a-433a-c033-08de63fd59f0 X-MS-Exchange-CrossTenant-AuthSource: TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Feb 2026 14:54:52.0513 (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: hU6oQSQZKPgPTjc/9rNOZxUI345BefBif5exMd7HKVA1k1+NPqpL0QOOogScicA5jXMi4WhuxnC66OnctS7U2g== X-MS-Exchange-Transport-CrossTenantHeadersStamped: TYCP286MB2976 Content-Type: text/plain; charset="utf-8" Endpoint controller drivers may integrate auxiliary blocks (e.g. DMA engines) whose register windows and descriptor memories metadata need to be exposed to a remote peer. Endpoint function drivers need a generic way to discover such resources without hard-coding controller-specific helpers. Add pci_epc_get_remote_resources() and the corresponding pci_epc_ops get_remote_resources() callback. The API returns a list of resources described by type, physical address and size, plus type-specific metadata. Passing resources =3D=3D NULL (or num_resources =3D=3D 0) returns the requi= red number of entries. Signed-off-by: Koichiro Den --- drivers/pci/endpoint/pci-epc-core.c | 41 +++++++++++++++++++++++++ include/linux/pci-epc.h | 46 +++++++++++++++++++++++++++++ 2 files changed, 87 insertions(+) diff --git a/drivers/pci/endpoint/pci-epc-core.c b/drivers/pci/endpoint/pci= -epc-core.c index 068155819c57..fa161113e24c 100644 --- a/drivers/pci/endpoint/pci-epc-core.c +++ b/drivers/pci/endpoint/pci-epc-core.c @@ -155,6 +155,47 @@ const struct pci_epc_features *pci_epc_get_features(st= ruct pci_epc *epc, } EXPORT_SYMBOL_GPL(pci_epc_get_features); =20 +/** + * pci_epc_get_remote_resources() - query EPC-provided remote resources + * @epc: EPC device + * @func_no: function number + * @vfunc_no: virtual function number + * @resources: output array (may be NULL to query required count) + * @num_resources: size of @resources array in entries (0 when querying co= unt) + * + * Some EPC backends integrate auxiliary blocks (e.g. DMA engines) whose c= ontrol + * registers and/or descriptor memories can be exposed to the host by mapp= ing + * them into BAR space. This helper queries the backend for such resources. + * + * Return: + * * >=3D 0: number of resources returned (or required, if @resources is= NULL) + * * -EOPNOTSUPP: backend does not support remote resource queries + * * other -errno on failure + */ +int pci_epc_get_remote_resources(struct pci_epc *epc, u8 func_no, u8 vfunc= _no, + struct pci_epc_remote_resource *resources, + int num_resources) +{ + int ret; + + if (!epc || !epc->ops) + return -EINVAL; + + if (func_no >=3D epc->max_functions) + return -EINVAL; + + if (!epc->ops->get_remote_resources) + return -EOPNOTSUPP; + + mutex_lock(&epc->lock); + ret =3D epc->ops->get_remote_resources(epc, func_no, vfunc_no, + resources, num_resources); + mutex_unlock(&epc->lock); + + return ret; +} +EXPORT_SYMBOL_GPL(pci_epc_get_remote_resources); + /** * pci_epc_stop() - stop the PCI link * @epc: the link of the EPC device that has to be stopped diff --git a/include/linux/pci-epc.h b/include/linux/pci-epc.h index c021c7af175f..af60d4ad2f0e 100644 --- a/include/linux/pci-epc.h +++ b/include/linux/pci-epc.h @@ -61,6 +61,44 @@ struct pci_epc_map { void __iomem *virt_addr; }; =20 +/** + * enum pci_epc_remote_resource_type - remote resource type identifiers + * @PCI_EPC_RR_DMA_CTRL_MMIO: Integrated DMA controller register window (M= MIO) + * @PCI_EPC_RR_DMA_CHAN_DESC: Per-channel DMA descriptor + * + * EPC backends may expose auxiliary blocks (e.g. DMA engines) by mapping = their + * register windows and descriptor memories into BAR space. This enum + * identifies the type of each exposable resource. + */ +enum pci_epc_remote_resource_type { + PCI_EPC_RR_DMA_CTRL_MMIO, + PCI_EPC_RR_DMA_CHAN_DESC, +}; + +/** + * struct pci_epc_remote_resource - a physical resource that can be exposed + * @type: resource type, see enum pci_epc_remote_resource_type + * @phys_addr: physical base address of the resource + * @size: size of the resource in bytes + * @u: type-specific metadata + * + * For @PCI_EPC_RR_DMA_CHAN_DESC, @u.dma_chan_desc provides per-channel + * information. + */ +struct pci_epc_remote_resource { + enum pci_epc_remote_resource_type type; + phys_addr_t phys_addr; + resource_size_t size; + + union { + /* PCI_EPC_RR_DMA_CHAN_DESC */ + struct { + u16 hw_chan_id; + bool ep2rc; + } dma_chan_desc; + } u; +}; + /** * struct pci_epc_ops - set of function pointers for performing EPC operat= ions * @write_header: ops to populate configuration space header @@ -84,6 +122,8 @@ struct pci_epc_map { * @start: ops to start the PCI link * @stop: ops to stop the PCI link * @get_features: ops to get the features supported by the EPC + * @get_remote_resources: ops to retrieve controller-owned resources that = can be + * exposed to the remote host (optional) * @owner: the module owner containing the ops */ struct pci_epc_ops { @@ -115,6 +155,9 @@ struct pci_epc_ops { void (*stop)(struct pci_epc *epc); const struct pci_epc_features* (*get_features)(struct pci_epc *epc, u8 func_no, u8 vfunc_no); + int (*get_remote_resources)(struct pci_epc *epc, u8 func_no, u8 vfunc_no, + struct pci_epc_remote_resource *resources, + int num_resources); struct module *owner; }; =20 @@ -309,6 +352,9 @@ int pci_epc_start(struct pci_epc *epc); void pci_epc_stop(struct pci_epc *epc); const struct pci_epc_features *pci_epc_get_features(struct pci_epc *epc, u8 func_no, u8 vfunc_no); +int pci_epc_get_remote_resources(struct pci_epc *epc, u8 func_no, u8 vfunc= _no, + struct pci_epc_remote_resource *resources, + int num_resources); enum pci_barno pci_epc_get_first_free_bar(const struct pci_epc_features *epc_features); enum pci_barno pci_epc_get_next_free_bar(const struct pci_epc_features --=20 2.51.0 From nobody Sun Feb 8 14:31:39 2026 Received: from TY3P286CU002.outbound.protection.outlook.com (mail-japaneastazon11020123.outbound.protection.outlook.com [52.101.229.123]) (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 0714741B376; Wed, 4 Feb 2026 14:54:54 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.229.123 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770216894; cv=fail; b=l4Mlw47gMYLIBQyLk+HJLU9LnB3qdSqRVuMQZlFKK1lbdblSG4+Zoat0JCOxzOouv65Yy4O0aIgnkpVNKY9Uw4MCg2knP06B7oqWAZpbOG2GCEb0niqV8Z69SRpPeI7RMO28lvYDjUFxDKik6ZFcHuDwPuZgZBeE3iQVZLD2LqE= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770216894; c=relaxed/simple; bh=24TBQvpQuE6CDnjSTvZTMz4pGKST31AB74q2diFv33A=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=UdV/nlhUcmwXdzgDmCpSuXvqLCC6sO76xSLjYIv5Mc1uNN1ZpA68CPpeCzqtT6NtKpkIw747PYF7WCtj02fvSIqRXJUs0WAcqbZzBPMjqDmqymukNb7CLuNEQLI14xLUaCQZ99CiLoPesOq9DhPhJ9rbd4v7keH0p3GPGMOz9zk= 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=rLXtzWX3; arc=fail smtp.client-ip=52.101.229.123 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="rLXtzWX3" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=kekdin/5REI4L96eNT5BnP4KSsjuH8AoXiLnExyYv6wKXxgV8LPrmOSy6MeGH84OdzAYpLLMLqWF2qKvD2xdlt/0giPaWsVpXe94prWH+RhzVlyqJuaF9/cUoogm2FT9vWFqDFQ/bZSpJlIRKzfJc0nar8x9X95633GiQFMFAn1qof258dtFRSfEngDySk219AYqt2i2inOH5iMbdz7pun3EjuZ/hyK775w16Xc9hJn7J/ODf67GtgJP3y1wqCtAPHEcFPme5e0XWFUDFf5tfko+Jvg2J8BQSg2KKudlDm9Ecdq+u1cAxgnEP4fXq1ceAqd3fGh22OF0sKYTbx18NQ== 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=Sjc2bIUjZx4Lq+ZCVMTvs4e3zQrlPVtxbX6LK1KMu7w=; b=oEPpH4Jw4YUxZzxKKKvDsB8CMSoHouLQMYXU183IN6B3VS9d64iddUWUn1wAOjlBSRoYqoE098v4sk0u/312lEohXUJZjaSrMALNzRkoRtGUHIswe7YBwzDUuNSu1iP/+9dLpF+jpaKBJLcBThZzWr6+z9917wwYxvvain91vrKAX/57VSJxOo90ioZL01aOaWesAeRZXkgDoYpw37porU20TogQt5ZMbr/EQuLl8DJlAcP4V78UMBcEIHhP1lzt6RsgEVAZ1qZL5i/49WLA1XAG40XcdN8j99TV0OrQLMY+fd2rt7hGfdqDBDhc0d0CQxJv8CBcY/AGVH9s3zmC1w== 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=Sjc2bIUjZx4Lq+ZCVMTvs4e3zQrlPVtxbX6LK1KMu7w=; b=rLXtzWX3xu/VXwmf3bcVbpXitbFeP5G5OoT6DvxmP4vfSprH5kkqqbcpgOizkHjxqHNQbl/v3leRIA0N+7/GpY77rCewNYZI7I+7ENC50R8PZn5r0sZo7wT4F7uswWYl4taxiRR6NiBVGxqUP9Gcc+jOpPykF36nfQsNPxSb5nA= 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 TYCP286MB2976.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:302::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9587.12; Wed, 4 Feb 2026 14:54:52 +0000 Received: from TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM ([fe80::2305:327c:28ec:9b32]) by TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM ([fe80::2305:327c:28ec:9b32%5]) with mapi id 15.20.9587.010; Wed, 4 Feb 2026 14:54:52 +0000 From: Koichiro Den To: vkoul@kernel.org, mani@kernel.org, Frank.Li@nxp.com, jingoohan1@gmail.com, lpieralisi@kernel.org, kwilczynski@kernel.org, robh@kernel.org, bhelgaas@google.com Cc: dmaengine@vger.kernel.org, linux-pci@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v3 07/11] PCI: dwc: Record integrated eDMA register window Date: Wed, 4 Feb 2026 23:54:35 +0900 Message-ID: <20260204145440.950609-8-den@valinux.co.jp> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260204145440.950609-1-den@valinux.co.jp> References: <20260204145440.950609-1-den@valinux.co.jp> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: TYCP286CA0024.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:263::14) To TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:38f::10) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: TY7P286MB7722:EE_|TYCP286MB2976:EE_ X-MS-Office365-Filtering-Correlation-Id: 99faf829-342d-4fdc-2ec3-08de63fd5a67 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|10070799003|7416014|376014|366016; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?dTzpn7L4vP3GqGU2fceAvX8ZNcrhj5mw+J2OctGZn/jLhY/8rcW38d2sze2h?= =?us-ascii?Q?oYzLolitpffUALzXtcvwOjbzru1zm91vd8dQBjgkCxTKaJH+o66FRzu3ekqz?= =?us-ascii?Q?R6TvwfR74RsdtDcBtCOBDrvFVArh04rAm3yg3IHKxN5uYe9InoVzs80FJRiy?= =?us-ascii?Q?KMy/vytWCr2jaNy6at3gGDQJb6HmYEZkISxfHs49Hgbj2WWMpQ50uiq4T8ON?= =?us-ascii?Q?6Kf8fxdD1Hg4NU+3KXjE48X6tPWW2zdWyjXko8vWtbwO1fnaKZ64UuA3agbG?= =?us-ascii?Q?GoCwXX+6X6Xn2eaQQyG9XOryDBlWJ8n6v4p4dCehMuTds7BeeOMplEP+gmQc?= =?us-ascii?Q?SeUwrTzxtbvk88ruJfaEDlj3BE1IZl2Akz81o13MPaue/D9rdNhE5J9QYLEO?= =?us-ascii?Q?pMchDZEyBdkN1WSkQ4bpbD3RnT26q9YiUGFCxJMvX/lEliIBfEiIyYdkWc8d?= =?us-ascii?Q?lr9E1OpSc6locLDSRCw6YW/2MXZ2dJW8K+gDg6C3VQMzEmyRMpbYmnSSI6XU?= =?us-ascii?Q?m0EWIC68hI18t3g38hpeB7ZP0FUc4TpsJpSzZkx+8TB/qamTTaLUvmMX9r7F?= =?us-ascii?Q?rUpsJEw7Q/UWn8awxHR7QhH7x5hkBhrjz0V3PzviPcYyH3Iq+XWky5dfui2D?= =?us-ascii?Q?zbM9cAA3sVcBZYGJAAP9sHOq5xpOHzrl63VEnfGv6whb6LFoWbY8we+68N4R?= =?us-ascii?Q?HwA7acH0xLYTgL7qAaynVb5q71ZsjvC+ziaffpW62Q4pt4pXkpZsu6euNop7?= =?us-ascii?Q?XBnVmGg1PE8s5BZ51NVr5JkJoVtPGLuO6HD7P4EUYY7YLod8qSZZyYEfy6mi?= =?us-ascii?Q?t0pNtJwNu8NXSoSJCV/GK+/q+hkSqx8oCylevIqH+xxmVOorukJ3MDHVxxmI?= =?us-ascii?Q?2YnK76ejd9OrC8eTyJGMlFLhvfFIIhDANiysGFF2wJcWEhjcHH3A2DLFYA+E?= =?us-ascii?Q?QXi9J0aDAqhu+FuE4qA9Zj3WB2sfoHS2AUwXGWaSP7gkiFACbmsMlJuqjU54?= =?us-ascii?Q?a8+/Dnk6yL6nMfJcVQ5L9Q+LRyMvkHwcJz+amvVCqcc1NBa1l3NO/L+vj8iC?= =?us-ascii?Q?GVD4Jhjir2zAdiRh2Dbl08WlRo7vkMGYnqdDmAe4WLvL+AoLUWGUJzfNBosX?= =?us-ascii?Q?ZhtGWCSe/fRZUREU+SStS7MD58/QHGp8V4vBbwKKESTHT2NpffEYd5dgA4Ix?= =?us-ascii?Q?MWZKNykgjMQ5fpBKzrBaNBlncUFKjSdVHlNTODyEpFpG0BvinccgGxl/uqmL?= =?us-ascii?Q?brlmTvDtsk7FL44IADmQTrE2T2rpG1Qb9F9k1x4oPoRZc9SadtNbsRdIS0Yx?= =?us-ascii?Q?kVu/UFqP/u7GTZDRyaKUTplBGpakOmzbRpeabfheFOhiMR1Ou3F+axKPVl/a?= =?us-ascii?Q?5bipuNhPiRY7SG4ir9aq8saFRXdw0LexMnxIdNYXTKqqvHhEJRK3VPj6QV7c?= =?us-ascii?Q?alMKgxj2Wqqem8KrvciBrfW0/aH6v044UhczlkQzUHM/3K/jZplHtA1NofYU?= =?us-ascii?Q?AXTcFK2KfAihmZ1OKrtcrNGZjE0NlQ7TDcw+9ntg42+HDh/WUOsUYCMji266?= =?us-ascii?Q?vkii2UGmm1S3dw8hZB0=3D?= 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)(10070799003)(7416014)(376014)(366016);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?5Imr2b9aS09g5Ax5ljkxK6iW5meaXgq16zqjW/QA801hKw0XBd39YnE1Jk53?= =?us-ascii?Q?BRyJZqGNrQUfnhDL6JglehD9oN9B9vBsIjPO/lPwa2XGZKjR7W4RQJ25so9Z?= =?us-ascii?Q?gio8nh/BH+VzjOC1imsgv+OVyU1QtaYGBQSsHcdxnMPOU7X3sJkHQG8hyloL?= =?us-ascii?Q?otKSD7IHHXiLK2jYEkgF/ANq7OG6dAFlLvnXl2GynjytIRvFMoF8rvg9mi6H?= =?us-ascii?Q?eM0UkZl7M5WCgEBXoevjEA+yKB8AQdhiRw2fUu/e/jG+3uYScd+CUbJJUeFm?= =?us-ascii?Q?kCdm7pg78gLAtW20UZ4cSlijtlXpmjnMRb7zMT2c7CWANIzldwaAAmHpCN2k?= =?us-ascii?Q?G6pPg+iByIk13DOBs4v3Q04YU8MulYAVYp/wy2AqB0vneoqeiSOlERiUHK0R?= =?us-ascii?Q?jb3ci3mg9OL/B1DOmD495QDkzkr439q8El9K3fgOrz7/z9D7jTQtM2dqrx8e?= =?us-ascii?Q?7ZmR3eD878Dt6/KeK0Sb4i1oPok/CO3A4il8rHMkaxqX97CyAD3OqnTxtZ33?= =?us-ascii?Q?cO8edRor61nL6G/5AwS5uLECreFnnOkxjhRFYnFfMUzsZQ6L2z+oql1qAOzP?= =?us-ascii?Q?3mcgVWXLWHi7B0FHQyWDXDclsWqkCKnnVMgl432KIw8Sos87ZVk/pkLGRw6V?= =?us-ascii?Q?zm1xWQefHug2MACv6tEYkPRLLwrgCP0mjXNnnTBFVIUDCqp5C/CRhlEzbCoJ?= =?us-ascii?Q?muU7uJWFW8TcyT61yVw9RLNu24+ar1gM3KuTKAlK5LUcBKOSm4DqUVmcIePR?= =?us-ascii?Q?zv8SHF1F8O1ctvGBrouNZs7vOcNpYeD7GtngC0RShgXJ4zBB7fRT9m7o4Nvc?= =?us-ascii?Q?H2URZ1UncjIgo8yUgFdqsHA4MK1JEKvq43EysXS9RmtYfN4DezV8j5hwgC1b?= =?us-ascii?Q?hm+8udLJaVGJD1M5DWmPjJEd904leG1WTIM7HYVVVD3geTZy9IrQnG6hbcm8?= =?us-ascii?Q?nx1LGNLL0p2BkoTpWwqDzbPcTJx60Jr2eOgTtlSlA04zs/zVCvr5GTJ4R9Sh?= =?us-ascii?Q?r73UlXQsgnuB3GrlTT7ds6S/AB/DFcLhblI6e5RM9IHbcbgTdaOZiQVovxXN?= =?us-ascii?Q?6Po3YaJxjpg4EuU52j4IdszqB/wgjlzagZVssuQFMyKPPVFWU7zc3WRnwGnV?= =?us-ascii?Q?dT1NEBTHt9OS5ayVTSn2HgfAvfKSkznCvHNiza6RL/zL8F2m3Vq+yZ1QCIsr?= =?us-ascii?Q?OBVO86RpoR+doQiA+OQE33RVE/2aB7ghYt50ktKTZz1o2agD/bx9jW1i4Kig?= =?us-ascii?Q?NSSu66GFbWA4FJA3ePdz5gl1u1CtQZYEXUXO3fd4KZF2Glam6yxbt7OXbzzV?= =?us-ascii?Q?TReMfvNSSLTXgYQblC2MD6ogByvov5ojneUxlrWFGIqGok0UckNo5/gwJV7/?= =?us-ascii?Q?BUZF3ZFpheRg7u5IrPu7GFvrSJBn9CvnaPMV595nNo+0SRIWbVxNli1ezC7A?= =?us-ascii?Q?goQi9j7R4HH2xtM1RCTxeLLbPc6/RxLkaumtv8ffbq2dmGlm21FP9pH57u76?= =?us-ascii?Q?KSQdIyjJxfG/1vkvZMPKdaAX+RPNnGuP29n88S7IL+tMD2DF2kUF43LTstX6?= =?us-ascii?Q?8ifJrgSpIguQ5JkwLqbqMgQN8+P04/C+rh77AyfkrxoiBGFJg27x+tymB3Q4?= =?us-ascii?Q?/YRmKOf3+5fk4T5mp5cDrj51PQgp3vqrQ/Fenul54cWLJTHT3orL6AVr91IF?= =?us-ascii?Q?8fQvZ5zbSt8jz5eAZOVqlOeo1He/3v3M61iQnGegnazBqeZr6hz5GheEL72q?= =?us-ascii?Q?1DhDbEffDjA4Pz0xnfnyOOkEIdpbwplwx78788UuhzNw03YO/fvM?= X-OriginatorOrg: valinux.co.jp X-MS-Exchange-CrossTenant-Network-Message-Id: 99faf829-342d-4fdc-2ec3-08de63fd5a67 X-MS-Exchange-CrossTenant-AuthSource: TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Feb 2026 14:54:52.8146 (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: w/Mr7WIcdtBfQtMqtPIwsr+WBX1UJO1fNVXLShebky600XTEMUjhKZr51K3c3gLFSZg3wXPiCjHNVhJUU8B55A== X-MS-Exchange-Transport-CrossTenantHeadersStamped: TYCP286MB2976 Content-Type: text/plain; charset="utf-8" Some DesignWare PCIe controllers integrate an eDMA block whose registers are located in a dedicated register window. Endpoint function drivers may need the physical base and size of this window to map/expose it to a peer. Record the physical base and size of the integrated eDMA register window in struct dw_pcie. Signed-off-by: Koichiro Den Reviewed-by: Frank Li --- drivers/pci/controller/dwc/pcie-designware.c | 4 ++++ drivers/pci/controller/dwc/pcie-designware.h | 2 ++ 2 files changed, 6 insertions(+) diff --git a/drivers/pci/controller/dwc/pcie-designware.c b/drivers/pci/con= troller/dwc/pcie-designware.c index 18331d9e85be..d97ad9d2aa9b 100644 --- a/drivers/pci/controller/dwc/pcie-designware.c +++ b/drivers/pci/controller/dwc/pcie-designware.c @@ -162,8 +162,12 @@ int dw_pcie_get_resources(struct dw_pcie *pci) pci->edma.reg_base =3D devm_ioremap_resource(pci->dev, res); if (IS_ERR(pci->edma.reg_base)) return PTR_ERR(pci->edma.reg_base); + pci->edma_reg_phys =3D res->start; + pci->edma_reg_size =3D resource_size(res); } else if (pci->atu_size >=3D 2 * DEFAULT_DBI_DMA_OFFSET) { pci->edma.reg_base =3D pci->atu_base + DEFAULT_DBI_DMA_OFFSET; + pci->edma_reg_phys =3D pci->atu_phys_addr + DEFAULT_DBI_DMA_OFFSET; + pci->edma_reg_size =3D pci->atu_size - DEFAULT_DBI_DMA_OFFSET; } } =20 diff --git a/drivers/pci/controller/dwc/pcie-designware.h b/drivers/pci/con= troller/dwc/pcie-designware.h index 43d7606bc987..88e4a9e514e8 100644 --- a/drivers/pci/controller/dwc/pcie-designware.h +++ b/drivers/pci/controller/dwc/pcie-designware.h @@ -542,6 +542,8 @@ struct dw_pcie { int max_link_speed; u8 n_fts[2]; struct dw_edma_chip edma; + phys_addr_t edma_reg_phys; + resource_size_t edma_reg_size; bool l1ss_support; /* L1 PM Substates support */ struct clk_bulk_data app_clks[DW_PCIE_NUM_APP_CLKS]; struct clk_bulk_data core_clks[DW_PCIE_NUM_CORE_CLKS]; --=20 2.51.0 From nobody Sun Feb 8 14:31:39 2026 Received: from TY3P286CU002.outbound.protection.outlook.com (mail-japaneastazon11020123.outbound.protection.outlook.com [52.101.229.123]) (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 5DCDA4218A0; Wed, 4 Feb 2026 14:54:54 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.229.123 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770216894; cv=fail; b=bVC9IgDAOJWtJbTSBH5WNy3JQWYkSdjIetnliTva8hah+PnaAI0n5O5rwy6HaHup6NygsvWVvfuvtmfYvqr9CodUZi7tnbvVNK9PY/R8kQbdNmFB5cDNHXCU6GAVce20TLYCokVteZjFaTAL3zx+8rLMPgVKqVnqMtNgDhX8v6w= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770216894; c=relaxed/simple; bh=hOb8BJF52xzC1qdBJ4+aCRZSGjiYxYSwt19mniN9Ihw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=u7ct7G7QmEl/J69Oq5NRs5o0fM5y76flwskqLB9Nja88pXcCpypeE7vND78YicSCISu3OIpxuJYFAbxTM+2uznKahTTIt12MnJjG8TUQn/DZ1d9u2Y69IYtp0uXZmv3UNETnIGr9QfqTCINPt7MJcs2j+eoL4Durd9cAQ5KGqp8= 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=X00y5OtB; arc=fail smtp.client-ip=52.101.229.123 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="X00y5OtB" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=o43UG0gIsr5azsn/lFpW2RnqXhIeWtmXoI3HOO6XwnpNG5ieu8kVcAwWPaatg+OhF7cXLXxLZcgQyHSdigQOVAXy2KGWTO3AWQLEeFjWm34JbMxAOPjxSDhh2YPFkYBJTlc41n1KmqRp82TBwA4wsJYeHAQAyyaKEYUIZNjdABt1F1VVAGc2BWmVqHC9VjEH5+pLUGsTKErfsQrPYZVeWMQoYrLbv/wUZLg4hm7zD/4/Cu1jfxsEBIuHXL+3+sDpVVyzgVvH5hkbdJDk6GcOHLWzDqt5oyp/eozcsrYBT+QTP5c5HUHdTIv4ghkLJnKtGe2VtzWlXyhKk/7wLr6Eiw== 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=eKdfx5WovNaRG96pDAjpKh03Wudln7z6ky0A68WDJD4=; b=dvMYRJri3NZFOl37i2QgowADG7c0BOsTnFb+mUFcbhJwt+WvB6O5KpJYEVyHTEK8E2/KLpJ8+DPqK4e8O++B07ymHWv2i77zv5Qu9juegAT4/2Hzvj06KsGqAEnZ8+m50O+DRBL/s4OC3WGlfbZSUj3OQPWHlGaWfFGj9ZcUOg3PnXlFPikrDa90sAR1VcE25g88LEafZfqVfAm2R3s6zhw1wXy4Gtc2nTu9gzXhrd8ElQkenyU5hzqC9srfxyPWUeO53IyTyaH6kn1QuQMj8QUcq/8PBlDFaDxOnWgDSTSZDazmunSZ3/3k0OU6KP5Ew5yl5ltM632Ej/Mhs6fMUg== 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=eKdfx5WovNaRG96pDAjpKh03Wudln7z6ky0A68WDJD4=; b=X00y5OtB8ystuttCWBx0M5F0VMz+hXxwvunZf46uBsbqEnsZvXl1MGLFYlBUgMcFjaHmW77PloWTS/ldX0ovtB2G+9JWU/3tPnByantj2lFQ2YEcFRkAGmrCfpfYQ7CWR45lxt65DSA/YV3mnEYKKd0XEo8qaED0rNebf3SpR10= 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 TYCP286MB2976.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:302::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9587.12; Wed, 4 Feb 2026 14:54:53 +0000 Received: from TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM ([fe80::2305:327c:28ec:9b32]) by TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM ([fe80::2305:327c:28ec:9b32%5]) with mapi id 15.20.9587.010; Wed, 4 Feb 2026 14:54:53 +0000 From: Koichiro Den To: vkoul@kernel.org, mani@kernel.org, Frank.Li@nxp.com, jingoohan1@gmail.com, lpieralisi@kernel.org, kwilczynski@kernel.org, robh@kernel.org, bhelgaas@google.com Cc: dmaengine@vger.kernel.org, linux-pci@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v3 08/11] PCI: dwc: ep: Report integrated DWC eDMA remote resources Date: Wed, 4 Feb 2026 23:54:36 +0900 Message-ID: <20260204145440.950609-9-den@valinux.co.jp> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260204145440.950609-1-den@valinux.co.jp> References: <20260204145440.950609-1-den@valinux.co.jp> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: TYCP286CA0025.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:263::16) To TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:38f::10) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: TY7P286MB7722:EE_|TYCP286MB2976:EE_ X-MS-Office365-Filtering-Correlation-Id: bf807f9e-ba65-4ec6-96a1-08de63fd5ad0 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|10070799003|7416014|376014|366016; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?CGAHa5HkiXCci7FwOT78Y9RYUHvPycnWUVmzUJbxFXpQ+uHFWU0GJmyPziYG?= =?us-ascii?Q?+H9QFVWiHT2ZlZhIKujyNsLkAjxPd9MQynlTdCMRBF+rlYbbU/ZZyHJ0TMg3?= =?us-ascii?Q?rhVRgE99ETzRQjuwZoYta2fxwMdn2E4eJkhOMSBAq6p593hadAHFtx7FioGy?= =?us-ascii?Q?lWBCysbp0p15mPiKxG8yicZqw03Vs/yTGnhjwbd3rQC6nXnmfKGA6F8MTYjs?= =?us-ascii?Q?TR+OF5FanyXjFYaK+ZhX+CwmLOw3kgYUqar2PzJP6znKTItr7ZGN9ZWThrBU?= =?us-ascii?Q?HghDdbOpQ51FpfAH7jMqm26nJug/IU5ACOctHB0ZWMONpjkVmfKeBcJ2M54O?= =?us-ascii?Q?pcqaXGxHpzNx2EihhISl0YG4HBL9j6F0jH/OEq7OGdS9ixF28DdjezLlRAJa?= =?us-ascii?Q?mP5LNVvQfHzCaudiOUe/QOaXgHvlKEFCR5HVoN46vko8J2Fcn5CegTIWoQcN?= =?us-ascii?Q?YUT3jQ0NKd/7en8uilmCpuiWVNzkrYllMjPUgF76iR9ONHcXleKy9NK9a7Z8?= =?us-ascii?Q?AUrXCpU2eTWgVnLfMrdgqWBSr0askSgX/D1XJhw6yEuY8TjAH5YzP90Mz5MI?= =?us-ascii?Q?/eN84JIkxJkCu7ti4btK7uvNUNjZuyNUjhSx9QLcP9u5LB9iEDWF0mfIp7LE?= =?us-ascii?Q?uzcB7eQ/UGMdZ9E74J0pC/en311+r7amKifXSLHESRXZpH1+V+n7nwoBJaSM?= =?us-ascii?Q?xNbTZqGwHoP2QtJtCUR1E/rE7VWfpJfSCjmbCHjqbv9vcOhC+9OyHyhGiTDd?= =?us-ascii?Q?Mv3EMCeW0wLC+bTh4odu1UA3za3qh5YD41ggnPFM8Gfq3+Mz9kGR0ft+xu0s?= =?us-ascii?Q?v/8jVlRchOE87dvWqZE5P0kqXyHb9lqxTq7PQviM32B+OHUDujkvPM35VqR7?= =?us-ascii?Q?3cErpTb/ZTW9ACY5hZbiuIFNDn3bdGy5t5ZCXe0+IuVk8CcFckLbroOqkTzS?= =?us-ascii?Q?o4xh4YInMZ/iRGihcD14MVcSNiz5am90q1pGZFfLkB7+U3sZ/RZIqPKbaI5G?= =?us-ascii?Q?spAcq1C5biOGW9X9HbR71uIYlZPzv3ed09623yeFaUQ1rIiUoPdM+rXZfOxr?= =?us-ascii?Q?H4b0cuSN8DegyR5npOz/sS5zguZqVSY6Fa+rb/IurVRxtWxLxkDMVpb+0Dvf?= =?us-ascii?Q?NeoFXm/PINA+O5URKQV71C72zncUZhqfI3a0WpKFl1X5zDtM1OKaqp2CkkJW?= =?us-ascii?Q?kKGPanePb0griygMc0KMlwuS1RN3NuFGdZL/G6WVKPssovl9sh9qC3RWoatN?= =?us-ascii?Q?HhV3TLVXDoTec6hhVOtSqmDe7cwyVj5v++Nc2iiNXcn6l19Nm1aYeikEvHwX?= =?us-ascii?Q?f42NymJaLgeBRE6r6LAcyYGlcyjfT8Y75S528WmCSi9IZO4VafG17jdVL59l?= =?us-ascii?Q?ciZ3Oc19RyvsoLTLoqT7GohmtESvkOyiok0wXP4Bt25UUeIl4pbVFzEN3v3C?= =?us-ascii?Q?d5nbWOdaSOhp/etJhLZ/ZW/oLGlHxr48zYiJZxRjI8zhNAdR472ZlaSL33O0?= =?us-ascii?Q?JK7+C3l2F4iZL+xur5tQcX0z3ws9GxDg+r4nMbvDZUluI5MN35/cBJXFPJnr?= =?us-ascii?Q?Emcx+lW8B/Y+2VdIz1s=3D?= 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)(10070799003)(7416014)(376014)(366016);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?4gaqxCxnzvx+uKS+qlIFhboElvvtcNRMXJkL7b/yc1LLWgOfIDaZSpHDRyRv?= =?us-ascii?Q?hyxlto1L7YGmVHrPwBsHt7Tqu5bf32Bq2WBe40pcgKA7o35ceZRdj4sqoO6N?= =?us-ascii?Q?ESd75TmRx8wuvu0bJDjGVdsdlWeINSA2PTng7V6R+pNW88AyUHC1GtFMGxL5?= =?us-ascii?Q?/Pr1RYCoL68nGaKgGwrO9EoW3q1z/TCEWDx3esjjjhFnbvkF72EJWlRKP3fm?= =?us-ascii?Q?php4AX+nmCJ9AoORMvrH8iUPiTpcPoE1c79Z1Z+5wS08X2TMlaWuzdz4n8Rj?= =?us-ascii?Q?9O9fAjc4TGmfSyDSV8NH3u6Ij+EDFZbVp1O00cUqz9Q1JKTxI5ePCziT4MTQ?= =?us-ascii?Q?7WkRbm0rouOPE69TfXSFY8p7KLHjB3Ym8OPqNSJyFuejm7CB/1/1ntSyt7/q?= =?us-ascii?Q?lBssKMPvs20tXSQTyBdohDs74GHd5wXSXJ2XIsmNQVLANlHMiZNHbUv9Tu34?= =?us-ascii?Q?DDYkPj88hBhLAwsGTXxD/6vJIqVq+IUiD/Z6aHjLZyhM4Hu+zsrm84oSzJwM?= =?us-ascii?Q?Y+JnT/40NHnlNHvjeh6ctdjwQ/5sMV4zGy/KI8DjTV/XjenZYE123Iw7ho/s?= =?us-ascii?Q?15efnAgOQzKBAMziOzseT2t0L3uB2I5GQ+XP9XHNZ8CU+4XkAgTEUzPWDDUT?= =?us-ascii?Q?KamS2KGLGLWHz70PehIhasjxLCMcTbIRK9aAzKicOJEJM6a3cKHV48qrlipU?= =?us-ascii?Q?TSo7kjB/PlZqVsRSZhKNIpdhuKAuBaE2kBbi7I5rNiqMh1zVAE3MWH5ENzeW?= =?us-ascii?Q?rA43Fzsn63Knjo3TsErfmCoKsw7muBT7mgN2pwvisZ+ezgwnjH9ZlqpQEF28?= =?us-ascii?Q?/XIlRXE8tCxMkB/44alBzUY70G0r3U7Mac79GLsLR5ljjWGX2FKlPashydXM?= =?us-ascii?Q?XF2d6JpQaCWeo0s2UYZAXqHCXVfqRCo9hJBg8AxDc4/LwD9Iz9KlqiGP6lBE?= =?us-ascii?Q?2sXAoqyngEC+p6FW17MixS6S5wl92hD2swzCaTtKWN49kzP5EWypplT+vbp5?= =?us-ascii?Q?oGtj1DO5wzyPu4sUL3NM/xqc2r1wb1Sp5E1ERJjeF5yv/8Tt0iIwWFwuYcgn?= =?us-ascii?Q?yog6xlPo21jhuGReObnayX1UK1TK0o0dqfhgu6d7DbEEBl77pRkou8S8iGgo?= =?us-ascii?Q?vGreuE5Wf5qRtOQTfocxwwjykYxD176UJE1Ds252XIGJaStYlBvDlU5CtfcC?= =?us-ascii?Q?dbQoJA9tjBF8vhfpVHd7zdA1dDmZ4lR1arDz5UwI8L+1/pXTIC9IAhPz+KXn?= =?us-ascii?Q?nagDw7S0ZX4vF6ki+aLLRTGXyNKNfudfRRphZvxEqQvhnCmhbX6uVpe8qPHL?= =?us-ascii?Q?zRVii9hi0zXUwMwynsgvbA5AnXOyueWoZRD9LMRTdvSf7bOLsnYhfksTYddO?= =?us-ascii?Q?nMZcy4G4A1srL+oVAH+cqbBRzpZycZuUi2khnG2LM+hpCkJuMxiisilgVs3R?= =?us-ascii?Q?T1/dVCmimxEX0zPUBB0h6uBqhAF1tE7Iup5x/mEjb9Xq5IB+wxe7kQnY2iI7?= =?us-ascii?Q?aJLlnlF9yKkKkQM9qS47n39KXNFc7iejF59nkovh11Kz9aPe8AIzJsGkvc7N?= =?us-ascii?Q?AZTLgur3BBNlxdjUSvIwylmkLIGe9AVl1k6D76NWFC/7z4M/P3mq9yAvLhI9?= =?us-ascii?Q?9i9TMaRPJ8bpOhKb2GBdg1M8khgS5w9gz+5HSvt96zZ7LNN1qsG88X2InJLE?= =?us-ascii?Q?IsTHzIPxd/ZLYoFFOHaj1PTkMcH24QyAamukak6fPAQLz/9SCscXlfKm89+g?= =?us-ascii?Q?hgKo1wi7hPIPcFEpiTAgJsyK1mnA58LMy26G++4/0kI60IfRhfy/?= X-OriginatorOrg: valinux.co.jp X-MS-Exchange-CrossTenant-Network-Message-Id: bf807f9e-ba65-4ec6-96a1-08de63fd5ad0 X-MS-Exchange-CrossTenant-AuthSource: TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Feb 2026 14:54:53.5099 (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: oILX4gtWMChoabSeaIfFE5vm4+3iXSFUIaerFh+N2ZWbBJV49EzF1XBLe3C3yPstO1wA3zm+aKdE6/8ru9EGHw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: TYCP286MB2976 Content-Type: text/plain; charset="utf-8" Implement pci_epc_ops.get_remote_resources() for the DesignWare PCIe endpoint controller. Report: - the integrated eDMA control MMIO window - the per-channel linked-list regions for read/write engines This allows endpoint function drivers to discover and map or inform these resources to a remote peer using the generic EPC API. Signed-off-by: Koichiro Den --- .../pci/controller/dwc/pcie-designware-ep.c | 74 +++++++++++++++++++ 1 file changed, 74 insertions(+) diff --git a/drivers/pci/controller/dwc/pcie-designware-ep.c b/drivers/pci/= controller/dwc/pcie-designware-ep.c index 7e7844ff0f7e..5c0dcbf18d07 100644 --- a/drivers/pci/controller/dwc/pcie-designware-ep.c +++ b/drivers/pci/controller/dwc/pcie-designware-ep.c @@ -808,6 +808,79 @@ dw_pcie_ep_get_features(struct pci_epc *epc, u8 func_n= o, u8 vfunc_no) return ep->ops->get_features(ep); } =20 +static int +dw_pcie_ep_get_remote_resources(struct pci_epc *epc, u8 func_no, u8 vfunc_= no, + struct pci_epc_remote_resource *resources, + int num_resources) +{ + struct dw_pcie_ep *ep =3D epc_get_drvdata(epc); + struct dw_pcie *pci =3D to_dw_pcie_from_ep(ep); + struct dw_edma_chip *edma =3D &pci->edma; + int ll_cnt =3D 0, needed, idx =3D 0; + resource_size_t dma_size; + phys_addr_t dma_phys; + unsigned int i; + + if (!pci->edma_reg_size) + return 0; + + dma_phys =3D pci->edma_reg_phys; + dma_size =3D pci->edma_reg_size; + + for (i =3D 0; i < edma->ll_wr_cnt; i++) + if (edma->ll_region_wr[i].sz) + ll_cnt++; + + for (i =3D 0; i < edma->ll_rd_cnt; i++) + if (edma->ll_region_rd[i].sz) + ll_cnt++; + + needed =3D 1 + ll_cnt; + + /* Count query mode */ + if (!resources || !num_resources) + return needed; + + if (num_resources < needed) + return -ENOSPC; + + resources[idx++] =3D (struct pci_epc_remote_resource) { + .type =3D PCI_EPC_RR_DMA_CTRL_MMIO, + .phys_addr =3D dma_phys, + .size =3D dma_size, + }; + + /* One LL region per write channel */ + for (i =3D 0; i < edma->ll_wr_cnt; i++) { + if (!edma->ll_region_wr[i].sz) + continue; + + resources[idx++] =3D (struct pci_epc_remote_resource) { + .type =3D PCI_EPC_RR_DMA_CHAN_DESC, + .phys_addr =3D edma->ll_region_wr[i].paddr, + .size =3D edma->ll_region_wr[i].sz, + .u.dma_chan_desc.hw_chan_id =3D i, + .u.dma_chan_desc.ep2rc =3D true, + }; + } + + /* One LL region per read channel */ + for (i =3D 0; i < edma->ll_rd_cnt; i++) { + if (!edma->ll_region_rd[i].sz) + continue; + + resources[idx++] =3D (struct pci_epc_remote_resource) { + .type =3D PCI_EPC_RR_DMA_CHAN_DESC, + .phys_addr =3D edma->ll_region_rd[i].paddr, + .size =3D edma->ll_region_rd[i].sz, + .u.dma_chan_desc.hw_chan_id =3D i, + .u.dma_chan_desc.ep2rc =3D false, + }; + } + + return idx; +} + static const struct pci_epc_ops epc_ops =3D { .write_header =3D dw_pcie_ep_write_header, .set_bar =3D dw_pcie_ep_set_bar, @@ -823,6 +896,7 @@ static const struct pci_epc_ops epc_ops =3D { .start =3D dw_pcie_ep_start, .stop =3D dw_pcie_ep_stop, .get_features =3D dw_pcie_ep_get_features, + .get_remote_resources =3D dw_pcie_ep_get_remote_resources, }; =20 /** --=20 2.51.0 From nobody Sun Feb 8 14:31:39 2026 Received: from TY3P286CU002.outbound.protection.outlook.com (mail-japaneastazon11020111.outbound.protection.outlook.com [52.101.229.111]) (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 E6B034219FD; Wed, 4 Feb 2026 14:54:55 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.229.111 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770216896; cv=fail; b=EXdWey/G5C+XkJG3piwYeJllMN9J3utxSh20DpPMQpZZ1V3nWqNPAqpWQ+at2mAR2hy2xmJc+8PIOM3kna4i+IO2GCh232oQgOOkzjbK0w1PYHbUY9OctD7/egNdMGxcmNVJP3f47JHsEnSnVoTb1129q9LJvBK2iWmpeRg5rtI= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770216896; c=relaxed/simple; bh=snsgE8XkCmrf42e7E81nCeDkGLy+ZiQ4hwakK8Q5La4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=NK25jAV8enutU2um/6tCFeDvtF+x6Tn+U0dVh+3FRMdGGYTu1Dfpiu56aU7eWu/87bTanvSg+rX5w3/ai60J5MJDOg34pd2MJlGLmjW3as/eAmhvY9wqBKIZxIkPWzzCOXdk+bQ7zP5Q20j+WLkCCGqWU/CagRZ6RmovK2Tac3E= 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=MVdbd/sc; arc=fail smtp.client-ip=52.101.229.111 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="MVdbd/sc" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=toZpIAg9jg1RY/2OnlN4KW77oekKXmmiCawzQt64DjEv54HYdhjjN5uwGUuIlvTpIWXHIDCozvkQUKeIi5jIIffhHS7vGmwqBcs8e0pvfGgEuwHNT7C42BIiYIZ3oPVYoG2LbUoYTuTNw5TCJjvDSooEwQamdJV86HfADLI+CqBlX3z4ALqmzualocKJklpdV7IDuJcPTaECwubFYsoP21L3JbBSIYYYTrr0RiqXzo4R3mHvIPMNPBseeix6SSOzHImTo3PRuoD+9hnX+mFv/nw5efkUZ75RJwPSEAS9YGWFFhjFmOlc/sfDkiv76aEIMnc08GB/WRcOXRUtp1KR4Q== 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=qCTb3O/PCYfFgnJ1i96k5LBnchMAUr/9JEUwYZnFsmE=; b=EiVOhE0J7m0KlxIYgL+giOjVV++1KNe2sXRWBl4ixjBs6J6mNzj223+s1j3lepkB6sT6SHXO0MoGNhZ4GNAzwEBEf4UtN16rXZNZiTTXlVYJ8x5r09WsbtUpnjuqiA8L9W2XJSL23S6GVxIXJqpU8ATTVySqo2OCgc6lQ7sWdkq+WDdYLrGwI6wOyTJ6jlGAc05jZiWRLB2N0JEmjT1PqM6eDRknRotTj8BVLEYn8+Z7YTupcULemWiiKZFmMa8gs8dbohp57x60YaCIXN222VYVSX0NLgMtb5dUz8SIsFFrpARSWFfN3KDVvM+mbC6VzwuH8XdEtAdoWzRb9+Tm0w== 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=qCTb3O/PCYfFgnJ1i96k5LBnchMAUr/9JEUwYZnFsmE=; b=MVdbd/sc2GHIuKYlsn5M2UQkpXxgP30KGYDalqfeISuC1079fQScSrK9+ja1tgEwj8pL6P9zsrFMb5YhK61Nu5VgV5h/666MFndjM9WrM5Xs92CKKIXF/20Cvb1NGx/n9axBFR514sziPM+vhgYVBygQwgrbRfdIqkBp1gj+UaE= 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 TYCP286MB2976.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:302::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9587.12; Wed, 4 Feb 2026 14:54:54 +0000 Received: from TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM ([fe80::2305:327c:28ec:9b32]) by TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM ([fe80::2305:327c:28ec:9b32%5]) with mapi id 15.20.9587.010; Wed, 4 Feb 2026 14:54:54 +0000 From: Koichiro Den To: vkoul@kernel.org, mani@kernel.org, Frank.Li@nxp.com, jingoohan1@gmail.com, lpieralisi@kernel.org, kwilczynski@kernel.org, robh@kernel.org, bhelgaas@google.com Cc: dmaengine@vger.kernel.org, linux-pci@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v3 09/11] PCI: endpoint: pci-epf-test: Add smoke test for EPC remote resource API Date: Wed, 4 Feb 2026 23:54:37 +0900 Message-ID: <20260204145440.950609-10-den@valinux.co.jp> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260204145440.950609-1-den@valinux.co.jp> References: <20260204145440.950609-1-den@valinux.co.jp> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: TYCP286CA0351.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:7c::20) 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_|TYCP286MB2976:EE_ X-MS-Office365-Filtering-Correlation-Id: 3c90b908-ff5f-42c1-e0c4-08de63fd5b47 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|10070799003|7416014|376014|366016; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?8WvPCWCb6muEXyYHJI09bNbOv8V+PvZWSBLlVZVVuj0DAJendsPCe8Xcl6v2?= =?us-ascii?Q?FReAbrEecdqUUjV06iQaeqzxo4EiVaTbDUUYpzhA86LQEqDiT5kmXxLaflpG?= =?us-ascii?Q?L5Ph0MN4pBk30YGqvQsjqti96hT9xHgAdyxGAEVyGveQDkGjA00VjFbcpevY?= =?us-ascii?Q?Bhlne7Hhl1FhxcBXUFslwZpi6M1zPRJWX73vR+iNyygCi3FDQPkePwzGREKM?= =?us-ascii?Q?zbR71sepAYVmYgJ38/Eb7dGNg9s/lWhQ12Zl3khGPY/pdufkGBubw9dUH0GK?= =?us-ascii?Q?fYU+8dnpKDvymqmDtCeYAQc1apELKZLjOMA4SssW+/cjTNPRZHWK71Ypgx+e?= =?us-ascii?Q?lbkuKMlnILmFsIqcGb5DxSyt9XqCOszDteGRtkdhLFmnsflJnuouTiRR7cKK?= =?us-ascii?Q?B/h3qbWCrC9j/MkTAFAcN5xaJKvel5msle3JcQGokAcp5zEjTzYe85G8YpJr?= =?us-ascii?Q?fOQl770EfJi5DuS3FV4ezvVsOqPEYwvGu8OL/sfhp7qJGY13YMVtQ7uUybqk?= =?us-ascii?Q?ZfhdEGUhv50cd1yxf+OVP7OT37kG/CjJfUx7g/3gM1ERl6jIBDIfJvewLlWq?= =?us-ascii?Q?k9UggpsqklIMLaxJnf4cNB0gLQ04F4Tx0xyWjDy6PBEssYEMgpf2L88JEx9N?= =?us-ascii?Q?1fKusdNgbVPw0jkbAIY9jmmjCs6b3Tm0QHWmYexmTgZk2hRPrF/0MY4SA3cl?= =?us-ascii?Q?HJvRJH/3CUIHEPQvH6ZW5S7XM9Z0/2yC4ULXtx6tYxYwaMk6a/qGyV32yA1B?= =?us-ascii?Q?NxzR+Fw/qKgYX4tsU0ycVepgRWXYVCkFSwN7EArY70xWWvFFOxn5dihXzxPx?= =?us-ascii?Q?QhGAok4aKQrBD9LBEV2MPcWX40Tf6T+20fEQYS05XXWHRwq/V6SdglqF73Fw?= =?us-ascii?Q?kooyew1P6qifEnZ+hiFua0ikBcTQIQDH94zyIOjhCrhKBD+AWqo34ldHvsAC?= =?us-ascii?Q?jKtoHBH25VA829X2pRH6YhjjVGxhjuyVywTpm5LKNuUkrs+xOagh3b7myTPW?= =?us-ascii?Q?9xcGGF78QioGd4pX2mIZwptr7tumTbR6lTn7Xk6Vm6T0ZMLLtGGbi7Yr+Rdv?= =?us-ascii?Q?lgJ3j5mufS9dH6vpm/t0UbbCZCe0wMqNEPIv6daCkmSacmobR4kTTqZt0FhN?= =?us-ascii?Q?sIeAbVFbSt0+s8XFWun/hYrc5Xp4+6U11ssUa2NAEhVB0yUz5qzEDGlcj8J5?= =?us-ascii?Q?6ziKIZoGHwXBjc9T6uUAIRvrSJTGgS6kseGycZxNv0D2KuRiyz86yREvrEwn?= =?us-ascii?Q?rIwM9XraFZue+sH/H8QF9jYJKr/L9uVzM6q5jkXLQ9wTbp95gxz0f9PacSF9?= =?us-ascii?Q?aBsWsJh1gmpxv3nSfqX1yTTb7Fm7/Qr56BkeEs18oWVBCuobUjKjWWIn221D?= =?us-ascii?Q?pGEd8Am1a3XEpfkz1NbLqrkBckJnlksvny8UOfc411HQMPhFDG84gjXHcZzf?= =?us-ascii?Q?dVLIxNWjV6zMcOZEBipeyC1UmH3h2GettlPsPB9Dt0y5rwLtH2iFfm4wa/br?= =?us-ascii?Q?/WvQVu3ycuVSVTy5bUwVXRASoMXJkYFxkGfUnoAHnWbQ5mXUSEZVc2a+KlFh?= =?us-ascii?Q?NRNt1NLJ3Sjifo850LM=3D?= 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)(10070799003)(7416014)(376014)(366016);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?vgTnXiDYal3abpbt9RiCajVt15lzDd5oyRMWotJ9P97nwwm+DvC4JPdBOt47?= =?us-ascii?Q?728CJNZAxwxc1/t9f9i1EtHs35mZp2CaPEWXCQJFyyG6+zaFZB8gT4hgRCgT?= =?us-ascii?Q?7JN0FAyNdDuaV+N513yG7VqNMSd5mnB2zpd0ZFxMnqkeqgtdNGYNix5+YaCa?= =?us-ascii?Q?jMKAINwHaG/5S84d4meQrqJND8f9Ya4xB9xbhhQP2u5P0y/FD40iV+zV5JPZ?= =?us-ascii?Q?8NtHtBtBXo0/WLxfE3cVDr7ZyEeXjQAcYo9Z6QnjU38gigz6inwc8iSo/mBi?= =?us-ascii?Q?Rk6W17u+6UYspv4SLui0lrSsm0puii+EJ+kg6HIj0BHHHCRkenvG5g0rEbue?= =?us-ascii?Q?tK2OsNs6bv2Y0ZDpzoTmpPgOGpnVkap1t4egf3xMch/BGQW70ZGPSc+LiMqf?= =?us-ascii?Q?D3+WjkWkZKHEi363EWkI+qLswmSgxESS5ShU3VvR1LG4AifMDjR82tDe2rVx?= =?us-ascii?Q?lJC91m++gcVfjcQB0ZwWWxBdj9y4aS4EpZvQM4ETSz6xFdBFB7uGugruEhZo?= =?us-ascii?Q?hfrkABxvl7gyL2iYKo86M+VQkEeCizeqgyBOcrnDkX+MHLtOxl9VTP4jkTv9?= =?us-ascii?Q?WqfVRgXfXRxodVcpfnNU5/H9tu1uIQ4axjNEeaiLslqG6cCikN6tXiUvc33E?= =?us-ascii?Q?zms0MCSZvi0m1AaGfnDfVv+gytLlwBEXWU9s3937j20DCnQjD6AMwEBalbBv?= =?us-ascii?Q?GfA4ZKw8ob9m2oPSXNJUSjy6Pv4ckTxp4nNFEmxl3gpoNzevMzYiuxqQ4eeo?= =?us-ascii?Q?xJX4muBHB/lcG9CR9+uPatkqlvtPdYklknpF1g6ZG/+vi/BQictD70MSrgVT?= =?us-ascii?Q?ytLNc05V2mjD3TJMnOXyyVxh/+d8gd5TrHN0Tqbu5NK/9dA+18MpYZYRW8ja?= =?us-ascii?Q?L63UJVjv+PUgI3eKfQPVjB2v3BIFFqAhIcjcx7y+4Hf1coB/2UIGrYBIOVl+?= =?us-ascii?Q?dkm+BEcjw7ykMFqX4EDq0F8BYApI/N07+HyCT1IWoj4FXprs9ZQNRFoexpZX?= =?us-ascii?Q?ty3TJ5OGaiQlwANS7vk91tDY/La3iX9fTK5xtampa+S/woq+t1xYUlwZV0So?= =?us-ascii?Q?brdLYgTUQtZOpuezsgVodEEcITzmIdOObqRrIKN4eil/HgllaJkPQbO7/CBr?= =?us-ascii?Q?YDu1D+G/+c0qwpxfX0kPEv+p4HBUAMk6Y5mw2OyMrEC9FI74siekfYJWJXoW?= =?us-ascii?Q?XOqhnKlbEnSsYFKYTxX+Y1909wRmHGMB5P7uxbxgyPQAxGiiPX8YQf6al/4H?= =?us-ascii?Q?KuPOQt5uzOO7K/vIcT1Ml2GxnQIqxN7jf3ILT/+mRGnYwX6pJQrc7PDYn53V?= =?us-ascii?Q?cKazIUq6hYiFn/Rcg1pO6BnwlNrEluvJvDuwPZ5O+aVMMUzZOFPZAqOKTKfr?= =?us-ascii?Q?k5Pb78xMekj/GZMkaEEair/e3BvGJJMBKGGHenHDSbVb7MO7cyAzPfRRjGjb?= =?us-ascii?Q?6A8jWstf3C2DzGHC0WA0yv1Flc+p9sOZjK8Q5FWhn1UVJLJtEsIasAOKZ8s1?= =?us-ascii?Q?1LiFnEJpcZWfA4wDVogI0i0bs7V/KpdYh/fWQbFZI4Jk9e4pVUspwrgt6k3P?= =?us-ascii?Q?g/rgKsW0ieXBjvZvEkzKBH0ltJS3XDFaL+G3MOHfsuLy+3Sd9P6Iiev1BdCb?= =?us-ascii?Q?1CxGrj+OecdxQMOSHlBALQHg3njqvhO9EotoaAWJ8pyuFWmPelPLb+60Vbh6?= =?us-ascii?Q?6pVpR8PuOjYA3WbdYldDkhSAI9cUOL4E6+PPBoEMNetTOzss3qzA6X2uUivK?= =?us-ascii?Q?B61Sh9raIIQ95aVGQMPiYG88nI/SlhsJ5ui2wMGQ4j2frQE2gRSK?= X-OriginatorOrg: valinux.co.jp X-MS-Exchange-CrossTenant-Network-Message-Id: 3c90b908-ff5f-42c1-e0c4-08de63fd5b47 X-MS-Exchange-CrossTenant-AuthSource: TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Feb 2026 14:54:54.2867 (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: jfjLw5coRhVzP/l400Hwm593W447WZdqz0u6jQLDgJvOE4UJvLS3gKaLNrJRQYCAHSZqFEAB/EVTyhrigU1iLA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: TYCP286MB2976 Content-Type: text/plain; charset="utf-8" Add a new pci-epf-test command that exercises the newly added EPC API pci_epc_get_remote_resources(). The test is intentionally a smoke test. It verifies that the API either returns -EOPNOTSUPP or a well-formed resource list (non-zero phys/size and known resource types). The result is reported to the host via a status bit and an interrupt, consistent with existing pci-epf-test commands. Signed-off-by: Koichiro Den --- drivers/pci/endpoint/functions/pci-epf-test.c | 88 +++++++++++++++++++ 1 file changed, 88 insertions(+) diff --git a/drivers/pci/endpoint/functions/pci-epf-test.c b/drivers/pci/en= dpoint/functions/pci-epf-test.c index 6952ee418622..6446a0a23865 100644 --- a/drivers/pci/endpoint/functions/pci-epf-test.c +++ b/drivers/pci/endpoint/functions/pci-epf-test.c @@ -35,6 +35,7 @@ #define COMMAND_DISABLE_DOORBELL BIT(7) #define COMMAND_BAR_SUBRANGE_SETUP BIT(8) #define COMMAND_BAR_SUBRANGE_CLEAR BIT(9) +#define COMMAND_EPC_API BIT(10) =20 #define STATUS_READ_SUCCESS BIT(0) #define STATUS_READ_FAIL BIT(1) @@ -54,6 +55,8 @@ #define STATUS_BAR_SUBRANGE_SETUP_FAIL BIT(15) #define STATUS_BAR_SUBRANGE_CLEAR_SUCCESS BIT(16) #define STATUS_BAR_SUBRANGE_CLEAR_FAIL BIT(17) +#define STATUS_EPC_API_SUCCESS BIT(18) +#define STATUS_EPC_API_FAIL BIT(19) =20 #define FLAG_USE_DMA BIT(0) =20 @@ -967,6 +970,87 @@ static void pci_epf_test_bar_subrange_clear(struct pci= _epf_test *epf_test, reg->status =3D cpu_to_le32(status); } =20 +static void pci_epf_test_epc_api(struct pci_epf_test *epf_test, + struct pci_epf_test_reg *reg) +{ + struct pci_epc_remote_resource *resources =3D NULL; + u32 status =3D le32_to_cpu(reg->status); + struct pci_epf *epf =3D epf_test->epf; + struct device *dev =3D &epf->dev; + struct pci_epc *epc =3D epf->epc; + int num_resources; + int ret, i; + + num_resources =3D pci_epc_get_remote_resources(epc, epf->func_no, + epf->vfunc_no, NULL, 0); + if (num_resources =3D=3D -EOPNOTSUPP || num_resources =3D=3D 0) + goto out_success; + if (num_resources < 0) + goto err; + + resources =3D kcalloc(num_resources, sizeof(*resources), GFP_KERNEL); + if (!resources) + goto err; + + ret =3D pci_epc_get_remote_resources(epc, epf->func_no, epf->vfunc_no, + resources, num_resources); + if (ret < 0) { + dev_err(dev, "EPC remote resource query failed: %d\n", ret); + goto err_free; + } + if (ret > num_resources) { + dev_err(dev, "EPC API returned %d resources (max %d)\n", + ret, num_resources); + goto err_free; + } + + for (i =3D 0; i < ret; i++) { + struct pci_epc_remote_resource *res =3D &resources[i]; + + if (!res->phys_addr || !res->size) { + dev_err(dev, + "Invalid remote resource[%d] (type=3D%d phys=3D%pa size=3D%llu)\n", + i, res->type, &res->phys_addr, res->size); + goto err_free; + } + + /* Guard against address overflow */ + if (res->phys_addr + res->size < res->phys_addr) { + dev_err(dev, + "Remote resource[%d] overflow (phys=3D%pa size=3D%llu)\n", + i, &res->phys_addr, res->size); + goto err_free; + } + + switch (res->type) { + case PCI_EPC_RR_DMA_CTRL_MMIO: + /* Generic checks above are sufficient. */ + break; + case PCI_EPC_RR_DMA_CHAN_DESC: + /* + * hw_chan_id and ep2rc are informational. No extra validation + * beyond the generic checks above is needed. + */ + break; + default: + dev_err(dev, "Unknown remote resource type %d\n", res->type); + goto err_free; + } + } + +out_success: + kfree(resources); + status |=3D STATUS_EPC_API_SUCCESS; + reg->status =3D cpu_to_le32(status); + return; + +err_free: + kfree(resources); +err: + status |=3D STATUS_EPC_API_FAIL; + reg->status =3D cpu_to_le32(status); +} + static void pci_epf_test_cmd_handler(struct work_struct *work) { u32 command; @@ -1030,6 +1114,10 @@ static void pci_epf_test_cmd_handler(struct work_str= uct *work) pci_epf_test_bar_subrange_clear(epf_test, reg); pci_epf_test_raise_irq(epf_test, reg); break; + case COMMAND_EPC_API: + pci_epf_test_epc_api(epf_test, reg); + pci_epf_test_raise_irq(epf_test, reg); + break; default: dev_err(dev, "Invalid command 0x%x\n", command); break; --=20 2.51.0 From nobody Sun Feb 8 14:31:39 2026 Received: from TY3P286CU002.outbound.protection.outlook.com (mail-japaneastazon11020111.outbound.protection.outlook.com [52.101.229.111]) (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 60F1A41C2E4; Wed, 4 Feb 2026 14:54:56 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.229.111 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770216896; cv=fail; b=c1wat4fQpYCEE2MgojszELMByf8wqxSdquFwSzD/4mI3/dZo1mxKqfR7/rUvMnJhnMPXD+kstWWsouIydl6xh8V2cYrq6DQKWtSceZIUSgJG2KtTH/qAGOZe7WOz67UpxCPGqxxPR/oAGMfondy0c6mkBOkAaL48+3PpirhWy3Y= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770216896; c=relaxed/simple; bh=R5MiSATiOdNADrOvbq5QQxH2pQyA1fxlMFiIgkM7M5A=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=H7T2Pa+UOuEQQd6drCy5m0R710bTBA3f5AyX6hYH1PkAvCTl28S1s0akIzMOTbOCamlrF/IzAUCNlTvgr9gSgr6Um/W3/k/yvi8UW77Wo0veKJUPt04T8pDrFvy3F7S3rLuTKHu7wwW26XoXmslbmjujsUSM0RN+d0jb8OiQt74= 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=Jn6U1G1c; arc=fail smtp.client-ip=52.101.229.111 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="Jn6U1G1c" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=s6P3hgDxwJ2PFcwhC5av+CKf4z4uh1YZR/TthqyIUh7YIal9WLujnok9XdoJ7b7c1pOl6Ufjw2CwU8x3XLdLQCbfj5okgQD3w+24eQUBttYpPkLR/Yg+D/1z4c2OzNVZwGkUt+lmTgWrHrgjAIXWNDdEqdhaHqPQHd/QjB7ftMOFcd6Pnw51psIcxuzBme5RTaQxB616LiRunXVY2kvtXSKdsCeTGh8AoFmb3mQlh+q0t0jvJdvhEvILlpoGeToaxV4SFZFf/yeGlXKSEwc1FNf4NyCkaWso5uTmz3u7blf+3nsEq9vGTjJcRtYHGsNnB5cEbtN9Rj8fSds+Abv4YA== 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=ef8NXtk+m44u5rQTPZWKcDE8nwS4f+8NeY8fnMmfqXc=; b=FTA2mvZ0uSHVMOv59FQ5hltNVTw8E/Vs99W/tZ2uVuxDvvL8ssq4GAnCZezvLxlBxp6f7LW7dQ063BpO0mZBYjF7UuhYA/PhBzF/ADBlu7cpbKJoecUZQL1p0EvBc2WrU7qHdPglKZJer4cQ/Q/QdF1CQZBz7WbMnmUXWKPnXOhMF5Z0rv50JmXgufWwe8y6lRTthNbuc3Vjzi6vOBBQ8aB7iNkgfX4Sb6mLuvKRrQK5EO0pIKTYNdI0BZnpD15I9Xh2u4s2FyLW6aV/MRgLVq+1CEfNtxKlYYuEOC3A7Y8vRMeJst6Vttnhz8Ps5f0ff2NogKunWIqiTOAfnDgJyw== 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=ef8NXtk+m44u5rQTPZWKcDE8nwS4f+8NeY8fnMmfqXc=; b=Jn6U1G1cWquJPDpbj6vYlAjckzTuotGstQ2rY2SWmsfcyWyasfe48HRlgTHJiJshaUqdFwkAWLrORwuLsuQzE/6vtnqyWMo7o7fLJFuXpR0Xa+ZLBdhfXpuwKo/+z4n09uqKjI/MeGh6eaq+DP7UOCeQVEK/E8IWEmWNfXxpZjY= 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 TYCP286MB2976.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:302::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9587.12; Wed, 4 Feb 2026 14:54:55 +0000 Received: from TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM ([fe80::2305:327c:28ec:9b32]) by TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM ([fe80::2305:327c:28ec:9b32%5]) with mapi id 15.20.9587.010; Wed, 4 Feb 2026 14:54:55 +0000 From: Koichiro Den To: vkoul@kernel.org, mani@kernel.org, Frank.Li@nxp.com, jingoohan1@gmail.com, lpieralisi@kernel.org, kwilczynski@kernel.org, robh@kernel.org, bhelgaas@google.com Cc: dmaengine@vger.kernel.org, linux-pci@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v3 10/11] misc: pci_endpoint_test: Add EPC remote resource API test ioctl Date: Wed, 4 Feb 2026 23:54:38 +0900 Message-ID: <20260204145440.950609-11-den@valinux.co.jp> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260204145440.950609-1-den@valinux.co.jp> References: <20260204145440.950609-1-den@valinux.co.jp> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: TY4PR01CA0085.jpnprd01.prod.outlook.com (2603:1096:405:36c::8) 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_|TYCP286MB2976:EE_ X-MS-Office365-Filtering-Correlation-Id: 76369ee5-e8f7-40d2-6910-08de63fd5bb7 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|10070799003|7416014|376014|366016; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?Ln16DMXF4A9RbYIdImG3RTk+bdIXH28cMhkGvH6ch2bLQwIS6TlfOLlszvQI?= =?us-ascii?Q?DlwZIrUb3p76HHLWiuqIzlu++kdpfzQah+byi9X2pXd7bI4SlZe6P4vgARs9?= =?us-ascii?Q?v9MXdeCUAYWX4/fUhnMPUK0l/VOOeBc1O22KI43qTzCi8te+lCqwyPfxL+A8?= =?us-ascii?Q?dsfl1aUdu+BJ3Sx6KSmmCO+vQy83nnby559DDBExNZo5FYuolFfZsnh/+PUI?= =?us-ascii?Q?F8ZZnAZxG6Dh5H6UwAN5oV4jKi1UJoROXuOqF2SzdcweogBa3xnt0QmGHE5j?= =?us-ascii?Q?n1IFVBCCcIUbrn1VM4Nf3vYxW0pYiUHTKQhy5/VQrVzRihjjP5knK7spLWMp?= =?us-ascii?Q?GDzHMytPcwePG7z/MhQmiLhFC9udip7Cm/njDHRoA8q/qjsHm72GSxAmjZqR?= =?us-ascii?Q?KjLbDyZg8v6Zy2X5DD6y+Rsf8WvbbHCRPjnwBGvO8lReVa4If4m1+j6kxNjU?= =?us-ascii?Q?jpiEZ8EDOQw5AfnkcpUrNeaqQIB384MzFIhnjfLNuxLfvtOSH6kZ1tWOwg5a?= =?us-ascii?Q?b+xiwYUKnhbZNpTCOZM8mKb+pe13xcJbRzWiHDXkrgjbTARY5pzyERvPI7pA?= =?us-ascii?Q?Cde+eMzewbaayPMHGTyJcefCNZRMLLWVqvAiBasqFqmgLva8TLwrmCFVwlHM?= =?us-ascii?Q?8aB7xWn/CfSROrpZo5tBKQ1m6Pe9di5x3izw3AOneT3HUDhEJxT8N4obwsUl?= =?us-ascii?Q?iVzQoy4aZ+W6iFnQDnPOct1vbnuJc1qNa50CaqGSBHZiI6YNeH0T4NwKzc0g?= =?us-ascii?Q?Zrgewgx4BmmwpUGEqxwpKOW3F+k9vf+J2kANPiuuQM0kgJz9+hjs2djzUORC?= =?us-ascii?Q?fMsW4YfhfiY5KQMiPHoF6xmhONMGFMNVEmCmeFCRia8fULpzyrWYUxjmAfDr?= =?us-ascii?Q?CaGYr58MKITEBTprKACpBcvHTp2TOwCPBxAxFo657bbtIWEQWWuB6L4hUvEZ?= =?us-ascii?Q?/wqtZLWBnXd+Rn7GTuM5zuQlX0vewiCp1WIzKaAUe4ySK07rs/mvKhyKrrdQ?= =?us-ascii?Q?TvusyNW1t0MJ3cX/2eY9LXoFQp/DMTCspix5hJL/f275WFPeoedbpVn5CfqC?= =?us-ascii?Q?9u/0SJijN+iuTiTo4fSogv/8KH05tHQosY7LRcWAmxd4hsiT8N9s4u9HtDAR?= =?us-ascii?Q?eVQP+dYH5ENVLHKJQ2Wc3P7FIGJt8meWON+Ar4z2BIfxBvX5ugS7Sna35c6T?= =?us-ascii?Q?0tKnKjYfq+byUX3vZyKE7ps+eqP0dqX/PyrwfUr5jl8uzx9M8uWpdu7D9CAF?= =?us-ascii?Q?SvcwEDplW/jYNwGKm0uoPG+K9ExjpOQoDFLQyjhI9Pbqp22RbmZ3BnhPV9s+?= =?us-ascii?Q?UEbtcHyBPu6wMBi5USqZblmDlZHElPHiUIyEUv6H/1L9albZ1q47gSjrEPxZ?= =?us-ascii?Q?JCf8QVUqDhSufhMQGJ542EFvkUnnHadXke0wnWvBrY9zcl3aR4UNN1GM1Wuq?= =?us-ascii?Q?FvVqHoTeOCdhKAJ46p9lz13y7xsTQuqLT7yiS6z9E+wlVmYPl8y1Up3eq/hh?= =?us-ascii?Q?gLx6oli+M3ZQxss8U2mavBUBrH6jmoicXMLn3X0kVnXVzoiKQjmUgH3wWpM+?= =?us-ascii?Q?1HBCp5b8nOrds+C6O38=3D?= 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)(10070799003)(7416014)(376014)(366016);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?ZAvTZijYc8sOK4Lg0Yx3BU+755cSROIza0dbyox2Ap+GzzyVztH5Gdwz25rz?= =?us-ascii?Q?p9XCryGptwLVYtKwauSlWVhXQuuh7SrNHvZxnDgNW42VhD/LwRg9E19uL7LV?= =?us-ascii?Q?+YPcQM781WoPPu2FCe2MNrpTlbnqA+ITDpEhwd2xFAn+bifL/fSaVKAXxL4V?= =?us-ascii?Q?Fd9lpzxmF00oFMrGUMuSuJFRSlixyRjz2i7NNfyce+nSSdZxDqJRfY03yEoy?= =?us-ascii?Q?YRA4KBO8lTOKZN3HXARHCgOBrL4RFlJL1YZPhIlnR6aqdUUZPbKJV9pXKheU?= =?us-ascii?Q?VAaFYUKAnF+niZrHUmjNruE9YFiONXFyAoKd2uk8v2beJvUWC7G2DujQLz12?= =?us-ascii?Q?eC8IME4cJ5bmi+Q3JVlDdo15e6ZRFZeKZjsP77kEsjgTCYFDQlsMqqObXIwR?= =?us-ascii?Q?yoiQ3G/UDHK0Hliwd0osZLetDE0ya/MPBuItpS1xL6MJg7yggrEeFzHiWzis?= =?us-ascii?Q?Zkpt3oU0x/78OegYCGzsj1Zu3QEkneGCK1Dhh2oVV3vFCpESIGI9ranEJw3y?= =?us-ascii?Q?YHjH6f9oefauTE8Eclrm8Ljx/icMXiQIsznJEncn1+eI6qrk1HWIMRXfxLRZ?= =?us-ascii?Q?XWJqBW1iF2wrtCRHx7XkvpM2mAjcBhRIdTCexcImtCXCksZCk+mqp1FapWlE?= =?us-ascii?Q?XqzKcbImlxg+n3lkaRj/funIGrERSJQWunkZczRkuTK1GLN7lO6GgEcXmWha?= =?us-ascii?Q?DKK4sNoNQ3pEXCHYsDhEpdJKfYuZRDbpySa8NzwGYWvb4NRFznv3yeGInJ0N?= =?us-ascii?Q?loHUCPBEHBpcAJoVvydU1v99nkm+vc01KjU+TtzUeSQKYnfxZ8eU/HulWDks?= =?us-ascii?Q?nYadAf/P8xL+4UkgirK3lEnolOcM/0oW3zTaQcIgz1OOzkpsgW0UxkNBsDFQ?= =?us-ascii?Q?YY6NNZYXUo3I3GWVjlgDiDwbhO1sgx8bM+3UPkg+GwNQOWUK3OPzXBnJJGYJ?= =?us-ascii?Q?2xdXzH9fGJPxA7dmN8G1V4mw4nzp9qbBsDDXbM+dO+K7MvXrc0SHVrOi0ENI?= =?us-ascii?Q?BHoJJEa3lpIfRbTcHBn6Z/rCbSX+ONViFhNW2HVFklxEhT4cU0720lp4tZsL?= =?us-ascii?Q?BFKsUXs/Lj78n8u8LAChFyljT6F8x55Q0ZvJREK6RI5HWOu//xqvhRi0wFgu?= =?us-ascii?Q?Nc7bG6ev0BSDdyjiMCFsZwQvYItPWCWUKjrQseRGqjFsGRIV/vRDhw7fb5dT?= =?us-ascii?Q?L1XOqh55TTHjm8UU71YUic9t6eBufzYmXnmFwG3o309gsbM7twuF7tc3bmeB?= =?us-ascii?Q?EESa+8TPYJt3ehPSiZYQXta/63ABf2vabfnjuKqG9ti9Eoq8TfUBdZxrIf0R?= =?us-ascii?Q?26HvW8dl+K3qNyij3vOjAregd4/vzSGiJJ4dqeFSPPZp6A3ZrDEGnSYbMx9J?= =?us-ascii?Q?Jh2qlUo24aC6uRhx8DxsqVfPZiZEgW+VLUBZjyHB9jjgAGHanBYxqrSkz1I3?= =?us-ascii?Q?XafMtMcisLzU9+CyYENDFlhe0Loqb6Oa2qqb69VZNyt3V6A7do//8Yx4UnY5?= =?us-ascii?Q?PdGWqmqCtlzeIb+pEA+AYdRbIzPnsjGBrhJbPTJhGQKQfcxpML+gI6nyteZC?= =?us-ascii?Q?OpMRYt+8B/K4Uj2I26OUxWDBOV2eSi4SIJvltqYCF+08bDMnyxzSZMzuiYb9?= =?us-ascii?Q?OyFGj+16+y+i27UF+GMOtsatxa6ckwdOK+g0meR2RwR+KRwxmCtgEgFwlcQC?= =?us-ascii?Q?CvvdrHT9m0RVWsGqkHzxXuIzdq6VMXM1K5iFR0ZZTA6LyT0soKabGMGuQByi?= =?us-ascii?Q?gf/TZ3wdwH5xqQ1tewZBmyM7vptXawkmNbSNMMBdy6vz9etohRpF?= X-OriginatorOrg: valinux.co.jp X-MS-Exchange-CrossTenant-Network-Message-Id: 76369ee5-e8f7-40d2-6910-08de63fd5bb7 X-MS-Exchange-CrossTenant-AuthSource: TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Feb 2026 14:54:55.0182 (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: 2XLf7q2ysD3R0W+My6r6E3CUpXM6F4Rqws+uoMBF1QsWFxd67bU7sZv701faHct9kUkJVK3gls+DtsrV4XBr3g== X-MS-Exchange-Transport-CrossTenantHeadersStamped: TYCP286MB2976 Content-Type: text/plain; charset="utf-8" Add a new PCI endpoint test ioctl, PCITEST_EPC_API, to trigger the pci-epf-test EPC API smoke test from the host. The ioctl requests the endpoint to run the test, waits for completion, and returns success/failure to userspace. This is used by kselftests. Signed-off-by: Koichiro Den --- drivers/misc/pci_endpoint_test.c | 49 ++++++++++++++++++++++++++++++++ include/uapi/linux/pcitest.h | 1 + 2 files changed, 50 insertions(+) diff --git a/drivers/misc/pci_endpoint_test.c b/drivers/misc/pci_endpoint_t= est.c index 74ab5b5b9011..4be21e37353b 100644 --- a/drivers/misc/pci_endpoint_test.c +++ b/drivers/misc/pci_endpoint_test.c @@ -41,6 +41,7 @@ #define COMMAND_DISABLE_DOORBELL BIT(7) #define COMMAND_BAR_SUBRANGE_SETUP BIT(8) #define COMMAND_BAR_SUBRANGE_CLEAR BIT(9) +#define COMMAND_EPC_API BIT(10) =20 #define PCI_ENDPOINT_TEST_STATUS 0x8 #define STATUS_READ_SUCCESS BIT(0) @@ -61,6 +62,8 @@ #define STATUS_BAR_SUBRANGE_SETUP_FAIL BIT(15) #define STATUS_BAR_SUBRANGE_CLEAR_SUCCESS BIT(16) #define STATUS_BAR_SUBRANGE_CLEAR_FAIL BIT(17) +#define STATUS_EPC_API_SUCCESS BIT(18) +#define STATUS_EPC_API_FAIL BIT(19) =20 #define PCI_ENDPOINT_TEST_LOWER_SRC_ADDR 0x0c #define PCI_ENDPOINT_TEST_UPPER_SRC_ADDR 0x10 @@ -1117,6 +1120,49 @@ static int pci_endpoint_test_doorbell(struct pci_end= point_test *test) return 0; } =20 +static int pci_endpoint_test_epc_api(struct pci_endpoint_test *test) +{ + struct pci_dev *pdev =3D test->pdev; + struct device *dev =3D &pdev->dev; + int irq_type =3D test->irq_type; + u32 status; + + if (irq_type < PCITEST_IRQ_TYPE_INTX || + irq_type > PCITEST_IRQ_TYPE_MSIX) { + dev_err(dev, "Invalid IRQ type\n"); + return -EINVAL; + } + + reinit_completion(&test->irq_raised); + /* EPC API smoke test is executed on the endpoint side. */ + pci_endpoint_test_writel(test, PCI_ENDPOINT_TEST_STATUS, 0); + pci_endpoint_test_writel(test, PCI_ENDPOINT_TEST_IRQ_TYPE, irq_type); + pci_endpoint_test_writel(test, PCI_ENDPOINT_TEST_IRQ_NUMBER, 1); + pci_endpoint_test_writel(test, PCI_ENDPOINT_TEST_COMMAND, + COMMAND_EPC_API); + + if (!wait_for_completion_timeout(&test->irq_raised, + msecs_to_jiffies(1000))) { + dev_err(dev, "Timed out waiting for EPC API test\n"); + return -ETIMEDOUT; + } + + status =3D pci_endpoint_test_readl(test, PCI_ENDPOINT_TEST_STATUS); + if (status & STATUS_EPC_API_FAIL) { + dev_err(dev, "EPC API test failed (status=3D%#x)\n", status); + return -EIO; + } + + if (!(status & STATUS_EPC_API_SUCCESS)) { + dev_err(dev, + "EPC API test did not report success (status=3D%#x)\n", + status); + return -EIO; + } + + return 0; +} + static long pci_endpoint_test_ioctl(struct file *file, unsigned int cmd, unsigned long arg) { @@ -1175,6 +1221,9 @@ static long pci_endpoint_test_ioctl(struct file *file= , unsigned int cmd, case PCITEST_DOORBELL: ret =3D pci_endpoint_test_doorbell(test); break; + case PCITEST_EPC_API: + ret =3D pci_endpoint_test_epc_api(test); + break; } =20 ret: diff --git a/include/uapi/linux/pcitest.h b/include/uapi/linux/pcitest.h index 710f8842223f..29491f85b964 100644 --- a/include/uapi/linux/pcitest.h +++ b/include/uapi/linux/pcitest.h @@ -23,6 +23,7 @@ #define PCITEST_BARS _IO('P', 0xa) #define PCITEST_DOORBELL _IO('P', 0xb) #define PCITEST_BAR_SUBRANGE _IO('P', 0xc) +#define PCITEST_EPC_API _IO('P', 0xd) #define PCITEST_CLEAR_IRQ _IO('P', 0x10) =20 #define PCITEST_IRQ_TYPE_UNDEFINED -1 --=20 2.51.0 From nobody Sun Feb 8 14:31:39 2026 Received: from TY3P286CU002.outbound.protection.outlook.com (mail-japaneastazon11020111.outbound.protection.outlook.com [52.101.229.111]) (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 D167F421EE2; Wed, 4 Feb 2026 14:54:56 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.229.111 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770216897; cv=fail; b=FH14bYyUxalEXnzdWrWzKFn3ansHCqtYAuzoHT/lN0A4MlukWxaWmb/8dUYJuALAaGWxSLmIS4+YhyVv8q50lM3wZPbmgsC2k/w8otrfdqGaoh9bISkhQw6cP6dBs9eHnZ4AfDY7isQN2Jeubpr9fToyHf+carzY7Xk5sLc8hD8= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770216897; c=relaxed/simple; bh=YDiBumQ3zRfrzLp0tcQxES4quur7jDDpXDf/D5E53uA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=nz51spijhI7y5k7DZMxwcrqlEHsJ1bxpBoilE+h8EmIyXVbD1GAZUJdIuDq7sSkvG+gxKhuMus+63+N43398NAeSBOyvJzdi6TDYTY/SCTdpDXUbPgV5P6QmOXpzvAbYtROBYMKnyJ9aIGEtjyLp8wl1rZ9pE58V52L3X/IOjxg= 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=wQoJ63e9; arc=fail smtp.client-ip=52.101.229.111 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="wQoJ63e9" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=BLc6z5eCBl0Tm6V0KiySwc8WDMUhrUNBPvYXLsLJS2TGZhgK0K9+TnXetZOYlSKzzJ83/h/tRU2rs+hqt/1pHVEi2VF20JL6A4HZNXsuR33+jYtbHqxxxpAOcWVRP0WmGH6fQvTlZ/NDPDoFB1sU5zw9e2rBNVXOGVCycUk+cHAwu0HhtR+XrUH1hZ8f95Iysq7fLMDeZTxMUCzG/NJFokulb2Ur9/LVJBp1GjPIVYL+/mCmPVmXxKJh6l6YcD9+7PwpdsE4b4LK2FyrUbLk1cI1U+jaFpMNLvZUpDhGaIlrrhby0QkjmGQs7d0j09gn92uPiTs1QBug7BQ5HQsUGA== 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=J6hPhFRD1UfaS87K9Pg4SXwUMDc0DEoGV3eiDRfpZc4=; b=KW3RkPHt6H9uVn6mNO6fEQpdOXFSFwp7nuOwHtFVeu12t9N2RvBCx38UryydyKkSRjRHWOUlbHnrQnWkA/N+Ot28wM46mM0cmDAkAjC2FDX24TSee+65zzVeETIbaEmaj+qOMJpFGOVFSAUdb6vjRvurx3brUBEo9Gw4Yi3opwCmM7VLYE7mYU8IGcDK/jJ56uY7kXkj9pMUglpNdrwxKyTtMw8qJgnlnL/j6qkmO+woR8nOQMDxaE5AR4eWMzdeR4XRmDrA6kxnKPjQsjxVGadKpnXM0M8S4rYUExZY/QPTlhFT5Wa4/FOftVRH5p6SGQEBebQVOrSfh6M3gRFQwA== 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=J6hPhFRD1UfaS87K9Pg4SXwUMDc0DEoGV3eiDRfpZc4=; b=wQoJ63e9wBPeWtgNLUmcpsfS6xp/paU7oVUNNGNLIfXurW6cv3O/L75vrLlVN2GgQDXz9BpDSye1r5HHtg740ulBmiamSny1NPGVFm6Rbz+WVSC3epk3BlpXEdXVxk9itpfFrtKmED3WESwF/OOEff1XoQZCSlmbNygiIVbnAC8= 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 TYCP286MB2976.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:302::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9587.12; Wed, 4 Feb 2026 14:54:55 +0000 Received: from TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM ([fe80::2305:327c:28ec:9b32]) by TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM ([fe80::2305:327c:28ec:9b32%5]) with mapi id 15.20.9587.010; Wed, 4 Feb 2026 14:54:55 +0000 From: Koichiro Den To: vkoul@kernel.org, mani@kernel.org, Frank.Li@nxp.com, jingoohan1@gmail.com, lpieralisi@kernel.org, kwilczynski@kernel.org, robh@kernel.org, bhelgaas@google.com Cc: dmaengine@vger.kernel.org, linux-pci@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v3 11/11] selftests: pci_endpoint: Add EPC remote resource API test Date: Wed, 4 Feb 2026 23:54:39 +0900 Message-ID: <20260204145440.950609-12-den@valinux.co.jp> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260204145440.950609-1-den@valinux.co.jp> References: <20260204145440.950609-1-den@valinux.co.jp> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: TY4PR01CA0078.jpnprd01.prod.outlook.com (2603:1096:405:36c::16) To TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:38f::10) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: TY7P286MB7722:EE_|TYCP286MB2976:EE_ X-MS-Office365-Filtering-Correlation-Id: aeff3be6-6cb1-4abc-1105-08de63fd5c26 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|10070799003|7416014|376014|366016; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?JoWtfmq4mkFP5umOE8sOLxKPszhkxThg1wQcpJEWMsvbbKyiNWFBQZwEN0IW?= =?us-ascii?Q?rggxcu9z0otsNepS66/mu8bOuJGbZg7UISq+wEOUiEDzbY5zT6pW5HxQGy72?= =?us-ascii?Q?ONR7K1Gmh8v3CKK1zbtFmtZ1QUfyqOyV76sqc/G5waxSuDk+MwubHwlP3Joc?= =?us-ascii?Q?qMiFkxYTJl2+Rwy5/seGvZa9nhsF+aIDXx8E3fy/uzAftg7jtSHyjymBdScF?= =?us-ascii?Q?GiXRw/eWWm3vLSwdKPS2zK6+ze719uTLZG6TWI0w9E6Csmm2cEUvh+pysdXH?= =?us-ascii?Q?ov6+LFp/yf0mPpElF10k4IqmRJcjc6T26FJrSzO1a0B3YiOhcO5qyPT1g1TG?= =?us-ascii?Q?qDXR0ho5tCwJsOfAOF6TC5A7GUvIQ/XdWq8CeL71lYrNzM7JPU7DhYe2TRlV?= =?us-ascii?Q?aUlTUfXVZnJrASxLCC6K6vHsWjUPwQWrP8DFMgRfyvLQMgWG/nC8bcau8MfW?= =?us-ascii?Q?qZWlgADrJj9vLB23ofOjJ0EQlkkxcojJBJjOovuwCUVuuVVnctE0FiEfkQn7?= =?us-ascii?Q?Cw8h3yqfHvbWyuIW576Capafr+PC5Do+mLPWoX4wiJ/SZLT36bIVr3nb4tOC?= =?us-ascii?Q?YB7OPTKbeKJFlbussX4NUZ6gAWaM7aClArcQF+04b1HIEkGeajlYKkUxpLXG?= =?us-ascii?Q?ap1Lel538ORNZSESQKzNdzZtQ6QAVeRJTZsoJfQOOz1v3gJ1BX9z2h9duD2a?= =?us-ascii?Q?CzqfhezmpBpxT6iiBd5FvNQQcc2I2uXvGwmbVHu2qyVX1Ru4PMaFlpy6eKlS?= =?us-ascii?Q?bU6XFMyVzYhfySrd+iT5wZrLGbVDtdZ6WwYja4OFaXneRAZjcsyGy12Yb+v4?= =?us-ascii?Q?/MbA4o2eDgMY9ypU/MR+XVTTT7zaskEjrfDnGjxDrk/S1FDlxY9Vqt84f43C?= =?us-ascii?Q?A7TCTtYfTW9aTmf4YcCs3S8mPKCDwcPRLlbXW4Z28kpu+zT9zSQ8REE9i9C0?= =?us-ascii?Q?0/LrS9xC87t1wj8aEzMBY8AK48EiTuy/zi5nP9bQva6OoPegz0uNNmW2+HLC?= =?us-ascii?Q?nZH8GgsSfcknhYJkhtlwg2FeU5PN+82jgKHSU7NDAVmNdkofm6syHIW8G0zh?= =?us-ascii?Q?sY61xvcl2cg/Mx0F3t6Qe7WSPYB/HUf2WTyeA84wNIzTisRsNcxBhgEX7Axb?= =?us-ascii?Q?go1rhY9h9H3PrgKsTRhCeWSld2BtD+suhwM7MczYQjKSr8XhJIXagzmF9sWl?= =?us-ascii?Q?AJ4RBC8oDWbA+yvtdjMCbJJtNLaNSBPPJQK8r50bN0ce/okJLmUgGsu2akgj?= =?us-ascii?Q?+gIay/uvFX12bKT7lEcANJHnGuWc4SdTLFxCmXqNMrtROsqbzscJT1B99yhA?= =?us-ascii?Q?J/KIlp1DnX4UKSQxtwYZxoHFrm7ln4e613Oj1gsyLbo+sbk5P/cbLaGJFsOF?= =?us-ascii?Q?a0P8w32NagOEwDvJN1/sCf68EG9Q0ENvctPPtwAu3vWz40Z56aatFtoG+HLv?= =?us-ascii?Q?f7i6ggTErTSYKGxtdFscli0SC/eR3PqraPzKTOv1zNMiTkRh5KJs1EdNgxDG?= =?us-ascii?Q?E40gCf4GWxYtWIo3j60raZFJvs1F0h4RPZ/0vi5epacdSgbRRRmEl27nHuYr?= =?us-ascii?Q?I6ZvjvUxSdNulWgD4oE=3D?= 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)(10070799003)(7416014)(376014)(366016);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?Tql7nvQsOTEILhwIY1NaR+emmLNFysSoVoMz4aj16qXZn0S7WEtDYj3PDyxY?= =?us-ascii?Q?kTLzojcmJ/3gAZpsd64jCb/MKzliw4gSct1WY5keoAFWIfLbj4L8yT+89gKU?= =?us-ascii?Q?QNE2lHX3TYSmpPBchEtek/7Jc5uPJdHdPMGq7SGgGB4fXmx2N6dEAIig8ofQ?= =?us-ascii?Q?Qf6IFGH/iC305qBkaS90wpoO5FI8JEO0LJsQVEAVhY+kpsHvULLL/3J+TO+k?= =?us-ascii?Q?UbFJ2/5hel85UzFNDnm3rNIMHMQonSBxBysCSP2ynC5suLAx6BHzKdsQkv4h?= =?us-ascii?Q?uU5+WsfepgE4UyemAeOZkoZzjlhX09WWYD7UqNxwyony8+E+QYDGcOz0rhSj?= =?us-ascii?Q?/n6ZO4PHuXb/znHuszB5Ckja5D1LImgMYJdw8S8ocKM50Ll2xljkm+eZxKPx?= =?us-ascii?Q?cenTz2ArugQ9zZrnsbINZ2pkxJAhGQZVeDSfiJtmUnCdMMIxAuV1yjigezSb?= =?us-ascii?Q?7a3l9G8eXjJNZPswb+BvliAn0c9yXCwkM60jveoXffWZ5YjNNOOKTuLz6n2K?= =?us-ascii?Q?PjblzD0R2XAC/SemjUO2AMql6kJgK9AkrqN4nCsiFkjK+nQAhbEp1iBu0/qZ?= =?us-ascii?Q?YQPSwZu316RawazP68T90ZRwJEw44gc+EnQNg7KD4CYCZj083K2NnDgLBXf3?= =?us-ascii?Q?wcsi7QUG+e5ZI3DpYDnTujRlpa8rCrXFABNwWGCrx4rDKMV8hMju8ta6HkgS?= =?us-ascii?Q?tfRhpfV8MFCozhxOwerwW6zXgTDA2cIsVNC9qM4MUHn+1+jqgSOz+JqqOyqB?= =?us-ascii?Q?9uJdJZDz4nOJw4fDPIH/TwXi6hvdn9vdkkYr3QaV+t/04xmyene0bpKdbFtV?= =?us-ascii?Q?boEL5lNh9rIin+SVCOB01bmCZ/H6+qaoyliqgQfWAHIJMpgprDrqfF4Pblt9?= =?us-ascii?Q?AvjFhHIhZlZVXe6DOdvLkd7kOJ5OHrqgyH8nFQgMU5drpIV0cVoRUn8YKuoG?= =?us-ascii?Q?fbAMKvAkUCkeYwJToCQGQdaBjCvYCsdcqloL6xhxzd1Eq4WPkuqFZELUBNgn?= =?us-ascii?Q?npSsGC2gIu/PP6Qvlidpb1lAQigRNSi88FjZB8z8chSFuDbivFMQ2cc7Pnp1?= =?us-ascii?Q?07Zo0og90NJFbji8GpMeTCeGxrlPKAosoeVUEWyV3fOf5xIXK32OEyN3duZR?= =?us-ascii?Q?92I9Tz62+SSylYKmMmPgnGr135qGocmycsdVDZuTFkvLis9SQvjYZuND0gzQ?= =?us-ascii?Q?IXIkjE1N4hGlx/PRHFCf7e06X951uXpTVlbdsDG/ndG4zhQdUyku9nE7ksK9?= =?us-ascii?Q?wy0Qj2meWCuTOUjzpBby/IXYsQSYAmhKU0GMB2GF0dlHs8xuQGgI+A0iHmwE?= =?us-ascii?Q?4BNefV3X8I4hgY4xWzzo5K3VjFHpxSpXholjHZ4iq3v5SEQRWIGMpUcqdgzr?= =?us-ascii?Q?AkOUNliPgBaWVVMg5jTbKQXfvepYHRC4lmhZ4Wtr+DEQy0ByJJ0biMLavO3z?= =?us-ascii?Q?yCwrAp9mCKcTOpQ1wMkRXV8EHJzGRJz5X1xIIUht91qt+Km3dKXN3Er84U13?= =?us-ascii?Q?gF1AePU5P5Frpl1RAMrdEI6fgqx+GaoLALHoC10DJXQNaLEEnKWL9mrujSDg?= =?us-ascii?Q?rrcpe8Gz+qODYdYF6NevbkTGxWRjlWR+FOoKNqOoBRiOY0GiJI7QfL5yhtKH?= =?us-ascii?Q?F2w8/DBOxzOdYUejekX1VpzDbe63bCxjv4/PcLnUprE72zgUzJGn/QqvTJnz?= =?us-ascii?Q?ZdZZ7fWtjDtMvMmgnWH48Szo7lZgHycNq2kjQ+gPmYA+Tt4SeuooxkebgdJd?= =?us-ascii?Q?CgfLZQu9hPMyCbMGxeFnrIdUW+XcADOiwwYsDkZi0Z5dNlkflTOt?= X-OriginatorOrg: valinux.co.jp X-MS-Exchange-CrossTenant-Network-Message-Id: aeff3be6-6cb1-4abc-1105-08de63fd5c26 X-MS-Exchange-CrossTenant-AuthSource: TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Feb 2026 14:54:55.7444 (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: C1KGdN1aDgCk1Sc3uWFkrOLC6nCG9q4pFQvNORj7ohKgYZRFW3FtRUnV+5G3RypGTloZr51diBkCv6nliBQNaA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: TYCP286MB2976 Content-Type: text/plain; charset="utf-8" Add a new pci_endpoint kselftest that runs the EPC remote resource API smoke test through PCITEST_EPC_API. Signed-off-by: Koichiro Den --- .../pci_endpoint/pci_endpoint_test.c | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/tools/testing/selftests/pci_endpoint/pci_endpoint_test.c b/too= ls/testing/selftests/pci_endpoint/pci_endpoint_test.c index eecb776c33af..0904d262c084 100644 --- a/tools/testing/selftests/pci_endpoint/pci_endpoint_test.c +++ b/tools/testing/selftests/pci_endpoint/pci_endpoint_test.c @@ -278,4 +278,32 @@ TEST_F(pcie_ep_doorbell, DOORBELL_TEST) pci_ep_ioctl(PCITEST_DOORBELL, 0); EXPECT_FALSE(ret) TH_LOG("Test failed for Doorbell\n"); } + +FIXTURE(pci_ep_api) +{ + int fd; +}; + +FIXTURE_SETUP(pci_ep_api) +{ + self->fd =3D open(test_device, O_RDWR); + + ASSERT_NE(-1, self->fd) TH_LOG("Can't open PCI Endpoint Test device"); +} + +FIXTURE_TEARDOWN(pci_ep_api) +{ + close(self->fd); +} + +TEST_F(pci_ep_api, EPC_API_TEST) +{ + int ret; + + pci_ep_ioctl(PCITEST_SET_IRQTYPE, PCITEST_IRQ_TYPE_AUTO); + ASSERT_EQ(0, ret) TH_LOG("Can't set AUTO IRQ type"); + + pci_ep_ioctl(PCITEST_EPC_API, 0); + EXPECT_FALSE(ret) TH_LOG("EPC API test failed"); +} TEST_HARNESS_MAIN --=20 2.51.0