{"id":2197146,"url":"http://patchwork.ozlabs.org/api/1.0/patches/2197146/?format=json","project":{"id":28,"url":"http://patchwork.ozlabs.org/api/1.0/projects/28/?format=json","name":"Linux PCI development","link_name":"linux-pci","list_id":"linux-pci.vger.kernel.org","list_email":"linux-pci@vger.kernel.org","web_url":null,"scm_url":null,"webscm_url":null},"msgid":"<20260217080601.3808847-7-den@valinux.co.jp>","date":"2026-02-17T08:05:58","name":"[v8,6/9] PCI: endpoint: pci-ep-msi: Refactor doorbell allocation for new backends","commit_ref":null,"pull_url":null,"state":"new","archived":false,"hash":"1b9fd919eca1cdbf6ee4a0f7bf0bda69d536a286","submitter":{"id":91573,"url":"http://patchwork.ozlabs.org/api/1.0/people/91573/?format=json","name":"Koichiro Den","email":"den@valinux.co.jp"},"delegate":null,"mbox":"http://patchwork.ozlabs.org/project/linux-pci/patch/20260217080601.3808847-7-den@valinux.co.jp/mbox/","series":[{"id":492390,"url":"http://patchwork.ozlabs.org/api/1.0/series/492390/?format=json","date":"2026-02-17T08:05:52","name":"PCI: endpoint: pci-ep-msi: Add embedded doorbell fallback","version":8,"mbox":"http://patchwork.ozlabs.org/series/492390/mbox/"}],"check":"pending","checks":"http://patchwork.ozlabs.org/api/patches/2197146/checks/","tags":{},"headers":{"Return-Path":"\n <linux-pci+bounces-47431-incoming=patchwork.ozlabs.org@vger.kernel.org>","X-Original-To":["incoming@patchwork.ozlabs.org","linux-pci@vger.kernel.org"],"Delivered-To":"patchwork-incoming@legolas.ozlabs.org","Authentication-Results":["legolas.ozlabs.org;\n\tdkim=pass (1024-bit key;\n unprotected) header.d=valinux.co.jp header.i=@valinux.co.jp\n header.a=rsa-sha256 header.s=selector1 header.b=FdzoWNVD;\n\tdkim-atps=neutral","legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org\n (client-ip=2600:3c04:e001:36c::12fc:5321; helo=tor.lore.kernel.org;\n envelope-from=linux-pci+bounces-47431-incoming=patchwork.ozlabs.org@vger.kernel.org;\n receiver=patchwork.ozlabs.org)","smtp.subspace.kernel.org;\n\tdkim=pass (1024-bit key) header.d=valinux.co.jp header.i=@valinux.co.jp\n header.b=\"FdzoWNVD\"","smtp.subspace.kernel.org;\n arc=fail smtp.client-ip=40.107.74.114","smtp.subspace.kernel.org;\n dmarc=pass (p=none dis=none) header.from=valinux.co.jp","smtp.subspace.kernel.org;\n spf=pass smtp.mailfrom=valinux.co.jp","dkim=none (message not signed)\n header.d=none;dmarc=none action=none header.from=valinux.co.jp;"],"Received":["from tor.lore.kernel.org (tor.lore.kernel.org\n [IPv6:2600:3c04:e001:36c::12fc:5321])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange x25519)\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4fFXLm6z5Hz1xpl\n\tfor <incoming@patchwork.ozlabs.org>; Tue, 17 Feb 2026 19:07:44 +1100 (AEDT)","from smtp.subspace.kernel.org (conduit.subspace.kernel.org\n [100.90.174.1])\n\tby tor.lore.kernel.org (Postfix) with ESMTP id 52D07303EF9E\n\tfor <incoming@patchwork.ozlabs.org>; Tue, 17 Feb 2026 08:06:41 +0000 (UTC)","from localhost.localdomain (localhost.localdomain [127.0.0.1])\n\tby smtp.subspace.kernel.org (Postfix) with ESMTP id 48C682EAB6B;\n\tTue, 17 Feb 2026 08:06:21 +0000 (UTC)","from OS0P286CU010.outbound.protection.outlook.com\n (mail-japanwestazon11021114.outbound.protection.outlook.com [40.107.74.114])\n\t(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))\n\t(No client certificate requested)\n\tby smtp.subspace.kernel.org (Postfix) with ESMTPS id 932B52E7BB6;\n\tTue, 17 Feb 2026 08:06:19 +0000 (UTC)","from TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:38f::10)\n by OS7P286MB7132.JPNP286.PROD.OUTLOOK.COM (2603:1096:604:42f::6) with\n Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9611.16; Tue, 17 Feb\n 2026 08:06:12 +0000","from TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM\n ([fe80::2305:327c:28ec:9b32]) by TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM\n ([fe80::2305:327c:28ec:9b32%5]) with mapi id 15.20.9611.013; Tue, 17 Feb 2026\n 08:06:12 +0000"],"ARC-Seal":["i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;\n\tt=1771315581; cv=fail;\n b=uUB3JrzgANJt1uClzLkR19ecsYxog2wvcSBGJUysjI7H909gtAsmuFIJggbCuZTnw/9BIPditWi/MHvvuMIzLLrNt+pd9rgFgPxIqrMV9REYgnW56J9H+0m+WdGiHVRpHHlgaZZHVweqEAqxdl2NbRwqIdToC1ZZRzxucTYqyZ0=","i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;\n b=EvUG4CV60TLmIiQ9RQqiLpf2sInJLJKVfZvgttHCnIJoManUYT70h7DiR63QV7qVDz5nfYHloBnturgyQaUxIxIg8pt3JhZSxccsNrr4kBOXKPSZI4tESYlxztJqQA0laJVwFJqf1GRhIt9lq7C/DDTz13CaGrySLU53aot727TGvUmc47gfLPAPwkhb19UMj0XJ77miPnyDepVui6zIryLyBV7roHFeQxZoz6H2OhadFB1ecY85UKKNBH8SiObggAXqknjsK8GVx1UyKGnw9g1gaWguudNtrZzWo/47TVI+ZL/0jW0cbe+d/WsYjLa2AMUw5j5J3QkOWOFF2tvy8Q=="],"ARC-Message-Signature":["i=2; a=rsa-sha256; d=subspace.kernel.org;\n\ts=arc-20240116; t=1771315581; c=relaxed/simple;\n\tbh=0A+Nzvi/THnQlf9+ifmqNuLybQAR767UOD2UXe0VSpo=;\n\th=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References:\n\t Content-Type:MIME-Version;\n b=r6O7cug6BKewFmBuNq+AzFm7BYLuEe/D+Bg0KMrpeM9NyLiA3PaqLZl8EdQDdZkpkQMx+OAAe/eo5VNhCaaVzp7uOQGYveBUtyYYLQVtwEc3D6VsIahkMsm24NESQ1SB8Zlkdud3w63+HYJcCjdTU5WKj0KjsrKj2c9mXQt+AOM=","i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;\n s=arcselector10001;\n 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;\n bh=MA/cpjlOgnLoTWJQ7J5AKBUtCS2N96V6l8xsnKjShwU=;\n b=shxiGNHDlcwrF5nLIR0hO3IjppwqYx+Gw2O3UBfwbqbuALyVgZnK3XwYf6XuiJFll0jtP5dHQPCHQuAl5uons97TSIbp3Ih73Liy4dITblpX6qWKzfz8/gVSykbxpU5/kt4sofuYWYSiCdhDllvqZOBlRBG6GxkH20h91jjhwPrNEybzRfB7edlrIEE/bCZ2PLzKJUMn9QItZeCbBSjdxG6SwIQFZfavjjl5bEgw0v0sit8L4cwJWY2qYsyDphWf3fWbr1fItkkJ25KWQEK0d8zDrQs+PKJftSgma/I/rK9vCBWNbB4r1p7KfpefJe5mVX8YzJjeyxFnBn41f98SMA=="],"ARC-Authentication-Results":["i=2; smtp.subspace.kernel.org;\n dmarc=pass (p=none dis=none) header.from=valinux.co.jp;\n spf=pass smtp.mailfrom=valinux.co.jp;\n dkim=pass (1024-bit key) header.d=valinux.co.jp header.i=@valinux.co.jp\n header.b=FdzoWNVD; arc=fail smtp.client-ip=40.107.74.114","i=1; mx.microsoft.com 1; spf=pass\n smtp.mailfrom=valinux.co.jp; dmarc=pass action=none\n 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;\n s=selector1;\n h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;\n bh=MA/cpjlOgnLoTWJQ7J5AKBUtCS2N96V6l8xsnKjShwU=;\n b=FdzoWNVDy4TrWe40JBEiT+fIrsTlodphri8yP8pTXQN4GYSA6xRNEVGeuSzPqMge8Ex/ET4uuLemYa6tX/qcXPxTVpumGnk2m2gslF1S+MYrdt90I/kaoePe1yfshhrT29S/L9KvpGytrKkICqxDsWbOxKdN6QngpXTeXVpttnA=","From":"Koichiro Den <den@valinux.co.jp>","To":"jingoohan1@gmail.com,\n\tmani@kernel.org,\n\tlpieralisi@kernel.org,\n\tkwilczynski@kernel.org,\n\trobh@kernel.org,\n\tbhelgaas@google.com,\n\theiko@sntech.de,\n\tkishon@kernel.org,\n\tjdmason@kudzu.us,\n\tdave.jiang@intel.com,\n\tallenbh@gmail.com,\n\tcassel@kernel.org,\n\tshawn.lin@rock-chips.com,\n\tFrank.Li@nxp.com","Cc":"linux-pci@vger.kernel.org,\n\tlinux-kernel@vger.kernel.org,\n\tlinux-arm-kernel@lists.infradead.org,\n\tlinux-rockchip@lists.infradead.org,\n\tntb@lists.linux.dev","Subject":"[PATCH v8 6/9] PCI: endpoint: pci-ep-msi: Refactor doorbell\n allocation for new backends","Date":"Tue, 17 Feb 2026 17:05:58 +0900","Message-ID":"<20260217080601.3808847-7-den@valinux.co.jp>","X-Mailer":"git-send-email 2.51.0","In-Reply-To":"<20260217080601.3808847-1-den@valinux.co.jp>","References":"<20260217080601.3808847-1-den@valinux.co.jp>","Content-Transfer-Encoding":"8bit","Content-Type":"text/plain","X-ClientProxiedBy":"TYCP286CA0250.JPNP286.PROD.OUTLOOK.COM\n (2603:1096:400:456::14) To TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM\n (2603:1096:405:38f::10)","Precedence":"bulk","X-Mailing-List":"linux-pci@vger.kernel.org","List-Id":"<linux-pci.vger.kernel.org>","List-Subscribe":"<mailto:linux-pci+subscribe@vger.kernel.org>","List-Unsubscribe":"<mailto:linux-pci+unsubscribe@vger.kernel.org>","MIME-Version":"1.0","X-MS-PublicTrafficType":"Email","X-MS-TrafficTypeDiagnostic":"TY7P286MB7722:EE_|OS7P286MB7132:EE_","X-MS-Office365-Filtering-Correlation-Id":"375f6ce8-192d-47cb-b0da-08de6dfb6aa4","X-MS-Exchange-SenderADCheck":"1","X-MS-Exchange-AntiSpam-Relay":"0","X-Microsoft-Antispam":"\n\tBCL:0;ARA:13230040|366016|376014|1800799024|7416014|10070799003|921020;","X-Microsoft-Antispam-Message-Info":"\n TXSEs4Y6jnuOy6Bq3MlbX8/lqdv7VxNvNOOSnhXovudiDhq/M8T3KuqgX0TIYWMQTVpquijVnWTDk86yiLn4nK+JiZRs1Rnx0aDUeL2wkvX+jOIqfqDnFPnOShCP7Yym+E7XCLBkWGYkKPVA6ww9u3OfKMapc0GohZB7ORibJ137wNDmPpiMZ5Choe02QxPRrEeh9lFw4mjdLpxkcNa/UmGhdTgsZV8d3XbWAMdtfGWsLCxpwRrPDr5xEMf6P8XERzHoodslrd/nLiG4pxk9ouyyLYh2NmV2P/f8T6pjxbXNikZXGhMlt4MbVOvg5pYwPSj1mfw+aDyi4k5ZVPuV7yfy8Wt24BU8U02S6mUG6zUhyv7ex+FDHEARE/KsgrHY04Q8Jds7wJG3Az4FMVO6oj2xa3iOicrKZo73JrDwXIhyUurnUl19zwbK0YEzIZLYwwE1aeXz0alrfl9+5l62h0o94ntTQWvkvLYUk6ZyblKV0ZiKKaPCfc3qDWkvUFvo2O0tbZVixTzP8DypBW6Vez3UU9i30h6Q+eigg3GN+WMDnjHkcqvCwl43P7uYm/KURyzphEp01vUxNk6xoOK9r06S+bk5id2j/9Vw1ywUrcVcSaSuyRmHS1l+l+Z37ivuPURuw38r+KO9SaxEZO0tIo300m529z6ONKWUoAYz8/tReyXkJKE3vumRh/152a8jUqFxVlpHHjKwDrjjXWEK3AiWyRmZWoVC9/YQ8TaGdkQYc4bpWj4TyWX3EIxB+bYxo6EuH4pApjtTQibXT092wQU7TU1unShJbMEU/losUXw6K6SNbVFCS2sguQVNSRVUH8wGY6OULWGkIVY2J9hUy9w1VR71tIbEURhimX+S98Y3XxlcSP9KqOfb8H68l27kZkI269WYVKx8/S5UKGSGJR3xg8VnECVS+Yb18PeEkEy5pt72CdTKnEr2/1dFUu4Zqr4GCesA8mjkInWV8CMalT6PVMLKO4K75l2Otms9iQIXDrU3YNLXU+qAxKGAvvQQ+kpdRqxuxrhmmaU7GrjdcsnyXhkGewK2bqmfeLi+/l4v8VrqQn76N5is1coZJopsOmJMyhyVFCSfs6NhYCAhBi+V7cpJga3/yZSeG08OtiBknGcybXa2dcHkJU5FjDzDD6d1cRH8g5Hn0KGJ/HUdRVO1b27LmUP+vGaFnZfUA6IEFm8QMkV3KsHk+jjkr+uUUjrQDgTkIO1cYIR1yqDiQKg3gY3b3iWveWk4Z3JtrWSK2cuqdWDFBK0FsRjXtP1SmxTHiFy6PpGtC8PDzNAVnp2ZIf9a7HMDKw79QFuYdIQYdtCi6x7LA/KF4R9+AgIbd4e3fjZKEtMRwQ4i+ZctQhLyLec535/F0PUNeHsp6x997KmkQxiUjvKHaIw4wsYRVviRAYLoisznPVgNq/TE7rRb1hW0mRkD0JtHYuoZqBkRm3/wlzzX7hDNRprshPylhnphi3y3dN7TWHtPtlkFgQtMl79laDLL4f60UXnjfwKrYjO/lmgTgd0UVxPQWqdqRoKNSxhGZPMfGv8zdZCERXBKELARCdFKQcD+hcWyukzkCgUUoKKKHk77LseOCXPAj9Fn65Hrc2+6KCaZpDdDtA==","X-Forefront-Antispam-Report":"\n\tCIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230040)(366016)(376014)(1800799024)(7416014)(10070799003)(921020);DIR:OUT;SFP:1102;","X-MS-Exchange-AntiSpam-MessageData-ChunkCount":"1","X-MS-Exchange-AntiSpam-MessageData-0":"\n NkFDMi9+dwP7a8kCGNqzEtNXkkJ/EgSA6GRtMbwC4xBoCmaIbgCUf6EE4DZB5bQ52WCRW3vgfmZgfu9ftdccp09Tn8KCzOJxsMgSbAuJsxNPl1FQbp5KWDZ77dyn7wvEMEDwMFNt1nXjbOcQTf+i+Xp4NIUM/vbgOsFKr/iSJVz9tzCA87PnbWJGfMUv185Qqwc7ss83UKd7RDrTIziXJxQAPNSHDaeVcKIj9OCH6EBjssbABRM/3DMQdvPaKhOsErpdjMVTM3Mvx+uZp1YDdGcFHk0kwR0DNzr85hWZnZ/72Q1f7vUHfPgnjoYoMbtCjfF2/KzpQdhFvVpJCVarpeti9s9iC7HPfoay7GTADytNke3icKxcCi9FxMZIqRZVjizot8cFAfZWlIYWw7bwB/UzGJzsc/sBijNVxGl57HoNUzLi2LzMW7HbVkEloggHjj7EGAptXy7HHTN6lKVDXvHVYIw3lA94ZkACgtmXQheJkOBbhswqeGZa81FTuq/QQMmkvlgXrTEmNwO6bbCyEwxTQq9bAdXlt4sfHs7EIxmrzBMmuMQ+aaK6d7aW2t+QEHeXQ2a7zwQPAcr0Sc8GqmR6NHL58Dg0+WszHhjTaANL4GyZ2y0JSykPY3ATw8oGiU78orn8+DBNmSTc9/7qbK+t4zJuLtFdWiW9JIEIfy5uKMwG/52I6GZwyhHPKQREQHyfXjxTBZR7rMEljPvvzzeIQEIZp0vanzUZt4pEDN9QMSfeOKqjRRQUsSMTGZEPwz1PsjNtiqWvIvxwtE421JLfiHaPvW18GqOkND+JtmX+1VEkLmSU0xW/B5SZQV1qfL+jk5HswEdgri22mrNoElUi8VmYHvoibIWuXYBIlQvjintXpUnfGd5z1RMVPeaLdoHnW57Uj1/kYpYEUeKt6CoFtp3YEL/Arntl3dbCl07MQJBEq1Nplzna0uPBdEWOGvkw0w9raVpYKdvrM/yUSm+996+daJDTMXD6t6FkX7Js15ehZI9npRcibqhI+pPNfWAGQjQ9+C2qbSeak1jzVbHyQOKi5cQegjK1vmD1t1kQ6eJaJvMKeq8GJUgJypHiIpeWYflTWI2XAiBuewCVhJy9q3QzLATy5sPhWVvnXJzvqFAPZYTWjjLV2aRwyz9LVqWwj6i7d5LO/nGrsu5XWaF8WPhUhQZQ4BpajwKbNQO3X5bV7qPKjDkw6qxkZSssycRslX6MbnVKJItIW2MLqr0kCDF1jrJodPQcsfCExdeOeFiLxT5B9qsudxrvnIbvJ/HjCHfobQgL0MeY726AUv9fPRwdnPzOF3vKaZrBu9e6a0mIQ7iMx73SvD0zCF9+1vfzzvWI0wOOAzkqfKybirO06eUw21fVIV+ULzZB94t4JlMRa6SxTUQMWlDISUo2Vf/tiTwZdQyg6RrysetD2oz9FMPkPy7RUAgP3f55fl/mqvogfeNd4ch+RciVI813AcT2HrjACAH9ix03E+quqsxJ0yUB+uwA1kMVglfsliphCA7TG0Uda/olqUNITIkeWDo8Xxa6RkaYMYxikvrKYRqcHo1NJKV2DClVhGr8jp2vaX/Cn9ux1WRIgHQCTYuxKWOVkcVMkUyyCEqTVH8TDH6N69njX2ZIi8DzA24VLCJrO7bVERiVzmsho0xs5LMBzSkJdwfuSPNYKQ50idkS2fXViiwO+TEZCVcMXcxlxUh0nB/zugPSdPgvJRbCX/srBjWrxLNuDDQnHjCxL5mW2H2cYfXkCzn65q8VGA6bH17n4EE8kNlVTLblccXGHdhZ","X-OriginatorOrg":"valinux.co.jp","X-MS-Exchange-CrossTenant-Network-Message-Id":"\n 375f6ce8-192d-47cb-b0da-08de6dfb6aa4","X-MS-Exchange-CrossTenant-AuthSource":"TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM","X-MS-Exchange-CrossTenant-AuthAs":"Internal","X-MS-Exchange-CrossTenant-OriginalArrivalTime":"17 Feb 2026 08:06:12.7144\n (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":"\n I3bMdj9rz+qoiUCHJRQ7e9FFRLuGvNRsySZH/NNxT9QwxFiBKcTSkODGWhrJtikywpDyuhwnT3IyjBn19+Fsww==","X-MS-Exchange-Transport-CrossTenantHeadersStamped":"OS7P286MB7132"},"content":"Prepare pci-ep-msi for non-MSI doorbell backends.\n\nFactor MSI doorbell allocation into a helper and extend struct\npci_epf_doorbell_msg with:\n\n  - irq_flags: required IRQ request flags (e.g. IRQF_SHARED for some\n    backends)\n  - type: doorbell backend type\n  - bar/offset: pre-exposed doorbell target location, if any\n\nInitialize these fields for the existing MSI-backed doorbell\nimplementation.\n\nAlso add PCI_EPF_DOORBELL_EMBEDDED type, which is to be implemented in a\nfollow-up patch.\n\nNo functional changes.\n\nSigned-off-by: Koichiro Den <den@valinux.co.jp>\n---\nChanges since v7:\n  - Switch to designated initializer and rely on implicit\n    zero-initialization.\n\n drivers/pci/endpoint/pci-ep-msi.c | 54 ++++++++++++++++++++++---------\n include/linux/pci-epf.h           | 23 +++++++++++--\n 2 files changed, 60 insertions(+), 17 deletions(-)","diff":"diff --git a/drivers/pci/endpoint/pci-ep-msi.c b/drivers/pci/endpoint/pci-ep-msi.c\nindex ad8a81d6ad77..50badffa9d72 100644\n--- a/drivers/pci/endpoint/pci-ep-msi.c\n+++ b/drivers/pci/endpoint/pci-ep-msi.c\n@@ -8,6 +8,7 @@\n \n #include <linux/device.h>\n #include <linux/export.h>\n+#include <linux/interrupt.h>\n #include <linux/irqdomain.h>\n #include <linux/module.h>\n #include <linux/msi.h>\n@@ -35,23 +36,13 @@ static void pci_epf_write_msi_msg(struct msi_desc *desc, struct msi_msg *msg)\n \tpci_epc_put(epc);\n }\n \n-int pci_epf_alloc_doorbell(struct pci_epf *epf, u16 num_db)\n+static int pci_epf_alloc_doorbell_msi(struct pci_epf *epf, u16 num_db)\n {\n-\tstruct pci_epc *epc = epf->epc;\n+\tstruct pci_epf_doorbell_msg *msg;\n \tstruct device *dev = &epf->dev;\n+\tstruct pci_epc *epc = epf->epc;\n \tstruct irq_domain *domain;\n-\tvoid *msg;\n-\tint ret;\n-\tint i;\n-\n-\t/* TODO: Multi-EPF support */\n-\tif (list_first_entry_or_null(&epc->pci_epf, struct pci_epf, list) != epf) {\n-\t\tdev_err(dev, \"MSI doorbell doesn't support multiple EPF\\n\");\n-\t\treturn -EINVAL;\n-\t}\n-\n-\tif (epf->db_msg)\n-\t\treturn -EBUSY;\n+\tint ret, i;\n \n \tdomain = of_msi_map_get_device_domain(epc->dev.parent, 0,\n \t\t\t\t\t      DOMAIN_BUS_PLATFORM_MSI);\n@@ -74,6 +65,12 @@ int pci_epf_alloc_doorbell(struct pci_epf *epf, u16 num_db)\n \tif (!msg)\n \t\treturn -ENOMEM;\n \n+\tfor (i = 0; i < num_db; i++)\n+\t\tmsg[i] = (struct pci_epf_doorbell_msg) {\n+\t\t\t.type = PCI_EPF_DOORBELL_MSI,\n+\t\t\t.bar = NO_BAR,\n+\t\t};\n+\n \tepf->num_db = num_db;\n \tepf->db_msg = msg;\n \n@@ -90,13 +87,40 @@ int pci_epf_alloc_doorbell(struct pci_epf *epf, u16 num_db)\n \tfor (i = 0; i < num_db; i++)\n \t\tepf->db_msg[i].virq = msi_get_virq(epc->dev.parent, i);\n \n+\treturn 0;\n+}\n+\n+int pci_epf_alloc_doorbell(struct pci_epf *epf, u16 num_db)\n+{\n+\tstruct pci_epc *epc = epf->epc;\n+\tstruct device *dev = &epf->dev;\n+\tint ret;\n+\n+\t/* TODO: Multi-EPF support */\n+\tif (list_first_entry_or_null(&epc->pci_epf, struct pci_epf, list) != epf) {\n+\t\tdev_err(dev, \"Doorbell doesn't support multiple EPF\\n\");\n+\t\treturn -EINVAL;\n+\t}\n+\n+\tif (epf->db_msg)\n+\t\treturn -EBUSY;\n+\n+\tret = pci_epf_alloc_doorbell_msi(epf, num_db);\n+\tif (!ret)\n+\t\treturn 0;\n+\n+\tdev_err(dev, \"Failed to allocate doorbell: %d\\n\", ret);\n \treturn ret;\n }\n EXPORT_SYMBOL_GPL(pci_epf_alloc_doorbell);\n \n void pci_epf_free_doorbell(struct pci_epf *epf)\n {\n-\tplatform_device_msi_free_irqs_all(epf->epc->dev.parent);\n+\tif (!epf->db_msg)\n+\t\treturn;\n+\n+\tif (epf->db_msg[0].type == PCI_EPF_DOORBELL_MSI)\n+\t\tplatform_device_msi_free_irqs_all(epf->epc->dev.parent);\n \n \tkfree(epf->db_msg);\n \tepf->db_msg = NULL;\ndiff --git a/include/linux/pci-epf.h b/include/linux/pci-epf.h\nindex 7737a7c03260..cd747447a1ea 100644\n--- a/include/linux/pci-epf.h\n+++ b/include/linux/pci-epf.h\n@@ -152,14 +152,33 @@ struct pci_epf_bar {\n \tstruct pci_epf_bar_submap\t*submap;\n };\n \n+enum pci_epf_doorbell_type {\n+\tPCI_EPF_DOORBELL_MSI = 0,\n+\tPCI_EPF_DOORBELL_EMBEDDED,\n+};\n+\n /**\n  * struct pci_epf_doorbell_msg - represents doorbell message\n- * @msg: MSI message\n- * @virq: IRQ number of this doorbell MSI message\n+ * @msg: Doorbell address/data pair to be mapped into BAR space.\n+ *       For MSI-backed doorbells this is the MSI message, while for\n+ *       \"embedded\" doorbells this represents an MMIO write that asserts\n+ *       an interrupt on the EP side.\n+ * @virq: IRQ number of this doorbell message\n+ * @irq_flags: Required flags for request_irq()/request_threaded_irq().\n+ *             Callers may OR-in additional flags (e.g. IRQF_ONESHOT).\n+ * @type: Doorbell type.\n+ * @bar: BAR number where the doorbell target is already exposed to the RC\n+ *       (NO_BAR if not)\n+ * @offset: offset within @bar for the doorbell target (valid iff\n+ *          @bar != NO_BAR)\n  */\n struct pci_epf_doorbell_msg {\n \tstruct msi_msg msg;\n \tint virq;\n+\tunsigned long irq_flags;\n+\tenum pci_epf_doorbell_type type;\n+\tenum pci_barno bar;\n+\tresource_size_t offset;\n };\n \n /**\n","prefixes":["v8","6/9"]}