From nobody Tue Apr 7 04:41:54 2026 Received: from TY3P286CU002.outbound.protection.outlook.com (mail-japaneastazon11020111.outbound.protection.outlook.com [52.101.229.111]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 67DBC3321BF; Mon, 6 Apr 2026 15:57:26 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.229.111 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775491047; cv=fail; b=EJXQ/q0d1gkJlCj8Q6PufTAz+IWeqWF3VSZ50q4LAY7pjdROuNYtSJAefVXuJYB8/zD5PuXSPz408PWv95jj/3MdhZr30rBQ/aARlAbC9Kc2mXJ9PaxnVv/uxVhCQPotdnBY3ZSqD1P+OQJvssyQ8y9pXuXIMAV8KKc0PFSfVf8= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775491047; c=relaxed/simple; bh=O1j5LZpxq6I5aX91Kr7iT72vDZEKBNh3pQaIPouKx0k=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=Nm88VCkWddmqFcAqhEhtO6A0cAxbS6o+s0VapR941+YchQKqSGKU2NXsnv/m7twEqm8YRFMDi6yyOVNxLHGyH/tzOdy/4Q5o0kfUekiL76d3IYkFOZ49GUIqBKKiMPBd/qo6L4tUMBcSH/s0lXP40ML41NKyrGKLHEi7OIAjsIk= 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=KPerpfKS; arc=fail smtp.client-ip=52.101.229.111 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=valinux.co.jp Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=valinux.co.jp Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=valinux.co.jp header.i=@valinux.co.jp header.b="KPerpfKS" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=NtsJSVaOQyZfXZsW4wBBLzUW6sRL2sillhGOpsTav2TxGA4lmgTfd8IDux+4M8ih+Hq0EkgF7DJp9pB7nbVaHcTo/a0dPjREPqHOQQ0YZQ0u9otW/+RqVf44UBbrIhRy+Snx8IM38yuFkZUiPTFCHBCFD4v6RKfKvfqCci4bAmGKcgh5kO6+3i/xqWuUDgx3+zcnGZYwpdt7ZoFuUM2wsSTabi2ImL9jqdczaN4L1oLK5g4ZTkZUVgA6uvybIe9bbzjdn68/4POhFIudZmmDPhdNfGZEbJ6XKYy01yqwcIkeQMvo0YyKE20XkWl3jXI2yxwpxD0nDGI2M4Bv5xvgaA== 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=7T8Gyswva6DI2f39ry6vwmC9Cjo+B5DbSMcPG8o0hxM=; b=Gkh7DFrtOf/1t7IyXFHEeDhyk4T89Rrwh72t6vya5/Q+xMYK+3LMt8Ol6Djpq2rhR/RVwkOZuUh1POll/tWB5a2e/2MERD9cLjnm8XdZdr3xDF1Iq1nrANw07p7+lX3kyEy1RADvKH5npmQwR5SRzhWBiEfh1711+HaMJ2bT7ScvanMSxs0CMTjjxnVq5FwG8DjhpgvqN82Qc8MpdtV4f/Ypk7qi6k8My22ljyBOhZGqmezqxXxQMBv8JNnwu4r5VCT0wYu+I6igGkYgyti8toRfN+J1c75mxGnf3B9uWizTjGGlP6+jl/1CA7bEY+AZ3So7ZBzIFX3G4JeJFgLDOQ== 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=7T8Gyswva6DI2f39ry6vwmC9Cjo+B5DbSMcPG8o0hxM=; b=KPerpfKS7lvA7pKnwR7Ki4AMv0c8mR29G4Ym92TfLF/M80OgP5Y8BdA3Lri+tU5vjtJG8h4ScnfQBgshisfSQWToCeLXNpOusydbmz0IfWBhhqDrPtlkE5J6Mv1bt1kx2X7wlbcSfh3WuTISegqMeajcb8pTyNK557a8xy3oiSQ= 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 TYYP286MB4187.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:10b::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9769.17; Mon, 6 Apr 2026 15:57: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.9769.017; Mon, 6 Apr 2026 15:57:22 +0000 From: Koichiro Den To: Jingoo Han , Manivannan Sadhasivam , Lorenzo Pieralisi , =?UTF-8?q?Krzysztof=20Wilczy=C5=84ski?= , Rob Herring , Bjorn Helgaas , Kishon Vijay Abraham I , Jon Mason , Dave Jiang , Allen Hubbe , Niklas Cassel , Frank Li , Bhanu Seshu Kumar Valluri , Marco Crivellari , Shin'ichiro Kawasaki , Manikanta Maddireddy Cc: linux-pci@vger.kernel.org, linux-kernel@vger.kernel.org, ntb@lists.linux.dev Subject: [PATCH v13 1/7] PCI: endpoint: Add auxiliary resource query API Date: Tue, 7 Apr 2026 00:57:11 +0900 Message-ID: <20260406155717.880246-2-den@valinux.co.jp> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260406155717.880246-1-den@valinux.co.jp> References: <20260406155717.880246-1-den@valinux.co.jp> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: TY4P301CA0027.JPNP301.PROD.OUTLOOK.COM (2603:1096:405:2b1::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_|TYYP286MB4187:EE_ X-MS-Office365-Filtering-Correlation-Id: ef27b04f-524b-442d-41bd-08de93f53088 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|376014|10070799003|1800799024|7416014|56012099003|22082099003|18002099003|921020; X-Microsoft-Antispam-Message-Info: qTK7uqXXN6lGnzp8pJDApyyo10oJV9JMAmC/HN7yX4RXt4dTLMohseWVVJNecxsj2/RzRwz4tShOY1zdNhOvGKwDOJlqvjFmbz9ZKEleNCEOKS5P/RQwWchQMw8YHmxeLwKDnS7SLM0AcMsNVkmha6VejN8Di3AeboBO9zyN6YnCRagyIKoK9MtAQEy1NCqVCZozanLuYhuXTG7vMMx5LDbzmH8hm9zGKuo0q9oXEE6TxPLhiIDkFMxluExEQk7vsmmGWbL36ZQRskNdlUWcUYLEAFodnv9nCH0tkLk3oMDSoBtGPdyERzv/8mD+/bZYbC2xT+EyASM50sGCotIzeGENIbCqxw4ZiUsAy0leAz/5H3sKYB6lhnHvTwENkO3eNy6TdYWrg69n5Efult96/X7wEuWoA36s6DFkfea9H+Ze7SXSMUBoL3nECfJ+72X6xmPlfDjkX5dAqLLxkp2qWpAYjNJmeOsiKSHEnSesQP1lOwpz8B8XF9rB48o25t5Ub0KI7DPON8BSy++LJoo/nLzKo2zaVOgxu/evYhdwUieCSnuFEv74zr+05Idugqiry5jSF20Q1jLc03IxaMI5k2EroV5MvhVMS8Et2shZbusS96LVtQxkt1X6ChoW4pkavgDwZ097h2lU0v6+48MLfhZ58mN0DuRxw/ToyZMRRAKepMIEQqR0hDE2mFalSSacXJt3oQJIIpLs3NWq3pIL/YBbHW6493gV36ncpnAMNFkliwfRNZZuQhsLCL2Lu8V0d2A9Bey/JwMyR5Eu/18Y2g== 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)(366016)(376014)(10070799003)(1800799024)(7416014)(56012099003)(22082099003)(18002099003)(921020);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?arosqS8dlmRBwKiK6RzQAZOie4iZMxJiFEUzdW9koPomgXPynot1FTzcrDa0?= =?us-ascii?Q?dn67KJNymjLzPUnAE4Y+ppxPfF1R+g9I0lmx4ILZKyqZ5EJ9ONrZh1MznNxR?= =?us-ascii?Q?VQowjuwURKNBc/j36TdJGwg94aEIb+bujOTRMdv5m368cQLwZGaS65js/+LS?= =?us-ascii?Q?csBPJC+5WgptEix/duH4XYbqtG5hhCiHiH+ItmlvcBLZDTzs2B9AM6v9iCP8?= =?us-ascii?Q?OZrCLuZDmrw/M3XqlWBii9MwEfC0uj1V+lNugeiwd+hv2DrwrJ0rXhn64hYu?= =?us-ascii?Q?YP2HViaktA3S37oT1i+GBEvS7SesyFjzhcM25CM2aDRhQhTvgKBJh2UkFTng?= =?us-ascii?Q?DHBFAiT0shOe1HJD4MATsHW9e2o5MbLFcmfxa39d/0KkT84YQ9wKPeNFypHR?= =?us-ascii?Q?DRw7DDnm0zXcnhyX6uX4ItExkCsBHZWR9jcptraIaorc3Mtuuwzj2vuDS/jN?= =?us-ascii?Q?9wlfqOJ1Rk2q+f/DuH51b0S/aleLiTt/Xc17moT7dxy01h1KVg0lNmqIPQi4?= =?us-ascii?Q?gKH5dNtw0nkURAGUoyp9VOLR1GC30CXwmL7NiLlnPJhiMD9YIJqAB4Wkzn2t?= =?us-ascii?Q?FoEvEvZSJKvR/5cFvawtGxuN3640C8iVwKBl3YTvz4qbAcouluEdegowKEbk?= =?us-ascii?Q?5/LGQ5HASyLpj4osnFXGs3Hi2aHUqmH+m0zSbhcBli2Jul5qQCffCyht2Mt3?= =?us-ascii?Q?eFVGDt0yfP1YfEZX4XQnmeIIVlTpEUJKFRO7KoAvXrQb6uY/uz9hFaMhrXu9?= =?us-ascii?Q?qtQCVzsRgPgFp8OZwGH1YvuPfDnCgJ0X3syPV+YQxI+oJ1eSiVPhcDqWFTDW?= =?us-ascii?Q?3gvE9s5SfLqblZuAeunO9aW/BKdexokLXAWmS1aX66P4bDHXwlbLJdi8MZlq?= =?us-ascii?Q?zPHKWUKqkMXZ++i8NqLWDJfhCVlyt7iy9EhOPgEj07cmxvMpOaAMRsh7TdSs?= =?us-ascii?Q?U4Ns9Sl3B6PD9Rmw8JfG2frShEtgSr27u6eX+l+rAZPyJzC1+FQlcs7n+oza?= =?us-ascii?Q?HZ6D9fYjV72QUTsbw/63xNLWBvMxt3byIFAgOFCOJGdHy1EXmJgaz6uSKukK?= =?us-ascii?Q?EjBXFlXTPxjk8c/N8PVeuolVR+Hfvgo7q0Ridk1Rly6WLiaOSKjy8tVkuaXp?= =?us-ascii?Q?P4vo6vRl6XIl2rYT8+LklSeO+a5mQg7PL6dLghZE6Uc/73bP5TiaiPef3v0J?= =?us-ascii?Q?ZY2wox8KuSoGTYyz2z8NCemufRMKMOSqih+/MWw+FyXIN7VG6s5Ce8+GGdnF?= =?us-ascii?Q?qHxi+YjuGsAHqoWutAZsyqhfr5qdfl3NjYQBmp0pa56V9qDiIoNYTxvx/1Ys?= =?us-ascii?Q?Um9eZEVjxbgMbSJMXAJmlI7DCiRfOlVm7Lj5EBbhSAie1CHZ5Q8Q50a/i6r4?= =?us-ascii?Q?g4HwRrgitn3FKcokfKXBE7b/H0Rn5znCLEvQt7rh+AwtoSL+DHkUn+YXOyZ9?= =?us-ascii?Q?JTJK2/vCUH/Iycgv7B50uKaTTwA6/zvHYeKfW303EVxWxmPQlt2MFkIs5AmT?= =?us-ascii?Q?6kIKbCUILM6DnPKvC8SjoSb9hwulIB2e17RChSanE8xUxn6Ow/7/LVGI2wgF?= =?us-ascii?Q?IPny8vphc0TIu5+WPAFjGalyjsvdxsGXK+WZjcv0Q/erwH6ISsxDopmy3oNe?= =?us-ascii?Q?qWcRnKhThcmEdcRgK85OdgahduFIJmeqZyW1kjGC1hkWQF3UOoMzdCM81AYe?= =?us-ascii?Q?L6JnGc/LtlNGpXOCLD/ObDXO+pAzpbOu81s4N3VvJZCQzqfTUEIJZysmvpp0?= =?us-ascii?Q?1TWHmNzdvhcBAbWWoMshiCjJpqBUJuazTdPeuZt+Wbdb5wignqjg?= X-OriginatorOrg: valinux.co.jp X-MS-Exchange-CrossTenant-Network-Message-Id: ef27b04f-524b-442d-41bd-08de93f53088 X-MS-Exchange-CrossTenant-AuthSource: TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Apr 2026 15:57:22.4241 (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: c4yDGPwc4op7LoIo1/GKUjT6W19hElTDY0/rpTmrK9Env0Dn73dNXlImrzbQH8RFyxkudQ37XZjXohlxdLSAoA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: TYYP286MB4187 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_count() / pci_epc_get_aux_resources() and the corresponding pci_epc_ops callbacks. The count helper returns the number of available resources, while the get helper fills a caller-provided array of resources described by type, physical address and size, plus type-specific metadata. Suggested-by: Manivannan Sadhasivam Suggested-by: Frank Li Signed-off-by: Koichiro Den --- Changes in v13: - Renamed pci_epc_count_aux_resources() to pci_epc_get_aux_resources_count() and have it return the count directly. - Updated commit message accordingly. drivers/pci/endpoint/pci-epc-core.c | 80 +++++++++++++++++++++++++++++ include/linux/pci-epc.h | 54 +++++++++++++++++++ 2 files changed, 134 insertions(+) diff --git a/drivers/pci/endpoint/pci-epc-core.c b/drivers/pci/endpoint/pci= -epc-core.c index 6c3c58185fc5..efcd0f8b33bc 100644 --- a/drivers/pci/endpoint/pci-epc-core.c +++ b/drivers/pci/endpoint/pci-epc-core.c @@ -156,6 +156,86 @@ 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_count() - get the number of EPC-provided auxi= liary resources + * @epc: EPC device + * @func_no: function number + * @vfunc_no: virtual function number + * + * 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 how many such resources the ba= ckend + * provides. + * + * Return: the number of available resources on success, -EOPNOTSUPP if the + * backend does not support auxiliary resource queries, or another -errno = on + * failure. + */ +int pci_epc_get_aux_resources_count(struct pci_epc *epc, u8 func_no, + u8 vfunc_no) +{ + int count; + + if (!epc || !epc->ops) + return -EINVAL; + + if (!pci_epc_function_is_valid(epc, func_no, vfunc_no)) + return -EINVAL; + + if (!epc->ops->get_aux_resources_count) + return -EOPNOTSUPP; + + mutex_lock(&epc->lock); + count =3D epc->ops->get_aux_resources_count(epc, func_no, + vfunc_no); + mutex_unlock(&epc->lock); + + return count; +} +EXPORT_SYMBOL_GPL(pci_epc_get_aux_resources_count); + +/** + * 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 + * @num_resources: size of @resources array in entries + * + * 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: 0 on success, -EOPNOTSUPP if the backend does not support auxil= iary + * resource queries, or another -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 (!resources || num_resources <=3D 0) + return -EINVAL; + + if (!epc || !epc->ops) + return -EINVAL; + + if (!pci_epc_function_is_valid(epc, func_no, vfunc_no)) + 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 1eca1264815b..2f2848542726 100644 --- a/include/linux/pci-epc.h +++ b/include/linux/pci-epc.h @@ -61,6 +61,47 @@ struct pci_epc_map { void __iomem *virt_addr; }; =20 +/** + * enum pci_epc_aux_resource_type - auxiliary resource type identifiers + * @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_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 +125,9 @@ 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_count: ops to get the number of controller-owned + * auxiliary resources + * @get_aux_resources: ops to retrieve controller-owned auxiliary resources * @owner: the module owner containing the ops */ struct pci_epc_ops { @@ -115,6 +159,11 @@ 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_count)(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 @@ -343,6 +392,11 @@ 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_count(struct pci_epc *epc, u8 func_no, + u8 vfunc_no); +int pci_epc_get_aux_resources(struct pci_epc *epc, u8 func_no, u8 vfunc_no, + struct pci_epc_aux_resource *resources, + int num_resources); enum pci_barno pci_epc_get_first_free_bar(const struct pci_epc_features *epc_features); enum pci_barno pci_epc_get_next_free_bar(const struct pci_epc_features --=20 2.51.0 From nobody Tue Apr 7 04:41:54 2026 Received: from OS0P286CU011.outbound.protection.outlook.com (mail-japanwestazon11020114.outbound.protection.outlook.com [52.101.228.114]) (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 195C3337699; Mon, 6 Apr 2026 15:57:32 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.228.114 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775491058; cv=fail; b=gg7zD0+ZqMT6n3I3ZyqVrDLmHs26bHJTqoN/4Q9zuG1HChUcEigWa1UaOp7IxOQJAGDahZOLlnxRgFVgQhD3p2md3PwLJ5pEz+0HsVao2aPkbbUOoCXal5r6OfdPsUneYvIN7Tv8QU/pzd65G6sJxga7L5OorXSD6BJ+8qrE5zs= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775491058; c=relaxed/simple; bh=7W7EAIrRY8jLga8ADH/lj9w0euD505H+9+XgdpG2QbQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=h/XQlTuu2FIUtVYkhq3kEAJOqq0euN4UL2eYDBu2tP/Uev1us2H8fpEr4fStV44Ecy7RM3tgPCpGgBFJtzyxF6FKtWzU0mFBjkOivZHcT0aN0UJpt/k9z7sDoEaLdS0utYMsynK77vaEVMU6hPM4O3NKqH3asg/9JKY/4zH9Bhs= 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=oOksn9fb; arc=fail smtp.client-ip=52.101.228.114 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="oOksn9fb" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=oTyLPk5zxEuOirvGNAGk+gjSuY3DUgQOpLU6qdOUqEArK/JDrKF7Nzbq5V5tfJpo6UlYWcfc1GN/bZbmQtWBAwfXbsAlnYQmkedGvzSyXFYOW0Kn78PA2y/VUMQjn2xZOb07CbX6+EfueiGQunic459zht5D/u5ogz24G/nqnYg1AdmOEfz1eMzP/p66Ojxb+s3W34tGKXTLuc59XW1flvg/Ip0YWXXeTAjJZqnn4s2/nIR4ieCr8xnNdwk0HA8LLc4gXyjGERfm72bJEJtmmp7k9mLvMamHcK56FZoWWeTgZlGOlLnRl6NcXoMjufeIqoCHYuuJyZcwfa6pE86WZw== 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=EfCIC7CzZdwcLUlJhEa1n8/0yHBVwev+g2VgjAz+QQ8=; b=viIQiJEwLMvifnylOUdeGRZz+abWdsLYVEzx2X78NBhHpXuTxoye4FFlAb6VuIA6QOUiatRlchzDI8zSebgUeb8nBRbmbMUX2JPtNeuUI1pjYu31eKdAifORSxzjocOiIw5t7Vik2gxvQJDCHIj/cmE2OMf3o9ZsCMA0XeRy8DrlCLq5BnirMqi9eUaZLLTOMiNqOhga10rVNfWr4a9cX93GE1X1w21tEkLhd+qFpbJlSUHt+SsW6NkKLTybETXzP87X2Kf6Gc/OlSyHSXqjkUiMfeBxsMjE0IUqQvB0SjLBzmnmq1rMJSprtOTaEWoZq13SurqIdS+fVnlPY2BH1A== 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=EfCIC7CzZdwcLUlJhEa1n8/0yHBVwev+g2VgjAz+QQ8=; b=oOksn9fbkyNAT1E4NfkG77kV3pefHf3JaMTfcA+nov5RzTPiHQKZqkhHaGe+wNuRag33/rw0RedsPRTjgm5NOBQAdlhQrOw4hPCC1lYea2o3jmrYgOWvwCR1wGYNNYt0M4XdvNYwr6TRkO49KALva2YpP0f11dMqRqYSzd/CuNM= 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 TYYP286MB4187.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:10b::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9769.17; Mon, 6 Apr 2026 15:57: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.9769.017; Mon, 6 Apr 2026 15:57:23 +0000 From: Koichiro Den To: Jingoo Han , Manivannan Sadhasivam , Lorenzo Pieralisi , =?UTF-8?q?Krzysztof=20Wilczy=C5=84ski?= , Rob Herring , Bjorn Helgaas , Kishon Vijay Abraham I , Jon Mason , Dave Jiang , Allen Hubbe , Niklas Cassel , Frank Li , Bhanu Seshu Kumar Valluri , Marco Crivellari , Shin'ichiro Kawasaki , Manikanta Maddireddy Cc: linux-pci@vger.kernel.org, linux-kernel@vger.kernel.org, ntb@lists.linux.dev Subject: [PATCH v13 2/7] PCI: dwc: Record integrated eDMA register window Date: Tue, 7 Apr 2026 00:57:12 +0900 Message-ID: <20260406155717.880246-3-den@valinux.co.jp> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260406155717.880246-1-den@valinux.co.jp> References: <20260406155717.880246-1-den@valinux.co.jp> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: TY4PR01CA0066.jpnprd01.prod.outlook.com (2603:1096:405:370::7) To TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:38f::10) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: TY7P286MB7722:EE_|TYYP286MB4187:EE_ X-MS-Office365-Filtering-Correlation-Id: e79747f6-7ea8-48de-aa12-08de93f530fd X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|376014|10070799003|1800799024|7416014|56012099003|22082099003|18002099003|921020; X-Microsoft-Antispam-Message-Info: rSuFpR5WIGE4IGQeUC+pdtKRoyXNxZNFNPfLpZnB2PxhaKjVGO1n6j2klnkmY3Ng8ErbznhdL0gB9BlYbZN6UtO2OtKM7+QhHqPC0NMioJ5MX4FLr17Zx+4XDtUn2uclBU6t/L/4Bf0EBu7H/yJ2Xq+aDb/TmgBgiAEzjHxzvziPn3EaUCH1nHpL/ThxsPHauf/1gp8R6oKjN62YYB/yZsS7mIsp5cG5vOfRjxdoBtohdUv3xSXAZGWeC8c3r1zKyDBfhVesegD+oqlueOo9brcsZbxQjBdTFpDYWkU9r16g954rJOdu7PP11hHR9oG6KJ6+i7CTxYPPb2CeHNYioGVJoFXNWhRIUcNtNIQ31FDdkFhoUswg9iW+Je9kNSaOJMBuVYSJ0zrOZvYiVmS3b6iqN1rfHWnpJpDyfmAJxTKwc/lNZaxG85RMzdqpd82a8Y5k9TnfYXJvJU/an7s9oqlC/y4c09uyxPbZs6g+y6ef5iRlQeA8qKQHo4CR1uGDsUY9z37LHFId8tz6/9xNR/2Ioie/FUnBK9izNEGkdbY9EojqSQiUhm6Ss7hS91aMA9AruPaqoEeb2fG9rZwauJ3sDdQmR9iLy50nM0f2EzrBinnmXtfskvYooCHRRp/gyTrKHxF7FgBLigyId3wYETH7SbngARZcvRfYSA13YFG/AUp2fO6HGLIngEz5DmX5CLJ8bpMmG1HcG1/1UD7GzDmPIwsrRE+MzHSt0lQfQZvFUd1bT6xIiXbcOsbLOJdSIKbbPvWQsXa4Z6nDO8kVFA== 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)(366016)(376014)(10070799003)(1800799024)(7416014)(56012099003)(22082099003)(18002099003)(921020);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?UtbSxTT+3wGc1xjE6q9IiRO4JHf864E4yEDwaSltAypmqceRXpgbdIoW5ete?= =?us-ascii?Q?45JNdTUS8vDsHZw7SEIpsZ+kwdPaS4L9CDZv7dfL4Xa6A50Njv3Ej7+M+Pnt?= =?us-ascii?Q?+9ht/zbzO5zYpZV3D9qiJhrNtTaD6/u5L4qgOCSep5UvwkCDNnYUafquBQ7C?= =?us-ascii?Q?5tXSYauwivBVbQ63NuYL8fABA+LnniXF3qSDUMKrzSIxBfWgth5NNAr9ru8h?= =?us-ascii?Q?MiPOa+K0nOiZBgoqqdm8YCAFkFKKWsq+OcNUjgu09skixYYqhlPk6D0n+oRm?= =?us-ascii?Q?knDCTo9k4gUMgKbn0XloL9sRTtDSx/uRE4ja8Un/TcdaWvFMbdShuIvX5O6p?= =?us-ascii?Q?9GicjHpAH2U7F/4IvfYaTTXYsDWoXipmC17u342Svq52hg5kyMC8hoxkG0X7?= =?us-ascii?Q?WlzEYNscO74cgS7JaGw0pvuz/ibJP4mxq5ixscZJfASpYXBEepmYNILSEu9Q?= =?us-ascii?Q?c1eITodSFzC24E14JbZkRhdJn2rRP4ObAlMAMEqsuccq7stC7DPq095zEoKn?= =?us-ascii?Q?Iqel/Nk6PuPpLZPR9UloI81UgonwZQoUnrM5h7eJcV7ut4lYpfbCjIKGU/vH?= =?us-ascii?Q?Yfl4p5kCmiZfqcJZAucp19LRWjnrQMx3ncb1LFFhy99XkOXXAUBqPvWZsclO?= =?us-ascii?Q?NyAj0t5ffnWJ3hjGPIMCgRIOhdpFOQqj+RzagzVa9n4VGAFoIabC33T191qs?= =?us-ascii?Q?m30Sc4Ec1PSrjD6TyDDjQqP7cZOG3N56+qB+q1khIX7pfqXiIBo+FJHvvP65?= =?us-ascii?Q?H2S0EKeLaHE9gSiSS5ZXQPFCNAuBuAAK015dcCPd5n0jlFbo54jxlI74yJJD?= =?us-ascii?Q?V88MwrX5GsXuHXH47UHQ3JuzEhzweG94dkjXmqn0zH+eHsJqLiGpW+t0eN1y?= =?us-ascii?Q?hWvaMpf6ktIc9DUhEjBsrTZPmXxamW4RcLftIly2dO5evPrIMH7+8vwbT1Mi?= =?us-ascii?Q?7kjpjXD58DV5ClxsuQlNps177zg0MIkHT8ZJQBU0SG/cyYMWzfZHBpGXNp/T?= =?us-ascii?Q?dBXiXAovqekVmTatPDwRsDmbmPoPwib5ef0qfxtQ+SjNi5WHiymzLmWs+JY1?= =?us-ascii?Q?hoGsouf7iF6iyBHctNsYairnHxvzgJsEkJClRtNilcgVnur2b737qs4Er8Lz?= =?us-ascii?Q?Y9FW2NmViUBeE9WKEHipKuSbiWgFRKzkkvc9ITPeL1MgUMA7HBLQqKSqUXul?= =?us-ascii?Q?k3UpU/a3iF0RRZchplOt69MZerpffZEmbI5ase7unrb+Os4LdvX2wtUFWHDg?= =?us-ascii?Q?Ej2TuanujC0XBsYJbc1ZfIYB4UfWh3DGUUDB7HpIkTeawyQX75Gc2x0ethXo?= =?us-ascii?Q?oqTe24RrozrrjsKUpUbOm8hWpdAIgiGbN3EYtUacE0uo9+fJe75vcMPxgOzF?= =?us-ascii?Q?C+bFVoiAoVw9wJuoEMVzguW08B/pie1bJ7rgMMt68Rlay+RKubxsNyhsq8zn?= =?us-ascii?Q?kOC8F/BdoiMzqiM+WGsdEeBAtXPfu9Rr/wrkOlPJ6zCr5lM1C9Rx846lKKN4?= =?us-ascii?Q?8nkvHFUGANn1RegwbKFCPOILJc/KUpb22o2dNOOF1ihV/6SNYUHFDwPienal?= =?us-ascii?Q?HveYnwrTrbfRBLWxLHaajRjWQb5qzpqS9om46xRaMARtBtNuAUbt/3Xai6dt?= =?us-ascii?Q?bBaYax5R1k5dBylmkPF0br8yAJF5ZcdGj92Wwg7Yin2IW3FKaObPVxT39hQa?= =?us-ascii?Q?RAAhfRSOc5EtMQXaHXay0PWG/ZZjC/dcyn9od3dc8triLCEy6hTtbSWd/aJC?= =?us-ascii?Q?y0y+QFWcfXkDbpoSeNqpPE0oEQud5RCxyf6h3n+UvIyP5eS8Yhun?= X-OriginatorOrg: valinux.co.jp X-MS-Exchange-CrossTenant-Network-Message-Id: e79747f6-7ea8-48de-aa12-08de93f530fd X-MS-Exchange-CrossTenant-AuthSource: TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Apr 2026 15:57:23.1903 (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: w3MMNO62itxNgpoWeLJXLQ4xzlbHzTM6Bv7X77XxxLp87LvZ5iEpmcHAN1hof/N0O0A71fqyahEPa3t0q7l6QQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: TYYP286MB4187 Content-Type: text/plain; charset="utf-8" Some DesignWare PCIe controllers integrate an eDMA block whose registers are located in a dedicated register window. The EP-side aux-resource code exposes an interrupt-emulation doorbell register (DOORBELL_MMIO) from that window. Its location is derived from the start of the eDMA register window plus the doorbell offset already provided by dw-edma, and the window size is used to validate the computed register location. Record the physical base and size of the integrated eDMA register window in struct dw_pcie so the EP-side DesignWare aux-resource provider can construct that doorbell resource. Reviewed-by: Frank Li Tested-by: Niklas Cassel Signed-off-by: Koichiro Den --- drivers/pci/controller/dwc/pcie-designware.c | 4 ++++ drivers/pci/controller/dwc/pcie-designware.h | 2 ++ 2 files changed, 6 insertions(+) diff --git a/drivers/pci/controller/dwc/pcie-designware.c b/drivers/pci/con= troller/dwc/pcie-designware.c index 5741c09dde7f..f82ed189f6ae 100644 --- a/drivers/pci/controller/dwc/pcie-designware.c +++ b/drivers/pci/controller/dwc/pcie-designware.c @@ -162,8 +162,12 @@ int dw_pcie_get_resources(struct dw_pcie *pci) pci->edma.reg_base =3D devm_ioremap_resource(pci->dev, res); if (IS_ERR(pci->edma.reg_base)) return PTR_ERR(pci->edma.reg_base); + pci->edma_reg_phys =3D res->start; + pci->edma_reg_size =3D resource_size(res); } else if (pci->atu_size >=3D 2 * DEFAULT_DBI_DMA_OFFSET) { pci->edma.reg_base =3D pci->atu_base + DEFAULT_DBI_DMA_OFFSET; + pci->edma_reg_phys =3D pci->atu_phys_addr + DEFAULT_DBI_DMA_OFFSET; + pci->edma_reg_size =3D pci->atu_size - DEFAULT_DBI_DMA_OFFSET; } } =20 diff --git a/drivers/pci/controller/dwc/pcie-designware.h b/drivers/pci/con= troller/dwc/pcie-designware.h index 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 Tue Apr 7 04:41:54 2026 Received: from TY3P286CU002.outbound.protection.outlook.com (mail-japaneastazon11020111.outbound.protection.outlook.com [52.101.229.111]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 26E9B33688E; Mon, 6 Apr 2026 15:57:28 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.229.111 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775491050; cv=fail; b=USbNS33/EZzqbETblaEOxljmW/CCoxsH3MrD3onVT9nFB4670r3esiug248evzrXrljxXRrwHDBOdxwHTYPBNQXz9hmXvFB20zITj2jMWSv2wx8EPtzZRq6PHhzGACfFJqGGnkOYSoG2C2kUE/mPzw0qZwqzr/TGx035PVkqvCM= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775491050; c=relaxed/simple; bh=ZHfSoTilucSBMKXbC+oDyKYA+h0/PEx9E/CmbMydi6c=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=EmEcaRfrpBHEITdlB57+j9DbUvzZE3LFOMAohkvt79S2ONg4cNPo8O6mnQ+zU3RoTApGdwiQHMWsMsMeJtTxvORFE+dE/Tz8nVcBb2WFpLctqm92uvVuvNkVcGDIjDtpMP8004w9C84owxJ17J708RZYlROINkrkrz8qv9EF1to= 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=MIBRLvia; arc=fail smtp.client-ip=52.101.229.111 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=valinux.co.jp Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=valinux.co.jp Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=valinux.co.jp header.i=@valinux.co.jp header.b="MIBRLvia" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=cfs9SM+HVDxaO6OtJmKbGD0uNa5Byv1HnR3P9aq2k9FIFxOCPVSRc6Q5OchMo1ckNr8DKf/DNNGkRTedlDfR0fVQSdgGOhgIs5lsEWkq+V0G3sVRvca24Xrv+AWWWGZ5C/Wl05+er0OybKvkWUj0Y/F/tcMHKP1Rxw/MuR6zxZkYdcVlNbbRKKRT0bj5LC+PlrjHoAjlI9F9HX1Mu4vOpwhwTh7zKt+JYOAGn1ziCwFud25lgeN1/hUU7Tv/DOR287A2nEhu5+LmJwj9iKfPxvzyictQ902nQR9Jjdb89mX5QbWXHu4xps0ioz486neWsW3yobpzVluojwmecpYoyA== 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=m+YcyJrVo9PcebSFe1ize+OnskN6MubzU5t/jCWFzdE=; b=uff4wxGY9w0lTiekRGDPhKecKu3s3BFdqX11pxEe+MOk3sApA8+HzjIMM44r+0VXQLkrIF7X5dc3gAwyWNbm0kI/y+xSQQ8WysHdS+M71fnQ8kn3JK4uxLs3c8VYu5inH15Lvk90a4DmKaKF0cdlvvvRB6V9AOUX1XyBzo0sD+vX/MuoV9plvged87MMccQ7Q2al6PaY1Wu6KO/PGt+sJ7oGmz1JnTrxDCeHGrKN/TUuiQyMoXTQ9WXLkUvKFzflVoY/gadWRpriVvzIRUsbYmq8JOCH/G/LVPOX91XQYTUU+nRR4aD4jVJHRINsAhMm7vujFxXNTNoq8qxJBhPprQ== 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=m+YcyJrVo9PcebSFe1ize+OnskN6MubzU5t/jCWFzdE=; b=MIBRLviaCd0lSnxkc+aRBsPH/i2WfVN4435m54CQkgl9VlCyktAshl5Cv7OTAOgswnEMmGvhYa/Zeem5RZ6pxScP8fLYrdozyJO1ZRQcNkuxzw/2UfBE/fIj+fd/ulnNKMYNrJffee6rVEhVdL5osh3IyfhgzXI/MLQy7i1TYEA= 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 TYYP286MB4187.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:10b::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9769.17; Mon, 6 Apr 2026 15:57:24 +0000 Received: from TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM ([fe80::2305:327c:28ec:9b32]) by TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM ([fe80::2305:327c:28ec:9b32%5]) with mapi id 15.20.9769.017; Mon, 6 Apr 2026 15:57:24 +0000 From: Koichiro Den To: Jingoo Han , Manivannan Sadhasivam , Lorenzo Pieralisi , =?UTF-8?q?Krzysztof=20Wilczy=C5=84ski?= , Rob Herring , Bjorn Helgaas , Kishon Vijay Abraham I , Jon Mason , Dave Jiang , Allen Hubbe , Niklas Cassel , Frank Li , Bhanu Seshu Kumar Valluri , Marco Crivellari , Shin'ichiro Kawasaki , Manikanta Maddireddy Cc: linux-pci@vger.kernel.org, linux-kernel@vger.kernel.org, ntb@lists.linux.dev Subject: [PATCH v13 3/7] PCI: dwc: ep: Expose integrated eDMA resources via EPC aux-resource API Date: Tue, 7 Apr 2026 00:57:13 +0900 Message-ID: <20260406155717.880246-4-den@valinux.co.jp> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260406155717.880246-1-den@valinux.co.jp> References: <20260406155717.880246-1-den@valinux.co.jp> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: TYCP286CA0043.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:29d::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_|TYYP286MB4187:EE_ X-MS-Office365-Filtering-Correlation-Id: 42edc950-ab05-4642-532d-08de93f53191 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|376014|10070799003|1800799024|7416014|56012099003|22082099003|18002099003|921020; X-Microsoft-Antispam-Message-Info: WFvNKLjNWKn3O1Y3JW5lr+5XK0E+5zMpdISBEL4OmlMfe0oyEK3PmJtYEQcJkpvPjcCtceQrJauZDTRtzWLQm7D69alxDgbTUPS03N4vPEnkbQ3SY5EYEP5SeBaKjWIQQ43BFDJSqgX+RChb9MysZVTlS3FQ9aLIexRgMrmuDkMpMteLfPUh4lj31vPvzQxB4j+ltluBnIgn+U3V5Dam+cCfLI8qbrNEigr20zXf4ZaKXa8shJFT/obM121hH5c4RgHSjB8ETLHwY0pn7QzGjHGVXp2dGqUGoh7YCrYZoON6mRfMh8780zGa1e5GO4AnC0lhpkCYbhUU0Oog2U/Nij7M3AwCVjyZe3l5ESYTF0Yi8+uZtzDvFIsuvexvoLZ6FJiGcQ1ofTzWoDHUhDKTKvAsVYxhJXppNY1kDkRaftXu6cVkVYWycpZgXxKa/7jWraZLEtCt5xrLyF+wJFcOzaQMUOzCD4rgA4avoXbjUHD79mwhtOzI5vDzL9uzhzzc28KadabVP6t57YuQL7BcJ8es62VA1mUQkCxHc/VfQzu9JY/1zr6y34e7W2H4cZtR9eRwyZSeiAfPTiAZFqFwxcGfEZt1sz3pDyQpY6CGsr+sv8oZuCco7es1svBIOPx0Y0wPti+y/Kn/Zv3EB2I8armLIiINZZzNWDh3TkMgAodqbSVznvI1NMrG7U5fB5JrBsWzSwiNZd4udIhPyX4lSE1w2rKXg3KM4B0JMFYIQESzcWhQWzBSrjC7Kue7dNc14d/FrTusm5DkZIgfDplyJg== 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)(366016)(376014)(10070799003)(1800799024)(7416014)(56012099003)(22082099003)(18002099003)(921020);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?YRlOqULppJUCvw3UdaLqqdDmlBmpivrJ5Y42T8N6ibGK4etxgMbp9SoCgP2m?= =?us-ascii?Q?jIPa05URO/LxzbEJZB9UTsB0UusUHh8kcqEznnwG4Olur9tzInmWWvl5Tcqs?= =?us-ascii?Q?Z+vR/C0oD8CjfK59vD+xOdIBCf0esFUe4ttKLi7DOnF+c6g71je1LpLawCvh?= =?us-ascii?Q?c3edeFto2WNWVPlDZcuk3pM36pwXnIDfWWwPMa/zKCi9gk5hTKiD6mC5N3WP?= =?us-ascii?Q?wvib7qUbGcA+JcERkGLHyWpKH2URr8cnIAmNc83WYND8cqBO3BiEBQXzcI0j?= =?us-ascii?Q?FqFtuKMKfqYoreGnSYoqxABhsJQ+0VhkIki38A9R6SnKF2UNWjm17LU8NHkx?= =?us-ascii?Q?rVRuzg1CCBGCcLy/cJnXG8GHsazUeLquafQuP4sMLqvX0I9+GuVnzJFKDIaU?= =?us-ascii?Q?GV+0w91VoeRfqaxvBSfKyNzAdNPaBcp9lq5Jy1NuKM8egz36pF+aM26QyNAF?= =?us-ascii?Q?PNnaTeO84zIvtNwDAOwQhuMvNKQ2beuKM20YYMSzuLH2idOyKzwFCfwg8s/L?= =?us-ascii?Q?C1WnARurDtOdl/SerGw4zreFSDr2XdTBRZpSMVCMNoJeSA+J6e7u62FCAz9y?= =?us-ascii?Q?eVQVta5LL5qGENYQFcJ6r/yFhB3vplEN8LbAlveKw36kcB41UCzCPLTo8zS3?= =?us-ascii?Q?lshEJIkaNRc3RwFyl0Vet+r7bJIZiSecPSncfKPA0KBBZP2yBogX8cidyFBJ?= =?us-ascii?Q?ipyrWh6lOo7FL0maZu0CAZxz1Md4QOKxFEQ+rRBq0rUbC0mGXikfXNvG/azR?= =?us-ascii?Q?j+6Ca43Tybj+jiG16BNAmt89cFU2O+YKV4CndOgVeFik0i6iC+TyQoKWh5JO?= =?us-ascii?Q?HbPzHgsYhYRKrNoE1LFlWTjR8C9cH3LCiy4gYTxgdQgJZPVFXJw+qlqAJPXT?= =?us-ascii?Q?RPp/PbfeXM26n1V92s9dvhc8FvdiTHYRI+3YGsr+PPAk14OVoqzKzEWptPDV?= =?us-ascii?Q?iGR+kF6OAgu3+W6Z3CH38azNr54Y9DboTduFVqpSTG5MgCUDNIysRgXx4VQ/?= =?us-ascii?Q?VWnIWhYE3K9FQO4Qz0haqj/3Geo4S5WJjEjjFkppLV1Qb5GZ2Yu/uCED5E83?= =?us-ascii?Q?2rFX2J+QMYOdnj1zXJVEC7/6BgWAK61kk3cc9uwOYWSCgtTgEAXOtbbRWxaR?= =?us-ascii?Q?0PEsQCnh7/GLxQWJosaTpKX02FiqLbMZOYvhjFdZeZhCv+NyR/ksOPJRrrnz?= =?us-ascii?Q?gQOw3yamerZSil0ubHFJotoj71X1VRp2vGxjkAZbHSK+x9igPQw875ydXFa5?= =?us-ascii?Q?YFiajIw89yHDBQzyAgXyOVgNOJGMQlsYe2HtgaK0LxErz51vv1ZJkBgd+sAL?= =?us-ascii?Q?+STf06tjIj2cekVKCmfvDd9FL2zxre1/HSVXKjr6Nbdh4bVGlH9RurVzLqGG?= =?us-ascii?Q?HRndG3RV9UXxm1yLqSO24DH2xOJ0pYdgx5zLb47S//6QlN3v72BFAbY172Ql?= =?us-ascii?Q?OcQnARiv7wC41Q1ZDHXfCfYWytg11H1gnM8SHrxfb1h1JB5wJhh6RHOflWmG?= =?us-ascii?Q?GTpywQIgsTZujtZ9lLYLnqVCMdFLIBE/p6wOHS3mK5f1z3D9kpurqWsaRyce?= =?us-ascii?Q?IIYZHVpqqswGlZABKjDA0d2FWYzAyYvyqlaWMFVIzNPKcIVyElsIJAA+tjp/?= =?us-ascii?Q?/1JMhJsr5qLEpQ6MLXaopW57sqnBRTG9hfpHtdOLhqk4RrSGr2pWPndG62b3?= =?us-ascii?Q?3YRH+U2yF+ObhoJQBrXrUPudt2imikYc20rmclBVG+NYygOFu12SCuCwEkJd?= =?us-ascii?Q?96dI+gs7YivZdJzyEvoXmStS+GOzOJo7NMKV2R0Hp7quaUCpR1cc?= X-OriginatorOrg: valinux.co.jp X-MS-Exchange-CrossTenant-Network-Message-Id: 42edc950-ab05-4642-532d-08de93f53191 X-MS-Exchange-CrossTenant-AuthSource: TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Apr 2026 15:57:24.1578 (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: kZZiVPYjWWWyQDgxk/JJrqcUorIKp38TkevwgZ1eas6gzLtpOfe46cR/4hHJQUe3NjXH5Qqm0UiOpbYo8XaHXQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: TYYP286MB4187 Content-Type: text/plain; charset="utf-8" Implement the EPC aux-resource API for DesignWare endpoint controllers with integrated eDMA. Currently, only report an interrupt-emulation doorbell register (PCI_EPC_AUX_DOORBELL_MMIO), including its Linux IRQ and the write data needed to trigger the interrupt. 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 --- Changes in v13: - Updated to use the revised direct-count aux-resource API. .../pci/controller/dwc/pcie-designware-ep.c | 119 ++++++++++++++++++ 1 file changed, 119 insertions(+) diff --git a/drivers/pci/controller/dwc/pcie-designware-ep.c b/drivers/pci/= controller/dwc/pcie-designware-ep.c index 386bfb7b2bf6..c3c354265307 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" @@ -817,6 +818,122 @@ 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_count(struct pci_epc *epc, u8 func_no, + u8 vfunc_no) +{ + struct dw_pcie_ep *ep =3D epc_get_drvdata(epc); + struct dw_pcie *pci =3D to_dw_pcie_from_ep(ep); + struct dw_edma_chip *edma =3D &pci->edma; + + if (!pci->edma_reg_size) + return 0; + + if (edma->db_offset =3D=3D ~0) + return 0; + + return 1; +} + +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; + resource_size_t db_offset =3D edma->db_offset; + resource_size_t dma_ctrl_bar_offset =3D 0; + resource_size_t dma_reg_size; + int count; + + count =3D dw_pcie_ep_get_aux_resources_count(epc, func_no, vfunc_no); + if (count < 0) + return count; + + if (num_resources < count) + return -ENOSPC; + + if (!count) + return 0; + + dma_reg_size =3D pci->edma_reg_size; + + 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; + + /* + * For interrupt-emulation doorbells, report a standalone resource + * instead of bundling it into the DMA controller MMIO resource. + */ + if (range_end_overflows_t(resource_size_t, db_offset, + sizeof(u32), dma_reg_size)) + return -EINVAL; + + resources[0] =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 */ + }, + }; + + return 0; +} + 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, @@ -832,6 +949,8 @@ 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_count =3D dw_pcie_ep_get_aux_resources_count, + .get_aux_resources =3D dw_pcie_ep_get_aux_resources, }; =20 /** --=20 2.51.0 From nobody Tue Apr 7 04:41:54 2026 Received: from OS0P286CU011.outbound.protection.outlook.com (mail-japanwestazon11020114.outbound.protection.outlook.com [52.101.228.114]) (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 9C454325701; Mon, 6 Apr 2026 15:57:29 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.228.114 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775491051; cv=fail; b=U+cbkxlSMOogIe/pdmxYed61redk879Y529TRhfcMEPtg5XiYca/rSzMpdj60xZVr3Z6MflJpaoaC2CHqof/3vT8NUyT+LB3sqgR0mObisSuy+AkahNEpXuGpI0sKK04gOlu1VxDK43DccMGKbfedFDOak0Da27HDiLK5W9S36U= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775491051; c=relaxed/simple; bh=24CtTktMCrTYnhJKM0CPxo89ofgYKr4aiWJjFoL6RkY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=qBZbtB71+3zu6lfasIRa4GCqes4rCeV22psMkHCdAsKEpq6Z4/uB4tbv448PAlPY7Wg/fPrRASScYVFTfxHyWq6wbhGmENlSVXDCilZDdp/5Qp4KxDW2K9/KrNZ4osEjoudcmEG18gYrDdp7t3dyQHni7dxWWWu2GEsVgFmqQgQ= 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=uFCCTb9G; arc=fail smtp.client-ip=52.101.228.114 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="uFCCTb9G" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=JLQaHMU7tnLFYX0fzkiREpL8c0ULnvJJphGti1yZaG143kXfBB3vRIfCck2kTjPNvcnLRFK2up3xtfulECG6u041VCKgb01Htmz+z9l+gE7qwUjZyh5fYltHWlJHKZ9MQEVyth/YdFK3M+UeFFwzSM7bQ7OPL2zP0Vhew/Oq+yOADtoTZAZSF/RS+yycJ0lo39Jf4H5fFiKnRofx3rQatrzshDF3+Pp/Wt4OCWUYxFjgy+VLUQyJgPUcXTid+DWPX0U8OU7xDbjTKq/XC78+wi2oSjRvqd4loy+DhipD/CH0pA67kfCMQ8hDt3bhFSMh0ip7Rb1N8OT69LdhB3cp1A== 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=r7RiGuw4rdIqME4X0uRgpKq66eSKksk/+mPslKC5zL4=; b=RjDPUTw3bz11IbpcDZApJrgA4oES+wZe5+lDnwrR6uu89Eefumz+bvNY7KSGD8usEnR1WKpwsbEH2ypCMzThi0JsKzl0jIiryLRwjd5zKLiyxJsNItLTY0MWrs4sivyA4aU5ZwB696owTehiBjZVU9jGWUMdlc7MKNycTTD+9zpVxQBxTZ2/tniiu4hJcclYNmd+6MojWDr3GpM2KK6O75qZzRhMmpHfD+PAx+M4dO2S26DEbrAx2HM96a5D4Cnq7kZHTagpVnbdH+R67NIW+wzdHAjCruj5U93L3ixV5A3uHfZsD9FOf73YyEtfGaGBA9HIAb29cOp+Q7LsZgYnTQ== 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=r7RiGuw4rdIqME4X0uRgpKq66eSKksk/+mPslKC5zL4=; b=uFCCTb9GauZrdoAq+dabFwkBSGF2Tl5x7tRIdxDJO97gOSS0GO1lT/3q3h40YQWZght9Sg8ZWaOAK1LKzpdgeUTJNgIY4IDTICpt7B7nzYqT6oWGl46f+HYJnRim/LC14ABVs4CWG+MqGqKvSEhYEDzjNgYQsNFSG1IqAAnuK48= 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 TYYP286MB4187.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:10b::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9769.17; Mon, 6 Apr 2026 15:57: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.9769.017; Mon, 6 Apr 2026 15:57:24 +0000 From: Koichiro Den To: Jingoo Han , Manivannan Sadhasivam , Lorenzo Pieralisi , =?UTF-8?q?Krzysztof=20Wilczy=C5=84ski?= , Rob Herring , Bjorn Helgaas , Kishon Vijay Abraham I , Jon Mason , Dave Jiang , Allen Hubbe , Niklas Cassel , Frank Li , Bhanu Seshu Kumar Valluri , Marco Crivellari , Shin'ichiro Kawasaki , Manikanta Maddireddy Cc: linux-pci@vger.kernel.org, linux-kernel@vger.kernel.org, ntb@lists.linux.dev Subject: [PATCH v13 4/7] PCI: endpoint: pci-ep-msi: Refactor doorbell allocation for new backends Date: Tue, 7 Apr 2026 00:57:14 +0900 Message-ID: <20260406155717.880246-5-den@valinux.co.jp> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260406155717.880246-1-den@valinux.co.jp> References: <20260406155717.880246-1-den@valinux.co.jp> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: TYCP286CA0043.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:29d::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_|TYYP286MB4187:EE_ X-MS-Office365-Filtering-Correlation-Id: e4d2aa31-0dae-4c22-bfa1-08de93f53203 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|376014|10070799003|1800799024|7416014|56012099003|22082099003|18002099003|921020; X-Microsoft-Antispam-Message-Info: 0VWuc4K868ZEIfrLzRs8hDSwlJH296OZdSFyMwU3wX73jxmKdPWLVEN3SVY2HmnOVnQ5YL/QlV+yI1jHTiDhv4hVvbs0EibxT8WnJZe66VeLszg1XzBcNb5HgtvzGKBmnONclYTvGQzWyQaOZ+LOJhmblgGUbtgFb6uE7SUP7lTyqy2T8p4NNRxlNdgb3SxqNG9TJaB13NhzekALwV0qxGoOwd/XI47VWqylAJFHOT44ac9J++P+ycd21v1iC8cCSvbn3TCkS5PL3du74JC2Dc2L9WYnoOtE6k1yxaVpCGYmqQHem4+fkF0a8bdv6ZAwMz+p2uHpaddOBCxzxr79ZHFYGezKAk+mISKdxb9yebtJHuDClJQB1EAh/wr7BfYHAhYVZGWaL4AqhPOctwVaQrfrf4SgY9NaK8EMJFT9BjFazPC0gmv9V/Jijl1adLhpT+tbBlmbAQak6GXJpVvFArMDC94yOuQAd6DNyd6WxRHH1CEAUpBYzbvMeqJa4M7YDV5eALpDxJVdVEg8i3WEvdr9tbgyvjQBGdp1f/02ImZKwYje0fMohSEn/pcaVFjyjxVHtq+jfaYfJ8g5OWPc9ku3+YwOeqYPAkv1+c4njCDBWjqLacQ194Bk9fcQ15YUeg01b+gIaAeVyYJKLb95u2/AuCaTdOaYh98LfB3WydFgYFt8RzlEC7KYDDv4Mf8cHaDE7R8dOW78KZvhlZRb0wViUMKbH7pdMm3HMtRwtkmgGuzq8eIRwkXtUJn8dMwl1y/ZT/wk9e48MdUcPz3cVQ== 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)(366016)(376014)(10070799003)(1800799024)(7416014)(56012099003)(22082099003)(18002099003)(921020);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?sAs3wfhJiRrSZpQSkjm2xQmN1Cb4gj65mVgji2yfGTOwHQ3gvsaemxGGxCPw?= =?us-ascii?Q?YP9GmwVNLKtI8HMsIyVMBZjIbBrDLAhNgWOP67jzfZq0DL50u5pUu2AwhtvI?= =?us-ascii?Q?i40Yj/Tz2JDw6+u7jorSkuPj5bcWf621djQpkZyfcMOx8yyhc4+pRyhgM3YB?= =?us-ascii?Q?4GtnSpWx3Vs5TDgNzE37o5xqYlFfq4yM2xEhGjmhR7CAGuM3Si1TD6Da8RTA?= =?us-ascii?Q?ejm4QituVNlL3QoaO4Ei2xV1b1V//rBO/7vcVlW16H1VbV1PIgpdvYxO8RiN?= =?us-ascii?Q?Dfuwtuo36LUNFurnSL3LjaWBW+69c/WM/tEjYhTj25fUOqNICfHeoy6FS8sx?= =?us-ascii?Q?G5brWOSYWZnBucncX738mi7CseVT/6BgiCCbgJb8YbagiGfIXqYBSfDXh0rH?= =?us-ascii?Q?MgQcW3+4S+R5BW6dCJ4dS88vxnRcQCUsV0HfSJHm67IOX1nSa2AqJshs/wXP?= =?us-ascii?Q?eWdghTqjqb68QpIyy+APGrYx5qOjT500QFlxtxLOQICgYiUXhPwB/CyRbBnB?= =?us-ascii?Q?uztnR1jAe0i8B7tzPb03AK5ecJqhe6hpGu4BL6/4VIR9uK6XyRUG3PTdNLPG?= =?us-ascii?Q?gvi8QmdNMSY/oje+V5Zt9jJclyojGdUiTmYDnfqgTpboX3O9xLCwt1ChWtec?= =?us-ascii?Q?RS68ToF23vC70rvj32EhORDPpMsHkE0dObVKck9dhhQMkFv+bj0HmkFXEuIk?= =?us-ascii?Q?BqViu/YzmEUHQURHZb3E2lh33cSeeXDBCaD4wzePHZZDTQ5ApyhLit4H7Hwf?= =?us-ascii?Q?5GPgxKn1mB6kLpc79iHUYpsTpsmX48q9yoZRHuskOfSf658jadpEYwYNVOwv?= =?us-ascii?Q?2q14ybxtijTxLWGg/XIvZ8Axse2LpNR755gGPIEENg0HS/YY3pMJ6EJKXgN6?= =?us-ascii?Q?AifRK355SwLXgZOYBY1GF0hdJA6anRk8JefBVaiYrAgJWdRE5Wlb64Y5ZWzz?= =?us-ascii?Q?auOOqxx23Q/rWOQyywNNMxvx/O11MZwRLSRVnJGvwKPmisVNjpbVfwQp3UUK?= =?us-ascii?Q?cZbGrnlHt4SKBN1FvBL4YwABn3lD86hRt11TUhkLpzqKhWIW4yjDKglLZt+T?= =?us-ascii?Q?ibHFBhNQA7hsSDrTcXAZ8qiTj3MO+wnRgzjRwD9uuLzGogYFobhPe5f4wiTX?= =?us-ascii?Q?Sjcu8VKv3Cdp3fQBdAmH1YrRFQO/xTTXTJ0ti9ubdILwUJNagHbuxG/eLmWq?= =?us-ascii?Q?o4UvE/n8KqqfiXb6owVPVystecUk6GSgeUI1bTiVRtz0YrT7NsJXXrGUMbKK?= =?us-ascii?Q?0Yfuoh6JcPRaH/Tba5r2RFPuZRRfKpy22r3Y6LwkELyZT2UDTxYF0nijGRiB?= =?us-ascii?Q?QcF6/PAGElD3EQWc+pe0pjaDiyMnpq2+1aROqL2u5TDDsDf+mnv+hJGFzjNc?= =?us-ascii?Q?lMNpUdhP8AoWMj3WsXkLdgKvGUWceGDETs7UcTv9MUmCTmJo33ift3ssAtqV?= =?us-ascii?Q?nAZdFDUuAWvgY7O2xkvjpFHyiv+N8jd+Vozg90ZrvpcYIyzhK7lFGX6pm9vx?= =?us-ascii?Q?Jv0Qb+cOmhjjYX0DYB+tTYyEQrKoMy312C8QCGU4RPjEsgTkYgnJAfM2FU26?= =?us-ascii?Q?+B2Lpeba6Sc04osUc/Na6mx4+WUSE1bCTiAm1gVHUPt6CEC3/Ak1J1C0ky1+?= =?us-ascii?Q?QPrUp0b98bN91D7v/fpL/9QcqV9t5vIMluv5sQjexz5lZBAJTIjK+n/ptcaG?= =?us-ascii?Q?MHdCexeaI3zZ8pBeX2gJrBpPoREiVb6sSotMp5PUATacbDPfF5bU6//MmS5b?= =?us-ascii?Q?GRB/EE5Qx6R18gwzpWjxBJ2/mM2vXHKQkZJTjvXYnau4UE54OfTz?= X-OriginatorOrg: valinux.co.jp X-MS-Exchange-CrossTenant-Network-Message-Id: e4d2aa31-0dae-4c22-bfa1-08de93f53203 X-MS-Exchange-CrossTenant-AuthSource: TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Apr 2026 15:57:24.9065 (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: g5q0P+9QMbq5idADw6GHfBQ/peep8jo/SJ5iisnuvaaMW6eT8m86N+djUzO50z/xqpEhqfEfJyxvLLeNntswvA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: TYYP286MB4187 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 Tested-by: Niklas Cassel Signed-off-by: Koichiro Den --- 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 1395919571f8..85fe46103220 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 Tue Apr 7 04:41:54 2026 Received: from TY3P286CU002.outbound.protection.outlook.com (mail-japaneastazon11020111.outbound.protection.outlook.com [52.101.229.111]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 3852E332616; Mon, 6 Apr 2026 15:57:30 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.229.111 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775491052; cv=fail; b=XrMBDFDzCFtCJsz06XKFJFxCp0Zi7NEJ9yr1PGsQe6s25Hw1Qvh0X9NOH8RxNFaED1sWEr61oXDWxS+XpX4uTlgfyUaVsVaS2QJ9+TcJY8xtNQMrmfZP/KbZqKhzKz70odvgGpYAs6CfaBQigKoUtC+Ebm9NdFhvz1Dh9YegYvU= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775491052; c=relaxed/simple; bh=sgRjIYZasZJZC6aHGGTqAQ1lBQJuj5jFMHNuey/EsmU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=rpx8TUzQc5UO3vcGyFjdugOCXKA2W0zcSY0ueuFnDJ8yDbJhOqTEEss5b6oZRhdSNl4pYvqvI8l0r1hIYNfbyP/1fqvzm3n/ublV7pqLjcTDv0TteyUZvs8FNTfbFCYU18+xO8hsDx4Z4Onr64GzwVVJ600InI0xjsD9JyOwrSA= 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=OJFfeWuj; arc=fail smtp.client-ip=52.101.229.111 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=valinux.co.jp Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=valinux.co.jp Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=valinux.co.jp header.i=@valinux.co.jp header.b="OJFfeWuj" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=TKuqiIaB4sKVyqBFXiQpFDbjaguRs5Er7sBzmiK2mWSDsdm5cMZECEY5qLQ3pFuxsKWONSt+jzHQ/XwzYIXtaecIf7JTN9+JJcBDgAYtMWP9s4s4G3y0XhoKdQG36dd0whla9t8GmQs6TSQAxcrrbgubqw/yieYwhAoFKKk9bcwDi+NBNt9fdnuF9MUiyXZbt6Dce2XmsKJJek7z6IiU31qMNM1AQixsDhw9DWKq4zcQoPFya8fNuCjOeyYDTvrxbpZSvZjzRW3DHGxl932QkQZVblAsn8JkiQITNws3GlalOIWUkKRCjqczTtqHlHMvqnFWv4zjoFieVCte9UAlzw== 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=b35G/jLYtQSzKulf5UWuDqd43jYQoJdbINzQbTRfmH4=; b=bzQTTefnO31zfkmz4Jp8U8YfRaWC9mIacbmYbSrvsJPTXqunBBDWPgvwFLuAdnuDDczJjtJJbpuHLg6GQjB+ac5WVsftLM0IbOagaJYpJKP09u6vRHdxZM0aXtMukhUwX+m5axusq8Wh1sPVBYFt3Uok8kD62OLjEX5qMdvkiGK2XMQz/FqYkKzAbW82v0HgxIikJIBSohwhio1vf3tPTDU9RQv/p0khcrjuy8sniG5+XrGimDfYU1tZRZj6P9bDy1s2EZtiFId/v35S4unzGhBDc5B5Ya0mAl3sL9oj0N7bbijRqxFyPoE9ozpTxoR0zn/Vh94gOSITJCReEnsmnQ== 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=b35G/jLYtQSzKulf5UWuDqd43jYQoJdbINzQbTRfmH4=; b=OJFfeWujwJ0SMz13e/978tDvMUfXED0Ar+zDeQm8+xOh18cX/OYeMy/XX474nhW+bMt/X/pZPL/BWEUjT4vbkr4bzTxKwghm7ScQWcGP+vrc2ohFloo8dMjwlRO2PKmd8izx/DPuy3V20q8j/2AXIbhOsiXndGQ/giikZdoygb4= 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 TYYP286MB4187.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:10b::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9769.17; Mon, 6 Apr 2026 15:57: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.9769.017; Mon, 6 Apr 2026 15:57:25 +0000 From: Koichiro Den To: Jingoo Han , Manivannan Sadhasivam , Lorenzo Pieralisi , =?UTF-8?q?Krzysztof=20Wilczy=C5=84ski?= , Rob Herring , Bjorn Helgaas , Kishon Vijay Abraham I , Jon Mason , Dave Jiang , Allen Hubbe , Niklas Cassel , Frank Li , Bhanu Seshu Kumar Valluri , Marco Crivellari , Shin'ichiro Kawasaki , Manikanta Maddireddy Cc: linux-pci@vger.kernel.org, linux-kernel@vger.kernel.org, ntb@lists.linux.dev Subject: [PATCH v13 5/7] PCI: endpoint: pci-epf-vntb: Reuse pre-exposed doorbells and IRQ flags Date: Tue, 7 Apr 2026 00:57:15 +0900 Message-ID: <20260406155717.880246-6-den@valinux.co.jp> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260406155717.880246-1-den@valinux.co.jp> References: <20260406155717.880246-1-den@valinux.co.jp> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: TYCP286CA0040.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:29d::15) 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_|TYYP286MB4187:EE_ X-MS-Office365-Filtering-Correlation-Id: 2a863273-c597-498f-eb12-08de93f53277 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|376014|10070799003|1800799024|7416014|56012099003|22082099003|18002099003|921020; X-Microsoft-Antispam-Message-Info: fSvfNz7TXok3gppaHig+kt5s98wspXPquYem2XZ5dz5XgWnGZtfMsIDvpydFdYEjo6rVs8Z4+qjOiy0lgLbuc2cqftDCfwzmZk92o7n9CxY5ZG7dnFP3/lM0V9Wai7fwqCdeEB+v/7jLVZWSgJ1CVEHXhJB2xZFhuKa7dwAHwM3S8QifJO4ZNpPiWQjGStjizrShJlXR0Bt/mXD5EFPydBKd7AR6MX2eDx9q8zAMw9/wuElItMECZyR6SonW1tPPbN0pmdGsmW4Ju1MnRqp4f+7jWV6ijWdVE5y05p8XaqatAuayNWfE7hXzig9cq6S2eywhiLEvVe6PLcyA7TXewr1H2iH7b9Z7hkD6+evSaJpQX/mmqIcLO72tpnrhzHiPikB0Gytw19vNTWWBeVMyD6ZXrvOgCgnTNIn4mOE5h6uwR2Ok66qXVg5vo9++t9DyXKI55+IxoR3vnBygorZ5haCTKFRvUaUmd2F25czuavsfHAgBqwSeEgxmdPbxdsL2u2NTnYT+Mbx0pABL/EnCN4QwxaWU54xDQjxLPI8Q3fur2QcwSFAI7SaNagD3uqcWeJhmB+06Lw4dmKe95qoN/A6C5DUI52g0ryxeko83SyudnOqQYroGPjn/r6mgP8Jta81bi6cPBNr4HNbdyucyWS38xKuUyLjv/QmLDSs8lZpZEG2T6lxmijTnhx+JSvHnG27NQQLKn8yxNgawwFF4U9ui9Tp21uAxJ4jQxiQzP0/TSwmp9mHiBS//Cub6HdHGdTi12kTjW68xxjmNrh2r/Q== 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)(366016)(376014)(10070799003)(1800799024)(7416014)(56012099003)(22082099003)(18002099003)(921020);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?+ZZYAluYiUk8PNN06nmFj5hwChlbsTVqMW6BLpiAYJVz+zQTY6Qh6DzHh7uz?= =?us-ascii?Q?tYN3dC59gffAv0Wk0gN0316Snyc/qIuM0De7i2dDimxSeVtWsszPAHhcuD0I?= =?us-ascii?Q?9ic0vRpD13+oclimNvuDXBELnBMWujFiUQSEfy7I+XL5+/Nt/gpPQ4/xGD4E?= =?us-ascii?Q?Y4XQO7KVQ62I8bdLQTHL1jK53qfE1rzqUW4Vd/hQLp7Fu/20C02XJPDL7RSt?= =?us-ascii?Q?c/e2DIh10DVt8Cdqmt0YRbp/GFIc3MpTUOSTINcOgdwsFK4x1eLomNBteYWg?= =?us-ascii?Q?vjJKkX/92XUKNyZpsZIjFY3VSgqMx7tvqpM+i3nbi8JEenbabqcVbEjVcMbY?= =?us-ascii?Q?cQKUSGTqm0It0KOM8AFiwoA6MTeWxCcrxFBafsDJcAeydFc/jIB3HC1GVx1P?= =?us-ascii?Q?7F0c48z4eJyUyjW6g0UYKDSAdT2PdQmAqy/WwSv5DU8m1XcUu4EpHsgu4e6B?= =?us-ascii?Q?vmrSu1bDUfGDpeWzo0ovldnMUv5wPrLr77NtHPNVk8miSyk6aIE9ZWJcKpI0?= =?us-ascii?Q?8T2Ec38c/V29TqDyV5v/nehuP76j6fCufoob33QCuOMYWSlzKUg2Oj/VVD5g?= =?us-ascii?Q?InFTvKpW0F6FycWhpATYM1XZwdLRlCyF/ybS8occrLV8iD6RyyElIEXl4unJ?= =?us-ascii?Q?4LyixJloiwLl0NjsIg7QsAVL8tNWPJfL62Qz0kqVYoXLcgsAEMReb/dvG9Ay?= =?us-ascii?Q?Q1Mdrjb3zl3qZ5kBadAsa/xQJhSwFc1jh7bevYaHN6lylqkeKraSEv6QFlxQ?= =?us-ascii?Q?BGSIbS8rww4+W9s17Q4iruROXqLxABmoh9IrTcfEJw6z2ALt2sLUyn5XEqfj?= =?us-ascii?Q?H89Db6ylo1q90Dg3YsT/RdBwunhkASdOUR9KmccQVvtO2Pgjc3JtPBit2yRi?= =?us-ascii?Q?odN0OaD6QvCoyP8Bo/dZk3FEcUy3tV5lW/7jb3saSO2FMk9pmx+jx6e9cO31?= =?us-ascii?Q?u7VbKYB7XLroqwT6MFfet5v/l3N6l55pvDuF2i9xMLh3/yvJ9cmGw8O+Rkx8?= =?us-ascii?Q?SV8h5ZjzgsRA3c7jtTlJEva5eZKTj+7Q5L2v6bMmRRYHRAzOJWEx2gfpna/g?= =?us-ascii?Q?4FnDOqGarP8U5XwJ+Yj019woKIaRSEfjwzE+ArTIE9uvMyUx9F0P/JUSw7iO?= =?us-ascii?Q?aY/hlyJ9uA8UHyFIjlzOD0cZc6v3cZXZDpA31RYwO3lORtEm4Yo4WUa5YPRx?= =?us-ascii?Q?sYaQNq3s7oFEcCyM58rZqcu3MD58T5y1ZrIfJkUYJTgrC6kxXg3OeNUoL/DL?= =?us-ascii?Q?/f2cMlypfTpHGTPCaAco4jRRk2yAM3ulsUrcL7YPn3zaOkf7kb92dRX6Fyo6?= =?us-ascii?Q?M3cFQ34bBoBWHmKPn2nDmVIkgvBd3PbVfSj4ASc42iFR5oBvCJm4Fg0k3yL1?= =?us-ascii?Q?+ReY7RbIkYEgLMzBCfU5QfG1xZuBATJTjxdUoNX9knnbySgwEoZ3WyoAN1r6?= =?us-ascii?Q?Tvg/t6+0j/CakUSm50KTrCjFYq/tW0Cd2BfdjC0QWbkqN5XQbDlFvOx898Nl?= =?us-ascii?Q?p0R5MgKpwj4I5TYRYtt8NBNIRhJcfCzIXZNmmnAAO58e5V01Su9zMr5Pl4uW?= =?us-ascii?Q?IU1JLnmJbVO2cea7xEgLCiMlN/c5pk42OvstLJ4VBERYQoVTCceSZ6HbI5Re?= =?us-ascii?Q?U4X0fDOehv1i69sYvqWDvegW61bvIdmXNQvFROktdtp0ok1R5v2dsmATVaKM?= =?us-ascii?Q?oU4++RedNBUnPKvab12KZWjd5bokVdOIOzJEvIApQ99u5E7nnRUvA3Zf4TIw?= =?us-ascii?Q?DdOmCPFBZiR2pByb3fyrPwh9hxmvOcrCIqRBLG8++/lA0zRA+B8i?= X-OriginatorOrg: valinux.co.jp X-MS-Exchange-CrossTenant-Network-Message-Id: 2a863273-c597-498f-eb12-08de93f53277 X-MS-Exchange-CrossTenant-AuthSource: TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Apr 2026 15:57:25.6932 (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: M4qBAd6zJL5jSWtjMSvEoM3wThzPTO0o6+gyS4LFD412BVMryOvq0mw0w3bLNYIcTRN7W/Aiv2U+/VJXuVskkQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: TYYP286MB4187 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. Tested-by: Niklas Cassel Reviewed-by: Frank Li Signed-off-by: Koichiro Den --- 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 2256c3062b1a..b493a300da4d 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 Tue Apr 7 04:41:54 2026 Received: from TY3P286CU002.outbound.protection.outlook.com (mail-japaneastazon11020111.outbound.protection.outlook.com [52.101.229.111]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 71B97338936; Mon, 6 Apr 2026 15:57:32 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.229.111 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775491057; cv=fail; b=BXNTQSXsYtFwFMN/UegCcgy4TdhW2KVLrJpDpHJbBrQ3x5HMMoEXEtLIR7koEGnmzaNK4uvnkFnXihssOBkVeHZG23+qNEDzZaxBECo3QvDYBriGUQ127bqkQalNnS8J5iOZMUHbhU/kgzK7kcNUDdPnBKDRBQz/w2vJgOrBzSQ= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775491057; c=relaxed/simple; bh=dlVnbhX8PxGnedfMNDpDYZosmRi6VsKB2pbJC0JUfqo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=sjZHB+tIrbkpTEmSLbi728BfZ3a463bqthCy8LRp7L2XN12nmPtvTLsPJPtKKNurlx1FlEDB2UzgG1KZFUuh4OoTPiDUtZkK0mlNJ/9FjlP1PBO3Oi6ZG2np9F35ckw0v6wEKQrNbQY7voMgBKPAln5lXjELKOj8mLF8jZhFIeY= 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=HMb1IXKb; arc=fail smtp.client-ip=52.101.229.111 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=valinux.co.jp Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=valinux.co.jp Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=valinux.co.jp header.i=@valinux.co.jp header.b="HMb1IXKb" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=zVVunOv4DnKJD9rrdsUBMoDuEb2aQGmMJ7dgOeQLEeRVDeUkhytSJIfTE5c8BLlVQGPQkeokzP/QmaHEhWcIHCjpFJxrIlkcV6nlh5HY7vE0YmzdG+1nUwpcBcwAMh9hHU+FrM45rXpmhUkQMqrE5JLRtuf9fT1oByS+ZJgypxmBFXM1xLML+7/Os6NbCLCnY5AhZdG293UKUYAW/KyoQ2yNaElCdSVMLYkZLcGmp+9vvWOCUqOzxfZHvBBqXID6Q0cynHbt7WyMiaGAMw9eRetpFnvOJNxtAAcbjVT+2OBMRiAGDww7SWaAtZkm43RtlPuoH7ovqRvMpP7WSNDk2g== 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=Zdv0PXxOcHbw+RGn7yNzlRw8lKljXPhJ7YMgz3q8sHU=; b=LxdKXVkjNaDXlsEjrc5rABLjGsNghB9Wy7GRxLn/r+KnAP/VA67eL1ZzBddq7sDWh3u0WX5g/rx/HXCGowbNjkLiyxjavo75pHoPwLZsVT97N5vW9RYeLGG2kyQdfT2MLPl9oSHfMFofgfPgiFu8U4zn9Wm1v6eGDLE0mfCSnqlGUbSPAlDF7AY6yq8u1f2eHjCRqsXBq3/BdI6we6r+NJS7I4UcO7Fv/m/HgyY2WeF7/rH7kA/A9ORrSDlidUtPvYR+PeFi6/bf6kDK7SbMZEUrJDQnhP2NumKSOs+snvo2aWBZv3yD7vdxd2132HJN2JCdsIvAuLrrnmi9wDt2Hg== 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=Zdv0PXxOcHbw+RGn7yNzlRw8lKljXPhJ7YMgz3q8sHU=; b=HMb1IXKbKGPfYZfc8uyskIp0iD1l8avGItwwXlvT2UYuSHDR9CnAevjRdwUWcxOKl962umS5A72l/mQKjIxMnYM73f4SjrtNq+JR57i/7Tx03iY8wmZ3VK12aso/2wGgo3XI1iBGkXyAEV9X4UrX4eL3ON9F0Nb1rqPA7NC/ulo= 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 TYYP286MB4187.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:10b::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9769.17; Mon, 6 Apr 2026 15:57: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.9769.017; Mon, 6 Apr 2026 15:57:26 +0000 From: Koichiro Den To: Jingoo Han , Manivannan Sadhasivam , Lorenzo Pieralisi , =?UTF-8?q?Krzysztof=20Wilczy=C5=84ski?= , Rob Herring , Bjorn Helgaas , Kishon Vijay Abraham I , Jon Mason , Dave Jiang , Allen Hubbe , Niklas Cassel , Frank Li , Bhanu Seshu Kumar Valluri , Marco Crivellari , Shin'ichiro Kawasaki , Manikanta Maddireddy Cc: linux-pci@vger.kernel.org, linux-kernel@vger.kernel.org, ntb@lists.linux.dev Subject: [PATCH v13 6/7] PCI: endpoint: pci-epf-test: Reuse pre-exposed doorbell targets Date: Tue, 7 Apr 2026 00:57:16 +0900 Message-ID: <20260406155717.880246-7-den@valinux.co.jp> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260406155717.880246-1-den@valinux.co.jp> References: <20260406155717.880246-1-den@valinux.co.jp> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: TY4P286CA0065.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:371::7) To TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:38f::10) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: TY7P286MB7722:EE_|TYYP286MB4187:EE_ X-MS-Office365-Filtering-Correlation-Id: f085b6c2-a810-4804-87df-08de93f53305 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|376014|10070799003|1800799024|7416014|56012099003|22082099003|18002099003|921020; X-Microsoft-Antispam-Message-Info: /aZnCGKYWg9w7+S8iQmeywok2+ONGH5jC1+MavrD/w33SLy99+nss9yUDnjcX8bNoVOW95L11UxXLf19A7tLnoUkVNv0LYJvjX5mPUcJlqWmBJoKHTR6j8jsnZ1Bf+bveplRZf6lIgdZAJZkhHLoxmLF8AlTXY+WreRk+QdYUB3Q4CL6+lUZ12X3XA1QjSDdhWzlhyKWli7PvqW/BYoZWdB5WrMReX/JnD8mUAo6BR1p+rP//FQbciCkgbo+E6VOmMToLZQkMIMaAFo7SfI8UZpbzNHCClCLSIFOETbENE48cKDm+qA/Quhp2tA1CV5/m+IK1toMnC/6I4zCGtNonXRbYYThpFOt6xuwCsKCFs4UlfGhqtqyOmCgEqWe7sX4ZucNDPba72dpJKA93+i9HaiwePqjgPAtyF/EIEoQhJzzlUq1jD/ZSN2klaV/k9Mw1ma32wZ9v1nTiDbRXNLznXnnVOFMvyekHClJ3HCPt9rZterlX7zPV2rmAWsi8XA9hLqpbQ/fVFDqxarF0bf1LqzIckrmDZYyh/FcfL/B1+ozsy8l5MyHPQpVPRT3IG9Q7UtHft8Sy4kJjXgH4dTkD7i+J7HCYSaNq0V3XM/B5OiDNFbirrURj8AOwo6OfOyNUtsGZKhos4zTGJ3hbFKJR/GzclKGZs5eGIfkZi2GLdTlXf2PJLSAtLHGFWze4iGa2MY8G++XkqEtjIBD0oW7W9dLmZdbwGtl0iPXe2vCg0nGuyM6A5MpeIBZ4zidz5NDxCVjmX0FLaD15QbOSvKUvw== 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)(366016)(376014)(10070799003)(1800799024)(7416014)(56012099003)(22082099003)(18002099003)(921020);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?xMVTisX8nHFtptXKwASx+3b6fOMgL8aeMZ6egPmd5nEKkAXZBdMnQmF3FrKj?= =?us-ascii?Q?TcxNnt5sQJZX2xUBk7zuUs45Fv4tJq64IY4Zt5Cb9XsROZu05Cewudr5/EBv?= =?us-ascii?Q?y3N7Qrazbe+uTdTqpaprgguhBvsHgoWd5zRqGOGgFRpnka8nMyN1Wbei89ZE?= =?us-ascii?Q?E0TratiniUKgFKJEEQZKh6q0twTdZsWBuLjVUSaBXse66rTXQ9qGM6WjvkL+?= =?us-ascii?Q?Haj9YTwdK7g6YAGRtb0g4mLEcP6baIeZnf0jzVRvYoygQ9oF6fx4ZcOw0tdc?= =?us-ascii?Q?9soFmwF/yveOrGTpAkyjVTUjXDDPP2qINJTTSARDZdf3rGrNyDEpkzzBEINk?= =?us-ascii?Q?MlBQtALV2dMkI4453ICEgLHnI6aS6bi1rATRIDUF5BeVUkEt+gORdtNhwSd3?= =?us-ascii?Q?uFsEGVJS6kPbN7jJ3Xr45ZRFohyWLdmoMGVwIDJkIEVqTliQLfkE7CN0VDTc?= =?us-ascii?Q?Y1ydjiLiZu6QJpqPog/+p27vp4ASLMJ9G466YHEp9BZDohuiLsq1PbQncOzj?= =?us-ascii?Q?aObV85KUG8AFUiKZPI0OypDwd5kkI/bWtvJau7NAebsOosw6ArpgsmFypDPd?= =?us-ascii?Q?6gv/nVfd9p5y1SDUBceT1KIPgAjHLshxplyRaovG8402siOzGkJ78+35RC7e?= =?us-ascii?Q?dbHICL283LcMnEHcU2XHEU7nkg7GTMe8SDfEWBT0p57CeshnkThqbqsucnFJ?= =?us-ascii?Q?rQoPtT9xzdut5kXSG4QFZrBhoqS68XJIN7S1B4DpOGlidzZbMBC4XxvQLuPW?= =?us-ascii?Q?6a//s2zj2un4w7uzCNsDMqk3bP9CtcArkB2wod6q2tttuVJMc63eomFCSxkX?= =?us-ascii?Q?VGLnEYkPLSY1opymKz4vtB5i99A3gEUCZDCunlLx9Yj4fmF0nYASKjDawQm0?= =?us-ascii?Q?SQOBWGWfTcPLiCqjJi2X07pQZC/hD+qKu4VBSbVZ16Psq9QXSsJ8hs9MgCuK?= =?us-ascii?Q?NHb76dxEDQkMDp2/GQ9w1OB7eD6WA5g9yA1vU8zrJFwTiRanqpiyst1ohVhT?= =?us-ascii?Q?+r7V5wNmxQq7oPIT52IHxt+Q6mIp2vcDyJvjM4Dd7mU7efXfk/a6otYZ2hSg?= =?us-ascii?Q?WfMuwis0fL9b1JhLqZMKeli8d/C5ItKFW1osMw+7SrWORg2LFtqUfpNPbkng?= =?us-ascii?Q?sPKDIZ3DxtaW+6So8ZqrycPwOhpDoKOTmLRDrG5sJw76chJD00tEXtwhBF//?= =?us-ascii?Q?g7t4qcwYn3OFl6C4/9t/Gt4lNZxR1j271DF+vnNhi2SGq0SOh2TzYlgxAeEt?= =?us-ascii?Q?FvCwEN5vcw6VYH7DmADYe8xIgpqdIVQUcs1EJcYQ4INsdmGSQ6MbRPKhGZlI?= =?us-ascii?Q?/Brw4XAq8uNPytzni8tG8HyonWLvJ3Ki/p8SXSeNSjxG6nV9P4Fu5UzEmasq?= =?us-ascii?Q?8d6dIJ8FShAnv3dfYiT9P5616kn6jeOgsShEKuruR4YPBXknCV7hoc0/28z7?= =?us-ascii?Q?rHxV1QT578fCtQ3Tc1FtiUKABKmb/x1GRYrRgpYUd7zjp83AZFbmyss28wwq?= =?us-ascii?Q?eq31TtdOihWt4stoG+mL+KvyO03SZgN3SBEr+F73IzlKsS3vhZznMzL9Mv59?= =?us-ascii?Q?VXfXMaO38/2EpjBXw9R8A2uIci7M2AnJZMHyWyuwsebUNs1t5SgbB9UFD5A8?= =?us-ascii?Q?JBQw6MFy01v0X/cWgxL5zExzxmd37H6G2hg/3fS3osfyYfGUDVVIKdKTSFtN?= =?us-ascii?Q?nagUva//s8T+cWaP347vyII8ZOhaV1Gnfs4PquaXBUcQgNjj1FLP7wyUjx9M?= =?us-ascii?Q?s9e1G6oyu99scw1WEP8rzlQjfH1J46aIQoDY05JJp0eWI9RRIaCs?= X-OriginatorOrg: valinux.co.jp X-MS-Exchange-CrossTenant-Network-Message-Id: f085b6c2-a810-4804-87df-08de93f53305 X-MS-Exchange-CrossTenant-AuthSource: TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Apr 2026 15:57:26.6015 (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: wuV8HGyY1Qe56hM8/FjLKAaeHkIFGZ0iQWu3FUWope27fVBzxDBt1AOFWXV25wXV8NqIGtV2rKzh1ZGU5cIyTQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: TYYP286MB4187 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. Tested-by: Niklas Cassel Reviewed-by: Frank Li Signed-off-by: Koichiro Den --- 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 14e61ebe1f11..b6c865b0883d 100644 --- a/drivers/pci/endpoint/functions/pci-epf-test.c +++ b/drivers/pci/endpoint/functions/pci-epf-test.c @@ -93,6 +93,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 @@ -732,7 +733,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; @@ -742,13 +745,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, @@ -760,22 +778,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); @@ -805,17 +831,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 Tue Apr 7 04:41:54 2026 Received: from TY3P286CU002.outbound.protection.outlook.com (mail-japaneastazon11020111.outbound.protection.outlook.com [52.101.229.111]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 814E13314B7; Mon, 6 Apr 2026 15:57:37 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.229.111 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775491065; cv=fail; b=i6wl34W7fLCdHOX+Jr8zEWeEDIJ3CP441AA7L44/aXuyVsUv9bK6ILPygrNTdKeiAZwbWq/0wA0T2udGoyXO2+N68FMOrqa/GLxeudjx4Tilwf87ugOOOqWiG0zRCE687zIzf2ixvzNyGaVIgR0+4/VN0d5d1ZaPkn65wicpy+0= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775491065; c=relaxed/simple; bh=rC8/e+0xzWtSpmaLkTHYAqFNhZV3sXj57dWCZl4sNSc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=kNyyEWLhraO+5qcDr/UNUz/QAe+BO4exy7Bn4nZigLbLtnZR66LJGV64c0J8QlOy7VeLiTIIPFQEggqX31oMX9C5uCBMkDacyXqpqa6j2ZbrMHWgUtAgoSB1pI9UjtqPEGJXOz+HFksylM+rKXhtVWKLrzjOBnexbwYhLFuH3C4= 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=W5igRUuw; arc=fail smtp.client-ip=52.101.229.111 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=valinux.co.jp Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=valinux.co.jp Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=valinux.co.jp header.i=@valinux.co.jp header.b="W5igRUuw" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=SKRLHvP3FkQ2SwtOoVIBZ2bGjVCQdPJNM48M1onKiUw+gk06BMYHLaqZzb71qwNjKoL+th7ogZVK2C8IvD0pZx22JdOfmtb7uoEd7g4+MOi9OxOGXBUPrTvuJJ9D5mlIaLAVvxpwk091CIScURDuwXuRIMDNESiS13Z7QGG5GFDjjAd/7mqsbEkmtGdDENBm0u6xNAxu4wJK2OyRfVtDCKs+i0ho6KSGJLYAjOlO3gTuTldfS4pOOtXYucb55QRt4Wf7Xce070Z9IrGYRx+UalLC1pN156Di7Zn6h8eru9U2F4TezLZZL3q5D8fZfEg1t2KzjvVnrfE3q4kkQpn+dA== 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=C3mmhLUdELv/sZCya3jrncy1RulA/dDzpU5C1RE68nE=; b=YeSjor9iSC2HVrAio7KMwhUvmjdlVJar33g/zYdHqI/RHvVlX4RGOiQN4kuorGkRO0e023GIZr2VRRHe9Ow+/4PEIbT4kPUK+JYLayk3Iwh6rpjP6rJhMy7K4p1zeNPaJKOV61eeNqKXEdQEuen8cFVkYI9EsZraLhgLsheLhwoKGEaA1RPLsAwPB2U2J8ROzsZ56wBjzhYomL9j8EPM1jDVDLhlq5UqfJFsTsCT2EsqHgMVOud0wsW6d+Nby/Rcf7O/sQDgWP3ISuqB/+N2r+wVwkT6K2xlcz8q5tTnjcT3SGA8ICKBW9BFpJwnoRH+FTcNenhm+p8hDw8wTm2xQw== 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=C3mmhLUdELv/sZCya3jrncy1RulA/dDzpU5C1RE68nE=; b=W5igRUuwjS8Y7xpng7Pov5GAoGO5xoH6GGWeUVBuy+E9/vBFXGRcTsHEejDwGwG+Eio7mpHx04DEPgunIn0Tr4OD11yGW4jslAb35D18JUfoAZMY6xJKPc1bT+hmbptn5sNsabvemRW/W57uVX3PgV7Q8XAxLwFjyt80v3X5xcc= 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 TYYP286MB4187.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:10b::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9769.17; Mon, 6 Apr 2026 15:57: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.9769.017; Mon, 6 Apr 2026 15:57:27 +0000 From: Koichiro Den To: Jingoo Han , Manivannan Sadhasivam , Lorenzo Pieralisi , =?UTF-8?q?Krzysztof=20Wilczy=C5=84ski?= , Rob Herring , Bjorn Helgaas , Kishon Vijay Abraham I , Jon Mason , Dave Jiang , Allen Hubbe , Niklas Cassel , Frank Li , Bhanu Seshu Kumar Valluri , Marco Crivellari , Shin'ichiro Kawasaki , Manikanta Maddireddy Cc: linux-pci@vger.kernel.org, linux-kernel@vger.kernel.org, ntb@lists.linux.dev Subject: [PATCH v13 7/7] PCI: endpoint: pci-ep-msi: Add embedded doorbell fallback Date: Tue, 7 Apr 2026 00:57:17 +0900 Message-ID: <20260406155717.880246-8-den@valinux.co.jp> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260406155717.880246-1-den@valinux.co.jp> References: <20260406155717.880246-1-den@valinux.co.jp> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: TYCP286CA0039.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:29d::13) To TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:38f::10) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: TY7P286MB7722:EE_|TYYP286MB4187:EE_ X-MS-Office365-Filtering-Correlation-Id: a04d73b3-bd50-4311-0ac3-08de93f53376 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|376014|10070799003|1800799024|7416014|56012099003|22082099003|18002099003|921020; X-Microsoft-Antispam-Message-Info: L2LkqTfUd5yfOodHj6n/G69WRITgyXD49paERxOv5rgwdHnHbyPkZAe41Ax/h+IdjqJfqfO2S7Sk+7AaQSFCIE5JaABbO6Zw2ZwhGPB6s7aTQRzQ+BFMSCVNa+PeUAIc1Px1pjUQ0XYlzTKEAXb9ccvoDDN4f31hpbpIWFS3UtAieW3eJrNNrmZWPfbovDzX2s7l8igKFP9R7ES9YiLc8OLHiTyaWIMyO6oaECK5ZymlYTyvKsdEr8ByKfxktneVf3UZpnnjv8WTmppEbg2EKx1aTR/W/c4kCBtHu3UJLWJVWeOkdYS4uuawnBzobedDVCK7cSRks8uy9S74G4uS8THBbOFSNEz8eA3CU9yGifYK+eh6da9EPgqxIcoODExqW+Y5gsMF778mmJCIYaArZX9lgOVrEaL5bFc23YAoR4EK3w9Dks9mDPMJ/xbAHTUe/e/fSxgJMuE+pI2jF5JZu9NaW7mD/EI6M/oA0KdRUPqOVsnqrkVWobeLLKQNlxDSSeBA5Jx0nLjbdornfATeLUKs85m83WtWLRjFMmy7GtC7amYNA1gKX2nqxEGGcxM2P8tLdsINyOrY+ZdXLS9D1sqamSV4HwlvbECCM+wZsSotdPh/3NQaCO4TTsUDllw/2/D0/GigCdvKoa/iC9UYlsDTDDk0uTEJMnMgf/GS0Ll1yT2bUPr9dgPUAszjVK8lR9J5p21Ikn8xxfJQ1p7OBOozT5UMJAtlkzlkDdWlrZRO3y2XDKljta+SjENCzJ1QhX0uSxz5vMyNr6cFvQNP6w== 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)(366016)(376014)(10070799003)(1800799024)(7416014)(56012099003)(22082099003)(18002099003)(921020);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?8thWL33NGS14Vd8waUQp9/HsshwGK2czSutDf/tUGRQV4v4MF6/QHrPg/NoC?= =?us-ascii?Q?2rdwmXyG1WSAk5NZFiO7B4glPXak/6f+vnXqIWz+ian2bb+2hDOJ5EbGhSWB?= =?us-ascii?Q?LmPuGkUCHfWD31iMBLVrjB/nr8K5DHWSj7U70t5AIEe2jOuhvKWIgoFLQpHZ?= =?us-ascii?Q?IuevpRNNaJ+dOce8lQgUSykFsqs2gCLoXBlSJOohpZ1XdmWVmmeGHDrqlD95?= =?us-ascii?Q?pN4UdEYZEj3zrTJxQ85aTuWg8i95GbtMdG3we9Aw1eKW9p8Nj0RRVzj/BR5f?= =?us-ascii?Q?+DwfmsaEhuj0RnguCFzI4gef/0wdNPA4hmnQ6SWp5KJMRs6iH5ePPfclTGy3?= =?us-ascii?Q?L8QD5zV9yTbzvCMyi12CR9PDr+Ceri0mfcpfGUO9ahQUhaGyPNaNHikhXtN2?= =?us-ascii?Q?oPI4xaQSMynwJNcHocimXYMCD7LG267bynzTZl5fs+Ihsmhhazw5oLHlpr3y?= =?us-ascii?Q?owyX4Fc1OI72l4fhjCd7Xk3fbsU2kxFjbFqumF9wj73ERmp7E+dEowRtMi7x?= =?us-ascii?Q?TKCGOtdHXOfMVQgqBpzh0+aTY43xOuvkIOWc9vtnvcKif2gASOBOgQD0fS2i?= =?us-ascii?Q?sYXklM0LH9ZC62RR/DkMNFhG87nV2zZlAL687FM74i8iS9sSdFksww9zxQ0h?= =?us-ascii?Q?iaYct1e+4pOcvg5z9ECMJ/pZajRdHos/7S+UmE/VlN2NKI35eqTQYI+Y3PRi?= =?us-ascii?Q?wYj3bk2ckvLIAMHCcqtXwZwjNEMZnxnavTPfmSem4M889QIBITmTZFnc8jc8?= =?us-ascii?Q?AkmsGxgDYv+9qvqIOfNIBKuKDximaryE7AJCmJuI9bB86p5LPHoxemnkM2Ks?= =?us-ascii?Q?yLxjfrR1vTXkoeLBq1pZQoCQNLZDBSfELdSXmzMy6mJjNaaOuJpjCnnW1+Rx?= =?us-ascii?Q?u5I5xFgtItUWPVwHkjiK/5Lc8iT9gOwfssQ67KckkVTuA98q+N2V8LNNUf6n?= =?us-ascii?Q?Hih0rf2Vx/mKPGM6/l2Vc4k5IwxSq1mL3Uh7OQt2zQe8F8da62qUW42s6W0k?= =?us-ascii?Q?MQeoSRu7xgiuuEDaP+YmRrVhJjNoUp0K4dZheOJrv6EFPuhKaL/FaYcYv/tu?= =?us-ascii?Q?q8mbnXhYOsAoOQCMJ2stX2K892fWT3Dqbtyye0hOVQjbdfb0wdKfm9EE06Wx?= =?us-ascii?Q?b0kasHFH3EDKJqIWvib5XtlqedZXEomcAgcwa2xeVAPHBgZsVLp7ye0EnJOo?= =?us-ascii?Q?DTzUfXWFM+21unwY+/uj6WJbQ/y1sFGj0fchHO5t9T3J0K9MlZpK/ye1qYHJ?= =?us-ascii?Q?8+g0UZsX/Tsto6gaR2Ixow4ToLqWp/OtSpG65cSUQccVNmKofa8nDblWgqZd?= =?us-ascii?Q?IUCy5JCtYYcwAtT5SfKOpfBaLtq6hmcDTk5TCgX0KSlOkauxw05epzrtY3TR?= =?us-ascii?Q?DQGGo1/pJeCHLxjmxTsYw+NYSxCCIFU/BUEHsbAxVCWolHcZ4TcJk8NQ5dRj?= =?us-ascii?Q?Jg5CwQm+N9pHyoxToJtIuZuibPiYjVlKdbqr9oNCNzOtgMd2sAAKsi6IgNO3?= =?us-ascii?Q?Mwip60cV9Sta/kgjxVvqB88AH4Wg9u5C2FYJZzoD2DjDTYB4uzNomsjZPqxr?= =?us-ascii?Q?HYL36hkdWzzkypNzhE8UAiKzwuBfv5JL96CL92eBYC9cOCTUa7mJtYy6vbQo?= =?us-ascii?Q?vGDPJSy8WXaVXfKQvPEDQxkwAufOVAN4AUsZx1IyM0UDxft2cneAyeZYLzmv?= =?us-ascii?Q?mZN4SREuaixOBMO0LoftkErx7MCPwP68K1KE3eWezTXtcubMYE/cGE4M8T4U?= =?us-ascii?Q?7Ciepr25NFDDVMKdHiEgpq2HDWGiicJOw5p8j3MgIQs3cKnl2teC?= X-OriginatorOrg: valinux.co.jp X-MS-Exchange-CrossTenant-Network-Message-Id: a04d73b3-bd50-4311-0ac3-08de93f53376 X-MS-Exchange-CrossTenant-AuthSource: TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Apr 2026 15:57:27.3389 (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: xgb+3HMF5qUqGn4xKel8uLP8mkZsnd6SMwTh8il4Nytx/ZoQFeniYfliomOVvK5iy0UTERlFvzNyMArqm36qwg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: TYYP286MB4187 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 DMA address returned by dma_map_resource() (which may be an IOVA when an IOMMU is enabled) 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. Suggested-by: Manivannan Sadhasivam Signed-off-by: Koichiro Den --- Changes in v13: - Switch the embedded-doorbell caller over to use the updated pci_epc_get_aux_resources_count(). drivers/pci/endpoint/pci-ep-msi.c | 135 +++++++++++++++++++++++++++++- include/linux/pci-epf.h | 8 ++ 2 files changed, 140 insertions(+), 3 deletions(-) diff --git a/drivers/pci/endpoint/pci-ep-msi.c b/drivers/pci/endpoint/pci-e= p-msi.c index 85fe46103220..4ebec9092e59 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,113 @@ 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; + size_t map_size =3D 0, off =3D 0; + dma_addr_t iova_base =3D 0; + phys_addr_t phys_base; + int count, ret, i; + u64 addr; + + count =3D pci_epc_get_aux_resources_count(epc, epf->func_no, + epf->vfunc_no); + if (count =3D=3D -EOPNOTSUPP) + return -ENODEV; + if (count < 0) + return count; + if (!count) + return -ENODEV; + + 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) + return -ENODEV; + if (ret) + return ret; + + /* TODO: Support multiple DOORBELL_MMIO resources per EPC. */ + for (i =3D 0; i < count; i++) { + if (res[i].type !=3D PCI_EPC_AUX_DOORBELL_MMIO) + continue; + + doorbell =3D &res[i]; + break; + } + if (!doorbell) + return -ENODEV; + addr =3D doorbell->phys_addr; + if (!IS_ALIGNED(addr, sizeof(u32))) + return -EINVAL; + + /* + * Reuse the pre-exposed BAR window if available. Otherwise map the MMIO + * doorbell resource here. Any required IOMMU mapping is handled + * internally, matching the MSI doorbell semantics. + */ + if (doorbell->bar =3D=3D NO_BAR) { + phys_base =3D addr & PAGE_MASK; + off =3D addr - phys_base; + map_size =3D PAGE_ALIGN(off + sizeof(u32)); + + iova_base =3D dma_map_resource(epc->dev.parent, phys_base, + map_size, DMA_FROM_DEVICE, 0); + if (dma_mapping_error(epc->dev.parent, iova_base)) + return -EIO; + + addr =3D iova_base + off; + } + + msg =3D kcalloc(num_db, sizeof(*msg), GFP_KERNEL); + if (!msg) { + ret =3D -ENOMEM; + goto err_unmap; + } + + /* + * 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, + .iova_base =3D iova_base, + .iova_size =3D map_size, + }; + + epf->num_db =3D num_db; + epf->db_msg =3D msg; + return 0; + +err_unmap: + if (map_size) + dma_unmap_resource(epc->dev.parent, iova_base, map_size, + DMA_FROM_DEVICE, 0); + return ret; +} + static int pci_epf_alloc_doorbell_msi(struct pci_epf *epf, u16 num_db) { struct pci_epf_doorbell_msg *msg; @@ -109,18 +218,38 @@ int pci_epf_alloc_doorbell(struct pci_epf *epf, u16 n= um_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 void pci_epf_free_doorbell(struct pci_epf *epf) { + struct pci_epf_doorbell_msg *msg0; + struct pci_epc *epc =3D epf->epc; + if (!epf->db_msg) return; =20 - if (epf->db_msg[0].type =3D=3D PCI_EPF_DOORBELL_MSI) + msg0 =3D &epf->db_msg[0]; + if (msg0->type =3D=3D PCI_EPF_DOORBELL_MSI) platform_device_msi_free_irqs_all(epf->epc->dev.parent); + else if (msg0->type =3D=3D PCI_EPF_DOORBELL_EMBEDDED && msg0->iova_size) + dma_unmap_resource(epc->dev.parent, msg0->iova_base, + msg0->iova_size, DMA_FROM_DEVICE, 0); =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 cd747447a1ea..8a6c64a35890 100644 --- a/include/linux/pci-epf.h +++ b/include/linux/pci-epf.h @@ -171,6 +171,12 @@ enum pci_epf_doorbell_type { * (NO_BAR if not) * @offset: offset within @bar for the doorbell target (valid iff * @bar !=3D NO_BAR) + * @iova_base: Internal: base DMA address returned by dma_map_resource() f= or the + * embedded doorbell MMIO window (used only for unmapping). Va= lid + * when @type is PCI_EPF_DOORBELL_EMBEDDED and @iova_size is + * non-zero. + * @iova_size: Internal: size of the dma_map_resource() mapping at @iova_b= ase. + * Zero when no mapping was created (e.g. pre-exposed fixed BA= R). */ struct pci_epf_doorbell_msg { struct msi_msg msg; @@ -179,6 +185,8 @@ struct pci_epf_doorbell_msg { enum pci_epf_doorbell_type type; enum pci_barno bar; resource_size_t offset; + dma_addr_t iova_base; + size_t iova_size; }; =20 /** --=20 2.51.0