Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/patches/2216218/?format=api
{ "id": 2216218, "url": "http://patchwork.ozlabs.org/api/patches/2216218/?format=api", "web_url": "http://patchwork.ozlabs.org/project/linuxppc-dev/patch/20260326062917.3552334-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": "<20260326062917.3552334-10-wei.fang@nxp.com>", "list_archive_url": "https://lore.kernel.org/linuxppc-dev/20260326062917.3552334-10-wei.fang@nxp.com/", "date": "2026-03-26T06:29:12", "name": "[v3,net-next,09/14] net: dsa: add NETC switch tag support", "commit_ref": null, "pull_url": null, "state": "handled-elsewhere", "archived": false, "hash": "7ff4b6e563979641e4044f3ebee4ab08f849404c", "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/20260326062917.3552334-10-wei.fang@nxp.com/mbox/", "series": [ { "id": 497537, "url": "http://patchwork.ozlabs.org/api/series/497537/?format=api", "web_url": "http://patchwork.ozlabs.org/project/linuxppc-dev/list/?series=497537", "date": "2026-03-26T06:29:03", "name": "Add preliminary NETC switch support for i.MX94", "version": 3, "mbox": "http://patchwork.ozlabs.org/series/497537/mbox/" } ], "comments": "http://patchwork.ozlabs.org/api/patches/2216218/comments/", "check": "pending", "checks": "http://patchwork.ozlabs.org/api/patches/2216218/checks/", "tags": {}, "related": [], "headers": { "Return-Path": "\n <linuxppc-dev+bounces-18804-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=g9EDShdW;\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-18804-incoming=patchwork.ozlabs.org@lists.ozlabs.org;\n receiver=patchwork.ozlabs.org)", "lists.ozlabs.org;\n arc=pass smtp.remote-ip=\"2a01:111:f403:c200::1\" 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=g9EDShdW;\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:c200::1;\n helo=db3pr0202cu003.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 4fhDPd2C6lz1y1G\n\tfor <incoming@patchwork.ozlabs.org>; Thu, 26 Mar 2026 17:28:53 +1100 (AEDT)", "from boromir.ozlabs.org (localhost [127.0.0.1])\n\tby lists.ozlabs.org (Postfix) with ESMTP id 4fhDPP2tgbz2yjw;\n\tThu, 26 Mar 2026 17:28:41 +1100 (AEDT)", "from DB3PR0202CU003.outbound.protection.outlook.com\n (mail-northeuropeazlp170100001.outbound.protection.outlook.com\n [IPv6:2a01:111:f403:c200::1])\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 4fhDPN2zmXz2yvc\n\tfor <linuxppc-dev@lists.ozlabs.org>; Thu, 26 Mar 2026 17:28:40 +1100 (AEDT)", "from PAXPR04MB8510.eurprd04.prod.outlook.com (2603:10a6:102:211::7)\n by AM9PR04MB8355.eurprd04.prod.outlook.com (2603:10a6:20b:3b7::20) with\n Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9745.20; Thu, 26 Mar\n 2026 06:28:26 +0000", "from PAXPR04MB8510.eurprd04.prod.outlook.com\n ([fe80::b476:c19a:24cd:3694]) by PAXPR04MB8510.eurprd04.prod.outlook.com\n ([fe80::b476:c19a:24cd:3694%3]) with mapi id 15.20.9745.019; Thu, 26 Mar 2026\n 06:28:26 +0000" ], "ARC-Seal": [ "i=2; a=rsa-sha256; d=lists.ozlabs.org; s=201707; t=1774506521;\n\tcv=pass;\n b=oNttRq3Ozhi1h+jQhpAvBJD0hiATwlkjWzn4dzN4lgI7XEs4hQ9avYRj+X4GdJucZokp+CvPge+6neDpy/qJPAYUOfGJeic5TQdkClUBK4/8HvOUYQIefOBTYrwOyllOdFVxcqe2xbmg0wF5HIOsuS8Rk/ZKGj1RO1Y0sjXauAgXp0WIBr0Y7/FKMnol4EZsLpBBql0OahEhtNkbATRd/HgiIoLmFGqNMThrFmAkfyw7oAlppnspYIuCkJ+DjpJkBux3/tJQiUwG8AmVALNN6OIpleVnQ9a39gQdXFCu0rhb0KJWt2WeChCUaRnZNjv3qXoZRGtIylusA2POJBNKLw==", "i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;\n b=isftSmAaxKCSxlwsx88lpmgOSzvRpJG3V7HCjbEyp52LzmB0VBWcSmjmZdtQk/1E51SupdRfW8Ampc9wAUnCaOAwb4G8RR1fWgBDMfx//BjFKKun4VyvEoCNQrZXiepBUDqsGCAdOnSMthMl23+XZhFNoqxBWCIlIBj0Equ8rD8dgwjOs8KQ6v5m8yBOTeHOEOFdM6+TKc8Qibb5EEFu8QIYE2ohW+U/IcFPxt3fqnPIygkSHQYMHTsO5u0zVzZIhs1AxdopiJEI5zcdLXfydVBblsM1F61Kdp6msaFvimbPbMoB0Hf6pj3A+mvLl//BCjhWQ78AUfUvVGhKk/kvqw==" ], "ARC-Message-Signature": [ "i=2; a=rsa-sha256; d=lists.ozlabs.org; s=201707;\n\tt=1774506521; c=relaxed/relaxed;\n\tbh=enC+UQAaNN7bbyUaQSWZ4TmvKi8/JoljnoJJAwDPrrw=;\n\th=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References:\n\t Content-Type:MIME-Version;\n b=Es0hf8sMiI6klH8TToT2rMlhDzPlF2Fu01A1nAKvGWdHL+tyZ+JrlqT0vGKJutpMHghV6KlIX78uAAM+7Tk0NPZtqABpLN5+veql8JO4ltoRhJhxi/SWRp/BXMPtDfNxfs5KGw3k5rVXLdeRZXJUsG0t+DVdOwQPoVwA9vZsXiMh/dAiVfhzFcy6UBp7zR0qFtJ1ZgIQ5AW9NTDQU7s5qdF3muMLGeklp1WUqJAKag3daufh3TJVkaXzkXUsqwZx5EYKZ2oLoWpOsCO5HBIl8e7K92bDBDXIMAZzJLitXd/i5hnGXKk3vNZreRttbrOI/toMuAt821fvdRE8rAjYuA==", "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=enC+UQAaNN7bbyUaQSWZ4TmvKi8/JoljnoJJAwDPrrw=;\n b=wIZJtVXAuJLGBRr9YRtTWAy3KlsUW/+kY0dkf74qx716+VXGB/otlBpGQabCLCInKiGXBVRZ8/o/CnxdKuG1mW1NBSREiwoF/EkVZZM4mZs9O1l8/fVnG5Icj1qOBI3PlPRPnf/o+mChY1UsD8vYBKuFJ9EILni8Hft5OtL6/lMiqIB1YeSp14Dscrobpbrzb+kelOv2NMOX/280qVZYj4p+3m19gaL0WtvxeKmuLkwEz5w29xK5IWH21SWN0i/pv20BUDB+gNXXaNNxZWS30sNAfgz17AVij9OoDzT8Ohpq6UbAm7Byjs9/wfdVsF114FO4zYTT8tMfPskZ2Mp0xw==" ], "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=g9EDShdW; dkim-atps=neutral;\n spf=permerror (client-ip=2a01:111:f403:c200::1;\n helo=db3pr0202cu003.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=enC+UQAaNN7bbyUaQSWZ4TmvKi8/JoljnoJJAwDPrrw=;\n b=g9EDShdW8vsihVXFAGxcmUzT7V9ElF0pFylCYOclxTyzY5DSF5s1uzEyT9xDdGMhwWU3cvcIzsFQNIKDR1Fc4+D6Ui7PqiToMrczkQsa8TghFmM4lEEU7AMxDOIAXYzKf9SpEBcJpAZQ9zN9/KhYyrunPePWa2FsHpWww2ww8m3F/Jxln2jV6gyqgoGqPJBYxAtaTHksJML9zDWUBP87xjOdVd7vMrzZKut4sZEm7ptQ58RTvWpcSM7n1/EbC+YOSMCoWRCgmWV6QH5r8Mx214I7oi0pm9GNXdoD7BFX3zzYMNEn7H+EP5f/VNLNOs8rbOvEK417x6xsU6YKQBnHjw==", "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 v3 net-next 09/14] net: dsa: add NETC switch tag support", "Date": "Thu, 26 Mar 2026 14:29:12 +0800", "Message-Id": "<20260326062917.3552334-10-wei.fang@nxp.com>", "X-Mailer": "git-send-email 2.34.1", "In-Reply-To": "<20260326062917.3552334-1-wei.fang@nxp.com>", "References": "<20260326062917.3552334-1-wei.fang@nxp.com>", "Content-Transfer-Encoding": "8bit", "Content-Type": "text/plain", "X-ClientProxiedBy": "MA5PR01CA0046.INDPRD01.PROD.OUTLOOK.COM\n (2603:1096:a01:1d6::15) To PAXPR04MB8510.eurprd04.prod.outlook.com\n (2603:10a6:102:211::7)", "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": "PAXPR04MB8510:EE_|AM9PR04MB8355:EE_", "X-MS-Office365-Filtering-Correlation-Id": "e953aa2b-bbd1-48c5-aea9-08de8b00e33c", "X-MS-Exchange-SenderADCheck": "1", "X-MS-Exchange-AntiSpam-Relay": "0", "X-Microsoft-Antispam": "\n\tBCL:0;ARA:13230040|1800799024|366016|19092799006|376014|7416014|52116014|38350700014|921020|22082099003|56012099003|18002099003;", "X-Microsoft-Antispam-Message-Info": "\n\twXOPhC7QP9ucYyUftsdzY09WXhby6XbFEuSbE6MMX83xfkD0IZHr6h+LZyVnlnI6IQYLstUWddQhNs1TtVoqIaDZcxAS+QFXLCwAtPofAtEUYq8kJKlPzq+HlDc0e55B2dp4ePKfXKWZAWTqM/3r7ygbopnQq8GafDdH9VPuWJvvQwA3RhVr0yk4T9/SqEE3rUI9BVknzwtor1tCoPHJLKzfHth/JTfyJ83I3u9xfm676x2mL9bq+xCMv2Fq/M8VbLPtskk3ZCeqqNcmVbRZDS32GyNKAqd79+idljjZutKU2YkbzJAzbK4S9PwotAQjfIAkcFj6zxArbqdP/4o67rQ0rZg4HR6hkxXKTevrFwlWtS/kHPLlrOEhhPOxyotVwp/IgbKC8lIxQdO7u6EOm+poCBMgMHa3m13BnnYhoQpktVVOn6kjADjEoXwz4CUhfZDuVibY1F9nvpYD9XmkGGOFE9OOkoklYT7bEw+4bauzeFbvPiDq3jRxMBfeMZRpH0IRKxod4+qOAiPWbQxp0cTbbnPbwIVLPHUsYX+3+M8wZ+sBgdpfIJwErtxFASiwKP89PMp9xORjFziINZr8BtmX2Ho21xtlGTvrAUy/LPNG3DIe7uXqF25U81QMpmYgEqH5JFAVX3GRxH3/z4USS+3FmVfJdI/twIPMeCpBmXmtdkcSn7I4UNujZ3D+otiXgXEoSH2FcEx6lIA+NOlNP938x3tOKmLvUFySe4HvebFhmR5BeV+MUpeqxLdrXKCICZQklzea+sRMv1CjGGb/tKOX+CVQpckAO1Hrir8s7VxHx+ybFxK2AifBQo/UtaVC", "X-Forefront-Antispam-Report": "\n\tCIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAXPR04MB8510.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(366016)(19092799006)(376014)(7416014)(52116014)(38350700014)(921020)(22082099003)(56012099003)(18002099003);DIR:OUT;SFP:1101;", "X-MS-Exchange-AntiSpam-MessageData-ChunkCount": "1", "X-MS-Exchange-AntiSpam-MessageData-0": "\n 123a8Y/jVrPtZynDhYEdGUf80ql2FgnXwwRQNHHXyTZ7Ye8MZ4Ia0lY5UfEbFdanr3q0kFMq4DV98uKU9ivSxWvJnkMMStArG4tg9v2tVvdSS7EymV0IHpZXeRw9LwxPcL0bArQHAlQOo0+0XQIVwKZXlmectsK61Mg2VLAM7TzreVqeQmvsgX4yGdmCO88x8nK6jR7YJRBx2L57eIV55ZRnM+0SLa78OtNS+1mR8/KWTvax5wYG+dSdHXaMMJpyh/ouX0fyeuM/3JuILX5vk/IJ+7GiNC8raukzfrVk4XOkj4lZYxmBvccQCAk4BXyvMpGQpNpZI9hnAkmxvbF3Oq+Svu7bgh3enm3whT3qBn2OhuIyX6FeFEiWjmCuO5fwHkmBG/NVPv6oRVR/TZnsQqWDYA+G4VYY8GOIWNWV6um3GvMotqcMkCzUDZVxugxNNIG2qwpDkpURHHnVoDH97pxbMDr2WkAjsWuC7n/5sbX0DkgChTQBW7MXyZCfpARxeYKJz1rmSsj3iLnTnmepqFg5eQFDU0/SSOoQwQJYXmzkJVstTwM9fWD7qUi8xSypq+i9zHQlV4yfKvbEXvfbw8e5uKjtdyF1YEd6g/DQP1s4O2yXsn4s9nLv9pGndEvJqF0rUkE0pn0oQN23E7SLCXDyq/V6q2Bf2RYXJyu1FpxKK9tGV3ovnFCcADaps/QeTafK1xdzG2TWdhz/78DBeCwEeGQh0L8kAGRzvwU1yYeM238YV+4Kvc6VZhn4rzGspn9S7TqVxYXl5FUxOO82ORLlriOwsRklqMZlZ3sKykECano88VTYl+vHiUofaIQ8Ulzts3pBgcBDsYJS/7O/y29hHvtkqFIC90n93ne8i3goLX3E1KF7Y7V/EeUTpX7abH5DitiT2COftyJYtuxSllVJSBdIwL3CiT4jCleZqyA6FddPJ2/hpTTqQgCKCE8b8vrGxX2GnhtCXhPwP2kppTJsqT6lhdZasgMjZcQnW4Q8oJT54kiVN/3oujD4Z+3w9nX7Gvufe5tZOUWaPaFn2SXOweJxaYF6Yz37TqDzTo8rRx8VVW9HQTTRnChxzoun2zjC30QtTOh4Mo3pLY/sCUGVjl/8iyhxdTyJO/Rv20obVtmoPJZ1GDMAo+N5imJXo2VOtI3SVsTX+CsezMKnmFfoZApkYwthz6J+VfoGnBoO9Np7Fhhn4JS0N/k54GpzAJI9l9OVFTkHAhiaFOXu6RMVtDmCeU4Q7XRCvB9/c1BpUTbdSN0OZEVs91LW+ueCMxpOWnSqHj9P3CKCDR9ymtYwRx2ZGFA27/zlCTjF/7mW54/l2AfBaPFxQ3paU0h2OdlhaMV85FXqZZtzG9nPw7DewnALwdnS7sq0nIhh8tdPrRVysrKtmTpzk++0o8EM38EguZWaD78oS6higmuUReYlj5ZJxEZTCCLAhgxEwqSk/Ow2Z0wMZQlI0T1z+gwEkayMAEl6vgruDtxrMPo3TYAkJ2R0YtOoVzMab/1PA+JQDPX2i/rVXDDQzgbtweFh5Pn3I7KXPnOIyfHqvFN9dnQSh+Ht6yr0kYdglQkQ3kh4iby6BD0hfTEB3IHE5QmlbqRNeK/YDpsrxcqOa2UDP9xItxGxfGnt1x4Sq1E6gcOoMyAoh9IJ7b13QBLlPeFPNDkxt/tdHm+to6xwkb/tTSYHGRQtzcXt7K9VHweYF7zwTx4HrwRHn6UX0fAF31X2tyj//dGfuUzmLGuJ22FYVw==", "X-OriginatorOrg": "nxp.com", "X-MS-Exchange-CrossTenant-Network-Message-Id": "\n e953aa2b-bbd1-48c5-aea9-08de8b00e33c", "X-MS-Exchange-CrossTenant-AuthSource": "PAXPR04MB8510.eurprd04.prod.outlook.com", "X-MS-Exchange-CrossTenant-AuthAs": "Internal", "X-MS-Exchange-CrossTenant-OriginalArrivalTime": "26 Mar 2026 06:28:26.2900\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 6XqZ91Kh6chw3k6h6G8m5FZg8MkoHyZa1X7B/TS2H7goP9+7hhiJHTI5lCYVDKMH2vTWLnwMEZTKKaRcTrm9jg==", "X-MS-Exchange-Transport-CrossTenantHeadersStamped": "AM9PR04MB8355", "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 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 | 185 ++++++++++++++++++++++++++++++++++\n 6 files changed, 213 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 6c17446f3dcc..6bed824d1f07 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..addd41f7f1b6\n--- /dev/null\n+++ b/net/dsa/tag_netc.c\n@@ -0,0 +1,185 @@\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+\tu8 ipv = netdev_txq_to_tc(ndev, queue);\n+\tvoid *tag;\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+\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 = 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": [ "v3", "net-next", "09/14" ] }