From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 44E62E909DB for ; Tue, 17 Feb 2026 16:45:52 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:List-Subscribe:List-Help :List-Post:List-Archive:List-Unsubscribe:List-Id:MIME-Version:In-Reply-To: Content-Type:References:Message-ID:Subject:Cc:To:From:Date:Reply-To: Content-Transfer-Encoding:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=m3yvX2eVRerCTnP4v0t8WEZm5HkoKtJ/gxPyA0fySks=; b=p2iv4vHodIxMgO1bjaXkRASGe9 zZzykaKzgWnNK23p/LsHqby8OCenyTIFDFFI6OevGVnlCI8JFS6QrbU/f7Rd13Uf7Fx4aZ7PRqmL2 3TVgIll+qP5gkvsZABliMJHJxbuVcbFYwd1ZumfRAVYsWLZrPuG9rHVM8gwDV/h2ZRXaTTYEPJZY/ RiBJ2eBeYW+a+8c4j1wfFXCm0PLetG2wxxRAt/mZ29xu+i76oYXkbGgX0lFZAF8TqZUV0TdT7yPpU idxvXJIqAueewp/3qhJhkYma4t5ILHy56RZ173OhDs/YK5JiO4gRtHflM4bnOfbcteMETP6nPiRe1 Pmm9qgIQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98.2 #2 (Red Hat Linux)) id 1vsOCm-00000008ap0-0Sx4; Tue, 17 Feb 2026 16:45:44 +0000 Received: from mail-francesouthazlp170110003.outbound.protection.outlook.com ([2a01:111:f403:c207::3] helo=MRWPR03CU001.outbound.protection.outlook.com) by bombadil.infradead.org with esmtps (Exim 4.98.2 #2 (Red Hat Linux)) id 1vsOCi-00000008aob-0svf; Tue, 17 Feb 2026 16:45:41 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=k1dnsrhcJC+woFlvy3RxpuGA1wryH4oFkv7Vr6sdeP74mTh97duo+Pp+pGW9Wrp7csk+LhpjPdaR7ml+TOCOvgdygA0ZrZDJ/StUNiVR6NpL9EveNp3zxSDl9caQv/yaKj4QyoHpBo4XC7KnaOYRyupTrkPfP6zeMk76QSEV1De3RLheLs4TZXZE1Z1m+gIcTUB3i8VL1t8gTSOGDMJm108VIbzGWfIyqj+3q6rplAQuTlaDZxSwmHMu3CMWhyEDQHw7rchlh4V6JIGXpkMfgmXEE9Cw5Ha6tVVw2R4sjQiTzVWTdzI4pD03FzhWbKQ5qSZo2q+uXnzFImAXA8D7/A== 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=m3yvX2eVRerCTnP4v0t8WEZm5HkoKtJ/gxPyA0fySks=; b=DrAUFfhSYLS+Hm5ucdDm/X5OVbh7k9u/kcvlfWSARccANwuZvQjtCg6WRENHbsdA7QUsL8gEi4c20WcgfbWXbLfNxALcxm599zvTEdeNIzdsV8Ah92U/ObG1neoUeu88TjX5zbtpZickUce1E10hFREtZC7bVEOezfAaId6DUFxa0xPERnwCY+YFYgI1hwJ5BT4uAv2dsTAQk1N8gaipwjNzScpYhMp4ywu0RhwGSdyLADuwj9u6l9n5Cfmxm7EZHIOSvMLyr6Jxza0OSaYD1Cu1khhrLt+02/HIhjhkH9dk3ZLDRPEY4Mr6fR1uZo9eJ1TCenMr1zzdqBS/X0MTFA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=m3yvX2eVRerCTnP4v0t8WEZm5HkoKtJ/gxPyA0fySks=; b=E36+4XSaE48PrgruvF9LTe6dQg50zDAlMYoUgReQIhA76+T4SLukAuVW6gX+EDlNIOxt5iWjczYvGpRnceZRP8oR/YXU/cEe+YYjKjXjeETiWFMs2/p1Sj/aTRdBpxiCQhEGC9R1Um3tnTTF4WC+Af0fuBREnu5n9plCgt7svl50BhL5oN+9Rh+XySo5JAMnbKBsePMevNBZ3FOnkNhAA+7EjvYG58ZAMGE2MIvLvKr3gUZb5oLShyNDwPnNDPoJQQXiqoKoKJQ0AMyAo6ublqg8bKJmsJaUoYJbNdMCaePVB8j9r2UKt7aV89/4VUufWzKbKlDBTcwrwmdQsg7U/Q== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from PA4PR04MB9366.eurprd04.prod.outlook.com (2603:10a6:102:2a9::8) by PAXPR04MB8557.eurprd04.prod.outlook.com (2603:10a6:102:214::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9632.13; Tue, 17 Feb 2026 16:45:35 +0000 Received: from PA4PR04MB9366.eurprd04.prod.outlook.com ([fe80::75e4:8143:ddbc:6588]) by PA4PR04MB9366.eurprd04.prod.outlook.com ([fe80::75e4:8143:ddbc:6588%6]) with mapi id 15.20.9611.013; Tue, 17 Feb 2026 16:45:35 +0000 Date: Tue, 17 Feb 2026 11:45:26 -0500 From: Frank Li To: Koichiro Den Cc: jingoohan1@gmail.com, mani@kernel.org, lpieralisi@kernel.org, kwilczynski@kernel.org, robh@kernel.org, bhelgaas@google.com, heiko@sntech.de, kishon@kernel.org, jdmason@kudzu.us, dave.jiang@intel.com, allenbh@gmail.com, cassel@kernel.org, shawn.lin@rock-chips.com, linux-pci@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-rockchip@lists.infradead.org, ntb@lists.linux.dev Subject: Re: [PATCH v8 9/9] PCI: endpoint: pci-ep-msi: Add embedded eDMA doorbell fallback Message-ID: References: <20260217080601.3808847-1-den@valinux.co.jp> <20260217080601.3808847-10-den@valinux.co.jp> Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20260217080601.3808847-10-den@valinux.co.jp> X-ClientProxiedBy: PH8P220CA0014.NAMP220.PROD.OUTLOOK.COM (2603:10b6:510:345::18) To PA4PR04MB9366.eurprd04.prod.outlook.com (2603:10a6:102:2a9::8) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: PA4PR04MB9366:EE_|PAXPR04MB8557:EE_ X-MS-Office365-Filtering-Correlation-Id: 8e29c3d0-d8da-47ca-b10d-08de6e43f907 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|376014|7416014|52116014|1800799024|19092799006|7053199007|38350700014; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?8yWfZfsmye9MicAdsNc8Okzx9n2Sb6VS7berNLjBTNJZU1FGidqQ018fekDy?= =?us-ascii?Q?gBl4Oe+4O/j+anD7KOQ6aZw0Cpv2gcnFUlzA0rgqx2Ji8ZkqEex537QFqUyd?= =?us-ascii?Q?VayxeBRRu4ctA7uqa4jC8nrZMjmRHvi1B7yuVZatTd9BiQJ8hxqxq/CM+z02?= =?us-ascii?Q?MPe+PIkL05EivxLwRXkCwDPH5V7xPnWK+KomXWOQyhLceTt72XsKXkqc+U+n?= =?us-ascii?Q?6N1PD3VrD3w7OklCQ941vZz3tfZdKddbpIRRbSDXe22UYd8N6txeHDbHsdkx?= =?us-ascii?Q?vZpJ0PHNgJryrAJKVemvdidNESgVUsh2RaA72m1/bpG5zPNMe3eKff40tq20?= =?us-ascii?Q?oBXD4TVdLQB5WagDt8eYZtO9n6lgZtxEMJEUN89rmAmADicanXToOlMp6oEU?= =?us-ascii?Q?se0K6oohS0XUIHtMDBW/TEWT/DumNKX2Rb3edWJb+Mhibcihlq7fgx4Rhn2A?= =?us-ascii?Q?WIgU5ygT58LHuFi2+T6FGq/CavmCQDQKJRk0UXcNY8NVA7ujcHdX5KIUIv/L?= =?us-ascii?Q?SvzXsc492r0re+rlR5IFZl+/bnIlUS8J3TUvPR+0rPtuZcd2kgxArw3fF1Hc?= =?us-ascii?Q?e3dGBfw4LfSlF3M6cAPVpkvVgKboOws3+RDdH+nQ8yNLjN5x+EhyD9X0n01H?= =?us-ascii?Q?L8O1ZbM1b5G32t26lkyvbEXPRTtVV3Lq+b/A3Qrdov1oKGU9UnQZM4ulLPVT?= =?us-ascii?Q?2hC/GPRjKTMIdOwgzm39X7b7RL2JE+EtSU49q7LyxOm5rtaD6gqkp/vwf7ac?= =?us-ascii?Q?4epM0ugWsyOnpubiiGvO8e0Hw08smyVpoxx22/NEB+QeI/qud6e0WoOmGPW6?= =?us-ascii?Q?DfMSsVtTXv9dZF+FW2g05m0f3EIEYFfj2mlAhQNr85NcYt2cKwAKpJd0XTVy?= =?us-ascii?Q?gAxie9IvmWBLp04RzBwx+rWL7YYMgp5wM5Vam1996pgnsR0Jt65Cy8DtDOyJ?= =?us-ascii?Q?o8wGqLf93CaiBgtWffTTn5cWmX2WzqWHS4Z9T1ags8PyggIQCAW1ykYefdae?= =?us-ascii?Q?BfR7v4nD9M1VRDrD6mevoAc36zBQrcKFTwr9Hmy0Y/utq+2i434fu0REqpxu?= =?us-ascii?Q?hgIZsBHi1+EVE8ySpyEXK2k+7+5CDzbTCQy1AHVQU/HzNX6TVIsI7e+diGdk?= =?us-ascii?Q?447XdozrGz5QMvOmnhwPblrueZwBjG3telIA7xzGMiPXW52Pwi1BLUOpQj56?= =?us-ascii?Q?4IiIf1fL9f4Y0hafXC0DeV2XOckbKWsVEpNrfIJ0NnOYN/8I1/tTCOhg8Dhp?= =?us-ascii?Q?M0Db3Xf+22FuDu76Plvtah1B40XtowVuW9lZdFT9CUTNeWnoQVhTPjI1p7XC?= =?us-ascii?Q?se8rA6XnAJux+5oV6oNs3su4KO8MyBTVzN+Ck/n2NMqdKBW9T2lRuSFXw7lN?= =?us-ascii?Q?ffQCmFbdo6exQ2wzgdfC0x9kBVGS7Z88toYJyXE/FBteArHFmA4OFFM3wCL6?= =?us-ascii?Q?1QwOKm7IsIkb51MhjedZ3LRlT919WSCQmYe4kmDvzVqsuRoFuz6Cjd2kZByt?= =?us-ascii?Q?0YbrojWtZg2Accyrz71WuKehCgWQvmDx6Na9ArJIdAAG/r/IauEtxR6tUmYJ?= =?us-ascii?Q?IYCdqeOCS99G2x5qwxlGXt3+6W/OzdVFBDQi/7GCdT2m0SXUq5cdVx1lu+a+?= =?us-ascii?Q?2LD2//3uFkRjR/1P9b3YSnA=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PA4PR04MB9366.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(376014)(7416014)(52116014)(1800799024)(19092799006)(7053199007)(38350700014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?jMt9++cR+b2HP+jbAsuGfqKvlojkkG7CdynPlWvHWghwFV2W6QBZSJ08uSvM?= =?us-ascii?Q?EaimhtIebb+VdW+7b4Yt7k7o4S+pNVJJFXUOEPDqwMocBYmcqoQt/q6/KUe8?= =?us-ascii?Q?4Jolxz9RoJybZraclCLoy1GZHWfvK1ASYScKvgi8+9IacDQYFxvF85FGbYYt?= =?us-ascii?Q?74lLhqefw08Uo38tNDKWDtPOIW6zlOu/68dwf3fV4mkPyBj8c6TateKaTDh4?= =?us-ascii?Q?rrY1PPRs45R2xAvmbSt5s+uphWor+Pg2+XfWufImuCmDyyx+IG5mn0kPIbaE?= =?us-ascii?Q?ZxOpgklnsxD2Fr0zkFeRfpUEnFhKMUNUu5AOQwDvwndyZ6pllLbD92P1AUZG?= =?us-ascii?Q?KUE892FmpH1+2pGJcKSj6SSOJhTgwlr53R9T1s8xlVwmt2Z+2TmPlGr+qwnB?= =?us-ascii?Q?+CymFkAM9MKWGMHAMENVTYfuNUd/1WB0tlCfqGUjdkLDAmQHDYhO6aHQ+ehC?= =?us-ascii?Q?VEJY/9kLiS3TOJRjLBDBG7fQbX2HkrHa2CMmB6QvOFuXaHtm4FFSitZCRhgh?= =?us-ascii?Q?j4UajgI75k/pco1qor9YC3fweQJs9Aa4ME5zUbFyDUdIUhuCoTHVF4iPUYBX?= =?us-ascii?Q?Hb02pLIDbwTtDWr067Sw2a2gfwIe6jUZWCPjWtoD3ol4Nn1BmFj25D09+76P?= =?us-ascii?Q?Thw4nUItFKgp0DTA7ulS0ywU9V/LBsJWYF0gjy01Gzoh4sg4ungRHmXWrS8e?= =?us-ascii?Q?2lKpS57q8tKq+bl7bLbDm5aQymR7OA5zlgFOjGXNsekgDObjVrLO+m/ffnJw?= =?us-ascii?Q?bgt+GBv4DBPztRGsrem96+0GnKnJfN/Y8Q7vrHOHsuJ+6Hea76kSg0gh7Ktq?= =?us-ascii?Q?L+e8kPGnGw/PyWiGonhOi2/cqd1VxGflmjaFvEXE5mUpyBrWNrBRiD7hajmu?= =?us-ascii?Q?hg9GXoKboY+Bytvuec76KusN+xg2MbZWzD4F7tVbpYXqGznZh9NLmiSW/+ET?= =?us-ascii?Q?aH4vwXkSgP9dE3NvsMrPVVm5a9cRos10qNKvP3ZCcxyJOTVUUvP5IHq48YU7?= =?us-ascii?Q?D2GenWYWuSUkHu7GdlZWq5EEg0C/9pV1PNcwJKI8S+6hQvDZvDxDz3fFHRtq?= =?us-ascii?Q?N6JkiFpWlW9fGXLetSOp87vRJfhpYPDutaGqQqSSkA4DfO26ZUM5il+UWiwi?= =?us-ascii?Q?ymac3cK+7qG6p0WLuPFz/b6QPtuTh1Yf1An3UehlXbR7I5iaZSDkZsMKK3bl?= =?us-ascii?Q?LfWnKCZ/0oc/8KChtgZI04S580PTY+4UKawTpgDokYQhJ4zmnCbmPxdWtOI0?= =?us-ascii?Q?d/Oaps8njNb8ZUgYOrHqr3MgG9pV9FJOMS+1Y3PNJ1ru1uiO12H1EKGm9bHf?= =?us-ascii?Q?vcxOqWtw/+ntg375oUkBkFQE+9UKlkbP375pB8hBgXuPy04eew6ElXeqJKk6?= =?us-ascii?Q?aAJmE7r+oOGuISC0BmmWqYgkmFmJufhChQ0/KSTMKNiUEa76SjMFk7MajI3v?= =?us-ascii?Q?8Dm2chZdq062oPTlfes94wPPyUOrHbaIOWqpC0x0MpqBkdjUyIgc41Kbut/b?= =?us-ascii?Q?RHiPtnFAo4ZU2VvmOXo6d+8FCBia2tijzCgr+7PYZUItAxEPzofrKS+qm3NF?= =?us-ascii?Q?c7yqEXoH5oGOBtXN5bIBr8VZ+56Kgz3I1lR2Nh/M73ZX8/ES0AMNdbviHxCV?= =?us-ascii?Q?Zre9CqxfSsvFrM/Fu8qFqutc87oGjfPDNNQ/pQotPmQn2kXGEcfbeKDEMSZX?= =?us-ascii?Q?yDs8pDPzBHQc/vrfEumMvlP8gscsWNQDGat9Uq1BZ4Zzsor/51iRYtsjZks3?= =?us-ascii?Q?4rZIAgX7gw=3D=3D?= X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 8e29c3d0-d8da-47ca-b10d-08de6e43f907 X-MS-Exchange-CrossTenant-AuthSource: PA4PR04MB9366.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Feb 2026 16:45:35.4628 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: U2IgPP3FahSqFoPELZYlexSodiGwIdhKldgCaE7kkH1Y1Ep7tkn80fzsY9K3L+Y3TKirNJ3E9Ft3N3GW9H2afw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PAXPR04MB8557 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20260217_084540_256740_7B603636 X-CRM114-Status: GOOD ( 31.03 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org On Tue, Feb 17, 2026 at 05:06:01PM +0900, Koichiro Den wrote: > 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 physical address so EPF drivers can map it into BAR space. > > When MSI doorbell allocation fails with -ENODEV, > pci_epf_alloc_doorbell() falls back to this embedded backend. > > Signed-off-by: Koichiro Den > --- Reviewed-by: Frank Li > Changes since v7: > - Use designated initializer for consistent styling. > - Clean up the pci_epf_alloc_doorbell() error path. > > drivers/pci/endpoint/pci-ep-msi.c | 96 ++++++++++++++++++++++++++++++- > 1 file changed, 94 insertions(+), 2 deletions(-) > > diff --git a/drivers/pci/endpoint/pci-ep-msi.c b/drivers/pci/endpoint/pci-ep-msi.c > index 50badffa9d72..66f5a68c81b0 100644 > --- a/drivers/pci/endpoint/pci-ep-msi.c > +++ b/drivers/pci/endpoint/pci-ep-msi.c > @@ -6,6 +6,7 @@ > * Author: Frank Li > */ > > +#include > #include > #include > #include > @@ -36,6 +37,84 @@ static void pci_epf_write_msi_msg(struct msi_desc *desc, struct msi_msg *msg) > pci_epc_put(epc); > } > > +static int pci_epf_alloc_doorbell_embedded(struct pci_epf *epf, u16 num_db) > +{ > + const struct pci_epc_aux_resource *doorbell = NULL; > + struct pci_epf_doorbell_msg *msg; > + struct pci_epc *epc = epf->epc; > + struct device *dev = &epf->dev; > + int count, ret, i; > + u64 addr; > + > + count = pci_epc_get_aux_resources(epc, epf->func_no, epf->vfunc_no, > + NULL, 0); > + if (count == -EOPNOTSUPP || count == 0) > + return -ENODEV; > + if (count < 0) > + return count; > + > + struct pci_epc_aux_resource *res __free(kfree) = > + kcalloc(count, sizeof(*res), GFP_KERNEL); > + if (!res) > + return -ENOMEM; > + > + ret = pci_epc_get_aux_resources(epc, epf->func_no, epf->vfunc_no, > + res, count); > + if (ret == -EOPNOTSUPP || ret == 0) > + return -ENODEV; > + if (ret < 0) > + return ret; > + > + count = ret; > + > + for (i = 0; i < count; i++) { > + if (res[i].type == PCI_EPC_AUX_DOORBELL_MMIO) { > + if (doorbell) { > + dev_warn(dev, > + "Duplicate DOORBELL_MMIO resource found\n"); > + continue; > + } > + doorbell = &res[i]; > + } > + } > + if (!doorbell) > + return -ENODEV; > + > + msg = kcalloc(num_db, sizeof(*msg), GFP_KERNEL); > + if (!msg) > + return -ENOMEM; > + > + addr = doorbell->phys_addr; > + > + /* > + * 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 = 0; i < num_db; i++) > + msg[i] = (struct pci_epf_doorbell_msg) { > + .msg.address_lo = (u32)addr, > + .msg.address_hi = (u32)(addr >> 32), > + .msg.data = doorbell->u.db_mmio.data, > + .virq = doorbell->u.db_mmio.irq, > + .irq_flags = IRQF_SHARED, > + .type = PCI_EPF_DOORBELL_EMBEDDED, > + .bar = doorbell->bar, > + .offset = (doorbell->bar == NO_BAR) ? 0 : > + doorbell->bar_offset, > + }; > + > + epf->num_db = num_db; > + epf->db_msg = msg; > + return 0; > +} > + > static int pci_epf_alloc_doorbell_msi(struct pci_epf *epf, u16 num_db) > { > struct pci_epf_doorbell_msg *msg; > @@ -109,8 +188,21 @@ int pci_epf_alloc_doorbell(struct pci_epf *epf, u16 num_db) > if (!ret) > return 0; > > - 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 != -ENODEV) > + return ret; > + > + ret = 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); > > -- > 2.51.0 >