Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/patches/2216222/?format=api
{ "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" ] }