get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 2230783,
    "url": "http://patchwork.ozlabs.org/api/1.1/patches/2230783/?format=api",
    "web_url": "http://patchwork.ozlabs.org/project/linuxppc-dev/patch/20260430024945.3413973-16-wei.fang@nxp.com/",
    "project": {
        "id": 2,
        "url": "http://patchwork.ozlabs.org/api/1.1/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/"
    },
    "msgid": "<20260430024945.3413973-16-wei.fang@nxp.com>",
    "date": "2026-04-30T02:49:45",
    "name": "[v5,net-next,15/15] net: dsa: netc: add support for ethtool private statistics",
    "commit_ref": null,
    "pull_url": null,
    "state": "handled-elsewhere",
    "archived": false,
    "hash": "7155bcc2a8d15f54032bab859cc0d9f49748f05a",
    "submitter": {
        "id": 84380,
        "url": "http://patchwork.ozlabs.org/api/1.1/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-16-wei.fang@nxp.com/mbox/",
    "series": [
        {
            "id": 502180,
            "url": "http://patchwork.ozlabs.org/api/1.1/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/2230783/comments/",
    "check": "pending",
    "checks": "http://patchwork.ozlabs.org/api/patches/2230783/checks/",
    "tags": {},
    "headers": {
        "Return-Path": "\n <linuxppc-dev+bounces-20318-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=EvXjKQT5;\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-20318-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=EvXjKQT5;\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\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 4g5dtX49w7z1yGq\n\tfor <incoming@patchwork.ozlabs.org>; Thu, 30 Apr 2026 12:49:40 +1000 (AEST)",
            "from boromir.ozlabs.org (localhost [127.0.0.1])\n\tby lists.ozlabs.org (Postfix) with ESMTP id 4g5dt94ZDyz2y8m;\n\tThu, 30 Apr 2026 12:49:21 +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)\n\t(No client certificate requested)\n\tby lists.ozlabs.org (Postfix) with ESMTPS id 4g5dt82rrnz2xl6\n\tfor <linuxppc-dev@lists.ozlabs.org>; Thu, 30 Apr 2026 12:49:20 +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:49:17 +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:49:16 +0000"
        ],
        "ARC-Seal": [
            "i=2; a=rsa-sha256; d=lists.ozlabs.org; s=201707; t=1777517361;\n\tcv=pass;\n b=O9FNFFn5xNuA0iLKMswEa09+istJ7juf6SAD9uIRDxuPJXVvFwfr5SpFnAdGyc2SfnYum2uBxzYS9uDpu5D2MISAskjYykxx/UV0P1JbA7aY9N7hvjbkhExIoZG0lgi1QtVOKAV+CXdb7dg4241QYSEYiGWL9xHugmpeMvRoGei3MvPISNtkjgjn2eQDWEAOsdkdXzi0n2UZhFf9//79EMPsi3vuiSJIzZ1NI+V49/4QZlM1qePCxsy+JNULokHActURCOgJShWFPdR4xJKp5K4/Tgn5Zk2YlfN51cw6ePjiVLX819Dr/w3OITmnIwOcSsyInurP7KyGU83a1rzvbA==",
            "i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;\n b=cuj43wRpCeIZmUELR+JnoBGIFtlEfDP3n8HR5BX9x+scOWR+9cSBwa2/ltDdn5yu1j8oOLUwkZy3Tgm60/uvJ894uudPtQhdf80cbUnu9Y269MBXgbYZr/T2YnVhovQUe4hWg2Bs6erR3oQmQWQ7GhiOX628VcFp1el/obsD06GXl0cQC/fyOWANpYjZo+2LQqjWUTjONcX9bZjLPol0KKMewR8/LrIbiB0WAgUv78yFrtm/awV7Ulck7u+f930RD4PdXrSgAuR0UQbWlXYYCpV7WKcVEUrmOAsLnUhcZAfwZ3C3+M9Get0UBTuB7lFDO601q4fr24nTRArmhVYdZA=="
        ],
        "ARC-Message-Signature": [
            "i=2; a=rsa-sha256; d=lists.ozlabs.org; s=201707;\n\tt=1777517361; c=relaxed/relaxed;\n\tbh=vpFP/5ZCJ+bg+eA8fAjzxurulz/xwiGFfOFB8EZy15M=;\n\th=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References:\n\t Content-Type:MIME-Version;\n b=U4Plz0yuqaWDBqsYKUXxLjfyT5VM9B/kLhCvD61/1a46knN/MXcqDvxmZBymlQQtAAgDisrJneYRaw78PHkM2AYiaUFvo0srGusoRMlNy0Py1KlBdGoA6kwvAzJwTbdWLfYklDcx6Jv42xnH0G2oxa2zrAlGTORg2Y7vSfj4Xlktb95TkIjZGHOxZLzr6u835zm3r5OrfaRWf9GyiWwCNdyfOiFau6rmgbv7CBrB9SNx4+dTbo+A5480n8xB8ZcYrccpypa22yuNh/D4uW1k48P00Fu6hY6GiiG9qsIyrVE/LblbXCrn7Pi3P8nScQkhriIrKn0QTaxwOkfDy95iyQ==",
            "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=vpFP/5ZCJ+bg+eA8fAjzxurulz/xwiGFfOFB8EZy15M=;\n b=iE3jwqdHG95wOf/jU1H2cJby+0lOt39l9dLWAyWAUwhKTIvlwH5HBtjXHilBnvzW5jwXv30vXDkpnbThfjYeV0hLDp2fpfpjBfQZ0FsuYkb7GHYLXX0sfPni4jNDbY4OSD4g8egBuDFx4td/5/sQi3L0xCgtwytlShZk5qyimFVOkeVSMCEtbtuzcad7i+r0ilUAe8jXAoIX3H+a5/kmvW6GuODGT29CDcIJPkFOsCvehqWoYAjdMClQU/LcDnIifCCvDQJzgN3MsHb9mXg4xbYFp8yZ6Pmh0prudmy5dwX2isbuNiF519EwU77ldcYAIXSsWE9xrqLBruy5ymnpTA=="
        ],
        "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=EvXjKQT5; 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=vpFP/5ZCJ+bg+eA8fAjzxurulz/xwiGFfOFB8EZy15M=;\n b=EvXjKQT5p2zCiDg8Yl75PMssrIwkePgjzkv4NwNQ2Ya9qDMuT771lWPf/+IRnHFWw962QuIcq+dL2GFs5G4a8qRkB+NnNdBypLXausmI1SCJDuec9XpfO2nyZPBkC9f2vOCpV0FtVA9Ov23vWoh89Wah6fZ02+WosUZzsvenPyGLyGTDeXx1p1aw++mukUYHfkhI4rxuEEBlWu0TQ8aZDtJq9Z1M8u3cfNll6/OX5PI9atGK8AToSi2uM2JVGs4Jg9NUlh9z77GrwETXKxHQFQVvJTG5bnaNjWmMSw9d9/l/nbwyR/L2DrR7lJgnQkUEM+83bZkea5iaBsANjxTBWw==",
        "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 15/15] net: dsa: netc: add support for ethtool\n private statistics",
        "Date": "Thu, 30 Apr 2026 10:49:45 +0800",
        "Message-Id": "<20260430024945.3413973-16-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": "863931bb-7cda-4160-efcb-08dea66311ef",
        "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\tomkXyNqJzMUGvrDATze0xn9OEWc4fUSp1dYH+xQUKQU2bVai8fbNN2mpEIu4MuOS8/76Wh8QWxrymBPS9msNapZoAdYzkrL1le+ZnAhfUlM+3q8uSWTStc84WKdML/yQhjmqai2ZntxDVBwx/M2Tl3iQBlM3x35dRKl2pmwco2bFsy70DzF8mgvNmBgY9C87FuPY4vBIMGKnJqAlOzEEWPll6mSkjuf+8uvDRHfSmuzzqciH72k2CE1QTpCb/K2kWRuu4v5z82pKTQjDEJaz9c7DNoq3wyn/YN5Md8Ttt71q1WR2lmNkgExIUpkCrIwdZWFZVYjWlhiQbehMS7fbOdn3JxDc9TwL9ENWxB9tC0o+NltP+n9iLJ+l8czjAjrLNPXhk7WFd3YBKoVRzma1gaNaJ673SL/3CUtXU1/nMq476uXJSJ4R/kTpUOGlZL41JX69Ui4w53kr6WpEdvctlO7mkXEq2iQOubJQ0v8h2/jfBp4jzO1wiGBXOwcGimaSDrgIhEFBF0FIV81rFzB5YqS+u1sFPY1jnamoU9xykd9u2xl7++DiRBSaASKSZ9Cvij2+uL+cqPia1qxC93/seQh01lzvxFctgIA35LmE5bN6ZXRzJyhU6fnc6X62zJbQ6rCKiI6J96SZqNVBwnLMs8hf5BnGILDJ7/1GPguwT13a52Pwu35HxgWOs0dL59nwzQaBz2R2ecSKVE33daaRH9u2E3hBSb+OXBKFeW/DOuKdXo+o1Fo+vSZ8UZxAqvddwFx4/EXsmPG0maH+q5gKaWhm4UNnJu6KW5h5mtJ7A0oYx8EDEtr8KqLfNP0RcxEd",
        "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 JBpH7BX7f7Gq3dpgp2ycQ3ARnmRZoCB+cM2H38SjeO7i3E0knbUJrvC+brS9OIOozH6JFM4E5SAsXUsuxbL94IJ8xAuvkMACcE5zgQqYSy+tFXPplvfUtWsLAJwA5OqBpFn0NSTFhWX5D13mOlyVJSVu+gCiV2JniaY0lr8GBclwk/iF4M2Hp8ulSqPB6ft27kCn2Vv6BOGEou7ZxuU01ERG0+uml7jvz5+A+lRptYdyZE1DXDxmWrxKG1S/aajDm5erFKHrL4ThrRKrah5HFCLu56IqC26xgSBbmVPRvP36CUv7JnYIA2kQPNVbfCjnSAcfpTNLnXOQOPKpjEW70B+9dEUPDl4/iCYB3rUDdobGyduwZDRV+N3+zN6hTawO89OPtHVSJpVDwWbDGVZt++8ZofLcKi3Ai16DPdp2jUre+k/q4/yUwaVO/X2+bM8sAvWZbub1LdaP2E0Gy0TA8QQ92db1gyNDbuo1phbkveCE9o6zmirFPYZVofDA72ZbN11dhUNFJwNAVXO7YU/CcvYGpReOvH49CDqvpCnQp78xZWID9+V9TBK5jPRtIvAEI8eStBXoGJVVdqO2gOg+XPqilO5ZtEWIOrfK3FNpWp/ZqoRBBj2tfV3jOJohIem5cfH32LZDPbV649UzoiBGrqSAH+9NieJFQH86VAUU9GB8yFEAIq2NyUMsIuvB/c2GFM1KF/ai4bjQyQHHveyaNnfrZ+kuA9e5vPBCFN3EIYytk8NTRlBOjXa9TQSovMEFis/GogIuq+0xpVdDbsixE8PJQnORP1pFBu62wue4o1Ja99OJ+3LACIN40wIs4V7dpEskQVq3pnwHggfUK9IG0SevegjLNaWUi/ok099Bksfw9CfgSTYgOMLCA8WZAP6Qx9UAsUkFp7OamZ8mw5t4mi0p4DrImFCxAquLCLArTBNEvVdYs8GnaGFevw0MB2+BY0k/1crRI0OLUMhEPspdA1afHWKn9MDhwE/lzrWYq6VZzHi6E92NJGkPBG+sAOkmQV71gkq0bMah22rTSRiltKClIue9DVbzlctjBEmYMSrkhTOW0zKxNTickPUDAwDM+fiKLJOcErf5kxFM3y+SFqAl+/gUhZs4OzsUUGSFHTVrvdq90O7bcQ5iLnpC31DOho6TuLMh8bA6VV92opyj9JXuOiW7ffZkCF5weymwKSdE0wrZJR9BOfFgDTobyWpiBSNU6mKyPmAFp5jsjQjC6hwL3YYRqokcId76yJZatZ/4HvBu5L2/t0J/KV5UT78miF0B94ZCeQEnnjwLhLpq2BRircNTMuUvTSwKav2Zp674U/opKk/gvFmtlbjZ4rSJuWXVReObUFkf2hiobtU2dtavuAYlguEE1kUD9aNQ+WQHE6vxoKNXDgraW1uecMkaz/QkUaX5GoW9r9HjvMV6h2wHQFiUhDq4gfBXbQ4ag9awia6TooB9ZpuG8Q/abxW4dD5rwvWGUxsGFEn2v2Q2LuyOrpirYvKa4fXcmrWk7cmfcKjeVtyiSQb+xCrl6ON1aj3Zy2NGvU41ikpPJePLWvA9RrWyYMLteVvpAJYWGV+aXgl0Q9SBu7LYCPGeEFYeNmDLxJsHdsaBWUQErh3rJpn0fO78EEA+vnliG8Wfkmtk/OFRuSzf15Gy6qW9oh3JwQQjzX7Wlv9tMlUnbDAn//eDZv2Qmn/3zm8Sy9QFCGCGCTITl9PKFRkxYXdI4s0z",
        "X-OriginatorOrg": "nxp.com",
        "X-MS-Exchange-CrossTenant-Network-Message-Id": "\n 863931bb-7cda-4160-efcb-08dea66311ef",
        "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:49:16.7887\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 dJvxUT4lYrDZnenDWCA7PU9Lz0/FgxVz0efCUqFi+NeaLUvEHZL4HltcUQ35qe63V0zRojy0QNAkVeDlbsnSkQ==",
        "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": "Implement the ethtool private statistics interface to expose additional\nport-level and MAC-level counters that are not covered by the standard\nIEEE 802.3 statistics. The pMAC counters are only reported when the port\nsupports Frame Preemption (802.1Qbu/802.3br).\n\nSigned-off-by: Wei Fang <wei.fang@nxp.com>\n---\n drivers/net/dsa/netc/netc_ethtool.c   | 107 ++++++++++++++++++++++++++\n drivers/net/dsa/netc/netc_main.c      |   3 +\n drivers/net/dsa/netc/netc_switch.h    |   9 +++\n drivers/net/dsa/netc/netc_switch_hw.h |  58 ++++++++++++++\n 4 files changed, 177 insertions(+)",
    "diff": "diff --git a/drivers/net/dsa/netc/netc_ethtool.c b/drivers/net/dsa/netc/netc_ethtool.c\nindex ac8940b5a85c..8d04db534347 100644\n--- a/drivers/net/dsa/netc/netc_ethtool.c\n+++ b/drivers/net/dsa/netc/netc_ethtool.c\n@@ -19,6 +19,56 @@ static const struct ethtool_rmon_hist_range netc_rmon_ranges[] = {\n \t{ }\n };\n \n+static const struct netc_port_stat netc_port_counters[] = {\n+\t{ NETC_PTGSLACR,\t\"port gate late arrival frames\" },\n+\t{ NETC_PSDFTCR,\t\"port SDF transmit frames\" },\n+\t{ NETC_PSDFDDCR,\t\"port SDF drop duplicate frames\" },\n+\t{ NETC_PRXDCR,\t\t\"port rx discard frames\" },\n+\t{ NETC_PRXDCRRR,\t\"port rx discard read-reset\" },\n+\t{ NETC_PRXDCRR0,\t\"port rx discard reason 0\" },\n+\t{ NETC_PRXDCRR1,\t\"port rx discard reason 1\" },\n+\t{ NETC_PTXDCR,\t\t\"port tx discard frames\" },\n+\t{ NETC_PTXDCRRR,\t\"port tx discard read-reset\" },\n+\t{ NETC_PTXDCRR0,\t\"port tx discard reason 0\" },\n+\t{ NETC_PTXDCRR1,\t\"port tx discard reason 1\" },\n+\t{ NETC_BPDCR,\t\t\"bridge port discard frames\" },\n+\t{ NETC_BPDCRRR,\t\"bridge port discard read-reset\" },\n+\t{ NETC_BPDCRR0,\t\"bridge port discard reason 0\" },\n+\t{ NETC_BPDCRR1,\t\"bridge port discard reason 1\" },\n+};\n+\n+static const struct netc_port_stat netc_emac_counters[] = {\n+\t{ NETC_PM_ROCT(0),\t\"eMAC rx octets\" },\n+\t{ NETC_PM_RVLAN(0),\t\"eMAC rx VLAN frames\" },\n+\t{ NETC_PM_RERR(0),\t\"eMAC rx frame errors\" },\n+\t{ NETC_PM_RUCA(0),\t\"eMAC rx unicast frames\" },\n+\t{ NETC_PM_RDRP(0),\t\"eMAC rx dropped packets\" },\n+\t{ NETC_PM_RPKT(0),\t\"eMAC rx packets\" },\n+\t{ NETC_PM_TOCT(0),\t\"eMAC tx octets\" },\n+\t{ NETC_PM_TVLAN(0),\t\"eMAC tx VLAN frames\" },\n+\t{ NETC_PM_TFCS(0),\t\"eMAC tx FCS errors\" },\n+\t{ NETC_PM_TUCA(0),\t\"eMAC tx unicast frames\" },\n+\t{ NETC_PM_TPKT(0),\t\"eMAC tx packets\" },\n+\t{ NETC_PM_TUND(0),\t\"eMAC tx undersized packets\" },\n+\t{ NETC_PM_TIOCT(0),\t\"eMAC tx invalid octets\" },\n+};\n+\n+static const struct netc_port_stat netc_pmac_counters[] = {\n+\t{ NETC_PM_ROCT(1),\t\"pMAC rx octets\" },\n+\t{ NETC_PM_RVLAN(1),\t\"pMAC rx VLAN frames\" },\n+\t{ NETC_PM_RERR(1),\t\"pMAC rx frame errors\" },\n+\t{ NETC_PM_RUCA(1),\t\"pMAC rx unicast frames\" },\n+\t{ NETC_PM_RDRP(1),\t\"pMAC rx dropped packets\" },\n+\t{ NETC_PM_RPKT(1),\t\"pMAC rx packets\" },\n+\t{ NETC_PM_TOCT(1),\t\"pMAC tx octets\" },\n+\t{ NETC_PM_TVLAN(1),\t\"pMAC tx VLAN frames\" },\n+\t{ NETC_PM_TFCS(1),\t\"pMAC tx FCS errors\" },\n+\t{ NETC_PM_TUCA(1),\t\"pMAC tx unicast frames\" },\n+\t{ NETC_PM_TPKT(1),\t\"pMAC tx packets\" },\n+\t{ NETC_PM_TUND(1),\t\"pMAC tx undersized packets\" },\n+\t{ NETC_PM_TIOCT(1),\t\"pMAC tx invalid octets\" },\n+};\n+\n static void netc_port_pause_stats(struct netc_port *np, int mac,\n \t\t\t\t  struct ethtool_pause_stats *stats)\n {\n@@ -188,3 +238,60 @@ void netc_port_get_eth_mac_stats(struct dsa_switch *ds, int port,\n \t\tbreak;\n \t}\n }\n+\n+int netc_port_get_sset_count(struct dsa_switch *ds, int port, int sset)\n+{\n+\tstruct netc_port *np = NETC_PORT(ds, port);\n+\tint size;\n+\n+\tif (sset != ETH_SS_STATS)\n+\t\treturn -EOPNOTSUPP;\n+\n+\tsize = ARRAY_SIZE(netc_port_counters) +\n+\t       ARRAY_SIZE(netc_emac_counters);\n+\n+\tif (np->caps.pmac)\n+\t\tsize += ARRAY_SIZE(netc_pmac_counters);\n+\n+\treturn size;\n+}\n+\n+void netc_port_get_strings(struct dsa_switch *ds, int port,\n+\t\t\t   u32 sset, u8 *data)\n+{\n+\tstruct netc_port *np = NETC_PORT(ds, port);\n+\tint i;\n+\n+\tif (sset != ETH_SS_STATS)\n+\t\treturn;\n+\n+\tfor (i = 0; i < ARRAY_SIZE(netc_port_counters); i++)\n+\t\tethtool_cpy(&data, netc_port_counters[i].name);\n+\n+\tfor (i = 0; i < ARRAY_SIZE(netc_emac_counters); i++)\n+\t\tethtool_cpy(&data, netc_emac_counters[i].name);\n+\n+\tif (!np->caps.pmac)\n+\t\treturn;\n+\n+\tfor (i = 0; i < ARRAY_SIZE(netc_pmac_counters); i++)\n+\t\tethtool_cpy(&data, netc_pmac_counters[i].name);\n+}\n+\n+void netc_port_get_ethtool_stats(struct dsa_switch *ds, int port, u64 *data)\n+{\n+\tstruct netc_port *np = NETC_PORT(ds, port);\n+\tint i;\n+\n+\tfor (i = 0; i < ARRAY_SIZE(netc_port_counters); i++)\n+\t\t*data++ = netc_port_rd(np, netc_port_counters[i].reg);\n+\n+\tfor (i = 0; i < ARRAY_SIZE(netc_emac_counters); i++)\n+\t\t*data++ = netc_port_rd64(np, netc_emac_counters[i].reg);\n+\n+\tif (!np->caps.pmac)\n+\t\treturn;\n+\n+\tfor (i = 0; i < ARRAY_SIZE(netc_pmac_counters); i++)\n+\t\t*data++ = netc_port_rd64(np, netc_pmac_counters[i].reg);\n+}\ndiff --git a/drivers/net/dsa/netc/netc_main.c b/drivers/net/dsa/netc/netc_main.c\nindex ae8f28b82b72..803582d939b0 100644\n--- a/drivers/net/dsa/netc/netc_main.c\n+++ b/drivers/net/dsa/netc/netc_main.c\n@@ -1472,6 +1472,9 @@ static const struct dsa_switch_ops netc_switch_ops = {\n \t.get_rmon_stats\t\t\t= netc_port_get_rmon_stats,\n \t.get_eth_ctrl_stats\t\t= netc_port_get_eth_ctrl_stats,\n \t.get_eth_mac_stats\t\t= netc_port_get_eth_mac_stats,\n+\t.get_sset_count\t\t\t= netc_port_get_sset_count,\n+\t.get_strings\t\t\t= netc_port_get_strings,\n+\t.get_ethtool_stats\t\t= netc_port_get_ethtool_stats,\n };\n \n static int netc_switch_probe(struct pci_dev *pdev,\ndiff --git a/drivers/net/dsa/netc/netc_switch.h b/drivers/net/dsa/netc/netc_switch.h\nindex d477b0cd2157..90d750331fb9 100644\n--- a/drivers/net/dsa/netc/netc_switch.h\n+++ b/drivers/net/dsa/netc/netc_switch.h\n@@ -93,6 +93,11 @@ struct netc_fdb_entry {\n \tstruct hlist_node node;\n };\n \n+struct netc_port_stat {\n+\tint reg;\n+\tchar name[ETH_GSTRING_LEN] __nonstring;\n+};\n+\n struct netc_switch {\n \tstruct pci_dev *pdev;\n \tstruct device *dev;\n@@ -159,5 +164,9 @@ void netc_port_get_eth_ctrl_stats(struct dsa_switch *ds, int port,\n \t\t\t\t  struct ethtool_eth_ctrl_stats *ctrl_stats);\n void netc_port_get_eth_mac_stats(struct dsa_switch *ds, int port,\n \t\t\t\t struct ethtool_eth_mac_stats *mac_stats);\n+int netc_port_get_sset_count(struct dsa_switch *ds, int port, int sset);\n+void netc_port_get_strings(struct dsa_switch *ds, int port,\n+\t\t\t   u32 sset, u8 *data);\n+void netc_port_get_ethtool_stats(struct dsa_switch *ds, int port, u64 *data);\n \n #endif\ndiff --git a/drivers/net/dsa/netc/netc_switch_hw.h b/drivers/net/dsa/netc/netc_switch_hw.h\nindex f8d436ad9623..1b016e7dd03e 100644\n--- a/drivers/net/dsa/netc/netc_switch_hw.h\n+++ b/drivers/net/dsa/netc/netc_switch_hw.h\n@@ -87,6 +87,17 @@\n #define  PSR_TX_BUSY\t\t\tBIT(0)\n #define  PSR_RX_BUSY\t\t\tBIT(1)\n \n+#define NETC_PTGSLACR\t\t\t0x130\n+\n+#define NETC_PRXDCR\t\t\t0x1c0\n+#define NETC_PRXDCRRR\t\t\t0x1c4\n+#define NETC_PRXDCRR0\t\t\t0x1c8\n+#define NETC_PRXDCRR1\t\t\t0x1cc\n+#define NETC_PTXDCR\t\t\t0x1e0\n+#define NETC_PTXDCRRR\t\t\t0x1e4\n+#define NETC_PTXDCRR0\t\t\t0x1e8\n+#define NETC_PTXDCRR1\t\t\t0x1ec\n+\n #define NETC_PTCTMSDUR(a)\t\t(0x208 + (a) * 0x20)\n #define  PTCTMSDUR_MAXSDU\t\tGENMASK(15, 0)\n #define  PTCTMSDUR_SDU_TYPE\t\tGENMASK(17, 16)\n@@ -94,6 +105,9 @@\n #define   SDU_TYPE_MPDU\t\t\t1\n #define   SDU_TYPE_MSDU\t\t\t2\n \n+#define NETC_PSDFTCR\t\t\t0x4c4\n+#define NETC_PSDFDDCR\t\t\t0x4c8\n+\n #define NETC_BPCR\t\t\t0x500\n #define  BPCR_DYN_LIMIT\t\t\tGENMASK(15, 0)\n #define  BPCR_MLO\t\t\tGENMASK(22, 20)\n@@ -142,6 +156,11 @@ enum netc_stg_stage {\n \tNETC_STG_STATE_FORWARDING,\n };\n \n+#define NETC_BPDCR\t\t\t0x580\n+#define NETC_BPDCRRR\t\t\t0x584\n+#define NETC_BPDCRR0\t\t\t0x588\n+#define NETC_BPDCRR1\t\t\t0x58c\n+\n /* Definition of Switch ethernet MAC port registers */\n #define NETC_PMAC_OFFSET\t\t0x400\n #define NETC_PM_CMD_CFG(a)\t\t(0x1008 + (a) * 0x400)\n@@ -176,6 +195,9 @@ enum netc_stg_stage {\n /* Port MAC 0/1 Receive Ethernet Octets Counter */\n #define NETC_PM_REOCT(a)\t\t(0x1100 + (a) * 0x400)\n \n+/* Port MAC 0/1 Receive Octets Counter */\n+#define NETC_PM_ROCT(a)\t\t\t(0x1108 + (a) * 0x400)\n+\n /* Port MAC 0/1 Receive Alignment Error Counter Register */\n #define NETC_PM_RALN(a)\t\t\t(0x1110 + (a) * 0x400)\n \n@@ -188,12 +210,27 @@ enum netc_stg_stage {\n /* Port MAC 0/1 Receive Frame Check Sequence Error Counter */\n #define NETC_PM_RFCS(a)\t\t\t(0x1128 + (a) * 0x400)\n \n+/* Port MAC 0/1 Receive VLAN Frame Counter */\n+#define NETC_PM_RVLAN(a)\t\t(0x1130 + (a) * 0x400)\n+\n+/* Port MAC 0/1 Receive Frame Error Counter */\n+#define NETC_PM_RERR(a)\t\t\t(0x1138 + (a) * 0x400)\n+\n+/* Port MAC 0/1 Receive Unicast Frame Counter */\n+#define NETC_PM_RUCA(a)\t\t\t(0x1140 + (a) * 0x400)\n+\n /* Port MAC 0/1 Receive Multicast Frame Counter */\n #define NETC_PM_RMCA(a)\t\t\t(0x1148 + (a) * 0x400)\n \n /* Port MAC 0/1 Receive Broadcast Frame Counter */\n #define NETC_PM_RBCA(a)\t\t\t(0x1150 + (a) * 0x400)\n \n+/* Port MAC 0/1 Receive Dropped Packets Counter */\n+#define NETC_PM_RDRP(a)\t\t\t(0x1158 + (a) * 0x400)\n+\n+/* Port MAC 0/1 Receive Packets Counter */\n+#define NETC_PM_RPKT(a)\t\t\t(0x1160 + (a) * 0x400)\n+\n /* Port MAC 0/1 Receive Undersized Packet Counter */\n #define NETC_PM_RUND(a)\t\t\t(0x1168 + (a) * 0x400)\n \n@@ -236,6 +273,9 @@ enum netc_stg_stage {\n /* Port MAC 0/1 Transmit Ethernet Octets Counter */\n #define NETC_PM_TEOCT(a)\t\t(0x1200 + (a) * 0x400)\n \n+/* Port MAC 0/1 Transmit Octets Counter */\n+#define NETC_PM_TOCT(a)\t\t\t(0x1208 + (a) * 0x400)\n+\n /* Port MAC 0/1 Transmit Excessive Deferral Packet Counter */\n #define NETC_PM_TEDFR(a)\t\t(0x1210 + (a) * 0x400)\n \n@@ -245,15 +285,30 @@ enum netc_stg_stage {\n /* Port MAC 0/1 Transmit Frame Counter */\n #define NETC_PM_TFRM(a)\t\t\t(0x1220 + (a) * 0x400)\n \n+/* Port MAC 0/1 Transmit Frame Check Sequence Error Counter */\n+#define NETC_PM_TFCS(a)\t\t\t(0x1228 + (a) * 0x400)\n+\n+/* Port MAC 0/1 Transmit VLAN Frame Counter */\n+#define NETC_PM_TVLAN(a)\t\t(0x1230 + (a) * 0x400)\n+\n /* Port MAC 0/1 Transmit Frame Error Counter */\n #define NETC_PM_TERR(a)\t\t\t(0x1238 + (a) * 0x400)\n \n+/* Port MAC 0/1 Transmit Unicast Frame Counter */\n+#define NETC_PM_TUCA(a)\t\t\t(0x1240 + (a) * 0x400)\n+\n /* Port MAC 0/1 Transmit Multicast Frame Counter */\n #define NETC_PM_TMCA(a)\t\t\t(0x1248 + (a) * 0x400)\n \n /* Port MAC 0/1 Transmit Broadcast Frame Counter */\n #define NETC_PM_TBCA(a)\t\t\t(0x1250 + (a) * 0x400)\n \n+/* Port MAC 0/1 Transmit Packets Counter */\n+#define NETC_PM_TPKT(a)\t\t\t(0x1260 + (a) * 0x400)\n+\n+/* Port MAC 0/1 Transmit Undersized Packet Counter */\n+#define NETC_PM_TUND(a)\t\t\t(0x1268 + (a) * 0x400)\n+\n /* Port MAC 0/1 Transmit 64-Octet Packet Counter */\n #define NETC_PM_T64(a)\t\t\t(0x1270 + (a) * 0x400)\n \n@@ -293,6 +348,9 @@ enum netc_stg_stage {\n /* Port MAC 0/1 Transmit Excessive Collisions Counter */\n #define NETC_PM_TECOL(a)\t\t(0x12f0 + (a) * 0x400)\n \n+/* Port MAC 0/1 Transmit Invalid Octets Counter */\n+#define NETC_PM_TIOCT(a)\t\t(0x12f8 + (a) * 0x400)\n+\n #define NETC_PEMDIOCR\t\t\t0x1c00\n #define NETC_EMDIO_BASE\t\t\tNETC_PEMDIOCR\n \n",
    "prefixes": [
        "v5",
        "net-next",
        "15/15"
    ]
}