From nobody Fri Apr 3 16:03:01 2026 Received: from OS0P286CU010.outbound.protection.outlook.com (mail-japanwestazon11021131.outbound.protection.outlook.com [40.107.74.131]) (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 60E4913AD05; Tue, 24 Mar 2026 08:38:24 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.74.131 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774341513; cv=fail; b=s83KjFfPCNNb8+5YESXtNLZ/qNb2MtlbkBdWslOoFtVr5GFGsvE47i2Mjttgfz+wzoma9nDVBDrKcupxV/fxeiJb+Y0yoOiHnNX3dKk9VkFG88n5pWDz+2QzKbHRqiAM7EN9X0oba+cCW+hXuwtVGZEAZLavNVX5tp+9/ce1w+4= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774341513; c=relaxed/simple; bh=6B4FfAEHUJfbmDp71TMxIh42xptCxnBrE63nYv/bKCc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=heXa6mXC6O4wBE0020NzTsd/+KfvAPPm1+R3pbJJuXr81Qx260qVj+XHv5ZvdcDyqrhwuAQ7S3VsKmF9inHJMQFuysXb6J5rAQz+JWM3XJbSatBbyM5EoecQndKiOs7Y287J6W8NTq109MHtPPV07bWexoc0BKXftsW75zx+6zA= 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=bpCCJU9e; arc=fail smtp.client-ip=40.107.74.131 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="bpCCJU9e" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=BZTNwUEnd/+WgMp8jnYT6hP8sCwTEXWYybw9Poevs9ydmCT1RcDy0tgKVTnXMLLhvKGnHzPfG3MFsZc9SvbLL3yU4CvzihXmLdE3TWwycbctM8Z8w/f0TcBv7eWWG15LNPEX3gvK6JjOvNbITA8kINn2zXuHupCUI+SjKwm11Ti1EmIZELaoGMQNOFKolwGbcUjzJVO0dyhrI+fa9DYm+C4TUo1nRi6XBDUW3cjP11gzy6SmEIgozx1XHAWjJSFtAmcyijUxcHnqgxqgKh2Bj3yqp1LEQkxBfEi2oWDBrS0kbw60xBAO5dCZD/KdRcioVt80wr/ybrf7/HINb231cw== 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=xvwX2g5b9chSU1MIQd2ksaOVfPCuPhNkjhZs/zf4VBA=; b=neMJMXV2yKvKMBiYuKyzA7FrGRKRn7HQXa4+tKoVyt6ASwjwsbPZTH5VK0XzSHZ3jR9YnEUk79Pq1jO2tosppUBrnLJsv4WZPOFi4tmEfBJk4M9+Pqcg1UmG6N2UVFD1h4r/HcV8EyQ+BSyhQJmdh+s4SId9eegFYBJWVW+WWw3zGUmtJ+msGGK/zBKFTYM6OHv72bSzJ7ysjYDyVBAfHKPsOthKLEaro+b3wj27ANAc2KJoXBYwohzM6jb7SdxHd2U9We74Y+Q8KbSf/5Uqw5eSW54OU7lM4eHKFxftkpHpu+gMnyLfW3owrZPQgl4UIhKtN5yhkbDDxazN8LRQhg== 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=xvwX2g5b9chSU1MIQd2ksaOVfPCuPhNkjhZs/zf4VBA=; b=bpCCJU9eweK+ThOZpcHreY3XNrA+ztkhU515XbW9fm0cWc02mKAuY7l+8g8r97YUryyDgEhhw15VHBjGbGRmOzK6rwFozDRA2sXlyXLzY9Kq4Yc2Iqna/9tt0y/Z72yikvkNKfZYr2FoNOZs2TNECfN2qxYPGwWGU64WoDiaBrk= 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 OS9P286MB6981.JPNP286.PROD.OUTLOOK.COM (2603:1096:604:414::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9723.31; Tue, 24 Mar 2026 08:38:17 +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.9723.030; Tue, 24 Mar 2026 08:38:17 +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 v11 1/7] PCI: endpoint: Add auxiliary resource query API Date: Tue, 24 Mar 2026 17:37:22 +0900 Message-ID: <20260324083728.3744734-2-den@valinux.co.jp> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260324083728.3744734-1-den@valinux.co.jp> References: <20260324083728.3744734-1-den@valinux.co.jp> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: TY4P301CA0023.JPNP301.PROD.OUTLOOK.COM (2603:1096:405:2b1::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_|OS9P286MB6981:EE_ X-MS-Office365-Filtering-Correlation-Id: 4f0eedf7-d107-4ffb-1177-08de8980b248 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|7416014|376014|366016|10070799003|1800799024|921020|56012099003|18002099003|22082099003; X-Microsoft-Antispam-Message-Info: Xt8G2ajmtWUfxpIzYNnD7vCoIYjV2QpbHSXeawRpIjvNzekPG9gmGD5qJe+o8RiTJFVJcI0HvMvWMFC5M0mRznWW5KGFwr2sOhnklhyQBRPgGdzNRzsMvu6Yg1HHCGn+EkxPag0GMMJ42rw2tYh8QS++PWOrYA8mUXOirDMhPATUzYaYnShg5pGkfvgYyVe5e6Re32//2B0lgBVhE9lucf5C0x4441ExgE2fphWqiyzKhJNZ+K43WzDLtgLBQjunKX4NK4Uov6TgwcOfdPUS3isSNHHihiHFcpzkl5doRP5G1TBul0rbpvTenjZX5OuRqOUGWJ5hkJPUCBR72tKXbGp+ONhLC6NkVTv5l0CzEkKEZgk9tm0WguE3iC/BedO51ZvW56kKe6OXaDF/rWaGbkIUIosfh94NvrOxDC0PMDxKF3OGXLnbSn6SqilCJAL75/Ty7AFRUjIUJdjbyQGDkhu9OwWMOJLMIwi24zHYYR92XgSgGdhLoindD6sl6tHet9DfIapEVZSOvU/0l/2AN83V2TT+15HSUOU1H8Rj5N2QhK1/YEVBANesOTz/zy9Qb7HhV+W04CA1M9ByIEWKm2GN9q3mEJ+TFycgDB3JmsjO0b65JKUUWYgxNeZL7NMKgPL1g3qMXpgcRTdEowq0ANQngBGTPitEFiLOeEP/unN03RUfuOp5vOB3F5REC7x5ZS6wKNUsyi0Cdox0NwxNZm9jc/TE4PEg5po8kvcspuXtl+r6V5ZJNEKP3fCHuHDT6Ry2e0XOweI7TVx/kdQlPQ== 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)(7416014)(376014)(366016)(10070799003)(1800799024)(921020)(56012099003)(18002099003)(22082099003);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?Ta5L2zW7sKvNvkq5FmJeK3NTzUNZQ/ofWkisZiWRGuwMl8QdDdqNHJGzm9Nq?= =?us-ascii?Q?AMO03ZPPaUhImd61FM9o+Dm0/Q+7joZzXFIXVneTf+k9p4BmyZWUOx6sHaEJ?= =?us-ascii?Q?6Iz8t2lSKIIbzY5arViDKtA43RZGMzOtHbrjBWlZg4yrwZjFtDY1alBMGur5?= =?us-ascii?Q?onU8K9bwh2/oHwqOq6TW+ZrtClKlW3pbar8UyGw+TMP8Gvki9TcUpu9JqPf/?= =?us-ascii?Q?OBYepRbLCStL/Fq5AUqptqkjW64wA2ukTSo1GHHXgr/enKCttbPEh4SaM2TL?= =?us-ascii?Q?cdBYnFV6wM42y59QofTm2PU++EGCRPX75aNKydHKVCYurs5xREHsIHOESkam?= =?us-ascii?Q?1QPRt55dDt9H1cDtG2z39Tt0HdvwQOKRv4YgDzppzMe2UBHgT6ugCN1FZhMn?= =?us-ascii?Q?agFr/LzjrigXh+Agvb6Rb9jIfu4190TTzLjz3fJ3OJaOWDmQOVnGXzgoGal5?= =?us-ascii?Q?pUKMsxRr/36bwUnOQ4wfG/Su9UYXdzRIfbsfqbtv9BCCPwXKDoknlZD7SBpC?= =?us-ascii?Q?7A4yKac4846DyqJmNcWrGkAlgJINqEUxTJ21evMfzFv1b/TS84vJjRXT01kl?= =?us-ascii?Q?BG2nFo3A+KEbAgZlBUqs4vGJmLRP2aNLViTsk/OxJv5tm3/c4hnJdGjinXRv?= =?us-ascii?Q?CzbCcJIFkk0ViHuph7LhXmGoVbPc7fBYuLm3Gm3/RabQL9Cvk1z1imFtKhkC?= =?us-ascii?Q?kzRy3JfFyKkJy7++sxWvDeoFDld7012NQ9siUvL46OAQpoxg19mhlrXZ7dK/?= =?us-ascii?Q?DX1rYlu1fl0VPjKII5KKpbjF3mrKIqpZfP+gHeq1FIvO+ftV7TnjgRdkXo/t?= =?us-ascii?Q?DaBeLSZlghbj+cD8tJqyofJQxUZwXNF4nXXvbwA1+aEQR1/1fd7pnF1ovdQz?= =?us-ascii?Q?7p5HFvqEEAZoTcHz+j4XPRAiDtDx/Md8RBOtpywYUzWNjePlYIOcF+F/B6Me?= =?us-ascii?Q?Bd2j3wZA8iHhNglKyf72ss5Ooxmb061O3kcUt4Tn4Sah9w2PwXGFM4GnkzZW?= =?us-ascii?Q?eKGApiDmHMI2gLB1NcQaN3puToXNM1jHahQEvUGB69uAD2U5I7Br3wm3RcG0?= =?us-ascii?Q?KtuIYDJh4zP3PuOLC2W/1G8b7e9dzTUOHNicdpRAhLo5Gih3Lro6TjemrUx3?= =?us-ascii?Q?2EHObKJ6IHuB4l4EaTgqaIK8cqonPPOX2gBKWwsU9yRQxwoN9qtsRDaJ2fIS?= =?us-ascii?Q?vnKwp56rKLCzMsqktwBq77PwBio245M/1HAgUA2JJeIHl/cVnOkdl1oUxs/L?= =?us-ascii?Q?++2OsM4Vl5toX8JS7Rz0pzTZTx8RgiKDXVNzHPtYya2c1cFIZCsVHhhQsR90?= =?us-ascii?Q?qdgie6nQ7Au3z1haWu/QjCQ36TuQc4Lxt5oNpiH3NYLZiwaGmOt9353xcR+j?= =?us-ascii?Q?wRixTPQDr5vIx4ljRdB2Y3eIbaZc3zUap19L70VvfMz3jco9ZukQ7xDmf6K2?= =?us-ascii?Q?mMX2l4SDCgURRWUXasQ4J2jzf5ctY07NYWJBnhNc/xHd4jQ9qDHPQseL5cfK?= =?us-ascii?Q?9iB8/5dYFJtLcnGdVAa2TThij/TExxAz5t9EKNf9KM+XeImE3Vfbc0MqbnwZ?= =?us-ascii?Q?AX0JvyZ78lq0v4EvW21d2UnWmw1G19/jFzPTvUyw1XmwBKevw8EXH2Jv0EcH?= =?us-ascii?Q?Jj+RIquzG95lwtuaQzfPgHcImTgR8ED7xOEUqe6JpTQg9WQSe2qhMijY9uNf?= =?us-ascii?Q?FdFiETCrkmc+GpmVVzVp8CndAnXGqpzXc+cfMDbEb3OdQFDNuSHqIdhuuYQn?= =?us-ascii?Q?XoPLG636Oj9ezIvR7hYiQzHbkC9ggphxjskyUk9HM22E3v8J5emB?= X-OriginatorOrg: valinux.co.jp X-MS-Exchange-CrossTenant-Network-Message-Id: 4f0eedf7-d107-4ffb-1177-08de8980b248 X-MS-Exchange-CrossTenant-AuthSource: TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Mar 2026 08:38:17.3699 (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: OA1lHL4uD90UOb27642MgSMiysQmnalOaBnq1sl6roFtsKOpyxcJwkHcsLAmXi3ioat8RnjQY+9lPuTYAkDh4A== X-MS-Exchange-Transport-CrossTenantHeadersStamped: OS9P286MB6981 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. Signed-off-by: Koichiro Den --- Changes in v11: - Drop PCI_EPC_AUX_DMA_CTRL_MMIO and PCI_EPC_AUX_DMA_CHAN_DESC from the generic aux-resource API for now; keep only the DOORBELL_MMIO resource used by this series. drivers/pci/endpoint/pci-epc-core.c | 41 ++++++++++++++++++++++++ include/linux/pci-epc.h | 48 +++++++++++++++++++++++++++++ 2 files changed, 89 insertions(+) diff --git a/drivers/pci/endpoint/pci-epc-core.c b/drivers/pci/endpoint/pci= -epc-core.c index 6c3c58185fc5..dc6d6ab4ea1e 100644 --- a/drivers/pci/endpoint/pci-epc-core.c +++ b/drivers/pci/endpoint/pci-epc-core.c @@ -156,6 +156,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 334c2b7578d0..a6131f1636b0 100644 --- a/include/linux/pci-epc.h +++ b/include/linux/pci-epc.h @@ -61,6 +61,47 @@ struct pci_epc_map { void __iomem *virt_addr; }; =20 +/** + * enum pci_epc_aux_resource_type - auxiliary resource type identifiers + * @PCI_EPC_AUX_DOORBELL_MMIO: Doorbell MMIO, that might be outside the DMA + * controller register window + * + * EPC backends may expose auxiliary blocks (e.g. DMA engines) by mapping = their + * register windows and descriptor memories into BAR space. This enum + * identifies the type of each exposable resource. + */ +enum pci_epc_aux_resource_type { + PCI_EPC_AUX_DOORBELL_MMIO, +}; + +/** + * struct pci_epc_aux_resource - a physical auxiliary resource that may be + * exposed for peer use + * @type: resource type, see enum pci_epc_aux_resource_type + * @phys_addr: physical base address of the resource + * @size: size of the resource in bytes + * @bar: BAR number where this resource is already exposed to the RC + * (NO_BAR if not) + * @bar_offset: offset within @bar where the resource starts (valid iff + * @bar !=3D NO_BAR) + * @u: type-specific metadata + */ +struct pci_epc_aux_resource { + enum pci_epc_aux_resource_type type; + phys_addr_t phys_addr; + resource_size_t size; + enum pci_barno bar; + resource_size_t bar_offset; + + union { + /* PCI_EPC_AUX_DOORBELL_MMIO */ + struct { + int irq; /* IRQ number for the doorbell handler */ + u32 data; /* write value to ring the doorbell */ + } db_mmio; + } u; +}; + /** * struct pci_epc_ops - set of function pointers for performing EPC operat= ions * @write_header: ops to populate configuration space header @@ -84,6 +125,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 +157,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 @@ -339,6 +384,9 @@ int pci_epc_start(struct pci_epc *epc); void pci_epc_stop(struct pci_epc *epc); const struct pci_epc_features *pci_epc_get_features(struct pci_epc *epc, u8 func_no, u8 vfunc_no); +int pci_epc_get_aux_resources(struct pci_epc *epc, u8 func_no, u8 vfunc_no, + struct pci_epc_aux_resource *resources, + int num_resources); enum pci_barno pci_epc_get_first_free_bar(const struct pci_epc_features *epc_features); enum pci_barno pci_epc_get_next_free_bar(const struct pci_epc_features --=20 2.51.0 From nobody Fri Apr 3 16:03:01 2026 Received: from OS0P286CU011.outbound.protection.outlook.com (mail-japanwestazon11020122.outbound.protection.outlook.com [52.101.228.122]) (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 CEBB233B96B; Tue, 24 Mar 2026 08:38:27 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.228.122 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774341515; cv=fail; b=i5gW+xmUkmhtLNmWD3DYsrWf/ELa4GUYpAIW/eu8QhGwlo1SYrH7oivyHhUhxklSamEm/D31Rhdwb+gzvddTX9LhAc0asaMYZ8oRRLqzC4Rvo5fUax2/yynYYSjJ++PtpXATdpsVcKRNK6F2CGZg3a4uUwsnFKsy87xkUEeZoZY= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774341515; c=relaxed/simple; bh=Hd0OQVvgV+FRrpd5o1Ro3HiWAoJB+zHoECF/fTkrB4o=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=q+oO8i/55mDyRu/BJuh6mnjupoEXEN9z4epQNuxyIXnZOqb6cBgsR88cslTFVNtBeIG08IWdfTqwAIFFUuZcC+3Pk0/UBLVRzhF5XIqCuKkygIUxbtYFhHRa51x4rqaMwSXHt9Ly+0LvEFQZAhsM2vj+Kxa+m8DLxhikD+f9MuA= 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=sU4qNLmn; arc=fail smtp.client-ip=52.101.228.122 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="sU4qNLmn" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=sx+d+i/gh9qkC2hk+P22qoda3G7nNwqXAez7MT/sOM3bExKzIt6DDPjzz/1W7yMsO02Xi9J3gkmnRFEQIC71VDVG1TtKnWYIA6VbvArNjSqQmXxWoW8zQcd2MeVgQjnt7WiT3SA5tQmE8eGaTXPGvpr0SsJ7BOeinjw9xsjdmNB3ahyHGx3N0bOcbm5pdR1iS1q6+ERQ7T6sEA0ycUz2mnt/f2BUL5NyC1thDH9npWiM6nnxdKywdsTd7aqyfR5G/iMRQRtvWEjsHP3/aGDpQzK/GDcMSevaoT12cImblLneBopPQIBH4PtTFk79qz9WbwtCuRCDp99C0mj7rFAtWg== 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=o5uHtBMuSv0SsYrCxx5y8gccqSa7xSRgUDGPhiUGDrI=; b=vxAJOIRGUGFipkG7bhbknhpPDHZYVbUwj43mX4r5HP6o/Ss6Hnhg8DiskIC00pTzGhTNFDddTCM0gKp2SWbu6fXp59yVFTgF6lhzgO9rum6KNMDg0hJ0kTshQ6OHPnup0rnFGqdbzBr19Fuv8hkZQDMG8cOfq7Tw6l7h81zE44gKTJqeQZ+iKIs8K4WzDMPj4buyYUtVKFVrjbqpibtLtqSUfaVUBB5GGc69zn49UyNrrbPyh7HK7CuhL8Xt+NAcwLvVwjvj7onxooWab4wh19te8i8lsaoMimtigtCzwE3tstC61k/5tZzwbp+tNSAlCQMxbV7EOpZbNAgtoILaGA== 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=o5uHtBMuSv0SsYrCxx5y8gccqSa7xSRgUDGPhiUGDrI=; b=sU4qNLmnqEJzvg6sFyGC2Od9/lPUjrf61WVAfO+abpqbE6Z8FSeISclrbLYCKcdJJVgKuMu0DevuikP0u3NvhVroBZr/pMksdLZxpyA/2xSWyDuNaU4pv9o6rIcORmxLyn5R4kLI527+UOo6ZivArYiaN6/6jp2nE5VjgAgFP7Y= 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 OS9P286MB6981.JPNP286.PROD.OUTLOOK.COM (2603:1096:604:414::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9723.31; Tue, 24 Mar 2026 08:38:18 +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.9723.030; Tue, 24 Mar 2026 08:38:18 +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 v11 2/7] PCI: dwc: Record integrated eDMA register window Date: Tue, 24 Mar 2026 17:37:23 +0900 Message-ID: <20260324083728.3744734-3-den@valinux.co.jp> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260324083728.3744734-1-den@valinux.co.jp> References: <20260324083728.3744734-1-den@valinux.co.jp> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: TY4P301CA0018.JPNP301.PROD.OUTLOOK.COM (2603:1096:405:2b1::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_|OS9P286MB6981:EE_ X-MS-Office365-Filtering-Correlation-Id: 6f4b2951-afe5-4ee9-ed56-08de8980b2b9 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|7416014|376014|366016|10070799003|1800799024|921020|56012099003|18002099003|22082099003; X-Microsoft-Antispam-Message-Info: z2ejO697XCyksM9TQ+kxAmiglqtfktwEARMjkGGQQngOo3PJj1CyseXTjD0BzWXShJWYw2FcstLm3x1PEFnkg/ZQquqO6VWsmq8b4SrIRmum5pndoDoUlGqtoF6IUy14XxaKPgn5JVrxmCGe+SJIeLxiKXbtsC0faq9PGNQLQXUdTKTCj4hSWVQhcCE6B9ucgs0jeUpI30AmVT3QyDsFhwAXe9mIciOGoONT0FG4fuYygXf+vN3+/IumA7C7t3GptuIUPdT3W2SXpjMw8UTRLfch+a1Kgv7UufjfrE4SUkKjYMBj7x10Pgwllbhqoe9PcekFwSZzSoj+qAIXmy+7lex0TWHPhi1yraLbo0iVjx2ypb/k5msCNAGLQIuhfa9tLx3hl5HE7ja7KJISQA6HIklg84PxyD/mAWOGuRJNthztaBGEaql41D8lzibLg4N7Rqpk6OZf+3KOlkpAM5yyP7L0pW7Ao6YriBUKaqTMs/Vk1QWV2ShdADyUst5rE2dV4J/n8gvtgCi/ta8IkTdZbgAz6hyD/MyRMq9PSZowgc5H59fvsl4KiWXdoPrRsum1QRe9kjWCjeDoVrZ7pMYmS7PcTJ2Z6hKANhaNfQDVP8F2uLvUzjZ+dv0gtNPh66JI00ztbR13wDCR68eUCV2v9gfubiN8cd+R8TQRRvwEYcpLUj207tSsRgtyg6TyzKUI/ZKRZKrk9bFQYhGTk0tmIdVV6z8oqx/uYRl5plr/gahAvu214iP+FVWKAHpD4Cx+p/pXiGK2a9sq4M6vfuxGFg== 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)(7416014)(376014)(366016)(10070799003)(1800799024)(921020)(56012099003)(18002099003)(22082099003);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?JdDw/SqcGeMaEqHM+kc80nklfGeXyytjBrEE2JYkYmffYVUSSVVMh8VFitUG?= =?us-ascii?Q?CDLUoXq8JlzcS5wYtIhx27nxiE3nIhtOgbBM8v1t3IxqDI3/TEN1dR3x6f1T?= =?us-ascii?Q?PkBz0T8O55t2ZnLvC7PMf+aZjL6EhbbCEj4hW8bYOj6QO4Jwsyp9O+tW+i0x?= =?us-ascii?Q?qsN+5ogp0LRyyrY+EFjPzX2Lrk+HDLUSvHT5GidXPjZmHxxNkCHYWlCk3yzp?= =?us-ascii?Q?Y3WxWqs1Gq/m2MXZcK8N+N7Ms+HJOwFKpwbxtg09e/9Uw8iXUlmeBh1a+fo4?= =?us-ascii?Q?965rQ5bkaLX4aQhB0NVOL4QDtNShf9Vr8Lo1/H/jdHy+utU+g5zaqw0+hiED?= =?us-ascii?Q?cog1xfJe2/eVO0/xjw/m3zNrxH55ScV3IBs/LFNWf8pF4sHGD/OcYAYw2jW8?= =?us-ascii?Q?QkG8u1CuXh0PfTDedExKLj69C68lyFy1LLr0ZmZpxt3Uq7U+AptHjrEoAj1m?= =?us-ascii?Q?heMVTZC0IuSc6kUkcARB4f1UtL/geQvoJs7kcFc/1NHzLBVm0L6zJBADbZMe?= =?us-ascii?Q?nhlczT2tJwCwlX1NoCXnezFlx5kQYlZi+UCPTstk1UjVtwYyxnaQJ+14IOn8?= =?us-ascii?Q?0OgZV8I4sUcoOaDbWdWh3NsFDN+d6/sYVSZ7aUaUR7s/izZO2pyF0BpYOZ3v?= =?us-ascii?Q?vyi0t/RmYLUB57b/3/UTY8s4PDDPqvi/4PJLKlo1KfScG+LvGMnGwxM6Tq7I?= =?us-ascii?Q?eK08hluU2mrAUpDT34oJpsXa/mbwvUKeZ0XwlcV0YaEFslSt1zIXycS+pCzf?= =?us-ascii?Q?k03k4HgTSXIFcXJDTF2TEJhZ5s/Mp0kM5CyLyFd+d2xXsJZleLx0fwd/F0FX?= =?us-ascii?Q?vQyhrtEfsNiM7ggAIg8AWpkpvx0LQqXeISR16W7NquFMRmEK5v5BHbSPrXuS?= =?us-ascii?Q?CQb55eWYvfgp1GHbEPgCMetz6EHNb+FCr7KcuNTBa7fa+8mfLUPIjppA0bf7?= =?us-ascii?Q?5/Wkuy30nlSpeWWoJXEibQ9RHRNfrFnzDjYj7UvZhj+9/HZaULQ3F5N/IzLA?= =?us-ascii?Q?fCIFZMfxWC22wQcliXzkeQUhOOdVQoXVQ1p3ZSey4k1FWoreJTtwnC5hlEXo?= =?us-ascii?Q?rNxNGRLkrNLKbpndYPHkL4nc73TCXwn1Gj3xdmgH1o8Trex25t0SAsMJL23E?= =?us-ascii?Q?mTqnrN5mlT81I2gR5X/DrkHr4d2IYFUTW6Vf3XLutT+Ya9ipktG11YdK7kFS?= =?us-ascii?Q?xbLP+Q/cd1Rky+SWztUROLghuRXTherbZBfDV1lo3X8JI7glFiJL9TfTDXLm?= =?us-ascii?Q?ttyiM0wK7brKJI7gq+ToebTCKeqPoR8h6A6mEECxoDFjp5lZjr3nW2O1S3kz?= =?us-ascii?Q?WL4YO+z51qnj+0ty073sIpNI7t78vlOI2Wkk6LyTeTsGyMzfh0OLcPVximd+?= =?us-ascii?Q?OLsPphH5VoS6tsLTXcIfVHWFr9gGc43sxaLyAmcuZ3sqGChKbfR31MuRIMvb?= =?us-ascii?Q?r5CBsWpz7TnVEKkNyFSXwgjBMblGuiT1538QPN+SjVnECxbq9FmP+50m8Ft4?= =?us-ascii?Q?UBLp9l4n7UCmsrvRHHNRaeiuy9DA0B3nqFYR+yHH8CtSvKtwhmtFA8RuGyvP?= =?us-ascii?Q?JFk4a7fNXJvYK9DowmAVStm9PhrgwMIaCH1gFM1g+/E40/DplUOVaokfdRZ/?= =?us-ascii?Q?gFPBh8B+hpHfj3XGvuiru4hRvE0eE9lUzpqvKDpNgidRUK1rybNf5glzpOOL?= =?us-ascii?Q?i1XCqLyvUrhHNEm36wwQgBtTIl/+0+1rJvXUxZl4adQPygL8oxQpOvbl2Cx6?= =?us-ascii?Q?hPJvz92wLAOZmwSYTQ9+H23rgZw0gt/58p6io8p1IC9KjALNK618?= X-OriginatorOrg: valinux.co.jp X-MS-Exchange-CrossTenant-Network-Message-Id: 6f4b2951-afe5-4ee9-ed56-08de8980b2b9 X-MS-Exchange-CrossTenant-AuthSource: TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Mar 2026 08:38:18.1103 (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: IZ3lifSrKsEUxc11T6aOqdVrKYQWz6OrJcTRd6os9lIhNKIflY2zEiVqwn5vQHuCy/YsasqsRWWxCIihEjkgpg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: OS9P286MB6981 Content-Type: text/plain; charset="utf-8" Some DesignWare PCIe controllers integrate an eDMA block whose registers are located in a dedicated register window. The EP-side aux-resource code exposes an interrupt-emulation doorbell register (DOORBELL_MMIO) from that window. Its location is derived from the start of the eDMA register window plus the doorbell offset already provided by dw-edma, and the window size is used to validate the computed register location. Record the physical base and size of the integrated eDMA register window in struct dw_pcie so the EP-side DesignWare aux-resource provider can construct that doorbell resource. Reviewed-by: Frank Li Tested-by: Niklas Cassel Signed-off-by: Koichiro Den --- Changes in v11: - Revise the commit message to better explain the purpose. drivers/pci/controller/dwc/pcie-designware.c | 4 ++++ drivers/pci/controller/dwc/pcie-designware.h | 2 ++ 2 files changed, 6 insertions(+) diff --git a/drivers/pci/controller/dwc/pcie-designware.c b/drivers/pci/con= troller/dwc/pcie-designware.c index 5741c09dde7f..f82ed189f6ae 100644 --- a/drivers/pci/controller/dwc/pcie-designware.c +++ b/drivers/pci/controller/dwc/pcie-designware.c @@ -162,8 +162,12 @@ int dw_pcie_get_resources(struct dw_pcie *pci) pci->edma.reg_base =3D devm_ioremap_resource(pci->dev, res); if (IS_ERR(pci->edma.reg_base)) return PTR_ERR(pci->edma.reg_base); + pci->edma_reg_phys =3D res->start; + pci->edma_reg_size =3D resource_size(res); } else if (pci->atu_size >=3D 2 * DEFAULT_DBI_DMA_OFFSET) { pci->edma.reg_base =3D pci->atu_base + DEFAULT_DBI_DMA_OFFSET; + pci->edma_reg_phys =3D pci->atu_phys_addr + DEFAULT_DBI_DMA_OFFSET; + pci->edma_reg_size =3D pci->atu_size - DEFAULT_DBI_DMA_OFFSET; } } =20 diff --git a/drivers/pci/controller/dwc/pcie-designware.h b/drivers/pci/con= troller/dwc/pcie-designware.h index ae6389dd9caa..52f26663e8b1 100644 --- a/drivers/pci/controller/dwc/pcie-designware.h +++ b/drivers/pci/controller/dwc/pcie-designware.h @@ -541,6 +541,8 @@ struct dw_pcie { int max_link_speed; u8 n_fts[2]; struct dw_edma_chip edma; + phys_addr_t edma_reg_phys; + resource_size_t edma_reg_size; bool l1ss_support; /* L1 PM Substates support */ struct clk_bulk_data app_clks[DW_PCIE_NUM_APP_CLKS]; struct clk_bulk_data core_clks[DW_PCIE_NUM_CORE_CLKS]; --=20 2.51.0 From nobody Fri Apr 3 16:03:01 2026 Received: from OS0P286CU010.outbound.protection.outlook.com (mail-japanwestazon11021131.outbound.protection.outlook.com [40.107.74.131]) (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 ABBC33624B5; Tue, 24 Mar 2026 08:38:33 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.74.131 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774341522; cv=fail; b=kDya1a83P3lhm0FgWBeoQ7O6VfDhFtErK39Tnk/At3ZJWyDBIbsxcQrAE2cFvdoSiuMNlvEoysJ2C+xKSszNO/OKfCugtXJmi6b7K0nTJDbQo9IiLKQ0nVsOcA39jxzFZmQsmlz+aB8iNmiGOn85xtfrt+5yN5OjX1jLJ7pFq9c= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774341522; c=relaxed/simple; bh=VjgoF9kYH4XwL3oExbso47kw2kup32F+/2Jnrm2zyc4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=WBycgpewojG3ftGV41zIF07EJupZpRuZfCIZMTqxhayGTWhWeeVYcZYSDQl518/wlcCXshcImrOufjBScd2XA1/sJ8nintazi/0ZKo89dJKtKPfajvpaFTbnGTrEZD2QWonbaWzSbbEMNWfMAkcYS4AR40k2Cw/+s69g/oDc++U= 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=uTGPKLxq; arc=fail smtp.client-ip=40.107.74.131 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="uTGPKLxq" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=rxBLKR2ghmU6hsc6+QqMcIL64AuZNm1f3zvbo8IfEFobuujBe8s/LH3DtWOK5pmTZ5IkAHyTLK1ZVDGylUIRtHU6F3jmnPSWt40GdQ5VKHkTLv9G3JQSve6lR8lg/qfzprrl11uerPOX0GXU9lF9bhIqiRaeZytLblfYvbc3hYktAIRqVcE9bZ8TdmfvigmRr3af5cI/JLZCDleR4Jx3qVNKUtXG8cVruVV5SHt10fCsms9Co9gwZcFqpKuOnJAl3czpsX7uKlyfX3EOjx9rDoAGNRcAPHY36deu72LsRtuKwjbwT/1pbee31gEEv5G7KTsEzuDn8O6M19caCuXLSg== 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=DKMqjGuT+l93MjCW10Wsk4/QYj9QHqTtvfZQuF7Wsp0=; b=SguKA1xile/9vsdbwWl4Q0DnN+DTJqP+PAu8PZxaBcJUtSf+Wz7az7fBwHzx9Dg2/unqSd11+6pGH8evOP/YAcL4L22bt95HhHIiX5Ue16mxgGKIUyBunXt0QZhvNYh1B4lbHA+nJc4+AMYQvgVBWeullMZcabR9v+nCTvmwrXuiNpAmsu1T8hlw7TZhkmlS83MG1CxAhnw9mDa2OpJAA8MimrX6upK7W0LNIGBXtJKaBtj7LsxaAHbWpHz+JAGqLQ6WQPK4NHsxS0Iu/kjWC4HIQFe7jiqw7NBJVS68WlB9g9QgorGnKVVCfC1c6cSDIjvWoVDXtYb47M5F1u2EEA== 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=DKMqjGuT+l93MjCW10Wsk4/QYj9QHqTtvfZQuF7Wsp0=; b=uTGPKLxqCRyJUU0b9hKNgZpUAO76cQiCd4GKIgdnHi1uoFCt8HpA5fhrkz/xweSWoYnZk3vRMTb1PC9K++89EaD3QvnxpwJL9GlmWHD6WGidmxR02ss9lztyUeXlR+bppEeiYctWl5+q8iH4iZ654Sb2kJF5fcQp7kB8SkbWqx8= 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 OS9P286MB6981.JPNP286.PROD.OUTLOOK.COM (2603:1096:604:414::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9723.31; Tue, 24 Mar 2026 08:38:18 +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.9723.030; Tue, 24 Mar 2026 08:38:18 +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 v11 3/7] PCI: dwc: ep: Expose integrated eDMA resources via EPC aux-resource API Date: Tue, 24 Mar 2026 17:37:24 +0900 Message-ID: <20260324083728.3744734-4-den@valinux.co.jp> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260324083728.3744734-1-den@valinux.co.jp> References: <20260324083728.3744734-1-den@valinux.co.jp> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: TYCPR01CA0131.jpnprd01.prod.outlook.com (2603:1096:400:26d::19) To TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:38f::10) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: TY7P286MB7722:EE_|OS9P286MB6981:EE_ X-MS-Office365-Filtering-Correlation-Id: 69a5388f-2081-4e2c-28e9-08de8980b333 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|7416014|376014|366016|10070799003|1800799024|921020|56012099003|18002099003|22082099003; X-Microsoft-Antispam-Message-Info: q59YslvN357eC6Uvra7XY/W5dSrRTv/6yVmEHbX69s4alQ37TRw1TaoXaKpu0FUgxvvfGTrLN0f1ZubZSJoo3Ev9D2s4y6WlV4XXYEclFPt976Y9YbuLTQJ1UvOsDcfnkonj+HzM2m0/u6/YeloGGxEsT+dw1FeInjMUmPcOleF1ccR0QOBM2Vkh123cck/brPMnGB1AlxjrWXChz9AVyPvEJ6wmGyTS5CjkMWTwrAPzdkX6oCaFPwToiPc0FyCrAuwvJXkvlvsJgSZ2V10CxSOI+a9dOdmoXBvH46PDy/p+mmTanY7fqV8Q/wWkL5iPOaVl2gT4JW427TuQhijxirP3lLuammm4UQv5/1TJXDwJdJ56TNjtWTsODQl9chW5Jw7N8YCxHpVAzisNi6t2oNdK44Vv4W+zc3ArDyzyZOyOs3U04rj97oLAHBHeatnbFglk0F4DCRRVPxJ04h18e5JeFRebs2TLxv9B9G0vs6yNhwzevoJxxJZsabmw4xnX3RH46BCmS3SYrSgRP0uV/7sIZPPioypMZZ3lL7tiL4g+qbbTqlilmzy81UbHzJV9ThzvVVfQSOUshtd4cuf4lrIP1Lnn9nBJRZRWpboi7OVuIwa99KWC2R7zs/x9dljUxf03OKxEXcuWTyiBZuYxyf2/T0p4e0JJwGSw8/7IXjbGyD2TkQc6QljRmbiOr6EQMJpucIj0rrwkCP0zFh4hIoZTkbCRlPQk2BfQum2YrvKcnBaXRMp3zs5kmGmXTymw8t2Y/VKQ1BliLFBNS0wPJQ== 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)(7416014)(376014)(366016)(10070799003)(1800799024)(921020)(56012099003)(18002099003)(22082099003);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?+/RMkFCGze5yG7u8/pfPSXdwWYk9EnSwYQTH0xUbMSPcKYd8sm0jLTVpFOmO?= =?us-ascii?Q?VhfWgkZdR2VGLHHmSgs+dnkx2/LVxWIE4UbxPhGomMwyuunH8U9gLxPuY9gh?= =?us-ascii?Q?ITWt7Xu0hK7EJP4eQria/O0ngv+ZCNOyOXr0ntCFcXHUXEk1qKDgxRvjN3Z7?= =?us-ascii?Q?5YcP5avKjxdOBHSneDw7MpMYdE5PGLt6W7LXq2BG4WaWu9C2ECmpTC6PuXQ0?= =?us-ascii?Q?G8L+Tt9o0t8/qe9eqZwxMm8Wo4BIXVed40FlVbe3eA6KeZB1eF7obRZubSOB?= =?us-ascii?Q?ARBiKbg63l4qyLbtLh0B71ThgehgrghQm2cZq4PLDEGgJ9cUmp3J1ZcLzHiQ?= =?us-ascii?Q?n3EB+abzihb7H/HhmBQCroyNYx6QfGA0RC+GyXNBLrpaXUvt2qY7vvCNTn6H?= =?us-ascii?Q?hZM3tYCygzk4TpS864k+8oyRqo0erAwb5RnKrYFDmNyWe8Re15IzzcPzDXFY?= =?us-ascii?Q?S1w3Ie4NMg6Dp3K3XC0OUqtGFSSn5ecXHHT2elBBZkDrGM3LCtZtfRTse+Me?= =?us-ascii?Q?UYGWDEa8hk3OPK2HRfXrfVHE04VlkK5KrgohB09UmKILirJzUjfHKCRfzCoJ?= =?us-ascii?Q?ClXcAp6HRySyzOMMWipg/tCFJIQR5z4WuXznN0rA40CzHyaxWF4KhfdnCDKV?= =?us-ascii?Q?efJ96iiskRH8NaptwEGsjfWB+WtiDYRi8sCUXO8Fk8jMWKXlYefbhcJ+gkQe?= =?us-ascii?Q?sLEHzhEYP0Gt+tPMjlueYyRlsgqeQcaCxyc27PU/RWiTWWfpMtAnjS2W32XP?= =?us-ascii?Q?TwlbNikX6QlwNXkvW0s5d29MFYiB/doQJJPVqGbeq/sVhNB+oL9Ri0NAnK+f?= =?us-ascii?Q?9iPQF+xmrsnCCqFZsM9RvAqqQKHtWVLm2KIBfiwF5qAqH3hmDspI0u5AiZKg?= =?us-ascii?Q?pX9tr8J859MyW6uG2JOVA5N+LKcxFDESpR09Aw/Jf9gXR0LLS5XhWpLQb9j8?= =?us-ascii?Q?50oOv7kPwCS++tgdOrzCiRtlEIGTsR7p4Pm8wqtYQ8RtrszYrWwVwYzEVeOB?= =?us-ascii?Q?zJd1Qc2MmfK90GM8ETQ/XWZ0oKUlexosKtFSQPbwqDFWa615Mr071UnjW2nI?= =?us-ascii?Q?FSnyiu336EJlIL++1mqOGRFnQdPv+zYhCkly22VYcxl5GG3Rq9clk7iOvPps?= =?us-ascii?Q?AeAIW7g+2TF6wIa8PDpMz1zxpLzV7vLww8CV+SptzWHJ5IY3Ocvea+sDlk0H?= =?us-ascii?Q?VwnGLYw2l0P8UbtjcyXt/6weM1ggvPOuhKphzdpN/6T3/i0tRx1aZyW0o8Qg?= =?us-ascii?Q?RKgd7VCepUobVHdroK2PDnJaGH6M9UgGMYkTDxEor5kMaAfZ4KVgYhasv7In?= =?us-ascii?Q?DfHCa85v6yU8teCBvcHY08QvZJZUjWvBWUlS9eIuESnyzoARskOf4ZpjK8if?= =?us-ascii?Q?5d1v93gR/LQYbrtdWrxI2k42GOEcnXuI8AHpVVlfwSmvTol8V8dUIlEEmmpo?= =?us-ascii?Q?WFWnBFbcCeQ4jIEnA8P9qypGgUgZtchpVG2IR8VWlCbfftwDiD4zTB/vsP9k?= =?us-ascii?Q?UmFMkYGwJehZQHjPVmqzeHsDzRJr5u0fcQF8JjlRARqx5LIK11wQTSS8oeuE?= =?us-ascii?Q?l1z005orHr/GsPG+XQq2Q9b80khGYzqstcwG16FAhf1CHGWqYdyarLcP4gEi?= =?us-ascii?Q?rbuN8vztIvMCQc6synPS8e9VYvWwclHFWmbJ80NiysB9/TjnqvvpIcuUyhAd?= =?us-ascii?Q?emlOa9+FVRJGauvkQ6rgDEINuDA5mhU+3+SToF9Lvpbujhr+6TJe8s8lF87W?= =?us-ascii?Q?BHr2uYVkWnUN5w0iWWbHNUROXt9DLj10rjZlvyO8egXZDFiMbh8m?= X-OriginatorOrg: valinux.co.jp X-MS-Exchange-CrossTenant-Network-Message-Id: 69a5388f-2081-4e2c-28e9-08de8980b333 X-MS-Exchange-CrossTenant-AuthSource: TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Mar 2026 08:38:18.9083 (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: 1rl/SgZoKUJk/OPq4DPC53yqOHU49u/DOaLigFHh27WX1IjJraKeAvRiJueqeo6lmsjEw6cL0w/PD0x7CdWisA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: OS9P286MB6981 Content-Type: text/plain; charset="utf-8" Implement the EPC aux-resource API for DesignWare endpoint controllers with integrated eDMA. Currently, only report an interrupt-emulation doorbell register (PCI_EPC_AUX_DOORBELL_MMIO), including its Linux IRQ and the write data needed to trigger the interrupt. If the DMA controller MMIO window is already exposed via a platform-owned fixed BAR subregion, also provide the BAR number and offset so EPF drivers can reuse it without reprogramming the BAR. Signed-off-by: Koichiro Den --- Changes in v11: - Stop exposing PCI_EPC_AUX_DMA_CTRL_MMIO and PCI_EPC_AUX_DMA_CHAN_DESC. Keep only the DOORBELL_MMIO aux resource used by the embedded doorbell fallback. .../pci/controller/dwc/pcie-designware-ep.c | 106 ++++++++++++++++++ 1 file changed, 106 insertions(+) diff --git a/drivers/pci/controller/dwc/pcie-designware-ep.c b/drivers/pci/= controller/dwc/pcie-designware-ep.c index 386bfb7b2bf6..f78ed73b0a3f 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,110 @@ 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; + resource_size_t db_offset =3D edma->db_offset; + resource_size_t dma_ctrl_bar_offset =3D 0; + resource_size_t dma_reg_size; + int idx =3D 0; + + if (!pci->edma_reg_size) + return 0; + + dma_reg_size =3D pci->edma_reg_size; + + if (db_offset =3D=3D ~0) + return 0; + + /* Count query mode */ + if (!resources || !num_resources) + return 1; + + if (num_resources < 1) + 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; + + /* + * 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 */ + }, + }; + } + + 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 +937,7 @@ static const struct pci_epc_ops epc_ops =3D { .start =3D dw_pcie_ep_start, .stop =3D dw_pcie_ep_stop, .get_features =3D dw_pcie_ep_get_features, + .get_aux_resources =3D dw_pcie_ep_get_aux_resources, }; =20 /** --=20 2.51.0 From nobody Fri Apr 3 16:03:01 2026 Received: from OS0P286CU011.outbound.protection.outlook.com (mail-japanwestazon11020122.outbound.protection.outlook.com [52.101.228.122]) (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 079B23D567F; Tue, 24 Mar 2026 08:38:36 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.228.122 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774341524; cv=fail; b=KPeb9du/X8mnHMxDJSnwodQ+f064HXInEvx4n6F+U0VS3ZTUHyfR39Qh++IZPdRTZL5a5tqAlMgqUs9fuQvDVoXVUog5fucHYjJj85Wk7sAZGdEAdLuMQTitPRGd2XbP9dTGxz7B6IyJOOdsvM59X7eDIm0ziiRH0nJxm4qYIuo= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774341524; c=relaxed/simple; bh=24CtTktMCrTYnhJKM0CPxo89ofgYKr4aiWJjFoL6RkY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=uToqt9VoXs3Hp0goJHc4283QnK2J4DwJExsxrf1t42iJb5zf0AwQpB2rsGwd2cuMAv+IcstQi9ot4Bb6Y2/SNRyRrVlpSURIKx+Cmq7UIr9rGmklxjSqBWPcCHn70HR+Osat+qTquyoTQ4QuqHJlv7fz72VSloJGI4hzdPqCCwM= 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=HyDJ4zQM; arc=fail smtp.client-ip=52.101.228.122 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="HyDJ4zQM" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=gjbLWvK3lUG3wlXWEzeBCufEi0Q/WyTdy4FqX8/3gNIiYw+BkLIua5LScNYTPyi1YsSSDzYJjMIaoB/N5JcLKYeIDAB57xeMjKcXpmo7JuQF748Gg+qqpaamJbiMkUclMXs/9V24vOdU5aa2hqLstrJeGhRZlAQcRiSxIOxMnDvhXLUK5PRzSrLFq7Y0lYlynORTQeU3aemB9/auqXMjbv8OQ1C/fUSQnf0rbi4W9BNl4v5tUGESE4XapIGOR40kcvitkEelJj4XATUnbaLN5cdTayhd/qoqm8YYjd78zwSAPI3xxio0MlHbtFhnLEGOYGe52qoM1gVEOzcXFsCnmA== 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=WUSNUrd/pp9j5MugoNWHvN9kM527bAP/4tSjozT+A88L33qCG6QbAUvTb8TmQz9BBXHU/zjkJ7UOOTotLjGD9UH55fNeXs5iBzA800aN+yI/6ltKgSzSxFB72ORXhjcGBpfZlqPNkos4dNzu1JgUj3sC3I496LJ+LeENgsfwGh/yreLBWlZH/zi6KcyLHwLvFYTu0FJM4zHissU+FAu/Zi31ohiLC38UY1IU3tGnvkKxHSvzygr/MTpS8qvg6Ze2Bk7B2YoETZUxxr6ZpCZHXsCKFc+PFWV08ozQ+ZyCvyCoQhn5XRsXPT2hB8kqp5ra0ZsRewIZp8de9FrU6y33Ag== 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=HyDJ4zQMy/keGG9tH8jfyerBdSUCvfABOPBf+iothQj6GBHGN0IZROSvxCZgqJdTHNQSn/lphuCz8X4olM2Thn/les5LHD9gqoYCVcitoCdjRfPCp7Bd8JnAMtwUPzpqWwVlu92/aaW3POuVQ9h0re/0n2YGA+Ie4EMawIPYCEg= 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 OS9P286MB6981.JPNP286.PROD.OUTLOOK.COM (2603:1096:604:414::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9723.31; Tue, 24 Mar 2026 08:38:19 +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.9723.030; Tue, 24 Mar 2026 08:38:19 +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 v11 4/7] PCI: endpoint: pci-ep-msi: Refactor doorbell allocation for new backends Date: Tue, 24 Mar 2026 17:37:25 +0900 Message-ID: <20260324083728.3744734-5-den@valinux.co.jp> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260324083728.3744734-1-den@valinux.co.jp> References: <20260324083728.3744734-1-den@valinux.co.jp> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: TY4P301CA0019.JPNP301.PROD.OUTLOOK.COM (2603:1096:405:2b1::13) To TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:38f::10) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: TY7P286MB7722:EE_|OS9P286MB6981:EE_ X-MS-Office365-Filtering-Correlation-Id: 4495a882-361b-4451-ea29-08de8980b3a9 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|7416014|376014|366016|10070799003|1800799024|921020|56012099003|18002099003|22082099003; X-Microsoft-Antispam-Message-Info: ovDUwmdYb0cyIsVkqvPUcgQoNwFKFykaAbWbZcIUBurUAeQM4qXZV6IYHsJfCGrUFRV6sTVaM2qwIIa6WpxJgLixOpHUc57Zme2bwCkuJG+oouvDzA+7q8yofdAMWCzn6lRkvdt3F2QWFGDTGFeKtebJFJBJ/CXX0+6aeyCR8277wJQuFBn4f3BzimvQNAnLpXW0UsBYl+lvlupBHjFlck/rnbGYjdPCN6rDPaOAAz5yqO3HsaXl8lHD+6mvmtxRYG9xN9O/Z6HuOC40XITLnkmUEhlCPVty5YljaAHMLNMtQus34tHf91K7dMXkNb6QbmfinVHIOH+IYmMZmp9vD8T4rjjPyMueKo2nP/G7TuiRwgW85eSPJ345oRlYkeE7pzw/p5j/zkTKK73XV7oofIEVIOfPrJcdeEoWoQ3WY4F5OI7gqY/NFIjF54dNo1WHbyXz2T0uI6KP8e9aQWgohdnYdE6zFHmwq09fwhQy1zb22nakZYlz60Fm1x+IMOLkswWVyA9Jf+jvt5nuzzMkpoIh5ryLweVJv0eAIOMmox1KbZw56q5DiYJybDQZH+ZlLhkK8XQzgyOVM/0rprEd41JNA+jwGw0gxhrz9RRPN6UFGppJVqsPk99dmT7vAbsm7wjRIyG0x5RT9rAqoEb8+JLXwI613X2a5uL4hRQDewGBS5/RiXQliI3YSOeoFWAPPPUZFQrpaiz1NCLWGzDN6hsJMpwAqwE4K0HwSNRU2kJe3tjfmk5Qc8nAbw6e3X4dEO8cLkHZNKCgW4PHQLZajw== 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)(7416014)(376014)(366016)(10070799003)(1800799024)(921020)(56012099003)(18002099003)(22082099003);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?3DP5x61lC8t96O1ijl9tm6mdevbOYENOd46HNCfPOSpuXdpGtYyV0WZPTPCQ?= =?us-ascii?Q?Sg9Mmmpx5MN868p8wfmKa09ZSya9zxjhrRovHdN85dcIwAgafY1phxtA45t/?= =?us-ascii?Q?LRtQqE1NNMWVxqGCyHpOlLjGLW/Kymf608MZGyP5e6qoNNc2UzH03UUmknIG?= =?us-ascii?Q?tTo9QiXvJ+x67hqrIpOoR3fSboUnIcPdOeiNq/uX2Nja7vxr6O/Ox0xxMjfu?= =?us-ascii?Q?iQ3U2Rf9SV1pMO7hcolqkOQVBPGb7Jjejw/xAbmeRkiNYBL0q/LutI33ZfSL?= =?us-ascii?Q?WkwPYhgBxtSLvDh2oqdMEYsX9IO92Sc+ivPS5r/xQ+Vik1NSu+9tHLuex7Q/?= =?us-ascii?Q?p3tNoTr3rLQ4DRUj32LAl492pInG9HnL6d+BgVdRZ4YJkEzSJiKepn47cC/e?= =?us-ascii?Q?rtksIHoOFEz0dgZNgjSq9QbNr4okwVOPK5JPQ0OFG6ZdA948RvjD2msUyjeN?= =?us-ascii?Q?LZ2HJ6/VNWNyhbNj818iJFrXwwRGwM30OMaMo9Q3E2vUShEF4NgrWAa8/B2G?= =?us-ascii?Q?ofUciqHjRUvQJLF9Ph2N9zPSBM+uFRZ4VRqZm6aaH4yATPqmuxMy/dA77Bmn?= =?us-ascii?Q?rvvMfycHy6rlE3/UNBv0O5YMd76NGXyvX0GWvnczDAARCe+LGxpJfbKSKZjH?= =?us-ascii?Q?X22gSN2b8bE3pbHn2JWNcxFwFzE2IdodjXsNUDaQVpNmleYfFQHKcwvl9Sj/?= =?us-ascii?Q?2y5YHNswtcf/Cax1VlywUypjpzjxIvuzczYN7DouPf4SNzI/ZkiXUegKALXW?= =?us-ascii?Q?qAp9SPoEPh75cKp3b4GgcvZFdq0/7Spe65B76jccr3XZzWttkG5t8m1BRyFv?= =?us-ascii?Q?/yk5wnJHF7+TEc/HTiePAUOhOZp7386YP+6YF4GwiTvSXCtvU5hhdV9AhKgT?= =?us-ascii?Q?7vb8pHWrNr5e1OhPNP1n07K9/dwNVysW33WY36mNfNzoq2QtY7FoldyMYbqu?= =?us-ascii?Q?7baUz58bW7+lt289KtBDJGU4yPlOA1ffX6vH4eMEwhEVvlkJWmdm7mx+4Fkl?= =?us-ascii?Q?d0QTl0ebYkRrFC8aCxLbOrDoAxpvZaPYIFu1tix9Nv9DaTf0fERKV0mguLdA?= =?us-ascii?Q?bwdP45ZdGjaSz7XN+oWJfnUFU2DGk2dyx0gmCSgxKW29HGFbpbFodZl/doEN?= =?us-ascii?Q?q81Acd64t/TlbfZc4ci0437l8o54Lc3xNK01Ljlxs96taK0MR45rJy/cQ6sy?= =?us-ascii?Q?gtE/7uv28HRtkSk6S/q1aGs8M5OohFMH8siabtA1Km0D/lNiYV5QTD2mhhah?= =?us-ascii?Q?zeH0hunB6U4JYN6EwWdBVWafK0MFzjVL7HuJxQRnI2hlTlgy1XSx6EASWGFN?= =?us-ascii?Q?76IZwZh1ZW2pk5ps0Uke92BviFxvzOzRnY7cknFfA1q5mjFJdguhjLGIIBDR?= =?us-ascii?Q?yfWo0hv4ZPARMd0S7xZZwZOBt0Ewq5TszVjF2ctLwkU/OsLRUMiD56GskBrd?= =?us-ascii?Q?cIb8SEdCuCr5Ov3Yr27cym7IhA0jnRopdFJygBmp1sUxxvauADyx/pwrDOuN?= =?us-ascii?Q?qlRgn5+8d06t+qJaFoziHrTlJex4ZOuzb6Sj2BftsyfRrmf3cGZYE3CgtJLc?= =?us-ascii?Q?/Hx9Z7RZpVx8EYE6aioc4k4hJlhXCIJyrpoMGUI7QYH7Q8EpKHNiryaK5LGH?= =?us-ascii?Q?wX5o1G/vxkERp0L7Q2NRazGCaD5uOhsI1ihTVFKLGKhLf7PSZWMEgunOnm2f?= =?us-ascii?Q?XqX8kq8Dwf3A7caZTs1Aurk4q/fh8sGlxVKm1ArCixVAOC/s8z86Af0mnRkm?= =?us-ascii?Q?R+VlLTVsNrdWvpz4/362B8ioXceJoUDVg5A1Ivhb4NMuLeWVi65d?= X-OriginatorOrg: valinux.co.jp X-MS-Exchange-CrossTenant-Network-Message-Id: 4495a882-361b-4451-ea29-08de8980b3a9 X-MS-Exchange-CrossTenant-AuthSource: TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Mar 2026 08:38:19.6796 (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: XtLW07WpTcRAWZ/ciVLCD6l1gb5vQvhu0VDpBX1+0//H2Cs1CEMbK0zahiVhplKuy+9/RXSO0PVAFLKy5icfsA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: OS9P286MB6981 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 Fri Apr 3 16:03:01 2026 Received: from OS0P286CU010.outbound.protection.outlook.com (mail-japanwestazon11021131.outbound.protection.outlook.com [40.107.74.131]) (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 6E51E3A9DAF; Tue, 24 Mar 2026 08:38:42 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.74.131 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774341530; cv=fail; b=CeSbhGA/vgCvGQzf982la/Li2ktrFMC8U09unhXsqNpQTOOHHurAAyZMkTCdArndF5OohGVpnDLQcRC7g4HBB2ui2iBQ3MUS9ia8I2C5rY4a4Is7nR+pGXFqMt90lSeyptXfO2jqa5irCViXIG1j68+D3Z4KC8loJsMdovkyOo4= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774341530; c=relaxed/simple; bh=ULI1kJWrKZf9dgqsssHd8S4r5L3Gx58+ZUaN7Tme1pI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=MNwES38IuvV8q91Hed9ptPJAtQkrmDWhBKS3phKWDT0EdH/0hvKYv5EMI62RKcGn7UEem81R0yxzX6T0Max45a2rQV0JdbFwX6nWi/z0CHHzN+K3WeS5yMkCiln/lS7gIrGV/jydzApkM4dsuXgOXMDM6w4HLXCrP83fW/OhkVY= 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=pm6u8fcK; arc=fail smtp.client-ip=40.107.74.131 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="pm6u8fcK" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=eTcRzvrIsdkhhcz9LMxBLTVXvS+CdsAhwkBKWL6eX4ZyK8B5teMRLR6fFqAW/U7ISvaEf2mu2dtLQVEEOktPo15HZ8dznpMqZY6ny2Rb4ceOTKE3acg92vdUPgJj0fSUfRRB2M6Vo5L9zqbD0cSBQtQwoN+oOgime55KbGmA9HNYkA5ykbzg77aMRczurt1RvNRI3+UgHJXQp8nsOUmmrSaGD9+ZqZv+yF5E28YHYizCxIoKqmKnBfHDw/Tb7vTNpKjw/c71SMyGQ7O0xVTot2dXKIgXEmfpLuIdJyv6VW94UXquV0x31A6klNHJL+jRkwDJDii8t/VY6546HWBG2Q== 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=knfGowzlpIuEygI7/1PTjdey52MiNgAUn86Co5ZbMw0=; b=tzrOq/8zmxUGUsXeqYGzq7v7cnmnp0e62V0jtdc0vA0RVncB8cNUQav0F0OY7+7+fxA7bSm38MGvPRBKmKf+K5ycAb+wgvflehXmhI3wrGxp7kJU2ezqyhZ07lmmJYXfbDR7ruVtjvl6PwG8Onk5BL7P9ocsjel4GquRtif4vIJGasD2ODBlEMAUPFm1DPK3gCWgfXkq/cRjGGm0O64z28GOK/NPJzytQ3ZvahToBeH7qEBKcXpAdmnyyufOnYY1yVXRLbar9yZyARgoXrikbbSfYd4JuxbJd6fjqO3UYf7gUiO1wq6LLEQ67MX7kbevoNJdtzL4jUllFPNWCmc59g== 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=knfGowzlpIuEygI7/1PTjdey52MiNgAUn86Co5ZbMw0=; b=pm6u8fcKdNjgj3Nl1zPxlfslZ5hUgd9BkLlY2iCPuCITVifSQXs76SSuf6Y8kBtz5+VSo+eWN6QD3R3xzdu1e+HONUXdMCYR0N/bSv67z9KvOj+cmUew79sOicQAyjHmodzUAZIFbDTCwpmuhmPlr8h4cuHNirC31HECAB7BhAM= 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 OS9P286MB6981.JPNP286.PROD.OUTLOOK.COM (2603:1096:604:414::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9723.31; Tue, 24 Mar 2026 08:38:20 +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.9723.030; Tue, 24 Mar 2026 08:38:20 +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 v11 5/7] PCI: endpoint: pci-epf-vntb: Reuse pre-exposed doorbells and IRQ flags Date: Tue, 24 Mar 2026 17:37:26 +0900 Message-ID: <20260324083728.3744734-6-den@valinux.co.jp> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260324083728.3744734-1-den@valinux.co.jp> References: <20260324083728.3744734-1-den@valinux.co.jp> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: TY4P301CA0019.JPNP301.PROD.OUTLOOK.COM (2603:1096:405:2b1::13) To TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:38f::10) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: TY7P286MB7722:EE_|OS9P286MB6981:EE_ X-MS-Office365-Filtering-Correlation-Id: 3757862e-73aa-4eca-f055-08de8980b41a X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|7416014|376014|366016|10070799003|1800799024|921020|56012099003|18002099003|22082099003; X-Microsoft-Antispam-Message-Info: qy8mlmNa1Sn3aX60Q2251K3Kn3W6UZ90wuV3ZkW691AIyPump8jSdiuxw/CxHhaPUXiAm99y4QKBwwwF/G3c8PiuiIoYI/ZWJmmvdmQ7km5P0xuEW+S6XWIXMyg0YZLXxKbyR0ferIziHtVw8r1QhzuEklFKL3U9VnZ/x9x0Afj3o9mFymegmegiimV14Qzdqil0S+gMLmpigkRfg98fmxKehJKfVHXQesa2n4I6T96K6gcI3ix2PJzaofDrATCufu2fJ30C8b5rU6z7MHSfWS8zGChq7zXP0/YLTf6lfHzqPlyvPdtE/Vq2+rZVBYr/QxB22C1q+KN/CNYnP2gc1UPT4pr52B/MZtb4aerwv/Z53qeg6S7p4ae+5qH6+O9sA0G3H2/P4KESqXJZNb3Q9UA4WHtJ/7AHfEHvHiDuUjNyR7dd8k1q3YFL87kS1mHvQnV6aUdjj3lMMUjOVTlyO9uKhHJtfXyv4bSC30b1zlTR6DSIz5+7Bq4paWmFVQFi5pH1pbIcGJdZQLhUvYNCPJ2T4Bo1jqauRnoM8kp9J3MEzLOoT5AUKjg+L5ZD02XfFI97muBt6NAGj8+qU+sW0u8iuTwZ1P/wYcVVN4pCCcQwLeZy5kZvbKCxI345vCQmwdNuK1yMnr9R9KnRqq6bThW3dR7slHlLbWSxSvywm6DX0xaH+EAyf3y8bJZNP0doKyBKzPZ6CtFV6iqxgtV3xgATrhlKurhLtK7zBuQ9/qREImIVy/ZomCdgiZufA/mT/lqX4jfXKuhQlpMlrwO/9g== 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)(7416014)(376014)(366016)(10070799003)(1800799024)(921020)(56012099003)(18002099003)(22082099003);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?CIFOCwry2Q6QO9DF4iMgS7Vu0Hnsx7opAg0PLEHbLTxVedAB4IW5qA9LDCzV?= =?us-ascii?Q?xDuR4mvFx83xaNJJqCSA5mwVBdWdJfhLZcSVpG5n+Psi1AmGs0zwzOJwOdSe?= =?us-ascii?Q?QTGuzlF8yRInQ4HQlUFq2JrxQTjQ2j72no6nKnTCcqLE6Sa/N+9rOs/Jq86r?= =?us-ascii?Q?TVozT2+EP0r8Ihg4Q2FSYDP6XTiFBUYdrmmGEWt7lg7e3zgqKeqeTsyDO684?= =?us-ascii?Q?88Wsc2SULEhnVFZy2izCNDO7peDeKdqBfMCe8O27OEq/w8WK/+DbVg//WIym?= =?us-ascii?Q?sQvRJpx+hf5OYasZ55/LsaCF4wiW7W+KDMXdWycosRxxWoYdtB37JOuy66lq?= =?us-ascii?Q?BWzNYq6DlFTk3mvADdfQiepzYFR/38yr8bwDMD60LsNwm68hi86PasKWi554?= =?us-ascii?Q?72VVnCE0zbPdPUbjPr7O1lnNUen7WRX2Rc0ymRdTZSiG5Ghwyv48OPjMkiST?= =?us-ascii?Q?N61rs0+el7u1AcDczc0ohe0sIkt6D27lVl/hwwH+fG9vhxL0ZPrPC7fb4g/6?= =?us-ascii?Q?Amb/Lkh++In3fKcrK4DnLZZ+XqFrguKtJ2H1dAxXhBS+qJeanalCCPuFTEED?= =?us-ascii?Q?1fryGUhZmO089YWMZTWU+kcl0P/G7RI6p4EiHRvyYG4DQjd0fbAAeUS9FmjZ?= =?us-ascii?Q?YEgyo2kh/hmsz7YuqtgtKAgMOd3cDS3rBp0AYpvyir5nyLUnur7XqCp+cIph?= =?us-ascii?Q?I+yVYslhDMqwlsYlIEfI7vQgNBhG/Oh36C0VQ/sEQRD6o156EiXlAqn6zUjl?= =?us-ascii?Q?mIR4Jkocg5ClQSjo3vRZaZAnJgL2DTpioS+ebgypw9CrftukhYnrsudGPnbd?= =?us-ascii?Q?NHPMDe9srfyAq7SoK+7EZHdYuln6YNgE1St/Oieqgt/89YdnAMnnYm+MzKB9?= =?us-ascii?Q?mUSrQHUfkXfF38tXQerkMCZNu8oT2n4WU1q+4thaGbl+7rkfEtQTOO6P/qwW?= =?us-ascii?Q?NsSZxcABF7irUi9TBDkkicB6o4DTkGxZouhkGJJWk4mdEoGrTV6NMa3t6naX?= =?us-ascii?Q?oL9yA0JIexS/ht4Hf3VWGswx+VuPFVrskjUTLoOg9nY+1APkwge5sKA54vmR?= =?us-ascii?Q?amBYmQ/lVx+1G5BVvm2izkDylTfj+tB7PNCYj8H4Y0JxSTWp2vBe2VEl0IPT?= =?us-ascii?Q?9vlFwWsNSiIZtTDDMMy6PuVXN75XEvoZju3qAcgkld6fXTOHvaNAak4NHk1x?= =?us-ascii?Q?6WhZZ8Hhrao2zUjXyMcUqQ2LvWtyzOs0US9AWoNTjyJbXN/48dwC+5rj5Ezk?= =?us-ascii?Q?ZBy0A7+WG0lTziZSd23ruQYDvp56d+Kq5shfnjBJK1mahlPv+cU2KENL94oA?= =?us-ascii?Q?wq+XLf9w+gdxoTiDKWhjQVqjomZv2QxGZ0Y3dFJIce0uxmHGfCbJz1bVKnQ3?= =?us-ascii?Q?Z3vumPpcSbo8OrSyrfZlDr/1lmMyAEBQ++gaAlM5jgOPl8UpdB7B7XXAemMy?= =?us-ascii?Q?tJMIiFSFOLjEG+0I7Shi86E7hJWYHCsnvHJblPOqa22dtJcgsvg4mP3Y7fst?= =?us-ascii?Q?gNnXod6OeE7oj7mM5oD/FYq49uJ7LZ4eRSt/TabTYhUbUJwYhbQIi1Tun4ci?= =?us-ascii?Q?+gylSfqANp0t2jSX7wRPx6Mh33UnoLo64XIgp7/6cdn4G6mbQaTtyz5TUKqU?= =?us-ascii?Q?/OEJHrmTA5MOFGbAcP28OMAvxKdyRmBLrzZGV3pUDDK3LgIWwZq8Gk4O4dIX?= =?us-ascii?Q?zHkBzBHyVV7AP/TRTq7p+8vAIMAo3K1c2NRjWqcFQWGsvHlXMgToPZhNGmkx?= =?us-ascii?Q?5O+t7ehiCqWNm02H3BiaL+DFXRFgtK3UeCqhz7rpkbD5/ik47pa3?= X-OriginatorOrg: valinux.co.jp X-MS-Exchange-CrossTenant-Network-Message-Id: 3757862e-73aa-4eca-f055-08de8980b41a X-MS-Exchange-CrossTenant-AuthSource: TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Mar 2026 08:38:20.4288 (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: Q8PHOe+lR7jecgj3cC/nY0KDnEg7QOaJM6BEcqnjO5deL0Cldq8DYZMyyMueMskU/VJXcFQCZ4qhKXjmLrqxZg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: OS9P286MB6981 Content-Type: text/plain; charset="utf-8" Support doorbell backends where the doorbell target is already exposed via a platform-owned fixed BAR mapping and/or where the doorbell IRQ must be requested with specific flags. When pci_epf_alloc_doorbell() provides db_msg[].bar/offset, reuse the pre-exposed BAR window and skip programming a new inbound mapping. Also honor db_msg[].irq_flags when requesting the doorbell IRQ. Multiple doorbells may share the same Linux IRQ. Avoid duplicate request_irq() calls by requesting each unique virq once. Make pci-epf-vntb work with platform-defined or embedded doorbell backends without exposing backend-specific details to the consumer layer. Tested-by: Niklas Cassel Reviewed-by: Frank Li Signed-off-by: Koichiro Den --- drivers/pci/endpoint/functions/pci-epf-vntb.c | 61 ++++++++++++++++++- 1 file changed, 58 insertions(+), 3 deletions(-) diff --git a/drivers/pci/endpoint/functions/pci-epf-vntb.c b/drivers/pci/en= dpoint/functions/pci-epf-vntb.c index 805353528967..608d5a54e1dd 100644 --- a/drivers/pci/endpoint/functions/pci-epf-vntb.c +++ b/drivers/pci/endpoint/functions/pci-epf-vntb.c @@ -134,6 +134,11 @@ struct epf_ntb { u16 vntb_vid; =20 bool linkup; + + /* + * True when doorbells are interrupt-driven (MSI or embedded), false + * when polled. + */ bool msi_doorbell; u32 spad_size; =20 @@ -517,6 +522,17 @@ static int epf_ntb_configure_interrupt(struct epf_ntb = *ntb) return 0; } =20 +static bool epf_ntb_db_irq_is_duplicated(const struct pci_epf *epf, unsign= ed int idx) +{ + unsigned int i; + + for (i =3D 0; i < idx; i++) + if (epf->db_msg[i].virq =3D=3D epf->db_msg[idx].virq) + return true; + + return false; +} + static int epf_ntb_db_bar_init_msi_doorbell(struct epf_ntb *ntb, struct pci_epf_bar *db_bar, const struct pci_epc_features *epc_features, @@ -533,9 +549,24 @@ static int epf_ntb_db_bar_init_msi_doorbell(struct epf= _ntb *ntb, if (ret) return ret; =20 + /* + * The doorbell target may already be exposed by a platform-owned fixed + * BAR. In that case, we must reuse it and the requested db_bar must + * match. + */ + if (epf->db_msg[0].bar !=3D NO_BAR && epf->db_msg[0].bar !=3D barno) { + ret =3D -EINVAL; + goto err_free_doorbell; + } + for (req =3D 0; req < ntb->db_count; req++) { + /* Avoid requesting duplicate handlers */ + if (epf_ntb_db_irq_is_duplicated(epf, req)) + continue; + ret =3D request_irq(epf->db_msg[req].virq, epf_ntb_doorbell_handler, - 0, "pci_epf_vntb_db", ntb); + epf->db_msg[req].irq_flags, "pci_epf_vntb_db", + ntb); =20 if (ret) { dev_err(&epf->dev, @@ -545,6 +576,22 @@ static int epf_ntb_db_bar_init_msi_doorbell(struct epf= _ntb *ntb, } } =20 + if (epf->db_msg[0].bar !=3D NO_BAR) { + for (i =3D 0; i < ntb->db_count; i++) { + msg =3D &epf->db_msg[i].msg; + + if (epf->db_msg[i].bar !=3D barno) { + ret =3D -EINVAL; + goto err_free_irq; + } + + ntb->reg->db_data[i] =3D msg->data; + ntb->reg->db_offset[i] =3D epf->db_msg[i].offset; + } + goto out; + } + + /* Program inbound mapping for the doorbell */ msg =3D &epf->db_msg[0].msg; =20 high =3D 0; @@ -591,6 +638,7 @@ static int epf_ntb_db_bar_init_msi_doorbell(struct epf_= ntb *ntb, ntb->reg->db_offset[i] =3D offset; } =20 +out: ntb->reg->db_entry_size =3D 0; =20 ntb->msi_doorbell =3D true; @@ -598,9 +646,13 @@ static int epf_ntb_db_bar_init_msi_doorbell(struct epf= _ntb *ntb, return 0; =20 err_free_irq: - for (req--; req >=3D 0; req--) + for (req--; req >=3D 0; req--) { + if (epf_ntb_db_irq_is_duplicated(epf, req)) + continue; free_irq(epf->db_msg[req].virq, ntb); + } =20 +err_free_doorbell: pci_epf_free_doorbell(ntb->epf); return ret; } @@ -666,8 +718,11 @@ static void epf_ntb_db_bar_clear(struct epf_ntb *ntb) if (ntb->msi_doorbell) { int i; =20 - for (i =3D 0; i < ntb->db_count; i++) + for (i =3D 0; i < ntb->db_count; i++) { + if (epf_ntb_db_irq_is_duplicated(ntb->epf, i)) + continue; free_irq(ntb->epf->db_msg[i].virq, ntb); + } } =20 if (ntb->epf->db_msg) --=20 2.51.0 From nobody Fri Apr 3 16:03:01 2026 Received: from OS0P286CU011.outbound.protection.outlook.com (mail-japanwestazon11020122.outbound.protection.outlook.com [52.101.228.122]) (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 7B6CE3D810B; Tue, 24 Mar 2026 08:38:44 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.228.122 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774341530; cv=fail; b=sm4PjBE0Cnzb5Z2r95QWrITSwY1q5ZL6Ws/bdePpyR/LxRjAGl28LZl2dCgDYKaDRNKkCcVG91QmaY5MakfUkbDRb4KlUVq5EsO1WT8jmXNR/vDCrtwAbc/NOAAd4AE6YBI2qonzoHI3sqrvrbNd+WKrqk1HsHeHOOpJjAVqHKc= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774341530; c=relaxed/simple; bh=dlVnbhX8PxGnedfMNDpDYZosmRi6VsKB2pbJC0JUfqo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=JoHQGnTQjN+nqsjAP1xYZnVn7PWverN/x8WCFXs3V0MdCbg7pGQGiK2hsHLkj+A1tRD0y4zcDTkp7lXqKy7Wo1u01K6o7yhNWntUNtkBmStYeN3dbUWJ/1B5tq6ODSZdEuPSk216uAwk+pKvOFF8b/R9IHYuJN1FQqA3ywE/e0I= 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=T4ToIibX; arc=fail smtp.client-ip=52.101.228.122 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="T4ToIibX" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=rpOmv50m5cPD4++tOjwgz/zIbzyiBsz8FF86AU2COBrdf4tVIEi+L2k6jyVGSCoMwp2r9NkQUF1+Ahr14m90D8Ook4q1FV2Vqx4TsFxK0X4z8qmhQJQ13gJaj3/Uo01qvmQmFA+K7OOIXRs05Xprf20g/jZgHpB6MkwfhK9SeKpPehsD66IEmH8/EHPfPyWWgtz4oXA/I/d/sPpudjWYOiqdL6EGOQyIbm/pb1PUsGv+lsS7EuNPeBWNAYBsg+6FmywGYjEIkY08zHjg05uXQBIW2FjrJD44nfuLvOQDB+i+BcK0KACOJaVqh09X96V6B1dnxV6ibRXgKiXYidZuIA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=Zdv0PXxOcHbw+RGn7yNzlRw8lKljXPhJ7YMgz3q8sHU=; b=lqmZbMEzetRtAdXyamFJHiXM1KvuBvKwE4kIArdUkoPSqpLdVTeCORTm1q+D62r7oaZsiKg1K/aa1hs9OpGRxrCwNBRm+2hxrkvQa7XyGseg1XVHhv7FqvkYQoZd/1DcvUh8io4TEJ0ENb9mBcwmlGZMEe/TeAHio/5vRVyqTWGcLH2Aou0MTQkrci/xjGJXLRPUTpCi/GROeqQnMfUaesBt1wTrMt6g/DF6V0bQWjOdBSM4Mxn5sB+z5EwZSH8HP6ciMeXAPiC9oIw++EjO4nB+Avp+viPnR0GG9/L5pQ5Es8QB2NeyYow5oulJjl7eWjcPym2ERqAhRvoO3AcLbA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=valinux.co.jp; dmarc=pass action=none header.from=valinux.co.jp; dkim=pass header.d=valinux.co.jp; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=valinux.co.jp; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Zdv0PXxOcHbw+RGn7yNzlRw8lKljXPhJ7YMgz3q8sHU=; b=T4ToIibXh/pcTSIXmbEGgpICm9MU+jIW7IU3VeTqiZFBlIIA+/2JIuP7Ll3UmRZbHw/uhNwXZrEH4fNce8ikXqWeQdiCppf4iYopQx3SNT92dUJsFaGf5COOmDFoJh24jefX9mmwOo5szFwqAlEWURg1zsKTninvArCZlDG/CIs= 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 OS9P286MB6981.JPNP286.PROD.OUTLOOK.COM (2603:1096:604:414::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9723.31; Tue, 24 Mar 2026 08:38:21 +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.9723.030; Tue, 24 Mar 2026 08:38:21 +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 v11 6/7] PCI: endpoint: pci-epf-test: Reuse pre-exposed doorbell targets Date: Tue, 24 Mar 2026 17:37:27 +0900 Message-ID: <20260324083728.3744734-7-den@valinux.co.jp> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260324083728.3744734-1-den@valinux.co.jp> References: <20260324083728.3744734-1-den@valinux.co.jp> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: TY4P301CA0022.JPNP301.PROD.OUTLOOK.COM (2603:1096:405:2b1::14) To TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:38f::10) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: TY7P286MB7722:EE_|OS9P286MB6981:EE_ X-MS-Office365-Filtering-Correlation-Id: cdf3e11e-af40-40d4-db5d-08de8980b494 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|7416014|376014|366016|10070799003|1800799024|921020|56012099003|18002099003|22082099003; X-Microsoft-Antispam-Message-Info: +EyIF+n89c8h0ah4B8U4icS+v40wW+3/ynl2f2SqB0yOJjXmvLCaCd6OM0+18VpRoCjb/TQw69mm+s7+jgCot9H1Wn04Ytiy/+4hLSd0E48CcZKyeWgwAM9+KnzTvFDSs3odfe4b14LEjZwzKvI5ypegPvf7axc+lSRyeG2DLr9ljUpsouvOR38Jyq26Iezcq5S/KA/+04JlkS5MFfAZ5Sxo4KnGpFBpKikaiHEsqx3OnonA8yGFBrZVX/pP9M1Fa8pUzDKIY7hLmZ3yYxNC7bNNXHCV38RbgER+9amMGwGhWHkq62zwEM0OGEDioz2vK5pnOe0cbK+OzhOAwoQPaShZNAvGUHmP+8D0+b8wATHBJnaKNGD/BTpS4Uz4nMIUsePDcKYNV2mOcQ97XYzKEd0Krq3TxYAHVF8fVSyhtC6GD1JoZqgpcnDJKuXn2+U/XRy1onq/e3mfqbWXW9z6ukCNGXU1ncOPyGn+SVxXOC3uxDh3Sjbd3uq8R0j8k/gJCH7FJ+lh0jdeqO0+UwK/++fkV8iNrHqfgGknSfWC6E5VE4YWyc8M7KRVmTda9YM4tkHor6ZG7iXdgeoySt7jwO/58yOezUGpYION47hGU3NESgdJP5ZJdW3/x7Dq8Iu7BqzDle8GBNONF5ZmSP3yRx5IDPzli52FMynbRXHdm81Ng1mBEo1VviET3NJl/Cw+M3dpMA/hkz9xhd0SMUeeJ2w9DgXlQvwALvqig+uYK8v8YmMK8BLo7sV62GThRJWfUkU1IDnBBhmWzlfQvhLEYA== 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)(7416014)(376014)(366016)(10070799003)(1800799024)(921020)(56012099003)(18002099003)(22082099003);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?+vAH4Aoji/V8EqBuPv2JQqRjqsW5rgxdtLrY8kUtYiv7ES8tW+mC5A/JdAty?= =?us-ascii?Q?Ih206ND/6IAXmV5GXwHLeliUB+BIVEorXBBH4Q2B1reME80JC/2HxqyGcHNr?= =?us-ascii?Q?osLWFvHgzyC3ctIp3Rq070FGXh1RnI4E4FmRm5D82hhyUdBw2G3Eky0Xcvx3?= =?us-ascii?Q?kv83Pm2U0x4ZwL5j0Uza5RmBnrlKMYz1Mbu1DEIoy0rjubQN99a79W0axZV8?= =?us-ascii?Q?k5NGsp0pVbmakA71VmOnC8uycGbqSPdGFSO2uGVhg08PRFm5m1039NcNDLSN?= =?us-ascii?Q?QP9wyyJQV2tln27Ho/AvLtw4/nSvU2V3dNxTxX3TtRWplulWMmeOMJgxdMJf?= =?us-ascii?Q?nydOSaJWGoTEkRpZns0luPCqFTyNj9V/qwahUNMujBUEEtJvWEdTwNiuEXn2?= =?us-ascii?Q?3B4zEQrFdMgWgZOAoOaMzCgQJ+7RUN27YXsaNijo4FSdz+EEky/CPowzFK8S?= =?us-ascii?Q?qvK58WTRXGNNoqOVzXR4gNobzgAx8esvjQnrfSMimZlMNq1D+XKheq2Ds2NU?= =?us-ascii?Q?nOcwA6qvFX2Q8fpJzaWLBcy1hVCsgY5yrdtS74ayeT6tgNkcE1tOO34Q4x1K?= =?us-ascii?Q?4/OR+WpSb0uTAv3kn5ZUy5hqrJPmGzgIlHcX0TPlEaO3JHNx3i5tO0ADIScf?= =?us-ascii?Q?TjDQ1zG8jMXDGZMcsTZn4tiPLhS9yQ8y1hlA2z+nHyDKUOOEGyGByepfx2qN?= =?us-ascii?Q?AsfpVQZRZcOv3IJ1aRBTH+aRxub32dZ+EcY0fnUi++Y7nm8AHhQF7006MLDI?= =?us-ascii?Q?+xQ1VkCyJWSiMTKOwgFtRJ1LKWi9ve7IGhMZVfoVaqZYrK9B/7C8b83sqbTa?= =?us-ascii?Q?WHHXtV8p3XJ+YHmt9dsd7HiZvk1Fn0nUBdtGRP+IcZ42MdirAbY6gWem9vk3?= =?us-ascii?Q?JE1CN+1yHW8XExBJCFnTIqWiYcMFJQ1wLt0IR6nAkDZHP27UPh6SujoWLZz/?= =?us-ascii?Q?eqq8t5xQeTCuJPq9FNoylcM7xbaJBCMGVLZ6Ld+Ab9UwUswfqLbuSW1qGxar?= =?us-ascii?Q?dcec611YbsfOa8Da1omQ1S1IlYvLoZ6zZ3FreY64MSjUVts+8Y9DfGWfTXId?= =?us-ascii?Q?bpNnB7lcbHD/l0d3Sm73kPP1L1Af5s50EFOfLWoUaJXk7k3zz7RhGEQEmAda?= =?us-ascii?Q?q3l41qr0GPTbXKHALftzqWNhORCr12Qw0E1yAT/Zsq9sAquakndbbARJrAds?= =?us-ascii?Q?S5oot/kcX+QLkdP1Bm76gTGkMyMrfbXjnmLX9lQfPn4yFdpsQyS78FUI3/G8?= =?us-ascii?Q?uxoapXukIB4GhS1GKlMJQBtIwAyxnjijhDfAGuEWv3Vn3xRrDHaQ7tHpvHXm?= =?us-ascii?Q?NuCAdTRqKl8Dy3H1mmz5nAsRZIqqBo+Pq4B5Wdm8qJAUwHJDnQOI4/QpXBi1?= =?us-ascii?Q?LjtjUQyqvID5m8jORVWHmyvwYWwqZggTdvcmvw9Fgbx4F9xqePcfKkifAEUO?= =?us-ascii?Q?D/MgsRT8rE6qHnV8qtjrk1OPF8I2X12TBvMiwTw2R2kcSBaTKcnjjdUrHcWr?= =?us-ascii?Q?eUDDCQiDSfZgBjM2k4OsySIyHIWaIEoFYs8WqM6oReZ/eEzID2xCzRTfEeVB?= =?us-ascii?Q?twYhlsrfTDxq5k22t1la5D9Bn4M4nEx6J09aT24tWB4l2tCxICt2tt6XVzjG?= =?us-ascii?Q?KslR84cz8/5D3Gq7sqTByAFpOm9bCkRJMBRYQnNue3Lhc5wasUW1bswQGPI0?= =?us-ascii?Q?8XcfQooyg55oFj3XVroW2ymLDGti0eyoA45AskVjKcYELekh2Ybv9TdXkc3x?= =?us-ascii?Q?uMC3b3yk8su+P+5Vxl6Sa4EFKeWizwdKnV9QWASu1Yil5fPZY3hf?= X-OriginatorOrg: valinux.co.jp X-MS-Exchange-CrossTenant-Network-Message-Id: cdf3e11e-af40-40d4-db5d-08de8980b494 X-MS-Exchange-CrossTenant-AuthSource: TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Mar 2026 08:38:21.2268 (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: mEO4PqjL8yCvE5sNcmw178K4xLWy+ZJi4JKacP5PVeGidyTo0eGGvyWbLGZ2wQgzwyO0V3rGiiKQNXB7meg1kw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: OS9P286MB6981 Content-Type: text/plain; charset="utf-8" pci-epf-test advertises the doorbell target to the RC as a BAR number and an offset, and the RC rings the doorbell with a single DWORD MMIO write. Some doorbell backends may report that the doorbell target is already exposed via a platform-owned fixed BAR (db_msg[0].bar/offset). In that case, reuse the pre-exposed window and do not reprogram the BAR with pci_epc_set_bar(). Also honor db_msg[0].irq_flags when requesting the doorbell IRQ, and only restore the original BAR mapping on disable if pci-epf-test programmed it. Tested-by: Niklas Cassel Reviewed-by: Frank Li Signed-off-by: Koichiro Den --- drivers/pci/endpoint/functions/pci-epf-test.c | 84 +++++++++++++------ 1 file changed, 57 insertions(+), 27 deletions(-) diff --git a/drivers/pci/endpoint/functions/pci-epf-test.c b/drivers/pci/en= dpoint/functions/pci-epf-test.c index 14e61ebe1f11..b6c865b0883d 100644 --- a/drivers/pci/endpoint/functions/pci-epf-test.c +++ b/drivers/pci/endpoint/functions/pci-epf-test.c @@ -93,6 +93,7 @@ struct pci_epf_test { bool dma_private; const struct pci_epc_features *epc_features; struct pci_epf_bar db_bar; + bool db_bar_programmed; size_t bar_size[PCI_STD_NUM_BARS]; }; =20 @@ -732,7 +733,9 @@ static void pci_epf_test_enable_doorbell(struct pci_epf= _test *epf_test, { u32 status =3D le32_to_cpu(reg->status); struct pci_epf *epf =3D epf_test->epf; + struct pci_epf_doorbell_msg *db; struct pci_epc *epc =3D epf->epc; + unsigned long irq_flags; struct msi_msg *msg; enum pci_barno bar; size_t offset; @@ -742,13 +745,28 @@ static void pci_epf_test_enable_doorbell(struct pci_e= pf_test *epf_test, if (ret) goto set_status_err; =20 - msg =3D &epf->db_msg[0].msg; - bar =3D pci_epc_get_next_free_bar(epf_test->epc_features, epf_test->test_= reg_bar + 1); - if (bar < BAR_0) - goto err_doorbell_cleanup; + db =3D &epf->db_msg[0]; + msg =3D &db->msg; + epf_test->db_bar_programmed =3D false; + + if (db->bar !=3D NO_BAR) { + /* + * The doorbell target is already exposed via a platform-owned + * fixed BAR + */ + bar =3D db->bar; + offset =3D db->offset; + } else { + bar =3D pci_epc_get_next_free_bar(epf_test->epc_features, + epf_test->test_reg_bar + 1); + if (bar < BAR_0) + goto err_doorbell_cleanup; + } + + irq_flags =3D epf->db_msg[0].irq_flags | IRQF_ONESHOT; =20 ret =3D request_threaded_irq(epf->db_msg[0].virq, NULL, - pci_epf_test_doorbell_handler, IRQF_ONESHOT, + pci_epf_test_doorbell_handler, irq_flags, "pci-ep-test-doorbell", epf_test); if (ret) { dev_err(&epf->dev, @@ -760,22 +778,30 @@ static void pci_epf_test_enable_doorbell(struct pci_e= pf_test *epf_test, reg->doorbell_data =3D cpu_to_le32(msg->data); reg->doorbell_bar =3D cpu_to_le32(bar); =20 - msg =3D &epf->db_msg[0].msg; - ret =3D pci_epf_align_inbound_addr(epf, bar, ((u64)msg->address_hi << 32)= | msg->address_lo, - &epf_test->db_bar.phys_addr, &offset); + if (db->bar =3D=3D NO_BAR) { + ret =3D pci_epf_align_inbound_addr(epf, bar, + ((u64)msg->address_hi << 32) | + msg->address_lo, + &epf_test->db_bar.phys_addr, + &offset); =20 - if (ret) - goto err_free_irq; + if (ret) + goto err_free_irq; + } =20 reg->doorbell_offset =3D cpu_to_le32(offset); =20 - epf_test->db_bar.barno =3D bar; - epf_test->db_bar.size =3D epf->bar[bar].size; - epf_test->db_bar.flags =3D epf->bar[bar].flags; + if (db->bar =3D=3D NO_BAR) { + epf_test->db_bar.barno =3D bar; + epf_test->db_bar.size =3D epf->bar[bar].size; + epf_test->db_bar.flags =3D epf->bar[bar].flags; =20 - ret =3D pci_epc_set_bar(epc, epf->func_no, epf->vfunc_no, &epf_test->db_b= ar); - if (ret) - goto err_free_irq; + ret =3D pci_epc_set_bar(epc, epf->func_no, epf->vfunc_no, &epf_test->db_= bar); + if (ret) + goto err_free_irq; + + epf_test->db_bar_programmed =3D true; + } =20 status |=3D STATUS_DOORBELL_ENABLE_SUCCESS; reg->status =3D cpu_to_le32(status); @@ -805,17 +831,21 @@ static void pci_epf_test_disable_doorbell(struct pci_= epf_test *epf_test, free_irq(epf->db_msg[0].virq, epf_test); pci_epf_test_doorbell_cleanup(epf_test); =20 - /* - * The doorbell feature temporarily overrides the inbound translation - * to point to the address stored in epf_test->db_bar.phys_addr, i.e., - * it calls set_bar() twice without ever calling clear_bar(), as - * calling clear_bar() would clear the BAR's PCI address assigned by - * the host. Thus, when disabling the doorbell, restore the inbound - * translation to point to the memory allocated for the BAR. - */ - ret =3D pci_epc_set_bar(epc, epf->func_no, epf->vfunc_no, &epf->bar[bar]); - if (ret) - goto set_status_err; + if (epf_test->db_bar_programmed) { + /* + * The doorbell feature temporarily overrides the inbound translation + * to point to the address stored in epf_test->db_bar.phys_addr, i.e., + * it calls set_bar() twice without ever calling clear_bar(), as + * calling clear_bar() would clear the BAR's PCI address assigned by + * the host. Thus, when disabling the doorbell, restore the inbound + * translation to point to the memory allocated for the BAR. + */ + ret =3D pci_epc_set_bar(epc, epf->func_no, epf->vfunc_no, &epf->bar[bar]= ); + if (ret) + goto set_status_err; + + epf_test->db_bar_programmed =3D false; + } =20 status |=3D STATUS_DOORBELL_DISABLE_SUCCESS; reg->status =3D cpu_to_le32(status); --=20 2.51.0 From nobody Fri Apr 3 16:03:01 2026 Received: from OS0P286CU010.outbound.protection.outlook.com (mail-japanwestazon11021131.outbound.protection.outlook.com [40.107.74.131]) (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 717443D8912; Tue, 24 Mar 2026 08:38:50 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.74.131 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774341538; cv=fail; b=SuGf0r919Y3YlCDpRRcm9emyBbmJ4loB99/1CVq3CcIaatcNZItnWAilw26DGHJsfm8wdhxkOWq3s3YfMVMOJn9HP2rJb3uOSyGbVKu+uaLi85UiaNiRrIlbvOlLwv5shBLWSkCw2XKAtT9r0CRg1QeozSOddP9qbxvfy4Iercs= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774341538; c=relaxed/simple; bh=SGhx/v6WA8xPIez4UyOkSnbG9oUxpaPlU0pOHhUdqWg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=TEPhIyELtRbMyWLMuKKe3Kp5alLPoeVHtVvGFovkMJA5C4q1313+udXcMxDfiXR0qtyARXMsTN4zMq4cV8Y60/oox6VTvpZlJLUbPpUKH89lLDHyBL/1DP26UV/Bu+NLOonubEcdnEb5tlLarG1/Dow45QG3QBnthC8Lhhu8HiU= 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=COe+U7ia; arc=fail smtp.client-ip=40.107.74.131 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="COe+U7ia" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=OnpTCabc/oVf2jdiD2JBShl9JH3yhVCotdHNCtrAoO26RNAoh9eyzXPPCGc2BdoSPgQNLVZlUV/wliKmlei0xx5i/TRhvF7WfMlmrHcdjzZImsXfDo/OByM7/fVEtyBDAUWAh4HS7E8fX9Sq/YiO6ySLa3Dh9xQsQaDifdSKuU+J64zvDIQ9wJcwSdtY9ch7It+FrL4bnfSp5V1DURVR2T0eXtMa2tVMjBkOqfqR0O1R+04/D5odOsT/EaBDxU3EEF0cT49sCVyAfNacCJEux2TUWnl1Qc0lPj6GJinZrzCPAayN2n7vzKCGHPyt1JeEcSvERCps4gQYCoB9OKyb8w== 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=FK4FAx7GVu6SftufUyn+YzFcrJM94nzV0WVXfZPLKYk=; b=huFnxBidyRPET1gxKgZCICQje+n+Zlsng0alAdjFXefLs4KytNrHhg8ARIaYeQ1EVV+5lzHsRCgQj5xUr/DunkieQaGsKjNF1H2khlx2OsS6ZWn3sktlDkgjsmIGBBJkEsO84Z8ew2yNK3FxE2tAtaMax3V5nI6MwgSsVDs3WpX/1tlWVQ2j7fkKC+WNif6aEIAaJZCjLJyU1Nqa3tExLGPb6zKZmJP9OYkMGe3NlnqlqMQ4BJYDpQcqOvqpM1mLw1NLXDFgQconG3LUrJX9DQ4s+lr7vCE+skS3gfbeF2QNyHsRvwCl8bRCrloOLZKdYbof63vEl8giZAxW1Qo7vw== 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=FK4FAx7GVu6SftufUyn+YzFcrJM94nzV0WVXfZPLKYk=; b=COe+U7iaz1xuMwbgwFaVv2lILTzVyyholeenUHQZDgRkKvYdUifR4UrkznQb5lbeFBOnSp8Xg6NpiFahyTHA5LTz3EI3hpPL1JC4KYjCfDat4qgfqesPgU3mUbpBWGgk2yr92+lWXalOMd2xVxcyI9lcYScqDT9yiPTOTHv7jTA= 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 OS9P286MB6981.JPNP286.PROD.OUTLOOK.COM (2603:1096:604:414::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9723.31; Tue, 24 Mar 2026 08:38:22 +0000 Received: from TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM ([fe80::2305:327c:28ec:9b32]) by TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM ([fe80::2305:327c:28ec:9b32%5]) with mapi id 15.20.9723.030; Tue, 24 Mar 2026 08:38:22 +0000 From: Koichiro Den To: Jingoo Han , Manivannan Sadhasivam , Lorenzo Pieralisi , =?UTF-8?q?Krzysztof=20Wilczy=C5=84ski?= , Rob Herring , Bjorn Helgaas , Kishon Vijay Abraham I , Jon Mason , Dave Jiang , Allen Hubbe , Niklas Cassel , Frank Li , Bhanu Seshu Kumar Valluri , Marco Crivellari , Shin'ichiro Kawasaki , Manikanta Maddireddy Cc: linux-pci@vger.kernel.org, linux-kernel@vger.kernel.org, ntb@lists.linux.dev Subject: [PATCH v11 7/7] PCI: endpoint: pci-ep-msi: Add embedded doorbell fallback Date: Tue, 24 Mar 2026 17:37:28 +0900 Message-ID: <20260324083728.3744734-8-den@valinux.co.jp> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260324083728.3744734-1-den@valinux.co.jp> References: <20260324083728.3744734-1-den@valinux.co.jp> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: TY4P301CA0038.JPNP301.PROD.OUTLOOK.COM (2603:1096:405:2be::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_|OS9P286MB6981:EE_ X-MS-Office365-Filtering-Correlation-Id: 3cdf9bb8-2349-4a21-8c98-08de8980b525 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|7416014|376014|366016|10070799003|1800799024|921020|56012099003|18002099003|22082099003; X-Microsoft-Antispam-Message-Info: LcbJIT//20K8OUpey+4/KtiqRVxeVlavOt3qN7ra9DKiWoSEimBAMB27j8U72jmhwOTo2ahLwzo4IDTy1DdYILzzdCpVwp4I9TMaRtIL3CFRQaYCaQqsTvMshz57+Td+GTotqxcGOX1/K6ODKPL8SaXR9xYkg4ry8jnX2hJAVeubAKxIu2UvhbKjqvBXoB68BsWnbG+Ec6zxxnV4FFD8u0QK7PgJOLeKT9+vRcavMJvLy9w6iwk4xOlr8s0NtUxlra6dKt+I0LyiYipfgATzUo+l5y6ShKJWViFES34QpFZTXDKGqdcCvuxE88I6NqEtr52NrXQvFbQmyy50ML2ngXwnpAj4hn67D7OrjSg2F06+EjZM4z5qvqCvR8ntlxZcMVnMv2WFuQc0YhvUtAwhTtJHwucxP2hSQ1BsZhilv8qY+L4tXKKW4Z/L7PjpyFLZBkBSReiHGziKgpmGpnhV2WWi6RuQ5MI4U7OXcs4be2pnv54Z+qGUlNp1A64Au1mMJkRf5KwAeUbumahK2NX3ejdgT2L3GMfC3e8iGQl1TdLlrO+JfVFXndttrNF+4ifP7ttYWv+FJr9Z2/9lpFRWYSP90sChLW4fP385LbTSBawSG2W2qGC4heRp8JDDhtX+ZuIQNsofSN3T6Z1Dj9jbVuYYuWQ1Lu0rtYU7ZZ4We1YkolcFLZeJ2NJGZeOnbdr/Wo881PGaby0QCO6VClS8YGwG6p5WOal5e244u2VjTEBfEbXnSuAQNGvrqtxuC+9od5o8ZfILyVdWiJaSydzY4A== 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)(7416014)(376014)(366016)(10070799003)(1800799024)(921020)(56012099003)(18002099003)(22082099003);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?sMAT2UtBOk+A4yl2RxfiL0yxtV4e9zITcL1NpyqKA+lNM3x5fUxjykHXlB67?= =?us-ascii?Q?9ANvs4arVLWo/5a/4XoXJthn3p8affBr5MYC9D06vcpr+ybkRtrm+B8EtNr4?= =?us-ascii?Q?I2zL6g9WkP90/cTlx0k91VTYcNwV+HAW5nZYbSti8jz9cTdZ2iRsi6HHCVZV?= =?us-ascii?Q?UmajXwfZ9lXtSQxMZgkZz0DwAm8YjBfpywwMOI8VbifllUagVQdGqtilvxAB?= =?us-ascii?Q?z77kKlgqTCEP68x2ERWMSkNYtcG04prY1tFSWpeLqfrbMDnwVZJWjETEg2Pd?= =?us-ascii?Q?n8YrW2eTXbDwo9ntleD4/mDMTQO+z4uIKI1ni9Fi9MEqXXx03eUSeXyxmqvi?= =?us-ascii?Q?exyOrpGkkKXp3JvkhkQmSXO6qnYlilHje53d+0oUoNIz81tCwPmaTgRgxkbJ?= =?us-ascii?Q?jTcerz5hvXah3QKhef8OczJxuyWqLboyvEZ+wM10rQwdiMUy4us++xf2XaBB?= =?us-ascii?Q?2CTE4S4+QvgAcVsVlwGMSrrvtmMzKvP2jtahCDn7XRSArh4pivBfxzkXZHqd?= =?us-ascii?Q?QApUbPnQ7Z5t0sXhSjvq6JQKnFQHDZx1P3h94hTfBAIZ4Tm8gCWBLkqpTB3C?= =?us-ascii?Q?fILrBSpmKRjABHSyn/sgYDnfoJeb9O6lIyYRtUkSRvO3UOsc832DRYrBy5AJ?= =?us-ascii?Q?3b5VKYndiG4wvmSNbyG9X0xRYtkBARyXgO22mLtVVGW0FHC510dqAFDwb8dJ?= =?us-ascii?Q?xED1Ygh9xsGjKMUklrLYpc4b9HjMc0ZyzXNuIA3BGbBnDli5UeXXvOrYiU1A?= =?us-ascii?Q?cEX25BwwQksmFOEjDAGkVPHLqLrenmbmOntExJLGpF07hc8KueQoHwhpl/YY?= =?us-ascii?Q?EqEeYsFGQSU4AzNh3M/pUMzeBoDkzLOeA+GVesbx3kAvkBXX9jdsa0cmbi0O?= =?us-ascii?Q?GAaPPI8G2JZvFdmYHHnhbOMujQ7PhfQynZADvri77pLDQsdUmHubeCDUFQ0p?= =?us-ascii?Q?9CJpfM1q2Fo+UP9x6bTLZxQ01ILX62oIa8SSKUNfBvzjRnfwKUftDJdMTnHl?= =?us-ascii?Q?D+bfvklx2iReS17cdLNxXQl1gUbSzxQh9vUwcyO+Jr5iIftYCJf7CvpzNZ6R?= =?us-ascii?Q?eFVOXd5uXpJkezwns2/v9LiwDzvP290a/4snPtoijhx8TY+QE1ewQNKg5PiI?= =?us-ascii?Q?yVpE2T83AXESXIX/vpgRT8eoQpTNeSEjk+6mtGZZ3HlgtiayHbhIKfqL6i1f?= =?us-ascii?Q?DBX5De3OGPhZWLUc0MUFoTsXso1NkmovtFzpXnhaJSClYrfShCXkNyzOyYZ3?= =?us-ascii?Q?vREc+LQGLz87EUzvNcbs466+RLgYYcHgo/0TFPHvQU1HXLM5uZkWjR75Jo+i?= =?us-ascii?Q?PHDv640wO6w0zM5SQRVdq5TstxjRdGHfvCDEiG4aA1xd9bvQZdfrJ01zhO1C?= =?us-ascii?Q?bc744K8CjBwhY9ZccVRSHmVW6/CnIVeJvOpAkEK0PiH0LBzeW2JVVkTG+Kec?= =?us-ascii?Q?ef2EbPXD1Y+VN3POpxmZefASAtMabwEZteJLov/qWfA0jb6OhJ+ARdoZ410e?= =?us-ascii?Q?xZOJsQHmbqN2KKxkChmLwmiwNBFjMVfiyLfNv1jEAyvFLD5GckWE3/jlGmfm?= =?us-ascii?Q?/HqSmZWsYjkVZRuvoVk61Jyjk2LYVeJ7C5ZotkWUd3MFCIkanraGPLvuYFnE?= =?us-ascii?Q?QB1Cf1FqD8Ykhq9o+WdPiZBxzE8WRhAo9lLvHuBDlBRU3/ePM/pCqG+nE9nr?= =?us-ascii?Q?+QpyQArxHKWp3TWANmTC9VPmEDQdeeLp98gcRETMHIFfIqOEt+Nl0tDrfr8l?= =?us-ascii?Q?Ruh+tobakyXcYqcapoii5ohdBf2Z9jrwi3QdjWNumT+Ycx9KjPrJ?= X-OriginatorOrg: valinux.co.jp X-MS-Exchange-CrossTenant-Network-Message-Id: 3cdf9bb8-2349-4a21-8c98-08de8980b525 X-MS-Exchange-CrossTenant-AuthSource: TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Mar 2026 08:38:22.1631 (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: 3S1VZHvdEEW7BI2Zh1KTuLWh4z3I4q20g7uVEvWVmfl8VOTMjwJK/RzW5WezAk/dXsPowL8HM5yRfjpHm/0ciQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: OS9P286MB6981 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. Tested-by: Niklas Cassel Signed-off-by: Koichiro Den --- 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