From nobody Thu Apr 16 06:51:59 2026 Received: from OS0P286CU011.outbound.protection.outlook.com (mail-japanwestazon11020133.outbound.protection.outlook.com [52.101.228.133]) (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 F34742F8BF0; Tue, 14 Apr 2026 14:16:25 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.228.133 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776176187; cv=fail; b=ucIBtWzQY38EzBRLURaM0nADjGpyQLvtoYyXHsnpwWICLEkCZ0wIXSLd4/1l/ekMaFjiXHN1clpqh8RKAKaMHGG54LVM5HOWXIKtxPWxALf+iaIMWDBFUz54eGmWpdDeDugLlS92tN0gRBx3hen/IyEtK7S3UzA2R48cNi68ZHA= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776176187; c=relaxed/simple; bh=jSyxzDyMc+yL3KObyWMDVtqAuUeHAO3mhGBFmXksR7A=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=OkMxnHRGpCJTwS7RPpa1eVwYFHOEHBxhOwLwreLRmGffyjuIQQ3Q2rHAD3v/FHFmbreCPQzO5z6DKMLtSx8fuv0paSLVhStaZCWcCAHffH/4V9VqJpHJR9JGc6iI6cvLkatkXFSocCU4sW1tsSUDaeGC8qGhgzET2RLZGOqCVfI= 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=F90S0QhY; arc=fail smtp.client-ip=52.101.228.133 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="F90S0QhY" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=A96201vMrhT5ZXwoaVW48WBURrQDeYOMK3MGprR5/Oq7ch9m6BsNoaYFvJKSaMl68GYXCir8f2gJT7mO9MKvPLOcBYep5pNMilMVCVpw0vtljrZfZOsIVIw1DrknPzSYLpY6PSrInGpOYncSbD80NAIVZ11UZGL87U5W6bfbwy0XCyFqQXsz1iXpqhiajXoi//nIuAodkeuPdTGJJKhbw0elB+xDocUboIWT3u7ZdJgOVr4aJz7bsR5eD/W5G0vH+Fp2o/xDH0ZdP/JjCn2AByYfOtR7ypQkdqbbs/NOdTXh2gjB/15mnivFWN22fDpch15JK9o05Ko+YJ85EUgNLw== 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=/4HnJvHpfcGaR8/bBQQX4t9TQMonu32ecofiMGCq9CA=; b=qtfmjtHGkuTbjH/LrYNrmKKEhzJo2W/qF45r74v3kXm3JPsfi5S+FMHaANxWekDU2D/DZLeWKnd0E+scobrBpXsV0XpZEQWoIeIgyb8fweCIpsjwa/gWM74RmolI1HORTY9kpP3+IE/C5aYLRBK+DSbmBRgAOIdvjAFI0oygflmfiUfKGkG3jKUf23PKnAe5SawEfdk5Tuoz1RvjJOeyXSEO6tWF72EGFXPVf5uwuIVR4n50thGh25mMb8SZcwIMvrKvOdWTI0WssBcBJTx0UwhVVmppBATXru1Qnj8s2C6k3KLggZVTuZv+dsBSQhvqqY0guZSMzyyJvj/VmOXlFQ== 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=/4HnJvHpfcGaR8/bBQQX4t9TQMonu32ecofiMGCq9CA=; b=F90S0QhYr2It4KKgsdmTGcLkjWiSz3schs9UoOw43Um4O2qFoSJYy0YHqDgVY5ycUOn/4UJKl5YWkZJQnB3PeKY6ECflUYqZp6NcYbFszk5uYayubbgayzgTs3vJnmIZQILTkbdVCrnanBN7dI85z1SlUVue5S7xtinTqg57280= 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 TY3P286MB2529.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:222::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9769.48; Tue, 14 Apr 2026 14:16:23 +0000 Received: from TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM ([fe80::2305:327c:28ec:9b32]) by TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM ([fe80::2305:327c:28ec:9b32%5]) with mapi id 15.20.9769.046; Tue, 14 Apr 2026 14:16:23 +0000 From: Koichiro Den To: Jingoo Han , Manivannan Sadhasivam , Lorenzo Pieralisi , =?UTF-8?q?Krzysztof=20Wilczy=C5=84ski?= , Rob Herring , Bjorn Helgaas , Kishon Vijay Abraham I , Jon Mason , Dave Jiang , Allen Hubbe , Niklas Cassel , Frank Li , Bhanu Seshu Kumar Valluri , Marco Crivellari , Shin'ichiro Kawasaki , Manikanta Maddireddy Cc: linux-pci@vger.kernel.org, linux-kernel@vger.kernel.org, ntb@lists.linux.dev Subject: [PATCH v14 1/7] PCI: endpoint: Add auxiliary resource query API Date: Tue, 14 Apr 2026 23:15:08 +0900 Message-ID: <20260414141514.1341429-2-den@valinux.co.jp> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260414141514.1341429-1-den@valinux.co.jp> References: <20260414141514.1341429-1-den@valinux.co.jp> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: TYCP301CA0071.JPNP301.PROD.OUTLOOK.COM (2603:1096:405:7d::18) 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_|TY3P286MB2529:EE_ X-MS-Office365-Filtering-Correlation-Id: 6cced81d-566d-4a77-973b-08de9a30686b X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|10070799003|7416014|376014|366016|1800799024|921020|56012099003|22082099003|18002099003; X-Microsoft-Antispam-Message-Info: Nv47dTs/Ni8noQtu3SKuYQ7p4ih3nRpVw4DEAeVHgh9lToD32Nhlw79BgEzkBwL4YImN07TNAkfuPQwGe7ZRx0Rzsd5nmNHiBXKQmttjkA7y1ycDfDbVLBYOWvuiNroSyfftE8yPpasQ9V1jD3H8m4HhEp/K5nFroci7EP6hi2DXUanCrZ9yeTiZnCJ3CRtofeduH7fupG0jYOnfFQFbYzhx45T5CiPvCvbTZOou7WQP3IFGo65ECUI5xjIcR4ycSxLGEa0vheD6Xv//UtLx64+nkNF47stNwSE/mhWb2Gea6MdoCbBSwSLi0jZWHyUYX0K7IFShzKuat245BrG0rQgu6Usk0PxcJM7s/Hsd/q2YqSQTECujbbyfC9f3byJffFYSjjjIHKbRVuMwlm1tPSl5yJM0G0A9ECFeXeXAhweo1jTi9WEeKj2TS3jbmsYVO6RtyDh1bywMgeM7yOEGh5IpvtMW+bMiTU2dQcbR1Wst0FsYBNBLQJ4Zkt1sb8VK/y0ilYWd9UTT7+LpilcZvHDA2SNGCJk2ODW6QJNWlOxnlkqSXR0FxMeD5R245nkPYkPglcly7l6pqS86DoOYpbgMK40hkWVAFw3DDQyRbKhOVhXl3lMcrKN/t9/baFQlInL5cw6Ai8fDwM79RdomSGrCs7m2f14S/qc1H6w3uvdWr/UpikdH1sBPDazuPuwcJliVNuErRFE95QHymZJLCrOgSqpCGXCCN3i+ofeZ4MHU0MRxushQA9vVLsMFDVCN9FSVTLlS2uCXBo1lcIiXhw== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230040)(10070799003)(7416014)(376014)(366016)(1800799024)(921020)(56012099003)(22082099003)(18002099003);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?75rNFHYdZOunYJueJsScVuJMKeOAa6yU/ismXcPizjrM+kt5RdwKtsAvlZc5?= =?us-ascii?Q?8sqVHejGUXM5OJONNXAnKmgtpqdQWJE660Y0Vd85cQ3AjkAacaAMP/ZASb9L?= =?us-ascii?Q?5XPJfitqnc0kmgi6gFAfhYl0P+VRDadrrtkOHuqhSINOe/nNbmzP0o1G28R8?= =?us-ascii?Q?PBP5pcKvL0LElzEYEpPVGEl9pVbA1JEaZSbgkXDRWF5QCm65H8V4XeD654Tb?= =?us-ascii?Q?L0flZ/tBu9coQqH77+XH1/RAJn02pgbOUUWkG7FGS62J1FezDD9+l5Vy4ygx?= =?us-ascii?Q?E4LYCtLVJgBM5WhHVVB6cN6/dohXZY5jBRy8DxRHYWUvAUn5mnmJF9ADozSX?= =?us-ascii?Q?EeA7MDc7rBZGfQN2DeTAJNMOsVf7r4rqjkZg0QjPpa2LJxQFR+kSkmkTdAHG?= =?us-ascii?Q?1KioVfR3tWaf2aNvccTExWXi3qj9lVmDX73wpJSnkKEJmvNKX0DA9j2AkAR6?= =?us-ascii?Q?x19CjCP+O6Yrt/ZhsOFwpF/ueB2qTNNvzSlm9LKB4dYOmJV7LLQjHXsYYhf3?= =?us-ascii?Q?iueLwb6uO8EspRzj6i/v5gQAPy8gR6X7dLDGDgs8BLxqPgzJHwOpmgotYfYF?= =?us-ascii?Q?THk0mMzPh0efCpnoOGgBxQ0z4Dd505u6UvR+28HEXWJFbomvXCduegnHIwN6?= =?us-ascii?Q?YsIj/c9sU7xZKiYY4Mi5yUeteEyWkqTl7NQW6+PJsG83/cdmaQ3WUVh4uFM+?= =?us-ascii?Q?PmuKiH+CotSkEk/w6xMGaknUtAy+EP54/dSiaweJECjFdJSgIQSsMjq7Enjs?= =?us-ascii?Q?7QyWc+Z9upoUKz8LI6y2HU70+FkiOqpCVRNTNAaXIOxex4Zbc8o3Zu7ydEP1?= =?us-ascii?Q?feaYWBiuaa9lLTa85Qtn0FnBnlrsTv0zAMTHeW1wThzHRyWytwEyI3w8IdQZ?= =?us-ascii?Q?6tnDffXwayEBZDjbeeXy11tEdk6u0dPb/JG9lnpkgAJ/kOVEQ175jWZ4/GMK?= =?us-ascii?Q?fc416KkO+TOzBeOYrx8epzw7hLRoR0p0uYkraEubZ0dNjkCXqcZmxJooTnjF?= =?us-ascii?Q?mBYDMVIlrBF962gDwOWBAHvkNPaSxzldhz3evbw5gYT1bs/7pIYaur2/mL1X?= =?us-ascii?Q?CLWe1pp+sEqZRqw60JTYc4qyTaGPXWCZcwnNCDoNTA3qTrRBd5DJNJIb4avR?= =?us-ascii?Q?nOTi9346PAi3p0MLwGgCkVByR0/sFC3+/FVD/Q9tESTFQq1U8SR5RvAa9LPV?= =?us-ascii?Q?5w44JtbBOaBSj4ZDTh/v8O2yyHhfFj+wI1PvOgd8iJAmcfw3EFfYT2KzNirI?= =?us-ascii?Q?Nqqi16hEpNTUcDJcNVsSg7HHwoghteNbqd5rz+YdJiVx8pgjnLtmjKS694KI?= =?us-ascii?Q?x218OebgdczLEDHrBZOFi+L6sE1iDTyW8r1MjYNjADseyOpZBbIzaQji6lQG?= =?us-ascii?Q?rb9zZu/Vos7wNnrq3M6rERI7avFt9ShWxn9HYCIB+SeY6Q32LLTuLVeUKBfv?= =?us-ascii?Q?Ra3QCM6nyCpfZPtOcD0+3dR28vj5cUalFI5EYwtqn39J9+fmik1oQw4GjHtN?= =?us-ascii?Q?DDFRgIkRMhngnavNjq0yLkbFl+qcWoM38d/M9eTQCEGy4EK/ALGGq1BfbXQ5?= =?us-ascii?Q?SYHrlE7ewnfAnp5Dcf/hYEvlIjOL30oH1f30Xx2AJvXfTy/S+lw1zZJ/fW+M?= =?us-ascii?Q?k+fjmet/tqE9Xj6jM27S9n/tIWF0zL0YrmgHi9kkRwTZLuDRHXpA7Dqe4q0N?= =?us-ascii?Q?TNh5u/tzHi0Xy3jIU/Rek4OY17rjCe2B92lonq0ql897SFeuqp2yPslXdnOt?= =?us-ascii?Q?x8QXceHTQlx8qwPz9rilLb35vuSV2rMRsii01XqtlZjl/50iTX1R?= X-OriginatorOrg: valinux.co.jp X-MS-Exchange-CrossTenant-Network-Message-Id: 6cced81d-566d-4a77-973b-08de9a30686b X-MS-Exchange-CrossTenant-AuthSource: TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 14 Apr 2026 14:16:23.4654 (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: leFoA9I8YDZRW1hE1DkojXrrUK4nh2IIHt067mYdvzSL7m0nwBh/6yrQfhsowZcn9s2GzeEok7a3SqSuV6VKCg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: TY3P286MB2529 Content-Type: text/plain; charset="utf-8" Endpoint controller drivers may integrate auxiliary blocks (e.g. DMA engines) whose register windows and descriptor memories metadata need to be exposed to a remote peer. Endpoint function drivers need a generic way to discover such resources without hard-coding controller-specific helpers. Add pci_epc_get_aux_resources_count() / pci_epc_get_aux_resources() and the corresponding pci_epc_ops callbacks. The count helper returns the number of available resources, while the get helper fills a caller-provided array of resources described by type, physical address and size, plus type-specific metadata. Suggested-by: Manivannan Sadhasivam Suggested-by: Frank Li Signed-off-by: Koichiro Den --- Changes in v14: - Fix whitespace and alignment issues reported by checkpatch.pl. drivers/pci/endpoint/pci-epc-core.c | 80 +++++++++++++++++++++++++++++ include/linux/pci-epc.h | 54 +++++++++++++++++++ 2 files changed, 134 insertions(+) diff --git a/drivers/pci/endpoint/pci-epc-core.c b/drivers/pci/endpoint/pci= -epc-core.c index 6c3c58185fc5..831b40458dcd 100644 --- a/drivers/pci/endpoint/pci-epc-core.c +++ b/drivers/pci/endpoint/pci-epc-core.c @@ -156,6 +156,86 @@ const struct pci_epc_features *pci_epc_get_features(st= ruct pci_epc *epc, } EXPORT_SYMBOL_GPL(pci_epc_get_features); =20 +/** + * pci_epc_get_aux_resources_count() - get the number of EPC-provided auxi= liary resources + * @epc: EPC device + * @func_no: function number + * @vfunc_no: virtual function number + * + * Some EPC backends integrate auxiliary blocks (e.g. DMA engines) whose c= ontrol + * registers and/or descriptor memories can be exposed to the host by mapp= ing + * them into BAR space. This helper queries how many such resources the ba= ckend + * provides. + * + * Return: the number of available resources on success, -EOPNOTSUPP if the + * backend does not support auxiliary resource queries, or another -errno = on + * failure. + */ +int pci_epc_get_aux_resources_count(struct pci_epc *epc, u8 func_no, + u8 vfunc_no) +{ + int count; + + if (!epc || !epc->ops) + return -EINVAL; + + if (!pci_epc_function_is_valid(epc, func_no, vfunc_no)) + return -EINVAL; + + if (!epc->ops->get_aux_resources_count) + return -EOPNOTSUPP; + + mutex_lock(&epc->lock); + count =3D epc->ops->get_aux_resources_count(epc, func_no, + vfunc_no); + mutex_unlock(&epc->lock); + + return count; +} +EXPORT_SYMBOL_GPL(pci_epc_get_aux_resources_count); + +/** + * pci_epc_get_aux_resources() - query EPC-provided auxiliary resources + * @epc: EPC device + * @func_no: function number + * @vfunc_no: virtual function number + * @resources: output array + * @num_resources: size of @resources array in entries + * + * Some EPC backends integrate auxiliary blocks (e.g. DMA engines) whose c= ontrol + * registers and/or descriptor memories can be exposed to the host by mapp= ing + * them into BAR space. This helper queries the backend for such resources. + * + * Return: 0 on success, -EOPNOTSUPP if the backend does not support auxil= iary + * resource queries, or another -errno on failure. + */ +int pci_epc_get_aux_resources(struct pci_epc *epc, u8 func_no, u8 vfunc_no, + struct pci_epc_aux_resource *resources, + int num_resources) +{ + int ret; + + if (!resources || num_resources <=3D 0) + return -EINVAL; + + if (!epc || !epc->ops) + return -EINVAL; + + if (!pci_epc_function_is_valid(epc, func_no, vfunc_no)) + return -EINVAL; + + if (!epc->ops->get_aux_resources) + return -EOPNOTSUPP; + + mutex_lock(&epc->lock); + ret =3D epc->ops->get_aux_resources(epc, func_no, vfunc_no, resources, + num_resources); + mutex_unlock(&epc->lock); + + return ret; +} +EXPORT_SYMBOL_GPL(pci_epc_get_aux_resources); + /** * pci_epc_stop() - stop the PCI link * @epc: the link of the EPC device that has to be stopped diff --git a/include/linux/pci-epc.h b/include/linux/pci-epc.h index 1eca1264815b..f247cf9bcf1a 100644 --- a/include/linux/pci-epc.h +++ b/include/linux/pci-epc.h @@ -61,6 +61,47 @@ struct pci_epc_map { void __iomem *virt_addr; }; =20 +/** + * enum pci_epc_aux_resource_type - auxiliary resource type identifiers + * @PCI_EPC_AUX_DOORBELL_MMIO: Doorbell MMIO, that might be outside the DMA + * controller register window + * + * EPC backends may expose auxiliary blocks (e.g. DMA engines) by mapping = their + * register windows and descriptor memories into BAR space. This enum + * identifies the type of each exposable resource. + */ +enum pci_epc_aux_resource_type { + PCI_EPC_AUX_DOORBELL_MMIO, +}; + +/** + * struct pci_epc_aux_resource - a physical auxiliary resource that may be + * exposed for peer use + * @type: resource type, see enum pci_epc_aux_resource_type + * @phys_addr: physical base address of the resource + * @size: size of the resource in bytes + * @bar: BAR number where this resource is already exposed to the RC + * (NO_BAR if not) + * @bar_offset: offset within @bar where the resource starts (valid iff + * @bar !=3D NO_BAR) + * @u: type-specific metadata + */ +struct pci_epc_aux_resource { + enum pci_epc_aux_resource_type type; + phys_addr_t phys_addr; + resource_size_t size; + enum pci_barno bar; + resource_size_t bar_offset; + + union { + /* PCI_EPC_AUX_DOORBELL_MMIO */ + struct { + int irq; /* IRQ number for the doorbell handler */ + u32 data; /* write value to ring the doorbell */ + } db_mmio; + } u; +}; + /** * struct pci_epc_ops - set of function pointers for performing EPC operat= ions * @write_header: ops to populate configuration space header @@ -84,6 +125,9 @@ struct pci_epc_map { * @start: ops to start the PCI link * @stop: ops to stop the PCI link * @get_features: ops to get the features supported by the EPC + * @get_aux_resources_count: ops to get the number of controller-owned + * auxiliary resources + * @get_aux_resources: ops to retrieve controller-owned auxiliary resources * @owner: the module owner containing the ops */ struct pci_epc_ops { @@ -115,6 +159,11 @@ struct pci_epc_ops { void (*stop)(struct pci_epc *epc); const struct pci_epc_features* (*get_features)(struct pci_epc *epc, u8 func_no, u8 vfunc_no); + int (*get_aux_resources_count)(struct pci_epc *epc, u8 func_no, + u8 vfunc_no); + int (*get_aux_resources)(struct pci_epc *epc, u8 func_no, u8 vfunc_no, + struct pci_epc_aux_resource *resources, + int num_resources); struct module *owner; }; =20 @@ -343,6 +392,11 @@ int pci_epc_start(struct pci_epc *epc); void pci_epc_stop(struct pci_epc *epc); const struct pci_epc_features *pci_epc_get_features(struct pci_epc *epc, u8 func_no, u8 vfunc_no); +int pci_epc_get_aux_resources_count(struct pci_epc *epc, u8 func_no, + u8 vfunc_no); +int pci_epc_get_aux_resources(struct pci_epc *epc, u8 func_no, u8 vfunc_no, + struct pci_epc_aux_resource *resources, + int num_resources); enum pci_barno pci_epc_get_first_free_bar(const struct pci_epc_features *epc_features); enum pci_barno pci_epc_get_next_free_bar(const struct pci_epc_features --=20 2.51.0 From nobody Thu Apr 16 06:51:59 2026 Received: from OS0P286CU011.outbound.protection.outlook.com (mail-japanwestazon11020133.outbound.protection.outlook.com [52.101.228.133]) (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 EDAFF31159C; Tue, 14 Apr 2026 14:16:29 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.228.133 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776176192; cv=fail; b=CgB+qOVCpLHzQzVfJCGxK25afT6moclExouJ9aJZQJ8WnBbyTTHrGnWGW0kLtsbndSgxp5JuttpsAxIjeQdy677MTAMzuUGXsvuMbyszVAPCcpqulPnPPeO0khg1I6M0GY3nu5E5EFehVoAiGN2gsN4WG271THjGYJrZHzkOCUY= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776176192; 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=mHoTlxCaWeOFHLNpE/kAVgeR4AHTsM2pw6nxC6+nHZIvmVQU3ImuAEKioO4KJ1owu3qaE2QOVKV2vZ0wEeTx+g4jVxaPlft73EshrQHPIrj0ZoRoPB7L6cEsw0CEHwlzuat9d5zV27ueoq2lTp0SaD+4WX4qnDccQCULaTRJeus= 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=X1gOPnNq; arc=fail smtp.client-ip=52.101.228.133 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="X1gOPnNq" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=nUVxsCvIpsc/7olVSsey5YoN3tqa2We+PACA2zZ0bmj5Qidm9w0mX0LVuh9CVePTAdhZEFHZ9rkCoS3gwjyfVGuRGvEKmF4hPfcKeRbXA/APi6RPI43MRFyoE+K/tX3EDpYYe9w5yVikfsFXvwTmSSdpuPBfmCOpWXCqcGStTg9r5wpdtkyT1YbUI/RxVAqUZKw0cZaTwadPEWTky9oSv+bfYE46AzqcORi07FqLn01JL9aFcnrIvall/p8SoKmgxZW0ifwP+NJ6ECj/tsD0NBbhmhvi0FbBlcjXm7qwS/QEMFkem7RAJFoJWUAGaHr1CULQ2U9tYPVpOuY/nibZRA== 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=f/voevavIyofUZnd4+RCdZQICdnQamrppVfS9yR+PJAsYEVFgdMO2V4JV6RSCc/X9526iQQNjkt2PfPlx0Y1/5VQe9g+h+MV4EmmG6J9krRakq+u/x+yl0TA28Rxg3Oa0STzJ0JYQOwdWWfKreIU7H++RZf2/0SRMIEQGbzHi7FbbnHXw62Uc+OrxD44Ay8Jwyx/IgYeYrtDL6iRPLawBjgnirGjE3ro1P9+YBsiObnh7nG5JkJNjuS5Bjr4wuEdJneF/+5lRDfe5NIkv3sCsNg1N4RTx2SMN9YLSZrtmGjvhkL46WrhGDgDaFqhjawCFHeXzZ+7iQ7/Gbg5PFVZzw== 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=X1gOPnNq22nka587Kp0BG4RwlhqHveLw3ZDhJdiq2MXtjFmahRs6lZ2PyMJHMF1qqcEPz/rsrrW8K8kEVOA4JnvuVYCZngtMpcjPi5A4Cub7FvFJHBsdY9ja0G+VBu/WowJB8Pug2fMNBEJQ7xAW0IvPY2O92Al+mjkh84cOT3E= 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 TY3P286MB2529.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:222::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9769.48; Tue, 14 Apr 2026 14:16:24 +0000 Received: from TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM ([fe80::2305:327c:28ec:9b32]) by TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM ([fe80::2305:327c:28ec:9b32%5]) with mapi id 15.20.9769.046; Tue, 14 Apr 2026 14:16:24 +0000 From: Koichiro Den To: Jingoo Han , Manivannan Sadhasivam , Lorenzo Pieralisi , =?UTF-8?q?Krzysztof=20Wilczy=C5=84ski?= , Rob Herring , Bjorn Helgaas , Kishon Vijay Abraham I , Jon Mason , Dave Jiang , Allen Hubbe , Niklas Cassel , Frank Li , Bhanu Seshu Kumar Valluri , Marco Crivellari , Shin'ichiro Kawasaki , Manikanta Maddireddy Cc: linux-pci@vger.kernel.org, linux-kernel@vger.kernel.org, ntb@lists.linux.dev Subject: [PATCH v14 2/7] PCI: dwc: Record integrated eDMA register window Date: Tue, 14 Apr 2026 23:15:09 +0900 Message-ID: <20260414141514.1341429-3-den@valinux.co.jp> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260414141514.1341429-1-den@valinux.co.jp> References: <20260414141514.1341429-1-den@valinux.co.jp> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: TYCP286CA0060.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:2b5::15) To TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:38f::10) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: TY7P286MB7722:EE_|TY3P286MB2529:EE_ X-MS-Office365-Filtering-Correlation-Id: de7d6df7-3235-49d2-f180-08de9a3068e4 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|10070799003|7416014|376014|366016|1800799024|921020|56012099003|22082099003|18002099003; X-Microsoft-Antispam-Message-Info: EtGop2xaHSk3kzn7PvR6dqehgv5xbFHoVUuoNdJZsUmW9QtyArodHbWaTOpt98ZsPZLWUg4kTGNdvqj3hBxtgaTGH8DLjq9sfgD26T0O3JTJcEOl5GL/CXDvuMQxyqU+GVI57rCmdVbBUsM/VTrD9NQvhVmNTJtQ8mF5xrtCr2lDG4EMmk06JMG1Qe2KWg+UQr2JjItkvf/q/SxVTbVPzyAcWA4jqh4wZqgGG1uCXrtA/vwhaJarKgfX0N9Cjr53Z4Mv5hzuYHzJQmSj2KL5Z3czVK+7L/Ix2/pXm+yl9b8zf2dkMyV6wV6jVAc8+v6NnreWCl+BnYY2V6Hv/fUpg1zno9Bt5VD8AMOMWI6BrXryTOUWb+Q5GHAEAq5SOdU+iVyLBL4dxpGnaeHos0JZbQMvOEIQn56geNhCRcFv0hNnfZg0RKbfNfI0oUySd/SSbD04hLGwpPgYBBghaggSUofBNiNhFLRHUU7a4koPTkoxcvzTotZsv7uM5Wb5Be7+Af5XXCwvam77/S8SHFdBZxZh0dPl9uz7X7DRESECb8/6R9D0/Y21P1fvoNoTk/ciPrtiAjlbfPlVyrjtWVulCqLxGYORYIuNtzcXZoTPsrYSo+W/3BgcT2VWT3QyyEWhu+99aaRdbytMrlySnYKf2/PKKIpwNtHGLO45/vYA+PnhHi/7BQRVoTRDSJgswfs//5Sqp+865nNDHmAJe5HBZZQBHpT/Pq4NmqD+yqQorEAC1a9Z9E59bP0lc9M+Sn0tirk069P9WKVCH3dxwDVPPQ== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230040)(10070799003)(7416014)(376014)(366016)(1800799024)(921020)(56012099003)(22082099003)(18002099003);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?kZLumd3rLHIO7KgSglzfzSl8p80FWnjfCCcFMwZCe6UHkjAIdznXnARPaKif?= =?us-ascii?Q?00gHI9zpVssNVZOxsE+IuGOkRzy2aEWhMxrr1MVbHlEufYPZ4mf3zYTv79fg?= =?us-ascii?Q?SwzEkjTVzD8y6uVK2jbMBkbHNET0DKJqhP/z4xKbCjPDBx7uTh6RC/ZzbUZ2?= =?us-ascii?Q?j50IUKOI1Xr6A6PmrylO0y9xV0xNrHwjAxN3bqQGNLhmB3/9p+Ylop1EkDcK?= =?us-ascii?Q?cHIT2NQ6+39v2teKEmO/+QB+nFK60uXc8UfEVRHWByey52nmeXUt9oCSl4dm?= =?us-ascii?Q?woInpO+v7JADn2/jRIFJt56U4pQcDUdBdKmsJCeXduOFE6nVuQhqi0ycmlq2?= =?us-ascii?Q?JLiumetHVEOVoZJDu99GVATCMN7beugfiHLgIum84cYwT7gORY6YENKIjbaL?= =?us-ascii?Q?GAXnCEJ5GD+niIOK6K+URlwfNPO+FSgJLM1Sz9Oxl2ViOQp3B/971nl1TTx9?= =?us-ascii?Q?tyNZGeVnzVq4Iy3+oM+1aIesoCtjIhpl8L1VTw9AwAt1hmZF92kjcjp4b2Hj?= =?us-ascii?Q?kwYemvkBrZsDOw8zQ728LfMs3wttvfVOcA4QjxYrHZxpOKchyujjZQfq3rJC?= =?us-ascii?Q?zMI5RQRMN2iO5Sxj92YESJ7m8h7sfMXVc/xWzNt6p0OgtyNIeGt9GxsBo8oZ?= =?us-ascii?Q?bugXheSGwellfeshHzu6MRawAZDcl6XH1UUjr5bM86L2puTfgKonm5nahJk4?= =?us-ascii?Q?3/QL3bRiVGE3xrQ+3PZtuRaS35MPxcN6BvIist9hYfihiHSni1zImXhBxtYz?= =?us-ascii?Q?sGbSJ5vWcNy7YI33EDktqNw6R8TvCo5vXRvAbPCbfhLJeI2kYgLRVbGdAEKt?= =?us-ascii?Q?HGP2PHHr6EMSWrPSKJpavw8oxYgL9/3H4VthwLx6LlMtpsvQjGEHJxI6m32S?= =?us-ascii?Q?A+xu70idoJxdiFS/Tyc/1F+mtIWBC1+lBjY3Pl0n3j7aQ+sLGyvmiPuX1W+/?= =?us-ascii?Q?qmhYToAcRRB1ZWebb6gGQo+UPJhFLAneHPBxP+ZlbUpV4xARpPXHVIH7tEpX?= =?us-ascii?Q?Gd8jVhKMy8LHGa4oYtHrEv60zNL90IN+KTtyptswRZAOQuURFVwFT0zRSokw?= =?us-ascii?Q?EZnetwhTmGuA4P/T7BSSGIPNsDYLpBSklEj+0Sgcn8UWJCcWH9EYwnVnIpJ8?= =?us-ascii?Q?ocmsHRYMi/OT8wGc/+RzsDSYJTLd8Pp1K1Ka1a1o5tO1/Xy1JAEdJetFxTqs?= =?us-ascii?Q?WVkv5r/+Wt/eoFfVMgMCFULPlXqOnB0gZHJst5AB2f44aVzypQ/fcia/ZHoH?= =?us-ascii?Q?SFSwpAhWF9z7oa5Vy6XEAkebmFsQRo1oVbt9lGiDf/QowPgXfhtuPPA/B2ax?= =?us-ascii?Q?vh2+7sh9APyhc+37WSMq6UNgvS3Rgze3f6kaS37Z7vspPO8GzfPNduE88X0r?= =?us-ascii?Q?kLg/RWYAwAb8CwGOoMKfVUG/TJtkrrjc8J+OLdRmKv3SGnc7hCapVsU2ODJp?= =?us-ascii?Q?hmkHGrylqm39FqY2lLNn1YenFHKzD1Gk2pROxOPs87yeEdb4Eu/R7trmMWAK?= =?us-ascii?Q?MeO9mgRuNA7JfHhq2EKrijtqCFTy53dsaay8N+ZNr/eh3qQkGUtVsX8ys+Vb?= =?us-ascii?Q?2fgIM3BVwqJxsFIc0TkXj822Me43kb4caF9qDMLkoQSDMHiox10J7ABUFmX7?= =?us-ascii?Q?CeEnjsMLZF4NDelmk8ihVCUc5SZ3Gf5QEY96uwudreeVzmp8x7t5f37VEoO3?= =?us-ascii?Q?3SJy3GHEQuJhsXgNMA3DueW4tduoQntDa8rZJSgvlGYDYDqMiQ07rB0WYymw?= =?us-ascii?Q?yOlOUZEtDrZQYp8jxM2s+drZNZv9Fum8UbvvH+r7Suy8ZWO4NmvB?= X-OriginatorOrg: valinux.co.jp X-MS-Exchange-CrossTenant-Network-Message-Id: de7d6df7-3235-49d2-f180-08de9a3068e4 X-MS-Exchange-CrossTenant-AuthSource: TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 14 Apr 2026 14:16:24.2616 (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: ZHtga2G9ll8a5LKlBzo3WWdUR2nQyStXA7aZKTHEX6l7BjDjBeoJhZ2iIbSZYjZ97AzWNHSY5wys/JPSy3Hgzg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: TY3P286MB2529 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 16 06:51:59 2026 Received: from OS0P286CU011.outbound.protection.outlook.com (mail-japanwestazon11020133.outbound.protection.outlook.com [52.101.228.133]) (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 ED0133E715F; Tue, 14 Apr 2026 14:16:32 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.228.133 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776176194; cv=fail; b=DDcBfBih4ubdrzJs66iV4BRpLSUVhOciL/Vhh3sjcDGOBDl284U0gds6BRcuBlVhoSCP1pEld5ennwOp1/ZyESC32gqO+9SfVY/6nU6TSCnfXBpcp07ts+omlirEGh3UBPLAnP76DTW87CpCZORks7XF9wK54goJZfuj7gqGPAg= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776176194; c=relaxed/simple; bh=N1MSGvwVyzz6fkc2a93y1b0XFQgdrBI10ugKsrIXGW0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=NT0IunAU16j8jX0a4eZqx8WwhAjzFHcmJ9bR7wTWtasoWPhbBgFSgwNiVF7+5NfbWFgcq7Tnn0IIL2M686PItD83Up46c+SmT9PG2sXodTjXmhs4WlMXz/FeChoqEPCP+/AR6ckbom3tHtNLW74VepZGnZrY+EQ30kQXwZW0wcs= 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=kKJFJugS; arc=fail smtp.client-ip=52.101.228.133 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="kKJFJugS" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=XCH7jF/duxSr+qfLCkJnUUD+q/dgBr7MBu+Od7eyxcE1HbfYwy0A0fzJ6uXsxKboLoBnm/+Pzz/xwA5yXtTh9t1VgN1gs4B2NB9GKMzLR82D81MX6TfLpzkRSJZVZM0HzZB5FWxLCOKiWEs+uQl/H2C48KyL/dYapcl87ufjUu1X7ujGfRwBNIsxA7uESAWRNxgXv38/ctOB5VP0datgZNo9bbkN4o3lxXabdHMOneX/e/zToMdB/gTo1Qm1u1ZlUn+TAEm1FJ9urxY8NvmevjOpZUliJTg99DqKs+wWv+QwQRyb+auF+QyE1ZJNm+qxmWItLEQp/+2UFe4BwOhUPA== 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=KrnaEL7HBeJ/AijiHnahAUBcGY2wojYfS4R0k7UbMj0=; b=QyWdPbkW5XOEVea57eqXJ3gI9o3r81e980WuztKEHgX7YHFukFw7XfbrwnMG3PJz8XS22IZnkXKGp055bBceEg8ezQsm/XUj4ims0kjmNR7aYKqAQaAbUKLs+BmBvX+3EfX0wal0mfyWBsvrXZ0O640+kf1BcM4swriZf0Abq75P2yyADShXZN5d4zgfYb1w9o6O9YQOw/l78IXhejkVECEodfsfly+mDYTc42zVNIxhWew0bTG9TPJoL4KYiBSj/h1UboO5cPIZlQ/15M1oOjeNgJkt8xJpBIvCrXCdW5rS9raASex+4FiYmPhMZUl7Gyqc5YqD1sSKU85UR6pSIA== 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=KrnaEL7HBeJ/AijiHnahAUBcGY2wojYfS4R0k7UbMj0=; b=kKJFJugS+4/701yob5cc40G3n+78otKKnPQ3ul6xRXFlLK1QblfdIvVsQwFpwaTSnIs0Kg+dbhxMLp+vnulN+vT+pn7IX9gRKes6V15HMz5jrB7SYtxt4XpZqWptkhO8ncwdJUEi0NrDm+vv9a6bZ0Lg40/BQGDN38XsvlQuXnU= 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 TY3P286MB2529.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:222::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9769.48; Tue, 14 Apr 2026 14:16:25 +0000 Received: from TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM ([fe80::2305:327c:28ec:9b32]) by TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM ([fe80::2305:327c:28ec:9b32%5]) with mapi id 15.20.9769.046; Tue, 14 Apr 2026 14:16: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 v14 3/7] PCI: dwc: ep: Expose integrated eDMA resources via EPC aux-resource API Date: Tue, 14 Apr 2026 23:15:10 +0900 Message-ID: <20260414141514.1341429-4-den@valinux.co.jp> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260414141514.1341429-1-den@valinux.co.jp> References: <20260414141514.1341429-1-den@valinux.co.jp> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: TYCP301CA0068.JPNP301.PROD.OUTLOOK.COM (2603:1096:405:7d::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_|TY3P286MB2529:EE_ X-MS-Office365-Filtering-Correlation-Id: 3c812b0a-1223-4065-915e-08de9a306956 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|10070799003|7416014|376014|366016|1800799024|921020|56012099003|22082099003|18002099003; X-Microsoft-Antispam-Message-Info: rFV7rbWHoh9lZ+WzBD+nmcNdsuh95DwYwql6hOi7YhcGI+8sEcduUggoh9Hv5gqCuu8UQCe4Qzvnwp3a7yYKnsT7vgSD/Tk7pB8uKuYTssiTuqv2FEG9SHKZZ9uTzo3OQAxLxGTP8nqB2d5BXX1kvoRnvKpXTGEgkV+k4K+8mYbzYv/OyY+A71iAjYx7YePHxG4aGVH7/liEtH3nvw6T/EjWlinWNvY6QVTDHKVeLzBmCWzhoX8Xsjdna6Xbu3myNjIw2+bSZJnXB3k2KAtVPacwsfZKqKaumclt/bCkkWqvrjCWTZNa2/OTY5uJ2oxZRbJzZ+3iSZu6IVC5B8Ptrp+BWFqP7rS+vgi+MxmkAzbwGDWYlap+2GqvqgLfJ6XISqEEw50BbUCS4eI0hznGODf3px+K94JESzq3UqEQdEVvjiROHgqb2IoUmgLQ7Cg9y2n/d5V1uPdt3hSNr/AzA+03cfkI8oQBjK3iNne0nJ8rJoixLHdoStktDC05Lkeloxy9oVJeYthPBeOLqzHT8s9FlP5KkPCCLtXFd9OLpxCXAw68kRZcBtI4DkGmUQ9kuAKEIl8Qqz8RPOw0zu6vkHcl/+9X9+CYO/PBY6YSGvfzViuyVnAahJPw517QOJA7jHCY8sZZS0lIGXPUa5w5QYLm5BQyuNTZ+/pycx971NsobobD68DtMMsLFegI1BtkExFkXVxt2EBcnREgxFpxWuSntBysp9FlW/9Yk9iWPJLsnOLzPolcHu55tNoN+teXC/2g6o7WWMsGnOHoYCUOXw== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230040)(10070799003)(7416014)(376014)(366016)(1800799024)(921020)(56012099003)(22082099003)(18002099003);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?hrQ+ozNlLj2r2Kphr1hioJYC6Jv089ylUuUhIS7OvzX3Z5yvjCChviyIQU/Q?= =?us-ascii?Q?VxAx3uIaeIy6c9PzgmIt2l9fjyaBCyUC4u8qRCxFbWdF8IiT/6v4xOjTX/wr?= =?us-ascii?Q?botGioPzjbC9pFSkdXs3O+uu36/XZyT44KYsqI6agfOwBp5H+DSFFGqQlaRX?= =?us-ascii?Q?IbLJTHVW3vIqwrd2DJG04ZyCI0PcR+UEsgPOm6uUV2Pk0Yx+N3fWIOXUnBvI?= =?us-ascii?Q?t+mrE1M1LWTjAc87CpPrEy9NxEai9f3Ink975ZGYFChyxIodIvb1C3ewzpa2?= =?us-ascii?Q?FzNK1FQtQ1MyK3WLnsUSx7ST0dGx2V57fYwrB/GgsEUSVzuApJ6oupUC/fea?= =?us-ascii?Q?qWkwpi2G6GkehsW28ZiKco4olAoa4D4KKqtd1XcEYrQRYHSbTC1bErKQ1iQW?= =?us-ascii?Q?8fz8kBl7q/T1yuM/woZEUABt0mgYJmEQ9TMPbe/PT4SlPHCtJPUB8bsFx8Wa?= =?us-ascii?Q?tQSSuFl/oB45Fmz2ZiTgyx/xjkffN+WgTeo4TXik+33cfeUdGxf8PaK8nb56?= =?us-ascii?Q?wNwEnxmjUCzEJtLqdsqXgHVQSEzd2Y0y8vNxDdIOSJjn2SeC+S6M0I7B99Tr?= =?us-ascii?Q?9J48jJHgzJvwVxmh3FUG4FYJRt4WPv7m7FNZYC3/wX68ehC+/48BeWcJsqU/?= =?us-ascii?Q?XaSJStUZbUZ0FT5g1aqKjDWzdxRFraFdBzDmbJN1cVUhHShZN/o+cZEhlLVW?= =?us-ascii?Q?r8mC2fkGm84KYMEWGoCk4xy2OEcPuLfWkhEWosL2XEgIcdfIDyEuOJoHnG/O?= =?us-ascii?Q?662RymnIDVoTzjHlDjVEQo4HNPIN4J55E3b6uohZyAZiUiwXSFlshJ+qeSuK?= =?us-ascii?Q?fcA4rP1lOZENRoW/B6UGIL3ousTMTXJ8NhcZaEw1sn0ejjkj3k+YD0MRAy2F?= =?us-ascii?Q?W6zZ+teRN3taSY/7CDBp5nEtcXEZulvptNcIk5w3mTbh3X1v0gW/fCM64B5w?= =?us-ascii?Q?MsM+lbkVjkGZ7LX5gCaJ5R492wYB3q8igdKUVntY858gRQT0JiPL+IbYqkeN?= =?us-ascii?Q?YrSYB6YwVZgWSDpb0DgxTODbVCVAiWV+w5vKVI/bImvczK6dL05f095g9Kgr?= =?us-ascii?Q?Dxzgdoa9Z0hf+t9pYolwYM+GYFwiO6MyxhPNLHip90pBOQdG0RB9JnhOg41X?= =?us-ascii?Q?FEgYmz/7WoBoT3HxgjN3GER+dYPkTKn3eMyYOEs5sgM5C+bfDuMrhA14qdj2?= =?us-ascii?Q?OTOMtnMWjRkaxqRPOhbe/VtHWFHNoT/FRyEI9m+CBrWj1B1+oUSLDBnKgeeM?= =?us-ascii?Q?JIEZp6Jtz36HHNMchOhSS5k3UfE11DvHA/drqCq0mTFbXRa8Kwrp31otTGXW?= =?us-ascii?Q?RmmXucKlE1Ym8e1VZiMrbqoBcpKguUM0sfis6Xp1l8tGJ4DTdY/8AtFqFwWR?= =?us-ascii?Q?LXImVeCJmyi5FkMN3GCZKUW6k71Bwi5/uK4J3yzwc6QHtf8P2r/mwGEaThWn?= =?us-ascii?Q?vw1n/pMLnDkM5vhvhW7crKdsEED394kVZKK9m5nGifUFLRsIOuu2wgZCQl8f?= =?us-ascii?Q?3TOuiq0Tm/YzPOfEMqDicdgnOsVG4RFH6h9lfHKWR0TH9o3PAOIsLM4bgNQ5?= =?us-ascii?Q?oYWrZWRgMf8FjkT0A8Woi/wU0cUN1Jlz65adGt+JjWceY47qtpFnzitPMpRQ?= =?us-ascii?Q?R28ok7bFmCwzi6lxxKAhKxvmi8yq8NHdMEEbYTrLkDQCE5FKRU0v4p1uAHeR?= =?us-ascii?Q?DszF2F6Gk/Dys1w3SRTB3UOHSBHeiMytddsyK1WyOBwDKZ7cDF/fuDt19/rD?= =?us-ascii?Q?GVbgrSWCwsg7066jNfhygNDvuttwFgnKPIEYL+yxKi2xkbLF0Gt+?= X-OriginatorOrg: valinux.co.jp X-MS-Exchange-CrossTenant-Network-Message-Id: 3c812b0a-1223-4065-915e-08de9a306956 X-MS-Exchange-CrossTenant-AuthSource: TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 14 Apr 2026 14:16:25.0212 (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: Exb9EvRvQ2mVCGOV78QrcFdCjZQJOCgOeo8jPk/gCeYJvc13erYQS8HoESSS8OSoTr+KiVQt7XxbyRIb1xid6w== X-MS-Exchange-Transport-CrossTenantHeadersStamped: TY3P286MB2529 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. Reviewed-by: Frank Li Signed-off-by: Koichiro Den --- .../pci/controller/dwc/pcie-designware-ep.c | 119 ++++++++++++++++++ 1 file changed, 119 insertions(+) diff --git a/drivers/pci/controller/dwc/pcie-designware-ep.c b/drivers/pci/= controller/dwc/pcie-designware-ep.c index 386bfb7b2bf6..c3c354265307 100644 --- a/drivers/pci/controller/dwc/pcie-designware-ep.c +++ b/drivers/pci/controller/dwc/pcie-designware-ep.c @@ -9,6 +9,7 @@ #include #include #include +#include #include =20 #include "pcie-designware.h" @@ -817,6 +818,122 @@ dw_pcie_ep_get_features(struct pci_epc *epc, u8 func_= no, u8 vfunc_no) return ep->ops->get_features(ep); } =20 +static const struct pci_epc_bar_rsvd_region * +dw_pcie_ep_find_bar_rsvd_region(struct dw_pcie_ep *ep, + enum pci_epc_bar_rsvd_region_type type, + enum pci_barno *bar, + resource_size_t *bar_offset) +{ + const struct pci_epc_features *features; + const struct pci_epc_bar_desc *bar_desc; + const struct pci_epc_bar_rsvd_region *r; + int i, j; + + if (!ep->ops->get_features) + return NULL; + + features =3D ep->ops->get_features(ep); + if (!features) + return NULL; + + for (i =3D BAR_0; i <=3D BAR_5; i++) { + bar_desc =3D &features->bar[i]; + + if (!bar_desc->nr_rsvd_regions || !bar_desc->rsvd_regions) + continue; + + for (j =3D 0; j < bar_desc->nr_rsvd_regions; j++) { + r =3D &bar_desc->rsvd_regions[j]; + + if (r->type !=3D type) + continue; + + if (bar) + *bar =3D i; + if (bar_offset) + *bar_offset =3D r->offset; + return r; + } + } + + return NULL; +} + +static int +dw_pcie_ep_get_aux_resources_count(struct pci_epc *epc, u8 func_no, + u8 vfunc_no) +{ + struct dw_pcie_ep *ep =3D epc_get_drvdata(epc); + struct dw_pcie *pci =3D to_dw_pcie_from_ep(ep); + struct dw_edma_chip *edma =3D &pci->edma; + + if (!pci->edma_reg_size) + return 0; + + if (edma->db_offset =3D=3D ~0) + return 0; + + return 1; +} + +static int +dw_pcie_ep_get_aux_resources(struct pci_epc *epc, u8 func_no, u8 vfunc_no, + struct pci_epc_aux_resource *resources, + int num_resources) +{ + struct dw_pcie_ep *ep =3D epc_get_drvdata(epc); + struct dw_pcie *pci =3D to_dw_pcie_from_ep(ep); + const struct pci_epc_bar_rsvd_region *rsvd; + struct dw_edma_chip *edma =3D &pci->edma; + enum pci_barno dma_ctrl_bar =3D NO_BAR; + resource_size_t db_offset =3D edma->db_offset; + resource_size_t dma_ctrl_bar_offset =3D 0; + resource_size_t dma_reg_size; + int count; + + count =3D dw_pcie_ep_get_aux_resources_count(epc, func_no, vfunc_no); + if (count < 0) + return count; + + if (num_resources < count) + return -ENOSPC; + + if (!count) + return 0; + + dma_reg_size =3D pci->edma_reg_size; + + rsvd =3D dw_pcie_ep_find_bar_rsvd_region(ep, + PCI_EPC_BAR_RSVD_DMA_CTRL_MMIO, + &dma_ctrl_bar, + &dma_ctrl_bar_offset); + if (rsvd && rsvd->size < dma_reg_size) + dma_reg_size =3D rsvd->size; + + /* + * For interrupt-emulation doorbells, report a standalone resource + * instead of bundling it into the DMA controller MMIO resource. + */ + if (range_end_overflows_t(resource_size_t, db_offset, + sizeof(u32), dma_reg_size)) + return -EINVAL; + + resources[0] =3D (struct pci_epc_aux_resource) { + .type =3D PCI_EPC_AUX_DOORBELL_MMIO, + .phys_addr =3D pci->edma_reg_phys + db_offset, + .size =3D sizeof(u32), + .bar =3D dma_ctrl_bar, + .bar_offset =3D dma_ctrl_bar !=3D NO_BAR ? + dma_ctrl_bar_offset + db_offset : 0, + .u.db_mmio =3D { + .irq =3D edma->db_irq, + .data =3D 0, /* write 0 to assert */ + }, + }; + + return 0; +} + static const struct pci_epc_ops epc_ops =3D { .write_header =3D dw_pcie_ep_write_header, .set_bar =3D dw_pcie_ep_set_bar, @@ -832,6 +949,8 @@ static const struct pci_epc_ops epc_ops =3D { .start =3D dw_pcie_ep_start, .stop =3D dw_pcie_ep_stop, .get_features =3D dw_pcie_ep_get_features, + .get_aux_resources_count =3D dw_pcie_ep_get_aux_resources_count, + .get_aux_resources =3D dw_pcie_ep_get_aux_resources, }; =20 /** --=20 2.51.0 From nobody Thu Apr 16 06:51:59 2026 Received: from OS0P286CU011.outbound.protection.outlook.com (mail-japanwestazon11020133.outbound.protection.outlook.com [52.101.228.133]) (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 B6A373E8C4B; Tue, 14 Apr 2026 14:16:34 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.228.133 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776176196; cv=fail; b=pfwbLWDk6MqeOR60vO6rKAPzIrrjOdspv6ajmJ30KUpzlDxgXrRxCJ+8sK29h8DOry7PO4I1CSLueuAgPT38MCWD+pwzvzkw18esJseR59Qt6Ah+gwXqdS1HI5XGwtBCKDZUzBgU6IKElLqBmNrUtEE6OdMbEq5UECklJ/jZPwM= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776176196; c=relaxed/simple; bh=24CtTktMCrTYnhJKM0CPxo89ofgYKr4aiWJjFoL6RkY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=EFE565v+hhW8Ht1kp40TGI20ODcA/eXWxpCsRq4Tk6lWfYCfGP8m6dx3v9T3Q6zEvMb5dmE67VkBFUxrM+wGAWLETfT2lrLx4PDa5B7nIHhOqDI5apaq31bDhFvAZUpOHjkkAII9gjFlmFON2vCu4dbyt/ITtHlqEnbxMvY8oL4= 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=AFGZHpdl; arc=fail smtp.client-ip=52.101.228.133 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="AFGZHpdl" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=dgUHGYF8qN6gcRG3ulI3xRUepHbt4x8KQKRobTL/bEtivvD0UhlytCJFPvUsFJBzziP2iFN2LjgP0eMk0HlYN5qMSPw8BZ04NeXkac9VZtFrjShQQP6iutr0T8ulghhoCrjNZ7gSbKgkUy+WLU2H6QvK19RzL/z6AK4b86LI04MUclXlpYc/xxyE7J7SnyHTBFdyOCD8eaVq+aLRm18KtzZNjEfLD1SkQJlQ/UVOV0evcgpuDXcZWEq+t9NQW4wvJECYAn26pqUkmEG2sQSxUeKZc3E9Jbrr5c9s6bDdPkcbZismWh1V1nH8H2wgbb5y72T5VcsA7nlt6j6Jquclew== 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=iBwnFBLjmHQ+mo8+LWa6LKcfGREZj93tyj8JtHDQN3JaHPrbY6C79OI++U9mTxSeNQJc2UW/JU7U41fLOGY2z9W3vjWdwERT468dMWuTKbBk+j7KSC3vZ+QOrouz2JMz9FlkKM8HxByhgmCsVz9z3oLP8VHfbCmVcSFRKjH7Usz6F5XAXWkYhaJiRUPKXGpG4NJPsXWhbaGQ47IWbayMJCsBHcJtAt1RDNcxx9IXkKU0lz7fx2W5vXj8j4zPIN0lA4/vJgAAKV1UPqm5FJyeMDhokYp8BpnQvdYMgNAXDMnpDJibVcW9F2fF1cEc78K0qZjaIkj3vLdC3YXlhPlAeQ== 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=AFGZHpdlGVMNlSnsqrc1SRA6Y/K3JNqJf/tfK9C9+Ubl0VLzxNXjq6Umc9zZazTt7bJZy/2Rmcj1SIjoflDVkS8PanB65qARjdZEfOHWo/bd2sd7mZH2YJsUFKxL2B3/mAtwAe6An6FwuuNBvYj7VYmingnS8WvRu1SVOrA4VMM= 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 TY3P286MB2529.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:222::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9769.48; Tue, 14 Apr 2026 14:16:25 +0000 Received: from TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM ([fe80::2305:327c:28ec:9b32]) by TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM ([fe80::2305:327c:28ec:9b32%5]) with mapi id 15.20.9769.046; Tue, 14 Apr 2026 14:16: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 v14 4/7] PCI: endpoint: pci-ep-msi: Refactor doorbell allocation for new backends Date: Tue, 14 Apr 2026 23:15:11 +0900 Message-ID: <20260414141514.1341429-5-den@valinux.co.jp> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260414141514.1341429-1-den@valinux.co.jp> References: <20260414141514.1341429-1-den@valinux.co.jp> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: TYCP286CA0172.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:3c6::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_|TY3P286MB2529:EE_ X-MS-Office365-Filtering-Correlation-Id: 2005e12d-93c3-4da2-38ce-08de9a3069c4 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|10070799003|7416014|376014|366016|1800799024|921020|56012099003|22082099003|18002099003; X-Microsoft-Antispam-Message-Info: iobLWUgKiN2k4CKxymf5vM9RdUBXB6RClTeLMD+oYdLHihSoEdHHg+8e6eX583xM4qBKLZUZidUGhE4aahu0ojtTiRFytN6Ys6E7tSqCDawVmXICdOdP9vyUXlvIBhECH09HQcQLcP+aQpdKrj3Jnl0XAVVTFgRdjiGshCkPLsiYef6POT+Qah7UKqRD0TVpf35LRvEF/Xp83PZjlzjscjMgNKRmgHuaI4Hgwg/iYZkDhr3moAB62kHq8NFK3NhN6GS6ofexTi1Xx/hH1SbBnBOZyGqBm/R25ogPeU/ZpWYfZk9k1XXcdfLhFLeXZMMrtfg15vVsahgbQvNl7uP9kFmcmxUoiZ8yHbgn3UUexvh4CCs7xBrq9mAwbwxwM8vx0S5kiF62tIeR3BNNq/L0SkpygqkqiNwmjhnZhKd6B7i11apAcoauMaWgyudfpmu0L+iqNNEai3N/F0XErF7lvzu21al1LcVaYd3qtk1R6laI20wNsRRsDmtnYKn6BhEjqRukGTkH4MrYNNpbHUbsbAvrXDaInY74/kx/9kcZul7ae5Ya9pQ4Vy1vtQcP9LqCcZq+Vl1NfvD+0Z/Mnl/HDamY3jOzmOITJbMDjQCASKgJR+ZN3gQUvjR92zmaic7KM1GjciAccr+U7/NeLH9KxolMNz8PaTx+e4A6x4M3kgHf0MyfZ/Fvdz5eB1b4G3AFMezchBYYyhQ83uu6N3MFylLtlEnF/vbeOXdipO0A1Q8zDR9MqhgKax5RqG70lMAM1K7yk7E40c3EseetMu46ag== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230040)(10070799003)(7416014)(376014)(366016)(1800799024)(921020)(56012099003)(22082099003)(18002099003);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?yn0G7TPTOH55WqEXVlZNT3HtCk+x9EgmfPrihYPWFF7G0HokN9RFr7Nodye8?= =?us-ascii?Q?L56g6ArqNHaoM41zdHGYQ6I0L1BlNct84/SXz6GX4MgmX/4kJqS6lG0EZn66?= =?us-ascii?Q?se8DuJZMYDMzoHAOurnBHo4SU1CsV3zUpegjJZTb2C+i7Gnd1XW684EpSyL8?= =?us-ascii?Q?/UrCemI2rfu0YqirFiPbt+y+vc3ziuQYFSCUjXOrkOLhr9avUTdNJ3DareLX?= =?us-ascii?Q?oZZEs71BrR90YXwMFUjhx0iFBAoKxrFy0+cGEwyct+sjWXE4UG7K1F6+wv3e?= =?us-ascii?Q?j2JqhKNaLqe2x0DZeNHSVSA+SuksClz2bOGySA64nBQUJMWMlZPwb+zohyz3?= =?us-ascii?Q?ElQKzrZSSYvspBqrT3kMa1Z0auGJztT15dKOpKrqMcdx78NHuDInxO6pX02R?= =?us-ascii?Q?5TCtVNUN6ua4l2h7lD2sFP1GsHZk9S2UEeesfnunt8aN0MsVMHqpY5EcT0tF?= =?us-ascii?Q?deO0zq57uh0Xp+3jYT0uoWEmMax2gLe8C77KOsFJWjpwQ4fvDUu9r/OK/Y93?= =?us-ascii?Q?xwW/dlcVRswq9IzSmyzvhdR9qbKmyc2a/8mSIz7ZFVFWKzwVvTEM5GqGGkLd?= =?us-ascii?Q?FZdl7cWic6nYN2ZjmQwCa4Ro9mFoBER/3zGCC1lfdYt1/Esg85zCZBStsUi0?= =?us-ascii?Q?yj6tbEMWQ6ACo1aQ3B2NnHWtuohCuf021wPFw/pmIDOHTPn4OCe/KshoVPnM?= =?us-ascii?Q?yet1vqKtF2aPYB39ZBwR02dU1qFTqiHpmmzPF9OLS3IyTD5MhFcyTcz3c+Lz?= =?us-ascii?Q?DdWl3SdslcrStBox6wUK2M5HPClUMJH+FCRAJJeJvc6dG1IzeSCED51afR8p?= =?us-ascii?Q?mDWFMKYJ/SCvVtSF3/npWrJAZj9Nkg0jDMWzItXaBg5cRkzVlvSbDtG5/Znj?= =?us-ascii?Q?oJ1tFzIiTbMSLpmINhAUcns0tOaWBuo2a0eWNoHrf40KKEFc5NfxdqJrxrMD?= =?us-ascii?Q?sW1bDtMTHLoArFKC9dtnJup14g1G5mfW8IJ58Fs+4Ecyk+gqIhfcdAGHvBdc?= =?us-ascii?Q?gpQvYcvOT1gpDudLsBigkpxsssw6VbXRoA/WrFTBHo9BxnrFzwd/JORGwSis?= =?us-ascii?Q?YFlPclVH0JlgdcdokLhT+Q6Pjejxn1G/zq84OVzOaoFjk0Qfa0GsHyNIf7E8?= =?us-ascii?Q?k+zHy/OZcFYfWoucO5M9XfOf7KWqUXihiQDOrsCGWEA5OpR/uB9FBly528Qu?= =?us-ascii?Q?+LX4k0Xx3EjhdpKezwfO8SebaBCvcbNu8ZUkO8ZnIDfM0GlvX6zMz/H0jekW?= =?us-ascii?Q?Y1Gu7+FnxB61z2/ZUfTmWRC+TI9D0PENFGap8M8Qjvn2T99EoyLZMpQGZ6tU?= =?us-ascii?Q?ZaVKEpYgZVJrZlWNG84RpRnXbJ5q+HnQZTCe7nTcYajg1c1KrYZvD23uJiFh?= =?us-ascii?Q?6Pkqait3VE3/NhJSOvYJ3+eicF4/9aI/J3dQ7sVGAQdCTXbgUsc8LMK/MnFc?= =?us-ascii?Q?GhuXWRCBC3WMIBiajrWqj5Vkw50y7nU2Lw+TMWFquoZ+DsC7tBbpdiFsTjNb?= =?us-ascii?Q?djgTCndYEb9lGUAUexpPzlc6dzkYzasxQyj9zD56iYDeCqIEYW197XsoS9zT?= =?us-ascii?Q?djMm7W78jn2PVZnbzQ+u1jTrXfful8u1FzjTjo2ap9/WBCBibnVR+ku/jyRe?= =?us-ascii?Q?I6W7CzA4AES8FhSyB8G2azGIZx3O2cd2Sedj7HSZVJkV9S5ofQcA2TO0YZrA?= =?us-ascii?Q?OlEAY0Vf6By9XoDjPzg+CEcL8FzE+9wV/PFP1PRa4WQjJrwu3AplTaq0R1Cp?= =?us-ascii?Q?U/CKfDu1d3n69XseydEHcZYSBNWx0AfwPBWnBAJ4jZxoYaLcIN16?= X-OriginatorOrg: valinux.co.jp X-MS-Exchange-CrossTenant-Network-Message-Id: 2005e12d-93c3-4da2-38ce-08de9a3069c4 X-MS-Exchange-CrossTenant-AuthSource: TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 14 Apr 2026 14:16:25.7142 (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: DAm6afpjMwkxr+UpZdzRGeZgp67LvFeGSUtLjkYxIOixHTi+yFqB5S6crBPBGmw4MtZo/GYg7d6aXVQnLGHPUw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: TY3P286MB2529 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 16 06:51:59 2026 Received: from OS0P286CU011.outbound.protection.outlook.com (mail-japanwestazon11020133.outbound.protection.outlook.com [52.101.228.133]) (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 6D0DC3E8C74; Tue, 14 Apr 2026 14:16:36 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.228.133 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776176197; cv=fail; b=dKOnHitGPi7ebvxzGTAemDQKLea8K1RlmMtAMTESyr0GgFOmkXLJ6SSOzOVoV62eMq/2eJh59MBLMrpG3AL6Z1X5YEWjhLZ3THDtLfoOb4ZfMO5b8YwZ7Ff/k8Kh/7wnKKIHnCxQXup8flhl6eRh25wjT2qTQBc20gxHI3l0tgg= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776176197; c=relaxed/simple; bh=sgRjIYZasZJZC6aHGGTqAQ1lBQJuj5jFMHNuey/EsmU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=vGmoQ4gBiUSVOlPQ7lHHYWn/D6s4z06fcG76LLD4jJjM30InvBHnwUQ4k/l6z1NO/3RTwU+SRK0wnHicWbhz2JTEqOz5GE8qtGatjzu8W/2wqN7kB4jL+hwj06Yovp/H0pBATpdMA24YVQv/6KwFEiCWi5NeYewt9Bh80sMy0S0= 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=OhCC0IiZ; arc=fail smtp.client-ip=52.101.228.133 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="OhCC0IiZ" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=cDi62shUrsxSeoMtiKSB9NsQzY/e1qvaoEoLO+uCAEFUNh6fWcHwBypwVecrIqsycD5iz2emLz/2PYsxLeKQFcI98T2Z6gY2tk74N5MAVILcr7+qVrwQEuXBYiaYnyQQNCDGYumYADFXDcMyjKDf2Rv0AbjcioyCprdIxj+qQuS+ohSI2iT9+caYWmJxc9WA4zoVxE1t68Qjefp7/0nZJec/ocVQq5HhPITTz78mMoElBrwRAY060uXTEYEliKFoI+eqlY4ty7VXCqM3xHsBByW7wKatYTLXYQZY1YLE1lqPt2+f0vNgSgOtAG71Wjfxu/UCXkKcB87qmDIrXrihbA== 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=d4C1vsDWuVdklJ5JB6E6sUeIOCPQrZIVyKBOVDqX9AtoRa7V5OeO/xworp427H0fFBOrogwJ+04FcvWnlor/c68TlCt3X6oFiB8n1myuTZiFvuglmLSfi6txw64Wvg+vVw1qQ+TPglPG+EJEm+aktPk+hBnO5MChgEyqjaCcSnF8HyFkGYCIjR/oYyMlP+ejADGz6CSjHJ/EUMyBEh0oj0N1iB1ziskjiyWiC/308nacIxzej7q3cw2v4DbV3GDzY2kyh5CeYsWTwZVAZQHr2b8CLjvgRx7APb15vvq4rSHVQCO8ik4tzJMuekaZU+nzcKT7FL6Cowih0YIQ36rXQw== 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=OhCC0IiZQhbMbkK3I4J9VJFNMUUFj2kqY4sZpAHrpdqK3CbmOu51SHjaBjFV8SW7ju5e6WMy2EGN8NMT+v2emoPTKvzVHrCI0YhSPlY3Mwn9LJLlNvX/KtFQladjY3Vf5Gk8h4ODbC76mlBfUAAaR0KW1al7p829ADE8At5fugg= 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 TY3P286MB2529.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:222::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9769.48; Tue, 14 Apr 2026 14:16:26 +0000 Received: from TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM ([fe80::2305:327c:28ec:9b32]) by TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM ([fe80::2305:327c:28ec:9b32%5]) with mapi id 15.20.9769.046; Tue, 14 Apr 2026 14:16: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 v14 5/7] PCI: endpoint: pci-epf-vntb: Reuse pre-exposed doorbells and IRQ flags Date: Tue, 14 Apr 2026 23:15:12 +0900 Message-ID: <20260414141514.1341429-6-den@valinux.co.jp> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260414141514.1341429-1-den@valinux.co.jp> References: <20260414141514.1341429-1-den@valinux.co.jp> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: TY4PR01CA0086.jpnprd01.prod.outlook.com (2603:1096:405:37d::14) To TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:38f::10) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: TY7P286MB7722:EE_|TY3P286MB2529:EE_ X-MS-Office365-Filtering-Correlation-Id: 23ce8525-9f3e-4bc4-cc81-08de9a306a38 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|10070799003|7416014|376014|366016|1800799024|921020|56012099003|22082099003|18002099003; X-Microsoft-Antispam-Message-Info: OrQeIVgM6jtalc2D6i1RS0lET0ovNt0XfIfRuSnFqzvd2sEOgAUoPwMoqXNroxTRhT31ejQm40TPgLXyAvMbLZKiW7/To2q7ujP64drlDsuH9r8oWRuq3hW7aQ9uYOsSdHstpne+Zy2mRinhdOdl04m8cH4cYlhEvGMCeJqptuwr5fdv7KeJMfQ6uIEEPv+bh8h7enkBv+1qr2Cwl+L+P3n5+NSGkN4JjzkTJoA3josv2w6a49wg9EaFKS9NVNXfwZyw3Q0tPfKSHoJ31/52yUgqDVbm1jeELlBX/EBqvsoApUNYj6TWhf+tYjKdnk3yrftH10bNr0ZDdkrsxUp7hjvs6E/HLYCL/cNmqairoJF6JQpXgoC9wlqFbNZR2Og24Abm80plz54CRJvd0pw/9wPhD1Om6TsK7Po786il1DJ2JfXVCqizbx8+c5d9ip36AUhunRZUZA1CgUuUx2uMZtM97VAUF1pmkBmw6r2UVQWDrwUfRCAL1liYxIo+vqEqUSenbbyPg+eCyE5gOZYQBu0SJILlJLzxldYJu4OQ7LZaGytr43WX596SS39kI8v7DYtEM18PggKSqwN1k4LpqVPJr/8EQkBDGxpkN23ykGrYxM7hAIBwiTSoffDtLM6WKpRTVZg0eR/V1OfQg/tHnD/eKJZx3Dv4JwNsEfITZZYRMmKziyjpu5h8axBeTuC8xZMv9D2VspjLO9Ahwk/0W6/KatBZrufUGmISuZjE0iXiFx8SALVqwfJk0+tAvSHwNBWwRMYQ6ojxsUTdZaeINQ== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230040)(10070799003)(7416014)(376014)(366016)(1800799024)(921020)(56012099003)(22082099003)(18002099003);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?5QoWYrA0bR2pEYzlmcMUK2KurBlUE/WKlNlzbSd5CvcTpt14qws9YIrIjmt7?= =?us-ascii?Q?o44xLndubct0fR26DQeF/f+7p056EceRw4gNPHPchnAhHzhaGB9dHGa2N0jt?= =?us-ascii?Q?wFG+9tsjzc2WcjQ/FCrRYckwnjOTWRsYne0J2M8DJlzmu3KFF55a0bwgEzgK?= =?us-ascii?Q?7U9r4y0osNXUYtdDdPRJ5uGod/xrq1xER/P644vs9DxDuOSgSlob8hHgDDKj?= =?us-ascii?Q?NcueWYzGxjblsqq4zCTZ4rVophEZKNy/4dxLqq57ltcyAzgMXhtRIKeD1Mtt?= =?us-ascii?Q?L2HHcOfvY4hsAAhra8P1u9JOrKAIdj87x2zkMUQujfdhCZBWDPnSRpc/r9Ue?= =?us-ascii?Q?sIJhTm3ouYsLOxIDv1ZG19qXaLi2UaqgJkpbCGsm1gYPWj5yj0rn+Rrl+35H?= =?us-ascii?Q?4nUs/TsBi3erN9tok5ACeF1SHsD8gtJU57EvBZ7DHXUvwYuEfzfHz2OpRMr6?= =?us-ascii?Q?kUIgKNEdHqrSsWFf3rUYHYvLBgdK29cBvOUECHhQrEmg3+0Hj/ac/3cHFWY/?= =?us-ascii?Q?C0mhwmuPjCmruc1x/fB/rBZ1HYQr5jdS9T/iZ5V4z7+YbBVMxU1dTG+y6p4Q?= =?us-ascii?Q?oXvjhj0ItgF1iuLoZC2Bq2KDVWHxjWVA5R5qHmVZ3tHF/6YYhcwvB5Qy13P8?= =?us-ascii?Q?1MTJoIHbTzeCpbKC1PsdULhDWtGlbcoyvU7VlzHiWCci/7EGkqW2XzdzJhq6?= =?us-ascii?Q?3Wp31GF5GmZ8vhZ7Vrinf6kAkEHpi0iAAH2mgwnIVEmw/zEbQYxx5RWUEpFU?= =?us-ascii?Q?mB3pY+OT3v+Yy8fR3+iVfVtky6qtGWXR9ZkcscKCx31mSps/Z3H3ZspVwRLp?= =?us-ascii?Q?uQrZi/q0sHu3bv//yROTAJuVkyADa8GR34mI1moJzKCRY+XniXKNFFVEr0WO?= =?us-ascii?Q?/+6nG1rMLSR4dl3tKo3EvJojFpRM6DopDH9L+M3t6sx11i3IXN/hmL1MEY2w?= =?us-ascii?Q?btyeGzlcu5lKBrU51eIHkyn7TGxEyE/i3X6P3eEgZaGs20A6izd7FV9quWXJ?= =?us-ascii?Q?yiI8ag0PRkICQuT6TgJgo0Bufxi3NjyIDvmuujmKmyv/MEowsRkU2cwAAqfA?= =?us-ascii?Q?agMI5jkh/nFqlGRJAeUsbFt/Mo4LL+kFtLqavo+Ng375E8MDhKN+vXzsT0FH?= =?us-ascii?Q?saRGrrC4Pyh4nqVW/b1z0wsasX+OhNkjFO3Xk2WTFnzg0HRYAiRJHp74z02Z?= =?us-ascii?Q?g4HUvqaokvb55HaZmG5b65mH8pJ/54Y1gErdQC/kcExDtPp/o3MZdLKh59Xp?= =?us-ascii?Q?fHdlWRH0Vq7CRt5KWcvGUvFz7XE8SOSh/eIsvD8apoMzXwe8e2gXXtaQ2Gsz?= =?us-ascii?Q?4ovcgWAkuDMqeRxAP+DJyNh1PWcAUPvxx5r1AUmE5Dt2wz7IIe97qPxygvFf?= =?us-ascii?Q?QiLc7QaPywcc35yzGCdqhTce2SJr+jUkDCqW1hRx6lxo0Z3MU0H4pmqhBAlV?= =?us-ascii?Q?YwbI0uwEUe9lucj9xuiweCuFQP6LIXLIh1q9gB4dhroM2sopViGRIYG3BH4D?= =?us-ascii?Q?VQGvCZHYYgIBgI0Pguab5CL6Q9a2IMYr60Y5nJjF5kGOR4n3sO/SKDpUlwHM?= =?us-ascii?Q?ksy7QFlhMhn9eE75c0Vn9NAHEGETccSh47GmD/mXPZjj7wM6vZt1upvrCmTn?= =?us-ascii?Q?iScEFqbQ4f+62HSWSIgKLa+5V6UERx4VCB3UtJuVh37aldo7up9zkKqkoY3c?= =?us-ascii?Q?MJgDn2AR93YpYi9o/zUs6fGR9rc5oej54fgnwyQRFxgUs/C8q6IH7LS95l+v?= =?us-ascii?Q?pkP1xM4E0XVVBl5mJX19h+eDZV0JXK8kWIG8yTMlFd3KgrMwFeRI?= X-OriginatorOrg: valinux.co.jp X-MS-Exchange-CrossTenant-Network-Message-Id: 23ce8525-9f3e-4bc4-cc81-08de9a306a38 X-MS-Exchange-CrossTenant-AuthSource: TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 14 Apr 2026 14:16:26.4835 (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: 9TaMwArrL+iWicMWvhjRjlDGzN3TvSK2orqlKGG7gQ9/z3U6bTBgnkSJibyZa1Dy1dQmvu2MtrrfoDtaBeUW3g== X-MS-Exchange-Transport-CrossTenantHeadersStamped: TY3P286MB2529 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 16 06:51:59 2026 Received: from OS0P286CU011.outbound.protection.outlook.com (mail-japanwestazon11020133.outbound.protection.outlook.com [52.101.228.133]) (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 269F73E92A9; Tue, 14 Apr 2026 14:16:38 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.228.133 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776176199; cv=fail; b=fWpNFe30HpdcqzsUjojjsv1gujhWCMHNKjj1GC/gRezd8S+ONmwJ4amFi+eYnstVeD0r6e+mSBVi5HeWYpLGpdRUJj60UMeBbVJPDM8uPmDUtlR0EnNqMDeZ+54nEy+kgglDhgp9hIKLAE93q1pzWXJ+jG9UovADp9RZHVxGGhg= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776176199; c=relaxed/simple; bh=VifbmuDhePhh4pA5/eVfh05M1bkFT1lnXVlxS+ld4tM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=pzUKPoLjFitimd8iSVlmcAciFcnLK+88h2OinBSboyQGGaJeor3YYm3Jmp2Yllly7o7AvfpymNapTM2WtjEsCk7UsuwOGBRJNxFaFuAoHAeMW7reZk9ucxhcf4cuha0DW4rd0oGtC7aTyyifj+eTg/YJwFtbIpcVZ8b1WQ120G4= 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=ZMmSVWNw; arc=fail smtp.client-ip=52.101.228.133 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="ZMmSVWNw" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=EN351bDlK3+Fg+6F3bXn2pJThgDUb3uuWvFYUAorB9q9UGtEfoDoXeVnXvfo0KvZ/4oOSAZACc1+wz7lf3qwDlUV03GEAiV/6OsyId75RwoajW030xVUcVURhTLTEyfunWoIRos5FrMXNZ8CvLHAjOXGtXU7rvTROMaGvVwc8Dy7h0tQXOcDh79YtmsZbirPlPbBk4eGHXHits2hAUNb99l66e1cBroeK9Lb4HK7bsCDe6QK622jl21NMUfBwvEplaUJediiLGUP437ip4skLW96wuPWNRL4Y4FBusq8aWqnAe63or8PyaRIZ1105Cuahsag0ZGr4gOSx6bjA5atcw== 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=sCJ5Z2AdrnpQvLaiZlI8Zol1cdABaHymgvMXXd2v4fQ=; b=fMAJ7bWzpD03SNO9V/NPNMslQvxAhZlHeDx7uDRP/+Dq6jjW+rzqwKEqxiOU52x9pjqHAAxq6woQPYeJwm6D0j2HUdugs2X75jzb8a82/fCC1+XqZarB/BDkv1nM97QJDR+m/laigAe0dWxuzV/0a+WU7T2DrySOOCy/HEQ2aOffahSWGKWg51yC+f6J0xLrmeTyN/bmqTHqIRu6H1lbi5RqaiLqlBGk7HfpQo0a0/HTqsvuHoa+7iDeojB5kjgO3nq7DS5uXWNdQdAVz3ZOahTmP9h9+gth1ZeFQNHIh1erhQAOtkraf3C4psukVgmzmFikVK3zyPz9UbwyyyDkEQ== 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=sCJ5Z2AdrnpQvLaiZlI8Zol1cdABaHymgvMXXd2v4fQ=; b=ZMmSVWNwsKU3zg/ilsbLTtqdGcjRG7P4HvCk9lzRnI90IF8w0xep1Lckhblqv8nAHE8mKAyQZ4pH3V7sylTxJtouw7Z9E/J/mq82+M2UOYhBgSbPrpe+zBp5icGZv5sYVpshBa6TnBQ+YSWUBIbOfmgdpblGra/ILA3DDJPmpXI= 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 TY3P286MB2529.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:222::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9769.48; Tue, 14 Apr 2026 14:16:27 +0000 Received: from TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM ([fe80::2305:327c:28ec:9b32]) by TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM ([fe80::2305:327c:28ec:9b32%5]) with mapi id 15.20.9769.046; Tue, 14 Apr 2026 14:16: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 v14 6/7] PCI: endpoint: pci-epf-test: Reuse pre-exposed doorbell targets Date: Tue, 14 Apr 2026 23:15:13 +0900 Message-ID: <20260414141514.1341429-7-den@valinux.co.jp> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260414141514.1341429-1-den@valinux.co.jp> References: <20260414141514.1341429-1-den@valinux.co.jp> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: TYCP286CA0075.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:31a::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_|TY3P286MB2529:EE_ X-MS-Office365-Filtering-Correlation-Id: c97429c6-ce84-41b6-eb34-08de9a306ac2 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|10070799003|7416014|376014|366016|1800799024|921020|56012099003|22082099003|18002099003; X-Microsoft-Antispam-Message-Info: AEn2yFO5zLQoZw/m7YVBBGOjzILxw8dnFE4ByEsFBMKS9ZrMfuKwfKZghFX58b06HAw1H90JGhVpTGcm4gP+UhxBp9GPYw9rIQBz4daG7xEeIYZyHxChDvZq3lwHayRdufET3bbqH25kDWVyv3QEzhF4WxrFkANvyWVMDjcZApk8ZkkqbORwVGtOFOnzpP1nIVvvbJi99uQflCclOlIzc+5KgYOJmEZu7CQUeRqZ4S3CgyD6FGrzbIDNUTDDrq+czT0lUcK1Xw1P0X/4mtXLve5Yo9jHWa7e622xt8n3O0JD8MEmCe9T2oc0WLSjgkh9Z76CK0sh06zintZMoeG9/WNgRWwYnBrGsExEyXrBV3DSvNAViUueYl5e/ZbS6Njc3LUIu3mZ2BZ7Dmvtfu2+tDBXbBz74yJebZQeIkTDJlS3ttN8/OMjyaXBihrOug3vMEmVKENMtLGBLb5ch3DLB2VaCOL1p6sxGkI+5DPAb2+BvEIUo4PhOqZKSwgMAbNwbyumFHwGQkIUnnhaPi8F2uf1vYJFVtMjLWif0EWCJZXsq7H2mrV75orVPbcahZf+oELU/h8dC2h4XGSsIxI5ieK002v6MtVudNK3p/hTI1m5v3qGlew7kgbiPPFU/sJMjMt9qnxSb13treKIejYxSE4YvcpUhb1TLaSNMnUxp8b+jgIHOeKqhG475s8hRj40BmSGacbd34PV0axingoqsueYEZdm+nHzXVKF1BZejJluLUyf59bGfCJNtu4ev6I/VMHkiwwFJaH3GrNfnQnMIw== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230040)(10070799003)(7416014)(376014)(366016)(1800799024)(921020)(56012099003)(22082099003)(18002099003);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?MbCkJnq1WpbO+a0aUu5T64QniwiJYTz+7h6qlwbvUo67EIe9qB2Lc4MUXViR?= =?us-ascii?Q?uL507zOq0ew3bYd9Z+kAmIQub4hGaHrMTicUD9egdy1D7cQlDzRSbd+LP5K/?= =?us-ascii?Q?ItPLr4txE7xuAi7QmCrqsIpxWYSm8LZOZva3QltXcsD46qiB8dUuA9pfnhdQ?= =?us-ascii?Q?FmHTuoYq65shGr6Otm/EYrIq3kG3HnUH8H0rneqxw7rfy4xF/kW7Nwa9pw8K?= =?us-ascii?Q?vcAeXmldS7k/FGkUpve4k1V2Ya16uoA2sTJELHzgjZtPgZIT2VE+CUmwyYhf?= =?us-ascii?Q?88lVRqzKWd5Dt1rBddNHCdn9sqn7Rm79B+smNWefF/g1+jYxWdapM9UuL3Nx?= =?us-ascii?Q?lPUH6LWoq9x1RnWzmjaLKc0VNaspQ4t+BUVmOSvdpr+aSboejrhj/y06/Oug?= =?us-ascii?Q?UkDrmUGXLM8iudpEoyW4aEHBypKPAi6Ij2gVxpTvxZGpVdET8W6uKPXcU74+?= =?us-ascii?Q?z95XKWazXWlR4FNvpBloxGiUivHNZSvgSQE4hw7dbfmyLVdfTqMqe/HHUai/?= =?us-ascii?Q?z7YRff9nINfnLhrcIWM5PQ9JDqLtwGwSCCaCZs8nRPoK08QlW5knByVTdSPk?= =?us-ascii?Q?NpkqjTBUBKLJ5wou8eyHP+Xxex7AnqwvnzbxmZgXKqh5cL/kMYq0+UP7PtCb?= =?us-ascii?Q?dG3eoTbPvaYGaobhTqDjlAlFfLiy7/9LBAAjIwBPhdSoUMRV9JrEVw/WLgFy?= =?us-ascii?Q?7NAuWkpwWfebfqwcNwME+KoOEoV44xF3B2sJw/PwvNcckoywm69xTeD6ERdv?= =?us-ascii?Q?bE8wnRldljhMLpb1ryZEWuzGbjx45bBDtPSJm23h5TcBZjI+P8MDbfl8peUN?= =?us-ascii?Q?UYY0wwRjJWwQY+k6NM6+wwDmIf5CO7plq0yZc15JtoAdZ6X6pdqkRzknijRm?= =?us-ascii?Q?F0CacmVpIWJednVTysbmw4cmgIJ78eiqrl5s93MmElKxZp3sGwIBz8KxRAYc?= =?us-ascii?Q?O2fAZeVgAW7aeXif2csfuzwJ8/D/59bPqGxu5x37gXQD39ocXRxyTUGUOBU1?= =?us-ascii?Q?2YciAznyrS0XGWRJ+WHamF5J5iPqnhRuxU0Lc02u9qDi0NAcUw0I2H4Scjmr?= =?us-ascii?Q?XMPks6hymM365ifGN5X/ra444QQZF28L4fsIzpNeR5cjR0/C/T3JzTuWlSdw?= =?us-ascii?Q?w+a3PMG/4/vvTgm98HXFRDvx/InYUhXOUH9OE9sGVUo+xHxLEboHj5VwSuV+?= =?us-ascii?Q?DK1ETumWxrnO7ia3m/ZvCjKPyXA6+S8J1TcIUPcnlapSHd93ReZEKLfVlAl/?= =?us-ascii?Q?euE1jrwycg9whSrTzklrV+T66nAqIyV7Uy7pOvQ4ZD1O362ak8gEjllxPxml?= =?us-ascii?Q?b5Up46B75XL6fPQHOfSt1zIuqc4AWtl55Axzmc+OFsyMedUtLbww9Wtqa5Sw?= =?us-ascii?Q?XEPiCyxZWxfaR0N8p3FtSNWV6zQccr7aR1rigiq4fFJWh9ZqbZ8QN8fqVShG?= =?us-ascii?Q?LzjqYCRQA9phCVSari9aZl4as7JLhkpYPeJHJGp3K/UzRCQ79xPNfb5iXFfu?= =?us-ascii?Q?o4klzARqH1lNMhqGmFnKNRqtwDvc1tU5ilr6rRpA2Wu89Ak2qPLR+jv8w0pa?= =?us-ascii?Q?VAQi8MBP0UhrfDFg9/uT17pwoo5Bw8KcChpr1nnMlT2vCi1dUDmfm6V23xiV?= =?us-ascii?Q?WURQ/FqZvI+n+aV7/giEZmZPBg0FeIY5aBgdv0riwNLucNhXnpIraWckGzUI?= =?us-ascii?Q?VBCGPD1ub03C0fPAjLW6K8rENEKgFANjXA3Jy9I6l4cVMIcnoQo3JYyx8Qsd?= =?us-ascii?Q?pF9gJrZY15tqW4JHxBhpeht3ucCGMXdcBYVqmPp7lLEsoYUWl3hZ?= X-OriginatorOrg: valinux.co.jp X-MS-Exchange-CrossTenant-Network-Message-Id: c97429c6-ce84-41b6-eb34-08de9a306ac2 X-MS-Exchange-CrossTenant-AuthSource: TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 14 Apr 2026 14:16:27.3844 (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: mg6w+9kvlQ05c5WwLulJE3gzedFcCoMHQznUZHdp870rUTQfGUToR/AjPby1ahSI9LD5kVjrrw/EWF13nJpMDw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: TY3P286MB2529 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 7eb94dffac2d..bdc1bb932aa5 100644 --- a/drivers/pci/endpoint/functions/pci-epf-test.c +++ b/drivers/pci/endpoint/functions/pci-epf-test.c @@ -94,6 +94,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 @@ -733,7 +734,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; @@ -743,13 +746,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, @@ -761,22 +779,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); @@ -806,17 +832,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 16 06:51:59 2026 Received: from TYVP286CU001.outbound.protection.outlook.com (mail-japaneastazon11021092.outbound.protection.outlook.com [52.101.125.92]) (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 A34D83E63A3; Tue, 14 Apr 2026 14:16:31 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.125.92 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776176193; cv=fail; b=mv9Kvh1dkZwtKdRqPrUMCHN1hCjbPWjzOkCVxT9PpC8YPBq7idKt0Gev5VRMKpHyFPd4HMD8NLmdtJb0mTpOxrlpa9E58w9ZX37HHfNzFVYuUuxywKcPOjqtB3t3vwBdPkhgapvuGY68oaG2caoJpE+7lLycYJTcK2X9X4CJvis= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776176193; c=relaxed/simple; bh=MW1Aj0gv67C9tvqQ6LpR4zRW1c/whgc3oVW6U+bAGXg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=Gvjhu25Hj1fyJT9cM7Rxrj2JX7/gpABamS26zZBwiNaEQTJFEkNi7cwHNKhXlT0sKpohuwtP4CLE7/sFucDhc42T5BhlTv8QtoeBDhZb+PE+NPZHHoUF9k2ZSHbFoG+XwCDDrIPrwdNBjGJuzMIY3b9bFnLER8o7IEzyhTt9LUI= 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=F6OwtxgG; arc=fail smtp.client-ip=52.101.125.92 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="F6OwtxgG" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=yyl8Qwa1FoInG7Au2KGr3NkDyzukVfH820ZNmWN1/q7IYBoLUrfXrymJ2Ya7giz0E5n1mDRvLPSvEJCk9AMoDT4sRzy2kQCrPYDyuBAmsj2781kBpYxQBwlkZj1NUS6bGAG4Gy87CfjPqXqn1skt5UbQ4ojpZ33o8W9boN/NRVTjQv2T69nr9IkAfDX1mGvZA1WTM1n6NtrjrR27H46ElAHXuG4S5Z8fuh8GpAmMwWrrB1pAilkULJiqo45lAQSzrvjfjM5YZEzclEMbx3VJ1vnv/SMDZA5P/bQzxaqzgo+Z5bGmKTEd2cbpW7JNiG45xJ+DtkmITGllHmfuAGV8Ow== 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=trU5O1holpV7RmRFQF4xflLdExKLZ5LXpwXvnw5UsGY=; b=pPOiTWeG9TfXrLdPSOIgOQdPpbTyyAHI0j85IcNZkiEEzPex+U6PHq3aBg6eyI0moI0j8P8M3Ap+iLKo7baC2uTC2bXLSV7r9SbEutfLyddWb39OtQ1TYPAtrl3XIHYuRcsDjNkv1coyUKt80G1m9JxzWg056FoRpKeCMu+MCsTmMdICw5YjdpGtPipAhruIGbWKy8Ith5ZyBI8toGKrLw8AugtE/LHtA+1UQF3lf6J7C/LjaiEgOb8Lk/5BkuinNCUVwWMrTpF0Dj4okC7d2qpksiRuhDPNLt4KvGiS1U6qZBV8BxJQlpdUmjWEh37FG4B3qvRWSBGtEujn8uI6dQ== 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=trU5O1holpV7RmRFQF4xflLdExKLZ5LXpwXvnw5UsGY=; b=F6OwtxgG2W9H8ZhGas4VKn9ZYbetLYq+1gBtONnEMZ9MJ8/01jQ4BKRAgnciHiJppslLoa+ujU9S74Ug0qU0OOwF2EcSysTu3oaoicCqg0PujnvGTVJfTc9oA7KrIdKL70uGX8vncQb3abwZHFsdYQ2+Mszrh/pvL+D7EmrgpC8= 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 TYWP286MB3623.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:392::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9769.48; Tue, 14 Apr 2026 14:16:28 +0000 Received: from TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM ([fe80::2305:327c:28ec:9b32]) by TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM ([fe80::2305:327c:28ec:9b32%5]) with mapi id 15.20.9769.046; Tue, 14 Apr 2026 14:16: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 v14 7/7] PCI: endpoint: pci-ep-msi: Add embedded doorbell fallback Date: Tue, 14 Apr 2026 23:15:14 +0900 Message-ID: <20260414141514.1341429-8-den@valinux.co.jp> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260414141514.1341429-1-den@valinux.co.jp> References: <20260414141514.1341429-1-den@valinux.co.jp> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: TYCP286CA0290.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:3c8::7) To TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:38f::10) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: TY7P286MB7722:EE_|TYWP286MB3623:EE_ X-MS-Office365-Filtering-Correlation-Id: fb121408-0e84-4733-7503-08de9a306b6e X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|10070799003|366016|1800799024|7416014|376014|921020|56012099003|18002099003|22082099003; X-Microsoft-Antispam-Message-Info: KxbF948hg92+CX8XejSVgazrvq4L1+hqxjfCs2UbyKbdNhinEcmExQ1v1vge1FnltLRUMPkHKp2lQ8lsassJ/4UOn6oVY8i+rdaVZRagcCkUC+bLgbgzb6MWxWzAINl2bApDVDUgZDAv6HcIVmO22QwtIl8mOTJIen4WLar3pQ/zGGPLxWHdwsijJ/o2/Id+a/ztcRmOw9ewIoA71zo/ZXT2t/EPCWfpL446+9Q0IHKy/q/tlYgcLlVnSKcDxuqv4+RI7dmqq3frrQG/obaEG8ZFNr27VRvrhaVgkcRRJI6IG53cQLnZDVnjHC7hHYHkstaQTwGzWBbzoZ1vokYtc0NmgCCoGjM6wljn4H4zrQ9FTtnbA5XcNpESJK9OcsaI8yptNPNjX0AK3Riygc/gVHKdsCWlowcVW240f03dL3NBJ7vEqqzhwBK79OnwHvS9x8t/SvIaTRwa4s+SdWmMyzkVRGi4nIsBMLEZK8pew8/DxmzWTSRZDj5gCIU8xjiCzP/4lrrDDckRRWc1LBYl0R10Ux4/qEBHEO6ChRINRmT1eAfOErIvo1jczNShMibrdPnv08RS/2a62nvjtXU5wtYxj3s3klDg4SMBn2HktENcZI6XX5MQY6m4angJKRYy0pYw3gI41wnHr5X7JqYtnL107HHzUzY7mpkPN5OQZA93QGWrdDfBtsmQAd5iDSrhnnOKt6p19uwbOsnFY0zcQroSusZV2UwEWkEDe+7lejF0GE5Axz3HB6pxsaKHlHPhT7oWOLL7jBY/7skKNPAF0A== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230040)(10070799003)(366016)(1800799024)(7416014)(376014)(921020)(56012099003)(18002099003)(22082099003);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?EOXDI2NaM7Kjb/29+oqV+zphvle3qweicqA4RlXrGkwRUr/GaeLD5RylQ1TL?= =?us-ascii?Q?NzmLhiLoqkrgODywm1LiObquE6HqovIGsXbVSUJCN434EPK981BpeBWJQxjM?= =?us-ascii?Q?tz782TXv2Ylhnq2hwsgYaTsZaMbJMF/J40vl1rPh3JDU1MizmHM6HpjswFA0?= =?us-ascii?Q?7olEsqveCeuu2JEwo9jt7GZO1uAH9iIMIMCwF0Byzorj+L4xnTKEw8N350yB?= =?us-ascii?Q?kDkzyBD9jyWjLjLcB5394n3mlMgqBN7Gn8uxEwYvnj1F6vFyFZ/wXI/LaYlh?= =?us-ascii?Q?CSzzXeiWyyM8f78cCzvzhT9vUXeblVayQ38GT7JyhSnchF6bzbJzz5wvU/yv?= =?us-ascii?Q?XYo6q4M9xT63nGkHO0jVp0sYSGTW6bjfcQaIma9mduBwZc7U+jPRo7nrAbuW?= =?us-ascii?Q?T8zuaprCiYb2ibCtpWMkJ3ooIgZU6sHk2LwBfYdMJT6KwXpN3xpHfV0O1JZg?= =?us-ascii?Q?o+RLwbkexFbwcQK6WJtk6982blnCZzO+donxKglbrB8ws7h6RliGRKRD/OX0?= =?us-ascii?Q?q7HWYa8IG9fgGO6q/ihEeh2MGgm/P4iiha754eNE+fg+M6UWqJvhcfkDnWwv?= =?us-ascii?Q?5+DZ7BIONBy3CiUMj8BZFNn6dv6gvhydv6TbGgQQOS7ujtnVOsY6rqanFxtX?= =?us-ascii?Q?/5KgejL7m1jBcAApTUoW2Z+WwN6uDp+p/xzGmxmHS/QyDTbhGjI+2esXA/Rg?= =?us-ascii?Q?udIaQprJyhh4QT+nRZ17Z3nq6eK8LZFCMdCMuOcnAIoPpOf7XgYMXPKskGQs?= =?us-ascii?Q?KsCRy30paAOti/9rjN+nplmpzZ572rrQdslutOcPRjS85dNLZUaa2kvBw48D?= =?us-ascii?Q?xuCsBI52zysFleRANdob+elxmD6rS76N0G+971bRK6uwJSEyKKlt/pMozbKx?= =?us-ascii?Q?lZRn2RjRIKgUWOCLnt/3XPTmgpnzg9T0/xGeF1EkaUEHbk+DvBpCUBeQc1kU?= =?us-ascii?Q?jaAi1fSY2H02SsEUC2yJRJwkqStL4MKkukf4QOYwyBarI8c3iGT1PnIHoNk5?= =?us-ascii?Q?26oKFqkC6J+wv/CG5/nG6sYLiYcojLHMgvbSOn2ah0Bw0nesjZwy8zk2hIoT?= =?us-ascii?Q?MJ/Ew7AkHjOwkALjgbnItKhVZM6dmXNkWMxTH9k9KymOG+Zo2eg/vjppg+XE?= =?us-ascii?Q?E7ignu3e2u67QiYUcb5RlIYHQpY83NscfigmG7FjuSMcZl+VxbFLPixa++Q9?= =?us-ascii?Q?3JQcnferCR7YnGCcjNoked9PDdiOUHkgIjSrM1CDm2yEpu4Thh9vTlYu369J?= =?us-ascii?Q?69RPDH8W8LCh3rGOtRKOjbg1GK9Z4Cyu+DxZQqSRvb6zRWWWdqMYwZpKbgnE?= =?us-ascii?Q?WZMvQcNoist6S5VOKkWPqxZxzQtWbI/PuMK45CVPyTMvoZcw8VZiyX79gTNt?= =?us-ascii?Q?xIqEpaPyuKdQCrclxIocHvmViQ5mrCcKNCGIq4+4Xhs3HiCquvVDARCx0XuQ?= =?us-ascii?Q?ffut2Thp4tI68OHQCyFTP4DD3/646tPsVFd5Wry++NX4pUTOstFjxawQ7jrq?= =?us-ascii?Q?A0wWr3IixoYFmDfshAfZSwbsQd/NqFfsA3tYsmF3CFLsdSaD2ZGdHRH9hXk5?= =?us-ascii?Q?bxf75tpMCfFY8sMK/kPcaZU4KYZA4YOx3sSLMTo0d8hWs7hrZa53bnONeJP7?= =?us-ascii?Q?/PPVhc/c7/OxZ3UWsOgXyZ1gchMgiP+dQyRo5ZAvkh2SjuHhUZPoj2vM5zr+?= =?us-ascii?Q?8/HGgHELXJZploVJTMVRshXvso7oD77RACvmVEK8uKGoQ5v0t0BftGYPPWQd?= =?us-ascii?Q?smk+ve4KB1rQtFueguTsyhrCR68W+G2hFs8dTPw0L+bxLY1d6PGu?= X-OriginatorOrg: valinux.co.jp X-MS-Exchange-CrossTenant-Network-Message-Id: fb121408-0e84-4733-7503-08de9a306b6e X-MS-Exchange-CrossTenant-AuthSource: TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 14 Apr 2026 14:16:28.5143 (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: 25PLQRcAAzqZAuBWdm6Ss+4HwpAz8oPpqo0ZJTKbKb4PQ3Pt2ASjfnksKEUgIhqX0tBHUwrEBXIfwg4L8PB+JQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: TYWP286MB3623 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 v14: - Drop -EOPNOTSUPP to -ENODEV conversions. drivers/pci/endpoint/pci-ep-msi.c | 131 +++++++++++++++++++++++++++++- include/linux/pci-epf.h | 8 ++ 2 files changed, 136 insertions(+), 3 deletions(-) diff --git a/drivers/pci/endpoint/pci-ep-msi.c b/drivers/pci/endpoint/pci-e= p-msi.c index 85fe46103220..0855c7930abb 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,109 @@ static void pci_epf_write_msi_msg(struct msi_desc *desc= , struct msi_msg *msg) pci_epc_put(epc); } =20 +static int pci_epf_alloc_doorbell_embedded(struct pci_epf *epf, u16 num_db) +{ + const struct pci_epc_aux_resource *doorbell =3D NULL; + struct pci_epf_doorbell_msg *msg; + struct pci_epc *epc =3D epf->epc; + size_t map_size =3D 0, off =3D 0; + dma_addr_t iova_base =3D 0; + phys_addr_t phys_base; + int count, ret, i; + u64 addr; + + count =3D pci_epc_get_aux_resources_count(epc, epf->func_no, + epf->vfunc_no); + if (count < 0) + return count; + if (!count) + return -ENODEV; + + struct pci_epc_aux_resource *res __free(kfree) =3D + kcalloc(count, sizeof(*res), GFP_KERNEL); + if (!res) + return -ENOMEM; + + ret =3D pci_epc_get_aux_resources(epc, epf->func_no, epf->vfunc_no, + res, count); + if (ret) + 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 +214,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