get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

GET /api/patches/2197148/?format=api
HTTP 200 OK
Allow: GET, PUT, PATCH, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 2197148,
    "url": "http://patchwork.ozlabs.org/api/patches/2197148/?format=api",
    "web_url": "http://patchwork.ozlabs.org/project/linux-pci/patch/20260217080601.3808847-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": "<20260217080601.3808847-10-den@valinux.co.jp>",
    "list_archive_url": null,
    "date": "2026-02-17T08:06:01",
    "name": "[v8,9/9] PCI: endpoint: pci-ep-msi: Add embedded eDMA doorbell fallback",
    "commit_ref": null,
    "pull_url": null,
    "state": "new",
    "archived": false,
    "hash": "55357f1fd7cc1a6d2d467aed2d6a22da302092d0",
    "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/20260217080601.3808847-10-den@valinux.co.jp/mbox/",
    "series": [
        {
            "id": 492390,
            "url": "http://patchwork.ozlabs.org/api/series/492390/?format=api",
            "web_url": "http://patchwork.ozlabs.org/project/linux-pci/list/?series=492390",
            "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/"
        }
    ],
    "comments": "http://patchwork.ozlabs.org/api/patches/2197148/comments/",
    "check": "pending",
    "checks": "http://patchwork.ozlabs.org/api/patches/2197148/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "\n <linux-pci+bounces-47434-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=ufXPRn6i;\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-47434-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=\"ufXPRn6i\"",
            "smtp.subspace.kernel.org;\n arc=fail smtp.client-ip=52.101.229.81",
            "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 4fFXMR4XM6z1xpl\n\tfor <incoming@patchwork.ozlabs.org>; Tue, 17 Feb 2026 19:08:19 +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 3A89C3047BD4\n\tfor <incoming@patchwork.ozlabs.org>; Tue, 17 Feb 2026 08:06:51 +0000 (UTC)",
            "from localhost.localdomain (localhost.localdomain [127.0.0.1])\n\tby smtp.subspace.kernel.org (Postfix) with ESMTP id 35BF02E040E;\n\tTue, 17 Feb 2026 08:06:23 +0000 (UTC)",
            "from TY3P286CU002.outbound.protection.outlook.com\n (mail-japaneastazon11020081.outbound.protection.outlook.com [52.101.229.81])\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 975C72EBDD3;\n\tTue, 17 Feb 2026 08:06:21 +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:15 +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:15 +0000"
        ],
        "ARC-Seal": [
            "i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;\n\tt=1771315583; cv=fail;\n b=mofS6dcBRFx2suqxMKa7WkjpEm9BDmWH/qUEWkN10kVBx5WWtrVaC67yXMfttWqLjDBUPr9vndc5QmJbnXW3C581tasyzN50LTO1V5eL2eoi0IO6lElNTcstVZhncK9vL1n+imXlOvGJ0ovajOtxeJjH2tzJue4DE48jYpYfAJw=",
            "i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;\n b=yAChYzMrdoR00U3KrodVvJA11xilq2W2ckLTUPQLxKxvKS9WxWEzbKc1q5PDtYHUggDXDCeyfcjaywAoFmGBqNCaxi2Y8CY6Wss7tLIHwn/5fXQmdL2YgRWT1CNkhhZZoxO4GloeCGiCBjPhzq59gW7h7oWXceWJ38oxDblCqSEhVmDnDgxBmqcKmyoRIlEYYs+rGfbWtVFmjKWrqHTDdZCY98ZpaNeyqAYDWAzurTBJuq0QJmerbgdYv/SHYN7aRV+b3BbQa6p20KT7qnCO7xyWP2Xk4zTbEhr9sWkNHYDuHBQCanpSkzdeVZkN+PExdzXHGZHH1MHCL6py50G7YQ=="
        ],
        "ARC-Message-Signature": [
            "i=2; a=rsa-sha256; d=subspace.kernel.org;\n\ts=arc-20240116; t=1771315583; c=relaxed/simple;\n\tbh=lb9k9Kras3OEKJiuzh5fCP1G8ZJS4Mpk8i45PyaUz4c=;\n\th=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References:\n\t Content-Type:MIME-Version;\n b=jRN4cSRn7ugRzzT2lSZe9A1SRynuOA7hN/r9COr8eZZ6U0zJ0xcZVRukl5XbXAwpcNxbCRItklJMnhATmMaAqdBPORpR/l/Xcp6d3+RLIzofMzK6y5kXvYhr7VzcFK2YeT8ra4C0Xiej3tvN8jP5MbgrMeJk7g/rxPfYHasJb6E=",
            "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=grlMiPTDP7Nc9QwHhLGOZLZFADyNdipGVN7Bdny519A=;\n b=PseIdxXg9vZHuy9slCxyLw07g8Fl7WUEnNCqg1FPtXSYjfAABdmQtLBfUEeu2GQ7BEOY/BAOXpZylNfJH2rNGGIG3dz7CATqtslRXMhSWTmgAEiDE3Yt4bErZHE7KSLJ/R+ia8x3JFVGegZWq70dhfQF2gDz9EM/mYbEebyebp+5iKrA5OZXf9g+9aN2ECtKPJ6qRpHYcIqyN4VbfrrkAuPvUF/xlN6VXSqXawP9e6FeHRGPU/NlhQmhTAjrCNrRI5r+2DQ2XCw/FWOQcP3I6fs0SNZM6vtgnSGEFSZo+bpIWyjYdPbgyCvZYh0P5aUVF1ijd8V1osC8WQK+SOU4ow=="
        ],
        "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=ufXPRn6i; arc=fail smtp.client-ip=52.101.229.81",
            "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=grlMiPTDP7Nc9QwHhLGOZLZFADyNdipGVN7Bdny519A=;\n b=ufXPRn6iSMIfDk9NON+7LH+MhJzAnlcZBZdvWvGSM7ODYlYjc9qF/yMzaw8I7rPSckoWR9Y9ZDlHcdLKkX09boVDpLv0o7YI39uBMXihPGWsISa9X4u48VRejbUkcf3nXFIVEez9ubmXoWgAkRB0P978uxiWhhNpDs58RbtFD98=",
        "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 9/9] PCI: endpoint: pci-ep-msi: Add embedded eDMA doorbell\n fallback",
        "Date": "Tue, 17 Feb 2026 17:06:01 +0900",
        "Message-ID": "<20260217080601.3808847-10-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": "TYCP286CA0281.JPNP286.PROD.OUTLOOK.COM\n (2603:1096:400:3c9::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": "7c509650-cc41-44a2-f211-08de6dfb6c0c",
        "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 vHcyCrnOBzrlfgMNsEo2by0LBQNZ8Ym8HmYUUjcbSF3Uvn0KmHYf/7qe3cnIAifoLcz9f76/iA2P52qoDVTG+CQ35CZHiCKw0wR3itzGFevptc5xxMPDCNqdHSkdFX905zvmR8xOLwV0WTz7VcknwW+5oJ53C8clxzj++C9yV6EQD51MOlhj+pMmtbnKgjG1stswuUAik0nqcYUkgn4L+8hrDRr9uih6mShLMQlwKoRgoDTp5+z6MfFiWWJgs/8jMLN751Mz9zeHFtKqBf03JqMND7pf48N4zWRTTyk7sVNFNIFt0qhZY+zoAIVlAj6VinI90Zbm/USattuAYYAiWlsmJYwxFo2EkH46eEDO9WUsZNtSpiKS2WpR6Y0lFJe+j1vcE+k2/k3dpJGenliO90+CYzi3px6QdMR3hzUmd7cp8ts8VILfLrCLyb9Kj4hPxocI6zIJnCWnWwAHRnX5GlxTW3mNL+mv7vdlGLDwndgUT0UYI4S2s6hSm5pRCvB0pENkRDDpvgAYH24xHJLZNvI7chU3CuvVdv22zpUP51WxHij8jzHUp0X0RsWgMS0DyWTwTI8EslkWoyMD74kwsJEm1XZjxhO5FCRpqUch7XVxGI+8bEG+G5YP25Q+XlqXZSWt0y8G2JMs/lVyDnybygkZ9j7qfpdOZdQnjU+LBEI7+h2g+gOU2COwDM3GuN82CnDDD0H+Dcnb5U2n1hLNaFVxhzfSd81N4YNlOnI2Bfd12290SOO860LYuYkNxCP2T0DW4o46wU6p6ycOQRGNYZTGi1hlFS1HG9GxiFVadAz322/H+4Qz+rP7QYIPgQprAXwZU7ffdWYj8V2ES5+WwKZ9Ly5LUH27mTTBgJjWaOTyZZ+FGiN5JxVX8ihxdzNV6WKbnm8UXerLEJddU387WnEJbgEgxWuB/HS4+gZEXAOIwbLNtRA62rxPdMg0K+bEpvcbeXrF+mhrJOhF0Lrx37o0QwgPg9OgJPMkZzAs17pJGY8eAXAVQ7/nlRYYioADMVtxMTi9+8qbWhdKitVRZb+znG5bZTnIFZnj67GKTVFDVtLG9xKbGVex9p05mya75J3EZ+r0Ipf3nIUPY7t1oV+igMos5ukTA2UJmIxsNj3+Y5W8Y+9syUPgVUtgL9zNN0r1mTZkMcxXplKrLDFlLWPyQGTjI1nXk3OTBFa0P4aUybTVAeImH0+X3eLwhJdYM7Z+88uTO+68RFEhnkuNQDVNXxYHVpb2xyIjQ4+R7jizHiPpEW3sT8P82i331ROTeUVx/O78FzcW1A9b9IIaxFQMncbfLqrxtDiyX+e3RUcbpT05sdIT7hZk8+CF6enbu+D38U1sBG4cyf+zj5GOzp9FGfzwWusTJLYz1+X5t2njqIGT7NRrW8yEGFdIWD8ygUi83ClFO+End/t2YC3AMn22KUH+q5ys4wdbF4cEtie0LuPvV+ONrpQmV63zjFVt4wPWHy/9kt3m6wylwO4digPytI4I5f898HMRs3XrVj1+4thob8TRe46yQMR3KKGvOWMKfqSZypQWi1vqVOhoptWoyfmci04ofZZ6dgvoQIhW/Uj3S8kCyp+7YwTb7axfJBlZmEA7Ijle3eR9N29ztA==",
        "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 XUxlVelVumOfIkFMSPfupBFniNjszlJHtE1mJx704lQUSueTXOVG/RsIC+Uh7k3x/NQt0pgHoRXuo7asRFv7wJU/R/XNeOP6qIq8jySwHurGEKY/N1iRjropgN4W2/9GTuZWGQUR79VNJYTBJdcqiLgOe5Q0zQrUEAZ0J0/ER0TkRPib+0hSm99I2B/GgfNZc3TMCUjGZZKkeApTf/FfSJODnRgLdVXOLDbKvDBDI+V8uFPNiV1HIGojN/1KzkELWrfqy+ZbTVLuOr1ldfsTNf4mSTKxBerlRup5AtqD7DKI5IbRIKwmdJbeuo8EkajZ7JLw5xXQ/QOG+XmEQ4ecgb+xHANJuVeoKWuhRocwjTiygWl2KoVh4o52MCbIPD6icAsPE5NuO4Z2fEWupYAlPQBtdu4/7itdOMgnJJQH5HsHb6X8/O0mfi4bpGWDzhAN/M1hkTqVwRXAigZwCnFdU4tk/LrKzywL8y6COYhrrXOUqSX7un2wcf509eCKU58xELsnLNqnCRp4F+DOJ+1WcE45LmrnBTWdmukMdlNPzx5hW/g7BqV4RJTXEkdNCvJ6v1iaZnq9w/M0WckBPQLd9S8qXAlt8bXL0VcVJef45NRp9rd1l1OH5Q1JBxL/mhUxNsng+Sc1F8R4Wq62cvUShU7VTL3ux7ku4zfyzlqt4QaQg5im4jwsc1qfKGcSV7lzeRFM0wRGLeLAigouFO22uXYRpxwMvuLOyEfWEBPXhiRMPok7ddegyI59c9EhTuldOCbLTb7lEA9UEiZzlfbmZxS7/2n2bEEnmIr1EH8W9YazC5HW70TZbzYGf24vti/s69PDHHIl8Y5aPs60F0Awxfty3Lfl5rYJjcPsZPqlfJO5TRc3Ak38qkK9Me+ZGhMcgy5juCRQHRWoo+toGRhUxpQRUnigW67UkTCQtI2fA74uBw76FMnmsKSXyO+OqCLejQlVwPhBpTmR3elXWPw3PdjI40YfN058+kvU0KM8P64roXAX/Eve5TGK+1Nuem/fbIFIKMOjw3v1OwV2FSqEpfQsrUz8KPjbm15NEleSaI7Ku6itGMrBKpZrQ0vyWDjZDuGfU/xSXvKHrjQRb0jW+i9AI7QLh+0Fxi0/m/x8NLwwexsRRca+wPBZDeSSRV8fttBygdJVuItdMRT99kgYwUMYLG0bpVCXfF64aEsk6Rsl6h9BykPqw6JxV91pX9JldUYIQeRa4e4WM/iCqPsA3LzT04x4un5l2jt4gYmEch++L90rVr/qZV7l0NZSqRH95qEwpYIyfVOJhVegmhS5gTH2OROnT09SrIc5GxTBteiRbAJYQ0mS9ESmh3NDB2g5KIiNF5b24Pt3Zcny3RB8JdnXuSDrG5J4tiFMaXAR3A8gp4ec6+9nLj3TOM0UIesDMvwIK25ljQbyUw8MDPGByaOrKu565JbTqbq+9wucfwu4U3iFQsi0IGyuzt9JMzZxnx2o8n4t/hUOQD9Uec8rOtmURkTybE7WQD19vrN4+XdUkMwAIYvjPlFOh3a6KUq2/HkiKwLc+EQSLER6AGpkzE20p2zgyVcO2FYoCdo6x0hJ9C9mQEYKxIUZZhvcHKCTwglF3bbAHzrdmQ33NBUBo2X3QR0wWnlHizUP3lMt1r37F92c2xWd7nXG/SESVDClA83MPsL/NlfRlBhWPHnS5MfUDmrIT6TuJrgKP/xU28O/PzObdgv4El9EDjfq4CEs5JbwKnobcl2r5ztgfWKkGRmy04h7w8y7N/CplbMiW55iKgIh/pTWTcVQzWZsYMgg",
        "X-OriginatorOrg": "valinux.co.jp",
        "X-MS-Exchange-CrossTenant-Network-Message-Id": "\n 7c509650-cc41-44a2-f211-08de6dfb6c0c",
        "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:15.0993\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 LG3SrRWUpQvyLZDfhnNiIVsuIsOsqabzbUiayWJBkOgvlYT7AAMPPOqjTweqIXIsRcHPMQSmrLSkrmLieeT65Q==",
        "X-MS-Exchange-Transport-CrossTenantHeadersStamped": "OS7P286MB7132"
    },
    "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---\nChanges since v7:\n  - Use designated initializer for consistent styling.\n  - Clean up the pci_epf_alloc_doorbell() error path.\n\n drivers/pci/endpoint/pci-ep-msi.c | 96 ++++++++++++++++++++++++++++++-\n 1 file changed, 94 insertions(+), 2 deletions(-)",
    "diff": "diff --git a/drivers/pci/endpoint/pci-ep-msi.c b/drivers/pci/endpoint/pci-ep-msi.c\nindex 50badffa9d72..66f5a68c81b0 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,84 @@ 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] = (struct pci_epf_doorbell_msg) {\n+\t\t\t.msg.address_lo = (u32)addr,\n+\t\t\t.msg.address_hi = (u32)(addr >> 32),\n+\t\t\t.msg.data = doorbell->u.db_mmio.data,\n+\t\t\t.virq = doorbell->u.db_mmio.irq,\n+\t\t\t.irq_flags = IRQF_SHARED,\n+\t\t\t.type = PCI_EPF_DOORBELL_EMBEDDED,\n+\t\t\t.bar = doorbell->bar,\n+\t\t\t.offset = (doorbell->bar == NO_BAR) ? 0 :\n+\t\t\t\t  doorbell->bar_offset,\n+\t\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@@ -109,8 +188,21 @@ int pci_epf_alloc_doorbell(struct pci_epf *epf, u16 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+\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_err(dev, \"Failed to allocate doorbell: %d\\n\", ret);\n+\t\treturn ret;\n+\t}\n+\n+\tdev_info(dev, \"Using embedded (DMA) doorbell fallback\\n\");\n+\treturn 0;\n }\n EXPORT_SYMBOL_GPL(pci_epf_alloc_doorbell);\n \n",
    "prefixes": [
        "v8",
        "9/9"
    ]
}