Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/patches/2196640/?format=api
{ "id": 2196640, "url": "http://patchwork.ozlabs.org/api/patches/2196640/?format=api", "web_url": "http://patchwork.ozlabs.org/project/linux-pci/patch/20260215163847.3522572-10-den@valinux.co.jp/", "project": { "id": 28, "url": "http://patchwork.ozlabs.org/api/projects/28/?format=api", "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, "list_archive_url": "", "list_archive_url_format": "", "commit_url_format": "" }, "msgid": "<20260215163847.3522572-10-den@valinux.co.jp>", "list_archive_url": null, "date": "2026-02-15T16:38:47", "name": "[v7,9/9] PCI: endpoint: pci-ep-msi: Add embedded eDMA doorbell fallback", "commit_ref": null, "pull_url": null, "state": "new", "archived": false, "hash": "cd609a2e20f95e6c2df8e02c1a9afb2c1d7dbd3f", "submitter": { "id": 91573, "url": "http://patchwork.ozlabs.org/api/people/91573/?format=api", "name": "Koichiro Den", "email": "den@valinux.co.jp" }, "delegate": null, "mbox": "http://patchwork.ozlabs.org/project/linux-pci/patch/20260215163847.3522572-10-den@valinux.co.jp/mbox/", "series": [ { "id": 492228, "url": "http://patchwork.ozlabs.org/api/series/492228/?format=api", "web_url": "http://patchwork.ozlabs.org/project/linux-pci/list/?series=492228", "date": "2026-02-15T16:38:38", "name": "PCI: endpoint: pci-ep-msi: Add embedded doorbell fallback", "version": 7, "mbox": "http://patchwork.ozlabs.org/series/492228/mbox/" } ], "comments": "http://patchwork.ozlabs.org/api/patches/2196640/comments/", "check": "pending", "checks": "http://patchwork.ozlabs.org/api/patches/2196640/checks/", "tags": {}, "related": [], "headers": { "Return-Path": "\n <linux-pci+bounces-47320-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=WZOFhmwv;\n\tdkim-atps=neutral", "legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org\n (client-ip=172.105.105.114; helo=tor.lore.kernel.org;\n envelope-from=linux-pci+bounces-47320-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=\"WZOFhmwv\"", "smtp.subspace.kernel.org;\n arc=fail smtp.client-ip=52.101.229.101", "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 [172.105.105.114])\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 4fDWrx65slz1xpY\n\tfor <incoming@patchwork.ozlabs.org>; Mon, 16 Feb 2026 03:41:53 +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 AE142303C531\n\tfor <incoming@patchwork.ozlabs.org>; Sun, 15 Feb 2026 16:39:50 +0000 (UTC)", "from localhost.localdomain (localhost.localdomain [127.0.0.1])\n\tby smtp.subspace.kernel.org (Postfix) with ESMTP id B4C3D2045AD;\n\tSun, 15 Feb 2026 16:39:17 +0000 (UTC)", "from TY3P286CU002.outbound.protection.outlook.com\n (mail-japaneastazon11020101.outbound.protection.outlook.com [52.101.229.101])\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 EC07E2F618B;\n\tSun, 15 Feb 2026 16:39:14 +0000 (UTC)", "from TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:38f::10)\n by OSCP286MB5196.JPNP286.PROD.OUTLOOK.COM (2603:1096:604:34b::5) with\n Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9611.16; Sun, 15 Feb\n 2026 16:39:09 +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; Sun, 15 Feb 2026\n 16:39:09 +0000" ], "ARC-Seal": [ "i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;\n\tt=1771173557; cv=fail;\n b=jgiTn7LGzqZHOEWHskhFmJA2z5a4FIRDS8V8hFx6e5jc8tQxIJB27m9wmfWF4eWPphlwoIkIw7fhkZ6NzoT6SX45h4JAO0CtQR9O9YoP3XI9+NEu43twj6ShXYuQhv9Yipb87IHI8VltOA9SaiIOeKBboz7NtAZUUddVis//yps=", "i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;\n b=JKal6C3wLQbwth065WEvWjVUdnc9O1JxAuiNsr+kCbmoyK4km7xsDjX1NS2A9gzcavIG4d6kQ6gabAI9v+O2ARI/RFx1G1ctqfMkRLgyTojaciC5YUVavnyHPwpxm/FT6+QHWRdGL824ZP31awo6OrKE84FDyPybRvXt0/vSADOlfTeEicN9XxJfZ5UXihzaVVbXDsdjrrYOQQYI96kNmllWCU1GV6Us7WWK6jDBDiJoLR9Fiw1cUytrXNMUc6SqpR7j3ACHfednuZDZyGUPBx/492XDatynatdc5pS54VXT8gfdo/nTKAi9cEGztQM8oFYvlEofZmRTbbsqMOE7ZA==" ], "ARC-Message-Signature": [ "i=2; a=rsa-sha256; d=subspace.kernel.org;\n\ts=arc-20240116; t=1771173557; c=relaxed/simple;\n\tbh=yGQLuMwFm3C5E8BkRJgDLExUINVLR7r8JqidoBlEQhM=;\n\th=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References:\n\t Content-Type:MIME-Version;\n b=JKuutf5aT6hFvsVmd6MrhIYioq58IIUr/lRmqeQ+5iY50xQFHDct/0HyL7ieE4/Ibpbeu1fjQSaFZcXLxLDVzwR8yoJdvZ2JRXSpXQ3hCTStAA1+pQ1ZdrMdT2SBHUeOxjytcABSNL1tfcwzh3LgjSqyBmzL71caC9PlRjD+orE=", "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=5D+zbTEgpTS5UZZwzogOf7rstvVJhCWU92vys06J65A=;\n b=uqPCZ+3TViInKxNV53o97J1CX39ZZwcfAc7NZ+lE4ZLOZzlBLUikUg1sRtCx1y5hhtyt9EGeg9Q4pRsQXG8yjEocqfWunbZsdozxc5dZ5VAfTPHpX+/CnzTwHFKjHyRuzJ/iLzgEFzO7zr7/1WZDF/Ff4aRS4quLxTCZ2LFIHRIjgpCiZpWCY+Ui5PtCgvAWObEP5ivV8bWEP81168TcWgOF4l9bgmeLoFPD+U/yEaox49eC+UMKS74cTb51zvnJpNlBwrvudfBEr/x/ymIKIV+h+kesmAPGGqdQ/fWyND1azRsuX9lfTLo7qNuZ2cKuno99kjp52C7ZY8p0EJEnVw==" ], "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=WZOFhmwv; arc=fail smtp.client-ip=52.101.229.101", "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=5D+zbTEgpTS5UZZwzogOf7rstvVJhCWU92vys06J65A=;\n b=WZOFhmwvXxC3eclllp7unooNyT/5X5R983pK+mIh7W/3SJLrFKU7f9hftPQp7buPwurOJZ32fwuk3ll4DcyDx+Eu5/cF/K/NKzl4X738oHs9Sq0r6BXeoAwvKw8ICZv8z6+2zadv88IonfrkyDhfE/U72JQl5Q28Wf+B75Bg+uQ=", "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 v7 9/9] PCI: endpoint: pci-ep-msi: Add embedded eDMA doorbell\n fallback", "Date": "Mon, 16 Feb 2026 01:38:47 +0900", "Message-ID": "<20260215163847.3522572-10-den@valinux.co.jp>", "X-Mailer": "git-send-email 2.51.0", "In-Reply-To": "<20260215163847.3522572-1-den@valinux.co.jp>", "References": "<20260215163847.3522572-1-den@valinux.co.jp>", "Content-Transfer-Encoding": "8bit", "Content-Type": "text/plain", "X-ClientProxiedBy": "TY4P301CA0089.JPNP301.PROD.OUTLOOK.COM\n (2603:1096:405:37a::10) 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_|OSCP286MB5196:EE_", "X-MS-Office365-Filtering-Correlation-Id": "a78af44e-447d-4ce1-383d-08de6cb0be0e", "X-MS-Exchange-SenderADCheck": "1", "X-MS-Exchange-AntiSpam-Relay": "0", "X-Microsoft-Antispam": "\n\tBCL:0;ARA:13230040|1800799024|10070799003|7416014|376014|366016|921020;", "X-Microsoft-Antispam-Message-Info": "\n srR/A+YLBEL6dfM+bKjdq1KPFwceVs/GVxy2FtpTanJrhrG3Q/9h6mlE95GRswi2/47vn/cYKiW2HCI3iXc+qjzLNrOjQ/JnAjFM5SPTpFnK1mFqAjwC0tY+nv7cS80FKWHof7Ktc7GGiQTfv1643PeSKT3yqt9+TE93FtS/ahUX2dBfTT5yBN6BaQTlN3DUAi4KT523DP2f3AYF5Mk1mcCag+cYKrI9I7fiY6wzj9Brpnmzj105SjrrB3seAWq/zc6PBfRbmoE8I6yhe9BJvO9q3MgmV78/jUrU2h23DM9kW0gLXRZZf3l47zK4WF7OFDp6VI1UO1VRccc8GQAJv2G/Y04e+jj88GMMPt5olIM916Om2krgJAmRLVkRCLCaUX6D2JTutpd7rfAMZwAHtTnHjrd7JA1Y21RW99AHxuDtreMe105Fyky5kftK1CuEtGPUNUNl+07UrQM+nIT1MQ8gHdxGLU5UtK/+yFDiVEY/ZYOXkDHWZ7iH9UTA6oe0WZvEDPWPDZJIOpzCFHiH11589Z3RP2gURIwa6O9iBr4kLuOqIu7h+er5eHSyxVVcYQIF43S/fUmX8hiwrgQgU3+Y0SwGmbZ6/nTEsTy0EoomuesDxkraKcnTPEcRzuo9AmVrorKoyigIeIXbD4E15AMHDjenAiqeO6fnpcWlnSt6AYj9CJF92HCR5CR7UT53xem/mwlbHuRxxRm7h2sPuAPMeydnXmW+5YWRKGA835d0X9XsHymYYBgFtFNhopq8YU4cwUlUG58HbP8FOwTn7FN1eaeGeyN6kjYG/t6pCuIdQRUjBIM+EyqgHTU6g3MiOaPZONhOQ+HTUBMCXTYG4/wukmQNlubnh9DnFmIDxcMHkk8yWrM5ZmHQ6EfJ7PnCZuZ01jPCWdGCfCVDRMZIW+kx2+SyuGXpPpa5zm68W3z6ORuGuiZc8zbv+PbIznGdEP6/cbLXJDyoTHAiEw4bouZ0ZGTw9G8/T3TZd/EXfX/muOeiBwmbCpoxdk1uoElLUb+nqngGTBvrg0gx7bMhNnNkRu233gIAy/JdyTNVGJlWiWcaqRR3Ou0qajpx3+DxJaxYUsDLAS+IWAIbZ3a7Mh6JGbi5XZQbYPYwfaNyAq0SBJzFZ4YtNytaLx8Ykx9xns0R4OEDbZja9wGwhTCdu4b0WTvksvvJP1yPfX6gHcCd0+8quYz13ASnnyn6IgXxwnz3CHvPT2jE8hoH6A1kkwy+alemk1QAHsR3B+gvs/qysPXxr7fmQ1rBB63av+bjPzBJiqYvDp4vVCXwiiYTd7R0Udl1RmTI0TcSW+nLvvSulVuNUNqL0duCe8FiiY/ukKv3Bgm5usnNLeH1gf3nZpOb/9BuCG97lY29v+8R5gldMuKuR/VdLVRGX+Lu0MqFbaMQGfBmgoq5iZgRFl9YGqM1lwNLQPqNeqLqrnTNTyzmJx4GAoJ/y3YIM5ybE420hjqz1LACEPodT0jY2psZ3LHoAvpghr0yVa20kKEWVN3eVODg8HSzZKyJ+6kubsoshgicfyHPEq149fbcStbw6kcq2JtyKfBm9YiDbk2WZ1lua3gJmUB02lirzmyJeaxjsAMndEFiUTaByxzASYzDjA==", "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)(1800799024)(10070799003)(7416014)(376014)(366016)(921020);DIR:OUT;SFP:1102;", "X-MS-Exchange-AntiSpam-MessageData-ChunkCount": "1", "X-MS-Exchange-AntiSpam-MessageData-0": "\n MvX0mjQKhr9/jNYb0+txVA7Y3nZbJtfaPizUcG+Y5j8OAkN+XALPXoefro3npk4w3fUxj0Vaq5PPcvrbbl2mIKHVXwNkb7+9zMYtN1UmUReVh9UkH3XRzYThUFBERBytRiskZZ74fhnqiGgqJjBnNrFfcPy7JOobKSsTvlZ20Tw6WLz8PNsyesyXHjWRFu1C6mg0SmlBXsz+CnjMf7Yr+W5ga8aJOB/1Yn6FxRN2g6Itnz7NPv7gnZi/+q5NsLQbG2mEPeDQKWGHVmAPtk7PTYxfds9a1ZGQssk0nI5wEGerOYD+UwfVI9HuqyHO1qylhoXZipQduxG6lkNkxGP+xqWNTFKuvnFi+kZWKSQHexO1TP8YFPXSvf5oxPfxEjViU526Y1BkIjmMWzkGwxfdCRqz3HeAG/dA1jhC43fW7NNQzkamA/o+hTxmOvYYHmgMnvhv2EGtE6/0Eqav8R8FFq/7y3TdAJPhZcw0rzWO53RhUJYRfncQ51UtSe0XwB9sQc7nOm5hbYYVt0I/mOOOgrg+2I2p7gELFcGAgxnd+7X+TYtapeScCeyCR3yJ/REsRwLHrqRI5DpALVoZYW2avfZvj5CYnaPKPw/hRh37fNm/itKj3Rr9TDrU/kcoaR9IWEa/FjXdX9gvL8gQW/fwYzvCvYy7jCSrzVDYW4g9RqZvD/HXD84ZeRJMfrZp+KyoSYW2RpTkTCwdnuyTT16T7WopEpVeM7UvpY23yFK9ynCXe05tK335oybaLcFNoEHvkmdqpcNCDCE+vxWoac8jFawb4RBxDgBuIRuo8hPJPAvDIuSiehajkg5eB7s1MKbsTr+RWTzTmNoy4FJbPJXnp1zLw6FGnDoCEkdVFpqBIv5EqTxULzut+ulPhraE89U6oVqGupyLlor9IH/zXpCH8wS1DZnN9iPHuxc9AoKSqK3Wv3xW3NNOLJ8sRR7tOHbI0+k0+3twPP773lM6IdPySoc0bmAcNIOJrlVX1sNX0xoYvJwo9EVxvIpqou+NsD8DtVWK7WQ8HHVNOXN6sH+vT4YL+SulWOp+Nvi7CpVnwf+JrQqu1Tkp240m+pzytQX+Icp9FS0QGLcr26XVvUrJj48C+d785KWu4I3VEHI1RxJW3oWRs+X2PWYHSe1oPY4rfzWBJ9y0n6X9Fl2tjR7ohe7qghJVGVPv+8caBsnwJJhaQu2n+dhuuSZpQjW1up5k91JqcDBiOfPWiVHfQukm8R81lsb+3eFig1EoJ1vNvuKTnwcRGKE+ZUWHdfWOhN++2Zfuta7XHMx00X96dK1EDzoK7gK43yCSpbffNFWOHtNDvBEvo79J12IA86pVSt5g1s13rokYRdhXVaDHfWILpL8mqW6tkLQT82oFen44uR1f/OwCxBEOInUg/7NUVv2SjNFMIdRu0CFbE+Y+NQlbTzW/JGHQMRTXkR0ffByoD6uCirb6EwhwGxZWNjd9uYwIg9volgRGHo7kC6eJsjMkzu8lpBb6w/iCfoOZmVoTYiJpbTTyafM/K0rxSDajMjNN021SSSCnAjHp8TY8iGzWQazGxVNlJlWIWc9nacKlTvZZE44KCinC7mCnjiGOPHMNHc1l2VeIa2v94ZjWNCqAfAlq7C0req34PFR7TrxMcLpwtVL+hCn3UyWMOdvSju/W6+WDZaOGCubIdUW0/j4A3HeZa6ockKKw76fJy29vfHywzOw0/ttA8MIAjcskYDwDGV3t6D1Tx6ORrRSvKK1iv/Q03Hd90WiVJ1H2+bDw+RpaQd6aMFAY97tyAgYwPSTM", "X-OriginatorOrg": "valinux.co.jp", "X-MS-Exchange-CrossTenant-Network-Message-Id": "\n a78af44e-447d-4ce1-383d-08de6cb0be0e", "X-MS-Exchange-CrossTenant-AuthSource": "TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM", "X-MS-Exchange-CrossTenant-AuthAs": "Internal", "X-MS-Exchange-CrossTenant-OriginalArrivalTime": "15 Feb 2026 16:39:09.2379\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 hTYq4Iivc/zW1APdbFHkpBWVlAXSO6i+Rad8ivWWDj/DOzmUEkj9aTB2gxCtB3WpRvwcHXRdwpkVLhIlJGi+pQ==", "X-MS-Exchange-Transport-CrossTenantHeadersStamped": "OSCP286MB5196" }, "content": "Some endpoint platforms cannot use platform MSI / GIC ITS to implement\nEP-side doorbells. In those cases, EPF drivers cannot provide an\ninterrupt-driven doorbell and often fall back to polling.\n\nAdd an \"embedded\" doorbell backend that uses a controller-integrated\ndoorbell target (e.g. DesignWare integrated eDMA interrupt-emulation\ndoorbell).\n\nThe backend locates the doorbell register and a corresponding Linux IRQ\nvia the EPC aux-resource API. If the doorbell register is already\nexposed via a fixed BAR mapping, provide BAR+offset. Otherwise provide\nthe physical address so EPF drivers can map it into BAR space.\n\nWhen MSI doorbell allocation fails with -ENODEV,\npci_epf_alloc_doorbell() falls back to this embedded backend.\n\nSigned-off-by: Koichiro Den <den@valinux.co.jp>\n---\n drivers/pci/endpoint/pci-ep-msi.c | 90 +++++++++++++++++++++++++++++++\n 1 file changed, 90 insertions(+)", "diff": "diff --git a/drivers/pci/endpoint/pci-ep-msi.c b/drivers/pci/endpoint/pci-ep-msi.c\nindex a42f69ad24ad..6e1524c2d891 100644\n--- a/drivers/pci/endpoint/pci-ep-msi.c\n+++ b/drivers/pci/endpoint/pci-ep-msi.c\n@@ -6,6 +6,7 @@\n * Author: Frank Li <Frank.Li@nxp.com>\n */\n \n+#include <linux/cleanup.h>\n #include <linux/device.h>\n #include <linux/export.h>\n #include <linux/interrupt.h>\n@@ -36,6 +37,82 @@ static void pci_epf_write_msi_msg(struct msi_desc *desc, struct msi_msg *msg)\n \tpci_epc_put(epc);\n }\n \n+static int pci_epf_alloc_doorbell_embedded(struct pci_epf *epf, u16 num_db)\n+{\n+\tconst struct pci_epc_aux_resource *doorbell = NULL;\n+\tstruct pci_epf_doorbell_msg *msg;\n+\tstruct pci_epc *epc = epf->epc;\n+\tstruct device *dev = &epf->dev;\n+\tint count, ret, i;\n+\tu64 addr;\n+\n+\tcount = pci_epc_get_aux_resources(epc, epf->func_no, epf->vfunc_no,\n+\t\t\t\t\t NULL, 0);\n+\tif (count == -EOPNOTSUPP || count == 0)\n+\t\treturn -ENODEV;\n+\tif (count < 0)\n+\t\treturn count;\n+\n+\tstruct pci_epc_aux_resource *res __free(kfree) =\n+\t\t\t\tkcalloc(count, sizeof(*res), GFP_KERNEL);\n+\tif (!res)\n+\t\treturn -ENOMEM;\n+\n+\tret = pci_epc_get_aux_resources(epc, epf->func_no, epf->vfunc_no,\n+\t\t\t\t\tres, count);\n+\tif (ret == -EOPNOTSUPP || ret == 0)\n+\t\treturn -ENODEV;\n+\tif (ret < 0)\n+\t\treturn ret;\n+\n+\tcount = ret;\n+\n+\tfor (i = 0; i < count; i++) {\n+\t\tif (res[i].type == PCI_EPC_AUX_DOORBELL_MMIO) {\n+\t\t\tif (doorbell) {\n+\t\t\t\tdev_warn(dev,\n+\t\t\t\t\t \"Duplicate DOORBELL_MMIO resource found\\n\");\n+\t\t\t\tcontinue;\n+\t\t\t}\n+\t\t\tdoorbell = &res[i];\n+\t\t}\n+\t}\n+\tif (!doorbell)\n+\t\treturn -ENODEV;\n+\n+\tmsg = kcalloc(num_db, sizeof(*msg), GFP_KERNEL);\n+\tif (!msg)\n+\t\treturn -ENOMEM;\n+\n+\taddr = doorbell->phys_addr;\n+\n+\t/*\n+\t * Embedded doorbell backends (e.g. DesignWare eDMA interrupt emulation)\n+\t * typically provide a single IRQ and do not offer per-doorbell\n+\t * distinguishable address/data pairs. The EPC aux resource therefore\n+\t * exposes one DOORBELL_MMIO entry (u.db_mmio.irq).\n+\t *\n+\t * Still, pci_epf_alloc_doorbell() allows requesting multiple doorbells.\n+\t * For such backends we replicate the same address/data for each entry\n+\t * and mark the IRQ as shared (IRQF_SHARED). Consumers must treat them\n+\t * as equivalent \"kick\" doorbells.\n+\t */\n+\tfor (i = 0; i < num_db; i++) {\n+\t\tmsg[i].msg.address_lo = (u32)addr;\n+\t\tmsg[i].msg.address_hi = (u32)(addr >> 32);\n+\t\tmsg[i].msg.data = 0;\n+\t\tmsg[i].virq = doorbell->u.db_mmio.irq;\n+\t\tmsg[i].irq_flags = IRQF_SHARED;\n+\t\tmsg[i].type = PCI_EPF_DOORBELL_EMBEDDED;\n+\t\tmsg[i].bar = doorbell->bar;\n+\t\tmsg[i].offset = (doorbell->bar == NO_BAR) ? 0 : doorbell->bar_offset;\n+\t}\n+\n+\tepf->num_db = num_db;\n+\tepf->db_msg = msg;\n+\treturn 0;\n+}\n+\n static int pci_epf_alloc_doorbell_msi(struct pci_epf *epf, u16 num_db)\n {\n \tstruct pci_epf_doorbell_msg *msg;\n@@ -110,6 +187,19 @@ int pci_epf_alloc_doorbell(struct pci_epf *epf, u16 num_db)\n \tif (!ret)\n \t\treturn 0;\n \n+\t/*\n+\t * Fall back to embedded doorbell only when platform MSI is unavailable\n+\t * for this EPC.\n+\t */\n+\tif (ret != -ENODEV)\n+\t\treturn ret;\n+\n+\tret = pci_epf_alloc_doorbell_embedded(epf, num_db);\n+\tif (!ret) {\n+\t\tdev_info(dev, \"Using embedded (DMA) doorbell fallback\\n\");\n+\t\treturn 0;\n+\t}\n+\n \tdev_err(dev, \"Failed to allocate doorbell: %d\\n\", ret);\n \treturn ret;\n }\n", "prefixes": [ "v7", "9/9" ] }