From nobody Thu Apr 16 06:47:32 2026 Received: from TY3P286CU002.outbound.protection.outlook.com (mail-japaneastazon11020102.outbound.protection.outlook.com [52.101.229.102]) (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 235BA3806AC; Mon, 2 Mar 2026 07:15:07 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.229.102 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772435708; cv=fail; b=MpVd/JAw5rd/+d7ApZOfBA+UyOPOhUth40pfTPN86tugerjcnZ9aN7vKrbvsRkfEsQoFD1rQQh60tMYD69OljIkGljRiDWBiyl5wZf5iCX2R+ScpXSy62qpk5/G1Xg2c2uSset79oKc75OhuUnTB7+AQ3sZfEuTy2WuxyQbtul4= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772435708; c=relaxed/simple; bh=GbV8ad1cfEeTeulSvP/P3IAtBHRT8IqU8jKtcJaIjKM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=n3urm++5jYOkyozS5a5XhEPlygvzKeb4d8J63oD31M2BMAIRPsRqoWz0t5sg85i/DyjjGG/TrCARYiedNVUF2eCLC/0RxLkuHwdjaPMGKwgPiHKtV+l4vmw9X39lHxcLB6YNiyGwwnnE32Er7phOoFoC7oGwwbsWhShTBPsPT6Q= 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=Nhu5tJr+; arc=fail smtp.client-ip=52.101.229.102 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="Nhu5tJr+" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=kHx1jmzJTp6+00YHvnJqLw58hHNJnLSzP9jlzM8h2hLD5ipxBgdcCyTth5CEdoIIBxFM0BshwY3vAa456IW7OhXAUFXzZAjpXQnzDqFmVHAKKVubUTHFeukM9sxQBhSozqGalZC2c3m11Dsk9RhotAZLCvxFuBaiu1/QYBy+hInYWsq+98qgTMrJjIrY0I0wnZEYoKEi8Hi8uyKGWR0mHCAaHR6/3Yau+o+euy9sFuO6Dfs41a41Qlwuc8B6YWN+RaQyCniZUR/IQDGKDe5ZVluki8UnxmYB3HsXHVXNwuEtumh09hCF1z2ifhqljjyIz7fupn59lSeFju1SZKJauw== 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=X0Fkw4oF2bUSFPTUrbNsIVj4jeoqIuYXJeYJpeTOHw0=; b=r7PuPGOZsCGd/4Sb40KUvEhp5itAj3j4GopKotym8YtX8l7JZtdNPJIzOiNBwAwM1tOg8XIJK38R/aVkarKXl1L7vJjJg68MXrlK7CswzD5uSMpYg9r44UReTDtMGYEmmsD29q1E0mQZRNRZrLF892H/iH86U9NGAkCCBa44mP06X4GeXh1w20+rLBsHOZ3WzI7+UQSVhEYwTbLvpfe3PS2cicr6CdViT2k1k9y0yc96dN2H3fkcgbjddNjwGV6q6YWoMbUr9jHrqn0O864Zn+XLGnzzLT4rsHfpDDioNMXHPkt5hlvv7Oc5yQnmIq5PfXYrStzmEatBvAHaAsgorg== 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=X0Fkw4oF2bUSFPTUrbNsIVj4jeoqIuYXJeYJpeTOHw0=; b=Nhu5tJr+nErcEyLwDhHI1my77F9ONr/iIzIEWvx7WguT+bZHMscs2x8iFxZAY5RiIq5t2Xw48KylaJV9MvRaGROmyK6vCU8dXgNNUQzMu1dogxZBzgeVVjxRaValYqOGyniFUtoHi0yVYS8YwD1fGu7ADPN6R46liByvcw9pARc= 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 TY3P286MB3705.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:3d4::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9654.20; Mon, 2 Mar 2026 07:15:02 +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.9654.015; Mon, 2 Mar 2026 07:15:02 +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 v10 1/7] PCI: endpoint: Add auxiliary resource query API Date: Mon, 2 Mar 2026 16:14:21 +0900 Message-ID: <20260302071427.534158-2-den@valinux.co.jp> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260302071427.534158-1-den@valinux.co.jp> References: <20260302071427.534158-1-den@valinux.co.jp> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: TYCP286CA0218.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:3c5::17) To TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:38f::10) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: TY7P286MB7722:EE_|TY3P286MB3705:EE_ X-MS-Office365-Filtering-Correlation-Id: c5984a18-5210-46c8-4f65-08de782b6bba X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|7416014|366016|10070799003|1800799024|921020; X-Microsoft-Antispam-Message-Info: J7vYVg3n+QU4QaI4cLQmtiw0w2mG2mIcef7eaw9n+KPdCJ/tjc0AuHg0YRxPeGra9o5zhjSIdk83UU7Fakb5GrL1Rz2fRZFmxcHl0CRHgPPHSuBbeqbGdXwbNKBLGqDfgbRmNx3hpIWfgUypziETihYzrRsvmIjKWw90NchsFPqXZhIoo5RxubaRaVuDSWPnsElnHe9RBG0AOUTdiaJu4Q7csShvR3Kg4PdfMhKQ4yV7Z3v5Xw3n6TCevFis6TJHVTNxDKpglKhxUZsdFtTG+jiqEXAa0sMg+eiO89tdACxW/HyMKiW4pTuyr7z03uQIowhxwQj9B6Lf5xC5eNjWmxuUW7VSC3QFp74jI1l4B1gPzc+UM2hp7bIdBVaQxzMw7p46QJIsveh/4wtouJSTvKSfRMJxkpe3sTSH9hAsiwlCZshO3bwzyIVQSsFVkbWwD6cBkDFuU6+8vjCOgAQedrjXSVWw2+iAQ9BneoNE8h1X8Ykw+EgP5fbbsVAy+qbvjmuWO96AvK1S45HEuFn+DLmkhxTZCm2SRIUekTMn9zHS3QuoUxsMBZ6YsAsGS9iLM3PssOKUvJZgvCPzmiRfM+W4KyigmcLPCf2FXtAqm0ZnRurrwQ40Harue+hRy8Ks9gf+BkMwIhWwX8CkgUaf82DCLYDUIS9v7tp2C3n13W+/0aoCg2v+bhQ9C3kyv7E4edvQu/9BMdvvvh7DJuWIx5/yaVvzWMoV7QvEH0PDu4hOkOtTnjQMcv6iKr+Qkyfq5sLYG99PncWzCyazSXhVvg== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230040)(376014)(7416014)(366016)(10070799003)(1800799024)(921020);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?5sli9gi92y0cB7fHvV/sKWGNb7ufHNYOeNwl2GjC9NtU2QCKHGVW9BoWsU5r?= =?us-ascii?Q?uD0ayp2eotJN0YuVtvgp5eI6KQxOmhHHMCGTcXT8AuwPKgetmwHH61/xImIs?= =?us-ascii?Q?MIrl8sRcJspZZ8A/jYQIqzBeBRLQVXFdOhNvlCLf3trWcAIE/mnkjuSB/XbL?= =?us-ascii?Q?fc0VE3oDJ404asi/kryo00WIRSepJcdsm1bmDZ8lUalFmdaJGIDPpvZ5NDBN?= =?us-ascii?Q?Lbg4hPJ6Z7OexQRLz1UbqofeaXWaggI2OXUc9WTWGpxJDCp5FGnYNjDj+QJZ?= =?us-ascii?Q?AP2UMRDmytg/uACbPg7P1HPX9K1KaopFYXlpYvsb/ubG6mPFJCwgrnHfKbVM?= =?us-ascii?Q?90WrcQV+qLR3hdjHzQuq6xq99xfvl2K5oP17PadT1RdqqbPJYwOZtJk5f7H/?= =?us-ascii?Q?6BdSD9tXazHMtzHE2Ld0jzZRJscBDgQ6gdJ9u2ipInBwlE161tT8Ml3H7wy1?= =?us-ascii?Q?VzBzyLlmqbg6DdNHyzHjVsFxy1xyq68gOS7+IdWt5KE8H2geLPoEyvQjYVVP?= =?us-ascii?Q?IQ/WkM44JHfCEuZc6/7HDAuBv2Bs/jBuRL0GeAuVFTUDgKGxYwOUgC3/5FF+?= =?us-ascii?Q?Zn7rx75H+rOYamWDbo1FB5mR4m/PdetuJOx/RmHlK6khiPCr42W/0jFOksKE?= =?us-ascii?Q?/wlUHyujaqt0c3nNrUF7TwXYQumNN0yxAQLnjkGP/R0paI3W+Uo4IW9esHeH?= =?us-ascii?Q?q1tWncqCC0OKXxNVpcp0aM5NCDhS8Hu/FXcfDaTBdjACzIEf2c6HeFRGg+yO?= =?us-ascii?Q?cjZGVBdVpdk+u0HAKO/buADwNHnnVnHo/++lSr2+UIQNgZQspQ5eYyqmPn7V?= =?us-ascii?Q?1rlcu3qFWjiFqKfkCTtI0/S836RT1f+STBCXmf5dDfHhJxMcaONZUv8RVcGp?= =?us-ascii?Q?Db+OebFHVnL1rIfvaUFr8eFUZjmGBlikos9cKiEn1bjscg3r1DnF7Quyn5tx?= =?us-ascii?Q?wMDR0YciBWhtHuwl3+VZKt4snp73JHGoGkJJvnvp+Kozgpn2g32L1X1dcLtk?= =?us-ascii?Q?I5217jVOcW5dcbr1cvn+2rKZogHxeoFbbdZYPsc0y3rX0ywfcDuJJIMFVoCn?= =?us-ascii?Q?Jc3TxBt8gRE5ikCbB478eAwveViZCTHnPEGabc9/XwcCiuaCVK0pdR5VMr8M?= =?us-ascii?Q?roxKJagsDP3KG+t+F+a7QYnMnescy/4STrA6Z3iFEIgQs8QBCzpSCeo7dCRT?= =?us-ascii?Q?jK0npwCO+ObKcNQIq4TEv4EKCxCQHCOZV9DGYQ978RSzQD9ZAhtWsY7B9TXE?= =?us-ascii?Q?a1tf0UClMHrGnRVumrlWAQyv6Wdr72sPX6Prqx4ndCQzDKB9MDycn9LQ79ih?= =?us-ascii?Q?YE/GVUkx3Ef0tmVQ5M27gBGRhfQYJc5nvuEfUJMPAy7qrQKuRjAQUTnL8s9s?= =?us-ascii?Q?bmJgxCaBKQc9UU2xT+CfWBRNMFgiVdfwdxa5AlUqDVMKynWml9tUjRiVM6Eh?= =?us-ascii?Q?rIr78XIiFTKV/yrGlidWQCYyvXqJeCz4z5f2BepgMFPkcHe4sxwbSARb5VCn?= =?us-ascii?Q?D450pAFC0ZG9OqnJidyBrBHJUMHc5MG/S17pL3l+nZqlk76EUY0jxentl90N?= =?us-ascii?Q?jEp64vKk6miMlqve5H9Ax/5XXlJZQPwbBVRg50WuKzwTAm3l12stiBlyU7hn?= =?us-ascii?Q?DdSb0EC28dTJ985I36y+ik+Uq7S2eITjCG7lWlB41Xm3nOuwPu/1mgdWOjDR?= =?us-ascii?Q?pYWwcB7QaLRIBMH8SKX5tJeRPE7CMWE2EGhd6tA57A1kQz4wnQSkWVo93LgI?= =?us-ascii?Q?G918RgCaZTZ8oaaQBwvcd1qsAGjVjq82k6AEWzRuVQv8GZwxuxQO?= X-OriginatorOrg: valinux.co.jp X-MS-Exchange-CrossTenant-Network-Message-Id: c5984a18-5210-46c8-4f65-08de782b6bba X-MS-Exchange-CrossTenant-AuthSource: TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Mar 2026 07:15:02.0197 (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: 1HJ8x2bO7pjSKUMNphDpkzXqwzYwaUTQYlEUAkerHb2LCoNCSpLCCxbzLQ2qPjlcp5nL5cDEm4uptKkn0MWElA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: TY3P286MB3705 Content-Type: text/plain; charset="utf-8" Endpoint controller drivers may integrate auxiliary blocks (e.g. DMA engines) whose register windows and descriptor memories metadata need to be exposed to a remote peer. Endpoint function drivers need a generic way to discover such resources without hard-coding controller-specific helpers. Add pci_epc_get_aux_resources() and the corresponding pci_epc_ops get_aux_resources() callback. The API returns a list of resources described by type, physical address and size, plus type-specific metadata. Passing resources =3D=3D NULL (or num_resources =3D=3D 0) returns the requi= red number of entries. Reviewed-by: Frank Li Tested-by: Niklas Cassel Signed-off-by: Koichiro Den --- drivers/pci/endpoint/pci-epc-core.c | 41 +++++++++++++++++++++++ include/linux/pci-epc.h | 52 +++++++++++++++++++++++++++++ 2 files changed, 93 insertions(+) diff --git a/drivers/pci/endpoint/pci-epc-core.c b/drivers/pci/endpoint/pci= -epc-core.c index 32cf9a9bc365..d63967622505 100644 --- a/drivers/pci/endpoint/pci-epc-core.c +++ b/drivers/pci/endpoint/pci-epc-core.c @@ -157,6 +157,47 @@ const struct pci_epc_features *pci_epc_get_features(st= ruct pci_epc *epc, } EXPORT_SYMBOL_GPL(pci_epc_get_features); =20 +/** + * pci_epc_get_aux_resources() - query EPC-provided auxiliary resources + * @epc: EPC device + * @func_no: function number + * @vfunc_no: virtual function number + * @resources: output array (may be NULL to query required count) + * @num_resources: size of @resources array in entries (0 when querying co= unt) + * + * Some EPC backends integrate auxiliary blocks (e.g. DMA engines) whose c= ontrol + * registers and/or descriptor memories can be exposed to the host by mapp= ing + * them into BAR space. This helper queries the backend for such resources. + * + * Return: + * * >=3D 0: number of resources returned (or required, if @resources is= NULL) + * * -EOPNOTSUPP: backend does not support auxiliary resource queries + * * other -errno on failure + */ +int pci_epc_get_aux_resources(struct pci_epc *epc, u8 func_no, u8 vfunc_no, + struct pci_epc_aux_resource *resources, + int num_resources) +{ + int ret; + + if (!epc || !epc->ops) + return -EINVAL; + + if (func_no >=3D epc->max_functions) + return -EINVAL; + + if (!epc->ops->get_aux_resources) + return -EOPNOTSUPP; + + mutex_lock(&epc->lock); + ret =3D epc->ops->get_aux_resources(epc, func_no, vfunc_no, resources, + num_resources); + mutex_unlock(&epc->lock); + + return ret; +} +EXPORT_SYMBOL_GPL(pci_epc_get_aux_resources); + /** * pci_epc_stop() - stop the PCI link * @epc: the link of the EPC device that has to be stopped diff --git a/include/linux/pci-epc.h b/include/linux/pci-epc.h index 63a24ebf144c..0827650acf93 100644 --- a/include/linux/pci-epc.h +++ b/include/linux/pci-epc.h @@ -61,6 +61,51 @@ struct pci_epc_map { void __iomem *virt_addr; }; =20 +/** + * enum pci_epc_aux_resource_type - auxiliary resource type identifiers + * @PCI_EPC_AUX_DMA_CTRL_MMIO: Integrated DMA controller register window (= MMIO) + * @PCI_EPC_AUX_DMA_CHAN_DESC: Per-channel DMA descriptor + * @PCI_EPC_AUX_DOORBELL_MMIO: Doorbell MMIO, that might be outside the DMA + * controller register window + * + * EPC backends may expose auxiliary blocks (e.g. DMA engines) by mapping = their + * register windows and descriptor memories into BAR space. This enum + * identifies the type of each exposable resource. + */ +enum pci_epc_aux_resource_type { + PCI_EPC_AUX_DMA_CTRL_MMIO, + PCI_EPC_AUX_DMA_CHAN_DESC, + PCI_EPC_AUX_DOORBELL_MMIO, +}; + +/** + * struct pci_epc_aux_resource - a physical auxiliary resource that may be + * exposed for peer use + * @type: resource type, see enum pci_epc_aux_resource_type + * @phys_addr: physical base address of the resource + * @size: size of the resource in bytes + * @bar: BAR number where this resource is already exposed to the RC + * (NO_BAR if not) + * @bar_offset: offset within @bar where the resource starts (valid iff + * @bar !=3D NO_BAR) + * @u: type-specific metadata + */ +struct pci_epc_aux_resource { + enum pci_epc_aux_resource_type type; + phys_addr_t phys_addr; + resource_size_t size; + enum pci_barno bar; + resource_size_t bar_offset; + + union { + /* PCI_EPC_AUX_DOORBELL_MMIO */ + struct { + int irq; /* IRQ number for the doorbell handler */ + u32 data; /* write value to ring the doorbell */ + } db_mmio; + } u; +}; + /** * struct pci_epc_ops - set of function pointers for performing EPC operat= ions * @write_header: ops to populate configuration space header @@ -84,6 +129,7 @@ struct pci_epc_map { * @start: ops to start the PCI link * @stop: ops to stop the PCI link * @get_features: ops to get the features supported by the EPC + * @get_aux_resources: ops to retrieve controller-owned auxiliary resources * @owner: the module owner containing the ops */ struct pci_epc_ops { @@ -115,6 +161,9 @@ struct pci_epc_ops { void (*stop)(struct pci_epc *epc); const struct pci_epc_features* (*get_features)(struct pci_epc *epc, u8 func_no, u8 vfunc_no); + int (*get_aux_resources)(struct pci_epc *epc, u8 func_no, u8 vfunc_no, + struct pci_epc_aux_resource *resources, + int num_resources); struct module *owner; }; =20 @@ -348,6 +397,9 @@ int pci_epc_start(struct pci_epc *epc); void pci_epc_stop(struct pci_epc *epc); const struct pci_epc_features *pci_epc_get_features(struct pci_epc *epc, u8 func_no, u8 vfunc_no); +int pci_epc_get_aux_resources(struct pci_epc *epc, u8 func_no, u8 vfunc_no, + struct pci_epc_aux_resource *resources, + int num_resources); enum pci_barno pci_epc_get_first_free_bar(const struct pci_epc_features *epc_features); enum pci_barno pci_epc_get_next_free_bar(const struct pci_epc_features --=20 2.51.0 From nobody Thu Apr 16 06:47:32 2026 Received: from TY3P286CU002.outbound.protection.outlook.com (mail-japaneastazon11020102.outbound.protection.outlook.com [52.101.229.102]) (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 A5F97383C64; Mon, 2 Mar 2026 07:15:08 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.229.102 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772435710; cv=fail; b=CZesgs2zyzSuRFc50Qa+BAY51KS1Xeih4FdMK4uqZ9vhJFUfJz3eLPvEAiQ2kv+eJJEA6g+deJHXIRRSNLrw8YOuqcvP5ExODjmnkMeX75gS7mVexDs9RcHYeQVfR5DwCQh7BloIRMWTO4CeO9hjwe9bHbiecDY61zhNMLL5DtA= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772435710; c=relaxed/simple; bh=JWkkLxftT80qD3UgkgE3/EqZpxeJZgQabieopo48Jm0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=leauYw6lgEN3HKuX1c94c+fGoOhKiKxLYf3TyXDb5TLhlvIwwZ0rT/+TEROY42eJXOqab9zEG9fbj2OSlCwY9ItZb8K3iW6Nm+ItHSuKo737ddcKtoSUFVFsuwGsKRkfjhGdUgyyZd8iHs7hz5tS/ghg00thU0ilOvGkdJ0xtxE= 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=AIopMKKZ; arc=fail smtp.client-ip=52.101.229.102 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="AIopMKKZ" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=lQI1pxl9DhKH56utIQSBofzSC04Vs8PqnqkRdaeSqQWc6zGayD4z8/0gVx8wvla3xHI2IhqbrJWDcwdeen6rVZyjDWM9RwJ1482Sk4H4DreIy6bktwgvfmIM0uKFguWuNBn+tkSF0xty30rX49Qxo28dOj962mAgECwxwrgF4YyAOsjy2tDfcU+BnP6Z8Cysj5RvNMpr0sU7GsqvmY5p3lcCcgMG+k+eUvKQvEprc9DijC0qZgOsnp/EYs+f1Hcci6XKiKex67adY+dB0gbIwpOx8ACCAjbw/1+JaLQNADAWEtHF/wSboETRgWYnlRr2eLcSG34h8Fmh8p2OTj4dPA== 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=qdRPjkWWmSd6gSimlDedfci2e+eu+Ou95wS4Z6vKzRg=; b=U3fZgS9wbhrRdXCxxQdUJnYmKfgC40m9mVmubZuB5mY5q1VrGGOgqv1/skwpPh6pG9Zz1uo+DTGvidKhV/S48g/b1pTMbGZ7dbQC8OL3FIsxlJwofo2N64jyKtQb01vDXvHF0rTe/UT0YGOvq7sfibd5sokZbEduaFZueepHFibPTT2rz9yJpuYdL1+V+nVjYTEf/tZqR9WSLwjFuJl9yR9DopnYudFvm0/c0ZUKHzaOcDuvm4snwesoUSplKJEI2OB6mzHtWtLD82pQ8FZ5IsnpU1xSirdFqJXqrDSl3gitoIC7dYj9wX1scwL/pPYM++QlyTR/8R9sYit5pe76sA== 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=qdRPjkWWmSd6gSimlDedfci2e+eu+Ou95wS4Z6vKzRg=; b=AIopMKKZ1dKUmAyzPamA5Fk/oElHJukwYG9iM0XF1gG6GsSsGlSfvuEECpTa/E76O2NETs21KKenB6znd1iCYq+DXKHMylsf/T242Ei1cGGY4W0Ovtt/bq1YEOMgQom2SB+dzy6MA4tYtljPc7F03jth4HLknDayZXQJ6QWQllE= 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 TY3P286MB3705.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:3d4::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9654.20; Mon, 2 Mar 2026 07:15:03 +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.9654.015; Mon, 2 Mar 2026 07:15:03 +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 v10 2/7] PCI: dwc: Record integrated eDMA register window Date: Mon, 2 Mar 2026 16:14:22 +0900 Message-ID: <20260302071427.534158-3-den@valinux.co.jp> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260302071427.534158-1-den@valinux.co.jp> References: <20260302071427.534158-1-den@valinux.co.jp> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: TYCP301CA0081.JPNP301.PROD.OUTLOOK.COM (2603:1096:405:7b::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_|TY3P286MB3705:EE_ X-MS-Office365-Filtering-Correlation-Id: e3ff5e0c-9bd9-47ec-c8a4-08de782b6c7e X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|7416014|366016|10070799003|1800799024|921020; X-Microsoft-Antispam-Message-Info: 7xTiE2hWyy3yUBwMCU5gOJPR/C2SMyvxLBmIre32RftmsXgxFAmZX5GUqht6C7SNCrTw2fujwCa6nfQh2YBzSS5id3/E4ZogmkHMfmlwnkrp/d1Dl2cB7F8uVDPc2b/mujOuqvdphL5WaPbecn7K8tH0Bxra+Ud1/Ty0fTfjz1cvQ8lBX+UGeYrCGmLY/mC+QwerqNjgVOT52BxjO6xgr4ki3LfE00JvvB2Mq1JjuIJfQ6uHiZ4vXF72qPUrlCcVv1MWPz+o/c6nFQ1bkI5NVeACX4nSt0cX5yxTlbr2w8J1jbmbZMBtljWl4DY40f/j1z6exManzsmO1pD0TTb0NXq6Lgia6g2dxh3Et7UpEH75dJ+ifMpHVnxLIdkrP6hf8LkHEMkKoDzfjWNhULUtgVWPEAzx+Z9EyBL895yNC+TDjBfO0WBK+T3L9w1S7bTXVezDAz4OEUNyPdlzUb5bDPBV6YDa3asJ1cut1eNADwBfTZ6i917LhSfIDeP5lsz7VxqHat9pXOkgTO6Y2eSuJrT6oUJXehURSIysYemoDaJICrYQg0XxZsDo8Gfv0bj5cJIDoSlBJDlINyakwqoZ9Z7uqrboI3Ru5ZFor2BoA6ztT1ijEuWHEVPtpNmeDV3cWhPp6nVdfkv2ZOSdH0x1G7cX2ilOlJRClgbacstQl6zzer/DJ4YBUvBL/MzlFad2ox108brXuMkYjn3UZ+MNMONREqSBcrNFIYhvjYdc0r76QEHqCD7FKNxcXYJC2lTJ+ihCvUZMcHlK1w1pOt/jig== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230040)(376014)(7416014)(366016)(10070799003)(1800799024)(921020);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?IxZY0DbpAKPbQalcKeyod3ZiCG01RsvCYC+z59QNW0PCoDhp5wb+zgdLLEFZ?= =?us-ascii?Q?HyCYE9PT/Q48sRw3JaaVAbE9Hd6iKvOS5h1FVYiqoC5/f2yiPyYGIGWvg7qQ?= =?us-ascii?Q?EaaZkfT7ZKNgzoarvk4Yb6ha8UVF4K9x9I3jyQe60DMIDeMc/spXGyq5Vkpb?= =?us-ascii?Q?g3ZxfyfeXXxT9FbR8WrjfCQnt1NPA0blyKhjT1CF0+niLdMrD3GG17Vc/1gC?= =?us-ascii?Q?5cpd3S75C3MdgJNFcBd56eiFiEz/Eew03YH+BzseYoUk47Y8QnC88jqN0pCk?= =?us-ascii?Q?f4c/50dQRksb1Pi+5RXkeefqPZG5hqUlCL0S2qRQsypaDUYlVPwEnfINxfF+?= =?us-ascii?Q?HP2kkpJnQCu2uLR/1I4OLo2OgxjXKDf9WURtk9dLbwxMi7ZDcdQKq0cQmrx5?= =?us-ascii?Q?DE4wyZQOEjsvbmCECPBoby2PmXwgIFRMCsh9She7h/kAE2mTjZNXiJtb0vz1?= =?us-ascii?Q?yRjrF2HMGM8wRJzLLLs4AnO13UMjF3ciGe+C+gKp0IBtOj5xFMJaljRLKf8r?= =?us-ascii?Q?f+pDwqYepEmEFIcZi3Xwy8J7W0B/K3nuZuxQUx7b2rG7aYlgvXYCprFp7oTB?= =?us-ascii?Q?0Cswg8mmrKt9gxs8zG3Dtxwg7+diChPIUQfeF4PpVIcZIFeB1S9TV3USTeZG?= =?us-ascii?Q?uT8+EfJr2jVpdQjATfoohCC1Wxqrv3nKpdIxAq+22HYjBnCPk1P3hP6MjhWE?= =?us-ascii?Q?98sW2moE+XjGzy5UB4jgvQNulY1m8crH5GgNvyCay9/pbfHl5Dr+/qTeCHbE?= =?us-ascii?Q?G9kX7IoaY14MIxpPws6cM0pqIEs07ULIMaEVFVDFMflJtwhckNjK4EU3jr37?= =?us-ascii?Q?yFPmORRawwvm1V2YVscmA41uRELbEG1fF76Im2B1VdhbUwcijBboZliuzlMN?= =?us-ascii?Q?Y5CunO06tExdfrcyjFggOX6FFnxTgBcy/ukcWEZMJlmzLXwwMZCJbEz47+at?= =?us-ascii?Q?TvyqeETdRRiJ3uUALFb9wSZe7mxh2wzqtWz9b3NYfEnws8tG70pDBFRjg6re?= =?us-ascii?Q?8lxGZXVMkdbCu39e86SNooh4uw44zaqzNQ/xA1P7rtO6NqirwSbZBlcLItoA?= =?us-ascii?Q?sniht2NnchY9+m7qu/4xIgD6XPUZPWlbZitBKGbBjF7bJAVuDfKaz44Qwrau?= =?us-ascii?Q?uKNzhFFsaRNEWjvQL+Z+KUMNb1TgkGxUXt3Nz6WP51swGL+kWcdUNNWNPeOV?= =?us-ascii?Q?WmseF5dj/Bo+ItbQLK2s4U8cjNAJ6jdkIxUr17aAVjWP15/iywm+qDB0+lU8?= =?us-ascii?Q?T/9wwWzjyqnHnTkl7hhJ6UU5oLiotHvxC+D4bUInyAYQlvHEkNuCx0GoOYGK?= =?us-ascii?Q?BEWNukDsLzXWs15rRBygCPISuc2W/T/nDuBAH6rhWzGIdvgNr6IGICOumwNA?= =?us-ascii?Q?C84pppMb//n1ZJJiLwfD4FUJsbmX9HWDEnjGcYuX2Zbekak/y5t5aa1aRKJR?= =?us-ascii?Q?euD+53Vc/vrh/zn+4cqkJVC7tETLM/1DygU/QQ+ow4y0D+3NXWh2nS33PJcX?= =?us-ascii?Q?t+bmz7jWultgR+0KiSfD/eroWrEA+7irp2ANFSVbo88tqk4dgFJzlAIj7oMc?= =?us-ascii?Q?jiWuOEg6aM3xq6OHk3tb92SexF3kUjG/zv7qk3s8mJbthNYLcCBq+g7549Rd?= =?us-ascii?Q?Z52RidNQQs2IMVRIhhBkl9K+NDL+XrcPktBOg6ROVuMUhfoF7u/GD9EFsrLR?= =?us-ascii?Q?37qWWJN9QNqu83R6anb1ydg2NzUrznb22n6a+QgkZYhATbaJvzsN5QyQW9hL?= =?us-ascii?Q?x91zV3wTng7qJhyri4PkB5+JXCCEGlJ4oqedDo8efoVRU26751MY?= X-OriginatorOrg: valinux.co.jp X-MS-Exchange-CrossTenant-Network-Message-Id: e3ff5e0c-9bd9-47ec-c8a4-08de782b6c7e X-MS-Exchange-CrossTenant-AuthSource: TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Mar 2026 07:15:03.3020 (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: Qfqy6D706gSyNVo/rKcV3soDs2VU0e+gc/qx5Nm+ymkfRtslbOuAEKQHfLvvZnubtcauLhtm9vMhY8vZq3ysiw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: TY3P286MB3705 Content-Type: text/plain; charset="utf-8" Some DesignWare PCIe controllers integrate an eDMA block whose registers are located in a dedicated register window. Endpoint function drivers may need the physical base and size of this window to map/expose it to a peer. Record the physical base and size of the integrated eDMA register window in struct dw_pcie. Reviewed-by: Frank Li 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:47:32 2026 Received: from TY3P286CU002.outbound.protection.outlook.com (mail-japaneastazon11020102.outbound.protection.outlook.com [52.101.229.102]) (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 2AF633806A9; Mon, 2 Mar 2026 07:15:10 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.229.102 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772435711; cv=fail; b=tgYsTIrvMamDgvGWbO+XZtOrbY7ZdBOrRjupQOthOZKVrVBC8JVaf14JHde9+QKH2BgAYmmn8EPIA0AYO18T4UM4ir2XjXFDF8LxeY0DYG8AWc/Stb2W5D8jUN1dQyHt5kTFrOuNKs5gX92l8eIjMFaEIyIPXV+r+1GJ5d0QzMU= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772435711; c=relaxed/simple; bh=E/OTafXCLjUXB/ihwtFcw4GKRjYXMR/6CgKnRzDyLjI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=WWhIK9xyj+KFnoxUrI+nRmif9YPKKV6lsI2GVOgs2hA6g5OXY/nP8JB23w6kwdcNpwPvBqI9ghAptWihgipcb5q5/6JCMgXAfeRJn2saUNHpZI3zxA2b/Zzel3hT/dXRyOIRWC3ze5eiq2YDgy8eFNojYCgABTj7ATe83Nu9290= 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=ptT3/ywh; arc=fail smtp.client-ip=52.101.229.102 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="ptT3/ywh" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=KBrB9srlzVZzLv1XOZPbfLl1Nf7nty0g64ykd5465n1uU7evz8sr9H4c6DkOj+u3PRUpqtju97hL6MILc3GZznT9VvYlFEtFQBWi3diVReh+RfojE3wM1t3f6lWjWTdODLQ09YbYlWE/w924bL7/+51hUylaCXVIj83N7CkCwpgn58Oupua11NGRM7pWuipV/ltnRofg/08zagWVfdBltwNDDNbzCEWeRngzO/oM9kju63NpA5BvjX/JxR3/4RrLSMiFiN4MCtzrG80vRION13HPEmZAOxBjTcw+Dr/Skr0eT0bcUixJmV7to+Xo5D5YuYFodttk17DJ8aY52TVsRw== 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=SSLHxO6rAUifD8aee+ITd0SEXXDH6mhpuYdWyl2WFJQ=; b=Ij+IHgGt/j3pyEuUfNKhqgJnA/XsTWwOZ8pnbxFl18R3ATYvBOldax7dZI0VFSkRclig4D0815IKdzUE7r8GnC+0FTSNsIYrT+GZwOZ4yKHEiE4HKvyqBu4XLupOaQelbPpDio0rVPJA8nEXPd+2RB7XBTlIpUJ4gfSmO8iDUcizHUfTjE7qdeKiOmCEtOpmvNL/liAN0fKJD8zylcbGfGw6b5H4yUoRsZkLId63eb2jhimmrB0qkW0Ep0q2KszwnDa2l0S33gjVHyJ8GM5mDbPU0U00GEWHCQ74ZaI+11qitICu0ttjXjteCQ9BlRu92FwptGpQlimYeu4kunDaeA== 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=SSLHxO6rAUifD8aee+ITd0SEXXDH6mhpuYdWyl2WFJQ=; b=ptT3/ywh2H2EsqHhdavDWyD41owg2wnZHJofFFCt/sEo0MblkM9frPWghmD40c3tMx9Rq40tW2fWQ6WDeQtM3m1Cuscg/UPGSvjcH1sYHMK75w5+KVfrMG+V/jMeRfSv0b5qw8E+Si8FwPqAzzBNCzcEoRm/+Xn7HS2RgydaCS0= 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 TY3P286MB3705.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:3d4::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9654.20; Mon, 2 Mar 2026 07:15:04 +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.9654.015; Mon, 2 Mar 2026 07:15:04 +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 v10 3/7] PCI: dwc: ep: Expose integrated eDMA resources via EPC aux-resource API Date: Mon, 2 Mar 2026 16:14:23 +0900 Message-ID: <20260302071427.534158-4-den@valinux.co.jp> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260302071427.534158-1-den@valinux.co.jp> References: <20260302071427.534158-1-den@valinux.co.jp> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: TYCP286CA0134.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:2b6::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_|TY3P286MB3705:EE_ X-MS-Office365-Filtering-Correlation-Id: d5078579-b384-4ac8-6322-08de782b6d15 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|7416014|366016|10070799003|1800799024|921020; X-Microsoft-Antispam-Message-Info: n1uduvlOwO0X5c7ANQ46O8ruOYs96hWH/uCgxbgX0EOyeAtHS3JyBkNQ7KEFHLjHCzktDIicKaLHcK8VKjSW/AC+TrrDUJ9rdBRNR2oIO7sahMGTuHckyoLax5Y8Diwag4URapHbciTY5uMpxFbF9r1XLHHUbRdyrMShrvveuuIydF1p5IWBEdoc95Amwon87wSG0MtR1tY7kvOC5B5iD80qj7yuiUM88gvOVpCxWYetYQt6/7xd0bbtR+AOtRFmjNRIA8gDnTp9mUvtBGEiFi58J/l2djLd22YxSpDlzA5DMWLW6c2aICHgBT2GHL21J4/uNuq853CBiI1uyMLjTQ7a/cuUyHW0YgaPhFrnONT6Lb9Ej6dcRbNZ2Sp6XvcbhD6RvUGPmW2oqw/V2Vj4rXnze0aRkIkL62obU3u0moYpM/rg7W/e2PP/f33jp0qGdx0q5bELPzZ4FmNY7DGp/9jM7Bcaw4LWPqJ0ltceicKgncrKF0vUA+jXagMHztnpsIKTG7M/bKmKC2JhhIE5a9YMP3ryV4gck9/fEHmmWeUFq77eZvLUok9wocK92Nul74gTvCLzNo9zPv3sQiChSnl7tYu1vazz2zaHXNBjrt7yH8FyGYud6ov4/F9cTfgMt2sBQ0e8rP5N24baJWZ4dT4/+SVKYCgFaU+2avPADEvfFuD8n/YrFoBRpjdRR4Xs1W+sEdJqsoySpOKU95boKAcLuEDHITGlSSUVj0tUm1TxyfR6Eqvgf8E1FVCDx5lD/YW47lAaJVk+xgFEB2RHbA== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230040)(376014)(7416014)(366016)(10070799003)(1800799024)(921020);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?zCs0fFtCTc3Rf3BvXvV5rA96hoL6RnOL8k3FXvS2oj8Pr7aAFTnekojg3IAu?= =?us-ascii?Q?PRvk4N7bZogQRtUnTJPqvP9M8b05lRxpPtKODeagdZysce+Z7OVIEJWoozVk?= =?us-ascii?Q?HHNcwZDSgMSuIpiZq+PyNyJQ8SouucWYezHYpEAOPvwcOPWtz59nDMylOMg6?= =?us-ascii?Q?UBVFEC/2vkuwrURHoc1DifKYkKNrsk50neyGLHt2/TtqRFEZRJE0P0U36Qoj?= =?us-ascii?Q?NGHs/gxErWAr01bG8lPQ1HJUkxA2Z3RLr1l6xjy+SHcDcAJNYabowa8Ui1Lc?= =?us-ascii?Q?4GGNpRFj7T6LXZse1N7M41w6riE9wUYBUviOa9bdvhuzNQVrLk4G7yT5TNOP?= =?us-ascii?Q?sg3x7xrLsFFFKa04c/x9lpc2JSapTbD4vCdQpoTlezLzh4VfPyOPN52TL5W6?= =?us-ascii?Q?DkbSQNOF4Oped5XG6ooKk0GuOuMy5i/soBDftazb47LRqxOyv0X5ZTGSbZvr?= =?us-ascii?Q?NrP5E4mSJk1KnqVJAAfAY7lj6ErTjvisjoYfHkPMvqeayVGpv3DO2K+h036p?= =?us-ascii?Q?Sm/DLkfYVaaqfW69FHcMHuo49szwM9oXXrUeL+ZEBMVXnMdLBT399NDNAtoR?= =?us-ascii?Q?EHRoKIsWeTzeA0XDUMWIwbaXmfqL72Jvm6wJiMYzhq6N2HxJ531iropk6r9H?= =?us-ascii?Q?xyRwIKlp9c8RnhNe08lh9YwQLnABLwwf9fOcAPvTfpfJ5bnUp4QcjO8Hqh+p?= =?us-ascii?Q?EjD0+0XP3w2VReW9yAYGwAPEh1wowtuFv8Nl/bASbyZ5GMiK3/v76M2mzmW2?= =?us-ascii?Q?f1R14bWtYJGNA42rErJ99BHd0vZ3c6Gr8zrMRvHzUl36/hzt4d9GVZJbjM04?= =?us-ascii?Q?6X/EcqnW55LZ8wiBaDmpOsPn5h60b4pbbtxH6jYcRAvzI/qweQRgXZSe+2gw?= =?us-ascii?Q?z3AAhP4hzhjsFc2yvFconrXCv8xdy6WjYJtf3BhzZZQ9/g0ZnQ1BLanIX3n3?= =?us-ascii?Q?SMgcUBjUjBMxt/mDooB4Rgu9hV14VBHaPSSm4Se5PWv/LyiSoYvAm/I4SgxE?= =?us-ascii?Q?ul+879RnqwyXY4xVlQuwGAVVq4qivt/TjjX1S1bDi3Fet5oDVncEHp/WsgK+?= =?us-ascii?Q?rzw/qL4equobqH4KxdZkDF2m5hvNgYaYjagVbXEx+q/9QW5J3b9aLmd6T/8/?= =?us-ascii?Q?mfffZ83HeTTmWiejMFsCBHNoxeFaT5ofQBEG94SYAapSMjlf52kLbsPaVs36?= =?us-ascii?Q?OT+X339Lp3F95nxo9ZmoZHfnmoc64IeHEwtWlnzZSJJAHvxLb2qt/N72tRDx?= =?us-ascii?Q?KtbGTnN+jr46KDaoqfEAsKOXwbs+uJBG6ZMQ2DCrcZ1lE/0tA883nnuMY1u4?= =?us-ascii?Q?uhzcECt2LhF4KXttyeUZNS3hcHNRHrEXnQtA13SyUoXHzd0r8qPExfHpxbf3?= =?us-ascii?Q?6QJAdn6senjxHg0XfY5dnyT5ELI6Jez9GENTDRrTMiZ5KWlN9CzcVPvBiewq?= =?us-ascii?Q?r8kuNxMw5vRdImi1qh1PU+8LZlDDIVVZF+SpwsUsO4g0NoIVVqQHLP2uI4pL?= =?us-ascii?Q?nYOPFdH8+7KcMC7cSQP5JfwX/oFTrr58jTs9/V68U1RGy2LzWYCV4WLc3BuL?= =?us-ascii?Q?H2p7C/o3EFAuva0SnWNidTGpnV3XyljC4OyTJjzGgRQ9vaWiweoA8G5UmpTn?= =?us-ascii?Q?AgvAUr9aaMDq62k6HBJW4QiacGosbpj0Q1+clBAZ6V8wYbLCIMRpto5FvaqI?= =?us-ascii?Q?MbKE2MS7K5wm5VV/UwwMIIvyBzFI62WKT+otz//EQhpgY+zTxSuO+MON5h7N?= =?us-ascii?Q?5+gVF5rSu6d6rJ73hbVqSKerhjNLMnqP965UjvD7tafyBISI1MJH?= X-OriginatorOrg: valinux.co.jp X-MS-Exchange-CrossTenant-Network-Message-Id: d5078579-b384-4ac8-6322-08de782b6d15 X-MS-Exchange-CrossTenant-AuthSource: TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Mar 2026 07:15:04.2889 (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: v/9VN1NBAhIRIIDiDl4Ln/Y4qHsfcJ4Q96979VtnnfkYNT3nRdIPFujSb4AZTPKrJryZDJ/DTCDB1oOofCkDUg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: TY3P286MB3705 Content-Type: text/plain; charset="utf-8" Implement the EPC aux-resource API for DesignWare endpoint controllers with integrated eDMA. Report: - DMA controller MMIO window (PCI_EPC_AUX_DMA_CTRL_MMIO) - interrupt-emulation doorbell register (PCI_EPC_AUX_DOORBELL_MMIO), including its Linux IRQ and the data value to write to trigger the interrupt - per-channel LL descriptor regions (PCI_EPC_AUX_DMA_CHAN_DESC) If the DMA controller MMIO window is already exposed via a platform-owned fixed BAR subregion, also provide the BAR number and offset so EPF drivers can reuse it without reprogramming the BAR. Tested-by: Niklas Cassel Signed-off-by: Koichiro Den Reviewed-by: Frank Li --- .../pci/controller/dwc/pcie-designware-ep.c | 151 ++++++++++++++++++ 1 file changed, 151 insertions(+) diff --git a/drivers/pci/controller/dwc/pcie-designware-ep.c b/drivers/pci/= controller/dwc/pcie-designware-ep.c index 386bfb7b2bf6..eec20800a745 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,155 @@ dw_pcie_ep_get_features(struct pci_epc *epc, u8 func_= no, u8 vfunc_no) return ep->ops->get_features(ep); } =20 +static const struct pci_epc_bar_rsvd_region * +dw_pcie_ep_find_bar_rsvd_region(struct dw_pcie_ep *ep, + enum pci_epc_bar_rsvd_region_type type, + enum pci_barno *bar, + resource_size_t *bar_offset) +{ + const struct pci_epc_features *features; + const struct pci_epc_bar_desc *bar_desc; + const struct pci_epc_bar_rsvd_region *r; + int i, j; + + if (!ep->ops->get_features) + return NULL; + + features =3D ep->ops->get_features(ep); + if (!features) + return NULL; + + for (i =3D BAR_0; i <=3D BAR_5; i++) { + bar_desc =3D &features->bar[i]; + + if (!bar_desc->nr_rsvd_regions || !bar_desc->rsvd_regions) + continue; + + for (j =3D 0; j < bar_desc->nr_rsvd_regions; j++) { + r =3D &bar_desc->rsvd_regions[j]; + + if (r->type !=3D type) + continue; + + if (bar) + *bar =3D i; + if (bar_offset) + *bar_offset =3D r->offset; + return r; + } + } + + return NULL; +} + +static int +dw_pcie_ep_get_aux_resources(struct pci_epc *epc, u8 func_no, u8 vfunc_no, + struct pci_epc_aux_resource *resources, + int num_resources) +{ + struct dw_pcie_ep *ep =3D epc_get_drvdata(epc); + struct dw_pcie *pci =3D to_dw_pcie_from_ep(ep); + const struct pci_epc_bar_rsvd_region *rsvd; + struct dw_edma_chip *edma =3D &pci->edma; + enum pci_barno dma_ctrl_bar =3D NO_BAR; + int ll_cnt =3D 0, needed, idx =3D 0; + resource_size_t db_offset =3D edma->db_offset; + resource_size_t dma_ctrl_bar_offset =3D 0; + resource_size_t dma_reg_size; + unsigned int i; + + if (!pci->edma_reg_size) + return 0; + + dma_reg_size =3D pci->edma_reg_size; + + for (i =3D 0; i < edma->ll_wr_cnt; i++) + if (edma->ll_region_wr[i].sz) + ll_cnt++; + + for (i =3D 0; i < edma->ll_rd_cnt; i++) + if (edma->ll_region_rd[i].sz) + ll_cnt++; + + needed =3D 1 + ll_cnt + (db_offset !=3D ~0 ? 1 : 0); + + /* Count query mode */ + if (!resources || !num_resources) + return needed; + + if (num_resources < needed) + return -ENOSPC; + + rsvd =3D dw_pcie_ep_find_bar_rsvd_region(ep, + PCI_EPC_BAR_RSVD_DMA_CTRL_MMIO, + &dma_ctrl_bar, + &dma_ctrl_bar_offset); + if (rsvd && rsvd->size < dma_reg_size) + dma_reg_size =3D rsvd->size; + + /* DMA register block */ + resources[idx++] =3D (struct pci_epc_aux_resource) { + .type =3D PCI_EPC_AUX_DMA_CTRL_MMIO, + .phys_addr =3D pci->edma_reg_phys, + .size =3D dma_reg_size, + .bar =3D dma_ctrl_bar, + .bar_offset =3D dma_ctrl_bar_offset, + }; + + /* + * For interrupt-emulation doorbells, report a standalone resource + * instead of bundling it into the DMA controller MMIO resource. + */ + if (db_offset !=3D ~0) { + if (range_end_overflows_t(resource_size_t, db_offset, + sizeof(u32), dma_reg_size)) + return -EINVAL; + + resources[idx++] =3D (struct pci_epc_aux_resource) { + .type =3D PCI_EPC_AUX_DOORBELL_MMIO, + .phys_addr =3D pci->edma_reg_phys + db_offset, + .size =3D sizeof(u32), + .bar =3D dma_ctrl_bar, + .bar_offset =3D dma_ctrl_bar !=3D NO_BAR ? + dma_ctrl_bar_offset + db_offset : 0, + .u.db_mmio =3D { + .irq =3D edma->db_irq, + .data =3D 0, /* write 0 to assert */ + }, + }; + } + + /* One LL region per write channel */ + for (i =3D 0; i < edma->ll_wr_cnt; i++) { + if (!edma->ll_region_wr[i].sz) + continue; + + resources[idx++] =3D (struct pci_epc_aux_resource) { + .type =3D PCI_EPC_AUX_DMA_CHAN_DESC, + .phys_addr =3D edma->ll_region_wr[i].paddr, + .size =3D edma->ll_region_wr[i].sz, + .bar =3D NO_BAR, + .bar_offset =3D 0, + }; + } + + /* One LL region per read channel */ + for (i =3D 0; i < edma->ll_rd_cnt; i++) { + if (!edma->ll_region_rd[i].sz) + continue; + + resources[idx++] =3D (struct pci_epc_aux_resource) { + .type =3D PCI_EPC_AUX_DMA_CHAN_DESC, + .phys_addr =3D edma->ll_region_rd[i].paddr, + .size =3D edma->ll_region_rd[i].sz, + .bar =3D NO_BAR, + .bar_offset =3D 0, + }; + } + + return idx; +} + static const struct pci_epc_ops epc_ops =3D { .write_header =3D dw_pcie_ep_write_header, .set_bar =3D dw_pcie_ep_set_bar, @@ -832,6 +982,7 @@ static const struct pci_epc_ops epc_ops =3D { .start =3D dw_pcie_ep_start, .stop =3D dw_pcie_ep_stop, .get_features =3D dw_pcie_ep_get_features, + .get_aux_resources =3D dw_pcie_ep_get_aux_resources, }; =20 /** --=20 2.51.0 From nobody Thu Apr 16 06:47:32 2026 Received: from OS0P286CU011.outbound.protection.outlook.com (mail-japanwestazon11020075.outbound.protection.outlook.com [52.101.228.75]) (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 7A83D383C73; Mon, 2 Mar 2026 07:15:10 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.228.75 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772435712; cv=fail; b=XXBf8juOA8PrSHNO8diT7d+1CSlBxJCA1lWyIVeQBdXZNLyFfLJrrbPiHu/jlMxXk5a/umGi7PXN9tk0x2qCH7Ouooopch0OdyUz3sPTw8gI3Sw0QW4OXi3K5APFKtdD9Ykb8V4dcVYTr99Xb4m7tyv19/c7/VPvS81OKbPCZI0= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772435712; c=relaxed/simple; bh=24CtTktMCrTYnhJKM0CPxo89ofgYKr4aiWJjFoL6RkY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=LC+q3dsmYOZphWATLZcfBpeSYg5iyfS5Xfz6d+cuH6XziPuIpA/x78wxop+ovh5GiHbaMoaTQtwqrTyg9wecLAsVtFnQLNLUJMaetaP8LCLPm2XA8qe1G9pQavVE6u6qhFRU7wEk0dKuHMYjlQYGj0yG6sZ6SCcJOlc0dJ0SsGQ= 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=ReABcD+S; arc=fail smtp.client-ip=52.101.228.75 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="ReABcD+S" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=aHMmJiy2rVm3Cl3qVNkto9KtKTyyz2Ia82w+R/c+1WiF5NQmrPdoxANUqb9Gxvj8op0RbNnZYozgHgdlSH0U2vbFDFw25XEjvSVKi2PcB8yKYW/Ln/P956zMGqlB1TLc6fNNqeBKxOOdSRmFnmnZWJmFsurk58+gZPsVmLTSUaHcpDzG2PYtBICJyj+8XjQr1fc0WIRVZnDzxrTKrbAQBKP3hHkNKZhpdgpaApmKprtTUNkWhnWHsgK+kB2Tk96tqXuoCFKL2KBxFk/Xd2FplAFXoSvA7meqmUVGJ60LGKhR4H0Ad45cdn7K+s4EtStMa64zHpbcCyajUp4IMyR7Ng== 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=JCniCVtxtg8XsMk/lZalHozhYw+LSYXzI/gsDRr2TphPaiCHr1Y8JC8lPoVkBcLqCpJ7i0MjjBy5Ai0cY5VyVamg6l1P2SF6wrLCvCiGS1iDGF8/mkZk4Hz8r4gb7VIKGNIySEVslE4CcOrZ5BIBaqSmSvgT+thSkr7RASBg72PRSL9nw3S58Y8F6jObxyOdbyzPML4ybiDmnmGa6r3sm+GI8R09sVAm83UmLLZaYQplnD1htzISwwVQl/t230tcLUbgKWCI4rrqG+dC32zrs3SCrjyAsQ1fNc7Tc+qcsUkB6J4hy2ffvQTKSDJd3tWQk8ynUjnTQzUJZBBYr4/YRw== 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=ReABcD+STKWsBK3i3SqSXZZY/q98gwMBQn1q79NDYioWV6Na9eH2co2FbmJCoV5IlhFSWxmqk1gRre6U4eHNoDsIU1iG9NDCwMnoT/Z1WAUsaANo7+xRw3Ruvd+lQ8LOWBT2IRLBS5B+wLkFfVdo1r2OBVMT9go6aaySteLSrcE= 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 OSCP286MB4872.JPNP286.PROD.OUTLOOK.COM (2603:1096:604:34a::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9654.21; Mon, 2 Mar 2026 07:15:05 +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.9654.015; Mon, 2 Mar 2026 07:15:05 +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 v10 4/7] PCI: endpoint: pci-ep-msi: Refactor doorbell allocation for new backends Date: Mon, 2 Mar 2026 16:14:24 +0900 Message-ID: <20260302071427.534158-5-den@valinux.co.jp> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260302071427.534158-1-den@valinux.co.jp> References: <20260302071427.534158-1-den@valinux.co.jp> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: TYCP286CA0201.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:385::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_|OSCP286MB4872:EE_ X-MS-Office365-Filtering-Correlation-Id: 7c56e4f3-172c-4d2a-4cf9-08de782b6db7 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|10070799003|366016|376014|7416014|921020; X-Microsoft-Antispam-Message-Info: UAVbZ7EXjcWJZA575UQX1GYZpbXKzvJvvLNh/vj+dX1A8oFyVxmypqOAiZ51Zg/JgqknDKiSD1S1asbm1cpDoA7DmroMvmxcn9EeSXCWf/dYsiGAW8VLCLIds0CcF59Dvs5HaqI8o7f/pf9TciaAzl+siZgSUjl1Huovp4CNh+cN+DfkechWJT2lq+NtRlZLRe7G6qkURMsoYGrLLqOGpgxesbgmOyglVuLPJrgKZigcur2BfLUJYOE+OYN6dJvitSr3pvt2MLryJ4ZLJlruWho5gJg/SBrmSAXMArLCMG3sLGa9lgUCZAqwjlFFBdjaRJesNxSdmuNsxgzD9WMNo9iaz9Y9IbPiv+7ziXbLKWAoHqaqrK4+wirbgvhK9k8Vtxc2E6Y5aG/BhwxbRFMI9b2QpSXXuo+G+JH9eaMULnfuBy3NpmwmbOya4iZQlbUjYYHm9RDysEqLi5RPzU9uYkz1VDQtzlHOMky2H4WF3lW4KMg0XyfDLRWWTovPwQdmw+Eq6IQPlctfvD6bNUyQMP6nQ6EstAfO4Y/jgJjwcKjyHGYc9eGOemO1/MKlDQKgv/TfyrrIk7Cq2jgLwR6QTAdD+CdmvMJUKiYx9MQkuxQ6Nn/nH5TnyMcG2Uh054+ejb6r9AeU3eWhv5msTd3bEdEhAaBi16Rj8DHRmyoCr77lAH/YtUtuAaRXv0bCNduM3kPv48Lh/uj0PihSR5HtgeXQRFYj2Vo4ug5J9FUANeUpu+/HK6DrelAwGVLhGmX62QMmPBYGbXwuNdvcPB6xqw== 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)(1800799024)(10070799003)(366016)(376014)(7416014)(921020);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?TJALBbnvS1dLHszUMAtoZSYBP6DAswiiuAUD9wjSrD4/7RaXcpRVBib+DWpe?= =?us-ascii?Q?Sgf0VddfT50mCht2PsKCUb0YJjGLKcVNnPGBt5XDk0OmepDL4tRR9jy8X3Hc?= =?us-ascii?Q?y5cTGg1udIbH/X/+2t/Ri3AqHrNv0HZVA7OgDQyClCkkcIKhoZ70Yw9f/W0x?= =?us-ascii?Q?zPvmKQ/doJTOFA6J44deh0dqPxngpqrWus6zb3GTR9d4EK9IpI/OW3Fe0T9G?= =?us-ascii?Q?mwvCXJCuP90UmVcnKKgcJ7kPTgkA0RMDU3C7/h2AHWMWElqG7wLoggskCutP?= =?us-ascii?Q?5HCiM+c0G/8AK7Ax5UsYl2e4QxszR6GQ/ZY+bNE9bDAsctT7CsX2KKe2C8Ro?= =?us-ascii?Q?4mfbYlz1MeZwiR2rl5lAcq+5NVvmFRRKFDUTyML+tyADaZQaJ3du5E0ZnkP2?= =?us-ascii?Q?PziZGj8Y4zEgUFPXAOcISZfekUr2ZvKx5ZptD/jaCEj8kViCbdJ/8I/AkqK0?= =?us-ascii?Q?BPpuD7lR2VjW6e/Uc/MR78c/+cdOdPq9iamDT+SYggavy0HfjswmNuhgAq5h?= =?us-ascii?Q?hdr3Qwc+sLpRD/RC8AWpO5Rq3AtY190bBnUp2bfqqrVNOyeRe/pemphvjx5e?= =?us-ascii?Q?SNndYHi8tLPXDwznAggQl1Eq8YSWZAxyMqGVwYDTdHEP869mHQY9NlQlxScQ?= =?us-ascii?Q?JKxojRDh3dz/vpkZHntDT417BNnLiIVjt7/vEEW8imyLKmL0GVshV0Znzwz1?= =?us-ascii?Q?gIwjfCw0ogOj3q8lF4LV7xVKxyl7b3mPwdQ/ZOj+B3jzY1CxtfBMVz+4qmC9?= =?us-ascii?Q?ITayIm91hOu0JpVRf5tfAVjXbVaBEV18xRITd8iwVNIVbmbQrEdCDjNIC7TI?= =?us-ascii?Q?xffu63KiAJAQ0uMnvkKExhR/mLNU9VFFg8vFV9exjCUrBv1BMLzBlbFdT87c?= =?us-ascii?Q?5lDbda0QA3uOKTsSFL3gPqaZBtcCb/rdvA2JEJrW/b44DiOUnIoEro1DlNGo?= =?us-ascii?Q?r7TqLTe0XQlPwUE9SMA1TkFrlv+qpxg6e9gvNElDgHS/X7VbsgQJf30DLEsq?= =?us-ascii?Q?ZVLWWw574Jnj+/hXKV+1lDquBTpstshQ0sND53H7ThR0YPYQVQbytPnxedfH?= =?us-ascii?Q?CW+RAgxegkp5O165N5z9aaxLK3z9GMqFOu5nD0tMKakx7+l7/JWJSpVBddlq?= =?us-ascii?Q?KdotUPy2FHit25H8wa4XXMM/0tb9UWqbaTFtI18FRStj+vWOSc91d8NJIGVr?= =?us-ascii?Q?6BnNGlfG9ZBBikCvkRB9mY2FqMj+QiIxaOUG54O0Tz+BH3yqzCDx6Yz2nn8R?= =?us-ascii?Q?XyFFKwsm4sSCnEG3xD7wKzj0Q/lzOABOoiPtXLpYO1mx4WE9Mam5V2/Smqc5?= =?us-ascii?Q?52PtBou3B63N6mmkoG7W+fIY32733Luf4q2x3aY4q9uO+5QoCpyMZdQuOoaJ?= =?us-ascii?Q?Mif7B8eCamD/Ish5YjH3s6hQ4eF4kjKglXn/Lisp5PunCnHVKbfNamGmWPKI?= =?us-ascii?Q?2ZSBmReaEOS1or0UksD9msIbdYnbNtS9RHdqbRLltdJQEtjjrQog1JFCs68B?= =?us-ascii?Q?dANcF6VydwikLy7hHWn6piFGGxKvTCmYwsuTalU2dHppkaOxhous2WSWkRYk?= =?us-ascii?Q?UymHrNYc58i6PEcqZqjiIOvHQXbD4j5CecgsO2LuuiYYEBbaOScCFPI2hBws?= =?us-ascii?Q?NynHj1iSYDK/Pm7VElLoolCcvXUZBZAnRt2UYgsp2/lb3L6PQ14jXGrcF14K?= =?us-ascii?Q?D0ZxCQJehpZYO/CePWK+YQ0cizZb9H6I46ME5J9sVj9XvKopVlunAjagdZXx?= =?us-ascii?Q?VVB5cHtNrDgIxGQE/F3SM0Jhbp9YiXpsjCTgFo8gJm6t4P9Mfz/X?= X-OriginatorOrg: valinux.co.jp X-MS-Exchange-CrossTenant-Network-Message-Id: 7c56e4f3-172c-4d2a-4cf9-08de782b6db7 X-MS-Exchange-CrossTenant-AuthSource: TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Mar 2026 07:15:05.3537 (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: 1U4tbi+l0Ru+OJT78Ohw1D5zcpNGAqpABoc5xhBvmEzwd4ogWLOX+OagI588e98MsdBFioD3tfxRetBG1afXtw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: OSCP286MB4872 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:47:32 2026 Received: from OS0P286CU011.outbound.protection.outlook.com (mail-japanwestazon11020075.outbound.protection.outlook.com [52.101.228.75]) (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 B11F7383C66; Mon, 2 Mar 2026 07:15:08 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.228.75 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772435710; cv=fail; b=qETvpGMZQaWKzwHITTatXYJtzmAQEH6TfjMCxUlx9rr8HFRf7dTK6DKxe35/BckNLr/lvGx9vtoh4gs/8BCC8Ywp+VH8l+EcJHuXsuYdYFK6aCqFfAuYcDmOnTmcDii2bSCvMbwHcQd2jh78icgOw/zL9nkuWY5LC00SoW5430A= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772435710; c=relaxed/simple; bh=ITA6U7uL0+pf2WgyzbtYj2FplI4HztPd5WV/rptJ7mY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=GqWcxUCpGmqgDg4cOAqbN5lYSiRFwz32acaDr2MmAdk1nFolC6mef8puUFmIQs3tfhzn36gsipZHhBbcQeKkYwv73Uq6H+cMTebjd7T4eDmE5pQzuj3QrUzz+wiJRJw4ojh9giir0two0EdXPNEMp3svKhQAOsmbHtOaFUctbkk= 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=fzAPjE/B; arc=fail smtp.client-ip=52.101.228.75 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="fzAPjE/B" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=eyQ3M5Xz2dVRTmA8/srswF0LZq1aiA0/VD3h9J/vWrTvtwi66c5UUG/ae7QpCQxpkSoNGbYNo4hwwLi2h1Hfa4uKDucyvMXIewnOt3tKy6DJgE7kDHTsMWZJNtjLIngoHhWYCzkdzDezEk90Xq5L1D1fXiMDsYZ7m6kbYC52ube0ES1UfISfeytE/00M61OKz8D/Krp6PuiQul31HEvniJHTFraO2nX6Scyd0CSW5e4epi49Q/WXncK4BpvQnQiaBN2uLYUE2+8s9UyJkeT6y8DGLh1+x+IjB153xKQp/lPTV/Z08T1sfS9bBlVo4sF+gHkrW413wuRTRlgyTpvW/Q== 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=RAYGjLxytfJj6Ra9KbHbNZK1hCagMhSOsjJVgnK5kvY=; b=oj5qnTQECLnuVbCmVqgoSBcnnBNx5b17UWz039Mc0IwVuQlfHKr3vt5sQiGe59mRsKN71rzCoBbssBeD0pQDWHT7aY/CGHsJc/s5wOxxgleueMJoPOA96ijUNFr0O4YdkcnVXSqycmPsVxuREsBDl8HU2r3Jd6sNFYm98HIOKKMCBkv7CVXmxlZJN/iOQhNg0g+XfDYilb7KXeplwS+8rSbEWa0M0dHQwMKQACYdXgAm5kQBaX3nNn/RmuUqTPIAoxC13bZTF8KsyeIDuViy3oP8CquHaV98ZI6cBtCiu1YfiGQMNtbIIvIMBTJlPzItuBPFCeGWbD1L1bbY+fBNhA== 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=RAYGjLxytfJj6Ra9KbHbNZK1hCagMhSOsjJVgnK5kvY=; b=fzAPjE/BSXNvC19Dydm48NLG+f8YrbJ/SURXPMDRGeHCtBoiWcgtwhvUDtTSMkt73n1s9HX8pPy/VeC73vSyKcGl5QYaYa/EdHjacdSKnvcYIG1hpXa+PlkkBzT/FXoh9MZVfhPnHcRlsCjIqC+pvjAKt8sZeOEQ1koq593ws3k= 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 OSCP286MB4872.JPNP286.PROD.OUTLOOK.COM (2603:1096:604:34a::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9654.21; Mon, 2 Mar 2026 07:15:06 +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.9654.015; Mon, 2 Mar 2026 07:15:06 +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 v10 5/7] PCI: endpoint: pci-epf-vntb: Reuse pre-exposed doorbells and IRQ flags Date: Mon, 2 Mar 2026 16:14:25 +0900 Message-ID: <20260302071427.534158-6-den@valinux.co.jp> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260302071427.534158-1-den@valinux.co.jp> References: <20260302071427.534158-1-den@valinux.co.jp> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: TYCP286CA0209.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:385::12) 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_|OSCP286MB4872:EE_ X-MS-Office365-Filtering-Correlation-Id: 12522fa6-4521-41b0-1056-08de782b6e51 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|10070799003|366016|376014|7416014|921020; X-Microsoft-Antispam-Message-Info: HnXAioPkDNel9XZ+1xIT4MMZklcYghPQ8qtKpqnP2HlL2jvtyOeZJ7OKd7Cj5CPAhkvuLADXI8W5FBWpp4aNy1rVs2xoT/Jc3+WItyAyXFMTZBPfCwO1Bi4H+JdkQMWDzb1nWF6OIZWBD1nql7ishJ2BOfwiGtQFBde7XksN3mBFERLe8+BfDTJpCIvUcxHukts9EnmCV4sK1v0KtNvDPoNxw6oM+6xqtmYE66J+LcNnnoV8kPC1vdDClIZd487TOFfdimT1W4RkV5nXh9wEnESujAi4cC066DZNFDymicHQHmhXvq8osPVSNg7pVABAf7qM04jo+wcbqL25W0OJ0hB+Qr0/FqC125zP38ada+vHIKRw/+2ujq8hJoImtb5oF1iJPpeOxa3hGsuaevm5aCxVxj6vSAWZ5GBtx4xRjrWIXoSlzS6e03D4x98exA3BDV/sQ22BsIlkqw76MCpe8sa3jIjvaY9qLVakuuU2uizG2gFRPSMfSKb6HOlaf9QveR+sEf6YfrDmqE8FK7WkzkKymPqojx1tfLJOpGhA1cAVtYGEmoTQP33pCeWgvvaavHw1JkpSce/NcLOss6lHYkaVmZeqMPpAOZb20970oUqNcxm1OvwoMx7bZESCpU5zLcLk+FCMl6yWWXlpAtgysXADtVDRxe6Lyy0IrZ2z3RSTDMmVb1mnSazw5eaa/lh3F8jzDjTTWUl0RRl40MXnDcNnwpzITITwUIpszetAhOLXNUtQ30ksqQgfD13nHlTVIa8iPqR1N7YcMSn0ji4wfQ== 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)(1800799024)(10070799003)(366016)(376014)(7416014)(921020);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?EADrWqLf4nbTLvySUfD1q496G/jPvJIXpE/Lh7bywLAUAHpHmLyENbyZpUM2?= =?us-ascii?Q?sFiFCVDRB7esr5Peyy2UPOPxM407pD2EE8hCw5P1oNSiUHWtl+VhDB7jgHU4?= =?us-ascii?Q?eSMVIXRPHs33hPyfMS93oaANDSMlOHbtBnyzkvIDA5RXMFUCUiBiWbhAvT1G?= =?us-ascii?Q?Wvl5fIfMmbqOqUlVsyHKaq+Glf+M5hBmexrbt81zKhrW/Q0fgIT4kgJXXsK4?= =?us-ascii?Q?MYhUG9N4Xw7Q0D01jHeLPT0L9WwGSL4zO2nqU/Pw/0oeOPdSXB5SlF/kfmLL?= =?us-ascii?Q?ri9f/lTQJMlpDGjBnc7ilv0W9LwTZ/6u2q65ScsaXMzDSEBDsoWOLBOHiREG?= =?us-ascii?Q?aUZA/p6N+gsIH4ViRsTQkbegO0LogyZRrrF5T6sxgBJd7VLGaY1t+YlJDw7/?= =?us-ascii?Q?pumyrga2RV90Wn4kJZlLcLX30nNksBpU4w7S7JDIKPS/U6CeWZyOsSKSb0Cz?= =?us-ascii?Q?h1KdqpGTPiYbUCDjt8fzXUO/PIw0ZyBPJFw6sbrMWBihcteHUsRMfq6EvkGJ?= =?us-ascii?Q?z/PviNDt/r2FV0sE7AAF1B2lQGTviiJeoTx6hLVSw7p7kDTvt91U0lzggmr8?= =?us-ascii?Q?adJk4jZFQqMWpK1uOVN9iBPexwbv1re50R6GIQBXG14Ypk8RV9F6N/B0HyFt?= =?us-ascii?Q?b19KGlvTXjB64XFETa6sTkluhJC5JxsUKTwHRm6pF7GUuLNbGxUfOgbcBjW0?= =?us-ascii?Q?ORw/ZOTGI/eSV39yRsQU0nUQC50dysChD7OEBsWnJvK2ugWxejrF2EE1dBr1?= =?us-ascii?Q?oPiBdRhrjA69jbJB+Vr5faOb2kcg8hJIkARYruWUsWrTWtyVyE9S1boWTwG9?= =?us-ascii?Q?8LVwQlenS2QJ08HCpA6fDxqCOEP4o8nO3j23dJ2RDMS3ynxIJN/ZWgc93lLa?= =?us-ascii?Q?mfSNiDZY+8rEO3lGBo4n8krNnku21V1nTendEWQ+Hedmke99fLRwnt9ug6Y0?= =?us-ascii?Q?YDibLO9Ltg5MQilwAcFHqGD8WCZYofvunsbh8xOH/ZLEHhVP4JGAV5hASdZL?= =?us-ascii?Q?PSNAxF8s9R2tKXy8Mt4Mwg9ftHlMWPTEflIwyhOMvTSGh3DajqW8wx5Y231A?= =?us-ascii?Q?eeRMCBduncAeIjHB12cB12by0zpNlKK7XPCl0fejA/0RWLZEVoyPxHHX+df/?= =?us-ascii?Q?FRUCHzfgvCZBX6O9gr4T19h1Fe0AcgGdusM1XENNDLr7Nf2ILGDhJGxdp1E+?= =?us-ascii?Q?Weow8YCJy3Skc08v5vljMobEhFGiPApqZAoAMm1AmiKxK1MH+DZhAO4uVDPq?= =?us-ascii?Q?wn9bfhfXt/vTElpTkO7GRI+E/8N0CPiPN2Y4FzO3UWAMCV+SiDPCRQd7EhVO?= =?us-ascii?Q?mR4HllXwvPuSRZGvbxjtVtg8GpKBNZT6Kfn0vbPc44aY+KPGqMRIIitFM/kP?= =?us-ascii?Q?SXg2ALZJb9D15ZW1/kZxLgbv/f0Il6PgvsA5eed62RI5V542OvZafbrtmIK1?= =?us-ascii?Q?v9zso6zWTzkmP4XnLxjdZrIZzsv1Cd0Da9yqduFBI1Ks6e8QekycmgtSmvY2?= =?us-ascii?Q?BkomxfexWrR7yCZsbIR+IkThg+OCWJlwbkS6vtOMJcr2b1AO9I1aKm84lvrf?= =?us-ascii?Q?A3pDSjVwE9qAxrjyJ5nQa9TXvcbuQqqo3KExY3VDwZehZBUtWqegXuQ1gkug?= =?us-ascii?Q?F6VIwFVQVnFbhSooSmRDcdtqaMwYoZh5Z3RB2JEgxOih0k7doBHrdpD+96t4?= =?us-ascii?Q?U6tYHWj4dIhK8K+L3RYr6UhmnA+Kpt3YydGDyJjF4wcU3ob3qVmJkD+Xgil+?= =?us-ascii?Q?x9cTsLH04cTltrp7Zt4M5BJzn+3WqyzIs06FjHjXfx53niYR35RV?= X-OriginatorOrg: valinux.co.jp X-MS-Exchange-CrossTenant-Network-Message-Id: 12522fa6-4521-41b0-1056-08de782b6e51 X-MS-Exchange-CrossTenant-AuthSource: TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Mar 2026 07:15:06.3701 (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: 1IGmxA4SHypEqzJ1Y6+Oc/6ItJz81Q8XkiudZyGPaiqT+KcNjcFPF4cU2OuLVfQU4CBEt2VIdTypnhq3O0+5bQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: OSCP286MB4872 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 Signed-off-by: Koichiro Den Reviewed-by: Frank Li --- 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 148a3b160812..8e9a3048c2e5 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:47:32 2026 Received: from OS0P286CU011.outbound.protection.outlook.com (mail-japanwestazon11020075.outbound.protection.outlook.com [52.101.228.75]) (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 8600B383C77; Mon, 2 Mar 2026 07:15:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.228.75 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772435714; cv=fail; b=nqddhfDFUB1wY4q0Z/kk09uELwQUlcQ4boF/EmaFRDu+EbGXwWftoWdacC0rP4cqg0MwsmLx54/NPcVQqpvuCsTBcfghykiQAxOF768dvlhjAzHw9TcfIt36A+V/JR4ig/+QSjecCNWAFWugrugIX82pl1//gibToI7bCl4s+u0= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772435714; c=relaxed/simple; bh=JLhFeEo0xxtRK53o32PFqPKhetCrVXKsSD1nGlvmOPk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=GNlN6BBf0GJMP9c/1JBCWRVLmXh8ELKGE+XIauTPnrRf7QTo4JWENbT8fIoUOi64MvhXdXkEwGY0beqV4PTB0lTcEqgE4ZVfES/Xzb2YinKdAxZrlA2Cc6ddmiXPEijcu5Cr+UjU6OK6uiO73RKD0TKHbtQevBaoJjnIquzw29c= 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=NcaKT7fb; arc=fail smtp.client-ip=52.101.228.75 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="NcaKT7fb" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=cj8YHpGfToKnmOVqD7Pns4gM5rCVwemAdYuvHVQ+sa/ymCE+32k2YLmz502RM14CjpA1nOWA7Mqw2pOzZbta08q5tIkSnjJ8S5QQwaxj5z+zQR/LmmTDnYuWUhxGG48uqdH+K9QdNhBx0FdZB24yp2m97gvhjttZuotXjKR9UIr61d/0go/KUF2ZKB3v7YnZ36GxlDGfsgDu+YqYqI8P+9h1q/uiR1XiZc5Fmx+S4EJxYQMo5cht4A1yGHx9V67T4R8bfjwizUUhRSvu8hv28XzAvisp8ibLYkN1pVPvvg9Niy8+4ZV7tWFMYfCoQQcDxpUWkJA/Xf0UDsQCnf2tyA== 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=XqXmELfjF+kO5KOzf2p73cdYwrP9bb+TVFCrxYRlBLI=; b=xeRPJcXjZU5TC3FGV44CxM2unbifEZmaA0oMfprosRG1Z+grwJNGkNebQWBtQsAXrwvss1RS9/ohxI5gptYywvrSsCSDqFQs+9W8ubbhkdJb8Diqg5Mf72hFuaPBUPD1QwB35hcv7V4dVaWCAUSv60zpzixifD+dz1/fA4G5iRQcB09/1zi4hSWlpuiRnvIp6tPZE/uyysXrbdPdqZ2kKlKfmoyhb81TbL1G+Pox9oeP0hEzuksn4GXpN7OMLa1PlSiXWRPT4TIuVNdMGsiusmGnCd8rv10Vdha5gP+pXnGDR/C3Xh8RGRiNoiFowD3Bk2OvQirdFKF58mQqE4em5Q== 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=XqXmELfjF+kO5KOzf2p73cdYwrP9bb+TVFCrxYRlBLI=; b=NcaKT7fb0+oCBfP5y6AlSdEORF3LQvNNK3C5Q2id5FJmtMh+fH8j5auNx76CLErHOhgrHRxnM9muYZJdiTqMcWBP1yzm/KriXOGNKC1vvTIaxh44vGyHci6f945ZS+7WM1ri7zLpTKPuVaj02d27mvUveunCx5os8xFRzlTwiXw= 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 OSCP286MB4872.JPNP286.PROD.OUTLOOK.COM (2603:1096:604:34a::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9654.21; Mon, 2 Mar 2026 07:15:07 +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.9654.015; Mon, 2 Mar 2026 07:15:07 +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 v10 6/7] PCI: endpoint: pci-epf-test: Reuse pre-exposed doorbell targets Date: Mon, 2 Mar 2026 16:14:26 +0900 Message-ID: <20260302071427.534158-7-den@valinux.co.jp> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260302071427.534158-1-den@valinux.co.jp> References: <20260302071427.534158-1-den@valinux.co.jp> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: TYCP286CA0184.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:382::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_|OSCP286MB4872:EE_ X-MS-Office365-Filtering-Correlation-Id: ae39af1d-2c02-4b3d-7aad-08de782b6ee9 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|10070799003|366016|376014|7416014|921020; X-Microsoft-Antispam-Message-Info: MC0mPBfNC7iNdOzkJXDrMJLhTZ6D+DNgj8dXUgi+9x92+Mx0IjMJV76NVTdox9eELlb3wosgdINxYY8YeU0tuIQbKbxa7o7RvSdpEaFGrsXqbIKuil5wuZipNOpCDKlAzixZKKJ7yrj1a00e8TFNpKFiou/Ad2aL1Zhsg4Ehl7wYBLCJxucUMIQ+14G8S93Plrg9cmW07dumQ/k/CTQWUcbJ4YB5fyoDnD4SWXksr2QLhGlxSAPb+tP6Q/0IqMz0+VjDIpxHhul0vrnq8WMGm446ossRSt7xJbBQDjCRv6KHCb7shgTLw+5L3sMC7jdfxrYlYBvj78xmbcOn3xJu91qQXg2DG+aZgWHEPKtWWGHnwjk9LR48/vm85iaGbBwiBqG0c3zDmKbuiBzEbhUbRYg1ZcIHiaKcUxF/giCbtoxsAI9yHV/vZqN7qS4B5h92/LOa9n6P2NGKAKDNSU5DBGNthCbv05cVNFLsIGF6SUmeNl1j0lykISIUGSfFpxoGBX/GEpLqfdEtkvG7XsEeVPB9EDNauqZxXJ9zgTCPpP3LrrHhXA8lAP3PFNhrPLBh964vnEns5v0vsuRog/4ygnOJOd/n3g/LZO613tPMBla0Vv85jqNf+8jjE4FF/nevGTHQ6zFZQ01f2Mi7n9PRA7uhd1G/3MqtQhzNSOPfuG2Yc3+NdyOlhkusF5FVFbWu+m62TIyLZFtvJXyZQstuldqQnLlT2fk7FPPrYN/VXviwYoJ122c2Sd78kZ+yKeOxdu+Iqow1zzss8ryyIMobyw== 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)(1800799024)(10070799003)(366016)(376014)(7416014)(921020);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?WhNN8abIBPYS3czkmvoBXSfKrp/aMIgLI7DkWHGKmzDcGYzWQ2hbgGJKpaU/?= =?us-ascii?Q?vkQzs71A6udy47+jBodMcW3h23jmenD2NzhTVlLQs4chz5F3JtPLbRir3VX7?= =?us-ascii?Q?ZKMyfqGujoYCT1D6L6yaMBp+gcBYJyEZV5K+Y8ZTSUt1BBh/9T5AiAZWvH9u?= =?us-ascii?Q?6ROBHIwI0rwDgcdu9qkLMcmupl5mFLsVE5lfCfy4QqTbVIavna3YOvUvMNar?= =?us-ascii?Q?+deBLBiqIren9Wyv/MkQW4xYZABfJXAYVR4lDkXOUrIhnwzf8Gs7dbItGhWr?= =?us-ascii?Q?jUU7ls8VuIYHgQSLFzcSBn4aEL6GzpmQ1DLoNgNTKjWCAAU6xKZDSgoQeR6k?= =?us-ascii?Q?ErHxdyybMu6TOAJSTd1/YXRGlKbYLA7TPxeYEfpV+8S0lk6C0lcChvnOvcOK?= =?us-ascii?Q?ibLhHSgyJgRbRhcT/JkGBuTNWJFUPh2PlgCHgBs3I6Be2RczNBaVEMP6YQsW?= =?us-ascii?Q?Cjfz0q4ByyGm9lN1XBrXZUDd4lETrvVe5qVkaLC2dBwz92VUhLiID0gw1Dt6?= =?us-ascii?Q?Kia9YvUO2muVmZpxjSTaNJHQBi0gtg0XxxB8gxz3Pi5V3/zl2P70YCfcC93B?= =?us-ascii?Q?FX86z+AzJ0vCYNwayTnetE8m0klDexiBZOaAbw4wZdoNoInFsz1G6wAktK0u?= =?us-ascii?Q?vyf6uMt1d5EtVXHE6Teq32fDRKE7+QeR+1vuNRnYTW/j/+4E3/DLGzV/pgyS?= =?us-ascii?Q?UCwdYSxL/DpSr5Tje3ymbbL/kX62QlCYXQrEDp2OCGR4gANsDM0/AHsKfcwU?= =?us-ascii?Q?UXeGiSGllXrjH9ycJrWq2nuJJIhdM53CvRIxyeSiF+VNpdxGe9QDht9lIE8I?= =?us-ascii?Q?Ni00Y18J5R8sOSgokzWKZvXqt+2JM41WVcqX7m1Kwtpr6pHbDl5raykg3zYk?= =?us-ascii?Q?Qgec4JrLFrOp50em8QyeFiCHYJQsqVB7Lbt2DBwfx1zcBXgcrYbQy6gSEcf6?= =?us-ascii?Q?LowwvYdMzmR92IFQEzaX5VT7nzthntThfOTNAzO+ZyFQdj21RdncGZS+iKOc?= =?us-ascii?Q?YqajwI14TyDDqEa1GLvAzuEUOJC2gVGOKS0o7K5d8P753DCHfVb/RTzWJsHG?= =?us-ascii?Q?07D8+Z+Jg2h3JyY/3qwo7JbKsUL7RJa29ekHSbXy3zaEPe3YBV9QY55DLbh3?= =?us-ascii?Q?T2DCySptNNWd5bgN+nqIBUlLlAYYHp7pLVb/7ZgWBCrb791U2HBljv6LMu/l?= =?us-ascii?Q?Ov/kPyYpWVqhM38BYvPsg4bCodLOzUlUFCnOwQVIDSbzX7Ht5H375TFBygck?= =?us-ascii?Q?s399ezlRaanyuc3lMfzOLLxvDTNu0OtQ9kewefpvDp2HY4XIWpsVVsSa7rha?= =?us-ascii?Q?iIN6Ugw7rpcmIePp6PkfXx1ZKpqZngXOLMVgezpB+M7L4EZc0sWtulwxWxy5?= =?us-ascii?Q?TGwXNN0p+r6/8wgLqlxANfGftKPoDUvAIMjgVurGjzoTi/tJZXJCGXeQCSwH?= =?us-ascii?Q?+N6xA0vUuOvuAfthAP5Tuh7XQMEIn1pQsNx5dwVVw88v71ILr9NSmr1BQO5g?= =?us-ascii?Q?F9eOwfwWC/uP2fc8GQHPy4l8RmS1vtEQSRo/7OzZN2gq00DEUkEo5DCeQuyG?= =?us-ascii?Q?1kpHmXdrYQmt/8iJ7HGAtSz8qOBQ4xxciDw7CVZYEU3cr/rALjBQzogmnojx?= =?us-ascii?Q?mwWWMpiu00cZY3j6E3ZowOzeIlP4XNF3szbUzFKEMylj+I32HFWCGFOfmUXw?= =?us-ascii?Q?9ZHKnUGG952NmLuAXJgfXLHam1A0XIHSBjRL5vx9uxXEzbE/XLIxoce4XLTv?= =?us-ascii?Q?g1KR/gqtf1gAu+WhG5pDK061KS0QgOQlImYzv0HiakfoyAG/S0be?= X-OriginatorOrg: valinux.co.jp X-MS-Exchange-CrossTenant-Network-Message-Id: ae39af1d-2c02-4b3d-7aad-08de782b6ee9 X-MS-Exchange-CrossTenant-AuthSource: TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Mar 2026 07:15:07.3634 (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: Qp49mD19THsXITAde/0sWmNGxIZXw3xfb7JCTexoYCLnaSD+60VD0MyQsfkIpYSXT5I9ZYk3f04isTdooJFHJg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: OSCP286MB4872 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 Signed-off-by: Koichiro Den Reviewed-by: Frank Li --- drivers/pci/endpoint/functions/pci-epf-test.c | 84 +++++++++++++------ 1 file changed, 57 insertions(+), 27 deletions(-) diff --git a/drivers/pci/endpoint/functions/pci-epf-test.c b/drivers/pci/en= dpoint/functions/pci-epf-test.c index 14e61ebe1f11..b6c865b0883d 100644 --- a/drivers/pci/endpoint/functions/pci-epf-test.c +++ b/drivers/pci/endpoint/functions/pci-epf-test.c @@ -93,6 +93,7 @@ struct pci_epf_test { bool dma_private; const struct pci_epc_features *epc_features; struct pci_epf_bar db_bar; + bool db_bar_programmed; size_t bar_size[PCI_STD_NUM_BARS]; }; =20 @@ -732,7 +733,9 @@ static void pci_epf_test_enable_doorbell(struct pci_epf= _test *epf_test, { u32 status =3D le32_to_cpu(reg->status); struct pci_epf *epf =3D epf_test->epf; + struct pci_epf_doorbell_msg *db; struct pci_epc *epc =3D epf->epc; + unsigned long irq_flags; struct msi_msg *msg; enum pci_barno bar; size_t offset; @@ -742,13 +745,28 @@ static void pci_epf_test_enable_doorbell(struct pci_e= pf_test *epf_test, if (ret) goto set_status_err; =20 - msg =3D &epf->db_msg[0].msg; - bar =3D pci_epc_get_next_free_bar(epf_test->epc_features, epf_test->test_= reg_bar + 1); - if (bar < BAR_0) - goto err_doorbell_cleanup; + db =3D &epf->db_msg[0]; + msg =3D &db->msg; + epf_test->db_bar_programmed =3D false; + + if (db->bar !=3D NO_BAR) { + /* + * The doorbell target is already exposed via a platform-owned + * fixed BAR + */ + bar =3D db->bar; + offset =3D db->offset; + } else { + bar =3D pci_epc_get_next_free_bar(epf_test->epc_features, + epf_test->test_reg_bar + 1); + if (bar < BAR_0) + goto err_doorbell_cleanup; + } + + irq_flags =3D epf->db_msg[0].irq_flags | IRQF_ONESHOT; =20 ret =3D request_threaded_irq(epf->db_msg[0].virq, NULL, - pci_epf_test_doorbell_handler, IRQF_ONESHOT, + pci_epf_test_doorbell_handler, irq_flags, "pci-ep-test-doorbell", epf_test); if (ret) { dev_err(&epf->dev, @@ -760,22 +778,30 @@ static void pci_epf_test_enable_doorbell(struct pci_e= pf_test *epf_test, reg->doorbell_data =3D cpu_to_le32(msg->data); reg->doorbell_bar =3D cpu_to_le32(bar); =20 - msg =3D &epf->db_msg[0].msg; - ret =3D pci_epf_align_inbound_addr(epf, bar, ((u64)msg->address_hi << 32)= | msg->address_lo, - &epf_test->db_bar.phys_addr, &offset); + if (db->bar =3D=3D NO_BAR) { + ret =3D pci_epf_align_inbound_addr(epf, bar, + ((u64)msg->address_hi << 32) | + msg->address_lo, + &epf_test->db_bar.phys_addr, + &offset); =20 - if (ret) - goto err_free_irq; + if (ret) + goto err_free_irq; + } =20 reg->doorbell_offset =3D cpu_to_le32(offset); =20 - epf_test->db_bar.barno =3D bar; - epf_test->db_bar.size =3D epf->bar[bar].size; - epf_test->db_bar.flags =3D epf->bar[bar].flags; + if (db->bar =3D=3D NO_BAR) { + epf_test->db_bar.barno =3D bar; + epf_test->db_bar.size =3D epf->bar[bar].size; + epf_test->db_bar.flags =3D epf->bar[bar].flags; =20 - ret =3D pci_epc_set_bar(epc, epf->func_no, epf->vfunc_no, &epf_test->db_b= ar); - if (ret) - goto err_free_irq; + ret =3D pci_epc_set_bar(epc, epf->func_no, epf->vfunc_no, &epf_test->db_= bar); + if (ret) + goto err_free_irq; + + epf_test->db_bar_programmed =3D true; + } =20 status |=3D STATUS_DOORBELL_ENABLE_SUCCESS; reg->status =3D cpu_to_le32(status); @@ -805,17 +831,21 @@ static void pci_epf_test_disable_doorbell(struct pci_= epf_test *epf_test, free_irq(epf->db_msg[0].virq, epf_test); pci_epf_test_doorbell_cleanup(epf_test); =20 - /* - * The doorbell feature temporarily overrides the inbound translation - * to point to the address stored in epf_test->db_bar.phys_addr, i.e., - * it calls set_bar() twice without ever calling clear_bar(), as - * calling clear_bar() would clear the BAR's PCI address assigned by - * the host. Thus, when disabling the doorbell, restore the inbound - * translation to point to the memory allocated for the BAR. - */ - ret =3D pci_epc_set_bar(epc, epf->func_no, epf->vfunc_no, &epf->bar[bar]); - if (ret) - goto set_status_err; + if (epf_test->db_bar_programmed) { + /* + * The doorbell feature temporarily overrides the inbound translation + * to point to the address stored in epf_test->db_bar.phys_addr, i.e., + * it calls set_bar() twice without ever calling clear_bar(), as + * calling clear_bar() would clear the BAR's PCI address assigned by + * the host. Thus, when disabling the doorbell, restore the inbound + * translation to point to the memory allocated for the BAR. + */ + ret =3D pci_epc_set_bar(epc, epf->func_no, epf->vfunc_no, &epf->bar[bar]= ); + if (ret) + goto set_status_err; + + epf_test->db_bar_programmed =3D false; + } =20 status |=3D STATUS_DOORBELL_DISABLE_SUCCESS; reg->status =3D cpu_to_le32(status); --=20 2.51.0 From nobody Thu Apr 16 06:47:32 2026 Received: from OS0P286CU011.outbound.protection.outlook.com (mail-japanwestazon11020075.outbound.protection.outlook.com [52.101.228.75]) (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 A14A2383C65; Mon, 2 Mar 2026 07:15:15 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.228.75 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772435717; cv=fail; b=AkTMxLVaxxaL7MZs34xDNuF6qJfwWbFQz1caCERLf+vzBHaq8j+USEUw7p2nay5obhERdAKMZRfXzmh0fA6cYhX7YyP+q3W9HpRn7mZdNW2HMvVtjjvk1+h1aHeU+NXSh+AUjZJQSvamSY2NCQQ4T5rUttBvYJlslYnoV9j6FXU= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772435717; c=relaxed/simple; bh=pzdYZAnNHVCpMxQAFnMueEPlc2qQX3a463crnU8rgyY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=odFvOpQKPNN0MTZdAUleUoVliWsRyRrpkHzLWbuvFnAuFB75aL7b/BFalPaXbprsKTHKbtJbzs6DBXuKIyJuvF3bDyX+nUSOt2/dLbp6Mv5ndaenRTvAD5+rW7LTFwjdJywzFY6FG9dfVlW0pza+xcpGtjPFMTVPXkkD5wlzmyk= 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=d/r9V6PX; arc=fail smtp.client-ip=52.101.228.75 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="d/r9V6PX" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=tjEuMeyLra2ckX/nDbWDS/zhd6n+Yvrp5Z8Hau1rYndXoIRFmVMGd09oxURihS4csmWSYmDrwzY8ppp87INZjP19khye/0PKoP3ix8cV2SWakNqT9sBtkSFj0zk2XIdtpW1OcoeZ4eY5N5p7Yiq3cEX+f9pbYyNesbjQIT83ky6mo8Lt6Bu6f2MEP096R+4J9TaQEdL/x18IiwOPwUCmilEd/sXiojJ2wl71rVuu2GXi3OP1X6/xfDaw0pKinlIKT7Z6qXiGhiZWtB0481namZD/wST1Fzr1sFxzvC4yRkNrl+3wmQATFUCTKmyO8ejWzjCgJOF38IHbfYjq+wQQwg== 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=tkIrXeNpkhjBTeFE7+MYclZZiOtI+oQQhWqBTkB1Q9A=; b=ZzNgztll0ddbj1Te4t7c0jP751lWNwGiX4uuV/REvrgJYjxBSjQXQ3vWrSc4+bhs0d3BllrPkrdsybpQ3cHyGBBe9sn2gsmBYf9VK0haj/F3bMJiULiMqX2+Y4dFMInyxeO//C8Opc90/42EsHZmIDN+X3+2pzxZ6DJ9kCt3qe3u6hAdXd6GSIkgqV4n+KmbMSii3J17qsvhW+tslfpFWNgGsLtjRLNdciPL2lkPKdQGJ5k1d79UGGMYoxs2dkH4kO1PJWUHSRs0DAlExqfi/SllxcLU1uiy2K3CiItyvgYr952ZAprOW8OrrRpYDaUS9tOQ0Wi47iAFy0GSoJgqeg== 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=tkIrXeNpkhjBTeFE7+MYclZZiOtI+oQQhWqBTkB1Q9A=; b=d/r9V6PXDqqJ0GbV6As/ulJQuEz1AF36Nthq9mYAKSJMCuM1H25XlYQWVMgZtuOKHsXqbvaiF46qFxGvkuxKXh7MfDqLW8kBjALPyyZll1MOaYSaxSKcuc+Zpd9YgGFuoV744gtx9yYZldWhIppsovpbtgdy40Hk0AnFPzT8WaM= 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 OSCP286MB4872.JPNP286.PROD.OUTLOOK.COM (2603:1096:604:34a::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9654.21; Mon, 2 Mar 2026 07:15:08 +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.9654.015; Mon, 2 Mar 2026 07:15:08 +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 v10 7/7] PCI: endpoint: pci-ep-msi: Add embedded doorbell fallback Date: Mon, 2 Mar 2026 16:14:27 +0900 Message-ID: <20260302071427.534158-8-den@valinux.co.jp> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260302071427.534158-1-den@valinux.co.jp> References: <20260302071427.534158-1-den@valinux.co.jp> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: TYCP286CA0182.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:382::9) To TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:38f::10) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: TY7P286MB7722:EE_|OSCP286MB4872:EE_ X-MS-Office365-Filtering-Correlation-Id: 3621956a-7abc-4d1b-bda5-08de782b6f92 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|10070799003|366016|376014|7416014|921020; X-Microsoft-Antispam-Message-Info: +QFdrjErYUCVVUw/Sqwf4Va/Zb3LT/Tqlp5fIT5LRXygdvtwLqBUQlrzKwCXhHhZ+Kk6LBSpZmjbtKqoSQhTIQfCtKW21dLJaFratEx84xeH4NlyD23Bcj4asG4DtBU1w+ywIZsqOxmm78VKF2VKWKKRkZzlHlzUB3fb9R4TKlhEUazkG/nMM5qPdrxsC+DvXV3xi2nKf7NRN3wuTvAcNT4DwCnc+1/WJ0K0x602XgghLMBOq58F8T+maFv6AZJndHzqXRjwcCvOO/zD2qvn+j+rhc12uwVBnG4jNP4ZB6KGjVMthUqELSO0QAghboO8GoTtgHZeEwiXdbl3AQ0OtT/zNU7NZ18mmVZhSVWCvjN7tiYo5+SUitCnp8YrcznhkCECdH9xY51xejj6s651kGBB7O9vgIsm3yo+UGWatN7WT52LQd94yjHeGPXOzvmHxrSsUidIrzmYlxz/bk8LA2SpetagV90lyGGrAUrba9wnn5wMmA6Jpbg/LirSFBju+uBL3RruAczzop39K/R8yHRxZiEpQpzWT2Bzi8fJlyu5owQvDWoN13AA04xgHAAZ/MOUm3f+Ud+RBzy9fqdfZSg12alZq2kGseSKlZ1xtYEfyWBteosbWV9TvM9FbRNttXR9huhsowIG2AJquhAkYBGjsuB474n2CYiIrbbLeVdu0BzU52bw6FeVIKPyQGgAtiE/8EvHbyzYIiimG8A5CCkyk9162AJxUiMbAmYkiRXS0WnAucFaFBR0XdQiR6KhpMb1GJ1Gt3LRu1U4ZczSSA== 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)(1800799024)(10070799003)(366016)(376014)(7416014)(921020);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?k9RAIQxC/bdBwmirY9uTk2xSjF9P2cQfuCL+6tJNi1WnQtTmXH1IwnFfOb7h?= =?us-ascii?Q?T//4alcGPO7dV6/uoxYZx/wbYvmc6rBJNgpMWSezQ0gqA9B1qcmVSSO8PktF?= =?us-ascii?Q?Sf8N7/SkB1k/YWK6+nvRPxSPUsenFe//8QqubBMmk9yU/b1Xauy685JBNb3U?= =?us-ascii?Q?o4xbgTPGY+QQAkLlQTg7dM3QVH5dSSOtWayeXEHMZup9ZhfbHofX4c6LnKss?= =?us-ascii?Q?767j9mgLxbPja8L+LiSuPEFSbCpOHQIr59bIzS1V+hA5nM0qgf8EiD3woOeK?= =?us-ascii?Q?5pUgUrxfOpt/ctaDnckcCnvYjjDdz9TZYDcAlDkM59VBjwZcJBhg1X+4VW/J?= =?us-ascii?Q?cUsX+MPrhiLmQVA9pzODhUl9SoREN1gSEaG/KXGSEDiYOKna61sP+R60i+1Y?= =?us-ascii?Q?EvcPg0FyBCfmfJ3/b5aeuECArb9Y5Mo6t6Go1cfRUdJvIcXLAwmZBVs/QDtZ?= =?us-ascii?Q?9uBcZix3br/6sdIlVXiOPGfY0JWPUWhDQZz1mqsem9MOQd8F7ReisIidUbJL?= =?us-ascii?Q?s26Cmwwb9pxR6UzrO7hb8+8Qtjf4CBaHhfhPYtElrfY3fJVkRExc5gkurZMN?= =?us-ascii?Q?r1QzCXPHFV+BVZYwb4aFATrt/+BY0gsIYIiLsN6lguVyo8Vu1Rcnbh4gzhh2?= =?us-ascii?Q?qdeJWjtyWADIA5wUNZtKhfaTHO7hoM7ZD8/tlXJ9NHm6r+jYFsRcDpN/0HVt?= =?us-ascii?Q?8tiAjfWMhtkdMhhrPX3HM2O2pGvIDJR6Pi56YAKMFjrU0aZec+axwYsShLGy?= =?us-ascii?Q?CDHXHpwtnyC9M+6kzALxLKecCjCLkb6tLEUq+frUHXtPClK59aPRqCkfbkCR?= =?us-ascii?Q?esXnEVvtuf93W604kpHkaeqTubcRtOAxy9xc4KZGmbTkvk0t5VXzeA3iLgGL?= =?us-ascii?Q?XCNMlgLEVXbACOTxZiGy2rVoted53d5LEJNd5yMgeammvMQVjuQ/fFkCDIOn?= =?us-ascii?Q?vai5lue4JF1uQdRhJz/bAkd7CYdcSOQxM0iXFdapidri2adEvNbHAUtdwGLI?= =?us-ascii?Q?Hn38VduAsEHb9tdsVKSQHC7u68erp8w4OH+FgB4HjR6DJz2kIVdFSSD3MdAH?= =?us-ascii?Q?F0X385/Ttre+05Lfbsjlzn7dENQQKnJ5Ww3aigEjJkeKtnT0lm2rnOu55p7r?= =?us-ascii?Q?HHMb0g+TfT6p3exQCbqNq/hvnCU3OkCMFoCbOpSp75YNqDfVdqkoE056hDi/?= =?us-ascii?Q?hEriN15H1OAwAP2o62jQbD8JP/k/oLqdX74PCdGH6TloCiJ+qY5oIXXHBBS3?= =?us-ascii?Q?1v3KEiz5igyyrjje/U3ClpkmkYj/nRDfyg4YnYXGBo2AzHVjPkatsiJzbUvZ?= =?us-ascii?Q?lCvkd7iaHLbt4C+aiFLEva8InjX3JVqGKbaJKiTP67f65GcDSQWMixfLQjhH?= =?us-ascii?Q?OjJptR/vDyiQ8DDtkgBlCEEXHax9JUoUOsXc7GH3Uaf91z79mgJ6NN0n2gPB?= =?us-ascii?Q?47Www5dTkilpUPnKXY+7O7bEvZUUNYIJbzTEG4KEC+LhrR0ZF8C+Retepx+t?= =?us-ascii?Q?caED0+xV2BRmC+5u1nguLL1X8WMOSKzG73di6oVP3jvQmKoCLIYjUjYLEu88?= =?us-ascii?Q?545QwP4dQ0iX5/ea2Co0DLS63eV4mmRfVnAIVd/A3XvYUVdK4o1X0ZX6r82+?= =?us-ascii?Q?wIOc7Zd0C0OkpnCFNXBNtE03+Uvb+Z8xNrjP0nDd2e1RFSEcWGslK1FPnilb?= =?us-ascii?Q?fEbLlvANl8oDKFw8tiaQF4AbWJEoKGFlNn2OYKXKGb3tD85DYKX8rNwzNzY9?= =?us-ascii?Q?ox0CT9ub1dtV8lDItwCbjzeCaVRUsWIw+cs4rhxuUruaCO6CoJVW?= X-OriginatorOrg: valinux.co.jp X-MS-Exchange-CrossTenant-Network-Message-Id: 3621956a-7abc-4d1b-bda5-08de782b6f92 X-MS-Exchange-CrossTenant-AuthSource: TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Mar 2026 07:15:08.4982 (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: wIZPg9FYOSmcCGvrrUqbTd/nza3euWLGyGh+5XZShsUgt1dJMZvHXmDuHDKnXheOZ+ywvUPoDftHTsv0MpN1eQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: OSCP286MB4872 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. Signed-off-by: Koichiro Den Tested-by: Niklas Cassel --- Changes since v9: - Report the dma_map_resource() DMA address instead of the raw physical address, to match the semantics of pre-existing MSI doorbell when it is IOMMU-backed. drivers/pci/endpoint/pci-ep-msi.c | 139 +++++++++++++++++++++++++++++- include/linux/pci-epf.h | 8 ++ 2 files changed, 144 insertions(+), 3 deletions(-) diff --git a/drivers/pci/endpoint/pci-ep-msi.c b/drivers/pci/endpoint/pci-e= p-msi.c index 85fe46103220..331d84a79193 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,117 @@ static void pci_epf_write_msi_msg(struct msi_desc *desc= , struct msi_msg *msg) pci_epc_put(epc); } =20 +static int pci_epf_alloc_doorbell_embedded(struct pci_epf *epf, u16 num_db) +{ + const struct pci_epc_aux_resource *doorbell =3D NULL; + struct pci_epf_doorbell_msg *msg; + struct pci_epc *epc =3D epf->epc; + struct device *dev =3D &epf->dev; + 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(epc, epf->func_no, epf->vfunc_no, + NULL, 0); + if (count =3D=3D -EOPNOTSUPP || count =3D=3D 0) + return -ENODEV; + if (count < 0) + return count; + + struct pci_epc_aux_resource *res __free(kfree) =3D + kcalloc(count, sizeof(*res), GFP_KERNEL); + if (!res) + return -ENOMEM; + + ret =3D pci_epc_get_aux_resources(epc, epf->func_no, epf->vfunc_no, + res, count); + if (ret =3D=3D -EOPNOTSUPP || ret =3D=3D 0) + return -ENODEV; + if (ret < 0) + return ret; + + count =3D ret; + + for (i =3D 0; i < count; i++) { + if (res[i].type =3D=3D PCI_EPC_AUX_DOORBELL_MMIO) { + if (doorbell) { + dev_warn(dev, + "Duplicate DOORBELL_MMIO resource found\n"); + continue; + } + doorbell =3D &res[i]; + } + } + if (!doorbell) + return -ENODEV; + + addr =3D doorbell->phys_addr; + if (!IS_ALIGNED(addr, sizeof(u32))) + return -EINVAL; + + /* + * 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 +222,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