From nobody Fri Apr 3 08:01:45 2026 Received: from TYVP286CU001.outbound.protection.outlook.com (mail-japaneastazon11021077.outbound.protection.outlook.com [52.101.125.77]) (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 866442AD2C; Thu, 19 Feb 2026 08:13:26 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.125.77 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771488807; cv=fail; b=t2PrWtOiICFMRvG1t+Ch41tXqNv6L62DKnrteubVkn9VoObXNQqP87lj8qoSz4kSys3pSccIbl5Q2h6Gorh512U6ZfR8I9ESk1Ulj+m1xLuxiwUatQL0EQtxJ+wUqxqG0ShWiMNzkJChAqYA4d8zgfHacqxjUrzN3uUh0rCbM5k= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771488807; c=relaxed/simple; bh=hFad4MztiKu+0LXbEpMdvZEsH5qtIJuJjGZXO3zcx7I=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=Leylys3LZGdumjD2ohO9exhD2YJHvsyMn6tVMX4k9QQOEqpCiIVOlbDaw2evAYHlNBsYBWWiajpd9fd6VYBDFX2Gwhc+efLoXWjnxqcEisqZdbpBMBrH8+hh96iIbddh9pemLq1FTHhxSnCBzt2KeQEiOOG/SSKWT0KY8S8ggHo= 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=SfOh8zi+; arc=fail smtp.client-ip=52.101.125.77 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="SfOh8zi+" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=oMd+Zmar4HBIWwDOyvXZiywuk6tAZl8FBWAyZ39n/GoazfPjfpQzDpqq5ibTuvk2BH/19RzM5bHtxPBqLpFVhJ/h5pFaaZtaKHdxDNjjhZnzFYW1D9nTbxJ53cuJdt3BPE84Ey7adtaWQKeshBMBE0NzmNF1zn7v9s+zF/iBq6QRnV+4E2PzVkPbXz+h7nKP9/Nmj2O8X1wxyaRcrNrFmX8LQ29Gc6b1ucxCdkMPip7AtopXJoTEycbmVMxI04DGJvA8mB3rgRQAZuMGVeEHQ5iRB4TbBMMNo+I9NErVGLlfRZBcbFdYTJfhrY6RkPi833mdBWeGRB0XxekCrnrh/w== 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=NpmGhyMNcJwLhX2yiUVPmrJAM89gDo/+2KoUeKhv484=; b=mtR2Q93P+U53r11nJ1TW7JdAtvriuCHcmlOO5IWaEm3j8k2QO6T3w6Tji8xifBNo/ELR2YfbZ40qvu0GrBen0wRRvHqIsRpjQqgPYKSKBV8gzIqP29oDCADl5sdozeikWtcFF/7R4fV/nHiq8iiANa6f8SgIXQpWwE3bNUyIjp71iJt+itYHN5NE5140xQ2+cuggA9lidO5aXvl9xRaBx90rjTLPxI/1e1Hqy02Luwuq0dvujYFZtE33BXHxJRPzeztk0czuEKUDlhdLzVu6HmGWX5+GOH/iTwAAzcnowY5R471YxLYCgZUTFSBh2ev52PsiyqAcB5UXHvJ44mF7UQ== 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=NpmGhyMNcJwLhX2yiUVPmrJAM89gDo/+2KoUeKhv484=; b=SfOh8zi+6ZOmg1q4i5rIxTNIy6ti3OUC1+FTrubIGMuxivVo2xc/5r+ZjG6AacQu9Q702bmqtLZyypXZ0WFQfabJRlnJJ/SVIvghV8ahqZCiOxrVaYP0sact0t0ZBglDQo/R39TcX9i65ngzML83AwOOKIync78vzfal/4+ayQU= 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 TYRP286MB5862.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:2ec::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9632.15; Thu, 19 Feb 2026 08:13: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.9632.010; Thu, 19 Feb 2026 08:13:22 +0000 From: Koichiro Den To: jingoohan1@gmail.com, mani@kernel.org, lpieralisi@kernel.org, kwilczynski@kernel.org, robh@kernel.org, bhelgaas@google.com, kishon@kernel.org, jdmason@kudzu.us, dave.jiang@intel.com, allenbh@gmail.com, cassel@kernel.org, Frank.Li@nxp.com, shinichiro.kawasaki@wdc.com, christian.bruel@foss.st.com Cc: mmaddireddy@nvidia.com, linux-pci@vger.kernel.org, linux-kernel@vger.kernel.org, ntb@lists.linux.dev Subject: [PATCH v9 1/7] PCI: endpoint: Add auxiliary resource query API Date: Thu, 19 Feb 2026 17:13:12 +0900 Message-ID: <20260219081318.4156901-2-den@valinux.co.jp> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260219081318.4156901-1-den@valinux.co.jp> References: <20260219081318.4156901-1-den@valinux.co.jp> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: TYCP286CA0059.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:2b5::16) To TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:38f::10) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: TY7P286MB7722:EE_|TYRP286MB5862:EE_ X-MS-Office365-Filtering-Correlation-Id: 94d64a77-e492-4528-6716-08de6f8ebf81 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?yWV+v9kEFIECtHPaCQ2Zoz83trmmBq2yMGfeQZwiBUvn8KWt0tkPDHhYvE3t?= =?us-ascii?Q?a4W+wOOHts+qV7u4aitFxIJbSqFCDRVlCnBp/TA2Z7Ou/cGttGKPIKXqT4lL?= =?us-ascii?Q?iVW3CDz7osFxk2PrvmpPyfEw6ZLBfUD8WzJPSe8p+pqKMx6EF0ldvusGngON?= =?us-ascii?Q?X9f4BfsUfv3t2Yvjh2+FiZyZMB5LLtN9yNP3UJcIsZ+/6wjPZ5ORTclQpO7W?= =?us-ascii?Q?Czo1yG6DXiGw7LWZkE3Fo5dpArbNEl8hcWzdgKUGT+8XM4Uwp1DkAnqCK/2u?= =?us-ascii?Q?WsFZOPSBVx0YIWBfMPmVElZqssgaCtUrdE8xDYiJ08oQKovmy2uGleO0pYF1?= =?us-ascii?Q?LhzvllEYtfT8iBVw/UIzuFzoghawd8SKpe4a1CQvyDDZaFPSXWGN5ZkCoW8T?= =?us-ascii?Q?lEwwZCIVDI4lhEs2c3DdrPVT/w0FMcsTJhW1oD/VV7zxFggR52ZqtGazdqvN?= =?us-ascii?Q?mrWgMnJmRcLc6cJISqVJwVl3chqWhB9oaEaC9FRqNimj1lZvL7re9zpo+QRv?= =?us-ascii?Q?e4qXrmU/c2Ud25UDbz4+JPmm6QobHTeeiP20ohhhut6V3ym8Yg+WRZvOVavQ?= =?us-ascii?Q?mJqmVz0QTJcF4EVa86WtxslBUFJkXw0jCkF/8RT+xcxdPqRXN5dEliZDHhbE?= =?us-ascii?Q?60lwJ8JOuZd8buu+W6tqwazJYuN3WZeBcHfftdJa6xY2tqd5lui1khiqWY7j?= =?us-ascii?Q?+B6q/7E0URLghUfzmZ6kYPDuj5DkQzkk5UshBgkeK/v1QyIYmpcWsYlsgQdm?= =?us-ascii?Q?TyqzK98iRuSSS5gYvctYLiP3N0dry2pmKbu6uNy6PYef2RYFALhNk0EZ8Q7I?= =?us-ascii?Q?I3JHNaeXIPpdYdntNkZiti6071M7mLZtyiWeZfRMNN73aV6QjjY1KjKtT+lE?= =?us-ascii?Q?KVYY74FWC7ilre7BXP58W86YMGoVHxF33e/DDA6JdLYTGUn89ZDgpeUwza2O?= =?us-ascii?Q?RZcYd30iJDqsx1J5Bb04uCyQs51sVQLpPxD5NR96492P58cT3AdxUD21rMDL?= =?us-ascii?Q?AIMs+w0Fpm08nWqiQxdZVDBas3atRp3NPFI/5ySgnSIDbkx4QQ5JFnmllvYZ?= =?us-ascii?Q?JubhdQ23iMpkO3mp08IO92H0UQUwh0vyd8zegqO6rq7fbO+3ub+B5UmZXRLZ?= =?us-ascii?Q?nQWGVRluk8MChBUNJsLLHvqzN4460kdGZuHtsuyxf06v3X4R/01cyb8Z+fyo?= =?us-ascii?Q?TErgTVGaAnTxje7g7giYDs/b3VTHS/ysoOMxnl+v2ZCUdp8rFFR1hSu+tnaE?= =?us-ascii?Q?bTXIeg6VZ3GTDUrSrzDMhmnmcNFT19tA3Fmfn110/okGsmHM8mlMy6VKzfFZ?= =?us-ascii?Q?bdDkffUSUkibKdHQtW7/r7etc8b8FJHoWYaWYIVCa4nooAZrEAxAABoBDofw?= =?us-ascii?Q?u4Q6mlAVaV+/lPkkOkFHKMeltuIlZb0bDueBuptrYMV9towmWKiLQqB04utU?= =?us-ascii?Q?kepBPf449RHxqroE5x/Yc89bvv+AjiRy+OpaxMGDTc8TGVbbM9iqRshkMFQJ?= =?us-ascii?Q?EpJtGxeVZsMySHpLRpWIxQJW9jfip2wPJ8CcLp759LqAhsDAuxd2iIA9kpON?= =?us-ascii?Q?/BMuhsEXCBHsIjLEgLHpOl9tnxd59cT8orYhz2C1IMC7QF2F0t2uaodrvXTN?= =?us-ascii?Q?4A=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?61zfPxSidd4mpSNw6Is878Y1BT42QHXMMt6E93jPVeiBLEmwZhCMPD9k6ml7?= =?us-ascii?Q?hy3TRjeGiQDDWYCmKPa0K60+zXKBgqvFVZTcQmFJySDx4YXjp3cO+QcOq0e3?= =?us-ascii?Q?5jZpbO1RFp1u4P9RDb1FXb1XSryfp3nyx/+KxC8Q8xjqiXu0B6svDt/nxwPl?= =?us-ascii?Q?7zXpPhfBBKaZsPxb3dtq9jotcZjGCYft4vfRr3inJp16f36XKjzEgD5J7+/z?= =?us-ascii?Q?qqJRkPDd6/50xcKO5RL9HwmMrkCWuTUQbCFv1hqfq2fWLCWVHp0maMRHHMdt?= =?us-ascii?Q?NhwUpPE45Z8+VEsWn2ReQZOpe52yL8mXbQscwZGaQmOp2c0Iyeyq36YAmtPk?= =?us-ascii?Q?DzKpLbDJ3E19YDatlifRTIXoSe+A4GYtLJhAZfUAaakEi+yT0nP5JnT8O8vU?= =?us-ascii?Q?tdPVxKFXB1eVnytXj46wpxdElhPNXcM9PO8d7vzlRSVuxD+a9z8YgatKceNK?= =?us-ascii?Q?pEETDfX4Mkplrm66u6O7hDViyNVZWzctN24D+ioi0fNvK3w7NK2y/ViCJXZl?= =?us-ascii?Q?RHhag5wth77ZOU2j/5/OKej2emOSSW7885iZzCWmfwxERedNNBbrsrbTkG+5?= =?us-ascii?Q?k4+2yhAkV2MEIH+2MeaqZmcfOH4FFLcduKdyDZ8i1oRvaXEZlavB8XYbW/aO?= =?us-ascii?Q?5PYtinheJXiZpuGBQx+Pjj9nEsvph/77gE9rEf/zbUp1MxMi2OKSI8uL6Gbf?= =?us-ascii?Q?yoYvwbXC93xxXaZJzktbfUKHlLJSos65qaXWK4+8SwR1eGgjU9VIuPAY3Yom?= =?us-ascii?Q?5NoLZj+ehECNuFb9Dg8PdttNGw4xMkxP4hb6BlbFMc0SWettIudGU4DQRret?= =?us-ascii?Q?L8V5pzz1BclC5bByOcQ2szRips7kD2CVQRERjxrYzTxzXb/EvkG6aKwJy6f8?= =?us-ascii?Q?7G3MkWNb5xqN6uZoNyJOWrjZSmnltwKFwS0Ylo1aGwq3yRsIO/rdGaypIZlx?= =?us-ascii?Q?P1NTZFsZOcAOM1HgNL/FD6Os1w7UyIo+WMFdw3Ck2kh5Y9SSiqvJOIbRYKdE?= =?us-ascii?Q?Eoq22Nl9LAjYaZD/VKn6LaObXpIVefdSEElkqo1wcIfyjLVzkuNXKKcfmWDz?= =?us-ascii?Q?Yyg2HFFC7M/RVJg4dl616mxHHNCGA15Jp6/KcYAuu/FQ8epKn8OtmTOdNmlF?= =?us-ascii?Q?mfKGdpUpIM1Q71hbs+Jyi0iuYmYbXl2Mhc+4raieGqz+YYBr70RfnWwDnOtp?= =?us-ascii?Q?fjeqq8bl4slacn7JAtrek6FQ4K4Ebv559xHMqFyhJ+JAt58HR7GXWtWrBRbI?= =?us-ascii?Q?ql/petp3Fy+Lp0XDveSFeoa5Cpd/Xb1KU7mfQ7y8FdvPjG4HteIT+4v2X4ft?= =?us-ascii?Q?JECugytv47mi0x3nIRcEeGQVe/LLmqkL2j3xIYune78bAv2neQtUaExe6VDt?= =?us-ascii?Q?ve/CFzsE4A6wpbEkaaSm/c7tEH4P2ed78PCQdllSrjv2qKhHC0eOKvXcS5o3?= =?us-ascii?Q?il0onp2IlZJhlwqDj+sd4gBddE0pHRR500WE5EgZRW6D5N0szlhJQajuI9sx?= =?us-ascii?Q?pEby7EgGuSfDraWFN/uMNnXayFJxyyBQn85myvVdR0NllpyWSDqA4C7B/bnG?= =?us-ascii?Q?jh8xEKh/fSi24VY9XUBW5U6e25IGp/VbHjD0VSP8coaI4gDdLjwNKSUfSmx9?= =?us-ascii?Q?yV9SOpTMGd7+7uY1+N3K5NdCu+ZIw/C4aKcPBPYtaZdt41ofTJD6B7bTjJ+S?= =?us-ascii?Q?EwcIHDUvsFlkCdDc83ifG/mwGCsUHFQs7kXh9/TzgJRPrVfd5ELO9vr/fUG2?= =?us-ascii?Q?82FP12MYgBBwvHtea+0rxWqjryCAlxVEymEureYl4ApI4RIlyJKA?= X-OriginatorOrg: valinux.co.jp X-MS-Exchange-CrossTenant-Network-Message-Id: 94d64a77-e492-4528-6716-08de6f8ebf81 X-MS-Exchange-CrossTenant-AuthSource: TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 19 Feb 2026 08:13: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: RLRL2UaDsdFCsX4Rw1WvtXhWbio6z9pSvNix1h6WJzOx6KY6fHIg3sUDCo0PwBsXGQxG8+aFoWz4qDDqStdaCA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: TYRP286MB5862 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. Reviewed-by: Frank Li Signed-off-by: Koichiro Den Tested-by: Niklas Cassel --- drivers/pci/endpoint/pci-epc-core.c | 41 +++++++++++++++++++++++ include/linux/pci-epc.h | 52 +++++++++++++++++++++++++++++ 2 files changed, 93 insertions(+) diff --git a/drivers/pci/endpoint/pci-epc-core.c b/drivers/pci/endpoint/pci= -epc-core.c index 5045e22367cf..10bd392c4667 100644 --- a/drivers/pci/endpoint/pci-epc-core.c +++ b/drivers/pci/endpoint/pci-epc-core.c @@ -157,6 +157,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 8687b9c3462b..705026f64ef1 100644 --- a/include/linux/pci-epc.h +++ b/include/linux/pci-epc.h @@ -61,6 +61,51 @@ 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 + * @PCI_EPC_AUX_DOORBELL_MMIO: Doorbell MMIO, that might be outside the DMA + * controller register window + * + * 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, + PCI_EPC_AUX_DOORBELL_MMIO, +}; + +/** + * 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 + * @bar: BAR number where this resource is already exposed to the RC + * (NO_BAR if not) + * @bar_offset: offset within @bar where the resource starts (valid iff + * @bar !=3D NO_BAR) + * @u: type-specific metadata + */ +struct pci_epc_aux_resource { + enum pci_epc_aux_resource_type type; + phys_addr_t phys_addr; + resource_size_t size; + enum pci_barno bar; + resource_size_t bar_offset; + + union { + /* PCI_EPC_AUX_DOORBELL_MMIO */ + struct { + int irq; /* IRQ number for the doorbell handler */ + u32 data; /* write value to ring the doorbell */ + } db_mmio; + } u; +}; + /** * struct pci_epc_ops - set of function pointers for performing EPC operat= ions * @write_header: ops to populate configuration space header @@ -84,6 +129,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 +161,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 @@ -348,6 +397,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 Fri Apr 3 08:01:45 2026 Received: from OS0P286CU010.outbound.protection.outlook.com (mail-japanwestazon11021087.outbound.protection.outlook.com [40.107.74.87]) (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 734B22D3ECF; Thu, 19 Feb 2026 08:13:29 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.74.87 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771488812; cv=fail; b=Y08V1WHvOciHE+q6avZHwLOVei6r/2iNPf5fBrN8F+qztI/kuGlUVh/eimoHsGOOdBjYitTxe+/XRUlSB6EBLZvmHt15mMaIbQZ5SpMEt1bU4ydpaNyDhB92c7JSmdCTgPeBFuADHw8+RASPNqDdFTVliHcg4MxBH0Qp9F7Kv2E= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771488812; c=relaxed/simple; bh=yYPpkjnhy0ZFLQ37LXaMIFbOH9NQvFdbcGMcU5dJDEg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=by5TBOIumGpsgRBO8CwiiFPB3DbgFhLlJm4Qnq4VgQSNH8xosQFRRMz8oUyiU98eLYdKH2+K1iKY93KswkyjdXeyrHI8Cbp033KE6TPe9D0NE8D9OdlmwBY6mU4NWoEhuJKnNqPv2IELM0v7cZGeZkpE+bv5lF5z6H6xfQxphp8= 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=SI1NLZsA; arc=fail smtp.client-ip=40.107.74.87 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="SI1NLZsA" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=SNcR0HtBocgKC+xz//ex/UO5Jzf0L8Sx/23c52Fz4yAzXbuhRowc4akxrOqHQIqHfzns8NedACc50EdrisV2A1h6CL/FAUZxw84pfZ4cmuaNKeuRU7Rs0Gp8uSPdO4YWSjEJtPVeLyUfRJUlztc9MLwOEmz7E5qfoKBpEXztOQmI8caj5403VrUOYseWHVW87EstnDAtOBcDucRtTrO3XWrtambNHQFQwnWcKnC1feS5yDzRmn9p+LEKutnGcGwvUF/UXDPkn5U7adWHTzT7ukJUwqjWnML1NzHzmLAreXq3McqCU/LnbsI5ZZoRvzDxKBqhPHsxeikb6Zwnoa6smQ== 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=IpMBWHmKo9m4Bn5DsWqxUnKAG8hRFfAVV32vx7GzjJU=; b=yekgu+820UJ+ctR1eYCJvKBM3MN68Qs1daBdChGFrFfdOaDp4RWLwvgJgghbAiHalupOY30HO8LoTyFKxhu0H0BY2Ekb3B5boBX4oeCkPvVnnusb7NtB9pr2ncIrK+u6loJZomcQ0n/o/HOkxFW2JNafUID9EDOwuhAQ6hGVZr6JaPeUEnB1KGKTXP31dQDbwLCY44n5kKDK5efHCF0DzL3eFD28vdh9TRCoTGBS0h84OaO5OGYDPyNymO5Hi/wUXQW5mdF4x/WV/TpZKRyWMtvZ566BstRYX19Al0c5kmvGKS71VowIoSptMGgAvIdZZMyUpoGl3AW54Y6omC827w== 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=IpMBWHmKo9m4Bn5DsWqxUnKAG8hRFfAVV32vx7GzjJU=; b=SI1NLZsAyqs/we7tespx1cs5m0rt6KO29Bm9Is+SO6DaOK0zBCOOeUQrbwAdyqvwEPB0EjUkkZkaB5Y5XL5hRbV99SEGegUASsfrW9ky54knt8n1n5C4/gaMgMRzG9uDj/hFo1SnfprL5mQWpQZK87sGZ0DajPhkqhPLTlY5xjE= 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 TYRP286MB5862.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:2ec::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9632.15; Thu, 19 Feb 2026 08:13: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.9632.010; Thu, 19 Feb 2026 08:13:23 +0000 From: Koichiro Den To: jingoohan1@gmail.com, mani@kernel.org, lpieralisi@kernel.org, kwilczynski@kernel.org, robh@kernel.org, bhelgaas@google.com, kishon@kernel.org, jdmason@kudzu.us, dave.jiang@intel.com, allenbh@gmail.com, cassel@kernel.org, Frank.Li@nxp.com, shinichiro.kawasaki@wdc.com, christian.bruel@foss.st.com Cc: mmaddireddy@nvidia.com, linux-pci@vger.kernel.org, linux-kernel@vger.kernel.org, ntb@lists.linux.dev Subject: [PATCH v9 2/7] PCI: dwc: Record integrated eDMA register window Date: Thu, 19 Feb 2026 17:13:13 +0900 Message-ID: <20260219081318.4156901-3-den@valinux.co.jp> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260219081318.4156901-1-den@valinux.co.jp> References: <20260219081318.4156901-1-den@valinux.co.jp> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: TYCP286CA0333.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:38e::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_|TYRP286MB5862:EE_ X-MS-Office365-Filtering-Correlation-Id: 9c3a65ab-8b2c-44e6-9fb4-08de6f8ebffb 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?Vn2Bo8o8F2HLxs2BnFYvEakXQYQs00nmbkNT4aNHWwLqBfMAoacO1imZFChM?= =?us-ascii?Q?MlXwqlgyaGM+VdBvzEBj1N8gTofFugGwA5eC85mcMNNi2W7QlRgKB7M1+iMt?= =?us-ascii?Q?71vlcT00QwpJ0qCU89QmqaYdulgSbbaN1k3PZdvQGsAsQkS5JxOOHWigNcjh?= =?us-ascii?Q?qFlGDBibBphFY/A+rihVcKpBEc2RLk+jG6oqpKbsqjtlIIlmpTRpy37KssOq?= =?us-ascii?Q?9WorwBk62VgBtNbKGMUBfJoyi9iyrvMiXiPGiO5VO9U8BxD4ogHZXx6bc4R/?= =?us-ascii?Q?SBdF7GWncfIwt5sPNPrcyNa5Cl+YFOdgzx1gJe1o/7pw0+9wOZANQiyVZHeu?= =?us-ascii?Q?d+Zzzj4hxbB8KCsrum90qzbUqfrHIXTVrEdCANjWcs3ubkSu32cPMulrViiv?= =?us-ascii?Q?ZCWYuyZnEFiI2Dcv8r9W+ZM73oSeadKFcRb8y8e2oNk69wsu7Jb5A2TWdC71?= =?us-ascii?Q?mgr09umcA8gWOPA+EE50Ft0K8eXciV0fTv4ImFq19PEezedF+7T5QrYzAHOz?= =?us-ascii?Q?Hl/+NtFbXAH7i90B7hHIqdZowqrF0YqCRypUUd6pICMV9S+3XLRF9C9WlkS4?= =?us-ascii?Q?e2chAKF28+sNxKhEc2nLKT34JtrGczScZLC5/5ml0KNVrfnkqyZ0RIhisn4J?= =?us-ascii?Q?g3uuXKW3baM6EYk7zXn0guyaOq3jDVJNhVookMaoI3LWhLeIJDlH31lKxbAB?= =?us-ascii?Q?5iGJ0/e8pkKhnPXxzLhOpiaTPqqQmq3IJK/k0y6OSY46ErpxkmxvXSlELcmi?= =?us-ascii?Q?AMFj7JeneILll4Wbc4qGsCnr4/Hoo0xk30Br4gusP2p0vDnG6UXKcfJ5Ucim?= =?us-ascii?Q?1jXoKcRzRhyHlJFUO8ic9C6cx7eNT0i6v6NtsyqbG9d4nHWeDfCjsh51JJ+9?= =?us-ascii?Q?Fx1qITwTAinrt13S/U6BTky/S++K0VXMV624/Kp2eVZHDBtz7lQXZkbEi5Go?= =?us-ascii?Q?bL7dPKilSdf3vgZzUBua51IjTstt3Wy94jyocqrddaVWv2igy4iq95rBIn9W?= =?us-ascii?Q?Jg1HShiBvydoLe30AIG0EpUcKopWTQCuwXbM8XH3gDZJHuowSC/iYzL+9LS8?= =?us-ascii?Q?Vi5Ow/gzeMdkiA3F9EXhaYtK3hbmSxPuDebudM+dcrks+Y9ttz6Y1FsGF+vi?= =?us-ascii?Q?4Gtv9RDfZCBalDuRjR7YnBIeZcgziYEcWV5iuf88wxiYgIyfhte/L4qyqKaj?= =?us-ascii?Q?Hr0xRCmEBLMC7p+L+XcoqLlevwHZvuaH6Ota2JKiztWbyvySlIHdz/HgRJS9?= =?us-ascii?Q?LT13hCCvPMH3YXi6ee7Ju6vkKDzIeRYAHHlsqphkHiKzv9NJmlocECIdussc?= =?us-ascii?Q?ohVes7pnmu8Vxguvk4YXP2TM5WxsJYxQb9AlUyFO0f3fNGgKJB0Op9Kvt1MQ?= =?us-ascii?Q?PMoLq0mKJMsRMe43UOCLb9h+TCSB9dLuNpL3+xlasaWF39vSLMCiBeLV/hkP?= =?us-ascii?Q?NStmN6kH/WjIfGiGqzpiPtZmUoLyOqy6MfEwKOCd+/pgf+FmD/qkAyLYqqxt?= =?us-ascii?Q?WYCW7wc/VuwzSW/P3HZt/BiXvt4tWqsbP7+80emrjOZSDwjUmNgIy4MnJfF7?= =?us-ascii?Q?ixg37qxv2wzmW72Ci+aMS+RzoCBtsI/EstYX1UO3v7WbmgfChuMntxVkT6BG?= =?us-ascii?Q?Uw=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?V1+NxHrQKt6HF+MpUCEs8LbXx4tmOUzFoVVC3WS/aZscgcU469v9uoYIfRUU?= =?us-ascii?Q?xV7Cw+CTvojIbAj39nNnhyffvVHfIBHtJnzUpb/XbwBTi7t1gujSy+QW7UhB?= =?us-ascii?Q?pdX74dWGgxSGipq5ns5YbrW8tlJ1vAiyZc5W7Czduv4I0w48gaNV6anElT//?= =?us-ascii?Q?fFD0K6M42wKRVG1t2nKDcQEP68DAZp7mPjSg8rLa9/+zPTyFl99KV+uZcxWl?= =?us-ascii?Q?2yjhZzuJk6h/yG/4krPk81P5CiZ42s1Qs8twlFHTKgh7EMmO9rimxi2YjKr5?= =?us-ascii?Q?GC3TLNYSWr1X6iCgJZxDbtC1w7JmvPI1zpgZNFxNklsdUqhWW01fx4E/UBcx?= =?us-ascii?Q?MV9PlNJaoz7HOZ2BxbguU0jk2EFdkaTcMpUqnNGYMl3zITI1nvCh0ds8gkfI?= =?us-ascii?Q?H8ZuARpx3KPjBD3U0KWpRL7wu2DUlumKX7hvOO234zpLY4vcDN77zeYN2TPK?= =?us-ascii?Q?t1P/AeAOZ8gfHD1umj8B+oO/bQTby4Sc+slF/jLf62stJhHFO11EKdRTShX0?= =?us-ascii?Q?pfCiBQYQxDsptMecrjRspjKgmjuTHnxquRaklQ9Eyc730Cw4++PVOMugWhiN?= =?us-ascii?Q?JtJjsBS/IcdMr2TVFCR4KMPL+SLxMdedIiaS2cilwn1Wtnr6WSzZIBWD8CpH?= =?us-ascii?Q?89cHqmeZKxtC35BBP/gPDaGts42hyBBHJLiD8myQEjApYIkb9wzN1nFOhZq3?= =?us-ascii?Q?fAz/ABcKTuKhgxRKI1fwIe04veZcMI/vKoqt4JHxy7wcLyfuQTli8DsKL+5/?= =?us-ascii?Q?BhaUJdIwXo42R25o6etmcPJeWeh2bM7JTyxu3f86/BwwVDeNAhuIEfjeK4EG?= =?us-ascii?Q?bOwEGDeY3XiT5e75n1e6/4SUJS2lDDDLaG0yhfEdAepUtRBBRexVeevm8fMb?= =?us-ascii?Q?OatsgxjiwVpwdHlJQ8n20avvnKHrWIJS6xOFLcUwzNrALzHEhyZiHzC1nnAe?= =?us-ascii?Q?xnf5SipxGIaxqntnzDVG6sq93M7mlSNWYD1gR4EBaNgYEHWS2dt9hKlmgXFy?= =?us-ascii?Q?ZXMl7nQ2rR50E1OHjIrB+IeEgYFk4PDlwCa7tyH8GJ+Qna2b4uVvfjhhRo14?= =?us-ascii?Q?0N5kVfndRiD+491Wt4l6LPFm7juQvgOc2pXLBK4EFwxqZUMcrLaarjPfgWKd?= =?us-ascii?Q?Mc8Yta8XTsSMmgTdrgAceGEjIHFRFSG2Fj95uvrs7VZV3vdHFA/TryQQyO4k?= =?us-ascii?Q?9FK1fBRVtVfJfcqgTpjinybC6im+9Imu84NqdLpWsEzopPVfQw9wAGwmPZVL?= =?us-ascii?Q?2OXI+Jk7t7zrHnT7w1ZdHtfZlrf0PJvwoV8Z8nB7wMmv6pa6c63jGder/gwN?= =?us-ascii?Q?L4bLCj1L+FeTnYj2e2qIDH6n53l8mKJak8zR1mW+BQ0xCSWojDobK22ALXEs?= =?us-ascii?Q?ceDp2GAOrxZVXm7jSlVpJxXvKAXdQcm7Wm56N0mrjwJ5CmOqCM6rJVf7DTcd?= =?us-ascii?Q?sRhPm+r1O9WRt5Mzow7POduUav5SKP6i0bYuGNI8apK8VaqTXDRjQml/5CjH?= =?us-ascii?Q?7RFf9zVIEpCYJBy1axpolG2M3swFMI4TPJxcZYNW5TiNXg8YoRfF12AOv1LR?= =?us-ascii?Q?uvbGM/vXKpD4a9Xy/kJoJxTmHPuRW4HcoThRbcNIFWcGtqfYlf3St0Puiuid?= =?us-ascii?Q?Z8FOVqvYNoKjFSeilDBfyKGwOhZQ1KHke3M/Is4V72i3KNC6ZkFYEz1qBs8n?= =?us-ascii?Q?2ne8E/9i8Hb4lGvxkrlbMxWyReoqos38kSeAvCfzNK16ULrDtoHcAFT4GlBy?= =?us-ascii?Q?g9pTVmfDwZ1fsL+SlUWIlpKqLf5fNtH4E4OZ4TNBzlrdqvZJNCfN?= X-OriginatorOrg: valinux.co.jp X-MS-Exchange-CrossTenant-Network-Message-Id: 9c3a65ab-8b2c-44e6-9fb4-08de6f8ebffb X-MS-Exchange-CrossTenant-AuthSource: TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 19 Feb 2026 08:13:23.0825 (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: aCp7sRSQKsjsz/veocWWSmFSkDz6Ivo6w9jQ7/9DUZ4vzPD/so2XhgqEc746/7bNQ1tWjovhjgwx1jeHSHqlSQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: TYRP286MB5862 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 Tested-by: Niklas Cassel --- 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 ae6389dd9caa..52f26663e8b1 100644 --- a/drivers/pci/controller/dwc/pcie-designware.h +++ b/drivers/pci/controller/dwc/pcie-designware.h @@ -541,6 +541,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 Fri Apr 3 08:01:45 2026 Received: from TYVP286CU001.outbound.protection.outlook.com (mail-japaneastazon11021077.outbound.protection.outlook.com [52.101.125.77]) (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 6C99B334C34; Thu, 19 Feb 2026 08:13:28 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.125.77 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771488809; cv=fail; b=Flp2vStz8VAfSSi9QdBtyXFQ6731nbUm+mvRFeoXW6Br9L0NddF/9ryMnurNuS610vz7BVc63/Uk5p6MS/uNKvGuEE62lDoouWIs2X+cQhChPym/mTQulrNgTKJbX0lZt1ABkY4FhXy63vC9oAK0qiuVyw1wh+cNDbzxTx06woo= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771488809; c=relaxed/simple; bh=4kc/Dl3fa2WfV7hQIEVn/Z6caHLBHWFPVT8UnVtFkco=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=D0r2aaykjIvsnia8HcX9wNLK+sxDzDgY2Wcg9BkQEQp/NOJwdMZNiGphvscYX05pqEUBGi5+0ywrkxAJnbRtIOgGVoZVVTUGN/AMhjJ3MfIkXkF2vDt3fUQOqi3e6DV7MkQ7Ws6ErURYWKfPu3wDr4OcpTAXAMAtNvgUp9FSH8g= 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=qlE7o7G2; arc=fail smtp.client-ip=52.101.125.77 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="qlE7o7G2" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=jE1ipwY8goINeNZjVfW0I1aaFejVzTghYKYwQMJvx2adaraGQ43lNYRstHo/yhjMssIeY0BrgBd6BHNTrYhDUlD59B0xoOkGN5H8F8WaU8+JB+I7YoJapJ+R1ifQE2xmfzk246N3K4NVr1stPTOS51tNJZbasNjRYnk32xTLD4d4L692NQ1RQ70mXI+initj9eNzfQvDAh2IfDByHXT7FskI1JLveNQ1y9S/NywPcfWJ2oIFwuKhfUwe0HSpgMpQizelnEQMLioa3jjmJy4Np46JKw0npJ9TTNvUJ5R2706k5MFncZ2gwQneQFMLYoyJtX8L4x3oIpUzLAOzMpVyfA== 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=hU9Om7ps5PYQ6tQtBQfQF23SidFjmj9NTXGez67BRDc=; b=cz7eRwrVcVflotNbuMyV1vUYOOSo1ZA388+C2knoD8cZe1GHBSlG1wW6i/JIRavMm8b58K8tVXwCzFsyqduLEd/M178UEV4rJTz5fmB+jOYflMO0qpe2sr4ho/CvKRhoQ+0b7rgLos7JhUIOW/TTpyIWPmKvDs8jccU9vRyRtNNDwyCEBV+h3aar1zQYkbk5Ni7dVCnNE5uOVIR53kg8ZHoP0qEZ9ZBurbNizQmEKyK1P/e/pZBKSCW0L/5ZmszPYJGla4L5G1ybPjy6ieJP5ab4sZ0M3opWOMPafbeXe6rCVQwIP8JawzIrzbtb1DS2lEhNyaDDdhSWUgSjMIS2BQ== 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=hU9Om7ps5PYQ6tQtBQfQF23SidFjmj9NTXGez67BRDc=; b=qlE7o7G2x0qZRfp3gxrtkP2/Agk6OCU7gLkdvfxY9D2LZmW/kxnq0vXKUz3bhky6QTLL2kbSPXt1HXREgKGfOVCyXM5JrGdvEPb2cCvxhR4uQPFDqKaRQeGtcs+VCm/wT5rXuFobsaCRbiGuvW+d1rXkHEC5qjXG2PA8VWSzuxk= 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 TYRP286MB5862.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:2ec::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9632.15; Thu, 19 Feb 2026 08:13: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.9632.010; Thu, 19 Feb 2026 08:13:23 +0000 From: Koichiro Den To: jingoohan1@gmail.com, mani@kernel.org, lpieralisi@kernel.org, kwilczynski@kernel.org, robh@kernel.org, bhelgaas@google.com, kishon@kernel.org, jdmason@kudzu.us, dave.jiang@intel.com, allenbh@gmail.com, cassel@kernel.org, Frank.Li@nxp.com, shinichiro.kawasaki@wdc.com, christian.bruel@foss.st.com Cc: mmaddireddy@nvidia.com, linux-pci@vger.kernel.org, linux-kernel@vger.kernel.org, ntb@lists.linux.dev Subject: [PATCH v9 3/7] PCI: dwc: ep: Expose integrated eDMA resources via EPC aux-resource API Date: Thu, 19 Feb 2026 17:13:14 +0900 Message-ID: <20260219081318.4156901-4-den@valinux.co.jp> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260219081318.4156901-1-den@valinux.co.jp> References: <20260219081318.4156901-1-den@valinux.co.jp> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: TY4P286CA0093.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:369::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_|TYRP286MB5862:EE_ X-MS-Office365-Filtering-Correlation-Id: 9b4c53e0-a803-49ec-cbaa-08de6f8ec072 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?TyPSIhccE0x+5dx0lbMjnoH4KFsv5dTyLRPLRVwtfC/8t+SsPw9LtvUT8PVL?= =?us-ascii?Q?qLR1yoin0+HHWt/vsRFxv/6129QEFAoob0hjdHH4feIN0sxfisJXBxxd/PA+?= =?us-ascii?Q?MGh9gf9OuH8Lri7VI+vfm44CZnnZrHT5U/IqaT8VIpV/+o4Yjy7IQhBQfRFd?= =?us-ascii?Q?aNjOonlz7rV34oW7GnkY1WZkqZF6+apvPAbFlkoslRvLFaCFsq5wHZQxC6fj?= =?us-ascii?Q?G97lQDOe5PENp3U5A3XLBgIIpviFdjarQVeHAr1hrVh3SzPo+Y3WVIF2EiS2?= =?us-ascii?Q?4Rb1cZz0bZ42AQcNYPE2bhx8eErbKQuVWJ0IGgORErYtc0Wj1JszZbSznFep?= =?us-ascii?Q?A1PtS2E10T5PehqpsHVG7bHzHORkQl+Es4whrZ00VAJZuPsCRrIwfzku5RmS?= =?us-ascii?Q?EGcZAe0n4WdSk2004dwUBe9bCEf/i8L7VvUVKsCygYHOW2xr9zyS1f3xc0CS?= =?us-ascii?Q?6LNQR2MKZCds88KfCa2g0tX0xWycYmPHav1f4ImhNq2+haHbsj6jWDXGTI+q?= =?us-ascii?Q?4OEM+60L3x/jE6rvTjjSC8fDLa+95DkuWth3Zg8nMxu/tmWJMI/ll97s6Ii7?= =?us-ascii?Q?6C3p1vLoz+AeX0G2I1GwZD813jDpjf2sMS8U1nB10OsqTfx4MzsxDLmCOYhQ?= =?us-ascii?Q?2b+IKT34/CPnX037PmsPaJXrPeLzC8NL85Vn95LwUB2eDtDtNXYm7QXtSjZq?= =?us-ascii?Q?dX5baujx4ohK3GhRSoqbdF4tY6h0akZ/gMizV2vcF9Gxb6tNcZb8jSqM+vQw?= =?us-ascii?Q?kmTxE9VM/PK2MR4jnLrJlCTqpwKjw1XyhPH8e7yDDfKQW/6M58lp/bK+xjO6?= =?us-ascii?Q?p1SuS/GmAQcY3Yvqn6qHyjNNwG6ELz7vGVmCSh8L0/y69rd7oODKeFYdalG5?= =?us-ascii?Q?uY3QVfB1Ita3qutbSjj11oRjrp/pYv4lAZmq7EBxnpMjCKrneXmBIPUDa4jz?= =?us-ascii?Q?j28Xsz9HStySGfF8FFrcbEeC/LwXitDEfcvZRGoBMiMpmJCuFEPzkVhLp2HA?= =?us-ascii?Q?quRK7SOWBMOVGGHiIZ0Ug2wKozysCcufpn0VfJhythvBRpDNHVbarzqecgGG?= =?us-ascii?Q?sbwB9Gy8JPtOS6iflkrnJu3snBP6pU7S07qw1IETW+Hubxyz+GRzM5mgmh7s?= =?us-ascii?Q?K+nGW+d6rhrGrj6hvi8aXN47NE+4Tct53B93pEL8017VzznCOluymh8Opx3a?= =?us-ascii?Q?yDeW9bfLUGYvVxiyPuIe7HdJQKO2dfG17f/KEQ3F36EQ89ikXgIPrcaqxfYQ?= =?us-ascii?Q?qIeNz5vBGYW52Zm7ik4nhUZM4XHYEJOFWOUMO4Nq0SUGQK01M3FYWzbG/XNL?= =?us-ascii?Q?SEcOw59LHzrZaQs/qV9F5elB5IM6j9hjsEhGe6OGz7i5zL59v9wujy4AwA7l?= =?us-ascii?Q?HPMWfFpFz6qEwG2CzzFOrZ7zYc2I2aXIwJJ/1i686+0pmwYugVe1+l8gZ1Xc?= =?us-ascii?Q?h1AAteYbXglax/rCt6Oqou7jTjcFBq8iRS15AbEbR+Pa9q+ihv6VFiAmXGEs?= =?us-ascii?Q?dTv4w/wBgsVwPRkDx1r4yIYwoQomAt9XM7Z/DG2V8xd6GL4IVvQd6kf5k87B?= =?us-ascii?Q?DJMrb9NFK2UCSYLGsYE7AzV2otKEKON+C8pczfMSq0RAjRnIf8YcVnolXPte?= =?us-ascii?Q?mQ=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?8i1YTrGWT8Lzc+4kCVvVSK+r0drVpDvuH0wyk8E/gH4A525LEAz9yZvb6qq/?= =?us-ascii?Q?b9VKKsiTr0+kZ9Ig90etHJlJJMT+4EVvre+7o0tRO02yZcbJcI8blTp2qtLk?= =?us-ascii?Q?CCUBkaLh7Cs8Du6/CmMApR3vCV2ZlujLRpy3qMTy7R+3OflhpkxHUCYCdseH?= =?us-ascii?Q?pyG7uA/oAetNmFv3J6YQGiDtgogMyNGRVUY/TBdJQZpfaPxnJ22WyqLBspPi?= =?us-ascii?Q?tPJu5ZvDEAKZgIzv6U6gaYL0BOGdqQ9nu/dpnB47Y2jUSCjSVkVm0tg9ad/S?= =?us-ascii?Q?og9Ta0KbfzZ2CaDHLTnhNGKtu6FRReMyOrtVUBe61HnTaugJMaATvBozvs7E?= =?us-ascii?Q?lGM9e1AU6RbM1oPzRTnkPI8U5KC8XJW57Uv/W/t5ShAiaGPz4Wd/etRY8xBc?= =?us-ascii?Q?AxfdquR1YKAaDkMfgKu7OX0tUkxyt277wZ3X/+TVJjaANdAN/QavjhQ8Drm6?= =?us-ascii?Q?TYqDqzstRCFn7QeTDlMeFZEM10YsCGJWwJL6PhT2X7Up52lMWVrcfqFi2LnX?= =?us-ascii?Q?oWDk8u2NUFHCtiLaBpAQM1fXO4fW3d+UfOtOvBkFPUcVYdSg8EjCI9bmNL8n?= =?us-ascii?Q?80ycateqmKm4XFpFjBfxhkFj1KGhxZXvSsGHKiKbXJKLNg5UxYnzp4dAgyqW?= =?us-ascii?Q?ZPOLJegwHoIFLQ/rdOf/k6RPVACRhKmkE0qWdJsJgoToQaf9AjPm9+Ho/CQq?= =?us-ascii?Q?D3Wlt0dcT6mcpYl2sElh//FKb69ZJLQxnAvF/2/DK5K5nPw653YqV7deI2KY?= =?us-ascii?Q?AhoKTYkxR513xi6iNs9VWHRLVN3IQUAr88cRg68+4q3esD24c3o1kLv7/Lwt?= =?us-ascii?Q?oiIDNGMO4KMM4vANPRCt+MR2RWMpWUVa1/pSreCQ3fCJYCD1Qy/D60n0DCrc?= =?us-ascii?Q?2RAemwQkoSDB6kDQM9efKyXoD2FfYsXjd47wdxHUucLLOUAPCemDTUJb+zH9?= =?us-ascii?Q?Twq3WQU5ZtczLvnrCM4xL/CI5mc/yOe94SGlbTLZRM/qxk8oDwErkSceYQmY?= =?us-ascii?Q?dfnmoZLdlL+dOwkmUObYuS1AM7jWuIkQQHYR9ZcSce7jFxg9a6TaxFLYP7sG?= =?us-ascii?Q?B+AEDGG4JI/Qo71WJdtChe5AJh7qzTScMnHs/AF79/tJVW6dS2s/zSCxwHcF?= =?us-ascii?Q?n0GtVbunsy6xlIPyFlytYk2genD//1s3v24gZItMcTynfDj4SMpfMeAXCGF5?= =?us-ascii?Q?TiBYppyGKkqidiDcWNfl9NFmW3ZRRhxT1QTysK2AKx9c5bTJY3698toFEki0?= =?us-ascii?Q?CPWf8doFDW5gCDujQHMMEO5X9fy1VRDZd1Nid75+9aKHDGX+uTKn1pMwgabi?= =?us-ascii?Q?pHn4+nvu8Bv0eQ+PKqehkvc40YJhsE2QecKYNJ+AjKchmCspOpx04fUVSvxy?= =?us-ascii?Q?RwzudKdSYwM714DCMN0C/FwswzYIC94mSes2L3+D4ZX95abyICD6xcNM62nJ?= =?us-ascii?Q?ld3LzGMS6Z05BvJAIY4Ka71k2HyeXRKSk9ifi0sLjUQrWmwtzGjvjklzSm8a?= =?us-ascii?Q?L5DH8yRnizfAHZ2ZbyvLFVdesB4OkWv0bW+TOhKRCVgSORsB5K7SC3vfeCvP?= =?us-ascii?Q?InhWKadTlp/f9DhKc++byUfX+Mf950SZhtIXIdK0RWd5i1IY5WcuM02Zh0Ow?= =?us-ascii?Q?ejK7ZsHAE52148tg6mrfI0UFxw0LfeETyC3rSbe26UElCeCiln5FS7qbBa5p?= =?us-ascii?Q?1blpvq/XpSkXQ4zbYziNUsna1yYnjwa4hwHqXCAyU+YI+2HX3XodMinYA8Us?= =?us-ascii?Q?bZ0kOb6ARq6t/KakutAA6Ka8rXJf9RC8hd3q1rmonLSrKhElUFPq?= X-OriginatorOrg: valinux.co.jp X-MS-Exchange-CrossTenant-Network-Message-Id: 9b4c53e0-a803-49ec-cbaa-08de6f8ec072 X-MS-Exchange-CrossTenant-AuthSource: TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 19 Feb 2026 08:13:23.8648 (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: Tq4QcnpTEdfw9m75BGvZpdQ9LbyKWLnMMA+rx7f3Ch5uas1vZpafIvQinjm2qyjH62wY4XX9QleuaKR8zel5WQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: TYRP286MB5862 Content-Type: text/plain; charset="utf-8" Implement the EPC aux-resource API for DesignWare endpoint controllers with integrated eDMA. Report: - DMA controller MMIO window (PCI_EPC_AUX_DMA_CTRL_MMIO) - interrupt-emulation doorbell register (PCI_EPC_AUX_DOORBELL_MMIO), including its Linux IRQ and the data value to write to trigger the interrupt - per-channel LL descriptor regions (PCI_EPC_AUX_DMA_CHAN_DESC) If the DMA controller MMIO window is already exposed via a platform-owned fixed BAR subregion, also provide the BAR number and offset so EPF drivers can reuse it without reprogramming the BAR. Signed-off-by: Koichiro Den Tested-by: Niklas Cassel --- .../pci/controller/dwc/pcie-designware-ep.c | 151 ++++++++++++++++++ 1 file changed, 151 insertions(+) diff --git a/drivers/pci/controller/dwc/pcie-designware-ep.c b/drivers/pci/= controller/dwc/pcie-designware-ep.c index 5e47517c757c..2408ce95c103 100644 --- a/drivers/pci/controller/dwc/pcie-designware-ep.c +++ b/drivers/pci/controller/dwc/pcie-designware-ep.c @@ -9,6 +9,7 @@ #include #include #include +#include #include =20 #include "pcie-designware.h" @@ -808,6 +809,155 @@ dw_pcie_ep_get_features(struct pci_epc *epc, u8 func_= no, u8 vfunc_no) return ep->ops->get_features(ep); } =20 +static const struct pci_epc_bar_rsvd_region * +dw_pcie_ep_find_bar_rsvd_region(struct dw_pcie_ep *ep, + enum pci_epc_bar_rsvd_region_type type, + enum pci_barno *bar, + resource_size_t *bar_offset) +{ + const struct pci_epc_features *features; + const struct pci_epc_bar_desc *bar_desc; + const struct pci_epc_bar_rsvd_region *r; + int i, j; + + if (!ep->ops->get_features) + return NULL; + + features =3D ep->ops->get_features(ep); + if (!features) + return NULL; + + for (i =3D BAR_0; i <=3D BAR_5; i++) { + bar_desc =3D &features->bar[i]; + + if (!bar_desc->nr_rsvd_regions || !bar_desc->rsvd_regions) + continue; + + for (j =3D 0; j < bar_desc->nr_rsvd_regions; j++) { + r =3D &bar_desc->rsvd_regions[j]; + + if (r->type !=3D type) + continue; + + if (bar) + *bar =3D i; + if (bar_offset) + *bar_offset =3D r->offset; + return r; + } + } + + return NULL; +} + +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); + const struct pci_epc_bar_rsvd_region *rsvd; + struct dw_edma_chip *edma =3D &pci->edma; + enum pci_barno dma_ctrl_bar =3D NO_BAR; + int ll_cnt =3D 0, needed, idx =3D 0; + resource_size_t db_offset =3D edma->db_offset; + resource_size_t dma_ctrl_bar_offset =3D 0; + resource_size_t dma_reg_size; + unsigned int i; + + if (!pci->edma_reg_size) + return 0; + + dma_reg_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 + (db_offset !=3D ~0 ? 1 : 0); + + /* Count query mode */ + if (!resources || !num_resources) + return needed; + + if (num_resources < needed) + return -ENOSPC; + + rsvd =3D dw_pcie_ep_find_bar_rsvd_region(ep, + PCI_EPC_BAR_RSVD_DMA_CTRL_MMIO, + &dma_ctrl_bar, + &dma_ctrl_bar_offset); + if (rsvd && rsvd->size < dma_reg_size) + dma_reg_size =3D rsvd->size; + + /* DMA register block */ + resources[idx++] =3D (struct pci_epc_aux_resource) { + .type =3D PCI_EPC_AUX_DMA_CTRL_MMIO, + .phys_addr =3D pci->edma_reg_phys, + .size =3D dma_reg_size, + .bar =3D dma_ctrl_bar, + .bar_offset =3D dma_ctrl_bar_offset, + }; + + /* + * For interrupt-emulation doorbells, report a standalone resource + * instead of bundling it into the DMA controller MMIO resource. + */ + if (db_offset !=3D ~0) { + if (range_end_overflows_t(resource_size_t, db_offset, + sizeof(u32), dma_reg_size)) + return -EINVAL; + + resources[idx++] =3D (struct pci_epc_aux_resource) { + .type =3D PCI_EPC_AUX_DOORBELL_MMIO, + .phys_addr =3D pci->edma_reg_phys + db_offset, + .size =3D sizeof(u32), + .bar =3D dma_ctrl_bar, + .bar_offset =3D dma_ctrl_bar !=3D NO_BAR ? + dma_ctrl_bar_offset + db_offset : 0, + .u.db_mmio =3D { + .irq =3D edma->db_irq, + .data =3D 0, /* write 0 to assert */ + }, + }; + } + + /* 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, + .bar =3D NO_BAR, + .bar_offset =3D 0, + }; + } + + /* 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, + .bar =3D NO_BAR, + .bar_offset =3D 0, + }; + } + + 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 +973,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 Fri Apr 3 08:01:45 2026 Received: from TYVP286CU001.outbound.protection.outlook.com (mail-japaneastazon11021077.outbound.protection.outlook.com [52.101.125.77]) (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 0016D336EE5; Thu, 19 Feb 2026 08:13:29 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.125.77 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771488811; cv=fail; b=BSIdwNYfweAYLDYFMc+ekZqT6WO9oq6iv/ev9jNkeVtYkAE2VN8iT7GB4iu9ztJs0gEuXf0htfo13zyM48i8GQg+/Ux1KdTGJRISUpTPUes/gRKFhRZZCPGwbFCWzEvPm6f9v/av7qQtKfoSNwzIaHZJ57zd1zg3NuazHeLUxdA= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771488811; c=relaxed/simple; bh=3XBmFh5c4YQPMkFxa2k0OW8vm4trzZK1Hpi3jBKLRE4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=hqJJUHp/2GMjO/i9MLbj7W3lJCiG4xYcFYifCNWmwqTQnF3hdPO9+/WvnXTu7FDcZQG493aguxj/PZzpt6r/h/vmKZpFXcCq1PdHoZ3AYc2Qt4zjYtiJmcvnB/tWWHfpYLhP7VgdOT84OrD+IUpeOdb/808+7XbCP0bkVYoKNoI= 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=B2JpuSU9; arc=fail smtp.client-ip=52.101.125.77 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="B2JpuSU9" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=arQ1Y9XYNoa8He6iFR12RbK0UWnD1qHOddXRIIwXTbN55mWksWVMGmK8GbK0Z3GsGRva1FvmsX2j+kE2cQbNZvMrJdqWI5GuCdrBP/lUQ0EQ/urrt7vyuTsKDHeRxByl3Vp6uFPuKIeQxP1IMEE03vhn9s87mdyhmum9yK7YGlFEOOtT6+pz0aDDsveZ1JsKo2rO+twohzUicAADMssi5Js9jPj0+P6EGzjK89hIfz6rkpUClAJa7bQKWM+77x7LD8uRSKtUpLZlu8Z3NSUNRn8PyVkPDgJbSFUSTQJ+0P3lWC8c44NObSolwPsuWWsCv7DHZyQfx2DsnBXNrKmP2g== 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=5BlxF036CRgSk4TywN6LSCUQiNVlw+RBdxbvkm03Tl0=; b=xBHVm5GjMFcgul0DJm1OWG/LmmuuePZYlqUVOGEKtgYuqGgv0Y+E/kHHp4mBNMsafFDgKzY0slVcpampzBumrhv1XFoB/fGvAJRMz6JmOu/DDpgfHY1R6cLzb/PIKi9nEiMp864zaP3KXF5gqmD+wLafez/AibZ0c5ziOYVtdfzJ+vocOVmhX/KTjvFMr6R10j+dPk1ZIjzZlEiVNTGoyzdh12+0QfMVFQ48hXStpvgmqiGcShf4MO3abeYLq34pHY7r5xvVslwfw8B6WDMqarUS2JF8TRlyPW79uxMGp/D+EdmFiZ81omVV4I5kcrCB8bSvP4Fje0rMimdISpWeVg== 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=5BlxF036CRgSk4TywN6LSCUQiNVlw+RBdxbvkm03Tl0=; b=B2JpuSU9MfttQQiOafdP5GtgOaNmUKloWEnmbfyEl0V4Ll0F+CH1JFBx/wFBky6DeQMkBOhldgVh7ewtQDQQkYH4688qCPxykpEmWy+fx56E/bw/wk7FicGebgQDTWwf8bZMV5fLKtzjYntakGy3KHCSlAduDCWiciWnhfo3pro= 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 TYRP286MB5862.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:2ec::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9632.15; Thu, 19 Feb 2026 08:13: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.9632.010; Thu, 19 Feb 2026 08:13:25 +0000 From: Koichiro Den To: jingoohan1@gmail.com, mani@kernel.org, lpieralisi@kernel.org, kwilczynski@kernel.org, robh@kernel.org, bhelgaas@google.com, kishon@kernel.org, jdmason@kudzu.us, dave.jiang@intel.com, allenbh@gmail.com, cassel@kernel.org, Frank.Li@nxp.com, shinichiro.kawasaki@wdc.com, christian.bruel@foss.st.com Cc: mmaddireddy@nvidia.com, linux-pci@vger.kernel.org, linux-kernel@vger.kernel.org, ntb@lists.linux.dev Subject: [PATCH v9 4/7] PCI: endpoint: pci-ep-msi: Refactor doorbell allocation for new backends Date: Thu, 19 Feb 2026 17:13:15 +0900 Message-ID: <20260219081318.4156901-5-den@valinux.co.jp> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260219081318.4156901-1-den@valinux.co.jp> References: <20260219081318.4156901-1-den@valinux.co.jp> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: TYCP301CA0076.JPNP301.PROD.OUTLOOK.COM (2603:1096:405:7b::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_|TYRP286MB5862:EE_ X-MS-Office365-Filtering-Correlation-Id: 8224cec5-71ab-429e-38db-08de6f8ec119 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?p+DMOHyS+cicY8IjpIr7p7wBNbkPRIKTX08X0Z9jW3pdBf3e84u/eAZ7TQ4N?= =?us-ascii?Q?XMneWxkEvqQiYSxtUgH2E4eDZ+xKFoEjZu2nC5l8Vqs5SW9JPhuhNV9foNo6?= =?us-ascii?Q?VCgFanKVIcVWfxMV+Gurd9vDq3pRuwAGpBkoOpFr7g1F5OKtUqtzFSonh6d0?= =?us-ascii?Q?NdNB9LiEV9ninvqdV9la81VYnYMSLq+b5zvfmQ7ilzmEAtxu3t79wpYRPcuX?= =?us-ascii?Q?aPUTqqZiraQdvP6o+1wORgOIdmowgg8eKNZZzJqoHNUEQ/m/CCzts9JnH6Gv?= =?us-ascii?Q?nu40EXH1CY3g3iBNnYdTmE+ND2nEWqUi7VJglq5YGyheBudSnN/1YOgfbjcI?= =?us-ascii?Q?YJ79xIJ8xwdNbSmCg7eyYaeM5X83BJIdLmmvEP1EAjK0v0mP4kCz6ZbXHk5v?= =?us-ascii?Q?c/SD7fXySbNwRvs9FslPbzl4gF8vosugULoOoN3TnWPtQQOcK2A8kh6H6FCt?= =?us-ascii?Q?U1CYgE2Hvq9kpY4NmGwrJTwVkCErA8Qqs78DWsZJWgSWFXCtKm4XFFOkx4GY?= =?us-ascii?Q?KSuDt6SavKBuot5vvyGsfxlDr/+nJ9neit3Zc6fzGpQkbVL9ETgVBhwIydmd?= =?us-ascii?Q?6yBZsSda48JqfYs4ucU7mgP9JxI5RwJFS7m8ltvJT5kX74iCvY4zvUdcn/pQ?= =?us-ascii?Q?YSBnKVke0P5vQvlX0nNWk3YWDTbLWX6z3oMHpAskd/ATrlpNS/rIs5o497R6?= =?us-ascii?Q?bkLyA7+QebTAo/fPSbhjPA66awV5Do16BnYJQD5F0ICWEgPIw0VlGkPo3lmC?= =?us-ascii?Q?yund9IM8KltPo5kY1QGcVM1W1fD75lljDZo0ZLPppWJqFNu2h+PNdFacLUfy?= =?us-ascii?Q?KYKVbipQhPvZx0yD0sTr2JJ9ahVEEBXupedhhco6XcYr6wxR7a2C/Wf5Dp69?= =?us-ascii?Q?aU8g4znI3jAQhOgPsu7ZMZLSTy73NHwDeyLevJqvR4vZShg5xv1ZWxFJgg6P?= =?us-ascii?Q?q5wYx8PSHJldx9DsxORThkaS2GpkzXl9ulJQefTX/OQUz8sNv8QaNXWAMRUt?= =?us-ascii?Q?s3dIbufVCGipgmPcQZdhjU6sdMGKNECJD77ffbwuHGri+tUMSrdmB36e9PkK?= =?us-ascii?Q?36iBBFXxjcbcK46c1HP7J5Fj/A4p7GvO/vcAo0cOVGxw8jIse4v2RH0DfhO+?= =?us-ascii?Q?IK5EhG5u3Lzhi1xYSnCImjF1FKWTgxoTosw3UyAMNLy4PIwyvJIqcHc1opIu?= =?us-ascii?Q?p9JF6/mnRhCUYyEEt3C50hIbBTgXZ+xC8oBbIPwq15zXdlY8e8W96yTzJFgy?= =?us-ascii?Q?vQoQJZnmlA1rV3wURdeLtYsVAcslhBYIBep/AqgM7EacAHaCDIE4RFLTJVls?= =?us-ascii?Q?uWSD2SEk9oRbbfbO6DdzJMjSBANUQS5Iz3U9j+15acVMHeTVw4bHo5dEhdR2?= =?us-ascii?Q?TLrzW0Ihel597fivgqQpRCjRfz2RiNZPSNrX6K4IoJNW0wfU2d5P/UJbqhc7?= =?us-ascii?Q?V1t7csPZJeO7sORTapzlHn4qPhdCmPNympX9kGlgOBLbgk/0b1iKn26w2LET?= =?us-ascii?Q?HJBVUp2J9x6g67G7SIx1t5Mo6vK2qm6XYFDEb22sfhQ52U9CcCu0F7B95Mja?= =?us-ascii?Q?hahhSLRdeLr9nbRkmLo91VENj9bekkgkh3XlEU8ouvalBrGoNjbSHVaFZ1r6?= =?us-ascii?Q?Rw=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?cKxTSse9PQGkkrdcK9y2/d6tWWV6b7uzJVyxyxmupvGFsEcm/5VdE9uddm73?= =?us-ascii?Q?tKCe7veoayKErTmrhgHpbZxmc/ESEQ93ZxLz2+MSa5k9ZFubbJIzmagCHM2x?= =?us-ascii?Q?9sbR6XdmzrC2HoDUGxE3fBkqkPBc81xpEOL+nGwcUVaCJFUQkYOplJPeoBzd?= =?us-ascii?Q?jjMa+9sVDW4yxpGTNI7gEx3RWU38MkMutP6TCmsoo7CTIMxZrblSaQboPIGe?= =?us-ascii?Q?IW19xbRyFQ8hin1cQlTDBvkcRcwqX3SznqDL3mIKhRtUbZWb9W2pWbQKCPPR?= =?us-ascii?Q?JR6QVpHMJ3E4hhtxpDTIVtqPErHNqD8Q5xd3xm+5/JK7JpCSegYu/4HFrLS1?= =?us-ascii?Q?t8g2yHSy76XSDubm3tI8GqJMKFUm0VJM9fHhAKG6PRVENny5jGUQ5Glj57me?= =?us-ascii?Q?Va0F8CJzeIfNkRylMAZH5cFK6iKYFQkWIsQEP5KvjyD6UqvohPsT06VGXH/N?= =?us-ascii?Q?zxpwLWwnOsNYt5H9KATTjIbAjcYeEk2W8jeZvyD6W4wWZhUs8VOcFswnv7Wk?= =?us-ascii?Q?ipowGOkFlinzcgVegi2RqpPSVebSMsYIjI4F6nE4UXSccaQ7FNKPSHnpdaTl?= =?us-ascii?Q?x78a+O3X+9Kv/4FzWk/cCv1VFWkAKDzcJmNwuiEC7yWHfntcH9G2Y87MGg0z?= =?us-ascii?Q?FN/qqKk8YuoXWuC6e0aAYHEr59yKS81+sL1Frckb/Yv3Smt00i4fX4jfGreQ?= =?us-ascii?Q?qofQKJChF+e+L7TMxAbfyAqH0DVq+6jd2nMpEow9uJD80PNQnOomoXzt8BLZ?= =?us-ascii?Q?r46vFfpnd74Dwktf+RPmEk8hhTMEoLnjGcYJYMwJySzq7j0TU8UvtHchXexm?= =?us-ascii?Q?aMYt4Gqzvxk9OgLrpwtYGSsAQ38lKOuDFf3FRScwSd1agQ918naEamnxwUDe?= =?us-ascii?Q?yw4JU83itdFa14s0jWFgr0EiQAu97bjHARFz/3JUgdH5qxkyfe3lTdUUcoim?= =?us-ascii?Q?nGrUCp6n1zhPxLS+0gz2BgNIphazghDgFCl/6+aCIIfRc1hOq1BDTsIM9cOl?= =?us-ascii?Q?EicOjya+lIISAUL7VMnfo2Aiek1UTW5wJy7bscJF1e3xVq79uDp80tDkJTRM?= =?us-ascii?Q?ov3gd+PLjoFjnEtACI4c4bZifsb1602sJFeyHBF2kAq7HKJhnNrx2iQuW3yI?= =?us-ascii?Q?BvxkYsJf7j6+Haa5SYNGxjUnxal8ut6hh4j5pjDEhBOHhEPYiZqMEiH1xk/F?= =?us-ascii?Q?VzImbAu712TvolKujck0F5KlfXz6/3VBf38D84KKsWh8D79h/TiWsQhWh4m9?= =?us-ascii?Q?Xrycysaxk5Q+vup6NHD82yXxRWoPJOndSUHOAG4LktF00zlQsbujnkJWDZT4?= =?us-ascii?Q?QC8CwWAT+++Tt5QWNcskPskCS9/uNOZdlLVLbNTVShfX3yNRkXnDmU4yyR5J?= =?us-ascii?Q?JDJ7a2wvdza1hnmIJcPVGEfgb1XVJ2LmTh92uVuY2gOOo6pumfbZ8PuKRwAe?= =?us-ascii?Q?HaqNLvj5oTJnYbiDoiOSCS6eRUXQiVxn5q3tWmijEZqgMAMDtqOD8/jGwn3E?= =?us-ascii?Q?fBDZyhyNP3bFDCtth13li40EXxU3LVs76JvlClbV6rdOo0f/xpUGZz8NrW7i?= =?us-ascii?Q?TBwBfDYBeYsNCt1nX8pjwEKe72nQO+gStxWU3Kx2AumLg0PFAV3ZfudANmxF?= =?us-ascii?Q?TJDtkcf7EVh4y6TuojOpvSkoDr2tbZAfcH2b/4GI8s7QasUkSrrm6U3AqUwp?= =?us-ascii?Q?duJiliz9NsdRY2aB2wnUWaAI0t6iVSYTYv2YSnZ4hDghRTT5xP59+ebLN+2o?= =?us-ascii?Q?//e1UYISPq14RksNbTPbBISkMFPCkOebZR4qaYKBBW4Ia8WyXPAN?= X-OriginatorOrg: valinux.co.jp X-MS-Exchange-CrossTenant-Network-Message-Id: 8224cec5-71ab-429e-38db-08de6f8ec119 X-MS-Exchange-CrossTenant-AuthSource: TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 19 Feb 2026 08:13:24.9452 (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: 2pgJNWfNub7XCCiqTrBTcTzHVYrM5Hu0Bdbv6aQloDN1uy3NJ2tel1MzNQfjJlHQ9qSiooc2zmPs7fzxwZHTTg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: TYRP286MB5862 Content-Type: text/plain; charset="utf-8" Prepare pci-ep-msi for non-MSI doorbell backends. Factor MSI doorbell allocation into a helper and extend struct pci_epf_doorbell_msg with: - irq_flags: required IRQ request flags (e.g. IRQF_SHARED for some backends) - type: doorbell backend type - bar/offset: pre-exposed doorbell target location, if any Initialize these fields for the existing MSI-backed doorbell implementation. Also add PCI_EPF_DOORBELL_EMBEDDED type, which is to be implemented in a follow-up patch. No functional changes. Reviewed-by: Frank Li Signed-off-by: Koichiro Den Tested-by: Niklas Cassel --- drivers/pci/endpoint/pci-ep-msi.c | 54 ++++++++++++++++++++++--------- include/linux/pci-epf.h | 23 +++++++++++-- 2 files changed, 60 insertions(+), 17 deletions(-) diff --git a/drivers/pci/endpoint/pci-ep-msi.c b/drivers/pci/endpoint/pci-e= p-msi.c index ad8a81d6ad77..50badffa9d72 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,13 @@ 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_msi(struct pci_epf *epf, u16 num_db) { - struct pci_epc *epc =3D epf->epc; + struct pci_epf_doorbell_msg *msg; struct device *dev =3D &epf->dev; + struct pci_epc *epc =3D epf->epc; struct irq_domain *domain; - void *msg; - int ret; - int i; - - /* 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; - } - - if (epf->db_msg) - return -EBUSY; + int ret, i; =20 domain =3D of_msi_map_get_device_domain(epc->dev.parent, 0, DOMAIN_BUS_PLATFORM_MSI); @@ -74,6 +65,12 @@ 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] =3D (struct pci_epf_doorbell_msg) { + .type =3D PCI_EPF_DOORBELL_MSI, + .bar =3D NO_BAR, + }; + epf->num_db =3D num_db; epf->db_msg =3D msg; =20 @@ -90,13 +87,40 @@ int pci_epf_alloc_doorbell(struct pci_epf *epf, u16 num= _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; + + 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..cd747447a1ea 100644 --- a/include/linux/pci-epf.h +++ b/include/linux/pci-epf.h @@ -152,14 +152,33 @@ 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. + * @bar: BAR number where the doorbell target is already exposed to the RC + * (NO_BAR if not) + * @offset: offset within @bar for the doorbell target (valid iff + * @bar !=3D NO_BAR) */ struct pci_epf_doorbell_msg { struct msi_msg msg; int virq; + unsigned long irq_flags; + enum pci_epf_doorbell_type type; + enum pci_barno bar; + resource_size_t offset; }; =20 /** --=20 2.51.0 From nobody Fri Apr 3 08:01:45 2026 Received: from TYVP286CU001.outbound.protection.outlook.com (mail-japaneastazon11021077.outbound.protection.outlook.com [52.101.125.77]) (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 CC53233710C; Thu, 19 Feb 2026 08:13:31 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.125.77 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771488813; cv=fail; b=Czihm25m3J9rysmxvRN9CAMVhAeFr8zaA7swwBLJGjWlhi0v7F136VBG9BzmRIOuJaYsAeUAOowtHQkKnzGCkbkuxfzZhlHCh2HnsBNCy587yx9x5Aym4KnSmjZNm3CbwqFrQ0G1YUOrCXZOLdTinbhssDq/3PExBcRli2Czp0o= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771488813; c=relaxed/simple; bh=GIZflbkhZO07WX+TexC5hedbkstS7lKC0uH2gTWfi4Y=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=Y6HO+jc8v1EskI/JVf1LCxKdOmQpk3CSe7h0gIt7CUS9g/Ne2YoFqVHpcauRk7buo2hUjD6xxksZUsJLuZI3KGQN42dFbgnMqTSwFzovtB1IKp7tpAD1wGUX2c1i2tUhe9RbnqRHxMkFBjg4OnWE4blWDtNhLVhu0DvQU6K1RJ8= 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=Nb3hNzfz; arc=fail smtp.client-ip=52.101.125.77 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="Nb3hNzfz" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=ZzTqGgUQh9D/DpB4z90iIRDl/kq8gLMxsk51MuzCWvWE/B6iOX9UcdFDrQGN7yWqtF9jAgYqEussFQGYq6n0EPSp3YpflGrw1ik/FJAAvlQ5sd7dmrnsB2Js2bfuJIW4ivt7Ifu9y8GNSmnP6VCTJ1BrfOzsO9zSZ2Xz83CqIeuvRtFHog03fhMjGJ9gDBc5MliduGVzi+x6b+Kj8RVHjkPs0WaZp/16KR44hi3ruqPa1vzE+HY/tL28PlS06uyHkyx8/svolEwB/oGvVZTNsAujI8QQmVpNn3q6J8YpfwAgsD1ALAvVZkAqgYd7Z8FkfJi9GykZ7/I3PDMjoPqP0g== 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=f0dVLl8lUOYxnuiRAP1lS0amupJvnq3+JfboBNgIObs=; b=iJYINrHjQKxb+5IoKP/aa2KGA6osu2TC2EQVq/IXq1ekV8OtvoyGbEwzv8bd0p5IkzXPtvIkwliDXEwr2i2f3b5GoTvMYt9ggSVyJi7U234HNuBlHA+82WjFFO5cs0NdJTho8qWHjEHkQ9lfW0aqX2wD5q58GpjVbJS1b6VrJfJ2JUq4EvS75cpuXCkekh2mL4/5IUz9AHaX6glIBlnVD6ZAbrdGvaidfxaqoh6OC+QPoUa9RPzroVyMc/IBIah5iwtcZZe5FS1AlEKLpI2s5wa6HNULS613buyo3k+n80ehekYYIOwpPt2vNxPs0o9wxqQXBhtYaFvjGUFgPkZTlg== 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=f0dVLl8lUOYxnuiRAP1lS0amupJvnq3+JfboBNgIObs=; b=Nb3hNzfzXCiU6bfFjQ7g+AgOGV3k7KrcPdVLwselIzRdwT6SV6UMNTFgGYO7qAm27fvr7NOrSqvf7Vg4H6MotE5c/NdEcsQdHUVxLTcRW0qA2VaNCKbSnKDpnUXP2Ym0zoIv8ewrVqzkumqblG4Aa3Xh5sp3yzce4Wn3IuPXtIM= 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 TYRP286MB5862.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:2ec::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9632.15; Thu, 19 Feb 2026 08:13: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.9632.010; Thu, 19 Feb 2026 08:13:25 +0000 From: Koichiro Den To: jingoohan1@gmail.com, mani@kernel.org, lpieralisi@kernel.org, kwilczynski@kernel.org, robh@kernel.org, bhelgaas@google.com, kishon@kernel.org, jdmason@kudzu.us, dave.jiang@intel.com, allenbh@gmail.com, cassel@kernel.org, Frank.Li@nxp.com, shinichiro.kawasaki@wdc.com, christian.bruel@foss.st.com Cc: mmaddireddy@nvidia.com, linux-pci@vger.kernel.org, linux-kernel@vger.kernel.org, ntb@lists.linux.dev Subject: [PATCH v9 5/7] PCI: endpoint: pci-epf-vntb: Reuse pre-exposed doorbells and IRQ flags Date: Thu, 19 Feb 2026 17:13:16 +0900 Message-ID: <20260219081318.4156901-6-den@valinux.co.jp> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260219081318.4156901-1-den@valinux.co.jp> References: <20260219081318.4156901-1-den@valinux.co.jp> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: TYCP301CA0087.JPNP301.PROD.OUTLOOK.COM (2603:1096:405:7b::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_|TYRP286MB5862:EE_ X-MS-Office365-Filtering-Correlation-Id: c9b15d97-2d01-4a10-dce6-08de6f8ec18a 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?ICTEPz/jbCZSdgH0jST9tJ3ZUXz2M0iGY6PWZRdILU3BdFlHKcQI59lwegG2?= =?us-ascii?Q?mX3jcPM8nTVSIuQd9QZCTONd0i7YJBhn/CQW8TUeE2qNljTB5u5Sqx0iuCMb?= =?us-ascii?Q?3Ik2k6z7sfq8VdiQd7G1PDG5t3JCJIKID38G+9OYwrljDhmGAmiIV92xKU4W?= =?us-ascii?Q?YqjtHGkw2h7cLLZD38w4o+sOfvT1r8xHfQZwP6AkMYU4s9VQ3sI53XwW7bCU?= =?us-ascii?Q?9gUVt2IMwF0X7uo6JZCBYbHYfRbEiP4cF8hJfJrW3CO/UMTeWDwXKsL/6GNQ?= =?us-ascii?Q?eryUmiBUg+jdsPjI/wCxsyJF8AncwE+pbi9J+twfy1Cc4iZebmGNZrRCSSZj?= =?us-ascii?Q?SVJr4Xn+e75/1ch1g+10w4hpDNUwwVMb353a9wNNGcvUPcw2oy59A6MzZTYa?= =?us-ascii?Q?jWz21fYfSCbUZwAt50lzAPinksgQc9tUEJViaU3sEyUWWN6lhgV3HXcAdloO?= =?us-ascii?Q?pzKcTFJzfQlrTHlPetqO7bfhIf3+uSQeL02jL3ZR4gdz8pSu5dWbhNh/dAE6?= =?us-ascii?Q?GsqHhR2YqMzpS20tnl9BdaTFDklo+Poa6So53KWzcM1qvOxg0/9hIiUYCwyv?= =?us-ascii?Q?6izRQY86/YYZRz3N87NI+G0d7/HG4gD2Bj98zR6BpNgem88OspkOUMhekfu0?= =?us-ascii?Q?EZlAHxuFZz1B5ogBuAr54QWjOcCQCU8RaNOCkhrOdIboZoQ9f+FWxIsBhAD2?= =?us-ascii?Q?fIIlBm7IkGHHRDXRWGjspqNjKYZvvfSYeCoB7ZGRttass+cMnfTQ2BgIxaS0?= =?us-ascii?Q?T/mGmvmoWDiMbGtwM6O27fD3yBX3CZj8sCG0oFsPwQwsgQdEBskEs/+uNemX?= =?us-ascii?Q?qsDPZPhecWMm6jpcpeakNDxMPAYPJO6ss27MFRu4RBvgh6la4iVmU0uW/SNz?= =?us-ascii?Q?IqTKLQ4apKDBa1a/QSKh6kZRHVRpmlp26nMqbpMeyuFMtFGjkW1D6UEM7PFB?= =?us-ascii?Q?1y2dirCrDvGUDVtbaA+tGQNd7PENQ/2zyq3HB27RNrRG72DddZ9Cwpgki1fA?= =?us-ascii?Q?+8liXlMTo9KWXNuZuJsFp/N912XVjAUjpRgzOVUBqtohubxaakEBRvbA/nHs?= =?us-ascii?Q?4tI3ICtoKibpR+l/nkG9nx2EBfAWXB9tuKH3Bvk2IAI449+rtvNucvT7GpUR?= =?us-ascii?Q?C+E067FKrbzYcK4QPWuIoanMHFMiXTqq+AuEofqEgNgaLk6bVjB/mTVljVRq?= =?us-ascii?Q?tVh989eEP8EzfXl17/Z8rVV3sWSwXPFFgUo3NImg45JmeGB0tsM04DP1Y9YO?= =?us-ascii?Q?vcJRN81zenCv8paWZO5pP74gPt7ORf9eUURQNt/1bIOzo2dZYjLhw4leW2K7?= =?us-ascii?Q?IYpJnu5kW0MNBEmwengpnr3ir693a+h1tdnGAXgpRg7RXNdIoKJm+aikzOg8?= =?us-ascii?Q?UzdnENxpAm5N2g12xJx83b17IsFKmoSWcPv6NX+1Y4kl+aRoW7qNOirbt4sB?= =?us-ascii?Q?vh+U1W/ug24BTsYeQZ2fyIAhv6V25thkK75y9P58ZwaTLFFIKFUXl+PcFXJz?= =?us-ascii?Q?g65wbVTZzUrXeoMqQAs916QJuFqf7Uto/32rCS4ookbSR3pXDP3rb6+5TLSA?= =?us-ascii?Q?2n8+JWOPBFxv+z7lqrrNUUm6qjyslspHRTbxnqeZNnp9S9Unq/xS6I0FYANh?= =?us-ascii?Q?1g=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?sxYABPKKIHtUNLLHjFmS9GltZ2nTmp6E57Mi+W3tclZLBrekzqJBVs+Ml4cJ?= =?us-ascii?Q?869G4Y/AGD8QdtpsT9vIXhuMGze4lrdIpeT0Asy5WGRtRusfqwPO93zPK3nx?= =?us-ascii?Q?tPDMVtonpP5RAdOLQAgz87HjRkiny1gk75OdWPv+2UgF3DypAvbI2oburWCE?= =?us-ascii?Q?vEEMpaXPig4A6GknznHMv0ncK+Qu+NMuOLvYZEqa8TxcR/rzMeyqwQlV3g/P?= =?us-ascii?Q?SFe1I1WgKqTdMBCvKmBubkTcoAHEBJOttIYHhCvSg3Ml33KSUDJ0oWk7mLFH?= =?us-ascii?Q?mdvUXZh6g4ZxWxBdFFIwt6+HnhV7JSb89hQXPQG9MjNp+kXt49z4EsgP81kt?= =?us-ascii?Q?n9xRjFNbDpbuzthlHYn4ig2VhUR8QQ0Es5e4KZvC8NnuQsarU6APPuwRnm0I?= =?us-ascii?Q?wQd1usZO88kplm/5NioLTFS8FoOErjcay+h3kcfLD4+OWXPYSPP0abDkOJr4?= =?us-ascii?Q?VXCJ/s0urxXcU4f03UjBvQMV/vVkDtZkw2Z4px9FShXG1/1kzCJOKTp5vQ3x?= =?us-ascii?Q?9J4Dw8/t9Ze+sY9e0DUdoBpBIQxVGeGHbqk/8fQX+YnTeJ5T6mrtm5HrUErp?= =?us-ascii?Q?dAQdax+pJ+pJR4raEOmuOHO13KICYdpYwoWMfXPyN6w6Crl9zSXBIXfJjoUF?= =?us-ascii?Q?HdzmJ/176oCpdjQ5Ifn/QJjQQQvAvWQk9nCN6DlDtCgFdBNIPnJ1sKYlQqOd?= =?us-ascii?Q?s3qWxl0dw/oFmgZ90+GqejHg3vLI4rRwaJ1JXoWfR+eou1FVCFVFrRVSUkeE?= =?us-ascii?Q?1FvOHt/ayTbjWONx9p7lsU9tZDkwU/RxfZCTeWDFcTdzWhYzU9V753CTLUZ9?= =?us-ascii?Q?zg1pafO6SJi4czE5b/owK5fe6C9C13R18sRj4OArG1SMXY1T2FaRLne6MYrx?= =?us-ascii?Q?vcq/hJGIWSFiApjFiESPOd0uo8XiH2huhcmlwze0wqHHj5uZ5vw49mV9648v?= =?us-ascii?Q?T4AmdwDU5Ay2PNE2KJ/tlqiHGd+cdA7tmDrz1m8fsWslxX7En+Keif0Q/hdG?= =?us-ascii?Q?UiGiKdfB0biMPJVknUjOoY2VkC2ItuyfndiuDkv34H78HzqdjGC+0F1p7m9r?= =?us-ascii?Q?yGSXodtHZULOH0fXa432pOPC7vvssBfdI4svcxFG9uqTMaDQyXNW3bhOxgZp?= =?us-ascii?Q?cnmLpXl+kkBAZZ6IpqPFVyl2+dm/JkFh7MLQrb2Z1mSiK5gHx8cuuPpOTGtG?= =?us-ascii?Q?IXpzLZVXjo+63kvWy0vYl06ZzC0yi4GCuvfAM7JVcP1MCIjQ/VSxmJvqeeXS?= =?us-ascii?Q?GUgkVb10fLxL/pQaYu3Z5XvHL1Fx/ZlirB60c9VOFPbRd2Pl6tNRzZ5pY7Pp?= =?us-ascii?Q?Ilbf4a5siA32TvlhVVipApXp+2U9LW5kLtALPsbQAScQxREHxL5lzIDu5Tcr?= =?us-ascii?Q?YE9Dq8V8GX2sqx2qIoIM9OFm+PDetKBmAl/NrcRi4IbyOGPQq5CzKXC8fwlr?= =?us-ascii?Q?015hyX2rGH7fjWQyjH9Z2UQQ1xTb+bgk+WnYiTGdQz2hwbyFuzS+7QRMT5Zk?= =?us-ascii?Q?CqyPD74WBDbbDFT3z6uO0AJpqqXq9zwd5Q30sudTNLLxklpYHJztUZNOTsTl?= =?us-ascii?Q?lV5BiwM5ZwSl81a59i7m/U369+OBSIGrvnqMcLgX+8CSdTCvPAaDwrreWyuw?= =?us-ascii?Q?jrDMfcrfo3mAbd9R1t1K1+lY9CtBB8TC+bvamHb0yTkjzq0m8ebb3fJYXMVx?= =?us-ascii?Q?QF4IW2OeVaqJ+o9VimZIYRZj6Zui8BxmW5Ku4e3wGr+ClZmfDIXE9RZHpEzH?= =?us-ascii?Q?wZV8Y0QpiFOgN87H4TJut7ex3w06CVGJjLlIF+keQi4sUZc351Df?= X-OriginatorOrg: valinux.co.jp X-MS-Exchange-CrossTenant-Network-Message-Id: c9b15d97-2d01-4a10-dce6-08de6f8ec18a X-MS-Exchange-CrossTenant-AuthSource: TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 19 Feb 2026 08:13:25.7008 (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: oMNYcO3ShqR5yK5Q4RCz4m0FGbUNxbBmvwZtOksMs7v94PdFEDhSR64fcFHM/D5KDGbxWC/ste6zNiLK0AV27w== X-MS-Exchange-Transport-CrossTenantHeadersStamped: TYRP286MB5862 Content-Type: text/plain; charset="utf-8" Support doorbell backends where the doorbell target is already exposed via a platform-owned fixed BAR mapping and/or where the doorbell IRQ must be requested with specific flags. When pci_epf_alloc_doorbell() provides db_msg[].bar/offset, reuse the pre-exposed BAR window and skip programming a new inbound mapping. Also honor db_msg[].irq_flags when requesting the doorbell IRQ. Multiple doorbells may share the same Linux IRQ. Avoid duplicate request_irq() calls by requesting each unique virq once. Make pci-epf-vntb work with platform-defined or embedded doorbell backends without exposing backend-specific details to the consumer layer. Signed-off-by: Koichiro Den Tested-by: Niklas Cassel --- Changes since v8: - Reword the last paragraph into imperative mood - Rename s/epf_ntb_db_irq_is_first/epf_ntb_db_irq_is_duplicated/ and invert the returned bool value drivers/pci/endpoint/functions/pci-epf-vntb.c | 61 ++++++++++++++++++- 1 file changed, 58 insertions(+), 3 deletions(-) diff --git a/drivers/pci/endpoint/functions/pci-epf-vntb.c b/drivers/pci/en= dpoint/functions/pci-epf-vntb.c index 52cf442ca1d9..7a27e9343394 100644 --- a/drivers/pci/endpoint/functions/pci-epf-vntb.c +++ b/drivers/pci/endpoint/functions/pci-epf-vntb.c @@ -134,6 +134,11 @@ struct epf_ntb { u16 vntb_vid; =20 bool linkup; + + /* + * True when doorbells are interrupt-driven (MSI or embedded), false + * when polled. + */ bool msi_doorbell; u32 spad_size; =20 @@ -517,6 +522,17 @@ static int epf_ntb_configure_interrupt(struct epf_ntb = *ntb) return 0; } =20 +static bool epf_ntb_db_irq_is_duplicated(const struct pci_epf *epf, unsign= ed int idx) +{ + unsigned int i; + + for (i =3D 0; i < idx; i++) + if (epf->db_msg[i].virq =3D=3D epf->db_msg[idx].virq) + return true; + + return false; +} + static int epf_ntb_db_bar_init_msi_doorbell(struct epf_ntb *ntb, struct pci_epf_bar *db_bar, const struct pci_epc_features *epc_features, @@ -533,9 +549,24 @@ static int epf_ntb_db_bar_init_msi_doorbell(struct epf= _ntb *ntb, if (ret) return ret; =20 + /* + * The doorbell target may already be exposed by a platform-owned fixed + * BAR. In that case, we must reuse it and the requested db_bar must + * match. + */ + if (epf->db_msg[0].bar !=3D NO_BAR && epf->db_msg[0].bar !=3D barno) { + ret =3D -EINVAL; + goto err_free_doorbell; + } + for (req =3D 0; req < ntb->db_count; req++) { + /* Avoid requesting duplicate handlers */ + if (epf_ntb_db_irq_is_duplicated(epf, req)) + continue; + ret =3D request_irq(epf->db_msg[req].virq, epf_ntb_doorbell_handler, - 0, "pci_epf_vntb_db", ntb); + epf->db_msg[req].irq_flags, "pci_epf_vntb_db", + ntb); =20 if (ret) { dev_err(&epf->dev, @@ -545,6 +576,22 @@ static int epf_ntb_db_bar_init_msi_doorbell(struct epf= _ntb *ntb, } } =20 + if (epf->db_msg[0].bar !=3D NO_BAR) { + for (i =3D 0; i < ntb->db_count; i++) { + msg =3D &epf->db_msg[i].msg; + + if (epf->db_msg[i].bar !=3D barno) { + ret =3D -EINVAL; + goto err_free_irq; + } + + ntb->reg->db_data[i] =3D msg->data; + ntb->reg->db_offset[i] =3D epf->db_msg[i].offset; + } + goto out; + } + + /* Program inbound mapping for the doorbell */ msg =3D &epf->db_msg[0].msg; =20 high =3D 0; @@ -591,6 +638,7 @@ static int epf_ntb_db_bar_init_msi_doorbell(struct epf_= ntb *ntb, ntb->reg->db_offset[i] =3D offset; } =20 +out: ntb->reg->db_entry_size =3D 0; =20 ntb->msi_doorbell =3D true; @@ -598,9 +646,13 @@ static int epf_ntb_db_bar_init_msi_doorbell(struct epf= _ntb *ntb, return 0; =20 err_free_irq: - for (req--; req >=3D 0; req--) + for (req--; req >=3D 0; req--) { + if (epf_ntb_db_irq_is_duplicated(epf, req)) + continue; free_irq(epf->db_msg[req].virq, ntb); + } =20 +err_free_doorbell: pci_epf_free_doorbell(ntb->epf); return ret; } @@ -666,8 +718,11 @@ static void epf_ntb_db_bar_clear(struct epf_ntb *ntb) if (ntb->msi_doorbell) { int i; =20 - for (i =3D 0; i < ntb->db_count; i++) + for (i =3D 0; i < ntb->db_count; i++) { + if (epf_ntb_db_irq_is_duplicated(ntb->epf, i)) + continue; free_irq(ntb->epf->db_msg[i].virq, ntb); + } } =20 if (ntb->epf->db_msg) --=20 2.51.0 From nobody Fri Apr 3 08:01:45 2026 Received: from OS0P286CU010.outbound.protection.outlook.com (mail-japanwestazon11021087.outbound.protection.outlook.com [40.107.74.87]) (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 4F7393382C7; Thu, 19 Feb 2026 08:13:32 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.74.87 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771488814; cv=fail; b=oz10gYlm1AbZqGih59v2SwCJ9tctN8BkBdUmvUuB21KPhXuv/SmvpLV5R1ZaPxGBmDNzE3zvDFr4cjdGPYhSsSgHNqnwuDVnaxI7UVT9NNMj1Z8+ZwSjj7lA3eV3WvnTAjhQxlfUkL9tI06uE5930799nJKYENrtDcaLpgZBSog= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771488814; c=relaxed/simple; bh=muglXp/rzpaKKYphs9Ms6c2Zq5omujuDgaUbbp3J0kk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=aFiNpVrBAkq8wh+wU6uxdgTLGNTJEJTsbjJf2VZuU1cn7oukoNhvSoA7Pcy82miIwXgIyw8oXALTY50a0hH2HW/bU5VCotCs2/XySnGd/rQniGuLcqwkLPY4ZTBdk73HQeP/m8rad28hKczx6gA52l5lW8g0S5GU9h0ufqy+dG0= 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=wBGHJ95l; arc=fail smtp.client-ip=40.107.74.87 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="wBGHJ95l" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=O5FRrny09oXy0Tssr1RAIGYN7R7dPOrbIjRfvtVGcr6j9TGCXloHcdbhbIb7uUBC14dunqps52GV4hKs9+P1Xs9eDTficzZqSt5zKcobXQws4mcdPV8SVukOX/z/iqSCtR9OpYCQeGjIdHzosHynlyl56yKxZeVdcJuQn7vNB2TbVNtMgFvp6wEgY9mtW43vFVW+yOeKKyFBG6irjEnXfqn8mU3ZBbbtwN5pgTHQ9GtZypj68/Hee2zj2yGabptMO+trr4jL+Rx4u3F0hPbB5BH4g7n3sa+J6u5/e1TQE3NHZEdLKDaf3V+gjPx787zZ3v6dytdocl6vcCVdb04Z4Q== 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=c0/f4VlESTxqp1Y0jsHfkarYpwQbEzBAcMWXKavG7nw=; b=cLMMnXNancmtEp5VwlFG12qLAeXY0xMxWp42qJ5G+pU5IbLX+H121GLW24HuJ7oxwnm4KOvUwrKM7Fj6n09Pbjt9blz69oRhq98TzWz6q6ulS+HdwxGdO8lJFmzxVlXEG44cYltz3jF21BNmW+FQlWdDX6lM66f5n87qZNRQ4BaxICQhsEnuhrtQPNZbp7xDsDMae3Fx5iXM0tHoL1gIPnVGAI6y/wLauun0KWbLd14JFMWyXRmv2ctOOwV1qYzCSP2Jd3ISGTspn50LJ8FFhhRVhNZzQXLLOAbaJZUH8u+9+RQLqZtJUOO6Lc2ZrxZtrYh9aM324orTeonRDpvkfg== 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=c0/f4VlESTxqp1Y0jsHfkarYpwQbEzBAcMWXKavG7nw=; b=wBGHJ95lLaK14oSAVZVLF17/RZXyuU+bpGZ7fYV5aJ2lZjpM7qeeRZ98q+YYmJzeevGN4GAHexLvSgIEgy0xbYkvmvZx5vZrrynsJphvxqQUMz/6rBmdv0m6t4Cz0H9lOoOlkUka0kpHSYibM7nhbKD3zPVMXLZfAGFSMbzcsxs= 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 TYRP286MB5862.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:2ec::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9632.15; Thu, 19 Feb 2026 08:13:26 +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.9632.010; Thu, 19 Feb 2026 08:13:26 +0000 From: Koichiro Den To: jingoohan1@gmail.com, mani@kernel.org, lpieralisi@kernel.org, kwilczynski@kernel.org, robh@kernel.org, bhelgaas@google.com, kishon@kernel.org, jdmason@kudzu.us, dave.jiang@intel.com, allenbh@gmail.com, cassel@kernel.org, Frank.Li@nxp.com, shinichiro.kawasaki@wdc.com, christian.bruel@foss.st.com Cc: mmaddireddy@nvidia.com, linux-pci@vger.kernel.org, linux-kernel@vger.kernel.org, ntb@lists.linux.dev Subject: [PATCH v9 6/7] PCI: endpoint: pci-epf-test: Reuse pre-exposed doorbell targets Date: Thu, 19 Feb 2026 17:13:17 +0900 Message-ID: <20260219081318.4156901-7-den@valinux.co.jp> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260219081318.4156901-1-den@valinux.co.jp> References: <20260219081318.4156901-1-den@valinux.co.jp> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: TYWPR01CA0009.jpnprd01.prod.outlook.com (2603:1096:400:a9::14) To TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:38f::10) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: TY7P286MB7722:EE_|TYRP286MB5862:EE_ X-MS-Office365-Filtering-Correlation-Id: 78abe31a-9f72-42d9-3215-08de6f8ec208 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?lvuj/Vnok/8pBiNTT7JNKNNOA/HBd610mmQLYjnjLAC52wnbr8FlmUECfE3m?= =?us-ascii?Q?4aJkzF8iCW7nrz/lZQczRtwPIETWIPx/UzPcKBlPop1F5AVbIOvlywQbPZWN?= =?us-ascii?Q?Ttvref4ygeTc+KnpnmYh0/iumWBqKdtZ1WGnebaDnFb1QXIZTQyn6aSlHofH?= =?us-ascii?Q?BQwf7e+1uXlVGRNwoPzErERPHEUr2c8h8AV+THHEMuFpcvwBVh+hocvRwsrq?= =?us-ascii?Q?j9KnN1QuA4kK4Dmb6UM7vB1AEu/QBbTO2uzOIxbd+iAUC4qPwOUjH1G4ZNC4?= =?us-ascii?Q?08GEv9yckDZxaK7I4SD2h8tTlTtPaiobkRmvKgzxH3+YDkQUUZPa7KFIWh7w?= =?us-ascii?Q?qj9wHRAoa/kEGgQVDnsx6DCVd+087f0PYBJvstraTxmKxzN3eZDYezZwN71h?= =?us-ascii?Q?HAwN+pkD6O3dJlaT2gk17zqEUFBsibAnPi5d2IZjSz47tvDiZDfDLVNnKAUs?= =?us-ascii?Q?ReBNh8g7aqF3CovsBBC5IpGbidnpd6Pi42HVzb69+4Jhgw1Toj71PDgBOtqd?= =?us-ascii?Q?4OTWWJLk3uvw7+mBPRvso/foZR9j9+aGX3VzwhCmGLe4HBcLKalej1W0b2GW?= =?us-ascii?Q?TfIxVJM9Mm2tbcqug9xrZrOkk63BVsJ/3nmSDtKKhEpEZKTogmjOgGOjtLhM?= =?us-ascii?Q?1HIVvH5jsAeN74LHZov+fejZZbyK/fJsi9b01BIY6WPepamSVDppSz62LVRV?= =?us-ascii?Q?tSpY2+nUkGt63m/LGrQ4Zm9++JDIBDnnARrNi4oiIRNMnYSkNn1w7W/3CukV?= =?us-ascii?Q?+xaHhxSeg3qDqZvy6GqG4wO8cP2hRTtPkE/QCSVeVmtpk44hd+dumBfXkNzt?= =?us-ascii?Q?AE4sd4VHTvfJs90qAVGwSpVIfovoGCDKRV9oJc4UUQ2WSbGBwXYCwGcYy2Sm?= =?us-ascii?Q?pI4XVQu1B5quqUDd/lhSk6jSZOlmwWsJZVjX/ONO72sqG71jG3icMuEM0T5l?= =?us-ascii?Q?AIQPiyOEBmBv0zVM5Vuoj7p4fubn9p6pm/6LKQ3ZDeFoqia7hR8jxaa2L+6F?= =?us-ascii?Q?UZiCxCwzsYYkRawvRklasoh+/BKuNyKAXc1r38s9WoDxbtjrpodwGa07xMBC?= =?us-ascii?Q?eZbqV04ETXm8D1Ht0/dWNshAz3WZAni9BZ98PaXpzs1yNRGTJdPbFuF4p85n?= =?us-ascii?Q?Xz2vpVrYuVLOunDEMUAnOvQOJirx4N3XYJizoxQyWBo4wQVljxjgbDDkykkL?= =?us-ascii?Q?36D/mOONG4pfgW0lvdGhTbrt7V/174mlzrF1GzcGq7KKrceoCm2/GHe6CfJH?= =?us-ascii?Q?wm/Bf6hxt+Y3VGWuC9yb7ry2HuIFDteyhFuLii9vlRVBqTBt37LNl2kE1UNV?= =?us-ascii?Q?IJpjoI3hL5gJD0lE8bIg8dBCYbnvti+Q6FE1qLmPR5U72okrprfHP3J6MtKO?= =?us-ascii?Q?CEohUOK36iN9KQ3FTSZinBXYraaOwQI75uYYCycqdALAsUKDzU+quxmm+XMV?= =?us-ascii?Q?6ECavi3ujATYNcMv3nsieizLu2F8u20xEXRoOgqUMzegVPxdCHUZxbzEtuES?= =?us-ascii?Q?sdn9gzPNRGvYZFCv9sgrrptezSd2Hv45PkrpA0dzj2iJXEL2H3BJfQuzV3mL?= =?us-ascii?Q?H+xlOS0BMfQJcnBMylfsVtgUh58dxuCNxjSfkmSB+V4KeasLu7Z7Z6y8Wh2p?= =?us-ascii?Q?CA=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?qiiqqlNTgVoT5Y33ds29NOL0oqiRvF+zKB1PDb2EQj+se6Wi2Z2KXsOkQpeV?= =?us-ascii?Q?nckA10zxLWcyLb9ttDZvmjqVEsHGtJXyjfnT1KBViDuabYNfdNMSNWd/AoM9?= =?us-ascii?Q?t62SejCwkjejzs2IaKCvtN7Rbkru7FL29L0hV15duyZC3lkkDs9NIWNhFQ1M?= =?us-ascii?Q?LVCjsd7YwHvzHF3sWFJwQgqc7ebtFfG6Ql7AcpzY3456cq1KDZIxbvtLuYCV?= =?us-ascii?Q?1O3EEXXEJUeQp5Hlln9lah6mpaFrf/0YCDzeIX8qCab+yfFp7RjxZTJDn27V?= =?us-ascii?Q?zbKceD+G3/axHCxSG8CGl5xbBXRFuik0QDh46v6tyibwghJUT25jma1DKjAi?= =?us-ascii?Q?0icn27plRzqrOqsZ5TrVoDcRVn2xpv8YNyEXfnAVPo21C9joPiYP3vjYfaC/?= =?us-ascii?Q?29cIenstEzGhRHn7zHp1n+wWh1uq+pf8o6ZfkjXLwDSmUHwrpLpnX8sVnVWk?= =?us-ascii?Q?kp9PgMrUm3+6eio3yXC6tGx4Jib9omQa8G/E7L2CYAdlX57Aytl6WwhmevTu?= =?us-ascii?Q?QR1utNp9qrxo8jd1mNl3UtbtTaCPV2iYo6PQoVsokq338TXFlsqwzzf6U7Yh?= =?us-ascii?Q?lRqfauxH1tvkeO6fhZftjeBeYVKXFN3a88Mm2oJ2Ps+XPqQ05YZGR1gDws8U?= =?us-ascii?Q?rYgutVNRTghIkPg1QXOVopUHIaz/kCm8CODF4VsWyBaXsjQXxJIjUB5O5Cl7?= =?us-ascii?Q?dyjI5OG+mKnqBO/urK6IF2+GnycBUGpZvKi0eZXf+FAgmDBTCvMu/+V9SyKq?= =?us-ascii?Q?CyaeedAK6IMCrv8weIOoJOGrWE9pTIGpJketHt+7vkCMkT4wu1Keskt0qNEb?= =?us-ascii?Q?FaDgYdbxCLFHhtzLcGcfD9r17NZmGLCxYabHPYgDz9HFrv6G+MjYIqDmjyod?= =?us-ascii?Q?n3ncgHrLr/wowm9u2c2QHwwruMGriVTHEu52ABsR7mirkC4d2MjsjUAlfsqY?= =?us-ascii?Q?baLSgFheSlD/kDU/I7eY1/uTlXsn0AQOSZ6vpJ9gOOtq4AQEfc9Uoyg3Jhec?= =?us-ascii?Q?YcKOOKLiaoTAIZyMsj2ymANPXGpReMqJV4aHp/WuvLjwx5YW1L4UED/C7yV6?= =?us-ascii?Q?BOTqgS1FhlEJPvvhImz5nQioUYJGamBLPVu1H+Grtq0qyMFtvPHXLkDGgb7D?= =?us-ascii?Q?z5Wun1rutpJR+8zAn0+OzSAjA2aTGJsJcdK5yf3CeHf8ttS9LNyc+jqEen+u?= =?us-ascii?Q?eCt9PpcIYlyuGIrRCGddiNcAJakFJkHvow5NwKnEnN/JI5qL3iOs4kUDmJE1?= =?us-ascii?Q?DWaUcE6ShklG8tLM2pdulA8MllUpxvzUw/+PzXEOSro7SLutXDkpMEx3mER8?= =?us-ascii?Q?77WDuobwUEHMLG59gCTje/l56RFERDNrNm4QY51Ozwrr9bvDCc8TBmDKoZib?= =?us-ascii?Q?0F0q84KVW6ITw5ZdkB+24ttm9GHM2Lck9GnyhvMdgruaYcsDwX6T4LF4NK8v?= =?us-ascii?Q?hHcnTUjJ6NembHJotwL6k5Tz5uOyUp099+eHAeeHTndHI+GyJSD75mBUkHjW?= =?us-ascii?Q?f59fE07xM4zdeIUV8c0IBfgh/WK2WdD8hzRARVSBDb/wUNKu4jGBZcPgaAq2?= =?us-ascii?Q?aPSLPSa1e+EidtRWbFBJ2J4znnlUqN2bKrW4bVnV5zmwxtc6B6AIkmZL/JuH?= =?us-ascii?Q?wiv3fscx6ftybwnf4Tvt5VtLGLZXES0UJfhcm4IrPvC5kH+rxF4c8INwFGHj?= =?us-ascii?Q?bVWyvH8ptpEmUScD3hTD6ugmvrZoYFkZOuLg8ealjIXmFwn84GxVzwJuxeMf?= =?us-ascii?Q?9PRmD/EBb5ZzcF8b6lAkHt6iRcF46V4JbR/tzKjELY20zAXDJlGq?= X-OriginatorOrg: valinux.co.jp X-MS-Exchange-CrossTenant-Network-Message-Id: 78abe31a-9f72-42d9-3215-08de6f8ec208 X-MS-Exchange-CrossTenant-AuthSource: TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 19 Feb 2026 08:13:26.5047 (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: oQW4PFKOsUwz7LZ98l0R0jip6iVVwi4EcV9b3FmorfwBfzPw9n4wiH8lQTYG6Nbrh0Yvjqlh6z+O0l8ttkc8Yg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: TYRP286MB5862 Content-Type: text/plain; charset="utf-8" pci-epf-test advertises the doorbell target to the RC as a BAR number and an offset, and the RC rings the doorbell with a single DWORD MMIO write. Some doorbell backends may report that the doorbell target is already exposed via a platform-owned fixed BAR (db_msg[0].bar/offset). In that case, reuse the pre-exposed window and do not reprogram the BAR with pci_epc_set_bar(). Also honor db_msg[0].irq_flags when requesting the doorbell IRQ, and only restore the original BAR mapping on disable if pci-epf-test programmed it. Signed-off-by: Koichiro Den Tested-by: Niklas Cassel --- Changes since v8: - Drop the extra size_add() doorbell-offset check, which is generally unneeded when pci_epf_align_inbound_addr() runs. This fixes BAR_RESERVED cases where epf->bar[bar].size can be 0. drivers/pci/endpoint/functions/pci-epf-test.c | 84 +++++++++++++------ 1 file changed, 57 insertions(+), 27 deletions(-) diff --git a/drivers/pci/endpoint/functions/pci-epf-test.c b/drivers/pci/en= dpoint/functions/pci-epf-test.c index 684f018ea242..4fc53edbceed 100644 --- a/drivers/pci/endpoint/functions/pci-epf-test.c +++ b/drivers/pci/endpoint/functions/pci-epf-test.c @@ -92,6 +92,7 @@ struct pci_epf_test { bool dma_private; const struct pci_epc_features *epc_features; struct pci_epf_bar db_bar; + bool db_bar_programmed; size_t bar_size[PCI_STD_NUM_BARS]; }; =20 @@ -731,7 +732,9 @@ 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_epf_doorbell_msg *db; struct pci_epc *epc =3D epf->epc; + unsigned long irq_flags; struct msi_msg *msg; enum pci_barno bar; size_t offset; @@ -741,13 +744,28 @@ static void pci_epf_test_enable_doorbell(struct pci_e= pf_test *epf_test, if (ret) goto set_status_err; =20 - msg =3D &epf->db_msg[0].msg; - bar =3D pci_epc_get_next_free_bar(epf_test->epc_features, epf_test->test_= reg_bar + 1); - if (bar < BAR_0) - goto err_doorbell_cleanup; + db =3D &epf->db_msg[0]; + msg =3D &db->msg; + epf_test->db_bar_programmed =3D false; + + if (db->bar !=3D NO_BAR) { + /* + * The doorbell target is already exposed via a platform-owned + * fixed BAR + */ + bar =3D db->bar; + offset =3D db->offset; + } else { + bar =3D pci_epc_get_next_free_bar(epf_test->epc_features, + epf_test->test_reg_bar + 1); + if (bar < BAR_0) + goto err_doorbell_cleanup; + } + + irq_flags =3D epf->db_msg[0].irq_flags | IRQF_ONESHOT; =20 ret =3D request_threaded_irq(epf->db_msg[0].virq, NULL, - pci_epf_test_doorbell_handler, IRQF_ONESHOT, + pci_epf_test_doorbell_handler, irq_flags, "pci-ep-test-doorbell", epf_test); if (ret) { dev_err(&epf->dev, @@ -759,22 +777,30 @@ static void pci_epf_test_enable_doorbell(struct pci_e= pf_test *epf_test, reg->doorbell_data =3D cpu_to_le32(msg->data); reg->doorbell_bar =3D cpu_to_le32(bar); =20 - msg =3D &epf->db_msg[0].msg; - ret =3D pci_epf_align_inbound_addr(epf, bar, ((u64)msg->address_hi << 32)= | msg->address_lo, - &epf_test->db_bar.phys_addr, &offset); + if (db->bar =3D=3D NO_BAR) { + ret =3D pci_epf_align_inbound_addr(epf, bar, + ((u64)msg->address_hi << 32) | + msg->address_lo, + &epf_test->db_bar.phys_addr, + &offset); =20 - if (ret) - goto err_free_irq; + if (ret) + goto err_free_irq; + } =20 reg->doorbell_offset =3D cpu_to_le32(offset); =20 - epf_test->db_bar.barno =3D bar; - epf_test->db_bar.size =3D epf->bar[bar].size; - epf_test->db_bar.flags =3D epf->bar[bar].flags; + if (db->bar =3D=3D NO_BAR) { + epf_test->db_bar.barno =3D bar; + epf_test->db_bar.size =3D epf->bar[bar].size; + epf_test->db_bar.flags =3D epf->bar[bar].flags; =20 - ret =3D pci_epc_set_bar(epc, epf->func_no, epf->vfunc_no, &epf_test->db_b= ar); - if (ret) - goto err_free_irq; + ret =3D pci_epc_set_bar(epc, epf->func_no, epf->vfunc_no, &epf_test->db_= bar); + if (ret) + goto err_free_irq; + + epf_test->db_bar_programmed =3D true; + } =20 status |=3D STATUS_DOORBELL_ENABLE_SUCCESS; reg->status =3D cpu_to_le32(status); @@ -804,17 +830,21 @@ static void pci_epf_test_disable_doorbell(struct pci_= epf_test *epf_test, free_irq(epf->db_msg[0].virq, epf_test); pci_epf_test_doorbell_cleanup(epf_test); =20 - /* - * The doorbell feature temporarily overrides the inbound translation - * to point to the address stored in epf_test->db_bar.phys_addr, i.e., - * it calls set_bar() twice without ever calling clear_bar(), as - * calling clear_bar() would clear the BAR's PCI address assigned by - * the host. Thus, when disabling the doorbell, restore the inbound - * translation to point to the memory allocated for the BAR. - */ - ret =3D pci_epc_set_bar(epc, epf->func_no, epf->vfunc_no, &epf->bar[bar]); - if (ret) - goto set_status_err; + if (epf_test->db_bar_programmed) { + /* + * The doorbell feature temporarily overrides the inbound translation + * to point to the address stored in epf_test->db_bar.phys_addr, i.e., + * it calls set_bar() twice without ever calling clear_bar(), as + * calling clear_bar() would clear the BAR's PCI address assigned by + * the host. Thus, when disabling the doorbell, restore the inbound + * translation to point to the memory allocated for the BAR. + */ + ret =3D pci_epc_set_bar(epc, epf->func_no, epf->vfunc_no, &epf->bar[bar]= ); + if (ret) + goto set_status_err; + + epf_test->db_bar_programmed =3D false; + } =20 status |=3D STATUS_DOORBELL_DISABLE_SUCCESS; reg->status =3D cpu_to_le32(status); --=20 2.51.0 From nobody Fri Apr 3 08:01:45 2026 Received: from OS0P286CU011.outbound.protection.outlook.com (mail-japanwestazon11020118.outbound.protection.outlook.com [52.101.228.118]) (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 B4769336EC5; Thu, 19 Feb 2026 08:13:29 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.228.118 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771488812; cv=fail; b=pFsJu4MXbKfNQqLorXbzu7IbmSwhMWb2svCynQiVllWgaZ7B15SB6/luToIVgIpCUWjH1TscT0PxlCejjW9nm/VNJ704sfjk6CojzWL3cyHq5zHGkZ8MHuvLNV8agLwi5131uuD1AR+MIhYH2IdU1tPMI9ghJCPDcgM1ovQHXZ0= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771488812; c=relaxed/simple; bh=QiVBzYbFCwqKZctD9MIADOdusnrREp0UMwBNt/97368=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=Gh7IhjwGSCgiD2kLmQkje/YWtFIRhK6bq8bb8BbmnPY9AL0N1aVxczB5SOcahxx/vB3aK8+NEN9G0dTl2YBbh7CKEdO7IV+NK29MH+LfnXvmsNeRn2g8zWFTi9cnHYDKzeL9L51W83vChpb1fsOnFiRkJkM52r+gj2p2OyUWDd8= 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=gakf4MSo; arc=fail smtp.client-ip=52.101.228.118 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="gakf4MSo" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=g0q4KyGVrqGhW78S9AkR+UdTf9+1oDsItpsbQYeircWJHViFje4Lk6S4cHKYzazD5D8oLmfNcF4Ev86g582VD6jWWTXJtfHT1o0dBpCNEWJEfYIAYv723j74XW1M50s6bnCHPT2yB7eC6CBsSA0hLKrcyRbEoqy6OnIj08jN6tkpZiQV5pwqi+s2VihInqyDo0PVI4wXMuv0VQ2sU/CjiOMzFrLh0ppdYRaSJvr6g1jLnaMCrMbi/64cv10nTot1wyvBYfzpqVaKE3i3OqvOIvV86aylLE3fD1GmzbH2KNXrONtKVkhdiK9k9Lsrhh4gHUkR/PBLy6y6X+Mbsv1Arw== 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=rN0/TQ7jIIzGySPJfgpzE9PVGjocPXJa/8Wx7UgygPk=; b=A4Ed7uniZP/0mYdB71Nf/q5jVuIvhJ7NyhqsjUJWUqg52KUbIUHrnrL9J4TKZ27uBbKIMOChM000os+jiHj3iltcIKO0GFPpOUzBvRaDMwuacSSYySXAMhgkPLEI6VYEtnuCNaJATHsJqioauqJuBtOLeYw5es97aNvlxFQ7B/J/8+xdxeRFbVaG4Y6Wjy8zOGFq6SsNYP3osLEP7FLCMGZoFOPaZKsglxK9QuYASKiNF6zz9wMTMcF8rIlMHh3Um4Jr93abiMiQDqS0pzP9RtBt1/1CEwGtXqKz3JbVXR+2z8bEvE33E/a8WoZvmkSp/7s4b78Waq43sS8lxxblnA== 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=rN0/TQ7jIIzGySPJfgpzE9PVGjocPXJa/8Wx7UgygPk=; b=gakf4MSooWyxZ6UI6HJr2BWt+Z/RG7RgV0FEdj02J0jEVsckcLryADcQ2M/BJ+Za2p/a0JWU1h7RThdXE/tJibLuUnl90TYCMlUkHpifl/CopzBx00ejeCxK/T+Vs1UezsBOB8chIgMJpU47d2zVOuJCBDlxzfS72DXbkhzW7BQ= 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 OSOP286MB4397.JPNP286.PROD.OUTLOOK.COM (2603:1096:604:300::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9632.15; Thu, 19 Feb 2026 08:13:27 +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.9632.010; Thu, 19 Feb 2026 08:13:27 +0000 From: Koichiro Den To: jingoohan1@gmail.com, mani@kernel.org, lpieralisi@kernel.org, kwilczynski@kernel.org, robh@kernel.org, bhelgaas@google.com, kishon@kernel.org, jdmason@kudzu.us, dave.jiang@intel.com, allenbh@gmail.com, cassel@kernel.org, Frank.Li@nxp.com, shinichiro.kawasaki@wdc.com, christian.bruel@foss.st.com Cc: mmaddireddy@nvidia.com, linux-pci@vger.kernel.org, linux-kernel@vger.kernel.org, ntb@lists.linux.dev Subject: [PATCH v9 7/7] PCI: endpoint: pci-ep-msi: Add embedded doorbell fallback Date: Thu, 19 Feb 2026 17:13:18 +0900 Message-ID: <20260219081318.4156901-8-den@valinux.co.jp> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260219081318.4156901-1-den@valinux.co.jp> References: <20260219081318.4156901-1-den@valinux.co.jp> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: TY4P286CA0090.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:369::17) To TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:38f::10) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: TY7P286MB7722:EE_|OSOP286MB4397:EE_ X-MS-Office365-Filtering-Correlation-Id: 43979eac-d5d5-4223-c599-08de6f8ec279 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|7416014|1800799024|366016|10070799003|921020; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?0XMdkiLttm5JWge2ElrSR4h345gm6zpM0S4W9n/k9WyUV5FhP1xMd3Y5dKwI?= =?us-ascii?Q?i/VsvIlEAdVtLXTFQbbdqo+RNxwEeJoEkUvyeN3ZNN8TAais1AAUihEPv3H4?= =?us-ascii?Q?UfgtxzaaqpJUU62T+BKQ/+R0OOCgF8IYneLsdd9l9VNFIy0AN3U5TgashJfc?= =?us-ascii?Q?XodmpVAzTGKBrvSBPP55Mwz6G1G9haqDWJnHX3aKYxo1NKlROawItnb6/+as?= =?us-ascii?Q?c6B/laBRuGnBLIq9YjwXepqyt+UN2iiapxdh2oVZAcszKgLAmQkQgmIUclNH?= =?us-ascii?Q?3TQOdCm0OmTj82dn4eBVjbHire02zXqspZ/QjmSQzWFn7J6RerZRircZtoXq?= =?us-ascii?Q?pczsX28Yi/IB+i0+b9xsHNVbyGaytfpEDasfFZsrbjUye25bWu84KZnhRRQq?= =?us-ascii?Q?Dv6qy0Eq3x5Ey0CqDWpjpEwpdsQK6BffdBP77kEXXgrveEAvsdWNhB5p3IXu?= =?us-ascii?Q?nG5VChS/iUJ2tUiPD3JlGNCAqBCQZzzoScG3pRuWUaVMNQcVm+NbDZfpvvLp?= =?us-ascii?Q?/dBd+zeHP4b72WhcyK7IWzvSRc5eKiW/s5wobpsNNJZPK/ZfWCyuoHNilpgO?= =?us-ascii?Q?xSmfcDeyZ6vPB9q8LEgjN9fGuHQ7NDbSrNKFRc6T5791hrPPEDE1mEU8nh20?= =?us-ascii?Q?2Ali5H1bUj5jnr7/soyzWdc4jRQtwmePbxU7xGHTRKW9LpD5HU6EthcilgHZ?= =?us-ascii?Q?uWgPJ5qZfS7VJsVuO559RvU55KTCgjJaRDDCFI9GqNBMvZcTc0CXAEaAGOen?= =?us-ascii?Q?nNk3kwr3c0jkeGqOfKTZD1iKVNb6pEyOqd0cl0FA8HrWHPUXA3X1eRKXiCsm?= =?us-ascii?Q?uyAwMmr46rfkLHixcxn+HVsXL65QiBU+8CL55JTNhmgGagxw5w/GfkbeY6Ok?= =?us-ascii?Q?9jTZ4T7TNmklQeSJ2LBhJsuPM9/ySZB41RepFrjlHLL1HD/gm+LiqFUko6y0?= =?us-ascii?Q?uyIsB0/02YMpdXu67hu68h7wfNclDC3brgWed+kGiDQVA/YIOXvvm0F97rh/?= =?us-ascii?Q?1DpgVj2Sifz1fjfD6pmK9SQJ+T27ElASyF9T3x2TKRCgGHPOUqQFPDNfXLtW?= =?us-ascii?Q?V8VOufeKLzyXPRnurKcxBI+UCgs5vAe/s3NjrmbRRktA2/Pr2DwbAfbEIu/z?= =?us-ascii?Q?ijmPlCVbJqlL9qNxh8Xmepv+ofgOvOUgUR1azfLznBXOzSRAX3BtEA0Wlr3Q?= =?us-ascii?Q?pQLWl3Lhz88YWmOSeHJ0NkveWSCEMxGXuVjutbwmzrrAgE4OJAmvNAkWa3kF?= =?us-ascii?Q?eJCCZXWyPl8qKhxEsmZOwbDXtUdHrcbMS6bHWwHVaytbDX1Ivw+aYaIODi9V?= =?us-ascii?Q?5YqNbarUb6rDs41NQGASMDPUFwxrLDvkTOm4vKtVjdLBsDwWis0im+eV/ukV?= =?us-ascii?Q?Swq6lRI6SqP4M1IvhZy43NeY4EuxDoSvex93q7yCD5uZFtj/8ksdkhqrkiuM?= =?us-ascii?Q?J58RycH+Px97WKoUcl2aLHdOnxM4PBF5z3s7bSvvS1guyxfvsvUwq9pPuof9?= =?us-ascii?Q?t0mBQ2peyC8QRmO9IN4VsEFlPeLU52eP5T042XOgKh48hwU5gLik1F12A+e2?= =?us-ascii?Q?8J0V5ZrAhzw/E7QKOoUzQoCZV4VEiloqi5/EIsjsFd90x/8aIkPY7mczmGUK?= =?us-ascii?Q?Qg=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)(376014)(7416014)(1800799024)(366016)(10070799003)(921020);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?eKYYA1QqIsgfjGItSvH9XUL6p5O3q8X3wH9+zsfd1o453v3iv+wJxDVNLKXA?= =?us-ascii?Q?8RItReT1uHtMSdVOrJUjQS4B/ABb4I0LVtr6NLSyVjomeF4lIP4PCVqjHC5s?= =?us-ascii?Q?za+OvbTP0mfwL1wop5Ra7STISapd04+ItUadalXANeyhNvBslmBEpbAts9gI?= =?us-ascii?Q?imCNdyTwavANJEYKg3QOSBXqc+BsVlO/cKd9CaoiO3+aBdO59hgt1NTPjqv+?= =?us-ascii?Q?T1narczbUnCs8hWhDxndLIsuZa1t+4rMyYQO+TbcDEEAA1z1minrRTQ3vUcL?= =?us-ascii?Q?INqhM9TtIcpWE75x0qjVq2Qv2dB8IZiOEfVpUILqBAkUu9u6r/5lHyL9ClkC?= =?us-ascii?Q?C9VbVcJUkVPYvRbNK5x6VLr3GW7D0smEOp3guXWRYasaCy/bJB979fJUysw7?= =?us-ascii?Q?+ww60MVOpIFipYANUUpOgIDiXO0CghauiiJ+n+Hb2etK5GQmrXUxS7OFOAop?= =?us-ascii?Q?pxRFsCfARNtkXND1h7Ta1v2b0MoTsMRkICNKj9MxSIde+a61KXLwn9aZ8SAI?= =?us-ascii?Q?y8ssiwSGLI+NrCPFQd/AubB+491aU/14m3lHmNGuqLOP6JU7FeSUwGpink8k?= =?us-ascii?Q?kmLd5vTf3t3fucWhFXWNOfxqC0aYfv3o2uwARg2nWT6IiD50tRVVcx9VOYS6?= =?us-ascii?Q?0IZ5xypvsAei2VntEZk8KO566YQK64QqDZC0CJ79XR5KY7UfEouRuHeoXYOA?= =?us-ascii?Q?MtfGv25mkNxwo1SoxITsbgal99MaOGOo4jIA+Pdnpwjr81OxfCgLXGj5f4EH?= =?us-ascii?Q?BWVL3Kb9jxoRh5AZfPInPXg1js7A9cQ6T/eSPDegpP7PsGR5Y70UMFrwVC5Q?= =?us-ascii?Q?RtTd6Q6XAEHzzhYBySY39N9dDuSj6oU1WuIhLJ0F62DCJAMJPC/OkH5att2P?= =?us-ascii?Q?V6Vvfc/5e2w5rZ5JugT2vLvMAYPzu4E2MHil8g1rZ9oFgiVvR0N6NI20cmXa?= =?us-ascii?Q?XBq8fz6qKahzR9KB/PRomHvpwP+dJITjJ8+S7QDZr/ez7NXH3h53DceJBKLz?= =?us-ascii?Q?nHcSemM0ZZM6XEcpKm/IxUmtlXqWxdNxmfUskdps+M+/RKqMXqhe7gGFn9rY?= =?us-ascii?Q?KmefI7Olf1f558u39Tf4KdWnSMQfHUtQlEKDPzhN1R4DynPZR7AHe6pIxHGw?= =?us-ascii?Q?KijhFjNqmC+rBCaU5phv73oRw25lxcQDfaAKTJSrodfi/YPQADx/L8RW6Ojr?= =?us-ascii?Q?2MoudmA5VCgwTDOa/Y4hFgwBcKLuDt1bNxfW5f3FYOWOMW8joZkWMejJD+Wb?= =?us-ascii?Q?iX0ha8wg8jRDvyhaPmpuSrG7Dau26GbwZN0/AAfqhqbHsL5OJ44DPDpZqfzf?= =?us-ascii?Q?X7I0KpwlDcZccU9L/C5x/JHATGKioMfq7ilFaupoepd45RYjWr6MN422ywzx?= =?us-ascii?Q?7F6BCOzYykqPdeFcngl3cYiIe2KSBbYg4txqDTGHSpYI8dE2yHuiLGBLrzYl?= =?us-ascii?Q?b0J0uAzow5MvHIFAo/H1d6GajvSbVup+iYHBslqkiN8IfSs6X3nruGr3zkWy?= =?us-ascii?Q?Y8cibR2QwpFy1UQ6t0dO9D/GTEYZFOyZjGBi3q5it2hDkvmNfDkkYrQnf0M4?= =?us-ascii?Q?j8GqElbgs4sqjxK6YjQaQkLDw/YA5/6a0gXzzTPgppAUWzU/Qjgb/JpI2Vi/?= =?us-ascii?Q?L8WPXshCpe09PymaDTP5LJwxFfX27mzof7bSma0xjAT7LElvqIUl4Oe54CZx?= =?us-ascii?Q?yM3UO9gQgNw1tNRgzeOXaEfJyQfQipHW/zZTGKGGIJWJsTkH3T9lNmIURgDU?= =?us-ascii?Q?v/Cco9lvzrsLVGNDxibWcIZNkybq8/Gbk73CBQXa0UbOUCldV4zx?= X-OriginatorOrg: valinux.co.jp X-MS-Exchange-CrossTenant-Network-Message-Id: 43979eac-d5d5-4223-c599-08de6f8ec279 X-MS-Exchange-CrossTenant-AuthSource: TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 19 Feb 2026 08:13:27.2610 (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: gEmq0Vn6pELilKFedxvSljyNTPJYZDWR8NzoNMyy7SXHBaaCAcPcTqJSqpglIkbM89WzYWMl/orHVFLrsVZ6qA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: OSOP286MB4397 Content-Type: text/plain; charset="utf-8" Some endpoint platforms cannot use platform MSI / GIC ITS to implement EP-side doorbells. In those cases, EPF drivers cannot provide an interrupt-driven doorbell and often fall back to polling. Add an "embedded" doorbell backend that uses a controller-integrated doorbell target (e.g. DesignWare integrated eDMA interrupt-emulation doorbell). The backend locates the doorbell register and a corresponding Linux IRQ via the EPC aux-resource API. If the doorbell register is already exposed via a fixed BAR mapping, provide BAR+offset. Otherwise provide the physical address so EPF drivers can map it into BAR space. When MSI doorbell allocation fails with -ENODEV, pci_epf_alloc_doorbell() falls back to this embedded backend. Signed-off-by: Koichiro Den Tested-by: Niklas Cassel --- Changes since v8: - Add MMIO address alignment check - Drop 'eDMA' word from the subject drivers/pci/endpoint/pci-ep-msi.c | 99 ++++++++++++++++++++++++++++++- 1 file changed, 97 insertions(+), 2 deletions(-) diff --git a/drivers/pci/endpoint/pci-ep-msi.c b/drivers/pci/endpoint/pci-e= p-msi.c index 50badffa9d72..f287fbf684ca 100644 --- a/drivers/pci/endpoint/pci-ep-msi.c +++ b/drivers/pci/endpoint/pci-ep-msi.c @@ -6,6 +6,8 @@ * Author: Frank Li */ =20 +#include +#include #include #include #include @@ -36,6 +38,86 @@ static void pci_epf_write_msi_msg(struct msi_desc *desc,= struct msi_msg *msg) pci_epc_put(epc); } =20 +static int pci_epf_alloc_doorbell_embedded(struct pci_epf *epf, u16 num_db) +{ + const struct pci_epc_aux_resource *doorbell =3D NULL; + struct pci_epf_doorbell_msg *msg; + struct pci_epc *epc =3D epf->epc; + struct device *dev =3D &epf->dev; + int count, ret, i; + u64 addr; + + 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_DOORBELL_MMIO) { + if (doorbell) { + dev_warn(dev, + "Duplicate DOORBELL_MMIO resource found\n"); + continue; + } + doorbell =3D &res[i]; + } + } + if (!doorbell) + return -ENODEV; + + addr =3D doorbell->phys_addr; + if (!IS_ALIGNED(addr, sizeof(u32))) + return -EINVAL; + + msg =3D kcalloc(num_db, sizeof(*msg), GFP_KERNEL); + if (!msg) + return -ENOMEM; + + /* + * Embedded doorbell backends (e.g. DesignWare eDMA interrupt emulation) + * typically provide a single IRQ and do not offer per-doorbell + * distinguishable address/data pairs. The EPC aux resource therefore + * exposes one DOORBELL_MMIO entry (u.db_mmio.irq). + * + * Still, pci_epf_alloc_doorbell() allows requesting multiple doorbells. + * For such backends we replicate the same address/data for each entry + * and mark the IRQ as shared (IRQF_SHARED). Consumers must treat them + * as equivalent "kick" doorbells. + */ + for (i =3D 0; i < num_db; i++) + msg[i] =3D (struct pci_epf_doorbell_msg) { + .msg.address_lo =3D (u32)addr, + .msg.address_hi =3D (u32)(addr >> 32), + .msg.data =3D doorbell->u.db_mmio.data, + .virq =3D doorbell->u.db_mmio.irq, + .irq_flags =3D IRQF_SHARED, + .type =3D PCI_EPF_DOORBELL_EMBEDDED, + .bar =3D doorbell->bar, + .offset =3D (doorbell->bar =3D=3D NO_BAR) ? 0 : + doorbell->bar_offset, + }; + + 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; @@ -109,8 +191,21 @@ int pci_epf_alloc_doorbell(struct pci_epf *epf, u16 nu= m_db) if (!ret) return 0; =20 - dev_err(dev, "Failed to allocate doorbell: %d\n", ret); - return ret; + /* + * Fall back to embedded doorbell only when platform MSI is unavailable + * for this EPC. + */ + if (ret !=3D -ENODEV) + return ret; + + ret =3D pci_epf_alloc_doorbell_embedded(epf, num_db); + if (ret) { + dev_err(dev, "Failed to allocate doorbell: %d\n", ret); + return ret; + } + + dev_info(dev, "Using embedded (DMA) doorbell fallback\n"); + return 0; } EXPORT_SYMBOL_GPL(pci_epf_alloc_doorbell); =20 --=20 2.51.0