get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 2196320,
    "url": "http://patchwork.ozlabs.org/api/patches/2196320/?format=api",
    "web_url": "http://patchwork.ozlabs.org/project/linux-pci/patch/20260213123603.420941-2-a-garg7@ti.com/",
    "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": "<20260213123603.420941-2-a-garg7@ti.com>",
    "list_archive_url": null,
    "date": "2026-02-13T12:36:00",
    "name": "[RFC,1/4] PCI: Add documentation for DOE endpoint support",
    "commit_ref": null,
    "pull_url": null,
    "state": "new",
    "archived": false,
    "hash": "4e4b350fbd84f94f51a5d984cf6612c7d42ffb20",
    "submitter": {
        "id": 92467,
        "url": "http://patchwork.ozlabs.org/api/people/92467/?format=api",
        "name": "Aksh Garg",
        "email": "a-garg7@ti.com"
    },
    "delegate": null,
    "mbox": "http://patchwork.ozlabs.org/project/linux-pci/patch/20260213123603.420941-2-a-garg7@ti.com/mbox/",
    "series": [
        {
            "id": 492090,
            "url": "http://patchwork.ozlabs.org/api/series/492090/?format=api",
            "web_url": "http://patchwork.ozlabs.org/project/linux-pci/list/?series=492090",
            "date": "2026-02-13T12:35:59",
            "name": "PCI: Add DOE support for endpoint",
            "version": 1,
            "mbox": "http://patchwork.ozlabs.org/series/492090/mbox/"
        }
    ],
    "comments": "http://patchwork.ozlabs.org/api/patches/2196320/comments/",
    "check": "pending",
    "checks": "http://patchwork.ozlabs.org/api/patches/2196320/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "\n <linux-pci+bounces-47267-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=ti.com header.i=@ti.com header.a=rsa-sha256\n header.s=selector1 header.b=Tcw8eTgf;\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-47267-incoming=patchwork.ozlabs.org@vger.kernel.org;\n receiver=patchwork.ozlabs.org)",
            "smtp.subspace.kernel.org;\n\tdkim=pass (1024-bit key) header.d=ti.com header.i=@ti.com header.b=\"Tcw8eTgf\"",
            "smtp.subspace.kernel.org;\n arc=fail smtp.client-ip=40.93.195.2",
            "smtp.subspace.kernel.org;\n dmarc=pass (p=quarantine dis=none) header.from=ti.com",
            "smtp.subspace.kernel.org;\n spf=pass smtp.mailfrom=ti.com"
        ],
        "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 server-signature ECDSA (secp384r1) server-digest SHA384)\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4fCBVv2QKKz1xpl\n\tfor <incoming@patchwork.ozlabs.org>; Fri, 13 Feb 2026 23:36:39 +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 904A1305091E\n\tfor <incoming@patchwork.ozlabs.org>; Fri, 13 Feb 2026 12:36:23 +0000 (UTC)",
            "from localhost.localdomain (localhost.localdomain [127.0.0.1])\n\tby smtp.subspace.kernel.org (Postfix) with ESMTP id A8B2616CD33;\n\tFri, 13 Feb 2026 12:36:21 +0000 (UTC)",
            "from SN4PR2101CU001.outbound.protection.outlook.com\n (mail-southcentralusazon11012002.outbound.protection.outlook.com\n [40.93.195.2])\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 B091B34F24B;\n\tFri, 13 Feb 2026 12:36:19 +0000 (UTC)",
            "from SJ0PR03CA0353.namprd03.prod.outlook.com (2603:10b6:a03:39c::28)\n by MW6PR10MB7552.namprd10.prod.outlook.com (2603:10b6:303:23f::17) with\n Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9611.11; Fri, 13 Feb\n 2026 12:36:17 +0000",
            "from SJ1PEPF00001CE4.namprd03.prod.outlook.com\n (2603:10b6:a03:39c:cafe::bc) by SJ0PR03CA0353.outlook.office365.com\n (2603:10b6:a03:39c::28) with Microsoft SMTP Server (version=TLS1_3,\n cipher=TLS_AES_256_GCM_SHA384) id 15.20.9611.10 via Frontend Transport; Fri,\n 13 Feb 2026 12:36:15 +0000",
            "from lewvzet201.ext.ti.com (198.47.23.195) by\n SJ1PEPF00001CE4.mail.protection.outlook.com (10.167.242.20) with Microsoft\n SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id\n 15.20.9611.8 via Frontend Transport; Fri, 13 Feb 2026 12:36:16 +0000",
            "from DLEE207.ent.ti.com (157.170.170.95) by lewvzet201.ext.ti.com\n (10.4.14.104) with Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Fri, 13 Feb\n 2026 06:36:13 -0600",
            "from DLEE207.ent.ti.com (157.170.170.95) by DLEE207.ent.ti.com\n (157.170.170.95) with Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Fri, 13 Feb\n 2026 06:36:13 -0600",
            "from lelvem-mr06.itg.ti.com (10.180.75.8) by DLEE207.ent.ti.com\n (157.170.170.95) with Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20 via Frontend\n Transport; Fri, 13 Feb 2026 06:36:13 -0600",
            "from a0507033-hp.dhcp.ti.com (a0507033-hp.dhcp.ti.com\n [172.24.231.225])\n\tby lelvem-mr06.itg.ti.com (8.18.1/8.18.1) with ESMTP id 61DCa6A7751418;\n\tFri, 13 Feb 2026 06:36:10 -0600"
        ],
        "ARC-Seal": [
            "i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;\n\tt=1770986181; cv=fail;\n b=scCPJAduAKA+8g+wVwKC3EqIV+WNusJXl2Cq+d2W2NB5mSpBMlcWp8x3f2HY15QuzRG1itD0+X/YgYeGjAcnuD0/E9dqpmtHFK2EqkNY9EN+iIOQgGyBTi5IIlJ17z36Tait92a+gKTqLwM4DCIjfcuU8A2UFaLF6VahHbya1A0=",
            "i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;\n b=iJxRH6FUOGCCq95atdexYByHm1lkCFKhrmxrd9eGAofCCPSjA6vjczcSX/aykr+BBIblTHIe1sqFpZk7FPH2PeeKqEcE+XWQsGfTwDmdFOP5h6D2zduM0NhyhsiPtlvB54deqbq78bk2AwFejnMhQx91g2awFv5jis8ouXWTfw9UJSyvh1XoPDnR9oI7VDz0DK2qZyMZpJoIscPcuENsaIonvyHo8XgOQF0Gs4Jnl20HXc1SPtwXOIo75wfRp6SZWsDvHsGe5PDHDCJtxcbYpzPkpIEutC9MAPPWl5CRCY9yol4gFdBh/GUd+PFRYH9gDMovmYGqnzn40uy57fMU2Q=="
        ],
        "ARC-Message-Signature": [
            "i=2; a=rsa-sha256; d=subspace.kernel.org;\n\ts=arc-20240116; t=1770986181; c=relaxed/simple;\n\tbh=o0iC0pJvpAiSTRylvyrhfbriG2+6AU0s674kBAZVmBI=;\n\th=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References:\n\t MIME-Version:Content-Type;\n b=k3rlNnTsnoK2fnIrHk88xQSsd1lLkpqm9yS9qUssy98qgKpOqoOWHKPJITnUVd6CdTdh0D/guoxISrvTc6Wq/D6U179OazGyNtAVO0an82pqmQh2FWgZg5vEoljfIfCA1/ziqKCVrEKE+awmdN3weYoCn0dzLes1s1UBZoPTofA=",
            "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=vAIWeEu4XKXu7vc7Bv72vrZucxeR6akG2FvL+NgGV9Y=;\n b=OHh+2cfVlinOkjDK9Uccg6mDdwdmxlnvPPr1SAiXwMhqWTAzlydScK0fmdjawXBReBcNqbue+7MJJan12NOkhKz5+9p35MiV93rSs+H5t4aUAKCeOOfcMrcp3USy5p35vmjJ59+cj5aVc9sRYawPFLibMyO/dlpUsS6YjghiR9B3dSGn1qQ/NmuFPYSIvdUjicUZVbY78HBQTtghCXjvZRqMhtYO8mdZ90R2P/Q8xzF83uFneqivzs84Opl4m3oJnYs/9tyLXjPcIfeXBbycHn0zFcFuu94Lpziqv/F21aNtgckB2ssc88niqR/ag8qXyspHqeVLlOELTv+hR0HXvg=="
        ],
        "ARC-Authentication-Results": [
            "i=2; smtp.subspace.kernel.org;\n dmarc=pass (p=quarantine dis=none) header.from=ti.com;\n spf=pass smtp.mailfrom=ti.com;\n dkim=pass (1024-bit key) header.d=ti.com header.i=@ti.com header.b=Tcw8eTgf;\n arc=fail smtp.client-ip=40.93.195.2",
            "i=1; mx.microsoft.com 1; spf=pass (sender ip is\n 198.47.23.195) smtp.rcpttodomain=lists.infradead.org smtp.mailfrom=ti.com;\n dmarc=pass (p=quarantine sp=none pct=100) action=none header.from=ti.com;\n dkim=none (message not signed); arc=none (0)"
        ],
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=ti.com; s=selector1;\n h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;\n bh=vAIWeEu4XKXu7vc7Bv72vrZucxeR6akG2FvL+NgGV9Y=;\n b=Tcw8eTgftaQaNAZvGZuqzUvObITNtvHyX6wBxzAcsiDfgSegTZuBgexwO+yBt7xHthquLtsH8GPLDogEtrOIEim0X8tHDxL7Db9pdqskYuUClKCZZ4OHfywYOUmqOb2f2YTkftvPH4dQQEO3i3yrs9CwOjUYAKl/B3EriZxwbYQ=",
        "X-MS-Exchange-Authentication-Results": "spf=pass (sender IP is 198.47.23.195)\n smtp.mailfrom=ti.com; dkim=none (message not signed) header.d=none;dmarc=pass\n action=none header.from=ti.com;",
        "Received-SPF": "Pass (protection.outlook.com: domain of ti.com designates\n 198.47.23.195 as permitted sender) receiver=protection.outlook.com;\n client-ip=198.47.23.195; helo=lewvzet201.ext.ti.com; pr=C",
        "From": "Aksh Garg <a-garg7@ti.com>",
        "To": "<linux-pci@vger.kernel.org>, <linux-doc@vger.kernel.org>,\n\t<bhelgaas@google.com>, <corbet@lwn.net>, <cassel@kernel.org>",
        "CC": "<linux-kernel@vger.kernel.org>, <linux-arm-kernel@lists.infradead.org>,\n\t<s-vadapalli@ti.com>, <danishanwar@ti.com>, <srk@ti.com>, <a-garg7@ti.com>",
        "Subject": "[RFC PATCH 1/4] PCI: Add documentation for DOE endpoint support",
        "Date": "Fri, 13 Feb 2026 18:06:00 +0530",
        "Message-ID": "<20260213123603.420941-2-a-garg7@ti.com>",
        "X-Mailer": "git-send-email 2.34.1",
        "In-Reply-To": "<20260213123603.420941-1-a-garg7@ti.com>",
        "References": "<20260213123603.420941-1-a-garg7@ti.com>",
        "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",
        "Content-Type": "text/plain; charset=\"UTF-8\"",
        "Content-Transfer-Encoding": "8bit",
        "X-C2ProcessedOrg": "333ef613-75bf-4e12-a4b1-8e3623f5dcea",
        "X-EOPAttributedMessage": "0",
        "X-MS-PublicTrafficType": "Email",
        "X-MS-TrafficTypeDiagnostic": "SJ1PEPF00001CE4:EE_|MW6PR10MB7552:EE_",
        "X-MS-Office365-Filtering-Correlation-Id": "87948c03-6c1d-4618-ef3a-08de6afc7b44",
        "X-MS-Exchange-SenderADCheck": "1",
        "X-MS-Exchange-AntiSpam-Relay": "0",
        "X-Microsoft-Antispam": "\n\tBCL:0;ARA:13230040|1800799024|82310400026|36860700013|376014;",
        "X-Microsoft-Antispam-Message-Info": "=?utf-8?q?A5/O10wjNvqTBYx88Ed9gUOtNah4gOx?=\n\t=?utf-8?q?QXQPRgznJLK0GhIlMbGVKkUQXy+oKuyP9RPpSriqs+LtotBb/UGO/QhRVPahbJHkh?=\n\t=?utf-8?q?6ggEGig7mcNSFhOeTXaw1hIf2tJcolvG9pzvYCHkrZ86/JJyn5jr1yN0zDcnfvuva?=\n\t=?utf-8?q?W/Emk1H3OMMGt9U/gIcOnRaq8O8AgAwtIMVjVT4Ku6JsME6870fInPODU5URBvIOJ?=\n\t=?utf-8?q?bnu5Mho9F4kFWrwTrKIrnDvjIrxh0cUsQ6V52X7tpySHJfm+jY5RWVOEO6Ng4aPh7?=\n\t=?utf-8?q?6bpiXAD0UoTub8Xpdj5OYgJ4YAVfrwBJHtJGJYB4VyCGbvi8SStfIqbmiZpIWsi8+?=\n\t=?utf-8?q?mTjnFgtoHBSiN6FZbqA66B0Hdiuk1G+VFtadeEyeQb7VnJ+D6Iipjmi9V3Dx//yau?=\n\t=?utf-8?q?txNtaBjKXgsrMlFVSm3snse3/q8dKsqXWSNOWm3HGZHf9C9884gkuSrAxWuH7DbRz?=\n\t=?utf-8?q?+NySjtf3WZI5rjO3O3SZMf5UxuZ4XuDrpfNQYMrcq4h5NN8pgyUbh7kqFMfe1K5HT?=\n\t=?utf-8?q?KSPFLyBbeJBi4NsFQHAceasZFc7vstKE3Y8Z+XoBP0LhRumkd+cenxyBVcMS+TynZ?=\n\t=?utf-8?q?ra8L72mhZ7n8psbI8U/yiEJdUnGoSqPefQ5oatXRDhYol5FMQIFJWFAaa0KIHarQA?=\n\t=?utf-8?q?ed2jbq5VyxSVx6/DJ+K8evem0BjWtAtGsDhWU9MY/dqVsodBkK0VB+bohkjJbktIB?=\n\t=?utf-8?q?DFwdxLwDjOELni0QPFC9SpX/LHB6igGHQK8mKihH9WdhlxBhfCBkeE8p0fDWnLJfu?=\n\t=?utf-8?q?A1W+WRpbfDeOKOew0n6egr20cQr6YoYxxiLL56u55vDExt9tgoP1KR2Hy/GhVlc72?=\n\t=?utf-8?q?IfUIRYRDU4AbhMHzO/HcSiYhhXMA9Wa2Zz1IIg8nVg1706Rd625qHad+qdOkia1OC?=\n\t=?utf-8?q?eBjV+Jo2OsNTLGeba5NxAxwl4zmToq/zAp9AAYKgqx+b+44SGvfMkMs2r9H4MY8KZ?=\n\t=?utf-8?q?5No8RtRZKZAJTRx7cSIpxwW0MqFELn92sZ5A1wxfjV0dzJYMOzNLGQBOjLN3c+voG?=\n\t=?utf-8?q?pgdP7uoAMcmnjcN4yYUTbAT4D/EuQDzp48bGp8dHCAt5yIMZF2tL4caB7EQhGFxlT?=\n\t=?utf-8?q?Xkf2+kBqpyMb3cwgEtBfaEHZLv9uqVlkIf9uPDIOF25M1/Xzx/qpDCP/7aGJSM1mk?=\n\t=?utf-8?q?uR835ptqK0K8PCLfR9YPDuBfRM5ihC38bJh6OmFqQ6qdRD9OpzFna6ytXbkwwT8Jo?=\n\t=?utf-8?q?reEM9dagDXvg6PrVhn+Cr0Q5eXvtMK4NeZ6ua5zoA9rJKQrrmudAQK392Yb7+nTRj?=\n\t=?utf-8?q?e1i9U53pQYzi6aTRWXEO6bKlrYcHgR5zf+t3WlelgZY6KRw4p7QDrmPcvStpgWshn?=\n\t=?utf-8?q?qk2p3Tkd0jYKQJ57mbqxCfBZgIEk80tActBhYHZGcXRRPlQ0RbOMobZZ7yXuJEa6V?=\n\t=?utf-8?q?P4FrLFBHzbPlAlgSx4E7vWroE/pqR3/dLEkz2XZtip59aOGH5AyPv+AwKWleFLBb0?=\n\t=?utf-8?q?Yc+nOp/gZqjkOTM8W0qNqrnPr4XBDF0eG029m740UnaQpVwwQsU6ZOvi2CPXTR0RR?=\n\t=?utf-8?q?h/zG8tfd5+EjMtaFfIpmdKVy3Fu6bHt6IVobWrt4bzv0xTU1moxk03G8Zbf/fEuVr?=\n\t=?utf-8?q?zGAqC/tqhdd0PXLjCoWQko3V6lmF6Q=3D=3D?=",
        "X-Forefront-Antispam-Report": "\n\tCIP:198.47.23.195;CTRY:US;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:lewvzet201.ext.ti.com;PTR:InfoDomainNonexistent;CAT:NONE;SFS:(13230040)(1800799024)(82310400026)(36860700013)(376014);DIR:OUT;SFP:1101;",
        "X-MS-Exchange-AntiSpam-MessageData-ChunkCount": "1",
        "X-MS-Exchange-AntiSpam-MessageData-0": "\n\tFXVlMDW8PuDVvbn6FKzPRFVV0+dgBmFH98Iun3fpmGzqmvtGbVj37uG+4gDZ1y+v3p0n+A/Un8MHzsqDMko2fuCzOIIdGarQjaEMNiSHKDIUm8ZD6TMGT+fZwnBnYZc+y+i+kjy49SRW2uj8k7jUh0mtrXtvgfGWVF9/UmWoTcu0atTOGupvT7jcv6NFV6JPzPA+J+XhvSz/LBsu2ur85W5ZSaXV3hi635oWuiFN+9xuJnc+VOlj2IlEARV7OwIWTeEme3u5CB1gMJpjX9T5MpwQ+KTyuR4wMRZvG4ILogZhWn1WrjpBQo2AGI2JKSYo2tV4hW1gc6kt3S/1eyGusg2NIxJzhOUmdAWOI2veOTd2xw+AJG99zAVNQEXenuJQQ2/LBkwDw7cyY0MhLekOi3ptPlf6zWpkazb2Fvz7q6676bP+uwuJrn3NumXvFXg9",
        "X-OriginatorOrg": "ti.com",
        "X-MS-Exchange-CrossTenant-OriginalArrivalTime": "13 Feb 2026 12:36:16.4225\n (UTC)",
        "X-MS-Exchange-CrossTenant-Network-Message-Id": "\n 87948c03-6c1d-4618-ef3a-08de6afc7b44",
        "X-MS-Exchange-CrossTenant-Id": "e5b49634-450b-4709-8abb-1e2b19b982b7",
        "X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp": "\n TenantId=e5b49634-450b-4709-8abb-1e2b19b982b7;Ip=[198.47.23.195];Helo=[lewvzet201.ext.ti.com]",
        "X-MS-Exchange-CrossTenant-AuthSource": "\n\tSJ1PEPF00001CE4.namprd03.prod.outlook.com",
        "X-MS-Exchange-CrossTenant-AuthAs": "Anonymous",
        "X-MS-Exchange-CrossTenant-FromEntityHeader": "HybridOnPrem",
        "X-MS-Exchange-Transport-CrossTenantHeadersStamped": "MW6PR10MB7552"
    },
    "content": "From: Aksh Garg <a-garg7@ti.com>\n\nDocument the architecture and implementation details for the Data Object\nExchange (DOE) framework for PCIe Endpoint devices.\n\nCo-developed-by: Siddharth Vadapalli <s-vadapalli@ti.com>\nSigned-off-by: Siddharth Vadapalli <s-vadapalli@ti.com>\nSigned-off-by: Aksh Garg <a-garg7@ti.com>\n---\n Documentation/PCI/index.rst      |   1 +\n Documentation/PCI/pci-doe-ep.rst | 291 +++++++++++++++++++++++++++++++\n 2 files changed, 292 insertions(+)\n create mode 100644 Documentation/PCI/pci-doe-ep.rst",
    "diff": "diff --git a/Documentation/PCI/index.rst b/Documentation/PCI/index.rst\nindex 5d720d2a415e..4c9a4e749442 100644\n--- a/Documentation/PCI/index.rst\n+++ b/Documentation/PCI/index.rst\n@@ -20,3 +20,4 @@ PCI Bus Subsystem\n    controller/index\n    boot-interrupts\n    tph\n+   pci-doe-ep\ndiff --git a/Documentation/PCI/pci-doe-ep.rst b/Documentation/PCI/pci-doe-ep.rst\nnew file mode 100644\nindex 000000000000..d6715944c117\n--- /dev/null\n+++ b/Documentation/PCI/pci-doe-ep.rst\n@@ -0,0 +1,291 @@\n+.. SPDX-License-Identifier: GPL-2.0-only or MIT\n+\n+.. include:: <isonum.txt>\n+\n+=============================================\n+Data Object Exchange (DOE) for PCIe Endpoint\n+=============================================\n+\n+:Copyright: |copy| 2026 Texas Instruments Incorporated\n+:Author: Aksh Garg <a-garg7@ti.com>\n+:Co-Author: Siddharth Vadapalli <s-vadapalli@ti.com>\n+\n+Overview\n+========\n+\n+DOE (Data Object Exchange) is a standard PCIe extended capability feature as\n+introduced in the Data Object Exchange (DOE) ECN for PCIe r5.0. It is an optional\n+mechanism for system firmware/software running on root complex (host) to perform\n+:ref:`data object <data-object-term>` exchanges with an endpoint function. Each\n+data object is uniquely identified by the Vendor ID of the vendor publishing the\n+data object definition and a Data Object Type value assigned by that vendor.\n+\n+Think of DOE as a sophisticated mailbox system built into PCIe. The root complex\n+can send structured requests to the endpoint device through DOE mailboxes, and\n+the endpoint device responds with appropriate data. DOE mailboxes are implemented\n+as PCIe Extended Capabilities in endpoint devices, allowing multiple mailboxes\n+per function, each potentially supporting different data object protocols.\n+\n+The DOE support for root complex devices has already been implemented in\n+``drivers/pci/doe.c``.\n+\n+How DOE Works\n+=============\n+\n+The DOE mailbox operates through a simple request-response model:\n+\n+1. **Host sends request**: The root complex writes a data object (vendor ID, type,\n+   and payload) to the DOE write mailbox register (one DWORD at a time) of the\n+   endpoint function's config space and sets the GO bit in the DOE Status register\n+   to indicate that a request is ready for processing.\n+2. **Endpoint processes**: The endpoint function reads the request from DOE write\n+   mailbox register, sets the BUSY bit in the DOE Status register, identifies the\n+   protocol of the data object, and executes the appropriate handler.\n+3. **Endpoint responds**: The endpoint function writes the response data object to the\n+   DOE read mailbox register (one DWORD at a time), and sets the READY bit in the DOE\n+   Status register to indicate that the response is ready. If an error occurs during\n+   request processing (such as unsupported protocol or handler failure), the endpoint\n+   sets the ERROR bit in the DOE Status register instead of the READY bit.\n+4. **Host reads response**: The root complex retrieves the response data from the DOE read\n+   mailbox register once the READY bit is set in the DOE Status register, and then writes\n+   any value to this register to indicate a successful read. If the ERROR bit was set,\n+   the root complex discards the response and performs error handling as needed.\n+\n+Each mailbox operates independently and can handle one transaction at a time. The\n+DOE specification supports data objects of size up to 256KB (2\\ :sup:`18` dwords).\n+\n+For complete DOE capability details, refer to `PCI Express Base Specification Revision 7.0,\n+Section 6.30 - Data Object Exchange (DOE)`.\n+\n+Key Terminologies\n+=================\n+\n+.. _data-object-term:\n+\n+**Data Object**\n+  A structured, vendor-defined, or standard-defined message exchanged between\n+  root complex and endpoint function via DOE capability registers in configuration\n+  space of the function.\n+\n+**Mailbox**\n+  A DOE capability on the endpoint device, where each physical function can have\n+  multiple mailboxes.\n+\n+**Protocol**\n+  A specific type of DOE communication data object identified by a Vendor ID and Type.\n+\n+**Handler**\n+  A function that processes DOE requests of a specific protocol and generates responses.\n+\n+Architecture of DOE Implementation for Endpoint\n+===============================================\n+\n+.. code-block:: text\n+\n+       +------------------+\n+       |                  |\n+       |   Root Complex   |\n+       |                  |\n+       +--------^---------+\n+                |\n+                | Config space access\n+                |   over PCIe link\n+                |\n+     +----------v-----------+\n+     |                      |\n+     |    PCIe Controller   |\n+     |      as Endpoint     |\n+     |                      |\n+     |  +-----------------+ |\n+     |  |   DOE Mailbox   | |\n+     |  +-------^---------+ |\n+     +----------|-----------+\n+    +-----------|---------------------------------------------------------------+\n+    |           |                                       +--------------------+  |\n+    | +---------v--------+           Allocate           |  +--------------+  |  |\n+    | |                  |-------------------------------->|   Request    |  |  |\n+    | |   EP Controller  |-------------------------------->|    Buffer    |  |  |\n+    | |      Driver      |             Free             |  +--------------+  |  |\n+    | |                  |---+                          |                    |  |\n+    | +--------^---------+   |         Free             |                    |  |\n+    |          |             +-----------------------+  |                    |  |\n+    |          |                                     |  |                    |  |\n+    |          | pci_ep_doe_process_request()        |  |                    |  |\n+    |          |                                     |  |                    |  |\n+    | +--------v---------+                           |  |                    |  |\n+    | |                  |<----+                     |  |         DDR        |  |\n+    | |    DOE EP Core   |     |  Discovery          |  |                    |  |\n+    | |    (doe-ep.c)    |     |  Protocol           |  |                    |  |\n+    | |                  |-----+  Handler            |  |                    |  |\n+    | +--------^---------+                           |  |                    |  |\n+    |          |                                     |  |                    |  |\n+    |          | protocol_handler()                  |  |                    |  |\n+    |          |                                     |  |                    |  |\n+    | +--------v---------+                           |  |                    |  |\n+    | |                  |                           |  |  +--------------+  |  |\n+    | | Protocol Handler |                           +---->|   Response   |  |  |\n+    | |      Module      |-------------------------------->|    Buffer    |  |  |\n+    | | (CMA/SPDM/Other) |           Allocate           |  +--------------+  |  |\n+    | |                  |                              |                    |  |\n+    | +------------------+                              |                    |  |\n+    |                                                   +--------------------+  |\n+    +---------------------------------------------------------------------------+\n+\n+Initialization and Cleanup\n+--------------------------\n+\n+**Framework Initialization**\n+\n+The controller driver calls ``pci_ep_doe_init(epc)`` during its probe sequence.\n+This initializes the xarray data structure (a resizable array data structure\n+defined in linux) named ``doe_mbs`` that stores metadata of DOE mailboxes for\n+the controller in ``struct pci_epc``.\n+\n+**Mailbox Registration**\n+\n+For each DOE capability found in the endpoint function's configuration space,\n+the controller driver calls ``pci_ep_doe_add_mailbox(epc, func_no, cap_offset)``.\n+This creates a mailbox structure and allocates an ordered workqueue for processing\n+DOE requests sequentially for that mailbox, enabling concurrent request handling\n+across different mailboxes. Each mailbox is uniquely identified by the combination\n+of physical function number and capability offset for that controller.\n+\n+**Cleanup**\n+\n+During driver removal or controller shutdown, the controller driver calls\n+``pci_ep_doe_destroy(epc)`` to clean up all DOE resources. This function\n+destroys all registered mailboxes, cancels any pending tasks, flushes and\n+destroys the workqueues, and frees all memory allocated to the mailboxes.\n+\n+Register and Unregister Protocol Handler\n+----------------------------------------\n+\n+Protocol implementations (such as CMA, SPDM, or vendor-specific protocols)\n+register their handlers with the DOE EP core during module initialization.\n+\n+**Registration**\n+\n+Protocol modules call ``pci_ep_doe_register_protocol(vendor_id, type, handler)``\n+to register their handler function. The handler is stored in a global xarray\n+and will be invoked when DOE requests matching the vendor ID and type are received.\n+The discovery protocol (VID = 0x0001 (PCI-SIG vendor ID), Type = 0x00 (discovery\n+protocol)) is handled internally by the DOE EP core and cannot be registered by\n+external modules.\n+\n+**Unregistration**\n+\n+During module cleanup, protocol modules call\n+``pci_ep_doe_unregister_protocol(vendor_id, type)`` to remove their handler\n+from the registry.\n+\n+Request Handling\n+----------------\n+\n+The complete flow of a DOE request from the root complex to the response:\n+\n+**Step 1: Root Complex → EP Controller Driver**\n+\n+The root complex writes a DOE request (Vendor ID, Type, and Payload) to the\n+DOE write mailbox register in the endpoint function's configuration space and sets\n+the GO bit in the DOE Control register, indicating that the request is ready for\n+processing.\n+\n+**Step 2: EP Controller Driver → DOE EP Core**\n+\n+The controller driver reads the request header to determine the data object length.\n+Based on this length field, it allocates a request buffer in memory (DDR) of the\n+appropriate size. The driver then reads the complete request payload from the DOE\n+write mailbox register and converts the data from little-endian format (the format\n+followed in the PCIe transactions over the link) to CPU-native format using\n+``le32_to_cpu()``. The driver creates pointers for the response buffer and response\n+size, which will be populated by the protocol handler. Finally, the driver calls\n+``pci_ep_doe_process_request(epc, func_no, cap_offset, vendor, type, request,\n+request_sz, &response, &response_sz)`` to hand off the request to the DOE EP core,\n+and sets the BUSY bit in the DOE Status register.\n+\n+**Step 3: DOE EP Core Processing**\n+\n+The DOE EP core looks up the protocol handler based on the Vendor ID and Type\n+from the request header. It creates a task structure and submits it to the\n+mailbox's ordered workqueue. This ensures that requests for each mailbox are\n+processed sequentially, one at a time, as required by the DOE specification.\n+\n+**Step 4: Protocol Handler Execution**\n+\n+The workqueue executes the task by calling the registered protocol handler:\n+``handler(request, request_sz, &response, &response_sz)``. The handler processes\n+the request, allocates a response buffer in memory (DDR), builds the response\n+data, and returns the response pointer and size. For the discovery protocol,\n+the DOE EP core handles this directly without invoking an external handler.\n+\n+**Step 5: DOE EP Core → EP Controller Driver**\n+\n+The DOE EP core waits for the handler to complete by the work queue, and returns\n+the response pointer and size to the controller driver.\n+\n+**Step 6: EP Controller Driver → Root Complex**\n+\n+The controller driver converts the response from CPU-native format to\n+little-endian format using ``cpu_to_le32()``, writes the response to DOE read\n+mailbox register, and sets the READY bit in the DOE Status register. The root\n+complex then reads the response from the read mailbox register. Finally,\n+the controller driver frees both the request buffer (which it allocated) and the\n+response buffer (which the handler allocated).\n+\n+Abort Handling\n+--------------\n+\n+The DOE specification allows the root complex to abort ongoing DOE operations\n+by setting the ABORT bit in the DOE Control register.\n+\n+**Trigger**\n+\n+When the root complex sets the ABORT bit, the EP controller driver detects this\n+condition (typically in an interrupt handler or register polling routine). The\n+action taken depends on the timing of the abort:\n+\n+- **ABORT during request transfer**: If the ABORT bit is set while the root complex\n+  is still transferring the request to the mailbox registers, the controller driver\n+  discards the request and no call to ``pci_ep_doe_abort()`` is needed.\n+\n+- **ABORT after request submission**: If the ABORT bit is set after the request\n+  has been fully received and submitted to the DOE EP core via\n+  ``pci_ep_doe_process_request()``, the controller driver must call\n+  ``pci_ep_doe_abort(epc, func_no, cap_offset)`` for the affected mailbox to\n+  perform abort sequence in the DOE EP core.\n+\n+**Abort Sequence**\n+\n+The abort function performs the following actions:\n+\n+1. Sets the CANCEL flag on the mailbox to prevent queued requests from starting\n+2. Flushes the workqueue to wait for any currently executing handler to complete\n+   (handlers cannot be interrupted mid-execution)\n+3. Clears the CANCEL flag to allow the mailbox to accept new requests\n+\n+Queued requests that have not started execution will be aborted with an error\n+status. The currently executing request will complete normally, and the controller\n+will reject the response if it arrives after the abort sequence has been triggered.\n+\n+.. note::\n+   Independent of when the ABORT bit is triggered, the controller driver must\n+   clear the ERROR, BUSY, and READY bits in the DOE Status register after\n+   completing the abort operation to reset the mailbox to an idle state.\n+\n+Error Handling\n+--------------\n+\n+Errors can occur during DOE request processing for various reasons, such as\n+unsupported protocols, handler failures, or memory allocation failures.\n+\n+**Error Detection**\n+\n+When an error occurs during DOE request processing, the DOE EP core propagates this error\n+back to the controller driver through the ``pci_ep_doe_process_request()`` return value.\n+\n+**Error Response**\n+\n+When the controller driver receives an error code from\n+``pci_ep_doe_process_request()``, it sets the ERROR bit in the DOE Status\n+register instead of writing a response to the read mailbox register,\n+and frees the buffers.\n",
    "prefixes": [
        "RFC",
        "1/4"
    ]
}