From nobody Tue Feb 10 04:13:08 2026 Received: from OS0P286CU011.outbound.protection.outlook.com (mail-japanwestazon11020117.outbound.protection.outlook.com [52.101.228.117]) (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 896EA376BD9; Mon, 9 Feb 2026 12:53:23 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.228.117 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770641603; cv=fail; b=qThT0tqVJfu3CLnek8wdYz7PqBaG8PiXtkRL2/9uUdf5QCRjr7xr3Vqo4faeFrnwMGCVHvfNN9K6kRXXDoVtoq/oIZqBy7N0DzVs18CZI3XH+le6obIXk0YGInEvX5QYzQ24P6Vfr0ZUs0voQvHbBsY+1xnDd2MS6Dkf61p0VRw= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770641603; c=relaxed/simple; bh=LMPeG76zaN7/1vJRvj/3N35XHgYnWdSP9xVsfUjo45o=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=dkRHmNjO3sICLE9/EEfaf7VWReg/g0m6SaWp6mnY49wAV4gukP/dbQW84C73gisFDvY/G6uJQ4Rb0zF5FKKwaXBvoDG65g0VIUaVKeyVRoNSda4cu6b9p5iZXw7CgVdec/baXDWosrd71ZiDD5n9Qn5743PuywLaiye9MsMKiVY= 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=KvHOD8+4; arc=fail smtp.client-ip=52.101.228.117 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="KvHOD8+4" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=Hj/vHhDtndAerm3M8U9Gs+B0prPupNoy5V3V04IvMLbwCGHrYwGkiR8uAx3ik7C3aHRWfiw9Avpd2WmUYapiby9sIcPPhDpAGRqHOyFFTB1Hh3SBk/YqgiAbkQW919QnRBr9+pXwHCxyTstDPFp0BLBEXjGdlYAoxi0G3BEJ3Zt1j+KO+8an+xC7zUsQOrbqO7r9oYsSlZ6sDvqUG6OrcokpUaHMyCk4mq0pJDaa0Q6WK/yr99Ilv6DY1IJFcjxMhlBavuP0BAryDDmLGnZt+ve6YXhQDuJh12YSlXcN4KDfUJmamP6aTsgV1Pu1oin7U4q02qQpDbMqyn+RE4YWjw== 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=IGIqxRGFaq1HG5iwebCn64y/g2AUOrVzlmhB8S1cZGg=; b=xO816EJV1b8CdkYirEx7ffilsonX61qcJyfwQZlhRPrNnMHdZLDFiwadBn7n/uSvtteesEZHpL0jO/3urNcnOF/2zWcHIiSkLmyhSnGwtbJpVVtD3MpTCSGon+Abswmf6MoMHlbETMWvG8e2HHRfICRuSnmmvYQWpcaOJYzzt6GPeTedcbj6lypz6D+VKBhScumVxN2A0RV6y0gbuh5aFq5odugEAijL+rglGqpwtXoz/oxbuuJOCUfIexA17C4/QByb38PDP33epCtEUjrqihSyaDXIzhDAvDtyRyrkOfb9y6Tqo54R1KVETacvc/KatJZgKne5OmFRGxhw6uqLTQ== 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=IGIqxRGFaq1HG5iwebCn64y/g2AUOrVzlmhB8S1cZGg=; b=KvHOD8+4UJoRXP3ZC/lZiLuyf3dKiQeMX6Gt/lEWihX2NROIpfSWEichGSoqoBHZx7/ODo8kDofPBCS8Xnnp5chDREoMEBCgkSCb9Nq9lShS9Lol+TVmd6U14TuRK4Dh5C9B7331+b38orXX5C/FAIKAz244lbgWa3GR3OWwWcA= 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 OS7P286MB3742.JPNP286.PROD.OUTLOOK.COM (2603:1096:604:237::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9587.18; Mon, 9 Feb 2026 12:53:20 +0000 Received: from TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM ([fe80::2305:327c:28ec:9b32]) by TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM ([fe80::2305:327c:28ec:9b32%5]) with mapi id 15.20.9587.017; Mon, 9 Feb 2026 12:53:20 +0000 From: Koichiro Den To: vkoul@kernel.org, mani@kernel.org, Frank.Li@nxp.com, cassel@kernel.org, jingoohan1@gmail.com, lpieralisi@kernel.org, kwilczynski@kernel.org, robh@kernel.org, bhelgaas@google.com, kishon@kernel.org, jdmason@kudzu.us, allenbh@gmail.com Cc: dmaengine@vger.kernel.org, linux-pci@vger.kernel.org, ntb@lists.linux.dev, linux-kselftest@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v6 1/8] dmaengine: dw-edma: Deassert emulated interrupts in the IRQ handler Date: Mon, 9 Feb 2026 21:53:09 +0900 Message-ID: <20260209125316.2132589-2-den@valinux.co.jp> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260209125316.2132589-1-den@valinux.co.jp> References: <20260209125316.2132589-1-den@valinux.co.jp> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: TY4P286CA0079.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:36d::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_|OS7P286MB3742:EE_ X-MS-Office365-Filtering-Correlation-Id: 1a93f2ec-af4c-4409-b831-08de67da3370 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|10070799003|376014|7416014|366016|1800799024|921020; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?jVPuRA5WTXxAZocIt6pioR9aWuLc3mYh6OWV7P4uv/aKKmXH3PItM8cye+Eo?= =?us-ascii?Q?qvmYDl9vPg1tLXtUeDanintyNZJ9umHk5B+zSgnPDOBNtd2XZTmSH+WLRMpz?= =?us-ascii?Q?+rP5BZypzrhhb0IL9JaPSwzD40S1WBLJSREn3akKXo1IPr2fxoi9LSpAUFNX?= =?us-ascii?Q?b5AIbrlSZwniT5Pco3lDow0MH2IwgtYD4Gg3pUghYib/BKjNpyK2hIJLVUOV?= =?us-ascii?Q?vziZuKj/WYb3ew+y37Zv2vtIEDpYPUUIyM6XZnb+FQ1T6C9IoEe+j/yiXYol?= =?us-ascii?Q?urv8uYDq/5fvKf82sTj3birJ+RypwGg6FKgmqXRngSTm9sk56IAUIQc+ErrN?= =?us-ascii?Q?rSlEnlUVsoLyopzwmHODH0IEoz6j5Oscttc2666ZHMgzmczEGU42c6MoVx0o?= =?us-ascii?Q?PBjmotkp8VogqU1qhUuBVhDTt1ljQNCFIWfW20KeSM2bROxE/JL5Y+ghe4lC?= =?us-ascii?Q?Ja+NnhVPU+Dg5PPu3hAyJIxq6E/VFJMojg+KzC30R6RnMt6SgqJIB8QF3cXC?= =?us-ascii?Q?cTqU7/vt+wBtqdO978jBjXtn7N/FT0ObN8t41PggYSgez/EuchmmEb3ZC0eq?= =?us-ascii?Q?yyXsMCgTSj6qSm6oXnIyt1iZDegILipveAG1f8KaS9wyU1+FpC2yOewh7+tZ?= =?us-ascii?Q?JXjpUiTT0MfxOUmttHvjDqn/Hg1cnksZvdUQK6e72uglFHKg9OK+k2MjkGvU?= =?us-ascii?Q?LhllWSxQ40fwditogPtOn07nDS7QNuCcz7h2gRawocrC0X6Xid9yWnsA57Wr?= =?us-ascii?Q?AuCOC+zh6X69kRSyqr7niL2ZK+OLzNPKdahEIEWsUgBovFpQ603QF0zyqWSm?= =?us-ascii?Q?cEPjn7Blas5t7HzAlyCxh63ZH9MJwIMlf3mBzVa2hzTSGMmJxllmF+0sEl8/?= =?us-ascii?Q?m5CtApBqhFCxjeyvUeQ8s+qEE7sdq30aBsa9xUVSswfJtvdOp6j0PQDYMdjH?= =?us-ascii?Q?YVxyxFQXJwrOuOvQd7yileVruSHkcKMF/Z9yafXFm4TA5oumsFOF3Zpt+pTl?= =?us-ascii?Q?RELhdGo7Y6VgcFv/z2F0dNU4DLc84Kc4ZhuuOl59piR1PP24zsT2QgPLx7X3?= =?us-ascii?Q?Tq5Zwt5qOd9S5BDO6B+ABmtCX4fEHqCvpeI8J39IcuHtKN4gdpHGX+nh+yUK?= =?us-ascii?Q?5xGnUEVYPxhJNmNOTd6xKM/NgVikITMpcH0amw+25tygELFbnJ4ACPn754Ss?= =?us-ascii?Q?xoSpOjbLQWxFwjBfEeWhyVW+N+74jYU7q0aNS0vRrd+M43+7efcwoHz/p5U/?= =?us-ascii?Q?TkXyz9E+WMYmnvRt2CEHWBL8praDqjem+mgsRqnpjOZVZmakF/2LCjCUjvGa?= =?us-ascii?Q?njb53uGQOU2Z1gS96dgjFGvSaK0dI3ghiHsrj8VNuC8R4amBEvF6dNUhuRSg?= =?us-ascii?Q?wRTh7eyjipKf/cmVpFBqrI5R6QhtgrdrwFd4iUBW0TC1BkPJtS1oRvKKenvH?= =?us-ascii?Q?RhlbszaFHcybjt0DVh1F7Zzfe4iE4lMjc+aMwmDUJUYVQPNM1mIi0HZe4bMx?= =?us-ascii?Q?F8D/1NkeMnQuaxU7SN83/WEkO/hujhmLu6PVL820/wnY0FRq5Kr0/kv4B8aP?= =?us-ascii?Q?23K8CrGVV3uKjJ6pItGF1Ec9zTXgK/XphUdF4TDrwykQByp1lb5lRkJXJqMA?= =?us-ascii?Q?Tg=3D=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)(10070799003)(376014)(7416014)(366016)(1800799024)(921020);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?xyCSoTkQGChxdJ/ZDrSTIjKL/+WlYAhR9aALQ4+QOjn5z50w8o+X5feeswIP?= =?us-ascii?Q?5wNYrCy/nnJcJDlVgHvuFApLaVXh9yjRJjG6Pao90uWcyE9eWrLT5xKgLbqH?= =?us-ascii?Q?40fycIGvAVRyBvEc6tHyMkXreDZLICtRr5XshHTetoMPjvhWG0HpAU+HyzG3?= =?us-ascii?Q?PaC8F+QU12s7NCEjOapEOfYulM0gx/dIJj8ISJoTbK2gKfqXRDxZ7YdVaqfF?= =?us-ascii?Q?/80YcUUhBU/A3y6xQP49khKf/aXwlqMcxPOe1hvU+AthfK8bzQLHlSMiaxZ5?= =?us-ascii?Q?r3KVwWzozb6cAkUpdU74OAvHvJMvDDx8pGcGVD61XmYV5b8SzbkHTGnPgSsw?= =?us-ascii?Q?rEMdRT171sgIBHbAKOqmYky0u7DqEy9sn26oIzARddqv25/mBb/rk6QZTTAz?= =?us-ascii?Q?mlhQp2YPFljXcfKh1npsLruJJxRKLrmc3Usj1v2aPoOgKKGN0spoCHPsaOgD?= =?us-ascii?Q?erEGfYoZNxodcFk3bx9OepB8gnmV+CxGQgpmHO81BOB9XpxQskL0b8dVnz96?= =?us-ascii?Q?7ziU6kNH52kfCJc2O5yz1NuB5AW4xdB/8TxvDGxfaXrQstXFLvL9i0ywWzyJ?= =?us-ascii?Q?fTbdb0737CGY1mvkn22OrDHbC/6fP7BCmqT1CIx6D79Iu9DRgy4GDfqtNTuJ?= =?us-ascii?Q?9pQ5wdzllqEmA+d9JpO5f6ALJpNyLUdqif4w5GAebVblfx/hAybrYqQvSUdW?= =?us-ascii?Q?iHrpUyChdepF1QM+VeEVCWvtJK5ulzAlFicAWxWzpAGQBWANCAxcG+2hhk6A?= =?us-ascii?Q?z+v7rjP6n7bDUo1wshDm3QyIIVjTsQJb8aqDuprfb8SuCF/ys1OClRcvbldk?= =?us-ascii?Q?2ZQaBZUmdTncGgFjV4sKsemKKtkeSuhRBXStb4H/vn8IJvxIfK24NRPtzYSJ?= =?us-ascii?Q?+o9P/ipGesW2/AC4+EF20qtyNcXetVjp4Qy0Rr43HMKfI8W4kfUWuV93Gp72?= =?us-ascii?Q?PsdNYzFViJq2jc76yEAfJzN+8q3B6mYK9cjhL6syxkPcZu56oI6ZL72fxQN0?= =?us-ascii?Q?npx5v0p+w8sLx7FDqu5BEpceS/AzKsycw273VCPzdNKHQWPMSQnA93x6tiWD?= =?us-ascii?Q?0YntR9em4D9EzhvnMnPV06IafwZ91CrPoyHyHUOBziucR28L3ck66Auq5kh9?= =?us-ascii?Q?2EWL1ryIjpHL8WPrXtiLf18cgBgmsf9vehFI/uLinYjEmceeKJYL+nR6D5Gm?= =?us-ascii?Q?PdJjHv1mhnKMUAcsJDADTYZNIJJ7DMnyxEzhY1zwZCglN90teWGSypiSmbHe?= =?us-ascii?Q?6KKMwlgb5mkWrUU0QkNe81ZMQVtZGXvEKowiZQFArUNCRM5FvtyHOY0UtnBU?= =?us-ascii?Q?N9wlL99XbSINl/XW8+K/aPK3wnSGRWDSAZF+uHjM5yRyKWzcLIIXyk/Xl3o6?= =?us-ascii?Q?39WMEegZHyreiUlFe+EOBCO/m2lIAsfyqgEFI+RollnJm6N+leWauwaLycPR?= =?us-ascii?Q?9GkoY/hAxD6DGN7ifGxYrUhBrCTIU6zm7qjpURvHyrJNjS67qGLOEasoB0AG?= =?us-ascii?Q?ZbF1jivMUCiPkU8gigMt46U4Omdam6B4/7G8a45XpJ46wzY7RebC+rYcJBcq?= =?us-ascii?Q?Q6/kTVP4xlSYtPSxH7oubNZPsgP8aggV0ej62ipum5x6sJ6G/IzKAAZdan/V?= =?us-ascii?Q?9ci7J9OurhpLGcWWFvmmAQHtVb7dqk1AvPZgVI4gXaPLO/sUumLrNbjZS8+I?= =?us-ascii?Q?rHimtZ1rQr9HTBvV1R7s7nOuhCOMn8gGNWYNgP28cv0AcTHopP6XH0Vh3uIF?= =?us-ascii?Q?blMcn2+N0JjZBA1/TJp+8m9WGyndjeECZIVKgEQ4MShdwWXG6OpI?= X-OriginatorOrg: valinux.co.jp X-MS-Exchange-CrossTenant-Network-Message-Id: 1a93f2ec-af4c-4409-b831-08de67da3370 X-MS-Exchange-CrossTenant-AuthSource: TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Feb 2026 12:53:19.7231 (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: uf61fPEZjZO+RE416dlhFKJqmu4xgNdQrXGQpLCR87wq2uCSFslCHSCJDGZ3nRkeNlXhLrpu1UGf3alJ1Cv2ag== X-MS-Exchange-Transport-CrossTenantHeadersStamped: OS7P286MB3742 Content-Type: text/plain; charset="utf-8" Some DesignWare eDMA instances support "interrupt emulation", where a software write can assert the IRQ line without setting the normal DONE/ABORT status bits. With a shared IRQ handler the driver cannot reliably distinguish an emulated interrupt from a real one by only looking at DONE/ABORT status bits. Leaving the emulated IRQ asserted may leave a level-triggered IRQ line permanently asserted. Add a core callback, .ack_emulated_irq(), to perform the core-specific deassert sequence and call it from the read/write/common IRQ handlers. Note that previously a direct software write could assert the emulated IRQ without DMA activity, leading to the interrupt never getting deasserted. This patch resolves it. For v0, a zero write to INT_CLEAR deasserts the emulated IRQ and is a no-op for real interrupts. HDMA is not tested or verified and is therefore unsupported for now. Signed-off-by: Koichiro Den Reviewed-by: Frank Li --- drivers/dma/dw-edma/dw-edma-core.c | 48 ++++++++++++++++++++++++--- drivers/dma/dw-edma/dw-edma-core.h | 10 ++++++ drivers/dma/dw-edma/dw-edma-v0-core.c | 11 ++++++ 3 files changed, 64 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 8e5f7defa6b6..fe131abf1ca3 100644 --- a/drivers/dma/dw-edma/dw-edma-core.c +++ b/drivers/dma/dw-edma/dw-edma-core.c @@ -663,7 +663,24 @@ 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; + + /* + * Interrupt emulation may assert the IRQ line without updating the + * normal DONE/ABORT status bits. With a shared IRQ handler we + * cannot reliably detect such events by status registers alone, so + * always perform the core-specific deassert sequence. + */ + if (dw_edma_core_ack_emulated_irq(dw)) + return IRQ_NONE; + + 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 @@ -672,7 +689,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 @@ -681,12 +698,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; } diff --git a/drivers/dma/dw-edma/dw-edma-core.h b/drivers/dma/dw-edma/dw-ed= ma-core.h index 71894b9e0b15..50b87b63b581 100644 --- a/drivers/dma/dw-edma/dw-edma-core.h +++ b/drivers/dma/dw-edma/dw-edma-core.h @@ -126,6 +126,7 @@ struct dw_edma_core_ops { 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_emulated_irq)(struct dw_edma *dw); }; =20 struct dw_edma_sg { @@ -206,4 +207,13 @@ void dw_edma_core_debugfs_on(struct dw_edma *dw) dw->core->debugfs_on(dw); } =20 +static inline int dw_edma_core_ack_emulated_irq(struct dw_edma *dw) +{ + if (!dw->core->ack_emulated_irq) + return -EOPNOTSUPP; + + dw->core->ack_emulated_irq(dw); + return 0; +} + #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..82b9c063c10f 100644 --- a/drivers/dma/dw-edma/dw-edma-v0-core.c +++ b/drivers/dma/dw-edma/dw-edma-v0-core.c @@ -509,6 +509,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_emulated_irq(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, @@ -517,6 +527,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_emulated_irq =3D dw_edma_v0_core_ack_emulated_irq, }; =20 void dw_edma_v0_core_register(struct dw_edma *dw) --=20 2.51.0 From nobody Tue Feb 10 04:13:08 2026 Received: from OS0P286CU011.outbound.protection.outlook.com (mail-japanwestazon11020117.outbound.protection.outlook.com [52.101.228.117]) (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 2FC93372B5B; Mon, 9 Feb 2026 12:53:23 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.228.117 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770641603; cv=fail; b=sUC6SqYMQ2K/bVxdF24kW4nDsVV6MldspUZd6+5P1K4dv5ZOhMNlU0VvctTgYEoW3XhRL5AVtuNdI9/JLqVU38nTZs3/VpW8Sx06aDSlMam0W8JU6fgYhSbLZJmFfUbXGWyjf0ExL+FwIDeRQL207OYczI95LfwGQPITN9ukKSw= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770641603; c=relaxed/simple; bh=HD8OBlQWTHnJnIw3Ox7D7No03nJKPfIIqH2+VVElxQ8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=Ir5vvdwVJkko1Y1RzeUgNuLc6FISP4JTXm6M4StceR7TAyaelgptN6CgZcLw72Ir1AxIKSPT0Noq0O5x9b9Gay58FqPRyazFpE1ioMyeY86GFm9rSXxveqR94SkNt9qmlsOzaKJnYMHjKzc+HT6RTE0xEa5x+lldS1Yq6bSEP9U= 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=WeuOcIe9; arc=fail smtp.client-ip=52.101.228.117 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="WeuOcIe9" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=Ewsc1e3bXB2UbI/FZpfve+MQkhXau/Yz9lO+NC79Bx0GRoSCQsMRzdLsfICfR7vx4+C2nLBYfvhnIcsZcKUnEDPtp16ieYw3fD6Vykb42yfUyQY/Tc4XLVBV7ZhrvYm0fyb667wJl1AKwXRJusWYt8uyeCD4VwyFQttfb+NNoX3s9gsksav1yB0NDyukJqOxvR2E4uaOEspjZuB13tcQQ4am50iXeHQIngA/ruBVdGl+i/Tou8+cRO9HJoymzdSmgxbDIr6iqzalK6GpogGjOHxGgXT4y2HCkg/Ofn7G6pHgMDvytilJRx+dimulaY3kyVjBo1mu9DW/3UcDwHYAmw== 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=4jNiFyiRP84zNAOUDjXThgyDDoZrcJUDqx+fOsLLy9M=; b=OSb81HDxrBQSTftkc3aX0xYQ3gew8tr+wowtAl4sq9p/6OCoXDY62dkCnFmMfQ8jzlqtYo/qSDATJDwMD4QNybkb/+PXXkXcbJfeeeBRfrEQvLLiPZQQV7n8nopgbMLneaoVZ7yh1HYqSX2oqHnvlrw7CDK+3RMboYVzRkLL5GPAngtzAfx9NS2zMqUbKDAT60qvBI2jWY0nmh4k4I15yr+qiZu0FrIv/aFt66s8aH/BryGSIrEUWvYc21m6WI2vcWt8P9XrmYnPV/H2IkC4+Sq6BsVRMd9hIbWTHQbO4mzdNL+DqPQly614NIZMmTmn0Qm8AJE4l4x0EetMfBGT2A== 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=4jNiFyiRP84zNAOUDjXThgyDDoZrcJUDqx+fOsLLy9M=; b=WeuOcIe9O5zmYddSIP8sxytkBEapRVXX9onTDXxkiJpTcAEXGKD6see/mqKJ4Lrdp0WdlMJDCR62Kf4ENk7W+nACWnoxxk5dA/XMSPnK6Y4afWuWLxztJsQp7EGS9adAHEOPyppqC7l8dK+ZF21Lq/Ye2jZrB0QhpPP+fyas1S8= 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 OS7P286MB3742.JPNP286.PROD.OUTLOOK.COM (2603:1096:604:237::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9587.18; Mon, 9 Feb 2026 12:53:20 +0000 Received: from TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM ([fe80::2305:327c:28ec:9b32]) by TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM ([fe80::2305:327c:28ec:9b32%5]) with mapi id 15.20.9587.017; Mon, 9 Feb 2026 12:53:20 +0000 From: Koichiro Den To: vkoul@kernel.org, mani@kernel.org, Frank.Li@nxp.com, cassel@kernel.org, jingoohan1@gmail.com, lpieralisi@kernel.org, kwilczynski@kernel.org, robh@kernel.org, bhelgaas@google.com, kishon@kernel.org, jdmason@kudzu.us, allenbh@gmail.com Cc: dmaengine@vger.kernel.org, linux-pci@vger.kernel.org, ntb@lists.linux.dev, linux-kselftest@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v6 2/8] dmaengine: dw-edma: Cache per-channel IRQ and emulation doorbell offset Date: Mon, 9 Feb 2026 21:53:10 +0900 Message-ID: <20260209125316.2132589-3-den@valinux.co.jp> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260209125316.2132589-1-den@valinux.co.jp> References: <20260209125316.2132589-1-den@valinux.co.jp> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: TYCP286CA0347.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:7c::7) To TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:38f::10) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: TY7P286MB7722:EE_|OS7P286MB3742:EE_ X-MS-Office365-Filtering-Correlation-Id: 5c959ed9-cdd8-411e-aefa-08de67da33f8 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|10070799003|376014|7416014|366016|1800799024|921020; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?fxy6ltLJugPSOLasYivETk82KHDwHDRr5kaPYPAyTB7dsZlIqW3HXQiDZsE6?= =?us-ascii?Q?jv3LHA34/caT5cV2W44wKQDz/zlgqJM8JQLj7tTehJP0fD4We00MQPwvdmJF?= =?us-ascii?Q?prVNFQOnsif+JlxEbFx3tjbvU5gJ8ADlRJIwBIjiVTI2QZBn+myUVyX71kAp?= =?us-ascii?Q?NauoAZwWKDMlBFrR4eALUCb7kawbpazdNg1Y2talj1lGmQhfDOJ+4EMWgtxx?= =?us-ascii?Q?JnF98KZYGhy0T0APUgw5nt2SDNGd0QkhLRzMuckFxM9mCLjuQyJVRNltBvUo?= =?us-ascii?Q?60LoqGtlx9UHKmt2CftQof9/inolbVDOMRg4Z623S8b2bzBTNgSp+F0+bAB6?= =?us-ascii?Q?hAhKEEp8CHV1w85EJ+zkHbNiB3pear41owYSvvU6uJrL3U4eA6HcwQ8roVV+?= =?us-ascii?Q?nikGrDZO5eguOi3MC6x+Ja2Ceyt25MwRl2JmLb45rmxhF0ofwDPjMY2h7xyX?= =?us-ascii?Q?b98io+VJdGvdzi0esOWKidy18fQNTGUNP8iCyUqBC2TN5mMGqvyLknon7JYI?= =?us-ascii?Q?x/VZPXpVEoT7KC3KZgp8sMH1YiQ1taNE1c1/FPzbLInOMc+VJKE3m5lDJrL7?= =?us-ascii?Q?rUPo6expMJZ+dokM1soDNnCNWa1RmS191j2DMLiSU6us2qclkxqH/THZscSQ?= =?us-ascii?Q?krHpvokq0w+6KcxJop3PhhQPem8oAllkf+21pSHTKi5Fdh8LjTfGryOZiv4h?= =?us-ascii?Q?J+cGOxSbE9Fvcfo0Sp5xvt2WG+pH0QYP/zu0E4GNpqcsMFQoDj5qDcsKPwW5?= =?us-ascii?Q?8zZSODhMoQ8oy2gur5/yrSZPDYyJkt4AT6QLGQ8wOn9Up6c8DYIvXnDDVZ+F?= =?us-ascii?Q?YIsmM4DbAJ+QZm8k77LUc5Cx/K5fbSj1OYZNrKZqwiGMGrE4DsDKMt28jjGC?= =?us-ascii?Q?OSo5y20ZTMZusiR1W4AH/QSP802Cd7Y2d1m+8cqqQQz8thZy6lDcu3QDsnWW?= =?us-ascii?Q?9TZSzTdHuHmq4eVT1w0lx4B8A/C7utJIrRvTrQFCEADh+wQ7MWDd5o+6L8bd?= =?us-ascii?Q?yJzdrapYDqK115BUZ4s+mnP4PCreiq33Ys8Hi1uKEnCua6NtYhh7OY3lBNer?= =?us-ascii?Q?fMLiz10MHATLoXSfM1NAzNZ3w5my24DAhJFrO6OoD39nx8eLqzRo6iDF8XOQ?= =?us-ascii?Q?Oib/6PRbgYBd80cYEp58JXDRfhwVbrVYEF9BwudTVNgVWjrhrOi7RgkBiQp2?= =?us-ascii?Q?zodq1iJO9EKbmAOjuYQopmPj2Q20RAp0J8Nqj0FbeXKp6oJVlXxFusfhbLsS?= =?us-ascii?Q?RsMLujz5E8Ouw6zxPdRhOZO08zbbtTO32y4wTWm2OxPkNY8tbsWyZbTDF9fz?= =?us-ascii?Q?z4q5KP4Q8GUs7sQWMyP2YR7OFOtVGHMN8MoGDAtwVTdnaXdkgxtTV1SKvHvX?= =?us-ascii?Q?ubBVne+YX86F+ggUgpoMi+DaGqc3wSZo7rNOSK6yJCLBkRViFPTXbR9Spb1Y?= =?us-ascii?Q?cASLwZNpeKZMzv/xZlU4CVMLpVi/8LXWSRHdQmIL4az818LwTjN64rpuoRAy?= =?us-ascii?Q?bJEwlZ4Xz8yA/1V67W0hgRurbE2KoTGf76t6kJJab8Z1e++MGmJpFv7mDxsj?= =?us-ascii?Q?WzunmiEX2iIKUfIkDnlEovHThqKclTeIIcIFM1KObVdX18LTRRGPBi1nPxe0?= =?us-ascii?Q?mA=3D=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)(10070799003)(376014)(7416014)(366016)(1800799024)(921020);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?EQEHYTOBp3yjIGkIWAzzaHgzN0feVOXPJLjMHaR1RvvCsnMcxgQ0kfOVaEtR?= =?us-ascii?Q?N3BYljmNdC9JGjmhUJ3gbEXwOIUK7Wg3sPDhx6c71bQEnjWA0sAbbV6sA9RX?= =?us-ascii?Q?vE8MQxvgEj2pA0sSTsZV72Xn1yVpfP1VUH9W81rZG3frzgh0BLZdwOAbDGRH?= =?us-ascii?Q?iv2bb33lzjL5ZR7yg4JNaGs0qlQ6fmrzzirwhBkRZqDrhq1M7k6EzH/eG23w?= =?us-ascii?Q?NJobvilA1g/gcsh0CgMLqqeBiWTrpKUdN3UV9nOxLaQHLM/o7h+xxxOQK6aD?= =?us-ascii?Q?+1R8ooNYpPiBdoNVc6VXcR4mIWD8G4TY6lAeVVKJvJ6NCSZDc2AYHPerh3TH?= =?us-ascii?Q?WH4+rAMVY1Vye4F/GUPTWNXrkBjV6QeRD3oJxYqLtjq3CkDCtp+ufOpwHN1Y?= =?us-ascii?Q?06sth8C0bl+3Ks/uqpHVY9lYbjQJxBdagUmkwF6tNAcb2EqUZUS7njuNjNyH?= =?us-ascii?Q?Ae4wIkv4ylwtJvLjkHe+Hj4kQJ73Gzm92KtGfssjwqToRyfGl8deTVDgpxY6?= =?us-ascii?Q?EF2qAR47hrfvlc/cCJjBa7jK+SiQbor7YnuQQVZA0/nUYhAm26VTM8Vz5mH4?= =?us-ascii?Q?PsiCtORhUtos2Z5Qa8Zj7QsKtmkvVnL579pqiCKhVlJAuk8bSFOuZNz3uh3N?= =?us-ascii?Q?SruOadTdGccgIWypWh25AYZr+5sawjIMwdVVnFcthAzHcO1XGdRfuL3u/tUl?= =?us-ascii?Q?dVFV90968DQlWDjeFrgBF6FWgaGt3bguno8ujtK++xmj4wIlSA/1/tnIA/oj?= =?us-ascii?Q?06mB9TR63vQAoU7rSZ9PmIhJjLddnp1QEqAly6Hyhou0px+EwG1THNO23kgZ?= =?us-ascii?Q?49EQZpwXKDmDuZX0v3BQOWd+523xF6IlUY4CKGc3wJClmXTmLZEkd3Jd9TPL?= =?us-ascii?Q?xuIRtjPFWDqEmpNoG34z+qUyinX1/s6kgPll20J1mMVrPUIE8f4mZqAIbDg+?= =?us-ascii?Q?phEv3X49h1vFF5mexrsN09BEKzFwF6qClJTLlSKU3R7Jehq3rzRS+ik+2qsk?= =?us-ascii?Q?R9WsWB94usWWVgIV0Zp/wn5WLkqBDHbGR36XjTBjY1iC/Z7H8PIDjJ2doc6J?= =?us-ascii?Q?Hy8oCEzH2unpMYFJ1kEKfZsS4shN4Ce51npqmkg0zy3m5NntESA6YTOIMuJo?= =?us-ascii?Q?xGu9A5tQGOLK/WEKlly5uFZomZPy2kkRarZqj8f6dIp1jYurArrSuRYU15OB?= =?us-ascii?Q?Sg6scTMHCi/tEns8TfLXNBa6d2jls4OnX3s/Q7eyKN+er68kGV7Pe0MmpNnO?= =?us-ascii?Q?Q8y1xCq0LCrjp8Hdg84VBvxLfrxAOvkj/9VfUpcgi9XiDTGWvHN5rx/SLeaT?= =?us-ascii?Q?y3UjcB/3+ljok+WOgVDciiH+xUq48bmUetJCp9qPKGm6A9SWw7pJGBIT2iZS?= =?us-ascii?Q?M/g4OX7BPfvIe1f9hD3aS2UiPEO+Te9xTfL379zTTNbj+7ekajzJ329pH34w?= =?us-ascii?Q?VgbSFEFat0G+nlIjqhUcHEjGxR5yIrHaBX8x1fUB1jfme17chw7w3pggI+PD?= =?us-ascii?Q?sKZlYszKq+OiAZL5Cxw7fyGSe+Vffl4Lz9GU1Mc+zOIryq7qSRrwSS8sX2CQ?= =?us-ascii?Q?IyhZL0lvBmeQGpRAYamDQy0vdDettkcpleyJLRcB/NV40359U5+hq/aOrw0U?= =?us-ascii?Q?Z7Xzo7RZQw+UTl0i0x/5watNKKMljbnyLGK2KHtUMmUgeOvVRyCU7Dvl06Gr?= =?us-ascii?Q?p2duNb0zkjCPFhIrqI4cTDUSijEH7N6xVb9zlmeHpxchZEYi1GimKbOU0yqj?= =?us-ascii?Q?mNKP30MH+1wndDOMWB0EirE4PFLam99zyjHa2QppbbLHg2xr/cOC?= X-OriginatorOrg: valinux.co.jp X-MS-Exchange-CrossTenant-Network-Message-Id: 5c959ed9-cdd8-411e-aefa-08de67da33f8 X-MS-Exchange-CrossTenant-AuthSource: TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Feb 2026 12:53:20.6093 (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: vQsn8Ttcw8rOGCWxthwyGjuAgQJHHme4HhqfLHMWgRYDAATDL8FjLkheyUKdBe3zJV5Kf44EkPIanom4TRTmlA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: OS7P286MB3742 Content-Type: text/plain; charset="utf-8" Some DesignWare PCIe endpoint controllers integrate a DesignWare eDMA/HDMA instance. In remote eDMA use cases (e.g. exposing the eDMA MMIO window and per-channel linked-list regions to a peer via BARs), consumers need a stable way to discover: - the Linux IRQ number associated with a given channel's interrupt vector, - an offset within the eDMA register window that can be used as an interrupt-emulation doorbell for that channel. Store the requested Linux IRQ number in struct dw_edma_irq at IRQ request time and cache per-channel metadata in struct dw_edma_chip (ch_info_wr/rd) during channel setup. Add a core callback, .ch_info(), to fill core-specific metadata such as the doorbell register offset; implement it for the v0 eDMA core (use rd_int_status as a suitable doorbell target) and provide a placeholder for HDMA until the correct offset is known. No functional change for normal DMA operation. This only makes the metadata available to controller/platform drivers that need to expose or consume eDMA-related resources. Signed-off-by: Koichiro Den --- drivers/dma/dw-edma/dw-edma-core.c | 9 +++++++++ drivers/dma/dw-edma/dw-edma-core.h | 9 +++++++++ drivers/dma/dw-edma/dw-edma-v0-core.c | 11 +++++++++++ drivers/dma/dw-edma/dw-hdma-v0-core.c | 8 ++++++++ include/linux/dma/edma.h | 17 +++++++++++++++++ 5 files changed, 54 insertions(+) diff --git a/drivers/dma/dw-edma/dw-edma-core.c b/drivers/dma/dw-edma/dw-ed= ma-core.c index fe131abf1ca3..bd5ff4a4431a 100644 --- a/drivers/dma/dw-edma/dw-edma-core.c +++ b/drivers/dma/dw-edma/dw-edma-core.c @@ -760,6 +760,7 @@ static int dw_edma_channel_setup(struct dw_edma *dw, u3= 2 wr_alloc, u32 rd_alloc) { struct dw_edma_chip *chip =3D dw->chip; struct device *dev =3D chip->dev; + struct dw_edma_ch_info *info; struct dw_edma_chan *chan; struct dw_edma_irq *irq; struct dma_device *dma; @@ -779,9 +780,11 @@ static int dw_edma_channel_setup(struct dw_edma *dw, u= 32 wr_alloc, u32 rd_alloc) if (i < dw->wr_ch_cnt) { chan->id =3D i; chan->dir =3D EDMA_DIR_WRITE; + info =3D &chip->ch_info_wr[chan->id]; } else { chan->id =3D i - dw->wr_ch_cnt; chan->dir =3D EDMA_DIR_READ; + info =3D &chip->ch_info_rd[chan->id]; } =20 chan->configured =3D false; @@ -807,6 +810,10 @@ static int dw_edma_channel_setup(struct dw_edma *dw, u= 32 wr_alloc, u32 rd_alloc) =20 irq =3D &dw->irq[pos]; =20 + /* cache channel-specific info */ + dw_edma_core_ch_info(dw, chan, info); + info->irq =3D irq->irq; + if (chan->dir =3D=3D EDMA_DIR_WRITE) irq->wr_mask |=3D BIT(chan->id); else @@ -910,6 +917,7 @@ static int dw_edma_irq_request(struct dw_edma *dw, if (irq_get_msi_desc(irq)) get_cached_msi_msg(irq, &dw->irq[0].msi); =20 + dw->irq[0].irq =3D irq; dw->nr_irqs =3D 1; } else { /* Distribute IRQs equally among all channels */ @@ -936,6 +944,7 @@ static int dw_edma_irq_request(struct dw_edma *dw, =20 if (irq_get_msi_desc(irq)) get_cached_msi_msg(irq, &dw->irq[i].msi); + dw->irq[i].irq =3D irq; } =20 dw->nr_irqs =3D i; diff --git a/drivers/dma/dw-edma/dw-edma-core.h b/drivers/dma/dw-edma/dw-ed= ma-core.h index 50b87b63b581..82f8f3b38752 100644 --- a/drivers/dma/dw-edma/dw-edma-core.h +++ b/drivers/dma/dw-edma/dw-edma-core.h @@ -93,6 +93,7 @@ struct dw_edma_irq { u32 wr_mask; u32 rd_mask; struct dw_edma *dw; + int irq; }; =20 struct dw_edma { @@ -127,6 +128,7 @@ struct dw_edma_core_ops { void (*ch_config)(struct dw_edma_chan *chan); void (*debugfs_on)(struct dw_edma *dw); void (*ack_emulated_irq)(struct dw_edma *dw); + void (*ch_info)(struct dw_edma_chan *chan, struct dw_edma_ch_info *info); }; =20 struct dw_edma_sg { @@ -216,4 +218,11 @@ static inline int dw_edma_core_ack_emulated_irq(struct= dw_edma *dw) return 0; } =20 +static inline void +dw_edma_core_ch_info(struct dw_edma *dw, struct dw_edma_chan *chan, + struct dw_edma_ch_info *info) +{ + dw->core->ch_info(chan, info); +} + #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 82b9c063c10f..0b8d4b6a5e26 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_ack_emulated_irq(struct dw= _edma *dw) SET_BOTH_32(dw, int_clear, 0); } =20 +static void dw_edma_v0_core_ch_info(struct dw_edma_chan *chan, + struct dw_edma_ch_info *info) +{ + /* + * rd_int_status is chosen arbitrarily, but wr_int_status would be + * equally suitable. + */ + info->db_offset =3D offsetof(struct dw_edma_v0_regs, rd_int_status); +} + 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, @@ -528,6 +538,7 @@ static const struct dw_edma_core_ops dw_edma_v0_core = =3D { .ch_config =3D dw_edma_v0_core_ch_config, .debugfs_on =3D dw_edma_v0_core_debugfs_on, .ack_emulated_irq =3D dw_edma_v0_core_ack_emulated_irq, + .ch_info =3D dw_edma_v0_core_ch_info, }; =20 void dw_edma_v0_core_register(struct dw_edma *dw) diff --git a/drivers/dma/dw-edma/dw-hdma-v0-core.c b/drivers/dma/dw-edma/dw= -hdma-v0-core.c index e3f8db4fe909..1076b394c45f 100644 --- a/drivers/dma/dw-edma/dw-hdma-v0-core.c +++ b/drivers/dma/dw-edma/dw-hdma-v0-core.c @@ -283,6 +283,13 @@ static void dw_hdma_v0_core_debugfs_on(struct dw_edma = *dw) dw_hdma_v0_debugfs_on(dw); } =20 +static void dw_hdma_v0_core_ch_info(struct dw_edma_chan *chan, + struct dw_edma_ch_info *info) +{ + /* Implement once the correct offset is known. */ + info->db_offset =3D ~0; +} + static const struct dw_edma_core_ops dw_hdma_v0_core =3D { .off =3D dw_hdma_v0_core_off, .ch_count =3D dw_hdma_v0_core_ch_count, @@ -291,6 +298,7 @@ static const struct dw_edma_core_ops dw_hdma_v0_core = =3D { .start =3D dw_hdma_v0_core_start, .ch_config =3D dw_hdma_v0_core_ch_config, .debugfs_on =3D dw_hdma_v0_core_debugfs_on, + .ch_info =3D dw_hdma_v0_core_ch_info, }; =20 void dw_hdma_v0_core_register(struct dw_edma *dw) diff --git a/include/linux/dma/edma.h b/include/linux/dma/edma.h index 3080747689f6..921250204a08 100644 --- a/include/linux/dma/edma.h +++ b/include/linux/dma/edma.h @@ -60,6 +60,19 @@ enum dw_edma_chip_flags { DW_EDMA_CHIP_LOCAL =3D BIT(0), }; =20 +/** + * struct dw_edma_ch_info - DW eDMA channel metadata + * @irq: Linux IRQ number used by this channel's interrupt vector + * @db_offset: offset within the eDMA register window that can be used as + * an interrupt-emulation doorbell for this channel + */ +struct dw_edma_ch_info { + int irq; + + /* Fields below are filled in by dw_edma_core_ops->ch_info() */ + resource_size_t db_offset; +}; + /** * struct dw_edma_chip - representation of DesignWare eDMA controller hard= ware * @dev: struct device of the eDMA controller @@ -96,6 +109,10 @@ struct dw_edma_chip { struct dw_edma_region dt_region_wr[EDMA_MAX_WR_CH]; struct dw_edma_region dt_region_rd[EDMA_MAX_RD_CH]; =20 + /* cached channel info */ + struct dw_edma_ch_info ch_info_wr[EDMA_MAX_WR_CH]; + struct dw_edma_ch_info ch_info_rd[EDMA_MAX_RD_CH]; + enum dw_edma_map_format mf; =20 struct dw_edma *dw; --=20 2.51.0 From nobody Tue Feb 10 04:13:08 2026 Received: from OS0P286CU011.outbound.protection.outlook.com (mail-japanwestazon11020117.outbound.protection.outlook.com [52.101.228.117]) (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 E49CC377559; Mon, 9 Feb 2026 12:53:23 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.228.117 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770641604; cv=fail; b=DZsQzh5G65ZdeoksecT8O1TR7EL+KDPpmNAH5yVnGZHWKzpKcV6HjUO8KGVp43saDHMxQxy+WO2+D2H/8N/Jlloj3ZMa+AKjAWowwgYcgNf7efe5UP7gOO2/yE/lDsA1DxWW5LadV7hgfBhlLGevglsMmvJ7tih7SZUA1tTgSas= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770641604; c=relaxed/simple; bh=RuEu5ELvxMj5sc6sxKixNVeRDRkAahwzkDV43tCtMpg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=S+SdoBX4d3cg/TY3/7zQUWDuOWBLdq8ApIWMtNIm3j4HNIw6Mvu5QLLJR9/LHNKAxYIEaYyVdmoABICRpDKXiwMpjioQ+QEwqbqg7VMW0Jh2SQXzbnH8wqmARpoxC30vxyVvR9o6wkj2XrAx2/OEuLKzMzPnlQ+6g300lh7NCOg= 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=fOe1HSJx; arc=fail smtp.client-ip=52.101.228.117 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="fOe1HSJx" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=ef38vF5eQTvzc0uZ/5jpf33v/iYGZXm7lvTt91eNZalCWy/Yg0NHvz21xRvLYvaQLcyBDbyC2Csj+5nHP4Dj3/ccJluJMkJbzOXHYoV5WcLbBihky/Hr45TcCNYX6HlCvXM4jZY5OdBIsGat1LdC2iKjMyPvPbglN5mz4AtcUSNZ4LLNLCDgcExL7u3ofkjpJWc53UzM4GRRRCn4fw11N78xFm9crq08unLUwYqCO5SzTXx2XZmD+ETXW1N5kH2TFPaYzU2b2aHWzSsv+VQ/SQsTcVVfvHCNuIe/RwO8yR1owRw5grJ6WcDOn4hiS9bMH8pib7HlxFr+BnjfaT5/YA== 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=yMsq/VHFkA0P4T3E98nvet/M9krabS6F1m1j/RtHSWY=; b=qnXkkR3NPfNuxOAQdDN56PtXicwnvR8q6WnBv0K1whuPlF2rVNadUac/7c1xGFTzf13Nl5UuGf/8vZbX0fn2E2DxdjnBmuLnYuZUuo/Gh0d4Vt9htgZo6E8YlziI5fNvJPfCiZM0MTiKaN4mfhwbE6nnNq2zygB1H8hqfm5NO/MK4fvfIVd/R/LnVVW4WlXOX8byKrdlmQX8F7351eUWXLuy36zGbKQkC6L8xgjsmSF8BRItfud6sn0uLq97m6PdMbJ+R6RiHU/xMiF+8RwU9LptJAi3CCVOjNTkgRWsGlkNz/OR1v5KTNX4SkrgF4QnXlr2L3tTcCAfV8FnQZuUBw== 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=yMsq/VHFkA0P4T3E98nvet/M9krabS6F1m1j/RtHSWY=; b=fOe1HSJxSbQ3XrKMa/X8QVXecnTP1YNFkq2z0OjAFUfkdmgDjvrWTkFUxjkMGkBmMWg8QUaHuUxSiqQMr0NIvl6hgB9NV8kavYKTMz6rJ3gmWhKNATEFWvEUqudT0VR8NaFhpxsB0H/W1tUd5xpHNEe5oYsUtE47X8Zca+shgUM= 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 OS7P286MB3742.JPNP286.PROD.OUTLOOK.COM (2603:1096:604:237::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9587.18; Mon, 9 Feb 2026 12:53:21 +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.017; Mon, 9 Feb 2026 12:53:21 +0000 From: Koichiro Den To: vkoul@kernel.org, mani@kernel.org, Frank.Li@nxp.com, cassel@kernel.org, jingoohan1@gmail.com, lpieralisi@kernel.org, kwilczynski@kernel.org, robh@kernel.org, bhelgaas@google.com, kishon@kernel.org, jdmason@kudzu.us, allenbh@gmail.com Cc: dmaengine@vger.kernel.org, linux-pci@vger.kernel.org, ntb@lists.linux.dev, linux-kselftest@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v6 3/8] PCI: endpoint: Add auxiliary resource query API Date: Mon, 9 Feb 2026 21:53:11 +0900 Message-ID: <20260209125316.2132589-4-den@valinux.co.jp> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260209125316.2132589-1-den@valinux.co.jp> References: <20260209125316.2132589-1-den@valinux.co.jp> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: TYCPR01CA0082.jpnprd01.prod.outlook.com (2603:1096:405:3::22) 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_|OS7P286MB3742:EE_ X-MS-Office365-Filtering-Correlation-Id: 36f4d9c1-3fea-4cd4-2730-08de67da3470 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|10070799003|376014|7416014|366016|1800799024|921020; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?2iJC6mdFuL4OByKhcOCbV7DgF+5nNqMEXq8oWe96sqSmF71mlBJrLmPz+k4Q?= =?us-ascii?Q?/6VK218Z1ABLWZofP1CZ+FU1YDRgTVeqNNWUDZRpZdia9i3RHlOHs64cwbbT?= =?us-ascii?Q?0j4KiiKX+QN7Uz2tLamEIe7Nn0uV+aJXjhtcVoGnA+h9JRlAD3n35DCULNqh?= =?us-ascii?Q?R3b2Flslw8tgPEeQ7FfuNr31OXGd4aJ6+I73IDZhUf4hkfytghxkhAQu2jvj?= =?us-ascii?Q?GyRdM7i5oWWSkcmFoaSvtaiApGdaDxhNaai5AIQQZmo0P95TrGNnk5Mqrjqi?= =?us-ascii?Q?PiZzut6TUwks61tvDz5VI71kQYF6GVjCHsgleo0uXBI2snRaSD420jW7AZJk?= =?us-ascii?Q?SV8zzhlMNgWONNpp+AdHvo9cOQx1xcnGkorziNuWMoOvlbZ/m7tWLbL9hYMf?= =?us-ascii?Q?IGTk/fFBthjqIEmn08tFZrXO7/JNaK6+Yrc3Jy9QU4HMolw4B/IrtM1H+M+a?= =?us-ascii?Q?CvRqWUcbhjPBznQep7oS3GvYTQJYpM9atUjpSX95oiKtSm2EV7PiKV1dIYj1?= =?us-ascii?Q?blTvSCWkysqvEqikEzXIQSoRbv429l2i+2pe+TyJiZAPP/031n49rRKMn5gQ?= =?us-ascii?Q?ZlxOJt8y9RvGIa1SsHxDAivJwMjHK4P/KOrcU5C0SOAaHunYH1v+yKuUdEHH?= =?us-ascii?Q?ID2yvWLJdId6C8VJatvi4RGXZAcPcLdu8EyUKPD3n8bdDWbk4qKnIzUwwt9O?= =?us-ascii?Q?Ngk96hrdNqHBEbnCrskZWECVef8eg3nxDEb7VcegkKV4/xO0NI2t9hw3gALh?= =?us-ascii?Q?lsOkcU5OwhPesl8qW+uRdPg3XqoRfK8RaAUxFtPZAk1zmeXxDZTozT0Y4eYb?= =?us-ascii?Q?NC+GcKX5mQMCxKKPmQhECEpOhFDKt6bl5drl3dTiZQwdGWaOg0/PnGcSS91T?= =?us-ascii?Q?SM5pmQzkUKfrFTNL0WMzhDveiP3yfLYDlgf8WMrv0llU9eZMgVuq8HneTm0M?= =?us-ascii?Q?AFjPxddLqdg03X7ZCWn9CI8VDR1U3Km2tI36m8vfAROrPA+J4ifUQDdDlthj?= =?us-ascii?Q?+0TValHLA8JMdKixNkPVy4MTigiuXopVCEkjg6tuyTBoWr1jRFLyCFTy4V5L?= =?us-ascii?Q?ExSl5YMUjNFazWtNQQEQ95rauGoB2UbP+pIs6MujAzzVuh539kkL5TJwgopS?= =?us-ascii?Q?tZn5qTEbuPVDCylsYJLH3JoARcuDU4umm2hhFhKEayfHie/YLef+OUXIUjBh?= =?us-ascii?Q?8J/eZjKZ7NHG+czMDuf5IvsHJxubrDdBGWPNocC4R1mnESwUNz67i7EOQNi0?= =?us-ascii?Q?9ZTS7qTsdXtj3RuBoN6hRPhObhqZNHQKc17w5WYAMkJpMMEfuA/lICsqHPUW?= =?us-ascii?Q?FUfW1oTy0H3plFc5Uoa3EoE1NvdJuY8iCh0lZvH//t+H6xhSy5oIFAZWC3zv?= =?us-ascii?Q?6Wvl+8DGLo0eSahAX9586OscBdyK60+Rj1Eu0PlcbdkB4tTgq0HvrRgftx3+?= =?us-ascii?Q?bMT3RWyfqvh+DR9hkQbiCH/iEESLpPtqUVwqQj/9x8IksVNiXVl51eU0wgy4?= =?us-ascii?Q?KHpzXx5bZIbL4MORkoYcpywHTPyWZRu84D+Rjo30eaDOZpU8c7Ls8u9rMW6k?= =?us-ascii?Q?vTaZH+TaoVI9cu+EUjr2py6gryeN2GGX/XUBTgl14AB2Gt6jGxlUVsfctYKc?= =?us-ascii?Q?KA=3D=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)(10070799003)(376014)(7416014)(366016)(1800799024)(921020);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?ImRJvnx7AYtqHf20QdzpafHvX5ZKf/HL1yrxaqpWrPm93pPbf3T9cirHBtnc?= =?us-ascii?Q?zk416AX5WFr8IR5/mjlMJwfIqYgEJzz12FnejrpIqrdFawtdIrCo5S6c75Ic?= =?us-ascii?Q?OaYd3ZXJH2hltNrOFAbgyTD2MzKEp1RLHGDFO3jOwspjVmUecsLdjoVwBoRj?= =?us-ascii?Q?PJtegfgJjJhpOKeRgTnqnvM29Otlq/5MbpsOvezCecPurcMC72nW05tR1w7e?= =?us-ascii?Q?u4121HqBFHAsq/wqHa5oXhLdOjk8SsNG+82eBEVOckffFqXx101Jr0+CyI9N?= =?us-ascii?Q?qbzTd9DcYjD+DkpZBhJHmDCCbY5F64rMLtM0bKMw3NiloylZwbWRgFIiucv+?= =?us-ascii?Q?urkXqf6j6aZUt0ABN4eU8ZoRyH7n8MA83QKyw2lh7I2FJNWIAID3O1JtlPrL?= =?us-ascii?Q?lf/EBhCA9npM5dIZIIFGWHgF2bygNMoCwuf6lIhsGMIMHQe+YIT4ulwV29fG?= =?us-ascii?Q?62X0PG09G9sPVM8Js4iJ4vVnHe0dy74h7joko8XojNC+IL5DySkp3N/et3fU?= =?us-ascii?Q?BZiZ367b2ci5cwdXZGaIjZH6K+4JbB47S8Bg+7xEmBgVPh+xp1wIxhYyVU0G?= =?us-ascii?Q?zXqQglwCMC6TfkPS2xak847pZHkbhfbU5vVTd9aiG9pxkk2lcQ3d03n358mV?= =?us-ascii?Q?ju3HPKOmsZROTrcOBid4J/LZq+krKG4G+VyrENS0NwkV0GG9pGC3phFGImIQ?= =?us-ascii?Q?VJC8JnhoAPxseeET7tn8lU1CN95mOtFXZ5eABwRTLHHFrxkJGb4Sz5JC3Gw3?= =?us-ascii?Q?Gkcau/NvpCcx7Pse7GRudf9kY9XBQvI28iB+VnfLzRBZMDPOl2TqJVzJafw4?= =?us-ascii?Q?SEYH5YTGySgxf+wHJXePE8LVO5Ug44vWDWv0DiFmd42kI9WgvoxAPDgJYGw3?= =?us-ascii?Q?kuj34Lp9FnFQs54aKJ7Sodl3hPGm8ylr7UcmXXxAKArxYcYbbK1fVYe3Armw?= =?us-ascii?Q?QP4zYDp14YOPCMEih4+wRI9sLGpY8ZpJxbEWgltOobG5m+ClbzUimfRQFNz1?= =?us-ascii?Q?qQfhGYHCVqPHVdFZyxGkVRkactXOuni98kZit5/2+8Pn40z0iKrysDWjCvyf?= =?us-ascii?Q?U/LIgydw7ZzhCzZ3IPTb/Kpn2tx2B9c+4YNErSrz08ZUuZk2+bohudR8rKkK?= =?us-ascii?Q?T9HD8NeuDrVXUeURvUOH30zUtWq3YCEkc8Mac/P0RNDWXC6cqscWdtwTrshU?= =?us-ascii?Q?HZ4jm7+77nsIyEJwlr9HSWw2QsIGswRW2Q3H516q5kgZV+pmKavOKbmg70AR?= =?us-ascii?Q?9NoBjgkKyKcqhYCptcHlMX3M6PT0nonydVc872Yq8nWeyisp4ArAZdhqVvp2?= =?us-ascii?Q?4Kh1pyhCytoU85sOxGAEfuQg+JR9YIPFfOjBE7N14U+tb23sOfV4B+uifQAN?= =?us-ascii?Q?9F7/SKGxBFDQlJ1EAHT/eQ606cWN3fjfnfvaHmBVfOADU5BcEZCqZdKSYoWw?= =?us-ascii?Q?4LwOjouDxBfKZUw52NxjWKP0u0C++F6q02brZmEKyS9DnEK/ESAeOTZPSijv?= =?us-ascii?Q?chKwRHpMrEwvdAMYn7iXl2RkUPhvxLUsSmaHqteqn5tftsiqFoyBoRNemOZU?= =?us-ascii?Q?Mq4DG/Ux1zQES0Cd1D+ibANAHwnHtmqtwgUECD+9rryeDwz+MYgQFNQXmoHg?= =?us-ascii?Q?CtINcG5J3ersaoYhVY5b2CgnlNsWpdIVZsgab2yy4V71VXFwi25v17A8S75d?= =?us-ascii?Q?WXnyZnBoYlZbTN5SFXKktOvXMqip0zONu+Ox4T1ffOpehGzMzxcbVoInaflQ?= =?us-ascii?Q?dwJ1/xIRMHU65TWs9hd2J81WLgfNU+EL7xldHlVh4jLovBup4Wdn?= X-OriginatorOrg: valinux.co.jp X-MS-Exchange-CrossTenant-Network-Message-Id: 36f4d9c1-3fea-4cd4-2730-08de67da3470 X-MS-Exchange-CrossTenant-AuthSource: TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Feb 2026 12:53:21.4172 (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: SRxHEmudO4QLDB9mbcyRF1vt45LKosmHzRvauiT4qlisByVQWVzfVWF9Jszuu7/bMKxT+D5gp/ngkatAj2oRNw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: OS7P286MB3742 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_aux_resources() and the corresponding pci_epc_ops get_aux_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 Reviewed-by: Frank Li --- 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..01de4bd5047a 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_aux_resources() - query EPC-provided auxiliary 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 auxiliary resource queries + * * other -errno on failure + */ +int pci_epc_get_aux_resources(struct pci_epc *epc, u8 func_no, u8 vfunc_no, + struct pci_epc_aux_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_aux_resources) + return -EOPNOTSUPP; + + mutex_lock(&epc->lock); + ret =3D epc->ops->get_aux_resources(epc, func_no, vfunc_no, resources, + num_resources); + mutex_unlock(&epc->lock); + + return ret; +} +EXPORT_SYMBOL_GPL(pci_epc_get_aux_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..5d3e1986b49f 100644 --- a/include/linux/pci-epc.h +++ b/include/linux/pci-epc.h @@ -61,6 +61,45 @@ struct pci_epc_map { void __iomem *virt_addr; }; =20 +/** + * enum pci_epc_aux_resource_type - auxiliary resource type identifiers + * @PCI_EPC_AUX_DMA_CTRL_MMIO: Integrated DMA controller register window (= MMIO) + * @PCI_EPC_AUX_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_aux_resource_type { + PCI_EPC_AUX_DMA_CTRL_MMIO, + PCI_EPC_AUX_DMA_CHAN_DESC, +}; + +/** + * struct pci_epc_aux_resource - a physical auxiliary resource that may be + * exposed for peer use + * @type: resource type, see enum pci_epc_aux_resource_type + * @phys_addr: physical base address of the resource + * @size: size of the resource in bytes + * @u: type-specific metadata + * + * For @PCI_EPC_AUX_DMA_CHAN_DESC, @u.dma_chan_desc provides per-channel + * information. + */ +struct pci_epc_aux_resource { + enum pci_epc_aux_resource_type type; + phys_addr_t phys_addr; + resource_size_t size; + + union { + /* PCI_EPC_AUX_DMA_CHAN_DESC */ + struct { + int irq; + resource_size_t db_offset; + } 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 +123,7 @@ 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_aux_resources: ops to retrieve controller-owned auxiliary resources * @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_aux_resources)(struct pci_epc *epc, u8 func_no, u8 vfunc_no, + struct pci_epc_aux_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_aux_resources(struct pci_epc *epc, u8 func_no, u8 vfunc_no, + struct pci_epc_aux_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 Tue Feb 10 04:13:08 2026 Received: from OS0P286CU011.outbound.protection.outlook.com (mail-japanwestazon11020117.outbound.protection.outlook.com [52.101.228.117]) (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 4C1BD374161; Mon, 9 Feb 2026 12:53:24 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.228.117 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770641604; cv=fail; b=jG6UvEIU60YwM6mZksWSL51Qmkb6pMMfvz9xGVfCDN/sqvV4luLo6l+FGYO17vl+IQgCor0AiI44+dV6SoUZPVYT2TwIC59rMIVny+T81MLwc/ujw2rqZOYGUAQ5ZrLn7Gv4ctyMDFRzIx5KJoOpXddpi721N5Q3biG40Eo6a0c= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770641604; c=relaxed/simple; bh=fTx60twlm8eOQQ0LDmn/cde81YfV1ISdp2/yz1EnxUQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=C8rl5RlWDHIyymSpYxGuSheKH3AD/m8ZZKn1ZodBcSypay2r+RdC0prKhXORgKLVeaxz2JEUw5ZspP1uOlbQ9c8ApSyrjzmdgst6gTh8ybYz+UlPmC2IMYNU3+cPtAtKUDA+1Y4s8ru+v59+ceRBqu9Um2E/STqTTCbv8HvcqNY= 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=vnf6yHzx; arc=fail smtp.client-ip=52.101.228.117 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="vnf6yHzx" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=mfoKrP5r9vChSjuVYujBxBUMEh5sZR5C+sn0esWAtxEZL2s9pv2rdCGbaI7gi0qbRgRm7HfPVMHzB9xOQ/fj8Ny6iZ6cwNx4p1hoCA44g+C0WP4xCUvVU/kpEURyeAhByCA/Z79egZOIVUtZQXSGkJHdEmlrTaxh+Aew5KF3hPcmt5wPDC8MYmy+KTWp/oMFLuOPOIlfhlIWixbvJ8qQnOCtgjh97ozHPH2bvO+VTDP0KXQ3Eblw8q8hvdqmqy7h3FeM6vQi/cmj1FH8soV4D8OdxwZd1k7z3mLeAurIvktUAFQ1UCVaiiDVNLtK7Ua6tLWDvlTURZsgY8y/Qj7DJw== 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=v8yWAfV8AJ5pPwl+Js3pT03l2aqXPjl9XVUFCNdR+xA=; b=jHZfQ9oQlfSPfsDfyomrTiZmMcZBdKyc7SpH6bhFvIouRp8x1xRyp0I+xNg8nHI9xd6ZmbHehCEF5X4i0yYgvu+YG9U5BkNETAEhbWlr0lS2pgOt3MUdXLmjwnFxh0dEM/L+jtzVCK8cdu9+J/GBcQrqohwK+TLUHt7KbWBZTf9jYbfsFPBGVOLbQzzH0duQmkkbJTOZrrPlPPWymh9rr7zZhX6B7oaomFmwS+Mz8/npFh5aZBWUiuV4tZh/xD85ski1+UPFolzhL66X8ElVSlz56jvDNOkLcnwzw5pljlOnVq/obHwe3KaRbbIbnJ4cZ4ij8DggDCV8iHhQNNm1XQ== 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=v8yWAfV8AJ5pPwl+Js3pT03l2aqXPjl9XVUFCNdR+xA=; b=vnf6yHzx/9SWio7etpmQJCbeNONsAZrioFmyveQBeDQKxoD0PrXdX9q5qFgThBkc8Jd86GkP04y9jhiain2D6VoFEJkwFN9PylKIbOEYSR7mM2AcWolkR2r3BLLS+/FTpJjXyHHPp2iMYOgdgt6WC10DWL+ePnh2pb3FXfnvJbM= 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 OS7P286MB3742.JPNP286.PROD.OUTLOOK.COM (2603:1096:604:237::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9587.18; Mon, 9 Feb 2026 12:53:22 +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.017; Mon, 9 Feb 2026 12:53:22 +0000 From: Koichiro Den To: vkoul@kernel.org, mani@kernel.org, Frank.Li@nxp.com, cassel@kernel.org, jingoohan1@gmail.com, lpieralisi@kernel.org, kwilczynski@kernel.org, robh@kernel.org, bhelgaas@google.com, kishon@kernel.org, jdmason@kudzu.us, allenbh@gmail.com Cc: dmaengine@vger.kernel.org, linux-pci@vger.kernel.org, ntb@lists.linux.dev, linux-kselftest@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v6 4/8] PCI: dwc: Record integrated eDMA register window Date: Mon, 9 Feb 2026 21:53:12 +0900 Message-ID: <20260209125316.2132589-5-den@valinux.co.jp> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260209125316.2132589-1-den@valinux.co.jp> References: <20260209125316.2132589-1-den@valinux.co.jp> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: TYCPR01CA0062.jpnprd01.prod.outlook.com (2603:1096:405:2::26) 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_|OS7P286MB3742:EE_ X-MS-Office365-Filtering-Correlation-Id: c099eac4-4336-4a7a-65b2-08de67da34f7 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|10070799003|376014|7416014|366016|1800799024|921020; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?V/vAqrrV0T8oKwnf8WO8ekG8AjySd68w76/zeXbybtPGe+X3dxcqldmbKcvy?= =?us-ascii?Q?jjSQ2r5pYWiBkXCpkLd22zGBwfvJnqCwNA2JJT+rIFLdKQaaY+f8IV375Dwy?= =?us-ascii?Q?byJNgc/jZGZcJrsCT7rTrUAvuAp9XnzKzlGpc8+MKfPXtQswpPI6bLE7Y2Ro?= =?us-ascii?Q?QZjYkRYLi12Y3+3dTnUyXOOLOCimg9Qlz6/VQk99UldM8d+Hq99BLUvCKcCT?= =?us-ascii?Q?Jbb0P2gRA4xbaD9LP2VCs+r9OZZ5ksDWWTXn+9cWeBSSw8aAjCJkm6st0So4?= =?us-ascii?Q?Irz+bcCvQ/BorlEULc6NxoPSaCaMwt+0rLPY8LZrg/xJKX7bh/AN2iOWwMMI?= =?us-ascii?Q?l25+N4o2igxVbs+ACU3VV16qV72RW1MNn4H2I5cM2xED4Mq9P3F7ojmrEPFa?= =?us-ascii?Q?Ydmb15zg3L2wsxVtEQ3FbEHmu35y+m2DkLdw9Xpnyzq62rBdVm8GE2/0rybG?= =?us-ascii?Q?U5+Jr2UE2dz5avSGFxhjDhf7P6sfVLinblTIyd/y97oFeOz7ufMEI4AqDxtm?= =?us-ascii?Q?Nr1m871LOKckeD/8Ry2t1Tt2yF5+QlMiJB5+q9MafYQDhM5yKJ3Lhg4cTgc3?= =?us-ascii?Q?nxXTISppr4yFsJbdSgauLlWWXZWWAD4ffRzSg5fILJL1iCRi0ZE+4ru+QXqP?= =?us-ascii?Q?emG5FeA7BwOVshEyIPj6kk2lOXo2G83zHdaCOioeN77E/gm1JD0p7r1EUr7j?= =?us-ascii?Q?JWCsvLvyqSPXXH2l2DO+hHVXWZZUNP/Ru4xD5AtvPD8dLU2szfhfqaMhknZc?= =?us-ascii?Q?qoF4YVF2SG7zWcQezYxkOTP51WFBjYJCHdV1VBjeTb9wWWDVxHOCrf3Rr6pG?= =?us-ascii?Q?6D/P8ikd71zjDoH/A2UHkaqWKFL8g7hGKWhRJc0Uue4hLVdLwgRgfyeCXghP?= =?us-ascii?Q?k+qL+nkOyY+Q7BOK+6UB33RKzE9SYuggIe1fFjF1TPZGs9UglF4EzKo7JtVP?= =?us-ascii?Q?y5SsISLbBCcAJuacYYxOf8YYTZAiYv4wyPHhF46KMe7AOIuKZ1uWvB0hyUsF?= =?us-ascii?Q?sBeSiu/lPL5h2nYD9RXJKu2g5tqcE32BpPh3QDKu4KKIVQ1TmJvp145vzhY7?= =?us-ascii?Q?/Xq2kPL95AvnbDCDYJVEmhnlRKBPpr3ldg0gnlrMZQv5H0cCB3NPnKhrrqhS?= =?us-ascii?Q?rO24zlf0Rw6pj5OAG1KeF+2fP7KVJvODxoiMqXfZjzSJOZsEiklwl16S5Ai7?= =?us-ascii?Q?NF72kd8ByXgkBnG1cbfmNvVJq+s5sfSMsXKLx492+qEV8U+KWkFOFn0NJYTx?= =?us-ascii?Q?7n28PhbQWT98lCyUrOtcklLWfcHCpHhAbi0XsDuU+6lARU9iDzOpDtfjaFOM?= =?us-ascii?Q?glqcICZu3+dY0ooF85ENmRiEYL+RNiZCALpw9APrlKBBp932wEbjOacJhDRr?= =?us-ascii?Q?Jw5z+Jq/1Q4enbVZlkdeD9n/UcKeIZHqD8RxjxniXfuMYkdcnPKoQLQ3RJ/1?= =?us-ascii?Q?FxX+uIAWhPFxU4rLiN0V/LCxJV3xUPm6lBGYeB0tBVnwwOvVP8HZDgNxeOzv?= =?us-ascii?Q?u1xIJH5YUtkOaWuBp9O/0CPMXcLb2H/in9/jMDuAKsmYPEfHtUZISHI9kjqC?= =?us-ascii?Q?68awrxRR4VYYch6bWNuBv5yjMWGC5V/n/zSgx9HB6QBRzamk7Q1dRfkCqK9g?= =?us-ascii?Q?IQ=3D=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)(10070799003)(376014)(7416014)(366016)(1800799024)(921020);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?SBtTOHyBGDfc/ttd2nn20iScJfLCUpGaaT/GBC1pxspFPakfHP1+/L9W2o+5?= =?us-ascii?Q?LjDJEeXy0EWpvzljWd/mODreJP60C0O/rIdF8XSKpgyCsLAtmhUysyaM33OB?= =?us-ascii?Q?KFszJXOwJND7iZ3L4BcVo4nUbi1s3tb0kulKbQRlsP5fUd2Zg6byLvkhMQyK?= =?us-ascii?Q?hzI1lzVjfA8tGdZc0D+/Cg7Q30uuLgeE7SOFvuLB+HSQ/cm4tBY7rAu+xtj1?= =?us-ascii?Q?naAv8n3wmNsmx7+YsvBBslVuQV6PpwcvJC5LSFG4L5T7LbMS/gESdn5M8hoM?= =?us-ascii?Q?0ajcKiaGPN+NrLN/nWmvB0g6sSq7Y3XLutRLziToG6slDqGCBGEvLj/tJxeW?= =?us-ascii?Q?RRzQHNURdZRyZKTeFsBx26NKr+T0zK7WRjk6sLD1XAjFMQou/GWMvHh4izLi?= =?us-ascii?Q?+XxFf+aam/X3SZ1SlZUOVM1Kjxm9+qlNihQUxvQVYYJYL6Gx/UyTPXqXhwlh?= =?us-ascii?Q?EHPWq+KfNP+Axfin2pkNllxcvP0JeQO63C2zlc1fthGztWmWPv0VTbhWJpEB?= =?us-ascii?Q?b9pS7n8vmZK28K2c4GTd94vT3rNEo+EH3SHCPr4Q9l7i2Ef07lhWRYDwTZ8i?= =?us-ascii?Q?xkDJFamzewieQJLeAGuSbNAghj0LnBN3CdgnnYuDWuSZYrmmoLtDdwYFQUu6?= =?us-ascii?Q?zBcXdkH6OrfnQnJoB0D+DUYChO0q1qZopTmx8LaaxxueG3XEQ3bMS/IYRH5z?= =?us-ascii?Q?Dh4v7jo/s10Szx7d6Umg0hm26CWP6FTgxnYehznUmtlX7/KFXpOQrE2TsfM6?= =?us-ascii?Q?1y0tCmfqpIx6hhmKlaK89ukVDNp6aV8Zy2dYq2QFIwnlHZzKcCGJrSCH7KMw?= =?us-ascii?Q?dpeF5fqk4gKSfI3AYeos67TEjDoYTMhpGTZBIvHYve57VD/9iqMLLz4GzysX?= =?us-ascii?Q?MTUcuA0+h6Bxvtfq7EGaRWzdVqqPQbZjmwE/rhWGfw4+FYq5GQTQp37knFdj?= =?us-ascii?Q?MiADsI0pvbgOYB7WLW5TThf+Eitm03OoHjed7P5D0QBiPnv7XX1GxAcC1qop?= =?us-ascii?Q?fzx7WCt+HUeVQLKS5RgPYblg7xLi8ai6mnVip9Sl4WOdlcDNXYoWM8OX4Ru/?= =?us-ascii?Q?fTefWgzVb5wAlnclcWOx3ug2pu3gp7Fzl9iCidDH6Ylus/8QUPvvcqW0q8QF?= =?us-ascii?Q?P5ebRiJ8zyNMPcZTF1iYVBxPSQyAoWI6GLaVVrUqTY6bqDW708uwVvhjDPXi?= =?us-ascii?Q?mNBtHAro4ZsCKxHo5KeWqM5UgWhAlq07mJqq19b9VI7A11zqhj09sChc7ISd?= =?us-ascii?Q?UX1olBXYaW/eF9ZtNhRpFNnBdzVGKoa0cTSLl9gObZZCOptkT1Y3F70so6qZ?= =?us-ascii?Q?Zq9h1lCx7tny2n/SqEa6If8IoPzstMcAZ+1yyik+r0uifyKN0F3NWhhPg/lp?= =?us-ascii?Q?qC2YKQUMfWcJWCLCeY3yqJQXVk/pIoaj3ZT2hudBSXAOIya6uCn9nRpxLnCO?= =?us-ascii?Q?LiFR3ItFrXgbbhGxb49V3UVXQ40m7bVXRR3vqyefyzMK3u37YREfMpE5Wtyo?= =?us-ascii?Q?Uwc5Pu6K0uj1AzLyZwmvb9K+2gwPtdUQcwJLAPjkko1420F08l6LsEcLv9mm?= =?us-ascii?Q?qQoMUDZusDNilvYfbRJbbMZ4BCaTM/WUYYhixeVTeJxgDtyTDG9p3C/larFd?= =?us-ascii?Q?D3WxwyROSOY3MKOjIQdiarVFmj9UkYBClSY6DxLLgHfejVcje4gMJV8CEKPj?= =?us-ascii?Q?9lTgh4PPCXv4RyFH0bPCWBywvNXOv8ccIVUzi8jMiKG8byAE0kk8xBhgVAtK?= =?us-ascii?Q?wzMfR6bAGURGBxYOknORcOA40aFnARMtz0/aZPOCSXX5FkYeBqXt?= X-OriginatorOrg: valinux.co.jp X-MS-Exchange-CrossTenant-Network-Message-Id: c099eac4-4336-4a7a-65b2-08de67da34f7 X-MS-Exchange-CrossTenant-AuthSource: TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Feb 2026 12:53:22.2872 (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: wfhUCgr7XZ7nwsrTZFhjerGX6hzCi2wZ6pEIC5UMQuVqLiVMkMdIkX1Vf926llj0UZI5k8utsMT3WO7EfVcnAQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: OS7P286MB3742 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. Reviewed-by: Frank Li Signed-off-by: Koichiro Den --- 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 5741c09dde7f..f82ed189f6ae 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 Tue Feb 10 04:13:08 2026 Received: from OS0P286CU011.outbound.protection.outlook.com (mail-japanwestazon11020117.outbound.protection.outlook.com [52.101.228.117]) (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 A8B18376475; Mon, 9 Feb 2026 12:53:24 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.228.117 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770641604; cv=fail; b=OamAVn/U35+gFLVPr7ngFB877Vp/EiT8P2aG2pcG0n16Mgp6wz6DOCdKp6/rnwkU1XRLxhohPKn+VRB76ureyW5PXsJn/5V8R6IzTaAXpK1UqYoJqwQ4Q2RtEv25dnWQvUuW8MBnt7Kwn7zZTLdbMooMW9JRD5sjA+RLQpbOChA= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770641604; c=relaxed/simple; bh=m7gNzrd3xshvHeDWmQT6H7u+Yg0bDwxNQTJuH0FSzNw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=WvyS1YOP229NVOQyIvCjECOrKZcPOQnfUsjeJ7DKp6zL61835BxhSVVjKZ0bl4yle8yiC5AdiUPv9F8hJQGKa1wGU2NGSA79GnqHBz8VF39Bl96T1lCIqSadf4V26Y/YI2b1rn41ime/IWsZeqJW4UBvmDVUyhzduazeqX3n1Sw= 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=SJz+bqzc; arc=fail smtp.client-ip=52.101.228.117 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="SJz+bqzc" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=at9idiKjQMBYWj+DxMGECypg3tPomZ55U4VsTuEg1KHpad/awZQAMuIeB2XGIRFWyO1+EHuxk/Mv2ufqZ10Ro/ZgtL2BJIQ69igtGEDARyOR7Abs/FAzAAcSBWieZyFISyZ8/jg+QIx7G5SFcUj6Jl9wZYcAqRF7awJ9liB46KvieS3X/Z7aSdaDJaqjN8o+RbDS8GnUq/kb0+jjxRymdTrPSiUrLWpPM1rwxWAuPCwexqqiZyhta2BldlgZDR5UTwtnuneqOSXgqHHvv7a6LqhAqD+oibhGD8y/dCqBM2tcLfpsOzsRAb0BKvGrBbbYdyjweh64P1aub8rrB5lrWg== 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=ZxG6ojMrkmLKQRceuNfassnYLg0CvoRYtyz0JIbPhgM=; b=ZpXM/yUkJ8xWYsozXVhod8xkWgfi5uzH2X/1zU3TNx1MXlCGW9xWg6/caOpxegWz/Uir/BGuRl0plM4tDzZTdJMGq9UakdUB8arypffh6O29dvB+YvSbUnOM4wI9bsw/SSLui5VQm6cfGuKdsBn3cXohCDFzy9OIi2ch7DRVN6Cn1IHocB1yUG6P4nnLuxVbLF3fTHMZuzCmI2I9IWJYjaSJqlzvkaM6EdideWbtzmyQRc8KMZmb27Z0oOcirXakvwKHCK0Z4cgJZMPT5Oxd6CL5y+wszfyJ57Z/YDDLEJKpS07t1ULkx7hkhvXxNYENPrFPaIabDj1ZOWlhhWs3Bw== 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=ZxG6ojMrkmLKQRceuNfassnYLg0CvoRYtyz0JIbPhgM=; b=SJz+bqzcnes2PfddfA+Gu8s1uR+bIo9EDQWa0qT73Sh87fN1sdM7w0eH4iHQrcx+ZHP8ceEBfok3jk+vw2W+6A1Rj2kv69lwP24s3J6pOCEn+AALG8aE1JJE+pOy22dnjkYMYUkK9UO3lGxI+7y5kiuBoDTFLRLcn+bZD0Jm0js= 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 OS7P286MB3742.JPNP286.PROD.OUTLOOK.COM (2603:1096:604:237::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9587.18; Mon, 9 Feb 2026 12:53:23 +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.017; Mon, 9 Feb 2026 12:53:23 +0000 From: Koichiro Den To: vkoul@kernel.org, mani@kernel.org, Frank.Li@nxp.com, cassel@kernel.org, jingoohan1@gmail.com, lpieralisi@kernel.org, kwilczynski@kernel.org, robh@kernel.org, bhelgaas@google.com, kishon@kernel.org, jdmason@kudzu.us, allenbh@gmail.com Cc: dmaengine@vger.kernel.org, linux-pci@vger.kernel.org, ntb@lists.linux.dev, linux-kselftest@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v6 5/8] PCI: dwc: ep: Report integrated eDMA resources via EPC aux-resource API Date: Mon, 9 Feb 2026 21:53:13 +0900 Message-ID: <20260209125316.2132589-6-den@valinux.co.jp> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260209125316.2132589-1-den@valinux.co.jp> References: <20260209125316.2132589-1-den@valinux.co.jp> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: TYCP286CA0352.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:7c::19) 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_|OS7P286MB3742:EE_ X-MS-Office365-Filtering-Correlation-Id: dc567df1-205c-4477-e180-08de67da3564 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|10070799003|376014|7416014|366016|1800799024|921020; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?y9zpGRUP0F5UUUAP4e0k6lkfwXkaxFMww6i2lZJupdO/i5mFDkfMxD3N/2BD?= =?us-ascii?Q?gaXCwL3r6lgJWIayfhDtrHZ6ZXQ4S2iE35kcMUUEtNX/CiLfoLo0sFNtdaLL?= =?us-ascii?Q?Mhu0TnFLg+IQlf5hVabLuzgugKkDudFmx+iplxdaLvUHMEaHYd2FEUHRIT7Q?= =?us-ascii?Q?CXlrectZDTGnnde33PDkdzshkISlpte8gH6S1aEvSWNfj4QAtSYbP+HUB62S?= =?us-ascii?Q?cA3RrYohXCpmcZSziG8eez/l9bTH6cOr9gsxFdNkFK4hfvVmzPd1ae6IeTma?= =?us-ascii?Q?RJFiPTA4jhY6SCdq3xPNmH8ybTr6TkLd/gtVrS/lhl6AdSKyVFzvMeGjBUoz?= =?us-ascii?Q?30Xx519Gx2xLYpALTaM07qjJbZr5peWmSSd+H9b7gsH3cKeVoH2j7SXBN/+Q?= =?us-ascii?Q?p7wmGCt1TjRyNlFT38c/AzZWPu+vsXtfr68Rlxy/od3dcHN+qXzZe/cI5NtJ?= =?us-ascii?Q?YPNq3BZyjkexwBw3A2PxD1dKAX/AG9wZSlRQa+pw3pBALhllUN4s2iwzibvB?= =?us-ascii?Q?ubM1nTn2PIgmqVINLP8xXjejdjYrxjXCSoZPGV8K039rc2JPXaYteb/AECNA?= =?us-ascii?Q?r6OLetKoOWXpy6Fa+gSMNZUpNaLWHiYEmBZQ+LZTOoo3hc7erDlLGcIUvLTp?= =?us-ascii?Q?AzW6PQElUhdMsvYYUgweL4TOz1YDLEpkPCY+qQV6G+d8fzBAXfqmXC5eBWk1?= =?us-ascii?Q?OmfaOG2xURIq5PsvHfrMButDaKfjShNUfiwsFQuPhjoU2ncIHlQMvKXYpMp8?= =?us-ascii?Q?HDlI7RwQqFyZrE5qtU1EHdBXIlauzh6J3Uv9WB5PqvzT+jDGy0N49tpZPV0p?= =?us-ascii?Q?ZA0PbRIkfE2wovfY6vLBHSI8735P8cojWbaa3tzC+kOOqSnbNV+vmMRgfxk5?= =?us-ascii?Q?YCXBGv58q8bjXflKuq2TlRfXUfOAnKivE6ld83AMsOEJRQviNjaMkYMmXLe6?= =?us-ascii?Q?zBaeoAt/+YedLNoj7pZlN5HcgeFAboSy38PHey5wWyKsBHmAxd1FMbFQrQ2D?= =?us-ascii?Q?kDDqK1xar5LbMX2/Fkqi4Pf1UiDtg/+YMNWKd5Yg6ZwLi1tJn4r9BxKOnQg2?= =?us-ascii?Q?okvMK0xuIfCF0DAo5/23A3fC3WD9UJbT9BOuyAXmCsqaJREaFsEF+1aW9qX4?= =?us-ascii?Q?HEtTKI1FhCP3oi6f4zwNQsTEyzkZYDdUBw2cmzsizrjzjfjfwxkO9OH8nsPs?= =?us-ascii?Q?UotmWJ+XaWIRaKvPrYhpQiG2BbBBkurnlTBgX1g8tfTrKPgCu6XkIoFMCnuW?= =?us-ascii?Q?gWj2pBNUnA8jxjcuhiWQfOvkDnod5zN1DAxJTKkCEndcRWAbQDqFpP8vMZWd?= =?us-ascii?Q?S2chw8xugATaGM60L4M3VAbEdBr7WcepbzoQWaa0jg6Axm6uJbmxvJXAIqUc?= =?us-ascii?Q?4GcnU67L7votUmbIuwifffsotxdvjK1SdHemOm+QvVq08YWMYQ3svsjkmxp9?= =?us-ascii?Q?wpg3yFQX1sgaySSAgIm3oZdf9O6YVVLd8NYEdz66KhyuHJNnyM7LopY6OIda?= =?us-ascii?Q?dLb4/5WgzjXQT3RFGMgtcCNLhPuUyTzmEMH6vFlcg/UMgAfBfMMw/nyNwct7?= =?us-ascii?Q?di/SaBewP6cZ1ARBEriQs4rwd8kKinDG8vZFAzIk0+5CSoBZPlfWNK6hGldF?= =?us-ascii?Q?aQ=3D=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)(10070799003)(376014)(7416014)(366016)(1800799024)(921020);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?DzGQLEGFRVwkZ2elUOLj2+vt9RXmX3/j6IxnbwL+HdLhh7cZbRVpsD8Xl4m6?= =?us-ascii?Q?x2JHwUKD3HxqB8MGlx1ceVGgcW+zZNTFpLgCW6JrlUUXW1jc6H1SsSaiGXZR?= =?us-ascii?Q?0RrpHNb9E7ceRVHtFnnSsi29u/2e78vJm1v97PNzFnaof3O3EhNC2elf7t9p?= =?us-ascii?Q?XVeCn3/Mm3sJUPdT42vtE0SZDDmW0XtN6Xbzanw6Q3a3seEnL0PETF5w2ukp?= =?us-ascii?Q?7hjV0RcNj7HMWz466oL5TnL24rtb1f0eoXz2RQIHJ9BDQcx/ZhhkrqKTavKw?= =?us-ascii?Q?Y1WxVSv0ENEliT2ymua6Ew8/PvFZS1ClrbvvcAmrXkHhS/Yed/ia3tcgdtwa?= =?us-ascii?Q?qSxTVzsMHYftnUhBkYhV/M8+/KGHu+V54RUVC5NIx/66Q4WFi1naCd5W5hiJ?= =?us-ascii?Q?xd02evXmqs304kLpFc8R9C4DN4pMOzXlEfG1fXMN4usLKX0lWak38SvJzNCw?= =?us-ascii?Q?17TYc37EZQqkDx5bosolBT69oSuoL6sJhoO4/eGGpyshkh9d19xiC1L053Og?= =?us-ascii?Q?3/3ibvtcZJOVSrxo+64wTxk4+epuMstKWVfwrHxo5P4JCeeNGMn9kjlNzQWz?= =?us-ascii?Q?iSxy4nvyzs+qYF7OxN1J8HQS2xgda41d5LTYlgZSPxpBTm2QXynbBxWAqCK6?= =?us-ascii?Q?WIvB9Arf1xBohdzNxa2rWpg+oUy4Tb0ZbzCooxZae7sNfPgj0vqFr9QIzgE9?= =?us-ascii?Q?AyOjS6O66L5K5+a2gleGs6aQ8ZyYIDD3wriu/ObNheXgp8cqxhotWW7jENFI?= =?us-ascii?Q?2GEvSkYUUa3rN7vfYpI+neUK7tTwvwbpYzFrYpazUncfORL8CwIG08KiSCyX?= =?us-ascii?Q?CoAKwv3RtICulvjC57gikTWrfQO45ZheTgJ0/vbnYrRXkkimu0vSGeHnTZkd?= =?us-ascii?Q?0ZDgMwSWFtjRyi5TVEvqvrQeKO9TcAkDesHHI0Ozgt8BlATWZFpuCOyDgFuM?= =?us-ascii?Q?/d97lWzNTX62xE+Gug3X+ricaUVIB4AjH3WRYw3a8iP5ta3zu5KR8hiz82Xo?= =?us-ascii?Q?cyVJiGnXnjNZX6rDEr4/O0imoem49k0EaoiOW5td3Zx+h5mwaOZatuOpG/cc?= =?us-ascii?Q?i9ZL1XVmcktqJDDpVCNzUyp9JtFC59xUBse6OtGtFbHSsqIL87Q/YDvGXFzP?= =?us-ascii?Q?k588fGmDnl4vlv+8TBr2YMJAYWKawYVneyuufK3naZBwnLL/rfpd1MEsAZZ+?= =?us-ascii?Q?6T2QG06YeXe2FdZR5WPJKgqKIYcH913GOS3LKF60VD0VrC+Mg/UEXVYHmyG5?= =?us-ascii?Q?98b8QNsyaRrktCSDOf7rZ8UxdDVF4doBw+9l4LFVdQe9Q5bL7L/knJx639oz?= =?us-ascii?Q?PB8waBOJKADfpckuPySdJO1tt/OwTRGHfPY853nFhgzI9M6Yx4LM7RWrD404?= =?us-ascii?Q?q2x25Tcs8mfC7e9Md8+sug105kNT8j+1pE7P3fX6dQLYI+RuRZEL2aZqqFsn?= =?us-ascii?Q?A1rXDJHh6ZvQcrOsQfL3+gDp2DdAx+0ufwkQJqlajahcRigAHr/zA2+NRSrD?= =?us-ascii?Q?WHpT1q8DHxVUz1b0Ko7Wu98tMi77dUNn2s5K/TCKEN+QDGzK6gbGmw/raWkk?= =?us-ascii?Q?SEm5Oy8mEhhEP5DGd5x8wBaFGphUQU6cEbY5A6Z5/GBT7wraH20KPBLxZ4ez?= =?us-ascii?Q?6okrB+kTffT3GGiJLAWgvwmtC8/sOWpQdSxvL9ebgitORaSlZUiGRSB6StQC?= =?us-ascii?Q?CniN5d10QIwOPBmmMzrBp+cw9GdkcrfYwFJWXlqvZ8cv+mEpzVLwZK1LP5S8?= =?us-ascii?Q?0wtgz8+rJMIKCA9xVVT1z2tfrd22PuPCegDXRBJreSL3/aCZXNT0?= X-OriginatorOrg: valinux.co.jp X-MS-Exchange-CrossTenant-Network-Message-Id: dc567df1-205c-4477-e180-08de67da3564 X-MS-Exchange-CrossTenant-AuthSource: TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Feb 2026 12:53:22.9950 (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: gcDXOCl1DBaU7bqk21AGwyuQCR4czKM0+fD10UEA63L/EXr6FUS3WR5tqGwJ/xK/Slj7GQOKa5Bk5AiEvEJEwQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: OS7P286MB3742 Content-Type: text/plain; charset="utf-8" Implement pci_epc_ops.get_aux_resources() for DesignWare PCIe endpoint controllers with integrated eDMA. Report: - the eDMA controller MMIO window (physical base + size), - each non-empty per-channel linked-list region, along with per-channel metadata such as the Linux IRQ number and the interrupt-emulation doorbell register offset. This allows endpoint function drivers (e.g. pci-epf-test) to discover the eDMA resources and map a suitable doorbell target into BAR space. Signed-off-by: Koichiro Den --- .../pci/controller/dwc/pcie-designware-ep.c | 78 +++++++++++++++++++ 1 file changed, 78 insertions(+) diff --git a/drivers/pci/controller/dwc/pcie-designware-ep.c b/drivers/pci/= controller/dwc/pcie-designware-ep.c index 7e7844ff0f7e..c99ba1b85da4 100644 --- a/drivers/pci/controller/dwc/pcie-designware-ep.c +++ b/drivers/pci/controller/dwc/pcie-designware-ep.c @@ -808,6 +808,83 @@ 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_aux_resources(struct pci_epc *epc, u8 func_no, u8 vfunc_no, + struct pci_epc_aux_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_aux_resource) { + .type =3D PCI_EPC_AUX_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_aux_resource) { + .type =3D PCI_EPC_AUX_DMA_CHAN_DESC, + .phys_addr =3D edma->ll_region_wr[i].paddr, + .size =3D edma->ll_region_wr[i].sz, + .u.dma_chan_desc =3D { + .irq =3D edma->ch_info_wr[i].irq, + .db_offset =3D edma->ch_info_wr[i].db_offset, + }, + }; + } + + /* 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_aux_resource) { + .type =3D PCI_EPC_AUX_DMA_CHAN_DESC, + .phys_addr =3D edma->ll_region_rd[i].paddr, + .size =3D edma->ll_region_rd[i].sz, + .u.dma_chan_desc =3D { + .irq =3D edma->ch_info_rd[i].irq, + .db_offset =3D edma->ch_info_rd[i].db_offset, + }, + }; + } + + 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 +900,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_aux_resources =3D dw_pcie_ep_get_aux_resources, }; =20 /** --=20 2.51.0 From nobody Tue Feb 10 04:13:08 2026 Received: from OS0P286CU011.outbound.protection.outlook.com (mail-japanwestazon11020117.outbound.protection.outlook.com [52.101.228.117]) (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 2913937757C; Mon, 9 Feb 2026 12:53:25 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.228.117 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770641605; cv=fail; b=U2DRRkmb/T0e68OD2RQHP2b3qK2jO8cXPMnr1joDBv0zDlpKf8wVBKUyxpn8xTnn31k/iSKzJjGLWJjHI9rWIaJQTdmYrRydI0IX/XqLKF3ZOwjjDAM4XU8ny9e9Zpja/gBj7fplFDnUkbvNUSylpR2R52cI1uOZY5Fn58crSLg= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770641605; c=relaxed/simple; bh=IzccJqE7Lm912wY0VygQRmfcaqtAjyn8prFD5KjsMS4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=NcuckspTRxrU1nnnnEFTqCkSi4CwnKcPWRg/YDDgyaf5P9WPM29bBzQsWlmR6KNIJT1trWnPv4ziGCavTDIA65ufdNsdMILDzFNHq8Ovs6vDUzo/WSG+oGHVtjuG1aFU+Qyd3T3xPuCX7L4mmz9dHE9EWid73V3p0iW7TdtEOLE= 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=LFDiPEjc; arc=fail smtp.client-ip=52.101.228.117 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="LFDiPEjc" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=Cehior5sNQH47v1IXhahoLtPkY8yNByoaky6w+kao2+z22gpEo/b6GUs6mOKgdg3cA1TKYthr9FaOlbNKpA12lbc5eVG8M5PWsJXZNmpnC8O1wRsWPuAcDFVtm028w4x5IC1bntHy1F6pXdt8PYyEko6cV9Y+m1/rpO0/zb/YG/yeau7edLy+Ml2zYSpbyoqzCaZphctQLI9PfjPzi16TtAqnny1y8uz0F0mFH4zJ9NaSLzqVYJfdVDBdVB5DuDQkQfFw/XThDbd6CeRD++8NlSlU3Lh4KFNgVMmKV4YZrKF9LWUJJjL0RhADPJfJfoT/PWsqZolik6XvZ6Xvw5bYQ== 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=usXujhdztx84mPQSgni/ZWDOTKEq4ka90KIk3iW/c2k=; b=Kbc1V35f0u5+F+gS7J/pdL6nm31hog8N68jY59oOKYgR6b5CkCP9NiCGIlGKwv6CYSZlnIXVKDnZNHIcLGgcHRJicP6iQP4uVu5XkJxOoU3KaLYICb9PJhJFKUHd4g0FcpamVXOfNTDOtwp8bo1TmB55aR+MOkrd75eN9SuaTHisf1EI3iC85kg54r67k6wu0UhhncA3bIlBA8i80QYTVrwSmT8fdkZ5LGAVjYNERojF0a9/mauXhdkcjggM0ACnWVWqB2KpAru3JBZ2d3sCPCpJ5cy2G3ah6h3svR+Qdy5J9eBfWZEp1K44dvaDu4DTvedzfYHNlA3gJrXLsPCZig== 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=usXujhdztx84mPQSgni/ZWDOTKEq4ka90KIk3iW/c2k=; b=LFDiPEjcxr0jIS9hFtP4ZKU6q/q/2jwAu3rhvfLyfSLXfp3PgNt+9EAY+gu58wxnwtvE57GkySakCMxrelrGSoceY9cEYhX1SZ9NB1AcmYbnrlQL5kfghKuV76GaKXtk9BtzX51EJUW6aQray4wTiI2bLUbJR2NtecMJ82NYZMw= 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 OS7P286MB3742.JPNP286.PROD.OUTLOOK.COM (2603:1096:604:237::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9587.18; Mon, 9 Feb 2026 12:53:23 +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.017; Mon, 9 Feb 2026 12:53:23 +0000 From: Koichiro Den To: vkoul@kernel.org, mani@kernel.org, Frank.Li@nxp.com, cassel@kernel.org, jingoohan1@gmail.com, lpieralisi@kernel.org, kwilczynski@kernel.org, robh@kernel.org, bhelgaas@google.com, kishon@kernel.org, jdmason@kudzu.us, allenbh@gmail.com Cc: dmaengine@vger.kernel.org, linux-pci@vger.kernel.org, ntb@lists.linux.dev, linux-kselftest@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v6 6/8] PCI: endpoint: pci-epf-test: Don't free doorbell IRQ unless requested Date: Mon, 9 Feb 2026 21:53:14 +0900 Message-ID: <20260209125316.2132589-7-den@valinux.co.jp> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260209125316.2132589-1-den@valinux.co.jp> References: <20260209125316.2132589-1-den@valinux.co.jp> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: TY4PR01CA0020.jpnprd01.prod.outlook.com (2603:1096:405:2bf::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_|OS7P286MB3742:EE_ X-MS-Office365-Filtering-Correlation-Id: 2199132a-724a-4c1a-1b44-08de67da35d5 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|10070799003|376014|7416014|366016|1800799024|921020; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?jA82E6QJqBVxcOaf7jLCwE57fHKSkrWSTbp6gXOisl1AAhTwWjLMGIexsLke?= =?us-ascii?Q?8qvPjN3JdSL73vUol23P0BfYNrf8E6pDIZ3OPgj+DgN7ZMrK1roZ18LeuSRl?= =?us-ascii?Q?mY/EszzWutPADjY3eqT/gfHPvhw0wuYIHKVSI8aC56KqvcJbfjV1lIhc/eP3?= =?us-ascii?Q?ft640vHLJhe3r49HwvvgCnhtf8vkYZd5cpfAJmI9daNzoXun/l2koZygmxOf?= =?us-ascii?Q?pQnVeoxLFrMKVzNl8aSM2EUGB/gU2/wRfRJHVY39RZZOilOT4mKfmFgDW3In?= =?us-ascii?Q?TofNeXIpzWw8GP8Zgy3+eexyc/eqkngGhfXm5QzxtP4Xab7Wj2zUqxY7z3+n?= =?us-ascii?Q?DQM/N+11Qv16rQsyVOdJLOcD0V9B7s52G+NjzkPIf+VVI1FsLpz+GcgrwrN7?= =?us-ascii?Q?lW9UT6zaadYVxFP8XtnEqUbMMNI1kQtP3sZbinMGxJOcWHk3+6JMD6iCQ4LC?= =?us-ascii?Q?+Hoa1oCLUcneMSLu18fVp7y6OWTWbRuyJfijMEiL9yCwa9Sayds3oCctwnzU?= =?us-ascii?Q?llKG89yfvqGUYYljPLActXsctRMxzsdTQw1/Oy2UXuq7TzaVJAJYRT7PwHi1?= =?us-ascii?Q?PF/+/YNhQ8AQU+30+COcy94MNHgycdiczd7+zerRjRAHNQkIJrCkLgNEGh5S?= =?us-ascii?Q?+R7m+FUFr3TSkiZSdhn1mU62uUGT2IgFXMOI9B4Vw59qLbhNI2wXsymn+3l1?= =?us-ascii?Q?j3p1jYBoswJxJ3mwxXZboXe8mfNpgnWi1wi/TaVQoG+L/Hy9e+i361whC8Ly?= =?us-ascii?Q?TbH/kB5INnpAFuVA3NJ44Te+RiQw6sxscvuy2o3ViGJkGJy12A8lEb6rADAV?= =?us-ascii?Q?8jOHZmkH6lRO1zX7rlXxETiJvk8Gm3MZLpNlRnhGRXFmQqyAOnWWe4rl+d0A?= =?us-ascii?Q?rGCJ9yPe0+PBjmAU0ZpLXjpYKGmPDp49FKSEOQfvldZu+V9IIiMhVV4Kmody?= =?us-ascii?Q?dRglNnoGa3utXTnReAasAFOLSYs15zFzPWdktdtiLZqkq9p+1pDyvKo/RIga?= =?us-ascii?Q?Okm2Sw0ARWTPxS5Vg7+1BMAiX6Nv/p6oF1Cvgin2P2sn4ID9oSM7iuZWKRmR?= =?us-ascii?Q?XyG5vZ1xtVOrqmMx4UF7p5YiYUqy8qLZZGI0w8875joe9As6DL4P54j+gQKv?= =?us-ascii?Q?cL5V92qBh6T0XtD59pN9Qk6xiBjAYKYCY0RnDAbQAneM8no++r+8+Wlgh6le?= =?us-ascii?Q?YZyTBWYI/j17zqKP/6HbC/5EmULCqSbaQUVxZQuMdGJ1JMP6sfnjlh3y0odJ?= =?us-ascii?Q?lqiUIB+TQMtNzLTQOVQnGUVPrfqOrbXYjsLOn11B0V2gHmQl+h3bcHDkLjyP?= =?us-ascii?Q?qu+FOyOKAADi6JDQ/hH71/tZpyyduTDGdouoqHqQXLpxGkZwJrR2VdV/jwF6?= =?us-ascii?Q?FFElsDBmCwXhwLyZyQ0NG51X9RM0JyDvNHQodbfnV53PJjGXVRLD1k/WDdO6?= =?us-ascii?Q?gKJK7n/H3Atm9su+n1MTuRSoNR60flD1vVbTt57capORQHta/udCp+GnIR50?= =?us-ascii?Q?l6pJcdnUbIowC7l75kjej51tbOKwXFS9ofEfMBapjfb1QHnvy5J5WySIhXa7?= =?us-ascii?Q?UlK5WxYOH3VfYyiUvk8axEnrNf/uhBJSfO7/6pJZruJ8z7ZzsRA3nww9A7Dn?= =?us-ascii?Q?aA=3D=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)(10070799003)(376014)(7416014)(366016)(1800799024)(921020);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?657D82g/my5dKUHSDdHNFQQBH36sjPqL7h9jY7uP+Nl/TFmbIpZNCS9GCZ6T?= =?us-ascii?Q?vV6RF2LHkDipI+zvo5S6wIo2wuHo56ybnXLRTTcw0f49gwmFnGoCr8hvMfKK?= =?us-ascii?Q?HM9pppguRoE6mbYOV7j2B3xqGyyNgJUUZC19pGPBFQzmJiZC6RxaLFlE+Nws?= =?us-ascii?Q?MCI5Alp65oJb9vhbOGkAYApYbJ+l/oglAIY56pcn8by5xS9Il9CHoGrEIPmc?= =?us-ascii?Q?Ua0yzREQciTq+Y9cx6GAKuzo0PEVAqik2kbmeRs/em6RfFcB6vp5GTfPwJ/3?= =?us-ascii?Q?iIwTaVmXCVJdJiaK3r6mpo5nywp5s/A71TdWkugg/oEaVAI8ta3B8++w/gJN?= =?us-ascii?Q?0JnCCpfIVv38jAXs3iBbgIWHcteQLWJblmFOu3+mQTpMR4GOfONSnDJlJ5LU?= =?us-ascii?Q?+lMr+AMRJ6ZkZzLX6rmi9aFlEfRpkslQEySA6TjTvJZLJEuMTT9InJ3KwpXE?= =?us-ascii?Q?z2vFjxtjghnSjde26/BE1ld8T6uq8my4XuodbownFBV9JXx8g4Chv1+Raspu?= =?us-ascii?Q?d1IiWt0mmttWZZEzF7an+9ZLLOOEs8Jw63EbbpssvJpsrvHoeY3E2c8YlZ96?= =?us-ascii?Q?4IEmMC1Ci7j1XN/if4MxHvqCE0B4vB5h3mgNxEA0rEMmCzuBFXGGu6EpfCuy?= =?us-ascii?Q?XdwWS076WIkZUy/cPIPDU5fXp/Tz9e35FGxlUYzAMFXraTUqQd4oUSXEZn6Q?= =?us-ascii?Q?PQ6iCIcBQ5IXBRMrbECVgHt/B4e1CxqZsnHfd9Sp9BC2OU158pFfyNkPNwyX?= =?us-ascii?Q?aLozqQcDcy0ic8SNNcquaypjavfbNwVZmDka4b/WHXpa6JFK/n8L2MJ8DD2n?= =?us-ascii?Q?nygk9SVT2B+k7C+15Uak5aoBgAts/zr9OEVTcBP0hBiZ9wwg9WaWF+0/6OoW?= =?us-ascii?Q?LJlWSrppLyjWYNdG40nq/kJ3h7/kla9TVFr/QEhXNhSSoTwwXofUOVVjHbl4?= =?us-ascii?Q?6DQDFSqQ+yBOvht/TIBISiW/Ybh//VXHfCUvZT/BulACYjzzbRtPUwBFVgtl?= =?us-ascii?Q?3ulk0H3dKbZtLiWWwXuxY21RimcMV9LWwhJQ1E8szk7S34ubwbpDLWuGWpjZ?= =?us-ascii?Q?EXJY724tbDbm8lPzy+2rpk4X2lu5xPLKtPbg9ubHVveh/0tkmOH3nT/IlALv?= =?us-ascii?Q?nMKsHHKtny51tmcVDSEwNMH/BO0OzeVcl9LtYeMoXXJTGmc04N/aToHeujQA?= =?us-ascii?Q?VIoDSJmAf8K0vTVGIackhYVuIs1Hp0Zg80rLbIfcKTbUq7MS7Uf2UxN249HF?= =?us-ascii?Q?xcg3L3fQ/y8yGdSoLGMcHVWfY2XI/XXM1I5IeLX5TKbARN5Eb/CwnwsAATxC?= =?us-ascii?Q?ZB8VqzjLU344YRzuB4TeGFdcqUVbbipO0OUd1tOhZAPr+NIoYKdogJU2+ERW?= =?us-ascii?Q?pdvvX6E+ynpx7KTkJlVZ3/KpE3+igVe+izOvKX6Yo/YGVpD0O5UUqgAtsabZ?= =?us-ascii?Q?tYuZo54aUYmIteGvwWL3//IMWEWYZfzrPpVF3ONlBSmeg87z2gt4yReYkgMM?= =?us-ascii?Q?pwDTkCI21MvR/Bihl2j+3TNuiDFPXuZcY0lEjP84eeAYGSGT/jxx0O6SB1wb?= =?us-ascii?Q?6z5XyEotjDupUqVNp7Z8gynxYjiwWZwx8duZq0BPJM7qX2jEYEAwBxwCJWOX?= =?us-ascii?Q?5gEf+0gcZpmrUvGzEMiIx6B1tvQ+vTTT3DKCFtJ59jGvVrKY87b3bgukohat?= =?us-ascii?Q?rtBWwPkP3Qu3i7Lbs9yC4B0vw9VKfOSOk66QnM887HMkLbpAx+yXtkc8Atyq?= =?us-ascii?Q?XGQ12BQwq2Debg7jY8ZPRjcQkZYpnGdrkJUfd5f41E1cy+M+jDW8?= X-OriginatorOrg: valinux.co.jp X-MS-Exchange-CrossTenant-Network-Message-Id: 2199132a-724a-4c1a-1b44-08de67da35d5 X-MS-Exchange-CrossTenant-AuthSource: TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Feb 2026 12:53:23.7370 (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: gwc1kr+iKDFtNXvIpEj9AJU/73AITViO3ak9vg9yCsAjSBCrWOKBGzcN8d578PtBRtpM1ksVcYAHBYhH4eI4vQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: OS7P286MB3742 Content-Type: text/plain; charset="utf-8" pci_epf_test_enable_doorbell() allocates a doorbell and then installs the interrupt handler with request_threaded_irq(). On failures before the IRQ is successfully requested (e.g. no free BAR, request_threaded_irq() failure), the error path jumps to err_doorbell_cleanup and calls pci_epf_test_doorbell_cleanup(). pci_epf_test_doorbell_cleanup() unconditionally calls free_irq() for the doorbell virq, which can trigger "Trying to free already-free IRQ" warnings when the IRQ was never requested. Track whether the doorbell IRQ has been successfully requested and only call free_irq() when it has. Fixes: eff0c286aa91 ("PCI: endpoint: pci-epf-test: Add doorbell test suppor= t") Signed-off-by: Koichiro Den --- drivers/pci/endpoint/functions/pci-epf-test.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/drivers/pci/endpoint/functions/pci-epf-test.c b/drivers/pci/en= dpoint/functions/pci-epf-test.c index 6952ee418622..23034f548c90 100644 --- a/drivers/pci/endpoint/functions/pci-epf-test.c +++ b/drivers/pci/endpoint/functions/pci-epf-test.c @@ -86,6 +86,7 @@ struct pci_epf_test { bool dma_private; const struct pci_epc_features *epc_features; struct pci_epf_bar db_bar; + bool db_irq_requested; size_t bar_size[PCI_STD_NUM_BARS]; }; =20 @@ -715,7 +716,10 @@ static void pci_epf_test_doorbell_cleanup(struct pci_e= pf_test *epf_test) struct pci_epf_test_reg *reg =3D epf_test->reg[epf_test->test_reg_bar]; struct pci_epf *epf =3D epf_test->epf; =20 - free_irq(epf->db_msg[0].virq, epf_test); + if (epf_test->db_irq_requested && epf->db_msg) { + free_irq(epf->db_msg[0].virq, epf_test); + epf_test->db_irq_requested =3D false; + } reg->doorbell_bar =3D cpu_to_le32(NO_BAR); =20 pci_epf_free_doorbell(epf); @@ -741,6 +745,8 @@ static void pci_epf_test_enable_doorbell(struct pci_epf= _test *epf_test, if (bar < BAR_0) goto err_doorbell_cleanup; =20 + epf_test->db_irq_requested =3D false; + ret =3D request_threaded_irq(epf->db_msg[0].virq, NULL, pci_epf_test_doorbell_handler, IRQF_ONESHOT, "pci-ep-test-doorbell", epf_test); @@ -751,6 +757,7 @@ static void pci_epf_test_enable_doorbell(struct pci_epf= _test *epf_test, goto err_doorbell_cleanup; } =20 + epf_test->db_irq_requested =3D true; reg->doorbell_data =3D cpu_to_le32(msg->data); reg->doorbell_bar =3D cpu_to_le32(bar); =20 --=20 2.51.0 From nobody Tue Feb 10 04:13:08 2026 Received: from OS0P286CU011.outbound.protection.outlook.com (mail-japanwestazon11020117.outbound.protection.outlook.com [52.101.228.117]) (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 8837D3783D3; Mon, 9 Feb 2026 12:53:25 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.228.117 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770641605; cv=fail; b=twdw9wEF7lr4ATcsrWcw8lNIHsaP6qy0aj6hPNvlYirKqn/5gK2rgBzRjIehIOamX5/slc88BVMAqOtvowV0+Kbj7sar88YflXF9XqCXeqU23bxB9zDQKEONpJNmvqcafBIaJredjaq+rDrPzOnrGm4sYP8WdB0XF46w3zafVqw= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770641605; c=relaxed/simple; bh=07NOOa0/rNNL1PxwvNlV+aogVqz5aF0BbgQCjbNwprY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=RYJo+4aiE+S60N5hrBqzOCDPefEyioEYA9igXsosj1gPZs5wMItk5kXgpQqdWGRqqySbYM6DSaO7Dvvjj5+N7HHBn2V2f/QuSyvKMYw5xCW4w/8Gm71B4ojcUeeIYutkNfm0obPg2VDJVbTTKUiW2TgQEtPdokpre2n5TFipux8= 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=aVJc/7/T; arc=fail smtp.client-ip=52.101.228.117 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="aVJc/7/T" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=i+ygUHm2Zi/HOu9n6ptlulSCrqr1beoEiHDfiS/lL9cbSxtg8L9W4N4mbGbySzsToWXOD9Mhpe38TmmD8gRwzwRNv1kdD7b7eXzTAsJ9xsH9u6go2Y1bQn4k4mYlzdX4NBXXJC829gi4m63Nbc9kEANlv/OC9KICsUrDPoaNMtImj9AK0w1PdofF6TKFaf487w35JGnAqjflc6POE434HqKuTNiREnYGsjvavNuDKBMoeBvXZGTKOHEd5rvI2nUZ4nDSHM2cafn5rYNsmOERnXapw4UaZxfKDtK45/s+SYYk4GcYU2FS6yIURQTO2Cldszpj0h0vje+og+biaOnWdg== 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=LmZ6hbpugReJK6Dpis4ijSWWldbK6J+3kcRgGdadZm4=; b=tdMP8SUidz2QLYBFXN3E7MI5IDfrONNqsJbRexqtwqJKVjWOqXUuNQ4XX0aGFGbZXPH6NI6AHyiIte/3d2b0xfUZA30ztuq3/tNZUEK+8nmSWS+vrbcXDvpm1uf0GV+2mC/9GHSHL62Fyar2nMz5DynscexZWbj9WfRS++PWjILwLzB3YuDKTNLvnWMduK6XbMiPN+E75ArNWEuMATSBMiGuBrwJjxcRkzQ+aXoKcFNybmMGqAUc0nwAYw27k6+W/ZZSZe/oFoS5fiIPJKC6OIgXlFV4spk3dU6xmo73CEhQafU6DTh1M06cvMHTgCP/mA8gJOHHh2SHj9U0uUky3g== 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=LmZ6hbpugReJK6Dpis4ijSWWldbK6J+3kcRgGdadZm4=; b=aVJc/7/TQdugzOuuqDIuD/DAA6jCFaDQarD4Cd1iUryKXVxsQXU7vZ/DaZTmbadNuQIFSX2KIDnDwwrTuNPbSyOeuy7XX46I+Fjm1Lsc75s9OWdbHv7mukdzY87adtqhG41A9ggcmVUMFF/kxH0bBQkkyQ4/SuvN9uZDARsytnk= 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 OS7P286MB3742.JPNP286.PROD.OUTLOOK.COM (2603:1096:604:237::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9587.18; Mon, 9 Feb 2026 12:53:24 +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.017; Mon, 9 Feb 2026 12:53:24 +0000 From: Koichiro Den To: vkoul@kernel.org, mani@kernel.org, Frank.Li@nxp.com, cassel@kernel.org, jingoohan1@gmail.com, lpieralisi@kernel.org, kwilczynski@kernel.org, robh@kernel.org, bhelgaas@google.com, kishon@kernel.org, jdmason@kudzu.us, allenbh@gmail.com Cc: dmaengine@vger.kernel.org, linux-pci@vger.kernel.org, ntb@lists.linux.dev, linux-kselftest@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v6 7/8] PCI: endpoint: pci-ep-msi: Fix error unwind and prevent double alloc Date: Mon, 9 Feb 2026 21:53:15 +0900 Message-ID: <20260209125316.2132589-8-den@valinux.co.jp> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260209125316.2132589-1-den@valinux.co.jp> References: <20260209125316.2132589-1-den@valinux.co.jp> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: TY4P286CA0082.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:36d::9) 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_|OS7P286MB3742:EE_ X-MS-Office365-Filtering-Correlation-Id: 0c966a81-fc75-40ec-97e9-08de67da3648 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|10070799003|376014|7416014|366016|1800799024|921020; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?v7dznlfjP6x9zPBBvj8L0JUpK3xLyxl54RVXjo9o6WSnrimLxId7XpzgwufE?= =?us-ascii?Q?ibljWQWQPjng6cZE0RAwNW5jPPjIsaj/m9eVNK1bLxsMcBSmArup+s/rHuj3?= =?us-ascii?Q?i3jVjRZ8Nci3bwrqoe9gma49OIsyQZKOeRrJNob3QgM8jCEROtusYUoE4eN7?= =?us-ascii?Q?P0SkC+6vB/9kJeEsBF+Qxrt7d9j0qT62KuaMl7QDVx0fFR/lhudgoC/OqyCe?= =?us-ascii?Q?eGKPHUY7ifjl7iaiiXk1s2mhab6sJ+S8mRvkO28A2T6HtfJGCnuGYRtq67kx?= =?us-ascii?Q?ZmZhg0R73pvOR531//mQJSE789Vqj6paEoyXm0HEOU2t/2r0piWvMRkNNyRp?= =?us-ascii?Q?qSXuvD+gKrib+qVCqIvUb+274qEBZZrKFPRaD8RitmKRNNwxc/pPQzs6mXYM?= =?us-ascii?Q?+ZusYU74N3GE+7qrO45+c4f3KK99T2WB/g7ER1QqXMRRSCDqtuY+849MynDo?= =?us-ascii?Q?Mvpc25kceNrioUS5im934mAMCkf6UfIMwcgVTcMIkhtOPPqfQbvqbizorqdN?= =?us-ascii?Q?1twtjZbrol2hyrAPYcVtVIMyFDjObehhm4qtFJu6/2vb97YbDIcDtCDKitP/?= =?us-ascii?Q?jMypkmjRLIF9/PM6VbgK9kNVfFRVm9uFPIpIHHlgUhuyJ1+MzrKl4VGGHw8v?= =?us-ascii?Q?YtzuYGPaQ4GAo42kb6RRa7Jre/QExahD7DhHkDOkeme3Lno3KUKXkpKrYv3d?= =?us-ascii?Q?GL3FnPj0a5P0LE1VqKOpgtgUB6itvbLrGYPY7HSRgg78Xm7C+q/F5N9ytaU8?= =?us-ascii?Q?x52Y1ZyhuYQV1WvFh2RFD3blFp3xzjju+0OpFvvIx7+QZ8eyR5WjwolA9uKH?= =?us-ascii?Q?sm03wpM1YOQ+kCQW18NB7yADVxrcZgDATJQwP/OGAXhaGLbpchpNik01Kjsi?= =?us-ascii?Q?GbYbtnhlXRLXgAsWyJV3IdfjpZIE0bYRsvYti+pXV68Py6LUJX1PU5/Dlmuf?= =?us-ascii?Q?k5rZYfjTaM6oQXOSQ31mybFzvM1MPDucSbAkqNl0wHmBbyQ2vYC7dlOWmHJu?= =?us-ascii?Q?rq8IGM6K/yM4NEP2weN3A8cysYjvD4yP5g9iOQojiwcXkNDpNuGQuqLeYK4S?= =?us-ascii?Q?EfJijcOMK2VE1kQCE9yak9mfsTsnghpvG4fBT1nusDL+tKiFgOxR9F82SzJj?= =?us-ascii?Q?hNZBaTKw/s5Qtl3HSc9f/qIoSa1sl9KoEAIH9u5fablzjZoy22Y6YfZFKSeg?= =?us-ascii?Q?RidZZF7J9lD/orfLs2gwPevDZ+rrQ37aiOOKl4KqxwuAyL32fGVsKsjtY0q4?= =?us-ascii?Q?Fb4WnK3QgybE7ADKTobA4q2j29eSB3yMGGJL8z/hWnnHFhC45d0ilKLzwnLL?= =?us-ascii?Q?SbqNvzuEChWscDKYdnocqfo/Sltj6Yr+3Y8SHJByIeEx48N2yDggGyVoBkbS?= =?us-ascii?Q?rqq7vNy3FAAKdWxnf3ahBJVXVOiHk80Xd1ZDx3eIHvGwu/mFd9h/EhyVaUev?= =?us-ascii?Q?3YMpk2dag5+lC+qPGeC0zFTT/aOJqP6xz+4ZY5TBADCg1a9JSLdRvV+ZWfI1?= =?us-ascii?Q?uvQMIQFA/PYUBZrlyNCL9fTgRxKG+RusuKgf6/6ckfJx65eOr2fJdkczig6R?= =?us-ascii?Q?a1zDJ2vjckt0adlD10Zz3Gihfolk/CJ/62yD0pXMIzp3Np7QIFQqKVWVtrxz?= =?us-ascii?Q?+A=3D=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)(10070799003)(376014)(7416014)(366016)(1800799024)(921020);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?RJTHV60Z/TlB+K+8vJKH7l22aS/DH+pGHOkZKca6afbbyxgA5x6lpWeRkSTh?= =?us-ascii?Q?MBZ6TgpVMRNfo3Adr5U4fYSGwtPkxQK77DwgUbzjvIWz7nzjcaZC5y6gN2N1?= =?us-ascii?Q?Tbjmv0XBdLNLcf77Z7it2hhoiUUB8l5wEEsBFDM3GevvBvcfACsNWkFkR83X?= =?us-ascii?Q?YLUSKT0tm5BkeKwY15kBsP2NP3nPfT7ZNMeqByf5IXPyq9AVxuE1boIcu45L?= =?us-ascii?Q?FKdD5ZP4FoLlAZLLz4qToJ7SVsZPT7Kb3QGPoEiAAewp8oWeS1gOKW5HRh0s?= =?us-ascii?Q?mx+hRy5Jmtn/s4eQL+RVpNS8vL8melAiK/fCAwHwswNbdVKfnTsmpvKNRgmd?= =?us-ascii?Q?YPL7J7igjZ0Z4OCOMSK0Dj89lvBuHBB5vct96KfQAlBnN9Z0wryCgflHur2j?= =?us-ascii?Q?UZuG3PzkMxg5R5bYS6wBxg2q/D+OM+sgRvmmcd9TVFQnJxxNgzXZcESUzZdT?= =?us-ascii?Q?UvIQyf7YA5Qy8UdSFrzgdB124HdlF8KtODiXpw6cmwigP63KQUmOoykFlP0G?= =?us-ascii?Q?Dqh7D3LBf9e6r1KMQ0Ma39h8cSrWpwIToPkHvSXqxliGK6dyDwD6FTl2AGC1?= =?us-ascii?Q?ZttfZGIRzLMXaeHUyftTqxmIxURydgam80lKI2VliAWA2oQbmXHfyhccI3Lh?= =?us-ascii?Q?6UhaEyqBrwp39aSzUe0BZdIxBXbufrjr6Z9ivpkWOsCZ+lkFoyCRgTZsMTSf?= =?us-ascii?Q?+fFN3cEd8jBj4nTziHpZ8v7TFES/nACK/zV9MNjV81RZgZ822FOx1olI4GNB?= =?us-ascii?Q?zifgQoZJelbxkZ+ybZdXyzYvzHNg1RJH5G95pZlfxC/KA1GUobf8sF8RXbwx?= =?us-ascii?Q?kws9hcA8MBMJQn6998S6MsbD7d2fdTUPFyZx40IprY7wKmu+481Sl0zp/KhS?= =?us-ascii?Q?DNcWALd+qvcI9RVJGwnBPIf0sLYlKfjMFFZw70B0NjQ3gpIyDnHXqSgrgJyS?= =?us-ascii?Q?BgnEZZw6nGKiQUb/dVqfTLo/Zn8m11yPSMiRn2lnSyyOjhi+sUUZgZR+1bIG?= =?us-ascii?Q?VYZFJmJGGKqApSB+PXP0bmb8vhu6fq8hPHeCG/KRrmBEoOKZ675m6fJ/QKv3?= =?us-ascii?Q?QsMRjmwXuL/GxjUbEIFlEThbjaBx0JLQMbRJ8vM6c3aMr6no40BADBJYUf96?= =?us-ascii?Q?4ohY43Iuqh8j4avP5GFZSiZCh7bbbxgSrpu4M0CL4cR3W16+ofkrm+b2cyvr?= =?us-ascii?Q?TJgUb7cqTn5vneE2Ss9UfBksI/4/qXhLKWt6l4LYnU28DGD8qXnT08fpmF/W?= =?us-ascii?Q?f4V+mSsRICcAEAmvRrftdhB2QU3pKxtG5pFTtGwMCsJ3kfv7AjC6giDORx+h?= =?us-ascii?Q?vWIoIkM+OpWHzP6AruypSWZm3OAvGCLZVgQXSuS5XL2eP24M4a/HQyEQqDLR?= =?us-ascii?Q?r4IRN2ikNiV1jI/IRjYo3gJal6a+E/mZWqgiFFy08N9ZiPNP/uKunxAuOxGh?= =?us-ascii?Q?gFMAirzWY4X2UwdDo8KKaJHXCuPXEBXkRn+CQdn1I4u01f55RIsrIebW0eVI?= =?us-ascii?Q?PfpWspVIEm5W4y73xs80XvASOm0sHNTMBRf2I0UdMP63R6YLh9NJDHtdVD+9?= =?us-ascii?Q?Qpv26yd6jU/4rYp37DtwD0wObLjoCkgbmjEtJ4q7kGAPkWW4Oieun5PGqvoj?= =?us-ascii?Q?QB671EloepsqVGh3XqYPb7PHHr1eBT9JfUOC8sJbApnpLjiD7jjAKxd2S8qN?= =?us-ascii?Q?jKjiR6gLbPg3PX3i2CJ8mRKdYy/1LUXL0Wyw6fdpIynNA5lePn5GYyPEeVB3?= =?us-ascii?Q?GdA5opX0bj72u6ClrJLbgxhb4wYcd97yvYmc3zoXjYIzwMuk48/a?= X-OriginatorOrg: valinux.co.jp X-MS-Exchange-CrossTenant-Network-Message-Id: 0c966a81-fc75-40ec-97e9-08de67da3648 X-MS-Exchange-CrossTenant-AuthSource: TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Feb 2026 12:53:24.5117 (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: 35+Q3LL51Sq/c4+DFZ1rIVnx8oVtNXX6U8KRZX7g6bw3z0vFDNsjjwqr0IIv+0DwcYbDvRP6ATNNnhrw5xPi3g== X-MS-Exchange-Transport-CrossTenantHeadersStamped: OS7P286MB3742 Content-Type: text/plain; charset="utf-8" pci_epf_alloc_doorbell() stores the allocated doorbell message array in epf->db_msg/epf->num_db before requesting MSI vectors. If MSI allocation fails, the array is freed but the EPF state may still point to freed memory. Clear epf->db_msg and epf->num_db on the MSI allocation failure path so that later cleanup cannot double-free the array and callers can retry allocation. Also return -EBUSY when doorbells have already been allocated to prevent leaking or overwriting an existing allocation. Fixes: 1c3b002c6bf6 ("PCI: endpoint: Add RC-to-EP doorbell support using pl= atform MSI controller") Signed-off-by: Koichiro Den Reviewed-by: Frank Li --- drivers/pci/endpoint/pci-ep-msi.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/drivers/pci/endpoint/pci-ep-msi.c b/drivers/pci/endpoint/pci-e= p-msi.c index 1b58357b905f..ad8a81d6ad77 100644 --- a/drivers/pci/endpoint/pci-ep-msi.c +++ b/drivers/pci/endpoint/pci-ep-msi.c @@ -50,6 +50,9 @@ int pci_epf_alloc_doorbell(struct pci_epf *epf, u16 num_d= b) return -EINVAL; } =20 + if (epf->db_msg) + return -EBUSY; + domain =3D of_msi_map_get_device_domain(epc->dev.parent, 0, DOMAIN_BUS_PLATFORM_MSI); if (!domain) { @@ -79,6 +82,8 @@ int pci_epf_alloc_doorbell(struct pci_epf *epf, u16 num_d= b) if (ret) { dev_err(dev, "Failed to allocate MSI\n"); kfree(msg); + epf->db_msg =3D NULL; + epf->num_db =3D 0; return ret; } =20 --=20 2.51.0 From nobody Tue Feb 10 04:13:08 2026 Received: from OS0P286CU011.outbound.protection.outlook.com (mail-japanwestazon11020117.outbound.protection.outlook.com [52.101.228.117]) (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 E4399378833; Mon, 9 Feb 2026 12:53:25 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.228.117 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770641606; cv=fail; b=dK02JWu6RzIebbXun08JgpZHJPeVCAl7byYcP7WRpmcH+IodcvqV3v62fFdUMJLUNousxzzqG0P8vsIcxmwLYzidxSvEVI00ZTP3RrDhgDAOn3FAlmisBj8fev9gAXOTeOb9SF87JdvQT6NwPBVED0yAeLQgMDKg6maAv+IoSzI= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770641606; c=relaxed/simple; bh=Q0LxD97Soj7hEJ+St3dA85CRI/wAKQPn63lpzpyTUtw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=WiO01YNz4KZAX6e2hnttZb1x5mQFbmriv0J2WhwmydP1Ouniswvv1tD3gOAx3gernjeXVoJqaQvOj3UjuRA742Nnwk2zIxWofnGmbQ58uS8t45gBZH0QvvRnlC/HC3bnsBFiaY59vt22EZ0GmTGt/IrMGjjylO/WCplX+uB2hCk= 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=SD28gjgA; arc=fail smtp.client-ip=52.101.228.117 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="SD28gjgA" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=LTh8Yq7UT5oBkZK8JL5rYDoEdAKHBlh3sPF3lrETooTJRfqu29KxadZVY+rdW/chYYJwaGTI64wRc3tHedz8buk6NwnzsCUk7C9kcCXZz5zm+0EgiB7PK32Qp3iyo6BU2IhdPxm4fXCzNWS/XJMdyrcZW4doJGpwFL6hpc5ELs/SyP1TQLDLOV4la/PGhxaOQWYWX/ExtuRj3EOo6viP1fKshDGBmGcin0qm8IC3vpe7GQTmY5/lBnP//sueUnsIxBYeO4X/spZn1rRnviUsRmt6JGeGgUtlPqOtla3rX2Eko5OCnFjpTifWbQGAMywO++FsXtChqaEVHT+JrUNKaA== 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=oNuuLIYbMWpPnjLs0IFMtvTnw+yFC3V3O/P17UR8MkQ=; b=n68REHE/WW+/SUmJEeCMP9eV0IAAj/2kvVWIb+H5z5MuNhWeljbvOfyOuVDdwkt0towK6VUr6zcjBQMOubOlCvFcE4gVGY+q3NDyiTse4+hHAydv9DrAw6dOFJYx+nrm3yvuly6O0/3CpzEOL6gf9eN8rQB2IsYPNnvR3T8yUbagOu947HneDuMcb1DS5JvDJLBiqsJJcMhHs4b7f9V1F1xGgmvbUYfdB9VSvdKdb8jR0hiGhVr8NBkn/cNziKTVTcAfKLX2NIRysXqG7jfj7odxhCjnLWsxbdgzCmMJZeFjJ5PR2GQGk7Sjq/QTeuibRnw8nLo9rQyYS053D40YjA== 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=oNuuLIYbMWpPnjLs0IFMtvTnw+yFC3V3O/P17UR8MkQ=; b=SD28gjgAvde564yyuBC/oDLfl72SfHHycZ2rG0ygx0MMt8SbjTZHO2/oTx+IyQH3nv9YvM549oE6nAclV8Q7GL6yMQGCrLZdMKyNordSJ4n/rQAhC+DQNQJsIFrKLJm4Tlp6YRyFBNd3EnLqWpsXg+QA3uoduZEWIZuTI11Cbks= 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 OS7P286MB3742.JPNP286.PROD.OUTLOOK.COM (2603:1096:604:237::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9587.18; Mon, 9 Feb 2026 12:53:25 +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.017; Mon, 9 Feb 2026 12:53:25 +0000 From: Koichiro Den To: vkoul@kernel.org, mani@kernel.org, Frank.Li@nxp.com, cassel@kernel.org, jingoohan1@gmail.com, lpieralisi@kernel.org, kwilczynski@kernel.org, robh@kernel.org, bhelgaas@google.com, kishon@kernel.org, jdmason@kudzu.us, allenbh@gmail.com Cc: dmaengine@vger.kernel.org, linux-pci@vger.kernel.org, ntb@lists.linux.dev, linux-kselftest@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v6 8/8] PCI: endpoint: pci-ep-msi: Add embedded doorbell fallback Date: Mon, 9 Feb 2026 21:53:16 +0900 Message-ID: <20260209125316.2132589-9-den@valinux.co.jp> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260209125316.2132589-1-den@valinux.co.jp> References: <20260209125316.2132589-1-den@valinux.co.jp> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: TY4P286CA0076.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:36d::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_|OS7P286MB3742:EE_ X-MS-Office365-Filtering-Correlation-Id: f7ca2714-bdc5-4578-58b2-08de67da36bf X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|10070799003|376014|7416014|366016|1800799024|921020; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?KYQmxxNp2PKJdga88EJkTPAtWMktb/bDv9d/IYNwWrPYgecCDpovmjdyFDGB?= =?us-ascii?Q?2vLPh52qBpVHZ8xJF++Dk/0RvhExMXx7yRhr4nY13YbJ2kwNIXt1haL3kH3g?= =?us-ascii?Q?8/R0Xf1SIJAJOHun+q5ssu6QJSUB8GDyBY/U5d7gsWhvhZ2SVfEaUrnvlKh+?= =?us-ascii?Q?HQ4v6uS25tGct5yqoUZ/kUfTDaMfzVOrC31LDfVcthyVyGiz46CPq2oVNVSV?= =?us-ascii?Q?hiB7MdFSkcCzUQQSthlyqGBLfgofP91po5TTXyCYfU1uEySaJUQSnrlgreoO?= =?us-ascii?Q?dQvioYgpzjp9XSbBiB3BLWpuIe+S0IOEskp2S35HmkyZEqGADKkwuzTISenp?= =?us-ascii?Q?rtJBqyGrZM/xpOtAPrxlYopBkDZyqVrVjta2FFmKqQUry3Fzfb1n0nN2oswI?= =?us-ascii?Q?4hTOqaE6iVra+fuKpl8PIb7MDT6m5S2iySaq2rCDUFuLVnWz+ZzdTf0FLfxw?= =?us-ascii?Q?GhgUrvHH1mKPwmtTm/S3O5sMDW9RAYfWjdvKugabrUj3zN7PQm3NNWjqg31T?= =?us-ascii?Q?4pMdZyTNG0H+3CnGGYxyMsvQOE3PsDV1gWdjwlmRzPuDGVdCbrxLDf/e4vvS?= =?us-ascii?Q?37n1ah5o4jtdGwi2JK3lv/zoyA2jzIUI7UfWyVZbys5IQKfYzikLYK5S504o?= =?us-ascii?Q?G6+CQeBwJFvbLOlXHprBbzKTVdtAip/DWJW7f5AcgEjxCqCDHfCeCzxuAFXk?= =?us-ascii?Q?3qlPRQUnpPeDI2qk2+EWbtQ8Ck+f3nkgflRPXS1zeRbJMp3APTzSjMYuoGUF?= =?us-ascii?Q?+xCGCpRBuqzFBD4OcFDN1rROLBDDg7WUPYnmUvtrVk63b46rgpGzF9293xvd?= =?us-ascii?Q?PiqwqEnV4K6/uoNBywatwZ4aJXV/0ThZgV2pLSYVhTxXW/gsoUOFseIeVMOm?= =?us-ascii?Q?/pAMluAFX8sGbj4Y4ZEWOR9LT5NjttC7dM1mDIlcA7tynAWFTLKcDQlzfx4p?= =?us-ascii?Q?ClPIIP35QMWBONQhA+dxpG5Ic3ktND5bi9kLqkBjU4E640+ZyWL0cmi3xjLM?= =?us-ascii?Q?mlZcJmI0U0ZNSN685wpXAFLEXEnU7/TUXuH00N9qaYOSYi2S1xKawvzAnnAs?= =?us-ascii?Q?K1aa2wJ6/ZDUaLtHYHrRGivnSIWcHhC7yur9Z4ICYJeJzIaPp5J2BZu8ZqGC?= =?us-ascii?Q?zf3HLcQZn9H5N3FfzGPeiflHeCcc1NEE8/pBYkPGVRBXGnIk4QLqHJIsAQmN?= =?us-ascii?Q?kYU2zaq/PVWsSqX07s4gIos8xnminKuD01rvOFu60bmbWNdrjh0pV7p1bcPj?= =?us-ascii?Q?Drdf/ckD42hvARQopTIfs9Wd8v7zqtkte5EskvjY3EoV7vtHPdsF0yuD0z7t?= =?us-ascii?Q?X7Q2mbxZW4ryU/h0SlmqHKt2/hMR0dOPsdfiBI3hGjhoAswoXr8f5r3Bj2en?= =?us-ascii?Q?S3alVSsHKeFnEv0zu/GxYF9Y6ZJq8pa2CMjzhWLL7LuE40QcVfBnDhGB1ig0?= =?us-ascii?Q?V9CtZxUSu3H+BnBneGcOQdL35lsnYJYSUBo6f+HRE6vQ4Hs9nmcbObFmPyUx?= =?us-ascii?Q?wyKSka8wBVnSsehXpVU6XTQxChYRzPtn6tb7RKIY31k6xsscsC0/RUsrgMyx?= =?us-ascii?Q?ozHaGBipiz0hr3OGCDhgSX9a1PQlNF/GcgObRGgdkSOp3P25AEEPiqaVvOKs?= =?us-ascii?Q?UA=3D=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)(10070799003)(376014)(7416014)(366016)(1800799024)(921020);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?FM3phAqmiM2R9yFxBQehzlm78bzh3AMmgr+DDaF/BVmIWyWrznIklt8P39ak?= =?us-ascii?Q?QYDKaBQikKFQTiFUz7/WCQR5kBxETgZ5klQ2YJhv47qiA1+0q/zumT/cVmSV?= =?us-ascii?Q?B6+LFEuC3z5a3zDXrUy1MFYlu0soZknwDvg8BC2PfV63N9Us2sViNEYenpoi?= =?us-ascii?Q?bY0ZqqEl3DQweAw66kSQVW4k7nsATXuQpEJIWLSrAW6sptGAwSfVTOSSHsk0?= =?us-ascii?Q?qG1WZE4LqCYjKyRsYE1NTiJjgNRxCcF6Y6HtQILkAhmyNeeJudy28ly41PiG?= =?us-ascii?Q?4Rvm1zzIY52m8ZiW8AblpBvLkPFCrI66FC5qVnpsKu+INOEUEayHPqAPsQnL?= =?us-ascii?Q?rdghEqExvaWJ64lr6O0iqAhHm6dDaUbEQI7ZIe/trVDTpWAA2y6qaHQ0VT/U?= =?us-ascii?Q?jBCZ6kTKb77iz0FgyDKq6ld5u6CCrvSqM8d8y8tcpSLXplAIKv8kb7hL4rI+?= =?us-ascii?Q?IqiP3Vr/gFi5Q9vOBDgBXHEeWW5nplvN/Ku6KweQBU6ynyVGGVjVfHCQdaFJ?= =?us-ascii?Q?lFQUYJkiIt7veZELrSCK6RB9IQt82+j5kMQ28OW+hlgaDorRl00Tx5T585kk?= =?us-ascii?Q?v9CORG7Qs19dI+JUsdHg3ffzgT8K2+w75jfHwzu2/9Qe+8A5casb64d/b1GA?= =?us-ascii?Q?+SCm2NjtSONDQxsglVLV8c8i1yHpYllxnTIr1+Q9EWaRhrDlR9a4YV7gPwqK?= =?us-ascii?Q?35zjNtCEcqXTLhijJPZgQUnjshoS/XoKYj8fp6bLhuaREvjRHYbucdvTkabz?= =?us-ascii?Q?LPFBdu2lG+Pue3YimwQ23mSigxMnSVkVBzHv0NvN/0fYbC0p5mQUK571zQTx?= =?us-ascii?Q?22pBR6HtcR+SxdKrnJvB3a4gLqBXJN0+jNnYSjPykZ/ItTfFzb+LZc07B7A7?= =?us-ascii?Q?K9CeIRiRMbFFDUzm17K0f8G+BJMLhNLYFqIw5yfQRSEAZpH05wUUNssgdrHm?= =?us-ascii?Q?DSCSEpbLcUVsh2nm8pqZAisCb63TuM8KewOCTLZ+Pl3A4Lr+FKni5DilKQ7x?= =?us-ascii?Q?SCsGRsMzy00TH52mS7ZDLaadDlrw8V/spHG5AikIKD2N7bF8iIwo5pKLjbKp?= =?us-ascii?Q?AaSSqesCWxHIMDcgRuRWeq/hudnpcBCUZX8nHc776E6En2zBoUkHef5rnoGr?= =?us-ascii?Q?ZbXbz0I1t23PA/WZBc9Uy0xRfx1rm/s5uxwv3Yh04+K0xmNHoWDhkkEMKZv0?= =?us-ascii?Q?G1cpZuj3+t8BBo+GKGzaBz6ebMmv53nBxWv1mBb6oDWDfEBTOX5jRfGOZMl6?= =?us-ascii?Q?1wWnKftyRi6kw8J2G+5sMvZ8/aRLy+d37m49Z3f+B4dvHsbL+uJx85VNOmfy?= =?us-ascii?Q?Oi/bfB19abe+gV+ER/v+K6NhlG5lIk++Z4HHsUvcsIzqXRkUxHUeeAsiopQz?= =?us-ascii?Q?PCmYeddJH22Gb7fTbMn4EgCbeYlyA4O5b+5zNp9rcF+U+fV23w05I0b+S4Gp?= =?us-ascii?Q?vbWPOxTwCidvOstxyy8Dw176UaVJnU06UDkBSsu1J6K4CyNeQVzzJeIL2muG?= =?us-ascii?Q?NWdHdT/OZAPulyDWmNnEv+RDPPUSNKYPZUX0LEdPOdY8vwnmuLqIJQ0FJQQG?= =?us-ascii?Q?Az9nnrQrifAvVBQ0j81bzletfofxZ4pF5VajsxG6ppHOORJT8hbAnfpcbWMm?= =?us-ascii?Q?3Enki0HbDh8WGHCM2daS7ZYSbcBbLAUsqm+RzSHN+EdsaVitmTXwZ0Ijuge3?= =?us-ascii?Q?E8kMx6ujhzlT9pRVD5e8Yf+cVM7ROhm9+uWoEZi5R05RN1HRpQReWYhTGyvS?= =?us-ascii?Q?o2VL1IkKOyyA9U9waUXy90Kdsr5NvMq0h0sTz3/vAjrkhUXtsoBD?= X-OriginatorOrg: valinux.co.jp X-MS-Exchange-CrossTenant-Network-Message-Id: f7ca2714-bdc5-4578-58b2-08de67da36bf X-MS-Exchange-CrossTenant-AuthSource: TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Feb 2026 12:53:25.2772 (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: qJftb03hH7Qv+HI3Sn0krKMSPpPvhRutDmTYsBsQLVqG3h8jru3SELsmxHA94Y+lIDUsZQpFB0w3vbyMQIpJFA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: OS7P286MB3742 Content-Type: text/plain; charset="utf-8" pci_epf_alloc_doorbell() currently allocates MSI-backed doorbells using the MSI domain returned by of_msi_map_get_device_domain(..., DOMAIN_BUS_PLATFORM_MSI). On platforms where such an MSI irq domain is not available, EPF drivers cannot provide doorbells to the RC. Even if it's available and MSI device domain successfully created, the write into the message address via BAR inbound mapping might not work for platform-specific reasons (e.g. write into GITS_TRANSLATOR via iATU IB mapping does not reach ITS at least on R-Car Gen4 Spider). Add an "embedded (DMA) doorbell" fallback path that uses EPC-provided auxiliary resources to build doorbell address/data pairs backed by a platform device MMIO region (e.g. dw-edma) and a shared platform IRQ. To let EPF drivers request interrupts correctly, extend struct pci_epf_doorbell_msg with the doorbell type and required IRQ request flags. Update pci-epf-test to handle shared IRQ constraints by using a trivial primary handler to wake the threaded handler, and update pci-epf-vntb to use the required irq_flags. Signed-off-by: Koichiro Den --- drivers/pci/endpoint/functions/pci-epf-test.c | 29 +++- drivers/pci/endpoint/functions/pci-epf-vntb.c | 3 +- drivers/pci/endpoint/pci-ep-msi.c | 129 ++++++++++++++++-- include/linux/pci-epf.h | 17 ++- 4 files changed, 160 insertions(+), 18 deletions(-) diff --git a/drivers/pci/endpoint/functions/pci-epf-test.c b/drivers/pci/en= dpoint/functions/pci-epf-test.c index 23034f548c90..2f3b2e6a3e29 100644 --- a/drivers/pci/endpoint/functions/pci-epf-test.c +++ b/drivers/pci/endpoint/functions/pci-epf-test.c @@ -711,6 +711,26 @@ static irqreturn_t pci_epf_test_doorbell_handler(int i= rq, void *data) return IRQ_HANDLED; } =20 +/* + * Embedded doorbell fallback uses a platform IRQ which is already owned b= y a + * platform driver (e.g. dw-edma) and therefore must be requested IRQF_SHA= RED. + * We cannot add IRQF_ONESHOT here because shared IRQ handlers must agree = on + * IRQF_ONESHOT. + * + * request_threaded_irq() with handler =3D=3D NULL would be rejected for != ONESHOT + * because the default primary handler only wakes the thread and does not + * mask/ack the interrupt, which can livelock on level-triggered IRQs. + * + * In the embedded doorbell fallback, the IRQ owner is responsible for + * acknowledging/deasserting the interrupt source in hardirq context befor= e the + * IRQ line is unmasked. Therefore this driver only needs a trivial primary + * handler to wake the threaded handler. + */ +static irqreturn_t pci_epf_test_doorbell_primary(int irq, void *data) +{ + return IRQ_WAKE_THREAD; +} + static void pci_epf_test_doorbell_cleanup(struct pci_epf_test *epf_test) { struct pci_epf_test_reg *reg =3D epf_test->reg[epf_test->test_reg_bar]; @@ -731,6 +751,7 @@ static void pci_epf_test_enable_doorbell(struct pci_epf= _test *epf_test, u32 status =3D le32_to_cpu(reg->status); struct pci_epf *epf =3D epf_test->epf; struct pci_epc *epc =3D epf->epc; + unsigned long irq_flags; struct msi_msg *msg; enum pci_barno bar; size_t offset; @@ -745,10 +766,14 @@ static void pci_epf_test_enable_doorbell(struct pci_e= pf_test *epf_test, if (bar < BAR_0) goto err_doorbell_cleanup; =20 + irq_flags =3D epf->db_msg[0].irq_flags; + if (!(irq_flags & IRQF_SHARED)) + irq_flags |=3D IRQF_ONESHOT; epf_test->db_irq_requested =3D false; =20 - ret =3D request_threaded_irq(epf->db_msg[0].virq, NULL, - pci_epf_test_doorbell_handler, IRQF_ONESHOT, + ret =3D request_threaded_irq(epf->db_msg[0].virq, + pci_epf_test_doorbell_primary, + pci_epf_test_doorbell_handler, irq_flags, "pci-ep-test-doorbell", epf_test); if (ret) { dev_err(&epf->dev, diff --git a/drivers/pci/endpoint/functions/pci-epf-vntb.c b/drivers/pci/en= dpoint/functions/pci-epf-vntb.c index 3ecc5059f92b..d2fd1e194088 100644 --- a/drivers/pci/endpoint/functions/pci-epf-vntb.c +++ b/drivers/pci/endpoint/functions/pci-epf-vntb.c @@ -535,7 +535,8 @@ static int epf_ntb_db_bar_init_msi_doorbell(struct epf_= ntb *ntb, =20 for (i =3D 0; i < ntb->db_count; i++) { ret =3D request_irq(epf->db_msg[i].virq, epf_ntb_doorbell_handler, - 0, "pci_epf_vntb_db", ntb); + epf->db_msg[i].irq_flags, "pci_epf_vntb_db", + ntb); =20 if (ret) { dev_err(&epf->dev, diff --git a/drivers/pci/endpoint/pci-ep-msi.c b/drivers/pci/endpoint/pci-e= p-msi.c index ad8a81d6ad77..0e93d4789abd 100644 --- a/drivers/pci/endpoint/pci-ep-msi.c +++ b/drivers/pci/endpoint/pci-ep-msi.c @@ -8,6 +8,7 @@ =20 #include #include +#include #include #include #include @@ -35,23 +36,84 @@ static void pci_epf_write_msi_msg(struct msi_desc *desc= , struct msi_msg *msg) pci_epc_put(epc); } =20 -int pci_epf_alloc_doorbell(struct pci_epf *epf, u16 num_db) +static int pci_epf_alloc_doorbell_embedded(struct pci_epf *epf, u16 num_db) { struct pci_epc *epc =3D epf->epc; - struct device *dev =3D &epf->dev; - struct irq_domain *domain; - void *msg; - int ret; - int i; + const struct pci_epc_aux_resource *dma_ctrl =3D NULL; + struct pci_epf_doorbell_msg *msg; + int count, ret, i, db; =20 - /* TODO: Multi-EPF support */ - if (list_first_entry_or_null(&epc->pci_epf, struct pci_epf, list) !=3D ep= f) { - dev_err(dev, "MSI doorbell doesn't support multiple EPF\n"); - return -EINVAL; + count =3D pci_epc_get_aux_resources(epc, epf->func_no, epf->vfunc_no, + NULL, 0); + if (count =3D=3D -EOPNOTSUPP || count =3D=3D 0) + return -ENODEV; + if (count < 0) + return count; + + struct pci_epc_aux_resource *res __free(kfree) =3D + kcalloc(count, sizeof(*res), GFP_KERNEL); + if (!res) + return -ENOMEM; + + ret =3D pci_epc_get_aux_resources(epc, epf->func_no, epf->vfunc_no, + res, count); + if (ret =3D=3D -EOPNOTSUPP || ret =3D=3D 0) + return -ENODEV; + if (ret < 0) + return ret; + + count =3D ret; + + for (i =3D 0; i < count; i++) { + if (res[i].type =3D=3D PCI_EPC_AUX_DMA_CTRL_MMIO) { + dma_ctrl =3D &res[i]; + break; + } + } + if (!dma_ctrl) + return -ENODEV; + + msg =3D kcalloc(num_db, sizeof(*msg), GFP_KERNEL); + if (!msg) + return -ENOMEM; + + for (i =3D 0, db =3D 0; i < count && db < num_db; i++) { + u64 addr; + + if (res[i].type !=3D PCI_EPC_AUX_DMA_CHAN_DESC) + continue; + + if (res[i].u.dma_chan_desc.db_offset >=3D dma_ctrl->size) + continue; + + addr =3D (u64)dma_ctrl->phys_addr + res[i].u.dma_chan_desc.db_offset; + + msg[db].msg.address_lo =3D (u32)addr; + msg[db].msg.address_hi =3D (u32)(addr >> 32); + msg[db].msg.data =3D 0; + msg[db].virq =3D res[i].u.dma_chan_desc.irq; + msg[db].irq_flags =3D IRQF_SHARED; + msg[db].type =3D PCI_EPF_DOORBELL_EMBEDDED; + db++; } =20 - if (epf->db_msg) - return -EBUSY; + if (db !=3D num_db) { + kfree(msg); + return -ENOSPC; + } + + epf->num_db =3D num_db; + epf->db_msg =3D msg; + return 0; +} + +static int pci_epf_alloc_doorbell_msi(struct pci_epf *epf, u16 num_db) +{ + struct pci_epf_doorbell_msg *msg; + struct device *dev =3D &epf->dev; + struct pci_epc *epc =3D epf->epc; + struct irq_domain *domain; + int ret, i; =20 domain =3D of_msi_map_get_device_domain(epc->dev.parent, 0, DOMAIN_BUS_PLATFORM_MSI); @@ -74,6 +136,11 @@ int pci_epf_alloc_doorbell(struct pci_epf *epf, u16 num= _db) if (!msg) return -ENOMEM; =20 + for (i =3D 0; i < num_db; i++) { + msg[i].irq_flags =3D 0; + msg[i].type =3D PCI_EPF_DOORBELL_MSI; + } + epf->num_db =3D num_db; epf->db_msg =3D msg; =20 @@ -90,13 +157,49 @@ int pci_epf_alloc_doorbell(struct pci_epf *epf, u16 nu= m_db) for (i =3D 0; i < num_db; i++) epf->db_msg[i].virq =3D msi_get_virq(epc->dev.parent, i); =20 + return 0; +} + +int pci_epf_alloc_doorbell(struct pci_epf *epf, u16 num_db) +{ + struct pci_epc *epc =3D epf->epc; + struct device *dev =3D &epf->dev; + int ret; + + /* TODO: Multi-EPF support */ + if (list_first_entry_or_null(&epc->pci_epf, struct pci_epf, list) !=3D ep= f) { + dev_err(dev, "Doorbell doesn't support multiple EPF\n"); + return -EINVAL; + } + + if (epf->db_msg) + return -EBUSY; + + ret =3D pci_epf_alloc_doorbell_msi(epf, num_db); + if (!ret) + return 0; + + if (ret !=3D -ENODEV) + return ret; + + ret =3D pci_epf_alloc_doorbell_embedded(epf, num_db); + if (!ret) { + dev_info(dev, "Using embedded (DMA) doorbell fallback\n"); + return 0; + } + + dev_err(dev, "Failed to allocate doorbell: %d\n", ret); return ret; } EXPORT_SYMBOL_GPL(pci_epf_alloc_doorbell); =20 void pci_epf_free_doorbell(struct pci_epf *epf) { - platform_device_msi_free_irqs_all(epf->epc->dev.parent); + if (!epf->db_msg) + return; + + if (epf->db_msg[0].type =3D=3D PCI_EPF_DOORBELL_MSI) + platform_device_msi_free_irqs_all(epf->epc->dev.parent); =20 kfree(epf->db_msg); epf->db_msg =3D NULL; diff --git a/include/linux/pci-epf.h b/include/linux/pci-epf.h index 7737a7c03260..e6625198f401 100644 --- a/include/linux/pci-epf.h +++ b/include/linux/pci-epf.h @@ -152,14 +152,27 @@ struct pci_epf_bar { struct pci_epf_bar_submap *submap; }; =20 +enum pci_epf_doorbell_type { + PCI_EPF_DOORBELL_MSI =3D 0, + PCI_EPF_DOORBELL_EMBEDDED, +}; + /** * struct pci_epf_doorbell_msg - represents doorbell message - * @msg: MSI message - * @virq: IRQ number of this doorbell MSI message + * @msg: Doorbell address/data pair to be mapped into BAR space. + * For MSI-backed doorbells this is the MSI message, while for + * "embedded" doorbells this represents an MMIO write that asserts + * an interrupt on the EP side. + * @virq: IRQ number of this doorbell message + * @irq_flags: Required flags for request_irq()/request_threaded_irq(). + * Callers may OR-in additional flags (e.g. IRQF_ONESHOT). + * @type: Doorbell type. */ struct pci_epf_doorbell_msg { struct msi_msg msg; int virq; + unsigned long irq_flags; + enum pci_epf_doorbell_type type; }; =20 /** --=20 2.51.0