get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 2218087,
    "url": "http://patchwork.ozlabs.org/api/patches/2218087/?format=api",
    "web_url": "http://patchwork.ozlabs.org/project/linuxppc-dev/patch/20260331113025.1566878-5-wei.fang@nxp.com/",
    "project": {
        "id": 2,
        "url": "http://patchwork.ozlabs.org/api/projects/2/?format=api",
        "name": "Linux PPC development",
        "link_name": "linuxppc-dev",
        "list_id": "linuxppc-dev.lists.ozlabs.org",
        "list_email": "linuxppc-dev@lists.ozlabs.org",
        "web_url": "https://github.com/linuxppc/wiki/wiki",
        "scm_url": "https://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux.git",
        "webscm_url": "https://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux.git/",
        "list_archive_url": "https://lore.kernel.org/linuxppc-dev/",
        "list_archive_url_format": "https://lore.kernel.org/linuxppc-dev/{}/",
        "commit_url_format": "https://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux.git/commit/?id={}"
    },
    "msgid": "<20260331113025.1566878-5-wei.fang@nxp.com>",
    "list_archive_url": "https://lore.kernel.org/linuxppc-dev/20260331113025.1566878-5-wei.fang@nxp.com/",
    "date": "2026-03-31T11:30:15",
    "name": "[v4,net-next,04/14] net: enetc: add basic operations to the FDB table",
    "commit_ref": null,
    "pull_url": null,
    "state": "handled-elsewhere",
    "archived": false,
    "hash": "e2bdf68cb7b4448ad306cc4960ff38407903f53f",
    "submitter": {
        "id": 84380,
        "url": "http://patchwork.ozlabs.org/api/people/84380/?format=api",
        "name": "Wei Fang",
        "email": "wei.fang@nxp.com"
    },
    "delegate": null,
    "mbox": "http://patchwork.ozlabs.org/project/linuxppc-dev/patch/20260331113025.1566878-5-wei.fang@nxp.com/mbox/",
    "series": [
        {
            "id": 498181,
            "url": "http://patchwork.ozlabs.org/api/series/498181/?format=api",
            "web_url": "http://patchwork.ozlabs.org/project/linuxppc-dev/list/?series=498181",
            "date": "2026-03-31T11:30:11",
            "name": "Add preliminary NETC switch support for i.MX94",
            "version": 4,
            "mbox": "http://patchwork.ozlabs.org/series/498181/mbox/"
        }
    ],
    "comments": "http://patchwork.ozlabs.org/api/patches/2218087/comments/",
    "check": "pending",
    "checks": "http://patchwork.ozlabs.org/api/patches/2218087/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "\n <linuxppc-dev+bounces-19069-incoming=patchwork.ozlabs.org@lists.ozlabs.org>",
        "X-Original-To": [
            "incoming@patchwork.ozlabs.org",
            "linuxppc-dev@lists.ozlabs.org"
        ],
        "Delivered-To": "patchwork-incoming@legolas.ozlabs.org",
        "Authentication-Results": [
            "legolas.ozlabs.org;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=nxp.com header.i=@nxp.com header.a=rsa-sha256\n header.s=selector1 header.b=LliXZDLT;\n\tdkim-atps=neutral",
            "legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=lists.ozlabs.org\n (client-ip=2404:9400:21b9:f100::1; helo=lists.ozlabs.org;\n envelope-from=linuxppc-dev+bounces-19069-incoming=patchwork.ozlabs.org@lists.ozlabs.org;\n receiver=patchwork.ozlabs.org)",
            "lists.ozlabs.org;\n arc=pass smtp.remote-ip=\"2a01:111:f403:c201::3\" arc.chain=microsoft.com",
            "lists.ozlabs.org;\n dmarc=pass (p=none dis=none) header.from=nxp.com",
            "lists.ozlabs.org;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=nxp.com header.i=@nxp.com header.a=rsa-sha256\n header.s=selector1 header.b=LliXZDLT;\n\tdkim-atps=neutral",
            "lists.ozlabs.org;\n spf=permerror (SPF Permanent Error: Void lookup limit of 2 exceeded)\n smtp.mailfrom=nxp.com (client-ip=2a01:111:f403:c201::3;\n helo=as8pr04cu009.outbound.protection.outlook.com;\n envelope-from=wei.fang@nxp.com; receiver=lists.ozlabs.org)",
            "dkim=none (message not signed)\n header.d=none;dmarc=none action=none header.from=nxp.com;"
        ],
        "Received": [
            "from lists.ozlabs.org (lists.ozlabs.org\n [IPv6:2404:9400:21b9:f100::1])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange x25519 server-signature ECDSA (secp384r1 raw public key)\n server-digest SHA384)\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4flQr6494Bz1y1q\n\tfor <incoming@patchwork.ozlabs.org>; Tue, 31 Mar 2026 22:29:26 +1100 (AEDT)",
            "from boromir.ozlabs.org (localhost [127.0.0.1])\n\tby lists.ozlabs.org (Postfix) with ESMTP id 4flQqg3Hkqz2yr7;\n\tTue, 31 Mar 2026 22:29:03 +1100 (AEDT)",
            "from AS8PR04CU009.outbound.protection.outlook.com\n (mail-westeuropeazlp170110003.outbound.protection.outlook.com\n [IPv6:2a01:111:f403:c201::3])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange secp256r1 server-signature RSA-PSS (2048 bits) server-digest\n SHA256)\n\t(No client certificate requested)\n\tby lists.ozlabs.org (Postfix) with ESMTPS id 4flQqf2jBLz2yqP\n\tfor <linuxppc-dev@lists.ozlabs.org>; Tue, 31 Mar 2026 22:29:02 +1100 (AEDT)",
            "from AM8PR04MB7284.eurprd04.prod.outlook.com (2603:10a6:20b:1dc::8)\n by PA1PR04MB11406.eurprd04.prod.outlook.com (2603:10a6:102:4f1::22) with\n Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9769.15; Tue, 31 Mar\n 2026 11:28:59 +0000",
            "from AM8PR04MB7284.eurprd04.prod.outlook.com\n ([fe80::9cd6:51bd:82b:98dc]) by AM8PR04MB7284.eurprd04.prod.outlook.com\n ([fe80::9cd6:51bd:82b:98dc%5]) with mapi id 15.20.9745.027; Tue, 31 Mar 2026\n 11:28:59 +0000"
        ],
        "ARC-Seal": [
            "i=2; a=rsa-sha256; d=lists.ozlabs.org; s=201707; t=1774956543;\n\tcv=pass;\n b=G+vTSYTY/+lRm4UmJ5aQpayWZ7/jrnBKw09azGTiYhrYqv5UNHvCE+E5zzOabysWuHC09UCXZAtmZgM7RZLuJAp4TXS6iXO6Ld4w1+JZQtu+G/SJj5f8z5ITTntBCJFpFO2fJReK6oi8VjhqPZSrZZg5qgt2qNPpFyVeUqrPIlnU8m1tWmmHsHXukGBna4Lc1VVTMu1O3fRiFQPXd2wvOaP1TbI8NH6MuY+/ntOUqnoDy7hMxJqxabqLT/vU8J0IUJ8EZx0Nkmm/pejpnke3E4hnJSm6lmhoAc0dbI06kK7O9Ad/Aku/nfGC58a/XIB7zlDLELhDEnFuJlgKMWtDGw==",
            "i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;\n b=RBybP0s6JPYe+YIjzYiL+jIYbrUC5Uswuw02FukoSlfbfGTjy/O9tFZggqvxnnS8IMCG79Z8G/YWzaf6rDancm06LoNvw79N7jc+jFA7/n/a/H7z5ohc5qvTGR0rHfYHb4cVVbU2e/yU35HnpmTsvUbcawRTasPg/3w4Ebll2YsZIiltm2leVdWxgKO+eaXHshys1GEls8/rQJ1TrSIVj+F98YDpWEpiPXUuFPXBKKyByEZQwLdyAHaVs40x3hhNyEhQize586Kt66EvK+hAqu1UOSy+9MC5qpaiyqEgJEsCLZdPB5iIACoEcb+680XW7uzfaPPuntu9fvRhasV80Q=="
        ],
        "ARC-Message-Signature": [
            "i=2; a=rsa-sha256; d=lists.ozlabs.org; s=201707;\n\tt=1774956543; c=relaxed/relaxed;\n\tbh=6y3HQpKxjRYaGQ3xgchWqZ6D8uYAKr7T5IFBIK/KRjE=;\n\th=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References:\n\t Content-Type:MIME-Version;\n b=RcsqQzBZPnI6nD4MSL8L74KGHMdhTHQIrf5eGE0PIeCEZV53YI0teP8zNS8x6Q4Koi2xzxEtDGL8H5B5hyJL9E4R3LIOC0AbzmbK5ALEmjxYcR9GcHCRqbv3badEERefj6JFagtRgq3m+jMjXBlmQK2QIgg+17rdnv5qR5ACiLwXinUw4LtPWS69OrCzfQaN1l1siwt8Km5nmHpxQZBLpPFsZ8dHwubyStUZ/Vpd0O01MbdlHJRizBAGaioD5E6XEEwe4LBrMxDQTDB+eabzMqWOLce9BeuEjN4H85b8LCh2jd4h3I1s7oqzJFhO85hst94QGtkKVj7GQXPWVcwIvw==",
            "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=6y3HQpKxjRYaGQ3xgchWqZ6D8uYAKr7T5IFBIK/KRjE=;\n b=BeygV6BW+Bd2q9+nZcHIprEPXOia95u5wln7Lm4cVruuAqtjwJSginroWd0TkjHtGbyRCBLU7uQTrXA1KS5hhH16aQ1GMMMuepmL/HZnNh5YtuqrvldizaxG6eKr/iQ+HIqxu9lQmmY5wDhRG/oKFiMnHJFCmB43HDMcH4rt31tzCKseEkv9qTS4dTOMaUbziOwAVQWhm3GEG36LywBoqKGuzcXJAq9D7gCjl0aL6HHTNyh5OfXsk/kq1+phM9s7DUStXNsCXyILjpDiB6ZgbUucvMPyWaxWtOylRZw/ptVDMo+sVo4cyDa8bixnDBzfFbtksjK6rp0nCu4dN/T2xQ=="
        ],
        "ARC-Authentication-Results": [
            "i=2; lists.ozlabs.org;\n dmarc=pass (p=none dis=none) header.from=nxp.com; dkim=pass (2048-bit key;\n unprotected) header.d=nxp.com header.i=@nxp.com header.a=rsa-sha256\n header.s=selector1 header.b=LliXZDLT; dkim-atps=neutral;\n spf=permerror (client-ip=2a01:111:f403:c201::3;\n helo=as8pr04cu009.outbound.protection.outlook.com;\n envelope-from=wei.fang@nxp.com;\n receiver=lists.ozlabs.org) smtp.mailfrom=nxp.com",
            "i=1; mx.microsoft.com 1; spf=pass\n smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass\n header.d=nxp.com; arc=none"
        ],
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1;\n h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;\n bh=6y3HQpKxjRYaGQ3xgchWqZ6D8uYAKr7T5IFBIK/KRjE=;\n b=LliXZDLTmio5atg5KqCbKj5OmP3zqX1J79vBZTz+31uyr2qMFuV1DhjPP3nviTsjTZ6JH/5Er3KxrSgjk4Lt0943sds9lwSqm2IY5cq1IShC507WFHAY9jGFFWXJRo0KgASk7/Gj0dCBJoFGqEcZ/DXx4byigILUDcMsk2cPj8oH/VWB5mPqWTafud5lKplaCsUe2M0JWQ4lHZXv5lB4RgUu14Aoqnea1/Ce9U/7dVzP1XiLrqzIHxfwSXo6HrWoyIuBIIyOPrg3hZ8AgFQ2hOApfqO9ULKdfAxNsmfiKAkvN7l1YKhnOfqxJkMh3zFyEEbsU5eAwmdkqfHiS7xcAQ==",
        "From": "Wei Fang <wei.fang@nxp.com>",
        "To": "claudiu.manoil@nxp.com,\n\tvladimir.oltean@nxp.com,\n\txiaoning.wang@nxp.com,\n\tandrew+netdev@lunn.ch,\n\tdavem@davemloft.net,\n\tedumazet@google.com,\n\tkuba@kernel.org,\n\tpabeni@redhat.com,\n\trobh@kernel.org,\n\tkrzk+dt@kernel.org,\n\tconor+dt@kernel.org,\n\tf.fainelli@gmail.com,\n\tfrank.li@nxp.com,\n\tchleroy@kernel.org,\n\thorms@kernel.org,\n\tlinux@armlinux.org.uk,\n\tandrew@lunn.ch",
        "Cc": "netdev@vger.kernel.org,\n\tlinux-kernel@vger.kernel.org,\n\tdevicetree@vger.kernel.org,\n\tlinuxppc-dev@lists.ozlabs.org,\n\tlinux-arm-kernel@lists.infradead.org,\n\timx@lists.linux.dev",
        "Subject": "[PATCH v4 net-next 04/14] net: enetc: add basic operations to the FDB\n table",
        "Date": "Tue, 31 Mar 2026 19:30:15 +0800",
        "Message-Id": "<20260331113025.1566878-5-wei.fang@nxp.com>",
        "X-Mailer": "git-send-email 2.34.1",
        "In-Reply-To": "<20260331113025.1566878-1-wei.fang@nxp.com>",
        "References": "<20260331113025.1566878-1-wei.fang@nxp.com>",
        "Content-Transfer-Encoding": "8bit",
        "Content-Type": "text/plain",
        "X-ClientProxiedBy": "MA5P287CA0151.INDP287.PROD.OUTLOOK.COM\n (2603:1096:a01:1d7::14) To AM8PR04MB7284.eurprd04.prod.outlook.com\n (2603:10a6:20b:1dc::8)",
        "X-Mailing-List": "linuxppc-dev@lists.ozlabs.org",
        "List-Id": "<linuxppc-dev.lists.ozlabs.org>",
        "List-Help": "<mailto:linuxppc-dev+help@lists.ozlabs.org>",
        "List-Owner": "<mailto:linuxppc-dev+owner@lists.ozlabs.org>",
        "List-Post": "<mailto:linuxppc-dev@lists.ozlabs.org>",
        "List-Archive": "<https://lore.kernel.org/linuxppc-dev/>,\n  <https://lists.ozlabs.org/pipermail/linuxppc-dev/>",
        "List-Subscribe": "<mailto:linuxppc-dev+subscribe@lists.ozlabs.org>,\n  <mailto:linuxppc-dev+subscribe-digest@lists.ozlabs.org>,\n  <mailto:linuxppc-dev+subscribe-nomail@lists.ozlabs.org>",
        "List-Unsubscribe": "<mailto:linuxppc-dev+unsubscribe@lists.ozlabs.org>",
        "Precedence": "list",
        "MIME-Version": "1.0",
        "X-MS-PublicTrafficType": "Email",
        "X-MS-TrafficTypeDiagnostic": "AM8PR04MB7284:EE_|PA1PR04MB11406:EE_",
        "X-MS-Office365-Filtering-Correlation-Id": "58755c63-8cc0-49cb-ba62-08de8f18b3a9",
        "X-MS-Exchange-SenderADCheck": "1",
        "X-MS-Exchange-AntiSpam-Relay": "0",
        "X-Microsoft-Antispam": "\n\tBCL:0;ARA:13230040|19092799006|376014|52116014|366016|7416014|1800799024|18002099003|56012099003|22082099003|38350700014|921020;",
        "X-Microsoft-Antispam-Message-Info": "\n\t//6us5m0xAMG5rWY/Y2oXv5YFjgopKvOlEBhlR3Bu7kHxSwcas1ZO0zjiJUBUDjGpkGUjE9LY/2JhuqXo6u/03w1sbMMhL4XZYImo4SuwdPPq4EgmBbbCOofJ6whMvIBB6m90BXkLhuMj+R3Xv4nltSuJkcr6VGQL7dQ+GvFiHZ+HmSj8n8u+HA7yLacpIQe96D9xnF3AXOx6AW538o86uaytzhFCjptQCJLrEKovytsqhkKGXpvQHysrwsapm1oCZkdFvMnjp3NtWU+euQPyDx3AfONoM0GhWQA/nxAC1UgsXNwH5td1lUimSl+94nnyyINgFnh2eQ2yfgofAE00F1KslNR0qSPJhvXoIWgM2w2qRerhqHAHqBmXAK9nhkGyaudttYgr+zyN6gQTum9N94ADtaNw+srIyMqMM4y9bIm6prD3shArewxV71uECuWsr9i1Ery2bJTx18mZIfvK1Jc489OnDG43hfS6lR+BGuTVi8MtrKOTTNChdfKPIXGLehnl7lXFS/Bs0mJJKZ7G73gBhRs7QzVYp/oCNtL1EOUIxmPiH4HoyZV01XFFO6kSFT2kZN8OERpWDXGZA7mxYPr4TfApqJ9V9GDEtdjXaf4x9D73IZ3FbqWykZMQR8eKeESyNVIMtZ3Zh69RMcUAJnJCldRLk609VAd6WPcrlod3qt4h18NIUdGQBn9V03sMcpefxwZjr5Xi9wHNdb7Uh4+pjv4bd9oqO6pkfwFoaDXgBHzEnoj+FDqDNqdaaUN6So95sf/VsXNfVQE0pGCnJOgm9+dk2iWbcy5+eFaf7ML0MlpNXjxe/Bs+9eA9QWL",
        "X-Forefront-Antispam-Report": "\n\tCIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AM8PR04MB7284.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(19092799006)(376014)(52116014)(366016)(7416014)(1800799024)(18002099003)(56012099003)(22082099003)(38350700014)(921020);DIR:OUT;SFP:1101;",
        "X-MS-Exchange-AntiSpam-MessageData-ChunkCount": "1",
        "X-MS-Exchange-AntiSpam-MessageData-0": "\n ByBJZlTKl2wVfFi3KYufwUC8OzuELnQWkKvy5umf73zVjX8csDnGQGjccLp9KdGGJK9r5qtuzmBXFRd8derItE8OaNjwK2nXSWvvtmYdpnzvXlpBE9MhYgefVIhMazjwUfSl1Mf3RxK6JaDT2sXjE9SbmZ/I5Q3VJIi+7bggBAXr+IiIJUQJNvHuC9ljf8bq96tybnU1IGIGZst7LINV6ZHOzrIrV/EUbVL8pR70Uh7dZg45p/TAFVYwKouJCAV4kc4f2/OHG3FHXjbemyjlEcQLDOcZBaFfyo5XUVBhYZbc9QMpOLbPyso6GhuDzQ3C33dOQZx8rQXoOR9Jr8R07mJfTgQGrVP9WyFE++6yK26VVzTM8j56TV4tugxf9Ec7B7H8e7V9gJ2Bb2XKzFHzgmD2IFj4C44ftvxpq8kdFuMvLRPlq42UFBsva/1eM1haiqCaibg5+Lh0WGd/kosTftVN7RP7TWQd/GR0w5t31MywROWsc2mvXAl1mdf/rEDQ3pgsYfE53NSO4IB0FnZe8Qe7nyGeA9pmvspAcrhjkI7vW9laZ8Xlw7ZehAmrtVgCcgoXIuPvWp8sBVD3jX8nu5uPHuM/Izt02L1J4dzB1jL6FIV3U3SUhbq5e5rsp9M9qLyH9eLSNVd3aE0mKdImNY5KGzFKwbW6RMpblrDxazNemPMlAeq1uiFTPvA+BkLuXl3PbYr3m7g8wwPcL0EXs+quIVMU7t2jeCaC8xRZ/qsG9Bhl5Qr3oW2URy1scrI43GLSJDPeCnfUplWpNfr27k/OI3GHIN0NjM5NlvCrbPr0VCFjJrgUPHgrqmWodlp9hJ3IjZfcsNs7Vfxq/s1I4CIkNp2yquWU+9wHfnHEWB/njajkKb6hAiZCpipqtKr9NvM/faqYeM+fIRn1/fMEB4YJMBmU8vu/bH2dDR5pfvNG0tdvcqkdSk6Af2L4gbEcXrju29CsSY6cPTQJLIq0tVUh7e0FciLghrQB4dIZpDtl0jCIEeMh/XV3ToWdw2bndi1rTpIMyEvDsle33253vBEiHTE2Nb12FRveKtgoxH0NPLpK2I9H06n1oMHWkdIdP17/zYEjayJ8M/LxjzEH99aaqDdKiJdoTNg1hDIOB/q8oHUkNyMRjWNzU1lieqr1EbmtnT3PBVft2TH9VAKgyrtdYjfsJm5b26F0M9SaVjVuiMhy9x+iujOe1HhDNC85PG5ZE6kSCTra9zfCeOCdnLLB1keo2YzrtMhAvMx8BC1gEiR11TFlI3nUGd2ccs0eFBMw+82AlRfNbbSngPEYixd6u4UW3CeRaPWVshB8z2XJDctYjsOystHR0om4p/mWHSiouxVhKF8Z/d3rIdIN7zwKq4NQyatSFy75kVBrtkxkmRkMfC4gnQKew9EuhJjguaAm4zpXFN5HOW2X7fom1ZDxAy6KlN15AD/ea8javTKKeZBJ0AhaG9FFOrR5R262ePc1NfrBgCtW1IuQ8Y8A3/MugKa+E44kcqL3JlMVUQphfG4T3sicGd6bkuzjcq8HrpFGTUYQ08Bw7AEOb5AhuR5Jmh/2n+PlWYsj7S5r9Q6KiEpJoGTmKNaTF79VvseK9E8sGtadSVxItiVcjo5Sy8NzYqDnQW2ai68Ms4DJ+PXfI6G/smFeypdvUS12y9GSqvlEpSp1LtD7TiyFnL1wxC2JC19CrQNfODbKM8SM+sItu8Di40vG+UScw6AYrDzd",
        "X-OriginatorOrg": "nxp.com",
        "X-MS-Exchange-CrossTenant-Network-Message-Id": "\n 58755c63-8cc0-49cb-ba62-08de8f18b3a9",
        "X-MS-Exchange-CrossTenant-AuthSource": "AM8PR04MB7284.eurprd04.prod.outlook.com",
        "X-MS-Exchange-CrossTenant-AuthAs": "Internal",
        "X-MS-Exchange-CrossTenant-OriginalArrivalTime": "31 Mar 2026 11:28:59.2254\n (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": "\n wfBkquzPbU5xsA0i2WE6Ln2j0LbSqCqptND6FVyub6XNzfRA8BQkamJC16p2MSA85C6F93eWTgTO40HBk92VuA==",
        "X-MS-Exchange-Transport-CrossTenantHeadersStamped": "PA1PR04MB11406",
        "X-Spam-Status": "No, score=0.8 required=3.0 tests=ARC_SIGNED,ARC_VALID,\n\tDKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FORGED_SPF_HELO,\n\tSPF_HELO_PASS,T_SPF_PERMERROR autolearn=disabled version=4.0.1 OzLabs 8",
        "X-Spam-Checker-Version": "SpamAssassin 4.0.1 (2024-03-25) on lists.ozlabs.org"
    },
    "content": "The FDB table is used for MAC learning lookups and MAC forwarding lookups.\nEach table entry includes information such as a FID and MAC address that\nmay be unicast or multicast and a forwarding destination field containing\na port bitmap identifying the associated port(s) with the MAC address.\nFDB table entries can be static or dynamic. Static entries are added from\nsoftware whereby dynamic entries are added either by software or by the\nhardware as MAC addresses are learned in the datapath.\n\nThe FDB table can only be managed by the command BD ring using table\nmanagement protocol version 2.0. Table management command operations Add,\nDelete, Update and Query are supported. And the FDB table supports three\naccess methods: Entry ID, Exact Match Key Element and Search. This patch\nadds the following basic supports to the FDB table.\n\nntmp_fdbt_update_entry() - update the configuration element data of a\nspecified FDB entry\n\nntmp_fdbt_delete_entry() - delete a specified FDB entry\n\nntmp_fdbt_add_entry() - add an entry into the FDB table\n\nntmp_fdbt_search_port_entry() - Search the FDB entry on the specified\nport based on RESUME_ENTRY_ID.\n\nSigned-off-by: Wei Fang <wei.fang@nxp.com>\n---\n drivers/net/ethernet/freescale/enetc/ntmp.c   | 201 +++++++++++++++++-\n .../ethernet/freescale/enetc/ntmp_private.h   |  61 +++++-\n include/linux/fsl/ntmp.h                      |  69 +++++-\n 3 files changed, 328 insertions(+), 3 deletions(-)",
    "diff": "diff --git a/drivers/net/ethernet/freescale/enetc/ntmp.c b/drivers/net/ethernet/freescale/enetc/ntmp.c\nindex 703752995e93..a4a99954baf2 100644\n--- a/drivers/net/ethernet/freescale/enetc/ntmp.c\n+++ b/drivers/net/ethernet/freescale/enetc/ntmp.c\n@@ -1,7 +1,7 @@\n // SPDX-License-Identifier: (GPL-2.0+ OR BSD-3-Clause)\n /*\n  * NETC NTMP (NETC Table Management Protocol) 2.0 Library\n- * Copyright 2025 NXP\n+ * Copyright 2025-2026 NXP\n  */\n \n #include <linux/dma-mapping.h>\n@@ -20,11 +20,15 @@\n /* Define NTMP Table ID */\n #define NTMP_MAFT_ID\t\t\t1\n #define NTMP_RSST_ID\t\t\t3\n+#define NTMP_FDBT_ID\t\t\t15\n \n /* Generic Update Actions for most tables */\n #define NTMP_GEN_UA_CFGEU\t\tBIT(0)\n #define NTMP_GEN_UA_STSEU\t\tBIT(1)\n \n+/* Query Action: 0: Full query, 1: Only query entry ID */\n+#define NTMP_QA_ENTRY_ID\t\t1\n+\n #define NTMP_ENTRY_ID_SIZE\t\t4\n #define RSST_ENTRY_NUM\t\t\t64\n #define RSST_STSE_DATA_SIZE(n)\t\t((n) * 8)\n@@ -225,6 +229,8 @@ static const char *ntmp_table_name(int tbl_id)\n \t\treturn \"MAC Address Filter Table\";\n \tcase NTMP_RSST_ID:\n \t\treturn \"RSS Table\";\n+\tcase NTMP_FDBT_ID:\n+\t\treturn \"FDB Table\";\n \tdefault:\n \t\treturn \"Unknown Table\";\n \t}\n@@ -453,5 +459,198 @@ int ntmp_rsst_query_entry(struct ntmp_user *user, u32 *table, int count)\n }\n EXPORT_SYMBOL_GPL(ntmp_rsst_query_entry);\n \n+/**\n+ * ntmp_fdbt_add_entry - add an entry into the FDB table\n+ * @user: target ntmp_user struct\n+ * @entry_id: returned value, the entry ID of the new added entry\n+ * @keye: key element data\n+ * @cfge: configuration element data\n+ *\n+ * Return: 0 on success, otherwise a negative error code\n+ */\n+int ntmp_fdbt_add_entry(struct ntmp_user *user, u32 *entry_id,\n+\t\t\tconst struct fdbt_keye_data *keye,\n+\t\t\tconst struct fdbt_cfge_data *cfge)\n+{\n+\tstruct ntmp_dma_buf data = {\n+\t\t.dev = user->dev,\n+\t\t.size = sizeof(struct fdbt_req_ua),\n+\t};\n+\tstruct fdbt_resp_query *resp;\n+\tstruct fdbt_req_ua *req;\n+\tunion netc_cbd cbd;\n+\tu32 len;\n+\tint err;\n+\n+\terr = ntmp_alloc_data_mem(&data, (void **)&req);\n+\tif (err)\n+\t\treturn err;\n+\n+\t/* Request data */\n+\tntmp_fill_crd(&req->crd, user->tbl.fdbt_ver, NTMP_QA_ENTRY_ID,\n+\t\t      NTMP_GEN_UA_CFGEU);\n+\treq->ak.exact.keye = *keye;\n+\treq->cfge = *cfge;\n+\n+\tlen = NTMP_LEN(data.size, sizeof(*resp));\n+\t/* The entry ID is allotted by hardware, so we need to perform\n+\t * a query action after the add action to get the entry ID from\n+\t * hardware.\n+\t */\n+\tntmp_fill_request_hdr(&cbd, data.dma, len, NTMP_FDBT_ID,\n+\t\t\t      NTMP_CMD_AQ, NTMP_AM_EXACT_KEY);\n+\terr = netc_xmit_ntmp_cmd(user, &cbd);\n+\tif (err) {\n+\t\tdev_err(user->dev, \"Failed to add %s entry, err: %pe\\n\",\n+\t\t\tntmp_table_name(NTMP_FDBT_ID), ERR_PTR(err));\n+\t\tgoto end;\n+\t}\n+\n+\tif (entry_id) {\n+\t\tresp = (struct fdbt_resp_query *)req;\n+\t\t*entry_id = le32_to_cpu(resp->entry_id);\n+\t}\n+\n+end:\n+\tntmp_free_data_mem(&data);\n+\n+\treturn err;\n+}\n+EXPORT_SYMBOL_GPL(ntmp_fdbt_add_entry);\n+\n+/**\n+ * ntmp_fdbt_update_entry - update the configuration element data of the\n+ * specified FDB entry\n+ * @user: target ntmp_user struct\n+ * @entry_id: the specified entry ID of the FDB table\n+ * @cfge: configuration element data\n+ *\n+ * Return: 0 on success, otherwise a negative error code\n+ */\n+int ntmp_fdbt_update_entry(struct ntmp_user *user, u32 entry_id,\n+\t\t\t   const struct fdbt_cfge_data *cfge)\n+{\n+\tstruct ntmp_dma_buf data = {\n+\t\t.dev = user->dev,\n+\t\t.size = sizeof(struct fdbt_req_ua),\n+\t};\n+\tstruct fdbt_req_ua *req;\n+\tunion netc_cbd cbd;\n+\tu32 len;\n+\tint err;\n+\n+\terr = ntmp_alloc_data_mem(&data, (void **)&req);\n+\tif (err)\n+\t\treturn err;\n+\n+\t/* Request data */\n+\tntmp_fill_crd(&req->crd, user->tbl.fdbt_ver, 0, NTMP_GEN_UA_CFGEU);\n+\treq->ak.eid.entry_id = cpu_to_le32(entry_id);\n+\treq->cfge = *cfge;\n+\n+\t/* Request header */\n+\tlen = NTMP_LEN(data.size, NTMP_STATUS_RESP_LEN);\n+\tntmp_fill_request_hdr(&cbd, data.dma, len, NTMP_FDBT_ID,\n+\t\t\t      NTMP_CMD_UPDATE, NTMP_AM_ENTRY_ID);\n+\terr = netc_xmit_ntmp_cmd(user, &cbd);\n+\tif (err)\n+\t\tdev_err(user->dev, \"Failed to update %s entry, err: %pe\\n\",\n+\t\t\tntmp_table_name(NTMP_FDBT_ID), ERR_PTR(err));\n+\n+\tntmp_free_data_mem(&data);\n+\n+\treturn err;\n+}\n+EXPORT_SYMBOL_GPL(ntmp_fdbt_update_entry);\n+\n+/**\n+ * ntmp_fdbt_delete_entry - delete the specified FDB entry\n+ * @user: target ntmp_user struct\n+ * @entry_id: the specified ID of the FDB entry\n+ *\n+ * Return: 0 on success, otherwise a negative error code\n+ */\n+int ntmp_fdbt_delete_entry(struct ntmp_user *user, u32 entry_id)\n+{\n+\tu32 req_len = sizeof(struct fdbt_req_qd);\n+\n+\treturn ntmp_delete_entry_by_id(user, NTMP_FDBT_ID,\n+\t\t\t\t       user->tbl.fdbt_ver,\n+\t\t\t\t       entry_id, req_len,\n+\t\t\t\t       NTMP_STATUS_RESP_LEN);\n+}\n+EXPORT_SYMBOL_GPL(ntmp_fdbt_delete_entry);\n+\n+/**\n+ * ntmp_fdbt_search_port_entry - Search the FDB entry on the specified\n+ * port based on RESUME_ENTRY_ID\n+ * @user: target ntmp_user struct\n+ * @port: the specified switch port ID\n+ * @resume_entry_id: it is both an input and an output. As an input, it\n+ * represents the FDB entry ID to be searched. If it is a NULL entry ID,\n+ * it indicates that the first FDB entry for that port is being searched.\n+ * As an output, it represents the next FDB entry ID to be searched.\n+ * @entry: returned value, the response data of the searched FDB entry\n+ *\n+ * Return: 0 on success, otherwise a negative error code\n+ */\n+int ntmp_fdbt_search_port_entry(struct ntmp_user *user, int port,\n+\t\t\t\tu32 *resume_entry_id,\n+\t\t\t\tstruct fdbt_entry_data *entry)\n+{\n+\tstruct ntmp_dma_buf data = {\n+\t\t.dev = user->dev,\n+\t\t.size = sizeof(struct fdbt_req_qd),\n+\t};\n+\tstruct fdbt_resp_query *resp;\n+\tstruct fdbt_req_qd *req;\n+\tunion netc_cbd cbd;\n+\tu32 len;\n+\tint err;\n+\n+\terr = ntmp_alloc_data_mem(&data, (void **)&req);\n+\tif (err)\n+\t\treturn err;\n+\n+\t/* Request data */\n+\tntmp_fill_crd(&req->crd, user->tbl.fdbt_ver, 0, 0);\n+\treq->ak.search.resume_eid = cpu_to_le32(*resume_entry_id);\n+\treq->ak.search.cfge.port_bitmap = cpu_to_le32(BIT(port));\n+\t/* Match CFGE_DATA[PORT_BITMAP] field */\n+\treq->ak.search.cfge_mc = FDBT_CFGE_MC_PORT_BITMAP;\n+\n+\t/* Request header */\n+\tlen = NTMP_LEN(data.size, sizeof(*resp));\n+\tntmp_fill_request_hdr(&cbd, data.dma, len, NTMP_FDBT_ID,\n+\t\t\t      NTMP_CMD_QUERY, NTMP_AM_SEARCH);\n+\n+\terr = netc_xmit_ntmp_cmd(user, &cbd);\n+\tif (err) {\n+\t\tdev_err(user->dev,\n+\t\t\t\"Failed to search %s entry on port %d, err: %pe\\n\",\n+\t\t\tntmp_table_name(NTMP_FDBT_ID), port, ERR_PTR(err));\n+\t\tgoto end;\n+\t}\n+\n+\tif (!cbd.resp_hdr.num_matched) {\n+\t\tentry->entry_id = NTMP_NULL_ENTRY_ID;\n+\t\t*resume_entry_id = NTMP_NULL_ENTRY_ID;\n+\t\tgoto end;\n+\t}\n+\n+\tresp = (struct fdbt_resp_query *)req;\n+\t*resume_entry_id = le32_to_cpu(resp->status);\n+\tentry->entry_id = le32_to_cpu(resp->entry_id);\n+\tentry->keye = resp->keye;\n+\tentry->cfge = resp->cfge;\n+\tentry->acte = resp->acte;\n+\n+end:\n+\tntmp_free_data_mem(&data);\n+\n+\treturn err;\n+}\n+EXPORT_SYMBOL_GPL(ntmp_fdbt_search_port_entry);\n+\n MODULE_DESCRIPTION(\"NXP NETC Library\");\n MODULE_LICENSE(\"Dual BSD/GPL\");\ndiff --git a/drivers/net/ethernet/freescale/enetc/ntmp_private.h b/drivers/net/ethernet/freescale/enetc/ntmp_private.h\nindex 34394e40fddd..8999eafe1920 100644\n--- a/drivers/net/ethernet/freescale/enetc/ntmp_private.h\n+++ b/drivers/net/ethernet/freescale/enetc/ntmp_private.h\n@@ -1,7 +1,7 @@\n /* SPDX-License-Identifier: (GPL-2.0+ OR BSD-3-Clause) */\n /*\n  * NTMP table request and response data buffer formats\n- * Copyright 2025 NXP\n+ * Copyright 2025-2026 NXP\n  */\n \n #ifndef __NTMP_PRIVATE_H\n@@ -11,6 +11,7 @@\n #include <linux/fsl/ntmp.h>\n \n #define NTMP_EID_REQ_LEN\t8\n+#define NTMP_STATUS_RESP_LEN\t4\n #define NETC_CBDR_BD_NUM\t256\n \n union netc_cbd {\n@@ -27,6 +28,7 @@ union netc_cbd {\n #define NTMP_CMD_QUERY\t\tBIT(2)\n #define NTMP_CMD_ADD\t\tBIT(3)\n #define NTMP_CMD_QU\t\t(NTMP_CMD_QUERY | NTMP_CMD_UPDATE)\n+#define NTMP_CMD_AQ\t\t(NTMP_CMD_ADD | NTMP_CMD_QUERY)\n \t\tu8 access_method;\n #define NTMP_ACCESS_METHOD\tGENMASK(7, 4)\n #define NTMP_AM_ENTRY_ID\t0\n@@ -101,4 +103,61 @@ struct rsst_req_update {\n \tu8 groups[];\n };\n \n+/* Access Key Format of FDB Table */\n+struct fdbt_ak_eid {\n+\t__le32 entry_id;\n+\t__le32 resv[7];\n+};\n+\n+struct fdbt_ak_exact {\n+\tstruct fdbt_keye_data keye;\n+\t__le32 resv[5];\n+};\n+\n+struct fdbt_ak_search {\n+\t__le32 resume_eid;\n+\tstruct fdbt_keye_data keye;\n+\tstruct fdbt_cfge_data cfge;\n+\tu8 acte;\n+\tu8 keye_mc;\n+#define FDBT_KEYE_MAC\t\tGENMASK(1, 0)\n+\tu8 cfge_mc;\n+#define FDBT_CFGE_MC\t\tGENMASK(2, 0)\n+#define FDBT_CFGE_MC_ANY\t\t0\n+#define FDBT_CFGE_MC_DYNAMIC\t\t1\n+#define FDBT_CFGE_MC_PORT_BITMAP\t2\n+#define FDBT_CFGE_MC_DYNAMIC_AND_PORT_BITMAP\t3\n+\tu8 acte_mc;\n+#define FDBT_ACTE_MC\t\tBIT(0)\n+};\n+\n+union fdbt_access_key {\n+\tstruct fdbt_ak_eid eid;\n+\tstruct fdbt_ak_exact exact;\n+\tstruct fdbt_ak_search search;\n+};\n+\n+/* FDB Table Request Data Buffer Format of Update and Add actions */\n+struct fdbt_req_ua {\n+\tstruct ntmp_cmn_req_data crd;\n+\tunion fdbt_access_key ak;\n+\tstruct fdbt_cfge_data cfge;\n+};\n+\n+/* FDB Table Request Data Buffer Format of Query and Delete actions */\n+struct fdbt_req_qd {\n+\tstruct ntmp_cmn_req_data crd;\n+\tunion fdbt_access_key ak;\n+};\n+\n+/* FDB Table Response Data Buffer Format of Query action */\n+struct fdbt_resp_query {\n+\t__le32 status;\n+\t__le32 entry_id;\n+\tstruct fdbt_keye_data keye;\n+\tstruct fdbt_cfge_data cfge;\n+\tu8 acte;\n+\tu8 resv[3];\n+};\n+\n #endif\ndiff --git a/include/linux/fsl/ntmp.h b/include/linux/fsl/ntmp.h\nindex 916dc4fe7de3..a9f3e6cbf422 100644\n--- a/include/linux/fsl/ntmp.h\n+++ b/include/linux/fsl/ntmp.h\n@@ -1,11 +1,13 @@\n /* SPDX-License-Identifier: (GPL-2.0+ OR BSD-3-Clause) */\n-/* Copyright 2025 NXP */\n+/* Copyright 2025-2026 NXP */\n #ifndef __NETC_NTMP_H\n #define __NETC_NTMP_H\n \n #include <linux/bitops.h>\n #include <linux/if_ether.h>\n \n+#define NTMP_NULL_ENTRY_ID\t\t0xffffffffU\n+\n struct maft_keye_data {\n \tu8 mac_addr[ETH_ALEN];\n \t__le16 resv;\n@@ -29,6 +31,7 @@ struct netc_cbdr_regs {\n struct netc_tbl_vers {\n \tu8 maft_ver;\n \tu8 rsst_ver;\n+\tu8 fdbt_ver;\n };\n \n struct netc_cbdr {\n@@ -61,6 +64,36 @@ struct maft_entry_data {\n \tstruct maft_cfge_data cfge;\n };\n \n+struct fdbt_keye_data {\n+\tu8 mac_addr[ETH_ALEN]; /* big-endian */\n+\t__le16 resv0;\n+\t__le16 fid;\n+#define FDBT_FID\t\tGENMASK(11, 0)\n+\t__le16 resv1;\n+};\n+\n+struct fdbt_cfge_data {\n+\t__le32 port_bitmap;\n+#define FDBT_PORT_BITMAP\tGENMASK(23, 0)\n+\t__le32 cfg;\n+#define FDBT_OETEID\t\tGENMASK(1, 0)\n+#define FDBT_EPORT\t\tGENMASK(6, 2)\n+#define FDBT_IMIRE\t\tBIT(7)\n+#define FDBT_CTD\t\tGENMASK(10, 9)\n+#define FDBT_DYNAMIC\t\tBIT(11)\n+#define FDBT_TIMECAPE\t\tBIT(12)\n+\t__le32 et_eid;\n+};\n+\n+struct fdbt_entry_data {\n+\tu32 entry_id;\n+\tstruct fdbt_keye_data keye;\n+\tstruct fdbt_cfge_data cfge;\n+\tu8 acte;\n+#define FDBT_ACT_CNT\t\tGENMASK(6, 0)\n+#define FDBT_ACT_FLAG\t\tBIT(7)\n+};\n+\n #if IS_ENABLED(CONFIG_NXP_NETC_LIB)\n int ntmp_init_cbdr(struct netc_cbdr *cbdr, struct device *dev,\n \t\t   const struct netc_cbdr_regs *regs);\n@@ -76,6 +109,15 @@ int ntmp_rsst_update_entry(struct ntmp_user *user, const u32 *table,\n \t\t\t   int count);\n int ntmp_rsst_query_entry(struct ntmp_user *user,\n \t\t\t  u32 *table, int count);\n+int ntmp_fdbt_add_entry(struct ntmp_user *user, u32 *entry_id,\n+\t\t\tconst struct fdbt_keye_data *keye,\n+\t\t\tconst struct fdbt_cfge_data *cfge);\n+int ntmp_fdbt_update_entry(struct ntmp_user *user, u32 entry_id,\n+\t\t\t   const struct fdbt_cfge_data *cfge);\n+int ntmp_fdbt_delete_entry(struct ntmp_user *user, u32 entry_id);\n+int ntmp_fdbt_search_port_entry(struct ntmp_user *user, int port,\n+\t\t\t\tu32 *resume_entry_id,\n+\t\t\t\tstruct fdbt_entry_data *entry);\n #else\n static inline int ntmp_init_cbdr(struct netc_cbdr *cbdr, struct device *dev,\n \t\t\t\t const struct netc_cbdr_regs *regs)\n@@ -116,6 +158,31 @@ static inline int ntmp_rsst_query_entry(struct ntmp_user *user,\n \treturn 0;\n }\n \n+static inline int ntmp_fdbt_add_entry(struct ntmp_user *user, u32 *entry_id,\n+\t\t\t\t      const struct fdbt_keye_data *keye,\n+\t\t\t\t      const struct fdbt_cfge_data *data)\n+{\n+\treturn 0;\n+}\n+\n+static inline int ntmp_fdbt_update_entry(struct ntmp_user *user, u32 entry_id,\n+\t\t\t\t\t const struct fdbt_cfge_data *cfge)\n+{\n+\treturn 0;\n+}\n+\n+static inline int ntmp_fdbt_delete_entry(struct ntmp_user *user, u32 entry_id)\n+{\n+\treturn 0;\n+}\n+\n+static inline int ntmp_fdbt_search_port_entry(struct ntmp_user *user, int port,\n+\t\t\t\t\t      u32 *resume_entry_id,\n+\t\t\t\t\t      struct fdbt_entry_data *entry)\n+{\n+\treturn 0;\n+}\n+\n #endif\n \n #endif\n",
    "prefixes": [
        "v4",
        "net-next",
        "04/14"
    ]
}