get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 2218090,
    "url": "http://patchwork.ozlabs.org/api/patches/2218090/?format=api",
    "web_url": "http://patchwork.ozlabs.org/project/linuxppc-dev/patch/20260331113025.1566878-8-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-8-wei.fang@nxp.com>",
    "list_archive_url": "https://lore.kernel.org/linuxppc-dev/20260331113025.1566878-8-wei.fang@nxp.com/",
    "date": "2026-03-31T11:30:18",
    "name": "[v4,net-next,07/14] net: enetc: add support for \"Add\" and \"Delete\" operations to IPFT",
    "commit_ref": null,
    "pull_url": null,
    "state": "handled-elsewhere",
    "archived": false,
    "hash": "9715083a9ffc116de9dbf782c2cb9b03a0a633e5",
    "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-8-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/2218090/comments/",
    "check": "pending",
    "checks": "http://patchwork.ozlabs.org/api/patches/2218090/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "\n <linuxppc-dev+bounces-19072-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=ErNHKBJt;\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-19072-incoming=patchwork.ozlabs.org@lists.ozlabs.org;\n receiver=patchwork.ozlabs.org)",
            "lists.ozlabs.org;\n arc=pass smtp.remote-ip=\"2a01:111:f403:c20a::7\" 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=ErNHKBJt;\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:c20a::7;\n helo=pa4pr04cu001.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)\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4flQrX280lz1y1q\n\tfor <incoming@patchwork.ozlabs.org>; Tue, 31 Mar 2026 22:29:48 +1100 (AEDT)",
            "from boromir.ozlabs.org (localhost [127.0.0.1])\n\tby lists.ozlabs.org (Postfix) with ESMTP id 4flQrM09yqz2yv7;\n\tTue, 31 Mar 2026 22:29:39 +1100 (AEDT)",
            "from PA4PR04CU001.outbound.protection.outlook.com\n (mail-francecentralazlp170130007.outbound.protection.outlook.com\n [IPv6:2a01:111:f403:c20a::7])\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 4flQrK6zYwz2yft\n\tfor <linuxppc-dev@lists.ozlabs.org>; Tue, 31 Mar 2026 22:29:37 +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:29:21 +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:29:21 +0000"
        ],
        "ARC-Seal": [
            "i=2; a=rsa-sha256; d=lists.ozlabs.org; s=201707; t=1774956578;\n\tcv=pass;\n b=f8qsxBOSx2QrMCBJGGL+79RIiwK1qMgBtE6/LlOmFxW/7mW7z0Opm7CygDp4MIpkv2Sd+Zql6nC/2XHzgCzD18cJhWe+fps6ja/JLIcR5ev9JxxGLj/rf1WS6y3SptmElxa1Cs//6Peomb7oj8O2vtIcZR00dHU5wptFaLUsd0V46Wxegn99IlNsBgiGmapE4zNNPYAXy2KN8VKnR1/1l+S60ewMpqh8QQ9V36mupc3hFJfy8fEyfLdZJ4SJ1iFSpP2PUtyQmK4EW77lVnU6vREjkbA5goih076dpAltXJiVuvVLXc8OqYsW8MlClNNgXTgxySiGRh6x1/2BI+/vAQ==",
            "i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;\n b=qmyni83O2c919kSzBKXUP2xbeNPwVAZIL9eSSoc6Ok0Dq8XMgJz0YHSOplncP4bIvH2vN4LGcjf/8cMzmyQ3hisHG6f7B5lbaw9ILbWN2w0TKo3wJSGZSN5ARx0WFxJQRCurx/E9H3sOsqeP2tpMBIwAq3CPWzaw+a9CiMnQJDVRm9I4wF9C2XCJBxKuegVNn/PVg2yH22dJUz2/WAuZTQsHEERBi58l0F5hb1uIYj8C7fMcRi06ER42BNMupbKF6/NjbRgma/t81tD2SU/QdreRY+nv579zgC4o44B5pO/fOVtrpSJCUeI2/lp1Lzt0baHQPbhT3j3nfYzFE8NHxg=="
        ],
        "ARC-Message-Signature": [
            "i=2; a=rsa-sha256; d=lists.ozlabs.org; s=201707;\n\tt=1774956578; c=relaxed/relaxed;\n\tbh=tx8IlxNoilqLm5+3c5cpJbVBBo14AVY0MDedKr3KpNw=;\n\th=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References:\n\t Content-Type:MIME-Version;\n b=ZOaix+MU9bDtvH74pZKpfi4xU41clQVt2gBP3vdO0tbcKKNK1m1cOliJgXwdfTN9YTaKSAfS+Woonqwmx87x6MzrimfRmkgWCaJy0iPl9XEruWDe5ZIvcGLpA4to2sZqFbOFLh/dMoC2I9GqVX1dXDI+6brsfVgwThGvL1I6vAFs21773cfIDObSrDFqy2U6OvVNfRaUgsWFBfjalsEts7f1XZB1j54zF4+u36E1h3M7gwdTsExV3UUcAELiLJSCM7CXSzEfJivWJ9eMiczcRR11ojGCZDilJolp1gergWoInxbsW1SJvu4YNlrWcE1IJifO7dWTJZbwUzKxO/Z13A==",
            "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=tx8IlxNoilqLm5+3c5cpJbVBBo14AVY0MDedKr3KpNw=;\n b=Hu0DuzMNZ4xDx0lsJhin+9lQMk2ioYT5NJSE+20cNOV247jTCTJN2shZs7DKflUbv30YZaagUiW85M/jynQJ4yYwr56VC8vbksivNFs1QagB10XSBoH3MGiU6AW5Cs6fHISAypVzfS6TsabP2D9/v5momoQHiQYVeYUhGukHE7mFz2mtc6jhiu0tAtIn28bRvQFV/6CZyl/xqxB0Y9j2Cz7Q7kKr+/qP+jfEMnKXa4nOIRT5X1/OPCNl0tUjLcTw9KyZouQlNsh6JX2PB18goSL8JWl3elF4DmyAFcKCnjtDsFo5p/RbivXCnFgkt8+bSNle9iYR0NcdOcODl+u+ZA=="
        ],
        "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=ErNHKBJt; dkim-atps=neutral;\n spf=permerror (client-ip=2a01:111:f403:c20a::7;\n helo=pa4pr04cu001.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=tx8IlxNoilqLm5+3c5cpJbVBBo14AVY0MDedKr3KpNw=;\n b=ErNHKBJtm/kQHTEb5O3nymXV7PC/FkSo97/gbgYImqQgyyttLiVoD8cnAYREGkZBHOi2ydbH9SLsHQ3ez40DOEqqAwJiqj2VWdM6KOvYLBjuNLCIhflFpI3a2biq2A5bNtU+pnxko1/8c37BCXUAFM81owziQcA5YODqrWpkMViFHA9X+QjvCW49C+q0k7QK4LTG+inju/x6kx+fliGxNLrcaYyBSS2yk0bH9IyyjwiiwGYOOQo7CpwWhIaqDiDBUKk5odLOH61aOSNi6XTVojxzycZ/oOGsROodEy0Z5vZfa2DGaMFJGHLGpN7wi1qz/tsz0SN/++Ed7Hb4u8kMkQ==",
        "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 07/14] net: enetc: add support for \"Add\" and\n \"Delete\" operations to IPFT",
        "Date": "Tue, 31 Mar 2026 19:30:18 +0800",
        "Message-Id": "<20260331113025.1566878-8-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": "4128ca31-d7de-424e-5cf0-08de8f18c0e5",
        "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\tejCvOMRdC35Bq8aaK9Gdo4wvw99VWih+5AGNQE7U1LuodlGvnLfVS3Wy7dXbUbD28AtKurPZ4Pz06uC9u3yzl6Vs6IUFEyiTvzAAE72WcEs7e2qhybhCDWRbCaL37PIiiZbfZlg7rAG+j+a+6Mnf9PZoM0yNfelqYRf+SKshxcz5qJN12lTdEvGpIsY+gTDbFAwRBU2EqnUt2FTyFA8uhFwZ0pZ7Zx+Ops6WxM5SjWXASpFeXB95CPp11KNS8Hiy8KOSaslrMxGdNBx4j1jbaLdr1jPREB36HSYszQwVUgSRl9e4uPqTdRR1H2i0IqMbQHGATKuExqyr+wgI6gI+1qiprQtlI4igUdwlnD+88YjjXTPk0zST3KMEDFduUeY2pd++9er6Y2RfoOPLArXhk5O0q67zG2r9UbaAVn+WV/S+k+AWJk05bo/1asTVnaiU1NtMXdbNp1uW88F0A3C6SPJwPqZ8aT9sARwrLvjBxPz+U5FgAIiJKGUyC4/WKHTNmU+ocvvBfxxWkVmL063Ul9pUbZAfcyVu/TMsWe27tOYvRJp/w9UhWIS5TcDgMNcmb+zUIsaFBUERjG702fjIMmW1ArnUQj6WEtiABuYI/Do/5RhTFsmwU4lex5pc4LVh+T3wS8hhDm1LXG9e+3VCqS3HBGJl77CdBB4TZqwUYVfnypk8Rr1x0xh7HHsp7bM8ThTJ7WgAHXwwRkVO7MDb5bwvAvmtuCV2ehJGuRWlzQJHAVzs3aXeNoAacyi45NCkqXFD4clR6FEJdB9OY5nuzguYiliguSFshojq0kD7b3p2vvc6+X7QN06mo0vIF+10",
        "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 u+rwMW5Rnk6k0QTbHRJBQN3cs1n9ckN1d+7X6XnV6KeJXZCnLMg26imSt3+6lnPGS7S//8y89+LE1HCwV/uMXh1nLiSQuKbASw053EBoIFynEs1uyb2ay8IOK+poqyZYbqWe0RdM05tlirTjCTd7BABUfDsb5tqCu+oHbLd7B4fY4tOXYjmu7RPfPiGacGaJwwItnCWEpvqxIbMv8ZVkVPGAhe1KZOnnn+eAYmJgx2YTA2633JNKP92q9GRW52EF2u/gZDa4iefOecefRGszQuMSfpHWmMfle/KUu3rt0TBCpsksCOuWLH2yM/E9xFsLg1yJIDChtFdY7BFcl9lTaXyjOjzLJWlx5kAzXvjU1L4p9IuvBkSQ5ypt8K/AeohANmkV8Hp0AV2yAUIapxx3vhVHldSC1Ubd43sEjtxLkMZFbYpZm2JlUWX9Mby2L0dJvakrwRTpdGarP6OvotxXO++6IwRrvWVoCXtR2aG6SqvmXpIXqD0uIB7ozANxHSYbqAZ+W76lWZxDp52qBalpynkazZ3H6I9mhxmiKFJEP11DC3waBmxDf8HMCFcyOwe1ozZHNDdnQYDROKrXS6Hs854s8HLwVuClHPsuh389xkcyfl1dNsSAh0aE2g4S/4drexEI1drcnZZ/jNGIR1ggyxwG9vCCkzIx35yPvM2DJ8fIZTld2oGrpCwKEebsz1GiLJnp9HVhL70PvmrVOyS7ZWDFaUkOG71N5ZvHu9OeN1FN9RmwgqPh+yITmR0Vxfp4NHRPWiIiEs7doB+1gB582IE0qIl+n1tCCYmPubHu3zR3NnOSMCLl9RS3Ni62GzBIlAKGrPY6rrxMDUJI7ccvk1q+pBddDAiJeQYaDtBaUeDKEfPof1NNfHZ82shFpHfWMPnVik8rX6N1j8t9TCNpN6aHDsiwqgupo5bxN1X2+yuX513x4yr8vFb2+1hH1jCcG0Ue26PfDhrPCqZTKQDIfTstc7nUHg5Q1vXLu5HYm1KpaC0p4gcdvujwY+qe+J3E5RiSp3RUcIsdJNl/oYGm1l+z6QLeEFdLh182MPXxOp8Eyat78GhAo/AjDQd/3LISpkbYd/hYhHS2MAHrCCIgF/99VQObVV1nHgvR6c0ZtKT2qQUmacESOsdwRD2cAtPvgwFPYW7Ps0t2Kx8JaujrHQrWYiFoTefXu7jO8OeYxLDiimmlgtalnWNIObQVWWgXodo6JCcTDPUyomEN5wxbdCQHwQpv2p+K/p01AfwyBxt1+D/PILKvNJ+zjhg2TG5T2DmcIePdcLLX8kG64yAEsv+kYU3iId+fVziePRpuE44VNyQjZ35cEDUr+5wPRVm0c/5ADk485T5kqXaK4bdTWAX5acDB3bYtDdU0YuN8fZWQCnNLsOh7dIOjJaLs4br4frBRUKCrIq9ZVKxENQWRvPOEX54cDPTjnoXaX7yix7Kd+xZtXxNVxixXAGF1evHZKnESTt8imsyiQpzukOWnAsMkZPdAwCIRkOkCwzOTvo0/gwXluCwYSYEaAQ8gOZdTWzgY2mB6lhOlGYIK9s+QaQTk0TEGl4Xrt808TMqPwrThzmi7scfMHN3izqLQnNcOIiNRkWNPHEVowP+R+9FzxCHOsu4uqjSmRt+DEx5MnaBSj7SkUOIU7EnKdBptIK4LOT4xV8ZfcuBDfnFJyLoB1jo6P5y4NGrjN+9j6uydYOYGJmLGysE3GlAeYAdcxzFo",
        "X-OriginatorOrg": "nxp.com",
        "X-MS-Exchange-CrossTenant-Network-Message-Id": "\n 4128ca31-d7de-424e-5cf0-08de8f18c0e5",
        "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:29:21.2569\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 id3a3vzjtbPJj+JGla7M5s7Ldp1dSRlpbFXmzbpJQjQyeiO87iG/XtLe+UYnk12I2KKRp1W5IfrkH+CCvHP//g==",
        "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\tRCVD_IN_DNSWL_NONE,SPF_HELO_PASS,T_SPF_PERMERROR autolearn=disabled\n\tversion=4.0.1 OzLabs 8",
        "X-Spam-Checker-Version": "SpamAssassin 4.0.1 (2024-03-25) on lists.ozlabs.org"
    },
    "content": "The ingress port filter table (IPFT )contains a set of filters each\ncapable of classifying incoming traffic using a mix of L2, L3, and L4\nparsed and arbitrary field data. As a result of a filter match, several\nactions can be specified such as on whether to deny or allow a frame,\noverriding internal QoS attributes associated with the frame and setting\nparameters for the subsequent frame processing functions, such as stream\nidentification, policing, ingress mirroring. Each entry corresponds to a\nfilter. The ingress port filter entries are added using a precedence\nvalue. If a frame matches multiple entries, the entry with the higher\nprecedence is used. Currently, this patch only adds \"Add\" and \"Delete\"\noperations to the ingress port filter table. These two interfaces will\nbe used by both ENETC driver and NETC switch driver.\n\nSigned-off-by: Wei Fang <wei.fang@nxp.com>\n---\n drivers/net/ethernet/freescale/enetc/ntmp.c   |  76 +++++++++++++\n .../ethernet/freescale/enetc/ntmp_private.h   |  36 ++++++\n include/linux/fsl/ntmp.h                      | 104 ++++++++++++++++++\n 3 files changed, 216 insertions(+)",
    "diff": "diff --git a/drivers/net/ethernet/freescale/enetc/ntmp.c b/drivers/net/ethernet/freescale/enetc/ntmp.c\nindex 3c59b355c142..960d5be8ec42 100644\n--- a/drivers/net/ethernet/freescale/enetc/ntmp.c\n+++ b/drivers/net/ethernet/freescale/enetc/ntmp.c\n@@ -20,6 +20,7 @@\n /* Define NTMP Table ID */\n #define NTMP_MAFT_ID\t\t\t1\n #define NTMP_RSST_ID\t\t\t3\n+#define NTMP_IPFT_ID\t\t\t13\n #define NTMP_FDBT_ID\t\t\t15\n #define NTMP_VFT_ID\t\t\t18\n #define NTMP_BPT_ID\t\t\t41\n@@ -234,6 +235,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_IPFT_ID:\n+\t\treturn \"Ingress Port Filter Table\";\n \tcase NTMP_FDBT_ID:\n \t\treturn \"FDB Table\";\n \tcase NTMP_VFT_ID:\n@@ -468,6 +471,79 @@ 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_ipft_add_entry - add an entry into the ingress port filter table\n+ * @user: target ntmp_user struct\n+ * @entry: the entry data, entry->cfge (configuration element data) and\n+ * entry->keye (key element data) are used as input. Since the entry ID\n+ * is assigned by the hardware, so entry->entry_id is a returned value\n+ * for the driver to use, the driver can update/delete/query the entry\n+ * based on the entry_id.\n+ *\n+ * Return: 0 on success, otherwise a negative error code\n+ */\n+int ntmp_ipft_add_entry(struct ntmp_user *user,\n+\t\t\tstruct ipft_entry_data *entry)\n+{\n+\tstruct ntmp_dma_buf data = {\n+\t\t.dev = user->dev,\n+\t\t.size = sizeof(struct ipft_resp_query),\n+\t};\n+\tstruct ipft_resp_query *resp;\n+\tstruct ipft_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+\tntmp_fill_crd(&req->crd, user->tbl.ipft_ver, NTMP_QA_ENTRY_ID,\n+\t\t      NTMP_GEN_UA_CFGEU | NTMP_GEN_UA_STSEU);\n+\treq->ak.keye = entry->keye;\n+\treq->cfge = entry->cfge;\n+\n+\tlen = NTMP_LEN(sizeof(*req), data.size);\n+\tntmp_fill_request_hdr(&cbd, data.dma, len, NTMP_IPFT_ID,\n+\t\t\t      NTMP_CMD_AQ, NTMP_AM_TERNARY_KEY);\n+\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_IPFT_ID), ERR_PTR(err));\n+\n+\t\tgoto end;\n+\t}\n+\n+\tresp = (struct ipft_resp_query *)req;\n+\tentry->entry_id = le32_to_cpu(resp->entry_id);\n+\n+end:\n+\tntmp_free_data_mem(&data);\n+\n+\treturn err;\n+}\n+EXPORT_SYMBOL_GPL(ntmp_ipft_add_entry);\n+\n+/**\n+ * ntmp_ipft_delete_entry - delete a specified ingress port filter table entry\n+ * @user: target ntmp_user struct\n+ * @entry_id: the specified ID of the ingress port filter table entry\n+ *\n+ * Return: 0 on success, otherwise a negative error code\n+ */\n+int ntmp_ipft_delete_entry(struct ntmp_user *user, u32 entry_id)\n+{\n+\tu32 req_len = sizeof(struct ipft_req_qd);\n+\n+\treturn ntmp_delete_entry_by_id(user, NTMP_IPFT_ID,\n+\t\t\t\t       user->tbl.ipft_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_ipft_delete_entry);\n+\n /**\n  * ntmp_fdbt_add_entry - add an entry into the FDB table\n  * @user: target ntmp_user struct\ndiff --git a/drivers/net/ethernet/freescale/enetc/ntmp_private.h b/drivers/net/ethernet/freescale/enetc/ntmp_private.h\nindex 7d50af7745c7..6d519d59a433 100644\n--- a/drivers/net/ethernet/freescale/enetc/ntmp_private.h\n+++ b/drivers/net/ethernet/freescale/enetc/ntmp_private.h\n@@ -103,6 +103,42 @@ struct rsst_req_update {\n \tu8 groups[];\n };\n \n+/* Ingress Port Filter Table Response Data Buffer Format of Query action */\n+struct ipft_resp_query {\n+\t__le32 status;\n+\t__le32 entry_id;\n+\tstruct ipft_keye_data keye;\n+\t__le64 match_count; /* STSE_DATA */\n+\tstruct ipft_cfge_data cfge;\n+} __packed;\n+\n+struct ipft_ak_eid {\n+\t__le32 entry_id;\n+\t__le32 resv[52];\n+};\n+\n+union ipft_access_key {\n+\tstruct ipft_ak_eid eid;\n+\tstruct ipft_keye_data keye;\n+};\n+\n+/* Ingress Port Filter Table Request Data Buffer Format of Update and\n+ * Add actions\n+ */\n+struct ipft_req_ua {\n+\tstruct ntmp_cmn_req_data crd;\n+\tunion ipft_access_key ak;\n+\tstruct ipft_cfge_data cfge;\n+};\n+\n+/* Ingress Port Filter Table Request Data Buffer Format of Query and\n+ * Delete actions\n+ */\n+struct ipft_req_qd {\n+\tstruct ntmp_req_by_eid rbe;\n+\t__le32 resv[52];\n+};\n+\n /* Access Key Format of FDB Table */\n struct fdbt_ak_eid {\n \t__le32 entry_id;\ndiff --git a/include/linux/fsl/ntmp.h b/include/linux/fsl/ntmp.h\nindex a54945dcdc61..efda35e5e22c 100644\n--- a/include/linux/fsl/ntmp.h\n+++ b/include/linux/fsl/ntmp.h\n@@ -7,6 +7,7 @@\n #include <linux/if_ether.h>\n \n #define NTMP_NULL_ENTRY_ID\t\t0xffffffffU\n+#define IPFT_MAX_PLD_LEN\t\t24\n \n struct maft_keye_data {\n \tu8 mac_addr[ETH_ALEN];\n@@ -34,6 +35,7 @@ struct netc_tbl_vers {\n \tu8 fdbt_ver;\n \tu8 vft_ver;\n \tu8 bpt_ver;\n+\tu8 ipft_ver;\n };\n \n struct netc_cbdr {\n@@ -66,6 +68,94 @@ struct maft_entry_data {\n \tstruct maft_cfge_data cfge;\n };\n \n+struct ipft_pld_byte {\n+\tu8 data;\n+\tu8 mask;\n+};\n+\n+struct ipft_keye_data {\n+\t__le16 precedence;\n+\t__le16 resv0[3];\n+\t__le16 frm_attr_flags;\n+#define IPFT_FAF_OVLAN\t\tBIT(2)\n+#define IPFT_FAF_IVLAN\t\tBIT(3)\n+#define IPFT_FAF_IP_HDR\t\tBIT(7)\n+#define IPFT_FAF_IP_VER6\tBIT(8)\n+#define IPFT_FAF_L4_CODE\tGENMASK(11, 10)\n+#define  IPFT_FAF_TCP_HDR\t1\n+#define  IPFT_FAF_UDP_HDR\t2\n+#define  IPFT_FAF_SCTP_HDR\t3\n+#define IPFT_FAF_WOL_MAGIC\tBIT(12)\n+\t__le16 frm_attr_flags_mask;\n+\t__le16 dscp;\n+#define IPFT_DSCP\t\tGENMASK(5, 0)\n+#define IPFT_DSCP_MASK\t\tGENMASK(11, 0)\n+#define IPFT_DSCP_MASK_ALL\t0x3f\n+\t__le16 src_port; /* This field is reserved for ENETC */\n+#define IPFT_SRC_PORT\t\tGENMASK(4, 0)\n+#define IPFT_SRC_PORT_MASK\tGENMASK(9, 5)\n+#define IPFT_SRC_PORT_MASK_ALL\t0x1f\n+\t__be16 outer_vlan_tci;\n+\t__be16 outer_vlan_tci_mask;\n+\tu8 dmac[ETH_ALEN];\n+\tu8 dmac_mask[ETH_ALEN];\n+\tu8 smac[ETH_ALEN];\n+\tu8 smac_mask[ETH_ALEN];\n+\t__be16 inner_vlan_tci;\n+\t__be16 inner_vlan_tci_mask;\n+\t__be16 ethertype;\n+\t__be16 ethertype_mask;\n+\tu8 ip_protocol;\n+\tu8 ip_protocol_mask;\n+\t__le16 resv1[7];\n+\t__be32 ip_src[4];\n+\t__le32 resv2[2];\n+\t__be32 ip_src_mask[4];\n+\t__be16 l4_src_port;\n+\t__be16 l4_src_port_mask;\n+\t__le32 resv3;\n+\t__be32 ip_dst[4];\n+\t__le32 resv4[2];\n+\t__be32 ip_dst_mask[4];\n+\t__be16 l4_dst_port;\n+\t__be16 l4_dst_port_mask;\n+\t__le32 resv5;\n+\tstruct ipft_pld_byte byte[IPFT_MAX_PLD_LEN];\n+};\n+\n+struct ipft_cfge_data {\n+\t__le32 cfg;\n+#define IPFT_IPV\t\tGENMASK(3, 0)\n+#define IPFT_OIPV\t\tBIT(4)\n+#define IPFT_DR\t\t\tGENMASK(6, 5)\n+#define IPFT_ODR\t\tBIT(7)\n+#define IPFT_FLTFA\t\tGENMASK(10, 8)\n+#define  IPFT_FLTFA_DISCARD\t0\n+#define  IPFT_FLTFA_PERMIT\t1\n+/* Redirect is only for switch */\n+#define  IPFT_FLTFA_REDIRECT\t2\n+#define IPFT_IMIRE\t\tBIT(11)\n+#define IPFT_WOLTE\t\tBIT(12)\n+#define IPFT_FLTA\t\tGENMASK(14, 13)\n+#define  IPFT_FLTA_RP\t\t1\n+#define  IPFT_FLTA_IS\t\t2\n+#define  IPFT_FLTA_SI_BITMAP\t3\n+#define IPFT_RPR\t\tGENMASK(16, 15)\n+#define IPFT_CTD\t\tBIT(17)\n+#define IPFT_HR\t\t\tGENMASK(21, 18)\n+#define IPFT_TIMECAPE\t\tBIT(22)\n+#define IPFT_RRT\t\tBIT(23)\n+#define IPFT_BL2F\t\tBIT(24)\n+#define IPFT_EVMEID\t\tGENMASK(31, 28)\n+\t__le32 flta_tgt;\n+};\n+\n+struct ipft_entry_data {\n+\tu32 entry_id; /* hardware assigns entry ID */\n+\tstruct ipft_keye_data keye;\n+\tstruct ipft_cfge_data cfge;\n+};\n+\n struct fdbt_keye_data {\n \tu8 mac_addr[ETH_ALEN]; /* big-endian */\n \t__le16 resv0;\n@@ -155,6 +245,9 @@ 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_ipft_add_entry(struct ntmp_user *user,\n+\t\t\tstruct ipft_entry_data *entry);\n+int ntmp_ipft_delete_entry(struct ntmp_user *user, u32 entry_id);\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@@ -208,6 +301,17 @@ static inline int ntmp_rsst_query_entry(struct ntmp_user *user,\n \treturn 0;\n }\n \n+static inline int ntmp_ipft_add_entry(struct ntmp_user *user,\n+\t\t\t\t      struct ipft_entry_data *entry)\n+{\n+\treturn 0;\n+}\n+\n+static inline int ntmp_ipft_delete_entry(struct ntmp_user *user, u32 entry_id)\n+{\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",
    "prefixes": [
        "v4",
        "net-next",
        "07/14"
    ]
}