get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 2230777,
    "url": "http://patchwork.ozlabs.org/api/patches/2230777/?format=api",
    "web_url": "http://patchwork.ozlabs.org/project/linuxppc-dev/patch/20260430024945.3413973-10-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": "<20260430024945.3413973-10-wei.fang@nxp.com>",
    "list_archive_url": "https://lore.kernel.org/linuxppc-dev/20260430024945.3413973-10-wei.fang@nxp.com/",
    "date": "2026-04-30T02:49:39",
    "name": "[v5,net-next,09/15] net: dsa: add NETC switch tag support",
    "commit_ref": null,
    "pull_url": null,
    "state": "handled-elsewhere",
    "archived": false,
    "hash": "b48be9e59d88d43cbc7883100bc94220028d14b8",
    "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/20260430024945.3413973-10-wei.fang@nxp.com/mbox/",
    "series": [
        {
            "id": 502180,
            "url": "http://patchwork.ozlabs.org/api/series/502180/?format=api",
            "web_url": "http://patchwork.ozlabs.org/project/linuxppc-dev/list/?series=502180",
            "date": "2026-04-30T02:49:30",
            "name": "Add preliminary NETC switch support for i.MX94",
            "version": 5,
            "mbox": "http://patchwork.ozlabs.org/series/502180/mbox/"
        }
    ],
    "comments": "http://patchwork.ozlabs.org/api/patches/2230777/comments/",
    "check": "pending",
    "checks": "http://patchwork.ozlabs.org/api/patches/2230777/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "\n <linuxppc-dev+bounces-20312-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=CpsMmJZI;\n\tdkim-atps=neutral",
            "legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=lists.ozlabs.org\n (client-ip=112.213.38.117; helo=lists.ozlabs.org;\n envelope-from=linuxppc-dev+bounces-20312-incoming=patchwork.ozlabs.org@lists.ozlabs.org;\n receiver=patchwork.ozlabs.org)",
            "lists.ozlabs.org;\n arc=pass smtp.remote-ip=\"2a01:111:f403:c202::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=CpsMmJZI;\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:c202::7;\n helo=gvxpr05cu001.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 [112.213.38.117])\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 4g5dsg4mHSz1yGq\n\tfor <incoming@patchwork.ozlabs.org>; Thu, 30 Apr 2026 12:48:55 +1000 (AEST)",
            "from boromir.ozlabs.org (localhost [127.0.0.1])\n\tby lists.ozlabs.org (Postfix) with ESMTP id 4g5dsY3GcSz2yjN;\n\tThu, 30 Apr 2026 12:48:49 +1000 (AEST)",
            "from GVXPR05CU001.outbound.protection.outlook.com\n (mail-swedencentralazlp170130007.outbound.protection.outlook.com\n [IPv6:2a01:111:f403:c202::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 4g5dsX2BTgz2xn3\n\tfor <linuxppc-dev@lists.ozlabs.org>; Thu, 30 Apr 2026 12:48:48 +1000 (AEST)",
            "from DBBPR04MB7500.eurprd04.prod.outlook.com (2603:10a6:10:1f4::16)\n by PAXPR04MB8608.eurprd04.prod.outlook.com (2603:10a6:102:21b::17) with\n Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9870.18; Thu, 30 Apr\n 2026 02:48:30 +0000",
            "from DBBPR04MB7500.eurprd04.prod.outlook.com\n ([fe80::c291:543b:4bde:cee7]) by DBBPR04MB7500.eurprd04.prod.outlook.com\n ([fe80::c291:543b:4bde:cee7%6]) with mapi id 15.20.9870.020; Thu, 30 Apr 2026\n 02:48:30 +0000"
        ],
        "ARC-Seal": [
            "i=2; a=rsa-sha256; d=lists.ozlabs.org; s=201707; t=1777517329;\n\tcv=pass;\n b=FtUW9nnL4YDchYTQmm2uvzX4Wr98HEmuJuPji1MRQg2C5XSBdQMkv1mVet94prH/g7D0cAxXuBhSJEE6C399pl53Bknw4gd7yGlQ6ff4kzaDDW5rhfgPWK16x1Njwg1oz4+1Q6/s3JhqEtUm3zX2IBdSwkpSSS6VHO81RUo7NMalC6Yz4jxRsBQxGAK4bpIgt1lNenHkfBPEPQCrg/bzlUpZd+yKZnIakCeiFjHQqSpBO1JbARDTCP5RX8LWyXkaDbpL7KSqdp1Cd4qNcC1S7SJaElowSfdhJC7vwuHWinwvgaPr/3fPVZ7jWcAx+N04+vudIuLZmeoZ0D/jqxarWA==",
            "i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;\n b=oaiEex8EFHsFnOED7bZZHA7apcsTAuXQiBov2lFF6kgkQDuOJiKZh/ViOVlEF6ZQtD3LEkMdIMwZiXU2LEW2Vm/yd4Jjk6erzuQnecNuZfA4fXGwI6CgGrBTs6fa3dDz39aYo8hO6uXUqhyXXuuniUgz3A1gkAxNeCIqmiOvmgjx9EF03z2NSGnYofMxiJAKDrw0RRJPM6aZgmXoyRQgDFnxV7cBVrfCNKxnD3VKTRR9V8RN2SUIh1D7xKMhtNSlfJaewhhro8xN6ghAw4fCduu/srQjjtZ9Su7WxUFUzL5tKmfEAiZ08jW5o1Sxo49nXAFO00zcKN31Sgjp7+AtSA=="
        ],
        "ARC-Message-Signature": [
            "i=2; a=rsa-sha256; d=lists.ozlabs.org; s=201707;\n\tt=1777517329; c=relaxed/relaxed;\n\tbh=deJTrk6VOzMiLAfwCesUVnAXxQ414AQl/Rrn2O4AyuI=;\n\th=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References:\n\t Content-Type:MIME-Version;\n b=DmPEqEOLdTMfOJbrG7QlrhA03lqznD88iM7oVZklIGqsJGnC6cpQK+0x6KqvU9cqVCtqZ17T0GjpwbxFIRYt/VR3hN+X3jITfGbC/7//aWLgDb+MpG8SU3hipXhU0YiVF4QEy3OxAuuLCjZncsRXulPsyz4DF+8ogNTlcnDZcjih8S5LtfSR1cl5TXF8Uo84CgAzA92dMCmEdVpF2kf34C7W+X3HAFQYolFDTUfC/QXH8nJUtXVgXowfkniOPKTgCVm0rMJSmiqzpz/DvXC/OYmC4gbyXYiFz9foWwzZrv0Jf/1heqc7v2DYeV0vPJHohpMJ4gmkYOmi5ep0NqK4Uw==",
            "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=deJTrk6VOzMiLAfwCesUVnAXxQ414AQl/Rrn2O4AyuI=;\n b=hLoIA7esqJfkyqM99ZQDrWc3OgyWaidw2OO2lzIy6tk9PPJ5XZN9JO/LhUwHBRXMYRoDVQs09WeBKhPXTt1BwSaXZfoLEgscls0Bn/s731RvFIXcRM8oBSAdY7NNrG/pLpObe5hisdhOIytm4TQPxt0eBO/VF4sPeyWycIROI23+qd24N4Y0TeNK6Ry7p2vJvCJrHdJZYsvg40mn/AHlGW+flJAgA5yUAKAucPULtWAi5iQh/y2p2LOgN1dMpPILloXGkqpgIX7Jd4/y60qYZd1gAppaCvxf0xrE+WqlGDzlnJLg44FRhH+CiWaNkc8X1+/nB0cayZ37Jo0evcbTWg=="
        ],
        "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=CpsMmJZI; dkim-atps=neutral;\n spf=permerror (client-ip=2a01:111:f403:c202::7;\n helo=gvxpr05cu001.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=deJTrk6VOzMiLAfwCesUVnAXxQ414AQl/Rrn2O4AyuI=;\n b=CpsMmJZImJ+9grzb0VbE1FhB5yfiB2ED9U10JQsMAjUdven4/TBn2EXjS++vS3ktVSlokYSD29BFGHRKVEioEZx0xJtv18tRR+zzysFOIx8V2DnQdg5+K0AV8t/F7ikb5Ojr3obF9J2b0Xy95zFyFJPtoxqWpXUB1bKyBoiQw6X+spNmrscGRwZ0LaEKp46EqFAh4NPpQZVLlAQEQvbbgbO2erm2A3i5oBWL4S1RVtYEGESYsiRWZM9mIrzpllmZFI1OH4JBI6/Q8dZFci5Mq/eUouHl0ZLi12gJN/Lvq13Y+pZLPKiPTJYALtsvaiX4lQdoSAQi24hMSHWAgBK95A==",
        "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",
        "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 v5 net-next 09/15] net: dsa: add NETC switch tag support",
        "Date": "Thu, 30 Apr 2026 10:49:39 +0800",
        "Message-Id": "<20260430024945.3413973-10-wei.fang@nxp.com>",
        "X-Mailer": "git-send-email 2.34.1",
        "In-Reply-To": "<20260430024945.3413973-1-wei.fang@nxp.com>",
        "References": "<20260430024945.3413973-1-wei.fang@nxp.com>",
        "Content-Transfer-Encoding": "8bit",
        "Content-Type": "text/plain",
        "X-ClientProxiedBy": "SG2PR01CA0133.apcprd01.prod.exchangelabs.com\n (2603:1096:4:8f::13) To DBBPR04MB7500.eurprd04.prod.outlook.com\n (2603:10a6:10:1f4::16)",
        "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": "DBBPR04MB7500:EE_|PAXPR04MB8608:EE_",
        "X-MS-Office365-Filtering-Correlation-Id": "6c8e62ba-c4b5-4fed-2507-08dea662f653",
        "X-MS-Exchange-SenderADCheck": "1",
        "X-MS-Exchange-AntiSpam-Relay": "0",
        "X-Microsoft-Antispam": "\n\tBCL:0;ARA:13230040|1800799024|366016|19092799006|7416014|52116014|376014|38350700014|921020|56012099003|22082099003|18002099003;",
        "X-Microsoft-Antispam-Message-Info": "\n\trMPZuC0vq8yU8LZmR0ZGpuVdvNz3qK30IU5n9bBCee+bbEi4UOK+sJG4MAKsnJoqX4CnRbPsIq0Tn8roTndUfxFYGpdkaOLamypBaNzNU65d2hse1i5jFnUmsxWmQyVri3OqKcny6p4AVUIHaFNBAwM9yjyTjxgBufzICuwTu+/GRUM03tCzc5D+tZKH8uePpjAgAOWj4TS1Fi+Mt3vhBBcgkom79NW4Jw9wc8pxxJaBRqaJyUjvIhvN6YgJxRmWAQBcjYt4erZvMgOEuFotwZeKJMyOodvgKLvlDOfs4lKVgvJfEGT3nbE7lxJdpgGY8XZxWvcIWDduAHimdqozZPEbt19XH8ejAPTH1qp3oh5ToZOTUUYsmrJA6tpdW5o+vXlgA4K68kuK0906Z6TOx4TlnkC7W7JF/HT+CUJpA6VJFNxDaqt7cOVRTEQrGoTQC5svHnuXM3SK7wt6fKxZBe6A3hFwLooxVGKsPMq39lJLLd3RBpRXt+HpHfHxp82+PU9TvY350SxD3TvYatwtqnX2T5BWtl2fativ6AZxrIpP7N6V3gqycHt8MsjdS7JsP4x6FN/r/YjvdXIavvJQt2uGM6zwv1feBmh9PNReiKePcWlsq74X0OPer1fH/2BoBs/AD5UjaeVDDLPibE2/pPfD2Qp2lFjKWDZ0supedVOb5slKPAEQDO0D/vGt5/VrnXK6gCFRqPRP3VizaClQriso46khkVPr3owhqnvmOqECb2+MZ+Zkyy+5JaTTDtUnnUyqVPljgwLu8t20BsHEItnXRdMLfCGtwAu4wkZIvY7m6Akq81X589yW6fi+OaW2",
        "X-Forefront-Antispam-Report": "\n\tCIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DBBPR04MB7500.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(366016)(19092799006)(7416014)(52116014)(376014)(38350700014)(921020)(56012099003)(22082099003)(18002099003);DIR:OUT;SFP:1101;",
        "X-MS-Exchange-AntiSpam-MessageData-ChunkCount": "1",
        "X-MS-Exchange-AntiSpam-MessageData-0": "\n q0gzYkLd/g/xDKelKzMNKwvVqWK7Fow7QmcVaoB/W9OArFf9CIO128wLFYA1iWwBwZtixKvZHTv1LohIfFdavboYVeMb6GSgtt9pz2Wk3TTzqGG8ySRKXS1baToZDTCoCBPv9dmsUbAiijjLM+WkvYIGDCAKt2f6alZisBOeIUyu5EN5+kb8rJbH+yJtgVL463Ie0BSo7X54srIYebTmJu7+xhQ9JUEmf28al8B8oXexoGwp8y3VYY/yioiUIJ6LfslZM/FOQBR90ZM0H5TxwDI6I296EDaETbYtcqEk/AzQjhWVT4qi6FHTvai0M04HN/EnShyua4BZpNsRQqkdGKhEE+fsaDsObmizbZgFYpnVG0zwx2TmOlD2zA9dUMTmndtGcIubPxmQrED86nLtAmIag3kcmycvXjXMFp9BiwyPxQy8jKii+ldtVDXHFIAEji1f2H36DA91x3I9hKfR0gJWvwqaN26qQ9U5/ocyPJ69+CpFOS/17Id4wnO/jJ71BNBOv9kmOEJx/sZVpNCgiEVvXQf542FxaIcNo8TxUFEPe/UU3/snUTHmT1oQ8vHdoCwtTDBh0sPw+RaXDqvLHCLOl06I6Ab50Gnza08lLbqGnn78LTXMQggx/Sz3lJyq6nxPiTWFG/LnrLhRgnbMHlS+2Rw6Pc+mq3wlFpaKAqwzppRMw7XsIx2CbmZDi0XtgA+wfWrJW1FeW6kIrAwShb4zRvUWqgbjBESow3Xi1AG3hU5M1rTCMup4rClwn/4rxDHWPCFVvoccBW8z5lviE48GJ1loEUNrVlxCUfEgtijlMgrxUuXwI4oGlVw2e3gX6hEFLxEiyTEwW1Vjph/Zttvo3BLMlewSxrVj22BcsYzrOlw73FPFiKsBuuaejlSa67i/zMNw65/rUqtPwxjmjfrmUrfWtpXPMpXxTFEtb6pJNg6ND708tsFYGXoHDyWTEfiZdiMdUP9egJUYpDTrpPyyAQZzE4M7n/jgocf2cdlYWIu8m24eEgMtAYTvT2v2HnxdcaB+mddoEqjq5s3vmI0KKiARJOt2qY0ZidKqukv+ppVFJWIn8QYc4Dj+DEd3KjsWSSJ4OKAsAHiZRHhCr1rWFHT8eTWkns4Isspm/7GNFLcF3O7EBiMNIdvcASndNII2SdOCFuN0c8DUtmsaizwlNMkaEmkydK/8hoBijkeOCzx3cSSJZZUN6kYguf55tTU1XPofhlsZT6E5Clumafi4ChCXwEIaSrM+nq7lhwocUmovuHuGEFa6iXnOkNhtIl0mdZAgZXNfkF35WIPpNg71aZwVNNeF9a6i6/4p+7lDTUkJzhKqo7P6oRqTSFHq1kG2zDI8ulGDX67rmoNzoBhra58E+ZrM6KeVTYZrrVhVxlcMFJ0P7JiuSm1nenZWippifMJdPbOapkOBn/Qg4ioz/34OUOgMQcIx7aq+Go/3u+SvnqMY3VFqtfo7xIJF/9fxy66knqElvAKj///bMqc6NCNGlCCPL9l50/Imq0YELRQ7r3iPUfAlZnww0Zxk4Bg3lxWqHjQgOsnqK/7P6YBfSLmWOrbGEvGlf1ObXGFcOR9bjC6mIf9EMDpUBgxJHbQkOXD96W67GiO89ll0xtDFvjDv9GppG2plXmRWYnIdmxf9e+H9GGQoKiS2S74u3LWj0NYb4WS3zQuKCj/XdDarq62UQFobiqi6JJ8f9iPeimU3s4EtUhENHX/WpzzZLiqBhHnxYusVSolQA6jZzQ==",
        "X-OriginatorOrg": "nxp.com",
        "X-MS-Exchange-CrossTenant-Network-Message-Id": "\n 6c8e62ba-c4b5-4fed-2507-08dea662f653",
        "X-MS-Exchange-CrossTenant-AuthSource": "DBBPR04MB7500.eurprd04.prod.outlook.com",
        "X-MS-Exchange-CrossTenant-AuthAs": "Internal",
        "X-MS-Exchange-CrossTenant-OriginalArrivalTime": "30 Apr 2026 02:48:30.6308\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 15916DwJFks4zgARqv2DO6khSyjQkNP1n4Ss9vLqm5QYYiMCxlYL1olrJWTVyxVjto2BlWfCEqv4K5ONgGNa6g==",
        "X-MS-Exchange-Transport-CrossTenantHeadersStamped": "PAXPR04MB8608",
        "X-Spam-Status": "No, score=-0.2 required=3.0 tests=ARC_SIGNED,ARC_VALID,\n\tDKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,SPF_HELO_NONE,\n\tT_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 NXP NETC switch tag is a proprietary header added to frames after the\nsource MAC address. The switch tag has 3 types, and each type has 1 ~ 4\nsubtypes, the details are as follows.\n\nForward NXP switch tag (Type=0): Represents forwarded frames.\n  - SubType = 0 - Normal frame processing.\n\nTo_Port NXP switch tag (Type=1): Represents frames that are to be sent\nto a specific switch port.\n  - SubType = 0. No request to perform timestamping.\n  - SubType = 1. Request to perform one-step timestamping.\n  - SubType = 2. Request to perform two-step timestamping.\n  - SubType = 3. Request to perform both one-step timestamping and\n    two-step timestamping.\n\nTo_Host NXP switch tag (Type=2): Represents frames redirected or copied\nto the switch management port.\n  - SubType = 0. Received frames redirected or copied to the switch\n    management port.\n  - SubType = 1. Received frames redirected or copied to the switch\n    management port with captured timestamp at the switch port where\n    the frame was received.\n  - SubType = 2. Transmit timestamp response (two-step timestamping).\n\nIn addition, the length of different type switch tag is different, the\nminimum length is 6 bytes, the maximum length is 14 bytes. Currently,\nForward tag, SubType 0 of To_Port tag and Subtype 0 of To_Host tag are\nsupported. More tags will be supported in the future.\n\nSigned-off-by: Wei Fang <wei.fang@nxp.com>\n---\n include/linux/dsa/tag_netc.h  |  14 +++\n include/net/dsa.h             |   2 +\n include/uapi/linux/if_ether.h |   1 +\n net/dsa/Kconfig               |  10 ++\n net/dsa/Makefile              |   1 +\n net/dsa/tag_netc.c            | 193 ++++++++++++++++++++++++++++++++++\n 6 files changed, 221 insertions(+)\n create mode 100644 include/linux/dsa/tag_netc.h\n create mode 100644 net/dsa/tag_netc.c",
    "diff": "diff --git a/include/linux/dsa/tag_netc.h b/include/linux/dsa/tag_netc.h\nnew file mode 100644\nindex 000000000000..fe964722e5b0\n--- /dev/null\n+++ b/include/linux/dsa/tag_netc.h\n@@ -0,0 +1,14 @@\n+/* SPDX-License-Identifier: GPL-2.0\n+ *\n+ * Copyright 2025-2026 NXP\n+ */\n+\n+#ifndef __NET_DSA_TAG_NETC_H\n+#define __NET_DSA_TAG_NETC_H\n+\n+#include <linux/skbuff.h>\n+#include <net/dsa.h>\n+\n+#define NETC_TAG_MAX_LEN\t\t\t14\n+\n+#endif\ndiff --git a/include/net/dsa.h b/include/net/dsa.h\nindex 8b6d34e8a6f0..f199781594db 100644\n--- a/include/net/dsa.h\n+++ b/include/net/dsa.h\n@@ -58,6 +58,7 @@ struct tc_action;\n #define DSA_TAG_PROTO_YT921X_VALUE\t\t30\n #define DSA_TAG_PROTO_MXL_GSW1XX_VALUE\t\t31\n #define DSA_TAG_PROTO_MXL862_VALUE\t\t32\n+#define DSA_TAG_PROTO_NETC_VALUE\t\t33\n \n enum dsa_tag_protocol {\n \tDSA_TAG_PROTO_NONE\t\t= DSA_TAG_PROTO_NONE_VALUE,\n@@ -93,6 +94,7 @@ enum dsa_tag_protocol {\n \tDSA_TAG_PROTO_YT921X\t\t= DSA_TAG_PROTO_YT921X_VALUE,\n \tDSA_TAG_PROTO_MXL_GSW1XX\t= DSA_TAG_PROTO_MXL_GSW1XX_VALUE,\n \tDSA_TAG_PROTO_MXL862\t\t= DSA_TAG_PROTO_MXL862_VALUE,\n+\tDSA_TAG_PROTO_NETC\t\t= DSA_TAG_PROTO_NETC_VALUE,\n };\n \n struct dsa_switch;\ndiff --git a/include/uapi/linux/if_ether.h b/include/uapi/linux/if_ether.h\nindex df9d44a11540..fb5efc8e06cc 100644\n--- a/include/uapi/linux/if_ether.h\n+++ b/include/uapi/linux/if_ether.h\n@@ -123,6 +123,7 @@\n #define ETH_P_DSA_A5PSW\t0xE001\t\t/* A5PSW Tag Value [ NOT AN OFFICIALLY REGISTERED ID ] */\n #define ETH_P_IFE\t0xED3E\t\t/* ForCES inter-FE LFB type */\n #define ETH_P_AF_IUCV   0xFBFB\t\t/* IBM af_iucv [ NOT AN OFFICIALLY REGISTERED ID ] */\n+#define ETH_P_NXP_NETC  0xFD3A\t\t/* NXP NETC DSA [ NOT AN OFFICIALLY REGISTERED ID ] */\n \n #define ETH_P_802_3_MIN\t0x0600\t\t/* If the value in the ethernet type is more than this value\n \t\t\t\t\t * then the frame is Ethernet II. Else it is 802.3 */\ndiff --git a/net/dsa/Kconfig b/net/dsa/Kconfig\nindex 5ed8c704636d..d5e725b90d78 100644\n--- a/net/dsa/Kconfig\n+++ b/net/dsa/Kconfig\n@@ -125,6 +125,16 @@ config NET_DSA_TAG_KSZ\n \t  Say Y if you want to enable support for tagging frames for the\n \t  Microchip 8795/937x/9477/9893 families of switches.\n \n+config NET_DSA_TAG_NETC\n+\ttristate \"Tag driver for NXP NETC switches\"\n+\thelp\n+\t  Say Y or M if you want to enable support for the NXP Switch Tag (NST),\n+\t  as implemented by NXP NETC switches having version 4.3 or later. The\n+\t  switch tag is a proprietary header added to frames after the source\n+\t  MAC address, it has 3 types and each type has different subtypes, so\n+\t  its length depends on the type and subtype of the tag, the maximum\n+\t  length is 14 bytes.\n+\n config NET_DSA_TAG_OCELOT\n \ttristate \"Tag driver for Ocelot family of switches, using NPI port\"\n \tselect PACKING\ndiff --git a/net/dsa/Makefile b/net/dsa/Makefile\nindex bf7247759a64..b8c2667cd14a 100644\n--- a/net/dsa/Makefile\n+++ b/net/dsa/Makefile\n@@ -30,6 +30,7 @@ obj-$(CONFIG_NET_DSA_TAG_LAN9303) += tag_lan9303.o\n obj-$(CONFIG_NET_DSA_TAG_MTK) += tag_mtk.o\n obj-$(CONFIG_NET_DSA_TAG_MXL_862XX) += tag_mxl862xx.o\n obj-$(CONFIG_NET_DSA_TAG_MXL_GSW1XX) += tag_mxl-gsw1xx.o\n+obj-$(CONFIG_NET_DSA_TAG_NETC) += tag_netc.o\n obj-$(CONFIG_NET_DSA_TAG_NONE) += tag_none.o\n obj-$(CONFIG_NET_DSA_TAG_OCELOT) += tag_ocelot.o\n obj-$(CONFIG_NET_DSA_TAG_OCELOT_8021Q) += tag_ocelot_8021q.o\ndiff --git a/net/dsa/tag_netc.c b/net/dsa/tag_netc.c\nnew file mode 100644\nindex 000000000000..c2e4aa7e5ec2\n--- /dev/null\n+++ b/net/dsa/tag_netc.c\n@@ -0,0 +1,193 @@\n+// SPDX-License-Identifier: GPL-2.0\n+/*\n+ * Copyright 2025-2026 NXP\n+ */\n+\n+#include <linux/dsa/tag_netc.h>\n+\n+#include \"tag.h\"\n+\n+#define NETC_NAME\t\t\t\"nxp_netc\"\n+\n+/* Forward NXP switch tag */\n+#define NETC_TAG_FORWARD\t\t0\n+\n+/* To_Port NXP switch tag */\n+#define NETC_TAG_TO_PORT\t\t1\n+/* SubType0: No request to perform timestamping */\n+#define NETC_TAG_TP_SUBTYPE0\t\t0\n+\n+/* To_Host NXP switch tag */\n+#define NETC_TAG_TO_HOST\t\t2\n+/* SubType0: frames redirected or copied to CPU port */\n+#define NETC_TAG_TH_SUBTYPE0\t\t0\n+/* SubType1: frames redirected or copied to CPU port with timestamp */\n+#define NETC_TAG_TH_SUBTYPE1\t\t1\n+/* SubType2: Transmit timestamp response (two-step timestamping) */\n+#define NETC_TAG_TH_SUBTYPE2\t\t2\n+\n+/* NETC switch tag lengths */\n+#define NETC_TAG_FORWARD_LEN\t\t6\n+#define NETC_TAG_TP_SUBTYPE0_LEN\t6\n+#define NETC_TAG_TH_SUBTYPE0_LEN\t6\n+#define NETC_TAG_TH_SUBTYPE1_LEN\t14\n+#define NETC_TAG_TH_SUBTYPE2_LEN\t14\n+#define NETC_TAG_CMN_LEN\t\t5\n+\n+#define NETC_TAG_SUBTYPE\t\tGENMASK(3, 0)\n+#define NETC_TAG_TYPE\t\t\tGENMASK(7, 4)\n+#define NETC_TAG_QV\t\t\tBIT(0)\n+#define NETC_TAG_IPV\t\t\tGENMASK(4, 2)\n+#define NETC_TAG_SWITCH\t\t\tGENMASK(2, 0)\n+#define NETC_TAG_PORT\t\t\tGENMASK(7, 3)\n+\n+struct netc_tag_cmn {\n+\t__be16 tpid;\n+\tu8 type;\n+\tu8 qos;\n+\tu8 switch_port;\n+} __packed;\n+\n+static void netc_fill_common_tag(struct netc_tag_cmn *tag, u8 type,\n+\t\t\t\t u8 subtype, u8 sw_id, u8 port, u8 ipv)\n+{\n+\ttag->tpid = htons(ETH_P_NXP_NETC);\n+\ttag->type = FIELD_PREP(NETC_TAG_TYPE, type) |\n+\t\t    FIELD_PREP(NETC_TAG_SUBTYPE, subtype);\n+\ttag->qos = NETC_TAG_QV | FIELD_PREP(NETC_TAG_IPV, ipv);\n+\ttag->switch_port = FIELD_PREP(NETC_TAG_SWITCH, sw_id) |\n+\t\t\t   FIELD_PREP(NETC_TAG_PORT, port);\n+}\n+\n+static void *netc_fill_common_tp_tag(struct sk_buff *skb,\n+\t\t\t\t     struct net_device *ndev,\n+\t\t\t\t     u8 subtype, int tag_len)\n+{\n+\tstruct dsa_port *dp = dsa_user_to_port(ndev);\n+\tu16 queue = skb_get_queue_mapping(skb);\n+\ts8 ipv = netdev_txq_to_tc(ndev, queue);\n+\tvoid *tag;\n+\n+\tif (unlikely(ipv < 0))\n+\t\tipv = 0;\n+\n+\tskb_push(skb, tag_len);\n+\tdsa_alloc_etype_header(skb, tag_len);\n+\n+\ttag = dsa_etype_header_pos_tx(skb);\n+\tmemset(tag + NETC_TAG_CMN_LEN, 0, tag_len - NETC_TAG_CMN_LEN);\n+\t/* As 'dsa,member' is a required property for NETC switch, the\n+\t * member is used to specify the switch ID (thus the hardware\n+\t * switch ID and the software switch ID are consistent), which\n+\t * is a non-zero value, so dp->ds->index will not 0 here.\n+\t */\n+\tnetc_fill_common_tag(tag, NETC_TAG_TO_PORT, subtype,\n+\t\t\t     dp->ds->index, dp->index, ipv);\n+\n+\treturn tag;\n+}\n+\n+static void netc_fill_tp_tag_subtype0(struct sk_buff *skb,\n+\t\t\t\t      struct net_device *ndev)\n+{\n+\tnetc_fill_common_tp_tag(skb, ndev, NETC_TAG_TP_SUBTYPE0,\n+\t\t\t\tNETC_TAG_TP_SUBTYPE0_LEN);\n+}\n+\n+/* Currently only support To_Port tag, subtype 0 */\n+static struct sk_buff *netc_xmit(struct sk_buff *skb,\n+\t\t\t\t struct net_device *ndev)\n+{\n+\tnetc_fill_tp_tag_subtype0(skb, ndev);\n+\n+\treturn skb;\n+}\n+\n+static int netc_get_rx_tag_len(int rx_type)\n+{\n+\tint type = FIELD_GET(NETC_TAG_TYPE, rx_type);\n+\n+\tif (type == NETC_TAG_TO_HOST) {\n+\t\tu8 subtype = rx_type & NETC_TAG_SUBTYPE;\n+\n+\t\tif (subtype == NETC_TAG_TH_SUBTYPE1)\n+\t\t\treturn NETC_TAG_TH_SUBTYPE1_LEN;\n+\t\telse if (subtype == NETC_TAG_TH_SUBTYPE2)\n+\t\t\treturn NETC_TAG_TH_SUBTYPE2_LEN;\n+\t\telse\n+\t\t\treturn NETC_TAG_TH_SUBTYPE0_LEN;\n+\t}\n+\n+\treturn NETC_TAG_FORWARD_LEN;\n+}\n+\n+static struct sk_buff *netc_rcv(struct sk_buff *skb,\n+\t\t\t\tstruct net_device *ndev)\n+{\n+\tstruct netc_tag_cmn *tag_cmn;\n+\tint tag_len, sw_id, port;\n+\n+\tif (unlikely(!pskb_may_pull(skb, NETC_TAG_MAX_LEN)))\n+\t\treturn NULL;\n+\n+\ttag_cmn = dsa_etype_header_pos_rx(skb);\n+\ttag_len = netc_get_rx_tag_len(tag_cmn->type);\n+\n+\tif (ntohs(tag_cmn->tpid) != ETH_P_NXP_NETC) {\n+\t\tdev_warn_ratelimited(&ndev->dev, \"Unknown TPID 0x%04x\\n\",\n+\t\t\t\t     ntohs(tag_cmn->tpid));\n+\n+\t\treturn NULL;\n+\t}\n+\n+\tif (tag_cmn->qos & NETC_TAG_QV)\n+\t\tskb->priority = FIELD_GET(NETC_TAG_IPV, tag_cmn->qos);\n+\n+\tsw_id = FIELD_GET(NETC_TAG_SWITCH, tag_cmn->switch_port);\n+\t/* ENETC VEPA switch ID (0) is not supported yet */\n+\tif (!sw_id) {\n+\t\tdev_warn_ratelimited(&ndev->dev,\n+\t\t\t\t     \"VEPA switch ID is not supported yet\\n\");\n+\n+\t\treturn NULL;\n+\t}\n+\n+\tport = FIELD_GET(NETC_TAG_PORT, tag_cmn->switch_port);\n+\tskb->dev = dsa_conduit_find_user(ndev, sw_id, port);\n+\tif (!skb->dev)\n+\t\treturn NULL;\n+\n+\tif (tag_cmn->type == NETC_TAG_FORWARD)\n+\t\tdsa_default_offload_fwd_mark(skb);\n+\n+\t/* Remove Switch tag from the frame */\n+\tskb_pull_rcsum(skb, tag_len);\n+\tdsa_strip_etype_header(skb, tag_len);\n+\n+\treturn skb;\n+}\n+\n+static void netc_flow_dissect(const struct sk_buff *skb, __be16 *proto,\n+\t\t\t      int *offset)\n+{\n+\tstruct netc_tag_cmn *tag_cmn = (struct netc_tag_cmn *)(skb->data - 2);\n+\tint tag_len = netc_get_rx_tag_len(tag_cmn->type);\n+\n+\t*offset = tag_len;\n+\t*proto = ((__be16 *)skb->data)[(tag_len / 2) - 1];\n+}\n+\n+static const struct dsa_device_ops netc_netdev_ops = {\n+\t.name\t\t\t= NETC_NAME,\n+\t.proto\t\t\t= DSA_TAG_PROTO_NETC,\n+\t.xmit\t\t\t= netc_xmit,\n+\t.rcv\t\t\t= netc_rcv,\n+\t.needed_headroom\t= NETC_TAG_MAX_LEN,\n+\t.flow_dissect\t\t= netc_flow_dissect,\n+};\n+\n+MODULE_DESCRIPTION(\"DSA tag driver for NXP NETC switch family\");\n+MODULE_LICENSE(\"GPL\");\n+\n+MODULE_ALIAS_DSA_TAG_DRIVER(DSA_TAG_PROTO_NETC, NETC_NAME);\n+module_dsa_tag_driver(netc_netdev_ops);\n",
    "prefixes": [
        "v5",
        "net-next",
        "09/15"
    ]
}