get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 2216222,
    "url": "http://patchwork.ozlabs.org/api/patches/2216222/?format=api",
    "web_url": "http://patchwork.ozlabs.org/project/linuxppc-dev/patch/20260326062917.3552334-14-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-14-wei.fang@nxp.com>",
    "list_archive_url": "https://lore.kernel.org/linuxppc-dev/20260326062917.3552334-14-wei.fang@nxp.com/",
    "date": "2026-03-26T06:29:16",
    "name": "[v3,net-next,13/14] net: dsa: netc: initialize buffer bool table and implement flow-control",
    "commit_ref": null,
    "pull_url": null,
    "state": "handled-elsewhere",
    "archived": false,
    "hash": "9c69f2eb5b54cc45b1dd20b7c380147f13621e72",
    "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-14-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/2216222/comments/",
    "check": "pending",
    "checks": "http://patchwork.ozlabs.org/api/patches/2216222/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "\n <linuxppc-dev+bounces-18808-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=T0krAky6;\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-18808-incoming=patchwork.ozlabs.org@lists.ozlabs.org;\n receiver=patchwork.ozlabs.org)",
            "lists.ozlabs.org;\n arc=pass smtp.remote-ip=\"2a01:111:f403:c201::6\" 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=T0krAky6;\n\tdkim-atps=neutral",
            "lists.ozlabs.org;\n spf=permerror (SPF Permanent Error: Void lookup limit of 2 exceeded)\n smtp.mailfrom=nxp.com (client-ip=2a01:111:f403:c201::6;\n helo=am0pr02cu008.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 4fhDQB4DNnz1y1G\n\tfor <incoming@patchwork.ozlabs.org>; Thu, 26 Mar 2026 17:29:22 +1100 (AEDT)",
            "from boromir.ozlabs.org (localhost [127.0.0.1])\n\tby lists.ozlabs.org (Postfix) with ESMTP id 4fhDQ16Qfmz30M0;\n\tThu, 26 Mar 2026 17:29:13 +1100 (AEDT)",
            "from AM0PR02CU008.outbound.protection.outlook.com\n (mail-westeuropeazlp170130006.outbound.protection.outlook.com\n [IPv6:2a01:111:f403:c201::6])\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 4fhDQ04Y05z2ymg\n\tfor <linuxppc-dev@lists.ozlabs.org>; Thu, 26 Mar 2026 17:29:12 +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:54 +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:54 +0000"
        ],
        "ARC-Seal": [
            "i=2; a=rsa-sha256; d=lists.ozlabs.org; s=201707; t=1774506553;\n\tcv=pass;\n b=EkMMSKNEsuWjZMadhGGTRIxg72S1RW5kPjXHGTQSRsOe8unH/tc5Rn0ZDKYb/FlJ06VO7vjTZU0rtZAhianZxEfVdV6ItBoNB28cn2J63Nf7XpaPLgIx+zHQmx5gG9nI4iStwD47KiKH0C+7HxK5HaO/0fi1I4ic7ZgTz8EK8MTVqYKPOMjtnlUIrB718PcB2qkT09Gn6bFoLhzK5kvsZG3EzArXFUAp340ptuIsfmAlLNa74vf4BrlDylZguCK9I5JxXfko2TdwrxTvWFg/klIXvtgRy8U1lcfO2HbgwXDWuQN1nqr0qPc0doaMOaK2dM76b4M2YmgTOO3nLpZ/JA==",
            "i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;\n b=Xn0s+QEvK1xXfTRuvyncT2xxKinPsw9smeDTh+h3nvsQYYATfynzy3lcEDSiIta2zhYkkpkAKaEl0BzWtR1x312U5ay6i9P41MyRESlmkj6hEwFGCCCuTa4oMbW6ZDMywqsjmCUUf55eZyz6dJhA7390GFZ3VXcpm0fU79oIKRQVWx+KgXzb5oz2GuQNNeBQsu09J496OnsIl/ohLicclqUbnb3Bq7GtCOXySZgOhyvwJBuO8bEF33lxNJrAAEsQJS1hO0BkeEJVfqxKNx3NlLrpg5PlQK6IwZP7gByup3j5Zy45RchqNI5Ggji62QIObyZG46ywkndxoTtZ3J/zGg=="
        ],
        "ARC-Message-Signature": [
            "i=2; a=rsa-sha256; d=lists.ozlabs.org; s=201707;\n\tt=1774506553; c=relaxed/relaxed;\n\tbh=/6nlRTpHMgt5mvwWW8S4US6vJELigzdXRG9K0G4dKzU=;\n\th=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References:\n\t Content-Type:MIME-Version;\n b=EPX417IP63Rtxy+1yvijNw0amBocTtVv9nsi6JWKyHxd8JHz9e+zuwSOkHQ4ayoqt7FLifNvqRmFX8d1Zr69u7Awb4i9aTgBG9q+VYlouzMozCmmrtyTl22x6fs8JpCcUVPVX4JglHrZG9yKsVSp+AWrVmlPcc7vJvM8P3EtNtWrIt0xvSeRAZclQJvD/oZHzNWXfTWVIV7yI/kC8YzCZ+ieVfy/mNFtCQ/npLmo0Oyo54WFR689wbDgFpj5v24DZCRt/IqM5eP5RgYMUN2YQHKMIO8k5S+ZhCjEyeK8jxCjC2PtRrBwa/paVBZuEr3fThR18c02jWRcVvvpxbXTvw==",
            "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=/6nlRTpHMgt5mvwWW8S4US6vJELigzdXRG9K0G4dKzU=;\n b=cx9kpPibgKhvTWWTnRUoYHL43foRH9zx5KPfM2R20fanERcgU03DeL8jLnk5Ynxd2981319czqNAIw25PsBRvyplNkAYgAvzkOn2NJXhaD2YG7YAPQPauOTaIk8JcOlFURnLZufjRmJGUKrgHXbl8qkRvry/0NjjQrOlz3olFU18rU/g/lbuQrlapPlRpWi978wgDjrqrC5Ftz19N6/D18chkBRx/2OzAYwDDj10KnHCzodSlO2YrqI6EEuQY+sn8wcirkhU/VTqGDQGNJnWup96lX2VhLCduVRM49AwZXoqBglSAqSaT/OgC/WQ8aqsWb76j4uOQuJi5Bfmf8pPdA=="
        ],
        "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=T0krAky6; dkim-atps=neutral;\n spf=permerror (client-ip=2a01:111:f403:c201::6;\n helo=am0pr02cu008.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=/6nlRTpHMgt5mvwWW8S4US6vJELigzdXRG9K0G4dKzU=;\n b=T0krAky6ziEMNI1g30Mo/GQRiOp61z5bNjzOmoemt2aHndIBo0202++LyBcRJB71+ek7H0rFWfeg823bTqwyhlpLikkvU1x9YVmPzW49BFm5Jid06gBgPOgfz2Al6GzM6/gks8O/NWT33pjlIySCLpuELqMWFI285bIga/oT3XtR9g0gVZUCALlO+MOd2kTOFQL9ENFGZyId+YWyT+cbBn3hOYTvofANLPfW/0HXRY8KYOUUh/oY1RQsO/ljkPtFlKp4WiemxGn82A1r5aqgcqnw52LCpUs5nkeEAG3szfzBvm0B48xUmYjdPxHaOMHdd5P/AuMikP0VHxZxpKq78Q==",
        "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 13/14] net: dsa: netc: initialize buffer bool\n table and implement flow-control",
        "Date": "Thu, 26 Mar 2026 14:29:16 +0800",
        "Message-Id": "<20260326062917.3552334-14-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-Type": "text/plain; charset=UTF-8",
        "Content-Transfer-Encoding": "8bit",
        "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": "daf62e8d-94fb-4b93-492a-08de8b00f3b9",
        "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\tkNsKICgHe1DjM/Vt9grHwwo/DlCYWAFONhX2OWdUOtal6vCX4RYy3OaxMYZ7J9Tqh1Oh+aJ4u6coNeSwvkOfgghIQzSYpqa6B3k31sPR1HUSATtJ91JVgGJFdYRKY094PWfsj79xoqeXfx8PCxSB4/OFlj3P0EZbvtYchdn9RsTsPs7zF4jCZRb5a+2LQk4wsetzibWbXqRbhbCXd1aSQLLrqx7lw7uL7wct4U13Uz78e4i410qhdQQH5gYyxaK6Awz+XCwbhy1VXqE8Ui8UYBUUSPNXc4+bom8wszV/EfYbvW7Tdv8FcOlcx3cEfV50vqNyJ/jBgJBn2hvITPfwvh957bOQ5tzmlirbR/Se55jpQdLC9hJfZknRZdCYie/K5vibhp7sIWot0fYu8jkaTWida3XG3ZABd5D8Hj4xAHtbt3InPuRKtwKTHT+kiJODZ99zkFHIsegM+jgG3OWUJOJ8yXFZaOK3KgX140yrRXuQLXH7+/2yAhLiFSMPrgCu7EnCAhHc30DVnT5RiPN7Lw+7XYn6Z95Sb/U6x9sBYGePnwqW2X2DBvOabVLBUIHk4hb7Ow1O3Q9l2ddJQ5BhbnKFKZo0P5Wo1HWM7zEAoN43sbLJRpz/TZJyX9+YSc3oO+jBuONL8F9kBwGdvQSOtOQ+K91t2bly9uFOe7GQ5fjG135xImFWLa9kDKgBpgtCVNcpQIlY5qN7woxeiFsv9O+HKzJ4Q7TFBmYPT7g2ag5izVEh8bYGaBDPixlUErWFfsEidJLrNA2yh1A65zOEBf63W3P2xzEtxhLbvzmciX/h0Is80ArsU6A2Wzo5ITPF",
        "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": "=?utf-8?q?4itHmyuzxoPhn11GsWsSWjohU6G2?=\n\t=?utf-8?q?CYbe3geM2yvYeWriVpmHvc4zAmb//iXuWy2Le+gxr1eRPDWAgYORyHL7fiKlcrZpX?=\n\t=?utf-8?q?XW4LMxHCL/aZ9P3GWVb4aEjFS55eB3BLbbFg3F/dcGB2/L156CaGauHjgJe0jHU6X?=\n\t=?utf-8?q?w0el9iq2A91dVjWn2zbFdnaZ5hC2ZwOUXk7tkzTyE2hPRp9jouVO7km1jtAkIahJi?=\n\t=?utf-8?q?Li2eHYXSibAEQFre+6jzJqNwS3SxXMa6cYuswChSSuOwoIoozX68uX0aIsyaSX/RO?=\n\t=?utf-8?q?zuVH+R6BEMTh8U7egLz0NeuiHEWwddCxCASx+OvkY4Hin3r9j6mX5PTDC4U4mqNnE?=\n\t=?utf-8?q?s7XUrTgeKVLr3kSlavQ8614y5RzMMRIpR7uY6GLgWRxEbgteKC4zRsk/+2J4LpH+f?=\n\t=?utf-8?q?SAaq8hIKUV9MS9iezu5X7hcOgBpIQUGzcPFGzuGuByrjy2XETRrmbBAZ5EzVgcckb?=\n\t=?utf-8?q?Op9RgmgweEvEl0r6L5TxNM9Qse/5/fHcUcJRlbjnrNBqGjCyu40D7smArD4FQtNkY?=\n\t=?utf-8?q?wmYo9w+aPM+Y8Fb9V6B0RZlJlgrdVYtLLSR0ePwNynjsQlurK+zbivL+wGuNbxqVQ?=\n\t=?utf-8?q?jckwIm2IiOp185QqptVwdWWZXbtOhepTRhdWp+D3/biHnMllWWRCVsMZvLG135loU?=\n\t=?utf-8?q?UEaNRbWOkg1qFWlVPJOpRZqnkU9IMPsZjXPP0aeNQ8Bk7Hblrxcjamjx69Mn6Tc0S?=\n\t=?utf-8?q?UztFD5w9YIndAy5YVZN4l/dNlFueqZchu/cDUdw1mhMFVt0FwHMe21cLWp92Vs2Hc?=\n\t=?utf-8?q?mA+WQcuRolOxvw4RCQ5RayOTp0dGH7vatgGm4PeVpDuhYAGKWH3G88lf/lk0JXCjc?=\n\t=?utf-8?q?Q+Eb2SHhocs4RH3NPRby88WACsGDywKjSGwhbI+1WUA8CykFKyN/0vmo66kKeWKBL?=\n\t=?utf-8?q?c8Ceud/Z5lS8dyUx6L/4QnYVVUDX0oFDvKKX+qKIrpryhMGojNHCrJpG5zvPp+HTD?=\n\t=?utf-8?q?HaVknQxqWWxgIVx6Fu7QRlHf5ZYOqZr9OQhOE0QHTlowH7/TvMUXUmzP/WrR6kd6X?=\n\t=?utf-8?q?9WqXE69Pr0f2GsejPzm/8NrmjXGGQFBI0v0ferm4zV/O+5G43A54FI1qI6sRuDoJr?=\n\t=?utf-8?q?euToP7zFUpdbNWm4YO0YlbUji3Npl9ltHMzlryBbQCCoZhPh8kOOv0BZ/4rg60loT?=\n\t=?utf-8?q?cx9t0iNVcukd47b1b0SMC/XTc5tgP0nU4L8jMyiSiGzXITPl9YXWxGExIxF0oXuZS?=\n\t=?utf-8?q?MAAu0lr4Cx+5keHV2gLQ0+ThtQ3Cq59KWe8LTvflNMTohEv5Wwdp8XI62K7NNBpiq?=\n\t=?utf-8?q?KmmW85Skz4P2rc1JlZ00kMNDMzZ5I+d+bXfjyKCH0X/FnAZJm/TyUGRB8gokXSAZc?=\n\t=?utf-8?q?uqFY1etzbGnDOI46U8v+saAHE7FzAXSZnysCbY2zIMKFn8TC0WXxV2PWMwYfvcEQI?=\n\t=?utf-8?q?frNVuIYKilm4kt+Ny7OZeG9mxGzksGiHpty37ZbsZF7pdbP0MQRdDhHa+hheu1/Kd?=\n\t=?utf-8?q?C5Gs1+RWlG1FHIDrV1tUKVu9NNQOisUDZHE05hIY2Mm1RYbl/AyRIpBvz66DfcYEt?=\n\t=?utf-8?q?mjU0HQMZ2OdzSd1/jwHcTTNcO697FT+uBdulhmlE7LWG8SDW58IZJJAxBu/hUbY2L?=\n\t=?utf-8?q?5kFuj4T7VTJmNRYLSCmPNDxFJaPxsoLqNYQhvqPaH+spzWUY6SiZpyYKN5iNR03R+?=\n\t=?utf-8?q?D0Xzx4DS7xXmnfm1JGVkmWldO1k59mkA=3D=3D?=",
        "X-OriginatorOrg": "nxp.com",
        "X-MS-Exchange-CrossTenant-Network-Message-Id": "\n daf62e8d-94fb-4b93-492a-08de8b00f3b9",
        "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:53.9477\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 R3rBjqCXV1jlQyNSGYSbJ4+SPBpcOWHcDH2O9kv87E8QKuEU80cOuwjTM20SKLuMU+ayMDIX1x/eBJ2X3WAS0A==",
        "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 buffer pool is a quantity of memory available for buffering a group\nof flows (e.g. frames having the same priority, frames received from the\nsame port), while waiting to be transmitted on a port. The buffer pool\ntracks internal memory consumption with upper bound limits and optionally\na non-shared portion when associated with a shared buffer pool. Currently\nthe shared buffer pool is not supported, it will be added in the future.\n\nFor i.MX94, the switch has 4 ports and 8 buffer pools, so each port is\nallocated two buffer pools. For frames with priorities of 0 to 3, they\nwill be mapped to the first buffer pool; For frames with priorities of\n4 to 7, they will be mapped to the second buffer pool. Each buffer pool\nhas a flow control on threshold and a flow control off threshold. By\nsetting these threshold, add the flow control support to each port.\n\nSigned-off-by: Wei Fang <wei.fang@nxp.com>\n---\n drivers/net/dsa/netc/netc_main.c      | 163 ++++++++++++++++++++++++++\n drivers/net/dsa/netc/netc_switch.h    |   9 ++\n drivers/net/dsa/netc/netc_switch_hw.h |  13 ++\n 3 files changed, 185 insertions(+)",
    "diff": "diff --git a/drivers/net/dsa/netc/netc_main.c b/drivers/net/dsa/netc/netc_main.c\nindex 3609d83ac363..62611263a93f 100644\n--- a/drivers/net/dsa/netc/netc_main.c\n+++ b/drivers/net/dsa/netc/netc_main.c\n@@ -379,6 +379,8 @@ static void netc_port_set_mlo(struct netc_port *np, enum netc_mlo mlo)\n \n static void netc_port_fixed_config(struct netc_port *np)\n {\n+\tu32 pqnt = 0xffff, qth = 0xff00;\n+\n \t/* Default IPV and DR setting */\n \tnetc_port_rmw(np, NETC_PQOSMR, PQOSMR_VS | PQOSMR_VE,\n \t\t      PQOSMR_VS | PQOSMR_VE);\n@@ -386,6 +388,15 @@ static void netc_port_fixed_config(struct netc_port *np)\n \t/* Enable L2 and L3 DOS */\n \tnetc_port_rmw(np, NETC_PCR, PCR_L2DOSE | PCR_L3DOSE,\n \t\t      PCR_L2DOSE | PCR_L3DOSE);\n+\n+\t/* Set the quanta value of TX PAUSE frame */\n+\tnetc_mac_port_wr(np, NETC_PM_PAUSE_QUANTA(0), pqnt);\n+\n+\t/* When a quanta timer counts down and reaches this value,\n+\t * the MAC sends a refresh PAUSE frame with the programmed\n+\t * full quanta value if a pause condition still exists.\n+\t */\n+\tnetc_mac_port_wr(np, NETC_PM_PAUSE_TRHESH(0), qth);\n }\n \n static void netc_port_default_config(struct netc_port *np)\n@@ -617,6 +628,117 @@ static int netc_add_standalone_fdb_bcast_entry(struct netc_switch *priv)\n \t\t\t\t       bcast, NETC_STANDALONE_PVID);\n }\n \n+static u32 netc_get_buffer_pool_num(struct netc_switch *priv)\n+{\n+\treturn netc_base_rd(&priv->regs, NETC_BPCAPR) & BPCAPR_NUM_BP;\n+}\n+\n+static void netc_port_set_pbpmcr(struct netc_port *np, u64 mapping)\n+{\n+\tu32 pbpmcr0 = lower_32_bits(mapping);\n+\tu32 pbpmcr1 = upper_32_bits(mapping);\n+\n+\tnetc_port_wr(np, NETC_PBPMCR0, pbpmcr0);\n+\tnetc_port_wr(np, NETC_PBPMCR1, pbpmcr1);\n+}\n+\n+static void netc_ipv_to_buffer_pool_mapping(struct netc_switch *priv)\n+{\n+\tint bp_per_port = priv->num_bp / priv->info->num_ports;\n+\tint q, r, num, i, ipv;\n+\tu32 bp_id;\n+\n+\tif (!bp_per_port) {\n+\t\tq = priv->info->num_ports / priv->num_bp;\n+\t\tr = priv->info->num_ports % priv->num_bp;\n+\t\tnum = (q + 1) * r;\n+\n+\t\t/* Multiple ports share a buffer pool, the mapping relationship\n+\t\t * between ports and buffer pools is as follows:\n+\t\t *\n+\t\t * - For the first 'r' buffer pools, each buffer pool is shared\n+\t\t * by 'q + 1' ports.\n+\t\t * - After that, each buffer pool is share by 'q' ports.\n+\t\t * - All IPVs of a port are mapped to the same buffer pool.\n+\t\t */\n+\t\tfor (i = 0; i < priv->info->num_ports; i++) {\n+\t\t\tu64 mapping = 0;\n+\n+\t\t\tif (i < num)\n+\t\t\t\tbp_id = i / (q + 1);\n+\t\t\telse\n+\t\t\t\tbp_id = r + (i - num) / q;\n+\n+\t\t\tfor (ipv = 0; ipv < NETC_IPV_NUM; ipv++)\n+\t\t\t\tmapping |= (u64)bp_id << (ipv * 8);\n+\n+\t\t\tnetc_port_set_pbpmcr(priv->ports[i], mapping);\n+\t\t}\n+\n+\t\treturn;\n+\t}\n+\n+\tq = NETC_IPV_NUM / bp_per_port;\n+\tr = NETC_IPV_NUM % bp_per_port;\n+\tnum = q + r;\n+\n+\t/* IPV-to–buffer-pool mapping per port:\n+\t * Each port is allocated 'bp_per_port' buffer pools and supports 8\n+\t * IPVs, where a higher IPV indicates a higher frame priority. Each\n+\t * IPV can be mapped to only one buffer pool.\n+\t *\n+\t * The mapping rule is as follows:\n+\t * - The first 'num' IPVs share the port's first buffer pool (index\n+\t * 'base_id').\n+\t * - After that, every 'q' IPVs share one buffer pool, with pool\n+\t * indices increasing sequentially.\n+\t */\n+\tfor (i = 0; i < priv->info->num_ports; i++) {\n+\t\tu32 base_id = i * bp_per_port;\n+\t\tu64 mapping = 0;\n+\n+\t\tbp_id = base_id;\n+\n+\t\tfor (ipv = 0; ipv < NETC_IPV_NUM; ipv++) {\n+\t\t\t/* Update the buffer pool index */\n+\t\t\tif (ipv >= num)\n+\t\t\t\tbp_id = base_id + ((ipv - num) / q) + 1;\n+\n+\t\t\tmapping |= (u64)bp_id << (ipv * 8);\n+\t\t}\n+\n+\t\tnetc_port_set_pbpmcr(priv->ports[i], mapping);\n+\t}\n+}\n+\n+static int netc_switch_bpt_default_config(struct netc_switch *priv)\n+{\n+\t/* priv->num_bp is read from register, its value is hardcoded as\n+\t * a non-zero value.\n+\t */\n+\tpriv->num_bp = netc_get_buffer_pool_num(priv);\n+\tpriv->bpt_list = devm_kcalloc(priv->dev, priv->num_bp,\n+\t\t\t\t      sizeof(struct bpt_cfge_data),\n+\t\t\t\t      GFP_KERNEL);\n+\tif (!priv->bpt_list)\n+\t\treturn -ENOMEM;\n+\n+\t/* Initialize the maximum threshold of each buffer pool entry */\n+\tfor (int i = 0; i < priv->num_bp; i++) {\n+\t\tstruct bpt_cfge_data *cfge = &priv->bpt_list[i];\n+\t\tint err;\n+\n+\t\tcfge->max_thresh = cpu_to_le16(NETC_BP_THRESH);\n+\t\terr = ntmp_bpt_update_entry(&priv->ntmp, i, cfge);\n+\t\tif (err)\n+\t\t\treturn err;\n+\t}\n+\n+\tnetc_ipv_to_buffer_pool_mapping(priv);\n+\n+\treturn 0;\n+}\n+\n static int netc_setup(struct dsa_switch *ds)\n {\n \tstruct netc_switch *priv = ds->priv;\n@@ -644,6 +766,10 @@ static int netc_setup(struct dsa_switch *ds)\n \tdsa_switch_for_each_available_port(dp, ds)\n \t\tnetc_port_default_config(priv->ports[dp->index]);\n \n+\terr = netc_switch_bpt_default_config(priv);\n+\tif (err)\n+\t\tgoto free_lock_and_ntmp_user;\n+\n \terr = netc_add_standalone_vlan_entry(priv);\n \tif (err)\n \t\tgoto free_lock_and_ntmp_user;\n@@ -1195,6 +1321,41 @@ static void netc_port_set_rmii_mii_mac(struct netc_port *np,\n \tnetc_mac_port_rmw(np, NETC_PM_IF_MODE(0), mask, val);\n }\n \n+static void netc_port_set_tx_pause(struct netc_port *np, bool tx_pause)\n+{\n+\tstruct netc_switch *priv = np->switch_priv;\n+\tint port = np->dp->index;\n+\tint i, j, num_bp;\n+\n+\tnum_bp = priv->num_bp / priv->info->num_ports;\n+\tfor (i = 0, j = port * num_bp; i < num_bp; i++, j++) {\n+\t\tstruct bpt_cfge_data *cfge = &priv->bpt_list[j];\n+\t\tstruct bpt_cfge_data old_cfge = *cfge;\n+\n+\t\tif (tx_pause) {\n+\t\t\tcfge->fc_on_thresh = cpu_to_le16(NETC_FC_THRESH_ON);\n+\t\t\tcfge->fc_off_thresh = cpu_to_le16(NETC_FC_THRESH_OFF);\n+\t\t\tcfge->fccfg_sbpen = FIELD_PREP(BPT_FC_CFG,\n+\t\t\t\t\t\t       BPT_FC_CFG_EN_BPFC);\n+\t\t\tcfge->fc_ports = cpu_to_le32(BIT(port));\n+\t\t} else {\n+\t\t\tcfge->fc_on_thresh = cpu_to_le16(0);\n+\t\t\tcfge->fc_off_thresh = cpu_to_le16(0);\n+\t\t\tcfge->fccfg_sbpen = 0;\n+\t\t\tcfge->fc_ports = cpu_to_le32(0);\n+\t\t}\n+\n+\t\tif (ntmp_bpt_update_entry(&priv->ntmp, j, cfge))\n+\t\t\t*cfge = old_cfge;\n+\t}\n+}\n+\n+static void netc_port_set_rx_pause(struct netc_port *np, bool rx_pause)\n+{\n+\tnetc_mac_port_rmw(np, NETC_PM_CMD_CFG(0), PM_CMD_CFG_PAUSE_IGN,\n+\t\t\t  rx_pause ? 0 : PM_CMD_CFG_PAUSE_IGN);\n+}\n+\n static void netc_port_mac_rx_enable(struct netc_port *np)\n {\n \tnetc_port_rmw(np, NETC_POR, PCR_RXDIS, 0);\n@@ -1256,6 +1417,8 @@ static void netc_mac_link_up(struct phylink_config *config,\n \t    interface == PHY_INTERFACE_MODE_MII)\n \t\tnetc_port_set_rmii_mii_mac(np, speed, duplex);\n \n+\tnetc_port_set_tx_pause(np, tx_pause);\n+\tnetc_port_set_rx_pause(np, rx_pause);\n \tnetc_port_mac_rx_enable(np);\n }\n \ndiff --git a/drivers/net/dsa/netc/netc_switch.h b/drivers/net/dsa/netc/netc_switch.h\nindex 4b229a71578e..7ebffb136b2f 100644\n--- a/drivers/net/dsa/netc/netc_switch.h\n+++ b/drivers/net/dsa/netc/netc_switch.h\n@@ -32,6 +32,12 @@\n \n #define NETC_STANDALONE_PVID\t\t0\n \n+#define NETC_IPV_NUM\t\t\t8\n+/* MANT = bits 11:4, EXP = bits 3:0, threshold = MANT * 2 ^ EXP */\n+#define NETC_BP_THRESH\t\t\t0x334\n+#define NETC_FC_THRESH_ON\t\t0x533\n+#define NETC_FC_THRESH_OFF\t\t0x3c3\n+\n struct netc_switch;\n \n struct netc_switch_info {\n@@ -90,6 +96,9 @@ struct netc_switch {\n \tstruct ntmp_user ntmp;\n \tstruct hlist_head fdb_list;\n \tstruct mutex fdbt_lock; /* FDB table lock */\n+\n+\tu32 num_bp;\n+\tstruct bpt_cfge_data *bpt_list;\n };\n \n #define NETC_PRIV(ds)\t\t\t((struct netc_switch *)((ds)->priv))\ndiff --git a/drivers/net/dsa/netc/netc_switch_hw.h b/drivers/net/dsa/netc/netc_switch_hw.h\nindex c6a0c0a8ff8a..1e1c0d279a21 100644\n--- a/drivers/net/dsa/netc/netc_switch_hw.h\n+++ b/drivers/net/dsa/netc/netc_switch_hw.h\n@@ -12,6 +12,12 @@\n #define NETC_SWITCH_DEVICE_ID\t\t0xeef2\n \n /* Definition of Switch base registers */\n+#define NETC_BPCAPR\t\t\t0x0008\n+#define  BPCAPR_NUM_BP\t\t\tGENMASK(7, 0)\n+\n+#define NETC_PBPMCR0\t\t\t0x0400\n+#define NETC_PBPMCR1\t\t\t0x0404\n+\n #define NETC_CBDRMR(a)\t\t\t(0x0800 + (a) * 0x30)\n #define NETC_CBDRBAR0(a)\t\t(0x0810 + (a) * 0x30)\n #define NETC_CBDRBAR1(a)\t\t(0x0814 + (a) * 0x30)\n@@ -138,6 +144,7 @@ enum netc_stg_stage {\n #define NETC_PM_CMD_CFG(a)\t\t(0x1008 + (a) * 0x400)\n #define  PM_CMD_CFG_TX_EN\t\tBIT(0)\n #define  PM_CMD_CFG_RX_EN\t\tBIT(1)\n+#define  PM_CMD_CFG_PAUSE_IGN\t\tBIT(8)\n \n #define NETC_PM_MAXFRM(a)\t\t(0x1014 + (a) * 0x400)\n #define  PM_MAXFRAM\t\t\tGENMASK(15, 0)\n@@ -145,6 +152,12 @@ enum netc_stg_stage {\n #define NETC_PM_IEVENT(a)\t\t(0x1040 + (a) * 0x400)\n #define  PM_IEVENT_RX_EMPTY\t\tBIT(6)\n \n+#define NETC_PM_PAUSE_QUANTA(a)\t\t(0x1054 + (a) * 0x400)\n+#define  PAUSE_QUANTA_PQNT\t\tGENMASK(15, 0)\n+\n+#define NETC_PM_PAUSE_TRHESH(a)\t\t(0x1064 + (a) * 0x400)\n+#define  PAUSE_TRHESH_QTH\t\tGENMASK(15, 0)\n+\n #define NETC_PM_IF_MODE(a)\t\t(0x1300 + (a) * 0x400)\n #define  PM_IF_MODE_IFMODE\t\tGENMASK(2, 0)\n #define   IFMODE_MII\t\t\t1\n",
    "prefixes": [
        "v3",
        "net-next",
        "13/14"
    ]
}