From nobody Thu Apr 2 09:44:02 2026 Received: from TY3P286CU002.outbound.protection.outlook.com (mail-japaneastazon11020114.outbound.protection.outlook.com [52.101.229.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 15D87371CE7; Fri, 27 Mar 2026 03:54:34 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.229.114 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774583678; cv=fail; b=pgLgBP1AqJhn4EuNdNMVLnvppZX0UUxfZMYTvMoajFabRDBcaAJqXW8HWC5ozuxoMcg2FDsssROP8UVyfXteeyM2oVDHkHVLryvO1AJk0GeuXeFt9fZjlOgYFquqmjgHjT8ous/PJtN1KV9PhDM+AvcrAnjHBlzt8qQNaWyhTA0= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774583678; c=relaxed/simple; bh=a/8hsKyEISoPr+dCulGaSqhThqZ0bY0QVVuFPBZ7cmw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=ggxpE2bmSr+M0KmDAx62cyFbBfwUtoXvGlYD5eozLftgys9cIhvEjGG4XBwcv4xWxlzCkZmom5uE9ExOMeNawqAG2PfXbD7OaqLziLW3b0tg9+fsF8xHV9oOdZ68UywuGJEja/i4MRcKSbIcWxh/18z32n0A/Secyd+sGMHUwf0= 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=FXuxWrTV; arc=fail smtp.client-ip=52.101.229.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="FXuxWrTV" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=Wzhpv6MgYAvMw6rdgH/RNzZOc0TnPf7w5BMStBPOsfnf94BzP8fy80dQSvFAX+Qpx3bFmfRW7CR9Fb1Q8pGJCi+/ziT0cXj9bdreZ5Vn3cIevxueQbN39ZmtlZTXEqWKr2ycdEsTJ973PfNupsbIRKg0OaStVowZygQzyxO1e19sbeuCVwJf1vYx4lkd+hrI9+3uchcdirfqv+Qd4ouN3E2WZ0qZs+Ib1Cox0npfgCYZrJWUG9dY5cbvAAtjYql1fi2TOqxjoMOcrsRF5HuvsAr6SPQWUS4AEd6e5CkOywdZ7twABvrwSTEF4WZl/KYSIf+oIyDllPVRwHHcFLm/Ng== 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=XiOF/Jna8t4zNHuJYK2klo1qxQCLAzs25HB7Vjw7h+c=; b=gGnHIl4Jz3sNw92EU2cV1saYSoyddZfSFMB2LwX4LE6X9YGhF/wNP6FpHJkaxWOg/wQG1Km7e9YkC4ujTXzRKH3169pO4WH3q25+RaJnsEIktBUjLVpPPy4jxwfrBWeX5hZqJ0sJWy7MQk4VCc4hq+yblXXzYs7YSmP5mgJTJQuLL/MFbc4SBEghpgaPhXxdLY4wav4rMH9CXlCQOyEFIkMbqamUOJwCThvY5KDDukO5uF+YRJlJ1i3Q+vAzAc0it5f8lUoAQbHWu1Y/HA6084nY9HvFhHypqF7jvEpoL98GucVJ1qMjW9iETxDTNRQMJr9a898iak5PT83OxNBZbQ== 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=XiOF/Jna8t4zNHuJYK2klo1qxQCLAzs25HB7Vjw7h+c=; b=FXuxWrTVegeCkQ6ysX31id/eBrCLWcirO70ApMo1vegloBfmAeAgpk7mRqp9QaXhWVsrucAFbkUX7Ri9KlbPxHvvYz6xZbmhqXJMIjJJEQ8I9Qx4t6Nm23R0eEQ2wxm0fj9vI/VbtweD3S+6a/w63zd6sMJm2Rku0QnPOm2Y3zo= 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 TY7P286MB7090.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:323::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9745.20; Fri, 27 Mar 2026 03:54: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.9745.019; Fri, 27 Mar 2026 03:54: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 v12 1/7] PCI: endpoint: Add auxiliary resource query API Date: Fri, 27 Mar 2026 12:54:16 +0900 Message-ID: <20260327035422.4020455-2-den@valinux.co.jp> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260327035422.4020455-1-den@valinux.co.jp> References: <20260327035422.4020455-1-den@valinux.co.jp> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: TY4P301CA0048.JPNP301.PROD.OUTLOOK.COM (2603:1096:405:36b::19) To TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:38f::10) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: TY7P286MB7722:EE_|TY7P286MB7090:EE_ X-MS-Office365-Filtering-Correlation-Id: c7be07e5-a277-498f-0e69-08de8bb489e8 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|1800799024|10070799003|376014|7416014|921020|18002099003|22082099003|56012099003; X-Microsoft-Antispam-Message-Info: sLVZ1SGp4jDHamTr9Ie/jsyk26jv4/eVmS+0WPA2Bf+Dl8JZNOYVL/nFZ6+Cc5rFmIVa3eujCZxoZQLcKtMvtGvTRxNDhmUhFeTKkuOjOdFCu3K/Gp/6RbFckrHdchS/vbXF9All8QyzewuD/OTT6au6JNnuuEzcJPwKZM/hOEoEx4b+NUzRBrIPlCrfLpNXM0/SNdcAqVNs3EA25rgyWKv2OVkOowQn3EIltvmxNQHZRnEEs8Tore83m9ewGiDqG6Gg3TCOKrcHOYcXB4/0oCP9A9OSPt7e9nDypWB7gy2Ta9l16wAeMj+rX7kToXg+ICXoh80NLaEVJxURh8GsckMWQ6tKMF1SxSDhbgwEAGvhotHdzDSYzWicvcs61NsKNrpY0qQJolzQhPI96uf2rloOmsXVYdHGfbkEps28O9wzJmNThQHi5garnHcQZypSRrYXveSq/KsO92ORk6YmYn5cDabZ7AuaN5vc2SVRioaC8jMZwmkX5mJqAArXCCidrEW/8bkR9XjoOayc4q7QrXo0es62qI1oLeH2zri8nJEdkfUOEePtITCzRDEQc1SbwfrnxllGTxsjKh9/1DPOSmP0dWEAth2oKc7SxKXF4rFEqy8IB2qLKLFZUUtSBaKkXpa+/IXSwVA0FgucD7s0TMg1R6uya9fU2S8qliauLucDvtZHno0ghYgBZZiXBm20TPieVo0KyYyEdjiGz3l1F5Uw8A1QRtLVHp2EmNdzP3Tv3CcwYrEyLFOAYIkPS4GpFmLtLBCAQzriulvvynbzuA== 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)(1800799024)(10070799003)(376014)(7416014)(921020)(18002099003)(22082099003)(56012099003);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?y6Zq50sT7JvYaI+g5cpftVZd+IqJ4N6XPQlEv7xSS5a+Ps4caS1nk3+ybyGv?= =?us-ascii?Q?UCQndFMOJYAJK0uSYHhANuVdxspzH/+R0U8FrsCBUtEsoqnG/lhwoXuOQVvp?= =?us-ascii?Q?e/lgxXNmugxefwC2QJ4TtRtlSXcGwuOgDfFx5jx+3zYCISSMj1QE+hZn/P4O?= =?us-ascii?Q?vpUOuiJDJBjhwBuRD1kVVYFpE9aet8vJx+hkOy4IJHMW8yeaW3es9dtO1W7j?= =?us-ascii?Q?wc6jv3OQM37vjBDLyuP9kbp6bfEjFLfuFbQ3yqaxN9OZ2hbAO+CZB4npCxVi?= =?us-ascii?Q?z09WFgiK8TbVDK+bNXgrqimbwWPrJ7XoMt3DTEaDlQGHpXbBjJX2RMDRz/dM?= =?us-ascii?Q?7VhUwJ+GVBYGPy6VRgwU8m3EEpcLm2ia0Q9UcRfv9Xx+tf9kMH4K0ZzOtTV3?= =?us-ascii?Q?3W9p+bZ4RHhmOWjVVcD0GrTKqjjq/wijewDGiff1uGKfFVtoFO/t4KDwI8lP?= =?us-ascii?Q?c6CHLaNZ4eugQSO33n2RGUAbaks/6VLssRFcgAnTn7JFVLtDwOpkAJ/U02d4?= =?us-ascii?Q?aRxu2PLnUr5l+o3w/ax0576rSg+Gvra/1qtrA/NIzoXn6sBCYLkVNCEe0Yzz?= =?us-ascii?Q?1NykGWNThg6MAGg6HOFalO8JSb7uATMcJENId9UFwNvr1Jl7YIKAs7P+XA0q?= =?us-ascii?Q?mrE1T3kRMWL1Io07juRRoE6r5WYely4Np0RVRj6qCn5PhX/RhWlXhvdHSXPi?= =?us-ascii?Q?ecItZDLQ5I/lq7zh/p3ZhtJdLPeKoO8m9Hg9ApXWBOnk4G6NwMSl0BKoeQk0?= =?us-ascii?Q?bCSdF5gvPVgIKInLn06FYwyMNbeMtirn6BcTUn4oJYS1nFgj0Z2WhklFKMSp?= =?us-ascii?Q?81YtKQOfviX0K09RyNIkw1lsxTPj9TKBSg/UkOXLi8ElibP9GAXHdlbEa9CV?= =?us-ascii?Q?Kb3bvIQgk9Wl0TeQO0kn5uhsErG7it4K6Ce1NviXoiNjyLNwE7sCJDy5gOIC?= =?us-ascii?Q?p1Rkv/DmsI+GS2iPBoyIW9EtoWBe+whI5fTMkrKPG1Y68E4cFppJMZExuFN9?= =?us-ascii?Q?UsGLMQ0w5srDPr67Z6kfv4KsuiQClq1Mi7wiTwMJOimfJudrCb5XSpZScgzQ?= =?us-ascii?Q?OJ6cTJokk7SzxMZjuD6neVFTfbFkVrxE3C9BNvhR+TI3WvIRM1MeXXrdrtCE?= =?us-ascii?Q?2g+/AuhdInMnfUfOApx0UhkS4eGqGfKeoyK6ZKsnEA4F8ABsi1Qqqi2KJ8Mb?= =?us-ascii?Q?JvovKOAB6W06MOKFBhKWD2aq/esYWehW5phDfVRm8q/FSsyk/0ZOgdvFPhlp?= =?us-ascii?Q?J+eIcHEvL17g2mDfRP940zC4bllq7vHYWa2rDyLAn6jfIBpJrBftOFUaV9hQ?= =?us-ascii?Q?hcUqPJNBVldIYeWOSvLIbNd1Rtq83Z9nqiT4TSLvlH4xI4llRpXtm5dnp079?= =?us-ascii?Q?CUBtMIZcZSv6CTcm72P9EY8s/J1xkUawqexqi08By7Q14mKhquM4Wmsuq6zD?= =?us-ascii?Q?Gt0QV/3hAZCXbn7SacjrLIczwkjbIfd44nVt9PIs44LcMQQp0M5zX7clDces?= =?us-ascii?Q?qDajGZg2iFyRGFDB+toXlZE4w1dAFW1RyzsjiLHMHtXAd/QJXFkE3JfMyRz/?= =?us-ascii?Q?MobI6adv9C6mNXPoPCNj8os9ULgAcWL33t02YcQXrq4oCdfQUcQ63pgEr712?= =?us-ascii?Q?DWViZFOSkBmpdoJVY6+jffdNfoi1QGZ8zMGGS/DeegKMtDrqu8lpoL69SZvg?= =?us-ascii?Q?3Jvg4ERPfc8VxXfYIdxAT4137wDc9ldD09EmyDbh8jTjx+W1ZBIvh+cg+ep+?= =?us-ascii?Q?yoOxCMJBWLNcWz3gnO+AmnSi/dHnFqhzEMXrG6TFHwIkTsyexfZU?= X-OriginatorOrg: valinux.co.jp X-MS-Exchange-CrossTenant-Network-Message-Id: c7be07e5-a277-498f-0e69-08de8bb489e8 X-MS-Exchange-CrossTenant-AuthSource: TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Mar 2026 03:54:25.8145 (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: 3vTrALyTvq3F96jDdHHNJ8KeF2tQD7jRi+9LX/RiKM1yVz280bG4vd96sLgrjhROpDZ//0AfhQiuAPSLlVrD9A== X-MS-Exchange-Transport-CrossTenantHeadersStamped: TY7P286MB7090 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_count_aux_resources() / pci_epc_get_aux_resources() and the corresponding pci_epc_ops callbacks. The count helper returns the number of available resources via an output parameter, 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 Signed-off-by: Koichiro Den --- Changes in v12: - Add pci_epc_count_aux_resources() and pci_epc_ops.count_aux_resources - Use pci_epc_function_is_valid() instead of open-coding drivers/pci/endpoint/pci-epc-core.c | 83 +++++++++++++++++++++++++++++ include/linux/pci-epc.h | 53 ++++++++++++++++++ 2 files changed, 136 insertions(+) diff --git a/drivers/pci/endpoint/pci-epc-core.c b/drivers/pci/endpoint/pci= -epc-core.c index 6c3c58185fc5..fded71a19d71 100644 --- a/drivers/pci/endpoint/pci-epc-core.c +++ b/drivers/pci/endpoint/pci-epc-core.c @@ -156,6 +156,89 @@ const struct pci_epc_features *pci_epc_get_features(st= ruct pci_epc *epc, } EXPORT_SYMBOL_GPL(pci_epc_get_features); =20 +/** + * pci_epc_count_aux_resources() - count EPC-provided auxiliary resources + * @epc: EPC device + * @func_no: function number + * @vfunc_no: virtual function number + * @num_resources: returned number of auxiliary resources + * + * 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: 0 on success, -EOPNOTSUPP if the backend does not support auxil= iary + * resource queries, or another -errno on failure. + */ +int pci_epc_count_aux_resources(struct pci_epc *epc, u8 func_no, u8 vfunc_= no, + int *num_resources) +{ + int ret; + + if (!num_resources) + return -EINVAL; + + if (!epc || !epc->ops) + return -EINVAL; + + if (!pci_epc_function_is_valid(epc, func_no, vfunc_no)) + return -EINVAL; + + if (!epc->ops->count_aux_resources) + return -EOPNOTSUPP; + + mutex_lock(&epc->lock); + ret =3D epc->ops->count_aux_resources(epc, func_no, vfunc_no, + num_resources); + mutex_unlock(&epc->lock); + + return ret; +} +EXPORT_SYMBOL_GPL(pci_epc_count_aux_resources); + +/** + * 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 334c2b7578d0..d8b81fc6ca6a 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,8 @@ struct pci_epc_map { * @start: ops to start the PCI link * @stop: ops to stop the PCI link * @get_features: ops to get the features supported by the EPC + * @count_aux_resources: ops to count 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 +158,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 (*count_aux_resources)(struct pci_epc *epc, u8 func_no, + u8 vfunc_no, int *num_resources); + 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 @@ -339,6 +387,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_count_aux_resources(struct pci_epc *epc, u8 func_no, u8 vfunc_= no, + int *num_resources); +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 Thu Apr 2 09:44:02 2026 Received: from TYVP286CU001.outbound.protection.outlook.com (mail-japaneastazon11021142.outbound.protection.outlook.com [52.101.125.142]) (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 3845D36C5BC; Fri, 27 Mar 2026 03:54:30 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.125.142 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774583673; cv=fail; b=P9EpfArqxtyIP5bL1BQIs6ARvyfTn4vtSlHWGveF/SThssNTCtb4XVGoUCUt9QnT3tFgZiGY3Vwx+/GXgqQjhQGfN6ILJ3xZBMxSByMMFsFsttXgYVndQjOBpe/wFgpgi/nmEmVVBDVVmSRhCQP7mPGJhBhqokpu8RZkcxWgrrk= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774583673; 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=dyiw9xdU2SkrSaWj7V3KNyiQjbsL/cjJqAKRsIiD9XGkro9g5VPKg+FNe6naj9IUnG2fuCiKYmg+8vIsMbRja5xUbSyy8lTLQTvYaplaEaxnGK9bWSzQx1cuX4JkBbd/SbbZFKhrIVAyCRIQvSnnlaG6vZKMuQ9Xo7c6q4CCmZM= 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=Kvgu+wLd; arc=fail smtp.client-ip=52.101.125.142 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="Kvgu+wLd" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=teETyLYKLKBI6AiIEalzbmQ3gZ60SlF3JFnJTprJa0HavYuQ6BesCUpX8Ix9iLQaSWFzdDBpK7gZ+6LV5yEbuCyghDf0N6+dhjNKJfJeURsVbG4bewHzWWj4NGyCZMYOJlCceYUtbB1pqVOzZuco2nYEl5TCdXIDC36EHT/u00IRAwZu/YL3ph7j/+eZRHlKqxHRRnXgOslxUuDgTjTFe/AzYQA8x6h1wp3QKWOTqsOrzOYxsUB0PbR8lXOc0kam31fonHCQ6aouC/Eho6dcbJdOMmnC8mcHFxgmmCvzHxhDgVrZhoJ1iXblU+MK9WIwMhDMbWiCu7oApUo24mmV+w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=EfCIC7CzZdwcLUlJhEa1n8/0yHBVwev+g2VgjAz+QQ8=; b=T5DsGmTIXQUBmcRtOMPhWUTHXCKR5q8eDVfiV/34FzUsbdKX/suN5q/jy/s6CYXDpwLny8AWyuXdp88+xK0BrAqGO3a9B8/YxgZmnzKeSzmQGwDtKobHPjLr+LSbTmiEBnE7nybSB5lNlI95Kr8rtzxqbkfzNrq749EiuphfQFGKqcDlyC2lu70Bzu0OiYM0zQ3UO/4se7rmc22B5cpat3x4/M/KGyGmWAlvYUH6Bz/cRi0GdAvZtA6WUUD3vftJBwnKNOVgXaNoDHIhleyLQJwDLc/mV/C3Va5+uGWlbULGrcEnipb0rW683byjO4M0VBch3J28GZ3bHTyWBvy5Ow== 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=Kvgu+wLdkRyI6qilvvn0IXM1W3V9ftmUfRKHQiWBAnniH98ZwEAurpIVVdNzabDikeJeIrZ8+eA0ZRJTdWm9EXtKhin1r8gCNaJuvu2n6s9ieuo2uUyFI0t20E0j18pv/Y4XcIvDPWYjXDVWLt0zPRtrgWjcZlkd3WhtSRnZyG4= 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 TY7P286MB7090.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:323::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9745.20; Fri, 27 Mar 2026 03:54: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.9745.019; Fri, 27 Mar 2026 03:54: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 v12 2/7] PCI: dwc: Record integrated eDMA register window Date: Fri, 27 Mar 2026 12:54:17 +0900 Message-ID: <20260327035422.4020455-3-den@valinux.co.jp> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260327035422.4020455-1-den@valinux.co.jp> References: <20260327035422.4020455-1-den@valinux.co.jp> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: TYWP286CA0019.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:262::6) To TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:38f::10) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: TY7P286MB7722:EE_|TY7P286MB7090:EE_ X-MS-Office365-Filtering-Correlation-Id: 29f5e902-0219-4e59-c13e-08de8bb48a7a X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|1800799024|10070799003|376014|7416014|921020|18002099003|22082099003|56012099003; X-Microsoft-Antispam-Message-Info: s2PWmoHP4pHMo2abkEXldGK+XNPqLmXjta8gBK+cXEEu2QCTkoa4O6UL2U3RQiiQpR13xBZ4RlGQyDXJkxfjhyevXNpAsrytkSEc4N7/hPJwZXFbvpJikEwhivu9csIgFPEwjgU6Id2O3NO12+GYWkxm56HixECb9eW5d4nsM2F5ZfwIHzhB8v2bJOdpboCE0uRXI+Ux1VoDk2SeU0IZi3FHZdOXelCysblg7+Ztr2JFt4UZ7MOy35HtR9bSr6xMYEVyx+8303vAd5zvwwrHOjrpKZm+0cH1kaZsj6pTdbn/td9WfSU3pC2WVoj1Ldq/vZr0AeMKg1vAugveYd7lWX3ZDHg8q2hiO8HXdAzYyRKb9Sj1ukqGdNM1idnLqg5T6LdRU1qr71gWOuIkgBR8HTb8r+wuqUq217YURZfOJ5fZoB6rMRrK8OuJCLyBDErJtE6JgoUtiAP3cfMEMhpu6e3xdG+p8+asADVz0+YuQ2BDCUjtcCKWZ7rwCEx2FGnrHh2hcnxoGdrVjXoxnCXq+w1qWTNobhkDVs4U1pBiWY+KdJaqejDutUQPtOOfM9Qns6ciIvecrp7XqFkC3RVCWfpQLrh53aHjM/WfbvMQ/ulwctu6WtrtUOJoSygB7mi785Tz93x5iNwTC9egP23yYdjkWqBfyKlzHUiwLoTj95d35m1FA7HO2EpWQj9n3DC5XqQNW3vtPwWthChOCIy8tvE56ISKyj3R81M0+k3m1oAH8GHjIU3LFrIbonuCkl1yHMfP1kRSY6Kfv2gIVhPKqQ== 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)(1800799024)(10070799003)(376014)(7416014)(921020)(18002099003)(22082099003)(56012099003);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?MGlMqALBgxHs1eEs8Gvr0HQldrT6ByfYHxqJAPRLe66wKEWuksd/iNHax6Hg?= =?us-ascii?Q?EECVz14ZudaPe9ZaI7kwjJFqwAtmZyDhVSiIClEHnrldNeh1Sz5OrkSBYbGl?= =?us-ascii?Q?QzMP2u2QVlY3IjMz69ZMrgqq9VScpyh7xyckFp35IwJYIZA0pB1efru9bO2A?= =?us-ascii?Q?ii4myYEo7Q8hce0CGwn5wSVGIQnV0g5jMB3nrPAZey1GkUPlR8VfApk5uYdv?= =?us-ascii?Q?IcRAsnGGHjTjOeMdwiASE04kPFzi/t0a7woQlhr3b9JRYfBiejJLdQ1a87sa?= =?us-ascii?Q?oVQddv7XGpdLCM3BiHN+ZJ+sV7d4l25DdrlD+5QlU8xPrfKie6SLV9vuFE8v?= =?us-ascii?Q?YWxGIgmaPbgsF8OHV0JCT4xMF5oUNykU1xQRToM9VpJKrqWK5vroUfHILsup?= =?us-ascii?Q?mWOl3L8FFhq34M1ICZdZgf8rKjaAXoC0dHN64qUqcZjb8EcEGOzqsh8o+cZW?= =?us-ascii?Q?ePuSu6SOBWk7dHrYK8mVYWUJ9pvVXwvYz3orsRSzhoq0yI8f8IhXJH0dPudl?= =?us-ascii?Q?yfxAFyOFjplDBO93IXS8eSRlyrgavEUDNF+AtTd5Sj40de1AUSI40GaB6clL?= =?us-ascii?Q?vyP3jY/d2yrLJQpXvxitT3ZHstE/RRzcFxVTVjysgpW87MdSELHw2QAaooOd?= =?us-ascii?Q?YeVEXp0WFMieiSv0kO+WV0Ng9kGFUL6fG2cNzSn+ZKsrnydKVYXJSX0edv06?= =?us-ascii?Q?TiP0Hicy4E33GKIELIoJrhHA9Vj+HFCS+dU35gVy1xzzEKfq/RrWMVkl0tUh?= =?us-ascii?Q?mXBDGp19TwT0AOoNfL1YGPaXi3DWw7gy3pqeU4YNt6KhvPvU7M+8raGyQvLO?= =?us-ascii?Q?20j0m74daj36TcoWmAUN613MsDAyUX4pxSRIT85RreGa56/tp8sKwISjIgE0?= =?us-ascii?Q?8q3UK99w9xEoJWZVY5Ncssqie0OG1j7gGFRORJayLz4Xq6HMvKvaGQumhVfc?= =?us-ascii?Q?l8rbngoNlPIhZh6Ai7GOKufszZXdMyWji18fdh35LHBQLPP4OYkp1RQXykJt?= =?us-ascii?Q?n+yIAqUxQHq9/90R9fWvBzvLcir355anxWJ32oTBMDpQrZjZTYJlemDhHzDD?= =?us-ascii?Q?GBW1Etk100gV94m9RxBp2jciN45tAUNGD6eK75CXsdFWfhFMfVWRnAvKV38Q?= =?us-ascii?Q?cZjw2yn6WyNrfqwSQ4jnDo4VBhuKDh0I6MyTYVt5qnVntJ5rzESCw3LS72O5?= =?us-ascii?Q?rJVHIQiqw9OOHDkaHVZKZvz+/O4rAka91qDKEO264zkxMVPOmH5fZvOUNAO+?= =?us-ascii?Q?iiukOuqTjS8uQUBQf2jV8jbGcOkavrZEQxP4KPLZSiN1HRmmJ2ju91CpQ+N7?= =?us-ascii?Q?a6bw+XdMDZ5wuszZ+WmLwY4IHeWQPKj3B5IxfEpVMH3Ppby2F66n00P6P7Sd?= =?us-ascii?Q?AxsRQNG409XsGHmnrYR6QJJBpSK3m7wQAbeiOX7QEeLPHxkFiDcBRgpHze3b?= =?us-ascii?Q?jJkadvPr1ash40cNr2eY2xG4yjEndwrZ/uua8WZriS3eDnmhD72nuYx055GQ?= =?us-ascii?Q?6n9s4+NRjA/ydHDtt9rNNoqWRCLC6Q2paABbg7EujuEXv/faBCZIBJNHsEHu?= =?us-ascii?Q?XCS0rnn36PpoBUACT/T1ybFudOUwAE7s5BWwiDUcby5WqZDvPMrcCBO/SNZ7?= =?us-ascii?Q?nCQyr2p2rbAHOPw8If6gXiRR8qkmOzYXvE1z78f5CR/mmt6G6EovGpKXncQs?= =?us-ascii?Q?sWQdmkMeAltQQbI0n8fruIsDpk6oIQe/LgcjiiQ+njs5gjgRgxWfMEVX9dZw?= =?us-ascii?Q?MGms5zJL7U7QZgPk/EMZgCtp0vkcRjqLyikEz7YfAy7i0S8Q3wqq?= X-OriginatorOrg: valinux.co.jp X-MS-Exchange-CrossTenant-Network-Message-Id: 29f5e902-0219-4e59-c13e-08de8bb48a7a X-MS-Exchange-CrossTenant-AuthSource: TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Mar 2026 03:54:26.7476 (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: wY/MP4J6njkJIqg6tAfOn9yP/V3oZ8tlSYqa0Ih75vkrE2TY36KqEHYmKKSU9qUxv1ba+jgYaw6ndm0yzIcSUg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: TY7P286MB7090 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 Thu Apr 2 09:44:02 2026 Received: from TYVP286CU001.outbound.protection.outlook.com (mail-japaneastazon11021142.outbound.protection.outlook.com [52.101.125.142]) (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 5BAC3374171; Fri, 27 Mar 2026 03:54:35 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.125.142 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774583677; cv=fail; b=gbgSQwrUnqu5FGbmJiM5O4jPJKyC/mCU0CAkUvd4tijK7uEV8m1/laQM+yTker7u8V7ZTdIRi5V0fYUpMJvrzXm5B8V9XTbjjyJiY/crQ/f9X94t8Zkg8SRNEY30PLqZyDVe4f6XtnvqcazL9wcHTP71HMwqFbBgTyW/djrF7GQ= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774583677; c=relaxed/simple; bh=HYHjYYbJ+LK+MKgfogzUKbUDLxGKBbAfHQmsVYE8uvg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=d/Yjem4gpOTrAyX3gxeuz32D3AtNblJ1mReM/h8aMseKDfo6Pe6ZC/f5xxUlbfe1D+fyKto6lam+xzgRdROhjKmBqcRjSBL0Ib3MUbFTJ5EGSq8rg05Ak6A2yckd8C8TEew4ru7fmgC2gnai58x4knMQWU5r4NAfS9XyZ5j5zng= 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=DjNdqFBO; arc=fail smtp.client-ip=52.101.125.142 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="DjNdqFBO" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=ksvNP3MPZJkVly/GlRHLPfW6pcKw89iq4k+bVQ1MfZImslJW1CzMf18OD59XhBIgzBlgN85iz5mSNhSw47uU1a61DEx1TsoNAqLdehOJAQCb58xvZDWMVDMoSnqAfsFldzEAdSo4MOjBWRpJiAS2yVlojwA9K16nwrHHatKqTxa8DhwjRKQgZecp0kAzjqIlzQFWomiNKqmUaG7RbdfojM2ZQpX4gsrQrV7eQ3WknPJyez3eLJ15ZIsmrHGWFHcKzPzPfHx+n2l/myBb9KEEoOLptV+tF9/bCJS20Z/Iw0nJvQpdkm1pGBFN547yqonFAByWsF81cn4iiPfbWSTbwg== 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=SkG0mQ/dTmFeKTp/KBqXu1p+N2etQdhVWA0Lv2npZuw=; b=viVefzWaOLMMT5ZawbXGdNGzuxIUrtRXcbFMRJykR4xLO9F1ek/Sncn9KD59jMBhV/y/2vNJ2frssKwan40fust4qPw3LnxuDyXrC2Uf0fFQJlEpxnp7cFjwSNhT1gduSZXQhhtTOfXwhLjAu0EDL41g3EMeTdaO1sS85K4uiqbgSbxZ/8CwEZ3aWFJoV0Bt01/bEH65ajbUMY1lJGqu3vkMcyFyx2tliZ1LpyLpjY+cPpAPL0RtxorXSObrvXlkiM3sWfUw/Bie0fGBPs7da5Anb6BWzzGrjV3NXE18bJ2YVuj3iT1sNA6fmLvc7lVZiYbmNHpMe3D185nobSs4NA== 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=SkG0mQ/dTmFeKTp/KBqXu1p+N2etQdhVWA0Lv2npZuw=; b=DjNdqFBOkNY527Vn8x3NsNZPbQ6JgmGh36aUmBFDNYcQ2viyR5DgKPNY22718VuIKcUttA1aau7CWUkYMZl0B686k8e77qB5dep1/fivuyVDB0z0hONom/yL48/1wzOdWTXWPts/d/7T/Up8B9yJxOj3MQfMI2rP4042h1/6fjs= 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 TY7P286MB7090.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:323::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9745.20; Fri, 27 Mar 2026 03:54: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.9745.019; Fri, 27 Mar 2026 03:54: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 v12 3/7] PCI: dwc: ep: Expose integrated eDMA resources via EPC aux-resource API Date: Fri, 27 Mar 2026 12:54:18 +0900 Message-ID: <20260327035422.4020455-4-den@valinux.co.jp> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260327035422.4020455-1-den@valinux.co.jp> References: <20260327035422.4020455-1-den@valinux.co.jp> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: TY4P301CA0006.JPNP301.PROD.OUTLOOK.COM (2603:1096:405:26f::10) To TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:38f::10) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: TY7P286MB7722:EE_|TY7P286MB7090:EE_ X-MS-Office365-Filtering-Correlation-Id: a3000e34-5967-40f5-ce62-08de8bb48b00 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|1800799024|10070799003|376014|7416014|921020|18002099003|22082099003|56012099003; X-Microsoft-Antispam-Message-Info: Saj1NrS/5QNZURB42KsN3DS/YDpaoMPmrw2K9NRBKhLtARLsMyRCX2z/aQpQRO+Ia1gVYX1qdVfl6MeIMQ8a1hTWz89w2tmQmLV9xgm6pyvJzNG7OAMTJOlOdW+5+IgMamZUhls2ZkqSsCOjXoyrQzp1m9bzBLxSgJp79vCmvA+tI2pGgNRmIjzj/zK8i/fsPvLkkKwJGf2Q4EFeO0OYAYaAl0/9uHY7pzuDBrrz1CH3xFaVyVep/eyNIs9Xt3V/HYRhJe53FG3QZOBvVZCJ9R+PJt6DpkMaOm+a20JVMAwRHOB6JLKaTquom5ESP3q5gEdVAH2zFBaS7BfRdaaCFWjoWrtTYOzG0oyJKTzKdJJaBWzughYDtRLnMrtxt+XjUXG6qB09dKhe7AU7STmYSmoHIo1REpQbFLlZYu7YznfjtgdHIlzLYule/1I+W9FnUMei9meYnroMfAb7G3gD3YINJGnhKCMjoT7LKbaRfHe+4bgwT94mWfMAWaIZzoc9qgg13SbJSpYOuXQZ8rkQbvvXP2w88nm6yTZr15u+eTDoGbQZEa8u0Q6mVkMcqp6wufWruSVKYTxBtfGJEYV4lH1TMtUr59jc0gXD140MnC1SoA0cQ1GyvrG1/FNUYnlFvZpArMnCMUyOPYp5r6k+bb4NjV9NN9EmXP9qh5RxeykcBUgH54Sw1E+OFqmZ3ROi3ROX8daJDu8tXfS6/nv7GOGGZ5o3zx9Q88aaFhpDbLOz6O3iXTjnnCmodtWLLFoPK4eh/yLi0KySOVMWTv2mVg== 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)(1800799024)(10070799003)(376014)(7416014)(921020)(18002099003)(22082099003)(56012099003);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?7eh8JO3V/kY55RnaYjvnaNiKLQ03Ry1+eVKenDZX0FfWMCoaS9zzq32Mg1LZ?= =?us-ascii?Q?lHUYsdxQiVRgI4IBDp0mLZ17RKEp1XoDOJ+yEMlN0UfeFXe5Ak61lJpqsoG6?= =?us-ascii?Q?nYa5hJgqLpG5uIX4Ah6o7LQTJ3ZfTtV22ybfnxZYRGRNmCTXBUspUxytLCfB?= =?us-ascii?Q?CrcERAorUMZEnEQ1v/RvQL10+wPqs2MMgT7h19YBMBOgA9A0/wpI4vMJE/vl?= =?us-ascii?Q?Ne7m5s68uwBCEaR4/mTvo1K+i7eeCoCJHjzirIHXB2wNm1T9RjMDLIymKVtb?= =?us-ascii?Q?DK7dn0u4NG5RRy0U8GMVr5qeydeC7oFZvDWU8KZHekD00f+uRr/FjNpJRM+k?= =?us-ascii?Q?V2ygwg8217BH+Oh9YwNYjqQVIGgZctXFnGE9Jr2T+spW7JfEA8nEY/r11JnS?= =?us-ascii?Q?OP+sGOZ8j9h9QaeTHAL4DuuWTFymlIXbGswe7hoOVvgig644m8N4893cc/Dz?= =?us-ascii?Q?ymDLo+l04zd2uvq4CZY4+9qaxbdoH+rBj9QZBugdHRD/uPgwlg8IjPICQ0mV?= =?us-ascii?Q?TUZWRxbWnNvzabXCwQNitgg+ViouHQh+t6WxJC3WR9cGQsLAyp2q3ffF2pGL?= =?us-ascii?Q?CUFR+v9OCZV1KSBR0Vmv2J2lWnA51+53qkFr1QwCjZeaO1rDAFcuWmhe7/Ku?= =?us-ascii?Q?yBzjDuBKKJ3JZnOKaSXtytjQjcBe1JaXHqPBe+aAsKxXfUV6qIXyDeWTtJHR?= =?us-ascii?Q?D6ZMVOWUjO76IT8/l7IKQCP27pJeWEcCLBowmGeF7jUGdbCeQ3oCjwXQMgA6?= =?us-ascii?Q?Gs5W7LzYshpoyyUXsRX26fmORohWgT9pTisAqlfuQL4K/CPnQDEgfVj80076?= =?us-ascii?Q?UF2wRbJKDdDMpP1Sf4ZamPsqiFGLOMAc4402w9Nfg7O1SrmzlavxKA5DtwAr?= =?us-ascii?Q?V36gPj37oib+59H+0ZCDqw8ypjIE/cz/NOm9iDrsndNndEykiLGOEaVvosWV?= =?us-ascii?Q?FQha0m9dEVD5T+0xIXPn74S6LdX3ljVkSrHkZ1M/YBwR81ApsVTlcxo5BqNJ?= =?us-ascii?Q?XvqI6axxT5hbsSruDfPS4rjXPLCzH3RkuM6SpQjmb6DdYcVDqToz8GoeR+ZO?= =?us-ascii?Q?W8wo72Y/X4gd0EqC1I4bb1zIEbIWQOjZ67zHR6C1nvbcLUBaQo3VQPMCu+Ok?= =?us-ascii?Q?NLUgZKu6Dx6f/LyqX2C2KL3B7W97sckymcLCX6xk5rBmVnR91q5Q1svLdF44?= =?us-ascii?Q?5VAbhEyWipDRM6uPVHnYlPdwZHWsnLTDFxtA4Z7+tPNhau9GD6Nb6m/lC/D/?= =?us-ascii?Q?iDxomYNja5wYel1gC+ADPYIT47wLQDU4f9lvkm/hjUA0DTzhEVO707EgRpRf?= =?us-ascii?Q?qdbP/fUJr44bMg/szLESoJaosbqM7ZCW4i2Hd1NRUWGW/e91ZgiUJbV+WOpT?= =?us-ascii?Q?s3fFf1jiuYKqKQaQFFCWFpWj0MIKzLp4PxeMtj8+Nct0OK9B3aBh+31LEijG?= =?us-ascii?Q?ZUJc6DaqiOwXms1ZdPaDAL1QbrIwcCYzSlHDPhyjYn1UDL2RghtAAj0Ra9TQ?= =?us-ascii?Q?hI403Ix81CnufnySb3+sNeUXqmrsfYaLn0PPSlVvF92RWnRPuTsb8OYq2z+R?= =?us-ascii?Q?vf5C0daP6aga2H/jvboFWQFVQ7grc/PexrkhANehljGhYZReIsxzKe/cHT4m?= =?us-ascii?Q?4+rzzzguXdAFsxQXH50MS2kefbxSNiKzv6vQjOFeNmXecJUcnEJC+FzOMUnB?= =?us-ascii?Q?vi+cCO+D1ZZ9nkLnIe4YGaILLnvlE8JfcQ7O5ksIxvblyKUjuAy5yrC44RY7?= =?us-ascii?Q?LFSyQ1DGNKckunlRghBECxHHvKTJgSQUV9h7SJVki50GT8YcsKiT?= X-OriginatorOrg: valinux.co.jp X-MS-Exchange-CrossTenant-Network-Message-Id: a3000e34-5967-40f5-ce62-08de8bb48b00 X-MS-Exchange-CrossTenant-AuthSource: TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Mar 2026 03:54:27.6200 (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: Ir1gaNaULyqb3ki4pUgHzWpnkULIqUdkLqUgJqs2ze4Zn4zV+5sD77hsngUJ4s4RgY311zOT+Qq3gx1XogHz9Q== X-MS-Exchange-Transport-CrossTenantHeadersStamped: TY7P286MB7090 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 v12: - Implement the new callback .count_aux_resources(). dw_pcie_ep_get_aux_resources() is refined. .../pci/controller/dwc/pcie-designware-ep.c | 123 ++++++++++++++++++ 1 file changed, 123 insertions(+) diff --git a/drivers/pci/controller/dwc/pcie-designware-ep.c b/drivers/pci/= controller/dwc/pcie-designware-ep.c index 386bfb7b2bf6..b92bc37404c5 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,126 @@ 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_count_aux_resources(struct pci_epc *epc, u8 func_no, u8 vfunc_n= o, + int *num_resources) +{ + struct dw_pcie_ep *ep =3D epc_get_drvdata(epc); + struct dw_pcie *pci =3D to_dw_pcie_from_ep(ep); + struct dw_edma_chip *edma =3D &pci->edma; + + *num_resources =3D 0; + + if (!pci->edma_reg_size) + return 0; + + if (edma->db_offset =3D=3D ~0) + return 0; + + *num_resources =3D 1; + return 0; +} + +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; + int ret; + + ret =3D dw_pcie_ep_count_aux_resources(epc, func_no, vfunc_no, &count); + if (ret) + return ret; + + 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 +953,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, + .count_aux_resources =3D dw_pcie_ep_count_aux_resources, + .get_aux_resources =3D dw_pcie_ep_get_aux_resources, }; =20 /** --=20 2.51.0 From nobody Thu Apr 2 09:44:02 2026 Received: from TYVP286CU001.outbound.protection.outlook.com (mail-japaneastazon11021142.outbound.protection.outlook.com [52.101.125.142]) (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 467C9374E47; Fri, 27 Mar 2026 03:54:37 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.125.142 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774583678; cv=fail; b=KOmyLy2G+L39HeLwbZsnVXcvDfBgSbk9C3VQyG9QVVVv814U2laWKXnjx48Ijy1Wf6AzZfyCGbbfp9GbrNjRx4XOaukwo+Eph6Xr1Fmvp2SzIrs3KO68QgvBfmf6OdEWQhTZGjHJouqLVYIiSAaOq5ZDNFJCwCoPIaqn5xGgCXM= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774583678; c=relaxed/simple; bh=24CtTktMCrTYnhJKM0CPxo89ofgYKr4aiWJjFoL6RkY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=kXevyDkLoIBgCFZ4bziu49oyei9xJ12PAMKs02SUYfrsDMGSvagq7LcaeT4NaIlOv9F1i79j/5Lv4fV/LHOfQGtQDzSrgnue86t83mmKCRF46fIC7gYMBQlq3msfo46H077O9103iqSr9mDuM49oFkKGbCtPGln4Cx5TWhtgk64= 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=Tb4reD5u; arc=fail smtp.client-ip=52.101.125.142 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="Tb4reD5u" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=PrbfHwzGtGU9XhGNC2+u9/YACzkg+nxG8YtxwVh1jW3TOZHRdjRMy2b0mHWtv3NaGla2lmgY3HCNO8J4kaZ0RN09jSsiZZj43bHf/Cu6pF4uFI70Bi52tQjEypmOX97GiHy6rIEr4F112fYh7MGRe5+QLH9enbAAsK0B6zwWOlx2iwaaLV9ThHmlEYsrXXMSV0YjCF74jQFQRYDBP+iE8j2je2fY2WpKEWYiWteZnuQvmRXNBUmPM7XcPtio4slceKQrE/UNMsix+x7l4ZSeImOR99DdTStSJue62L9y2MUcTPVueudsKqQew7LhyMIW2r0VOSZOHzcHv86nRA+ocA== 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=wddAnoiA04d4vwXSzf4LAq9fW7WKq1ceBRUTa3bDCwNYpAi+9B03pzJnjIOv4sgfBo1QoXeCeVpa6gYza60FViW0dGQFlqgbzGjrq5/qsggt3LDAeuMbYwdpNG7J+ZwtY4R1Fd53Ix4De9MOExMRu8KKnpeXSCHJCZ9nTUuDAsSmAVe4QnVyMXA3VstuF7c45YRO/EgXDkSWAI6tV8JcFecwi8kgj+ZofrhniNWqiJpJsfJVf4aOQ6UmQhyk2L0b4qeesKIlaFpYaib9MRj3HnCSfYlyKtx0EtNP484GNPmYZSAIp7813YWDRIXdbJRNEdBzcqvGgkSlkl/Odk8IYg== 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=Tb4reD5uehMZhkPvRf9GUUgi5xIJMTUuf6hEWrHVRC30b3jksR2XtvtWfR7dCXhX7/Q2dIvVoYkQB2GW7D2zr8FsvDDGnB4mOFn/52gtYHWzk3MascrhpTcHHwutyMzSfBWxAbHWFG/Sv2aTxofc4RuK6p9733AhXEeiBRafA/Y= 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 TY7P286MB7090.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:323::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9745.20; Fri, 27 Mar 2026 03:54:29 +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.9745.019; Fri, 27 Mar 2026 03:54:28 +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 v12 4/7] PCI: endpoint: pci-ep-msi: Refactor doorbell allocation for new backends Date: Fri, 27 Mar 2026 12:54:19 +0900 Message-ID: <20260327035422.4020455-5-den@valinux.co.jp> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260327035422.4020455-1-den@valinux.co.jp> References: <20260327035422.4020455-1-den@valinux.co.jp> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: TYWP286CA0022.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:262::8) To TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:38f::10) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: TY7P286MB7722:EE_|TY7P286MB7090:EE_ X-MS-Office365-Filtering-Correlation-Id: c1584c2c-1804-4ea4-8d08-08de8bb48b78 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|1800799024|10070799003|376014|7416014|921020|18002099003|22082099003|56012099003; X-Microsoft-Antispam-Message-Info: hk8goOydukjTEYukIP3lJE3OOTeJvZJqPU9uXvx2bMpW1m9J0ILo2UZ26zilp/BPM7vMT/3LH2Tz4X3YfuvXh4/2bT213Z9M+Ar4DDB62uQkMqzbv1ZgKw3k3SwUYabgLBnVWm85WwhY5IeKR+cBjvYRf19x7DD5yr9uycFNC2LGpkKBdf/Y18N1NZiCMX5jIDN68eDwrIFcfK3s5mgSfEQmZCzfQtEsXOeYkVRrQCkzGTpYkFzTSsmOJsFY2bDRCrQUJxvQ0fsREmRJjezSBCmGH5JzZAjQMY5EUm8MCBU9PbSJOrr8JqXO/78ROO+F8yQmieOIYRjVO4DXwd5h1wLIj6NhsTouZN2q+2AyXdYMcgR/j9l73wGFEQhqYcjomZCgw23TPdi91birutKJb7AO61WtYFXK20w233D/ADyhT82491f8HWnPOHmGYAkYTNwb/uYBfchQjUOsHg3NT797fmULnEaBM6uCB/Jh0+uMsHUPQc5HCW74sXYe1SKvrCwYNQx2VVVQUGJjgqZDQ7mrscrjYotUUOLIcVBKT6+oml0c9/6mh5nn9IaEbTK9CF3xLmc9rJomJagFkFwlqeG5sLXhMhYNbmiB3EQLwcdOij8ehjwH7kSjVKiUqqOzhjnxFHgWTPTXkDyUSXWUplIfQeFNaPXJ1YNjUl2aUUVbyWtEZoMgXh36ftCeV5oHsreDgS9jBDnZB0I1DN1qlFDQonWdIAkeHVny7syaMx4eYTflWJgREfWzPw9yUwOD4TF7Q31D9YxpZvww/7g4vw== 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)(1800799024)(10070799003)(376014)(7416014)(921020)(18002099003)(22082099003)(56012099003);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?tNxKIpXn015lZvm4ILFwjHd8DhGfdhdqCPM0k1QrraWBKle6cuLtTzgO2wnz?= =?us-ascii?Q?Hqw3aV5Qj7LbXoDagRk98uuPRLEGBzkEjLGywUCiiWnAgVFwQDzYI1KqSb9W?= =?us-ascii?Q?ewZHOn5aMBnbW2L+1dcKZxLU0xwrj9scfERWekB9GlqU2JrHfRDG1d6qbbYX?= =?us-ascii?Q?sxQHRwodB5owSDkRbArHEkZHVn0kF53FJsN352aLAOytG/rFoJgHByAQ7n7Z?= =?us-ascii?Q?Smp0eU5kl66sL1qzVWsRNqaDEjbHoAdAcXL+9rbXxO/XXHgq0LXizMnZP46+?= =?us-ascii?Q?nauOqwdpVRrOihQ50NXU3PImHH+Es9LxYlGm1944MTezzNjAPoTh+dYNblUb?= =?us-ascii?Q?HZs5BI0JDDT3z+z1TSb3jmdZg5C4Irb6AhCRrpJv1u86DcpQcrqJOC9hNEh4?= =?us-ascii?Q?zK2KjAY9c2jlg9Q+c9uF+4QCjppJrKYWfnBb1r2ifzzVpFgRLEOEZCLYbI8C?= =?us-ascii?Q?0pHXuxRa0YjIUXm6at0bqJN+3wvP46aIgozqIv+llp8k3+DcHFXK/TGb6GPq?= =?us-ascii?Q?bijOPQ/nY6lTxK4Wc2z1VOh61mmwGEqaaP64Q52eG2foz8glWNm/FX/KXWaX?= =?us-ascii?Q?3CHyxfo3UL0fbbv+RGXG4VrcbQlY9jp/Nm5Rh9RnQ2oTda5XZ3RTDI5RKd/u?= =?us-ascii?Q?uBwumhByFnTbWz37LhCryI4Fza0sBPwp1/xzGiKnH87L0RmJ9LZ+XrK7yrkQ?= =?us-ascii?Q?H3X+T8iuKvnoBfgirE/0Go/v0Aqw1kCA4qigAAU3M40zAnwKqTsvILHBuEC9?= =?us-ascii?Q?nlUVOj9yYKrZ6gFsSDpA0UcjEvNyDTtgVzJ+iVe29Oo132GVb/wPMHoHnbQn?= =?us-ascii?Q?CiMiflCdn+ILE+m9rJko/34bZorcm84GwDOwp0g2OnB38W5nQsyoRksueyaz?= =?us-ascii?Q?NxufD3SQlW8JIEM5Hm4MXlmnMfju8DR8e3SXLcB5+DeO4fiFOO7yKl7pETwL?= =?us-ascii?Q?MF6wzcCoOxr4kzBHtJTIxN2cPygbKqn10AsQzNWY3Q0nZlk2ALGx325+JX9j?= =?us-ascii?Q?WQMx/q7v8Qir8Zt9pr5kt1cWqBqS6p29CANLOJOme2/sZNSd0CzFTMyFpD7d?= =?us-ascii?Q?g630rXwmaHXuw5NgUYVlENMAKDqNZ8OBKTUl2jaHiJmL7aB6B+aDIN+EOvE7?= =?us-ascii?Q?ZB7P3TwIW5cJYSLDsPhy5f1NvljtjsRrfLDKABZxYv0NncT8eel2hO/8U6XW?= =?us-ascii?Q?tBJ8xSPxOt8J5S67AHIeJ5BTcXuoFnBKylyFlbpm58Lpe1kV+g8WhZrhYmv4?= =?us-ascii?Q?atC0xtniWxmG/uHbFBWDddHNl7S/qPrv9hhHwyKIS9ozX3EzpLyYMLYhOzXv?= =?us-ascii?Q?0hW9RHvP0eiIErhPH4/jkj88Kf0T2n3lxbWGQPH3cNzkmYI0Pgb4XMqlWrHQ?= =?us-ascii?Q?b4ZaVdaBaztivZOn9cXKm/jbCQdGmwIEenNzzyebAps1f+6PA4bfI3JvQjFh?= =?us-ascii?Q?CIZOl856cvOkzk465SK+uVLk9Ei2NkNkufr8ZVXNnujm242ofkfGZOpRZXii?= =?us-ascii?Q?HrRBh/RhyvY79MkPg6/z2bfOJO+fZvAIcanQHu38Uut1i0EHp98CStC4XOEx?= =?us-ascii?Q?b+8aJ2Og1kvGqZm+S86NOHvD/5GNPHEZh3IF9SPWSXQ2zcV6olwoU4382lFE?= =?us-ascii?Q?d4Uet2ppepvhT9BooOLF0NcAr0pbmQ5fPjF/abHHs6pFtOo9TRFUdwUDK9u8?= =?us-ascii?Q?HAbsh1/+bKeZJtYhsuP4ZtAfFI8IuRKHYKnsGG2b/4QG+LTBk1qL09YMXjaN?= =?us-ascii?Q?JidMoGzV81oKEQDu124ZRetoSpTFkLh9+tHnyQZsYl2PtM1cLTv8?= X-OriginatorOrg: valinux.co.jp X-MS-Exchange-CrossTenant-Network-Message-Id: c1584c2c-1804-4ea4-8d08-08de8bb48b78 X-MS-Exchange-CrossTenant-AuthSource: TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Mar 2026 03:54:28.4052 (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: fzWd5laioE1qjy4+BTi3ecyElLgx9Gy8/AXxnSmUAK1orytZT4EiyL+l7FwqmLppLi3VjNkHtGYz7gcnR7rrxQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: TY7P286MB7090 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 Thu Apr 2 09:44:02 2026 Received: from TY3P286CU002.outbound.protection.outlook.com (mail-japaneastazon11020114.outbound.protection.outlook.com [52.101.229.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 AC0C4374170; Fri, 27 Mar 2026 03:54:38 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.229.114 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774583681; cv=fail; b=CrOqQeAFWz5cioOaiuEwPx/k4Wd2DHaXtVo/gMN9rQy8CdyyhAIsQTZ8beqO41CPOzvObmojmleCvCxhKWH3WF4CtNBCuIzlJYTRVdeFRA7YqvU8PADUDgPFEJhkk1R4TYdUvEqC2XIDe30y4B/ez41GGZGsMzulW4OrhyG1Jis= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774583681; c=relaxed/simple; bh=sgRjIYZasZJZC6aHGGTqAQ1lBQJuj5jFMHNuey/EsmU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=QYoeDRhYMJ4bchEAUa6L0mFco8LTU6MahfiG/fwpNG/EEWx67tI9WLejVJhejTa5AH+ANBye2iqdD6sAX5qQkdlJh0pijFZD61bpcKsdTI0iskmvuGjpdEPRP7BFEdXNfVglTsmUmu/n9ezt2RS2g17QwZbcqq9zxgtfnDWR6dg= 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=ZK6KhayX; arc=fail smtp.client-ip=52.101.229.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="ZK6KhayX" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=uLy6OVYBR2193vzql7+9gLUWGS7jMLSWGqyEpxrS3FzxgPMDi+mg91RrKZ24dUobLsR40YoQwFeUO4ZYtrVi1A+l2nr8WkrI//5Cz7+kH8ACik3m2uCYrdpvajx5xrv9mRUtpHWieMwNP7JK5btZC5nYBlP916KBy1Elw7NMFIJjP3ldwCYHC9DwwkXxlRXTiWdpSKlReYx83lY+SxZ/F0LGnExuziyGFgdSl3/wtkjcuvPtZNqYwvWL7Lz0NFz3R2vpuzGABBAdeTC2rNDpOQf4kcr66QcqL3P99Cuyh4QyVwMyO1w4wnntY53V+uTbfVFGLivf6zaU0pPIJ/A44Q== 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=L/s/865EWkBGPNyKR1B/1aQG8uvqLF1XsIrROImp6evlTOr7pMoOvCTl+TuJ012JR1KViSqYVelsez/0cOyM8mxq7ZuTtXRDEFz9HIKM4L5/OffLuGYsdJJsED7nzu9lplmQhVdxq7cnnlkk7eG+XN+GWGMNvIzw25OI9BvYVfRdf2GyNwHtAn+3ZV7dgZu2CPKH/u7s24oojMrBHrPJRPJaZOheCs6BqjeOZfTIiq5vX0iDBfg00X+21d62ryG3Etfs7xfr6gx+Y9RgLWD3tRHPE4T6bgfekEHqU0RQievZSGajJWMA2zsz5G8qksPZePkzQyYetXe3Ox47hqCrAw== 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=ZK6KhayXZ69GoXwK9a/7e/OWQRscM1ttJXCUjcI86TPc/d1ufSFEbX9w3LERGNwGdo9DEBr7jIEIHzZX15hBBO3rkyEaPMBIShquG9/OZ2aMyZO5ZuGdy3ZwRj/wHXcRGjIUS/RF6lED+PSyicYw56HjGJiuEE+LgmpGufacTfY= 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 TY7P286MB7090.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:323::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9745.20; Fri, 27 Mar 2026 03:54:30 +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.9745.019; Fri, 27 Mar 2026 03:54:30 +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 v12 5/7] PCI: endpoint: pci-epf-vntb: Reuse pre-exposed doorbells and IRQ flags Date: Fri, 27 Mar 2026 12:54:20 +0900 Message-ID: <20260327035422.4020455-6-den@valinux.co.jp> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260327035422.4020455-1-den@valinux.co.jp> References: <20260327035422.4020455-1-den@valinux.co.jp> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: TY4P301CA0004.JPNP301.PROD.OUTLOOK.COM (2603:1096:405:26f::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_|TY7P286MB7090:EE_ X-MS-Office365-Filtering-Correlation-Id: dacf073e-86f4-45ee-9c0c-08de8bb48bfa X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|1800799024|10070799003|376014|7416014|921020|18002099003|22082099003|56012099003; X-Microsoft-Antispam-Message-Info: 7PskOe0MMRy+I0zA1uDcwBbhg3eU0IEghUsUnztW+w+k3Y0Dx3g0OAtd2BDCf66Pp6g7stbQ1uOMbg+KzzT35LZz/fBJtHkaSoTJcrQTdPHXBxhXVYUhPOahk0BdmDEVW491pZa+aOvYJjWe5L5loGQtseDKPJl13aSvmizLTyp9W5SUB6eFebFaYyZcYTMq0n7MD5DWNv+VOCUeNI7c+DVmC+RE987jKs40/WkDQhMyYDI86YvenRpeziW9y/8IUxFFy851AYMUlafXdScnCGlznEylSr4YRYIaM9AAACIPLM/j3RPrm74o5RclryffMs+cZimyWBftxSj0w3f3fCo20EU0zcX8CzxmlzYhqOUcXvary1BUPVimf0eMaCfddJdBw5fyGsdVourXj9GmniKBbkcLu/JNJrmuPBzyqUnpr7VH0/4ZtKcdfdcmi5LYukqBQgH995wZHsmurTzP7uiVBGwDqRQIK3EbhS6Kb0X7DiWtlL/uyedhn46U1Y3XAU2mNBTshKEhWOm/hQ3i+mOkl4o4mmzWq28quKTg6GozM/HExeeFZAAnXpCF5v86XgT3VT9g4UP47iSbIMCd6sClCjJ2omPuK6CajCtgdKHoWBk/0lkNF0/o4qNGKf3F4OAS6T+C8GOQeOSmTxWxQ3rayiDRWXrPY89jab5/3HgAyEtOSxcwXSnW/hsKC5r8Ib1SRfHk7APfBqQ//7ZNijR5lrd7dC9iZygqO555U2m+8Tud+XFGZzPklCBmZ1KnM9WF539ta5tF6yosi0BbZA== 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)(1800799024)(10070799003)(376014)(7416014)(921020)(18002099003)(22082099003)(56012099003);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?alJH1FOrzhVxCCUE6x12GtSE94+bTAFLD+HosqegBgyPJrHdOjvquyj5sVkm?= =?us-ascii?Q?MiQuZ/0MfAvCLRjl/6ye35DDwFGuypZWKVNxM3utTdatgPy54WFC3CjaL9WH?= =?us-ascii?Q?FS2IE9vXcHMsAAQJKPZWlq0sYbkQnoeIIn7nXwK7nkvnH+cMmRIMz2cGOn6y?= =?us-ascii?Q?f1rUBwCcoxcfPuFXVOqivwNkq3Lw7s/GWs1mSuBZRfOcFUeNd3UJR1Bmi7X7?= =?us-ascii?Q?CC4uldFr1CO6f72LR9thMqeUvXijiZArJAIuOZVOITr/8sDAKvND7N5T0qSg?= =?us-ascii?Q?3rhj3JSCl86Sd7Pr4v/it7WeZBI7Wd5r6ZgN89hiDdgafRwxup7teev9JVke?= =?us-ascii?Q?KT2DS4kE/Ub6unpEHWy3VTFCmn+O0GSm7WlbV4bJA7OSKk1QMKAe65eF1cpg?= =?us-ascii?Q?ryi2oydx3nETyLGBPexLIQRw5dM5r2UXu4KrNPGQ+H1rrOqucuQVZqLGHTsA?= =?us-ascii?Q?YRbtSS6gyTkFKmtnndJRO8/qSvq0sgKxVMLs5kKoGuxyktt0z5lD4gH0+hgr?= =?us-ascii?Q?R9rzDF8BeW6q1mRqLKVW3KcyVaRlocnFbaytkIe9mf5wDrliJKlIpUKegMVh?= =?us-ascii?Q?ZaHdHrsL3zjtJKE8bLWr/59ol14IVjDRda7uaiwA7ZWgX3qPYmlWurARvDeS?= =?us-ascii?Q?Rg8jWsyvUoGQ0ubjDM/1iviDzasi1SV1ihMNS5S6YdNmRU2YvwlscasEcc84?= =?us-ascii?Q?ZCKOPi8akjSBXwC7HrMDpS2Bfd/F5yefedhMi0RsHneagjaIUfzIfPggROq5?= =?us-ascii?Q?k/fhKAaCuMrfgfLpwQ+ci9NBhGUzCo2z5KDxewEOTEmYGoVSjlumfIqEzZeC?= =?us-ascii?Q?Qde1+VTaiBXgwz1ANuzsGkYzA6sbLxmM/ppKG1EKpLsm69k5hjk6H8FPEOCO?= =?us-ascii?Q?MxkkuWWL2ql0RXRYcIxcf+8LVU1UBOKlrOQUp0g6oOY5ALy4rpBY8c5FuVFn?= =?us-ascii?Q?3n/AeZUCSaeadxhm6FDzpZ7PnpJGRt/J1EBPSb7LTci9FF4sJ969nkKMaKvr?= =?us-ascii?Q?ktUTIe8mLIfMH429rzbFlt/v55hfSA3qBG7/9eCiNQPv9tA20MYwuQlYwgUT?= =?us-ascii?Q?gpridXvtH0XZ1z/QbFqaYCB1NTEOdpE+TiAffR+M/Z3dJy0z3AevqgjFum6s?= =?us-ascii?Q?xyoyPkSo5/aZqPc0QvZbAiPAhOkivp49aqMkpCo4NseKJXAR5S75wPj+VOCT?= =?us-ascii?Q?l9GvC9IQ+HslhqmCZfvstVqlsgqNmTj3AuO8PPVuyvjuOBsqB9BVSw14JiEU?= =?us-ascii?Q?vuhPFOnlMNCKB59VFkIm8ONT+eIIr5wTjGEvc9daqZw0u9zUqoU2flZhsYw1?= =?us-ascii?Q?g1jK82brwo4DYMUeDSVhKFexQJTCEj1PFBsO6hqw5BvX8B2kVtDDnN5yvjcA?= =?us-ascii?Q?MiWxO9dErxHtA60auMXum0PUoFCjE1Yvou+XbL96x9qeZuK4WauU6Ucw+w63?= =?us-ascii?Q?gXzQYNr6Ybjkes2jlpxBiOCT5Ns0zsjDDMiI1ZKCESo6nu92/sqLpN3rdXnX?= =?us-ascii?Q?olNo0fv1rkIq1NIWj3jZ96OKO7dblVM/Ts/n20hNZWHm4C/Don5ZDQM+WPK3?= =?us-ascii?Q?V6RhoLgQ7vHICctWCpIj65fPJXuMJ3ZPRppr2HQTffzbLr3o5FUrsOjscnhi?= =?us-ascii?Q?IJTraELXqrIeyTjza4QI3GGMGHospLyYO8F927IlF+YjTrxQHg3qoax2bkdM?= =?us-ascii?Q?GU/n0ptw1z6nxlEQP7VjGPGpm738eQoGC7tHV8yLh0ZZ1By+XCCgg07WGSg3?= =?us-ascii?Q?xsNrimr8Wbxi4IIltA6I22zMuTKQ6AQy3qHpLiLocbHKmGl6ULZp?= X-OriginatorOrg: valinux.co.jp X-MS-Exchange-CrossTenant-Network-Message-Id: dacf073e-86f4-45ee-9c0c-08de8bb48bfa X-MS-Exchange-CrossTenant-AuthSource: TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Mar 2026 03:54:29.2637 (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: D2zFZnYrcdsVFIu69jPjbsgmDQ+JkIdmYsOs1hcVl9Z5wH+ry9zCBXxYOMA1KquaSAKrLSOANiUmibWRSgEjwQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: TY7P286MB7090 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 Thu Apr 2 09:44:02 2026 Received: from TYVP286CU001.outbound.protection.outlook.com (mail-japaneastazon11021142.outbound.protection.outlook.com [52.101.125.142]) (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 3B6573750B9; Fri, 27 Mar 2026 03:54:39 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.125.142 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774583681; cv=fail; b=DE/rpALxAT40kvShtEslPUmH29TcPAwsYA9o2+pDVCNW1Z5T+tLK7L2GezwAESqXBV2KLn8U8q635jm9q9vAVk86kSs+FENMhRhdyJjwwsVPPobQaRJ0x6+SZ4CbjRc7LSausKhM4UGGNeHi7o2gxeHbuLY0GxBlfYuxbIKYl6o= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774583681; c=relaxed/simple; bh=dlVnbhX8PxGnedfMNDpDYZosmRi6VsKB2pbJC0JUfqo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=CHxl+LQAILHRNVQGvTUtzT9E65Nf1bzy1s5pP14hAbyYG2Rb9EUvvanwyHDh1v16cV7ezGF+7wxwwr8g32cR3ldGLkaZfeADsW0QHSHQfdaadfmddVt7prz1AXL2JIXra9Syb8zoQERp9Cq2zOXaPaywOLqxEpMe+ic7bFGmjEA= 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=WeNsb998; arc=fail smtp.client-ip=52.101.125.142 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="WeNsb998" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=TpwOlkzjv96HoLZEjVN8euHVL7gFcSdzAIOKxFmZtRD/ZPJCSmXmeBdahTdrwp9VBw2C7Z/zy+vuMG83UP+CcmSeqZ0J8DYQ/G7ItC5zbMuCOUF61pN05xfZ9JC3GeYVSAAWaIKzUFD+y1d0WtiQpTaTF0YS/iHGWowZdNRcvakz+3EBF48JIYb0TYdv5NWYOp6g0cFgfs5mSPJMJb+LBLO5ImVQzKbcbCcLzYT8Z68hT+/fvcl8HFc77dQl6ZIY3aAFghOWaQL2sGA3y+4OdJbr9PIrzNrslpywJ8UG31HSn5shpTMT4DMwnoxRnbozWnMUkqZcYs2A8Ij+JuWMcg== 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=ltOfKSVlKAMBZCEVglIgrEHhSEyE7AQK4xjWOJ1wl+WjTsRT3Gz4QJH/h64t02dem+x5Q7MiWPm+qjlELXZ2qHJitLL4MV/sh0cdKvLXFz3hIkzMn/H6Cr3SLzYaHvmnZOXuS0CYO8CRafMvArP7UlMD1W/umQb44BdIQXlw7JorYXoaW1Qtwnphw/gEGfa+K+AIW674mInla4ukFAIjsBVHiO5JyN3XsCTATIl67Ojkaga0SEuaetBxuioMSiAbZL8iHArV+wXwz5TFgl2otY9UXpvdrR+DLwqbzL9wxkEY8vd6TJJk7dM0XtbiiVTxegqEUOWtXWVcp6mVWiYV4Q== 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=WeNsb998yTnrzjNeml2untSnFs2LK/gfgwGvGwPRMf663KKiC5Im6YFnQjwdwFIfOUgM3mEFMj3yHD8kdon/Oc7fcMtT/H7uSvzMrtkIHvM8tCPblvyfA2uTbs91oW2dH9+7dTC4loN+kcIaf07F527Sql5nvMFOo8czD/CkvYg= 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 TY7P286MB7090.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:323::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9745.20; Fri, 27 Mar 2026 03:54:30 +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.9745.019; Fri, 27 Mar 2026 03:54:30 +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 v12 6/7] PCI: endpoint: pci-epf-test: Reuse pre-exposed doorbell targets Date: Fri, 27 Mar 2026 12:54:21 +0900 Message-ID: <20260327035422.4020455-7-den@valinux.co.jp> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260327035422.4020455-1-den@valinux.co.jp> References: <20260327035422.4020455-1-den@valinux.co.jp> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: TY4PR01CA0004.jpnprd01.prod.outlook.com (2603:1096:405:26e::16) To TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:38f::10) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: TY7P286MB7722:EE_|TY7P286MB7090:EE_ X-MS-Office365-Filtering-Correlation-Id: f876d0cc-d193-492b-ea0f-08de8bb48c6a X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|1800799024|10070799003|376014|7416014|921020|18002099003|22082099003|56012099003; X-Microsoft-Antispam-Message-Info: blaK+0KA6eA8kGOhDyMB6XZWmcFmo0trj04eq2MuhZ4ZQ3e7ftQgRU51vvyyI0IgtJAccYlmOecJZQxVq6itd4Q+pvyCJmHRVo42DrL6DV6jKExOxh8g/PjBlnsyeZ0ohlAFsGxdr968lFaKR5Swi+DoHukg8t6U4aK/gqaS8gmepuVXXP8IudZwBD9AYN+GS3Gl71ZUJ0x6zN3DDKAZic2My4XkrrSUVtFHP23eKVSLvoqUFm6p5WxRUZTJoGlZgxTrPQ7Y9ZDeaNHXwNDWAl/f5ZTFrCDWvo26vHDmOO0PaoSGLKXXW5VP0QNLBM8F0FTYHslMh2vMTDnQoKSP8K/HJ4+w/X6ILnp2QTaVxiMqTuCh0PmXQ4ekEY/opAVsKpG7aWHHtE6ukpSHYe8uTwRUDMJA+vr6RAMyKjnhFDZzhIx/Pf3cCpAKtgmYQ/kAeyBo1MsRs3iABrtd621tTVqlcUet+ERwbyRFzG24pPvbhrQJb5ZyOEzziAUqiLPFw6Zrp/PlSViR4lwLDnNOd8SK+Ol/DeK0GcNMxKoGvelVT4jq1aNE87b9+JJsCA0UVkcIq7moAC7vEJYOUiIt/5i6/bOg0NS31T4ODcpIl4mkyUzUbqU5GzCK71+iqhmfi4414H4xM9FmCPO8CWWRYjVQr/oj+Md5xiANsOIkBEjxU0uPgS6GhcnmqjX+AnAILUJNttF4TJ3s8cPTD6jLM4kVGeai5FFsct68USH5u7cfPMaENF4UYXio4uAEuXQ4EKr0IsHyGLjJ2RRScqO7OQ== 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)(1800799024)(10070799003)(376014)(7416014)(921020)(18002099003)(22082099003)(56012099003);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?kT/QfxALEZSgsiXrAhv9pZfAbUHTZTi7DgFjXAp3SSLwpcN7B/fFdCvZpDBn?= =?us-ascii?Q?pFBtELCS0Gsq2SUYA6bETKARhJGwxribPVMygJDgo3Zz1npjlvt/hX8x0UTo?= =?us-ascii?Q?5Eucs+OPQeyshqLqPuFpG2h4De64qFnk+KZys4iBdQkJDTeH9ZWMHvlMbUFf?= =?us-ascii?Q?2gZPlOv4OBlh3PHC94ESTc1UvC4yw+6/8fazozDWLAdlLfvIwZtmNngl+O/J?= =?us-ascii?Q?nFt3AdVnDEPx6V8sAi+QTSianjC26b8kVH4QO1t1aWrY+cdRwPs8EjDJyocc?= =?us-ascii?Q?loEm7yIsz70PNxSjX5m1oRSv8apZxaLSN1jljPV+VtNwUJMVJO/lIEt6D7Rd?= =?us-ascii?Q?b/ZR/9Nk68VVdwZe6xhPPO5et55RZoFf9vfz6SVwFvyf71eFOxF5gbObUfL3?= =?us-ascii?Q?X2xd/SLr7LVKzCyHn9iZ38nYbuCn3meiSvOSuKi+EktqJPqbKVUE1RMDz9Zt?= =?us-ascii?Q?MasmxRzhOXnt8tuF72pWdKFk06NNWz4eyI/XnQm15JNF3zBYa+GFuNR4LLvt?= =?us-ascii?Q?C28+bi4SktIXWW4KIapzLROKQM/SMGOG4DGdgl1Fl7ETd4C2IgTZ6CdGwFTL?= =?us-ascii?Q?TuyF1NkO95OQy0gQm0UD3OejOfcPPZgu1L31WPioWFiC2740ysnOBLMYr2GK?= =?us-ascii?Q?qenJwwvOcq/A0lL4hAFI8JrvOuSFXOmnu98PwJ50DrrNp7okLRPRGJEmFXNy?= =?us-ascii?Q?0pgUlhCgDRIhJxHOBKDPv0efAfGtyfQDjOwbBkYQI0cjcSiJM8603NPIWQG1?= =?us-ascii?Q?qmPVJ2rAWBqYFkUusRBeoQjCS4CQ+e4GKPGj2GCz8OHmdEZ+tWTEX2Kgr1XZ?= =?us-ascii?Q?YQthucqrc9AKdpeauTdIjSr+9JaJertCgf9NKPPnnt3L10PYDBWMZyo51T7i?= =?us-ascii?Q?qFy3YVxeJGkHFqPwr/V52J+n/wMfhdyANp8smn05WROTGLkuOQGQoTjzSJX+?= =?us-ascii?Q?ZCHk0QGh7WO8RgBDwb9n/NGKAIcZYWixfh8vAqIFRYb2tlQ7KTIkbOXeG1cJ?= =?us-ascii?Q?3eS3zm8rjsPpQu3oMWonfkC1MPobAwDGv6nQ5L0rLCI53piEtbtofYOqKiTa?= =?us-ascii?Q?0WtrISkrQgjY5tAwF75WuO5MyhL8+G+hRLvFSsnSPHw5IVgx0DQ4wAhXzh2+?= =?us-ascii?Q?d8UofJut9NNq3sGM4lNljIq2eKAQuhVdND02/hn1f+xohuoQutiIOoV/TBQM?= =?us-ascii?Q?gz4g1ZkNioKDbnADbL8QiqXpMDHewUTcWLSwviRBw+4Kwt+hYTNDYmz1tm53?= =?us-ascii?Q?UlZl3O5S/5pMFxyd1MNsmlKcZmJz2uZ4UxOcB3dqp9c7bf63berZGktXdA4a?= =?us-ascii?Q?QsnTxXIYW3D6doHME6eKT+A3EYbEOBvWPybrnTXYOBorXzWZm+gIOris59VT?= =?us-ascii?Q?MUIgV8EsNNl97b+E0L7rzYZ7b1WAjvSg5VTzjZijOjnk51+ilMTFZRsTsQzM?= =?us-ascii?Q?mQsT9Gw2j5AxmCCGjE33ncrzUWgH59au7L49uHiM0RFkpbZrSnMHUgpwLzXR?= =?us-ascii?Q?3jhf+N2Rx9u8ZDY/ZifczuVHl+qJpNuYfGah8Rqaxu0mqkLq8MRCszs9nG37?= =?us-ascii?Q?rXp+k8dDLLn1t8emfGYAHT0taO9A0SFYSDr/m34ztylPUuim3e2KXBlu3bgg?= =?us-ascii?Q?xQKtq/epMfPIsWmTPD3VLFwFN/W1dASHEPzqB6NGcX/anMdxa5vh4hK4zdb2?= =?us-ascii?Q?b6Vec6UP9kNfTgK+iYmyeH3Et+uuxkHD4eoYbWgIxALIWC1SZwsyoUt2Sl6y?= =?us-ascii?Q?i2vD3U/dflFWyoGISRjcpcLnZ536fA8GsmNpw0S9Te9ZheEBHvmy?= X-OriginatorOrg: valinux.co.jp X-MS-Exchange-CrossTenant-Network-Message-Id: f876d0cc-d193-492b-ea0f-08de8bb48c6a X-MS-Exchange-CrossTenant-AuthSource: TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Mar 2026 03:54:29.9906 (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: v2/8Kjd3jH6vUcazVqMFzvPXD8FLUZ5OkdQcRWFxsIz+OjHo27jEpO5HTqShphANZf9jBCh99Gh7UWPqBAfN1w== X-MS-Exchange-Transport-CrossTenantHeadersStamped: TY7P286MB7090 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 Thu Apr 2 09:44:02 2026 Received: from TY3P286CU002.outbound.protection.outlook.com (mail-japaneastazon11020114.outbound.protection.outlook.com [52.101.229.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 BB5253750A7; Fri, 27 Mar 2026 03:54:41 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.229.114 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774583685; cv=fail; b=YsH+8BGZ5OCyRTCWfJ0FMF9oRyEhPY+Ak+JGdO34CjSwcEpdd1CLtXfs3grr3EHEi3uzw+0I+1j4I8B/8QhOK2AEHkW9sz8hTHhGW55AJlDufj42nuzGFlHTT7Dc+7TQwL3A+PZHf1FG/4VdqR4eIRDW/o+lFt0gvQqZnTrjPBI= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774583685; c=relaxed/simple; bh=B4rbh1Ems44OpgdoI6e1gh2sq5DROt0kGDzKLXhnZLU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=dyVZQTQie/mhv4UKrOkRhdy8oCJEZC4lcRSd+u9dgbdj+Ca88Fu6qDwoyl66w4otkl0x32VdO9x1Jh28ED5xUdLDrpVFw63AxnMH5oEPyJnpPF0KM2jwUZbKGqdSCorUX09TP613oLYIsbbVKGXQYQaPwyvO4P2oPXkZilfSErs= 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=wSaxy9Nm; arc=fail smtp.client-ip=52.101.229.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="wSaxy9Nm" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=oY+nTS4aTDCIVcx6EIF3nT04ScCDUKiP3fPpKxpkQK9nZSvF3CWplXnJNex/wemdVJhNORic8vlLrn6X0mGU3Nvalz4N/a/7QWjMKIlpQ2VLrV1E/v5VrY6yc0tm6uRh43ir5rgGxZBWYqPT9oKmq+tiGO6moLiDPFqRB7faOUJMEH/zXqq2r1W7sQDx1ETmGS7YYxf7c2qDmnHtyrcSL1bvFPO2GXMCEK5rDo7F8xCipCRr+/47nc6LGS3x5W+p1QhW6vQacGoALd84K7uaFTIGR0ItR+m/9TFHYWqtcnjf0TeeLXQlULzkB2ndwRS2alAt+uUfRWyTgk4wIElN7Q== 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=h/8fb8TGVZ2wRfIziBAcqkzxaIYB/us0nO/tCrP+47w=; b=lAydB4llHuuo8s4hD6w5jw3RxycAQyIUUEQhI+FIakqmdAF24x5+CILSAYlnDHYSrPmN0C++ukb4yR87Qum8uzGFkmFyCj8sljhNrDX4mzNjYjK4PtwF/2pM3TVOfIMZ2d5J9qpBJISWcsdQxt33P2gQt0lrfdkwhdOPSdSV9cSVNmyrOIV76jXHmA1/BBhLCBZWRGKiLKN7jRgYpF63VlrTnmp2Fa2GT+NSDVB1O9g0QtypCZBQAt2hJ7Zp+MLYaKIeHpljzsFby3Oi/JVdXFFNg3vzt0KUYojOJQ48q5/yxwW8s7XX+BLIyy4Jg9uNrYqLeA49P+O7ZPep4Qym+A== 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=h/8fb8TGVZ2wRfIziBAcqkzxaIYB/us0nO/tCrP+47w=; b=wSaxy9Nm1a8bVklDQJb7gxbxk+eQPwCr/5aMNEtKqXHJ5ZJVuHd4bSqKtNHBwfnYLKnZqCa9lY2j4s+Z05J5+RzUa5d8lUbFiY9m+KjrDqpznmD59yXPWMH1bE5eiAf/mo8gR9WPhe8L7uazulzd0lNOdXEu3XiBT4CJEvfEG0M= 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 TY7P286MB7090.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:323::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9745.20; Fri, 27 Mar 2026 03:54:30 +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.9745.019; Fri, 27 Mar 2026 03:54:30 +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 v12 7/7] PCI: endpoint: pci-ep-msi: Add embedded doorbell fallback Date: Fri, 27 Mar 2026 12:54:22 +0900 Message-ID: <20260327035422.4020455-8-den@valinux.co.jp> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260327035422.4020455-1-den@valinux.co.jp> References: <20260327035422.4020455-1-den@valinux.co.jp> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: TY4PR01CA0002.jpnprd01.prod.outlook.com (2603:1096:405:26e::19) To TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:38f::10) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: TY7P286MB7722:EE_|TY7P286MB7090:EE_ X-MS-Office365-Filtering-Correlation-Id: aec3e780-6b7f-40a2-a75c-08de8bb48cdc X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|1800799024|10070799003|376014|7416014|921020|18002099003|22082099003|56012099003; X-Microsoft-Antispam-Message-Info: aFKNtbKRcQxa/kWF/1of95Z8NJWK1ePTVWTf51OqSUKTBQcxHkJhqFVyv4+zXuK6mUqr9hthGsdCRaTB4/zeIMnCNTP6ZHZzI47rYLS3sMZQEfmUE8WWMcXcHOiWQwHlwIm4PN9iqHW5T+0iUBiEc+5bhIoXTdQawzbeXHLVvdQPCU434978zE8toP3WYEqkchZD8TqvifdxgXFRJCcfgmOjZVegiZkTcI4MfB538qsJZvOMfdIGqSqrIvxRIvk39mffWO1lc8IwuI9l+nEDEGBqYOrawp1pHhKG+DS04vJ9ZRfkcgzVNpvC33694Z94E4ayLYev6edvJk8lZxEdGeYl9LOEzi6GhzpWyqk/HjtzNYftVNcVItl3M/lON789s7UMPGgbcQdEqdI+v6iJTnXEF9Ae3YEQPJZ4Jxmfc7uThmjvi9sqsNv2kxErbxaFy7kwOlOkrdwcBX8M9hjSKU/0C8S6vQwrcVA46avOxG6weQnTdt2DySO9+SHNLXCXJPCX5LyQTSqpPV1fheLOmceGmrH5z0FU95mKZXQDKRL+S3XOyz+i9mSod9gue4dbmwYBrvfZWofQ3vGEU55uso9aKboxx+O95sy/0mdzGJpFtOWlfUxr//XM0eSaa8hSHDjOngiO3QnupPsZtzEBHxNmbi3MU+TsYW5+eOzEaszwMVG/M1R6vPz4/6mCilo5WoT6ih2Z89M2AJ+f0gGsngDTHwWQ1gZvpNBgr6Cs8b6FF1kRSUOr7qbCJX2OXqeq1eSFdWaVsOm+y4bm2HeW1A== 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)(1800799024)(10070799003)(376014)(7416014)(921020)(18002099003)(22082099003)(56012099003);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?tz96X0ItyI4Vc9lsPjoc3gNwpUZRiYCFJnihVDmJVJsyaL1g25yWf1HgA8zS?= =?us-ascii?Q?prU1QsQIssrBHoVPkvIjVGvAdtEGE552cLB4rAxPQRdFQqAvVsx3QZkNtwwZ?= =?us-ascii?Q?SORqwOFE/a02KMu3HAkbzxSBsTfuOwOwC3b/pGVGvYh90ggyD/c3zJhe21FY?= =?us-ascii?Q?RsyHbvUPn0lv+QPLJlGmbKkw+ReUOIvKEDUEydWOZ4Pm3fwyH5pxvx5qrIn0?= =?us-ascii?Q?qCgW03dc9EjoFCORI8qKgTPhVBwpDz9zAIhTaK/g8XlQlx62wlSp4jzXtd40?= =?us-ascii?Q?15xQb0cOgpclBD9lzFOLej3EFDqi8mf35Km889ISQIQvMdUcBI8nPcOcgeTn?= =?us-ascii?Q?UiRBmOyXxgCIxNJku5zaDojjRsqctHrDtOcFUIxR1+77Xim8qjHQQw5bulkA?= =?us-ascii?Q?BjiXSL77vGsxJAmUAX+7bLVPW05vP3CFxWzr6D/gNQgaOm+cR0H4mFTvFznv?= =?us-ascii?Q?vhgpgWto4+ntIu620AIhOCHuCsQ9LY/8K2FMP7nyw5KXkUDyBHiQ8vy4Vtqp?= =?us-ascii?Q?gDDEs2lP5aM6t8KEAk500CquaD694sgxMhMN598PAsu4pZ4EXZ2HjsKKzj8J?= =?us-ascii?Q?Kgqydll5s1EXQLBD7n+V2N+4kBeGxzbSyyGWJluUhDl5UctOUIQrZ9qLzQbw?= =?us-ascii?Q?BxcuyZ/0OeZjUCjbH/phsSxpdffbyVUNKcUBg30kh8CPIqMpRHS81n1ban8I?= =?us-ascii?Q?dVAyeNQFqFAqBAXNnqzkcp5gi2rsOssNqAiG71NYPI5ca23KsQwPt0nM3AQt?= =?us-ascii?Q?TN6qR/lQoOLi7Vd9DsVjUvnCe2yaLYJH6ozhXqmVhOqggQAN4xLvw6N7D3xB?= =?us-ascii?Q?vhR0Td6Vn6AmO0OYpoaIn6YJXWrdVu+zxe3Y3OjV2swy0AFZr+Ut4isI1zIl?= =?us-ascii?Q?uFtposgU+dSAxhS/+1gZlphGjpVRJT1qtbZvy8eYmh5lhAmg6TaD+nQkmOeb?= =?us-ascii?Q?Nc4QEzIDj8e597v3+Ag9ZvOEYHPwD4E/bgFn5SuXOXYvQ6QPaI4/TxpYdACf?= =?us-ascii?Q?rqIyoFEkO9F+/qqYZzvcSMq/M/PldNDFw1JGk+vSgkV+hgauS8HLJHgXCTjw?= =?us-ascii?Q?fMihsIZmFe42XpC2Zctzs/uD8Z1k5TzAqx6suKHh/BoGKs4a2tbc7IUiAtXT?= =?us-ascii?Q?NGrwG8zJXTARV9nREcMEF+mgUqth/AWB5+NBmUwZFjBEyR6pJIouYy81w8Hb?= =?us-ascii?Q?nJd7p3DoNIbMFBnpnHvD3KQT/xdjNGMwxE/bou/zw1ShXksP2d3cCjjnc2YZ?= =?us-ascii?Q?p9E680c7goXnzVKlPauCiDOBTFcsjuJ2qR3fIxvvSqN2AjaXJ/rmNbKehvWM?= =?us-ascii?Q?e3TgmQbi6Ei0AM6JMNk6bigYYCfGCuqWN31s2z5y0OnV46/0juLTQjxaF+Ni?= =?us-ascii?Q?tqRcuRVZ+/cEJsrdMKAFLZx6we5aH8KUZ2mpXZ4uIAY1gVk7P8EIWIk6lPq0?= =?us-ascii?Q?N0dF7YUjqpkDZayXJL7dias5CZVEZSZhTyKZdylhbs0ZfPo5TvGqbD4eVXXd?= =?us-ascii?Q?Nm7YS5YIe2yzW983hZUfgWrlDvUsGxhB9D5jKT27i4MLORcgZaDqiBCERlMq?= =?us-ascii?Q?egroEC7xX8TXcqqW4ioQIV1BfejSjajaxlIQI0klqzKxh6EwNjSgpJY4f+Cq?= =?us-ascii?Q?fc2rvn6lSAIXnHIVLgb7dDu7DT1Zis+6REFrx+KXZACN6hrMHFvesgGwDIeL?= =?us-ascii?Q?F7MTJFpZCgxj7gdE2k3eaq3aNfavlCU/VSfHXVh2cNwHPmeIKF0BFhZ4y9aF?= =?us-ascii?Q?7CFcNgT20PQvSim1rBimw5hjDBKRZQWZJLFX6I5hTIdECLcX5o8Y?= X-OriginatorOrg: valinux.co.jp X-MS-Exchange-CrossTenant-Network-Message-Id: aec3e780-6b7f-40a2-a75c-08de8bb48cdc X-MS-Exchange-CrossTenant-AuthSource: TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Mar 2026 03:54:30.7524 (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: dezn0J2IiOlGeTBIvGd2QAsbUOM2qQl+CDPG1WbQCdvZ8ZUs1w/KZTsqdZYfmblCEmOkZ2AhUbGcUuRVH1TKcA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: TY7P286MB7090 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 v12: - Use the new pci_epc_count_aux_resources() - Add TODO comment and defer multiple DOORBELL_MMIO resources per EPC case. 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..0d720556205b 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; + + ret =3D pci_epc_count_aux_resources(epc, epf->func_no, epf->vfunc_no, + &count); + if (ret =3D=3D -EOPNOTSUPP) + return -ENODEV; + if (ret) + return ret; + 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