Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/patches/2216220/?format=api
{ "id": 2216220, "url": "http://patchwork.ozlabs.org/api/patches/2216220/?format=api", "web_url": "http://patchwork.ozlabs.org/project/linuxppc-dev/patch/20260326062917.3552334-12-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-12-wei.fang@nxp.com>", "list_archive_url": "https://lore.kernel.org/linuxppc-dev/20260326062917.3552334-12-wei.fang@nxp.com/", "date": "2026-03-26T06:29:14", "name": "[v3,net-next,11/14] net: dsa: netc: add phylink MAC operations", "commit_ref": null, "pull_url": null, "state": "handled-elsewhere", "archived": false, "hash": "3fd44a38d20f443c5559421a791cbb692c0bf36b", "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-12-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/2216220/comments/", "check": "pending", "checks": "http://patchwork.ozlabs.org/api/patches/2216220/checks/", "tags": {}, "related": [], "headers": { "Return-Path": "\n <linuxppc-dev+bounces-18806-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=cwjnmJ0K;\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-18806-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=cwjnmJ0K;\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 4fhDPv0lgQz1y1G\n\tfor <incoming@patchwork.ozlabs.org>; Thu, 26 Mar 2026 17:29:07 +1100 (AEDT)", "from boromir.ozlabs.org (localhost [127.0.0.1])\n\tby lists.ozlabs.org (Postfix) with ESMTP id 4fhDPS54sGz30BC;\n\tThu, 26 Mar 2026 17:28:44 +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 4fhDPR4jMPz3069\n\tfor <linuxppc-dev@lists.ozlabs.org>; Thu, 26 Mar 2026 17:28:43 +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:40 +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:40 +0000" ], "ARC-Seal": [ "i=2; a=rsa-sha256; d=lists.ozlabs.org; s=201707; t=1774506524;\n\tcv=pass;\n b=idOaOii+N1Yx5w2cH2BjTx0b2uMwytbm69ZT5dxsF/hiuds6IxE38x9h6iSAKRYpDyZcH2/KDAC4elkAw62Mmany8+mjf43jy3jke5OuNS4ZWlZsSZzf3UzNyQeGv94OwV9Q9LYKnXblSXl1Voy5q305E+i7uFBrwkVXC56kSZpNwxhIbc89P+FOgC79oRL/CwjYG45XGRUREqxNpgooGayWALA8L2RxdpJI3qNNRJ9pNquKKk9Ly5OzW81TEIjJns6NHXZkR3J6uBBwDL83sOE2vr/r7bbP5WwcBHVA9d15furPsQQ0ZSSE+Ax3Pnn6jb0gBrevNDAgyWVc1b6GrQ==", "i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;\n b=p8VWDByUuITAQsUW2guywArUyCd0cFrmAv2RdVX3mnWwIaYG8RDTfGb41m91qEgHD8jdhmgN3Mykh9TtEnD2QMalldWJJrYnZ7UAjSfkHMWSz/U13PnO4OHRKm4vJxo8BKixYoFyluYZoTKexthYNQSuGPhMINdDFRnBHmKmQIsqywNGsqvjVkOTySvm/w0XsgxStrnfgcB3TpU/EXjk55dZ0YCgk5oyynvk/+wd4GPD+TKTmRAuLKyAbB9dgqntnVtqtFLwz64QheyqFXdu5nXRPtUfbYpQokgnTMvVXvmfo5InPtVoXVnWBaB3wiYrllOC91qdKmlJAwrCU1S1kw==" ], "ARC-Message-Signature": [ "i=2; a=rsa-sha256; d=lists.ozlabs.org; s=201707;\n\tt=1774506524; c=relaxed/relaxed;\n\tbh=oqoeeUeQs94pCwHeizzvSYYBLJhpvBS5eR+sc3tiq1A=;\n\th=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References:\n\t Content-Type:MIME-Version;\n b=H3hBDs1VLhgFYo0TOyOGwmcMKa6gTSdvAtpUpzz0I9pqXyQBURted9XOM8a5W8SItzH14ruHN4HfsrN5quB8py5xOR8zBxbeUnbd5Hvc2bykMvZEKx7FKF0VlBFieMdpqyWLTlBWY+a/dNhBroTRTC6R8BQv5hFdn9j99sEEmT+3S7IPZGEUCdktW9LKsSZvyO5D93g6IVluQDsa3/HI0zt8fLjKObD/lHJGc439PJiFd8dmKM5OPUs60LnQIqQh5WtN3++yNwyFMdIvg6t5wZ++KUTiaTnebF4fiiOQPEW8dL40r30C9O8DCARbn6Tzp3g8wJFjOJnjkXq5N76UZw==", "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=oqoeeUeQs94pCwHeizzvSYYBLJhpvBS5eR+sc3tiq1A=;\n b=RSqZslmzFgaq6tGeAeTb+uuXy+/8d/L+9byGm16LeOqMfXjxL6GmVJaC4ivUGbpHPe8uSrTLR54lejnlCKP1iZKVZzryo5mPC+6rVLSixoEkGTeJWR4DQkMeJ0pltwVFE4+dmiu7KHyW8TPjJVdBXZ4GB4oGU8X0zSVecYuGfIIwNaDmFbfUM0zATKbLZejSDDnaqwE7oD/hfsRvy8JDQSAb7soRSM3S+nFwSeBjnVCSKuH1P1AY+/LDFsCQJY6bNDh76NnppwFn7lIU3odKeZaijNZrLyqfRc/U4rDDwZLcf+NmBtjbs9he8Km7Z3CYvWMqlvXqWeTx0ahOyTjLLQ==" ], "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=cwjnmJ0K; 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=oqoeeUeQs94pCwHeizzvSYYBLJhpvBS5eR+sc3tiq1A=;\n b=cwjnmJ0KChlFkxxc+oUsnmOQbYlCgYA9TL9DCajDw6TWbWycvKlZ214Ek89W8K6+2RCaydt8f/8E/dDzOWp7+INfPmnDfVHsCgth++/JwKxhdbM2L6+WA8YyGO0sn0i4Wft8l4IC2poTpYE417g3WSyBjpv5+PQdkUioOUqUMB8+0jTBdHMpLp31NEY+wDJL44aPD0hX3isoVpOUwd2M9Bi1k5kgcN+BBSvGqLf6WQML16vXjfVWRNVkN9AB40a8LDpSpMU3+iFOafp5CoS2yKJ/nTSam2jmpCNsCuiJ+gOxaRTipzarIo4TK7M6rpyB0Lt5NxaqgoNEVLJmzxYf3Q==", "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 11/14] net: dsa: netc: add phylink MAC operations", "Date": "Thu, 26 Mar 2026 14:29:14 +0800", "Message-Id": "<20260326062917.3552334-12-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": "f183b1db-926f-441a-3b4a-08de8b00eb98", "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\t8x1bTyP6kFO5brNhC97oEBtHuXQoTQOcchuUTAHn1IYZWxSj5IeH9fnysW6hddvxs5+Eb5YNYtxS6qjEpJNhCFpgn838OSWeGRC85dwG+Jxllppqg9J5zRo+UohRo2LZOfLDdM39yGS+rL18CCevWt5zbg3U9fRLyuXKwJalKb/GxmsTvHHavhP85Y5gUBzB1C+LnpwImIKOI53vpXGQYA1NhR0AAk0dZmasvSIZdEgWyWxyOCGnPrHRzIpYzyQL5uA22i4EM2I3snRTcXcmLVNFwrwZbAACxqJH81iJBsEHpdgqlAml07IY5rfZDOCIJsbN/wxOCjkSt1tzh7h8/PrC8uPEj1u0g4u1rO8vM4hNpOQ6txfLYWfnMc/O5I2Fe9uJy/0rJEXJ59aUpJ79syEL4B0IASxEQqXTIwRzPdZnA5AtSc4WBMj39fPTlx+iWNON5QI0eiKPmmBznm8M0rqPERv8fWejuqSGJMRi0xZsLK1qnQY60fy5capGXmC3r8Nf5HyJdc1CAItgXE7txwjMqFU5v1AtR/W9XWmKAcUBlxSH3tgcItzFj6TTNv7TH005dT5M9PX/b7ZMQeLT26v3hD9l0w5598RT5rC6S9+AKVmX/eSC5zxGBGyu3Ubc8hDxkfYxrr1UKxATXkkBLGMV1G1d2H5Sk5qnJKVQzDJb0rdkoYAI0SoXLDKc0X0FctxIaJbbOWOWCkPIujZmP590s7aehpTv003KqipmF/icuQFv7qjfSpEz4sW02/HDn7E/w/5/qKrOVPtYXJLaLyXGTedwTd+u+wijuE1AVbhWktbpxDuRIpd9yLG2YSoI", "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 wEE+EU3V6F06Rlg9JBiz7mqtgSya2LTTd4VsRKanVkgVS7Ckb/QFY5J3ulIlPKRGVdm4lT5W1i9lU8Km4DWIxOYGiRXNGmpfjybgRDpRTZqrSTgjuNtEl0+2FSoD/pAUaiBCQMAaP/kBloVbd0dMbsIIEi11GAvJHHihBSgtqCItV2Z4hp/cuQUa6MIR0wmGX+lG4wFUpm5CCzjw8EYcHtP6GDGVyDiwxfsuSUMgKAEnic0zL9r+Ndwhx7ZwqfnFf0LBK9dcZQy7yc3wX4ETX08kBdbMlLVu0R8Of64yw4ndoSNqQ1lgpBKRk+TckjiX7t+gXphxtoLFF3w9J/hJeBZCAVc3o1udsyF9hdnjzk9HURAipvYzAypZ4+IBoVNM2pz2WgMe6rPimGJLQ/c+7Zb/QKVU2BNUSbBp6PVMx2Nxz3m8dLVmSYXjGpV2fzl1rOZ1oqu27ymQFukOLtdCnEMvcXJlE0W8jfGGWR+Ff3dadri0V3HWaKF30P3v422qpy7j+MUxKseoWKmTe3sb8JtOylhPbxvwDDt92/QncynTQ/STs031k6m3hvJmt6N/U49bHAsbOpXtP3II85Fyj+uvCJrktB4f4x2BnMVoZseQq5w5sCB7mqb1mzjPkbCCLW0XsY82SoqvbPXB19wqeP0racVjQdFmDvnV3X193H4pY6KGpFGaO/z3BqbCgKmKGt6tNlDI9vvfBvTwmjDwp1HY5xoqLM1Ingswkioib3s4OFQ038zotMASQSstN+lm0kbHDEeMfe08cgKazb2wVNBoYJJPP1d/TxiieReMX0YG0ZBLtkYQcpJRHczP8/lAfqXJ/TR7if/nHl8pdAapuSaFG6Yb2/BWU8Zuq/6MxBMumNKVIcxOCRM/npe4a3AqhX7UpjcIFs+Z3SjYclVY1XSv0lno2H0YupLM4GDF+uajeNABAfOiFprD+ZchsPbqqogv3yRcnes3F7OAfrOGK3qw+G4ZDUZ79cTbaBBE2NcZyEPPX5lPsoVfISc3SL7Wf2OKeFb50YUyQUzrlOnQZhIIE2TC1O1IlE52njDV32o2pN5QSN2GXbzcbGvkbf90f0m7kqB5ku02M0NTTnIqYzkJ0kCowgbagOtYXelrolW3a2oXGYlz56lHThblpY5JwCoSMTxTl6dxk6/85iZEuYydsToasNdtl3ufSJCX+lIpm5XiNKvmLR2fz1WHCIwJWbXz24v7PTCPe7XPpkiInGq+/ZzldCPrMW5R0A5RmQD+6JhggxaFmPXz5MwdGbR22VFgho8S1c6FBJgnfkYz2pvfhRs1eB0s+BcvjqtZxgVGmhJg3GtLrMBVuHm9Yo5kuZrg1r/DJ7paFiX9rADN6e0lXy7J1B4QF0ohuZ5EQZk2yDOQPFJ270t9vffwwrv2geXXFZmwGvX7/3koupgohLlhWIgKihputdooiT1jTBN9WGiVLzWi6BiitmGnFoJtf8VGZ/am+9qgKSB3fGIS+19AoCfoZlzjTz/PADwVTR77gCDE8ytLG4PylV4NNq0IBN24fAwkBpKvdMOYGhWgLpxcEZTeRxc36WaP7Q0rQ3Ku0fjaUdAWx5REPiaUfRlmtSpFSzS82CAL3Ed4JCrPi2pKAfEFmPrLExbfjMrZVAcpWMVN0H7KBtlx/5I/Mr4op4cWgL9GNnvcSA8WRTmmx1uZ/+GOxesffGlzIq0Ht4CAnE/DgqL3G6wU5N6K56Kj0n1LLDCSGXxKAuyWAKK0+g==", "X-OriginatorOrg": "nxp.com", "X-MS-Exchange-CrossTenant-Network-Message-Id": "\n f183b1db-926f-441a-3b4a-08de8b00eb98", "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:40.4455\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 VyYPafjiVp0089S6zEeoE28d3N3a0IKWFK1OydEoDGrXd2p6S22/nFmmWxQmYRc8tUF/sNg8kz1fyAwaXnHSlw==", "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": "Different versions of NETC switches have different numbers of ports and\nMAC capabilities, so add .phylink_get_caps() to struct netc_switch_info,\nso that each version of the NETC switch can implement its own callback\nto obtain MAC capabilities. In addition, related interfaces of struct\nphylink_mac_ops are added, such as .mac_config(), .mac_link_up(), and\n.mac_link_down().\n\nSigned-off-by: Wei Fang <wei.fang@nxp.com>\n---\n drivers/net/dsa/netc/netc_main.c | 179 ++++++++++++++++++++++++++\n drivers/net/dsa/netc/netc_platform.c | 40 ++++++\n drivers/net/dsa/netc/netc_switch.h | 4 +\n drivers/net/dsa/netc/netc_switch_hw.h | 21 +++\n 4 files changed, 244 insertions(+)", "diff": "diff --git a/drivers/net/dsa/netc/netc_main.c b/drivers/net/dsa/netc/netc_main.c\nindex 5828fd3e342e..f11f5d0f6a6d 100644\n--- a/drivers/net/dsa/netc/netc_main.c\n+++ b/drivers/net/dsa/netc/netc_main.c\n@@ -569,10 +569,188 @@ static void netc_switch_get_ip_revision(struct netc_switch *priv)\n \tpriv->revision = val & IPBRR0_IP_REV;\n }\n \n+static void netc_phylink_get_caps(struct dsa_switch *ds, int port,\n+\t\t\t\t struct phylink_config *config)\n+{\n+\tstruct netc_switch *priv = ds->priv;\n+\n+\tpriv->info->phylink_get_caps(port, config);\n+}\n+\n+static void netc_port_set_mac_mode(struct netc_port *np,\n+\t\t\t\t unsigned int mode,\n+\t\t\t\t phy_interface_t phy_mode)\n+{\n+\tu32 mask = PM_IF_MODE_IFMODE | PM_IF_MODE_REVMII;\n+\tu32 val = 0;\n+\n+\tswitch (phy_mode) {\n+\tcase PHY_INTERFACE_MODE_RGMII:\n+\tcase PHY_INTERFACE_MODE_RGMII_ID:\n+\tcase PHY_INTERFACE_MODE_RGMII_RXID:\n+\tcase PHY_INTERFACE_MODE_RGMII_TXID:\n+\t\tval |= IFMODE_RGMII;\n+\t\tbreak;\n+\tcase PHY_INTERFACE_MODE_RMII:\n+\t\tval |= IFMODE_RMII;\n+\t\tbreak;\n+\tcase PHY_INTERFACE_MODE_REVMII:\n+\t\tval |= PM_IF_MODE_REVMII;\n+\t\tfallthrough;\n+\tcase PHY_INTERFACE_MODE_MII:\n+\t\tval |= IFMODE_MII;\n+\t\tbreak;\n+\tcase PHY_INTERFACE_MODE_SGMII:\n+\tcase PHY_INTERFACE_MODE_2500BASEX:\n+\t\tval |= IFMODE_SGMII;\n+\t\tbreak;\n+\tdefault:\n+\t\tbreak;\n+\t}\n+\n+\tnetc_mac_port_rmw(np, NETC_PM_IF_MODE(0), mask, val);\n+}\n+\n+static void netc_mac_config(struct phylink_config *config, unsigned int mode,\n+\t\t\t const struct phylink_link_state *state)\n+{\n+\tstruct dsa_port *dp = dsa_phylink_to_port(config);\n+\n+\tnetc_port_set_mac_mode(NETC_PORT(dp->ds, dp->index), mode,\n+\t\t\t state->interface);\n+}\n+\n+static void netc_port_set_speed(struct netc_port *np, int speed)\n+{\n+\tnetc_port_rmw(np, NETC_PCR, PCR_PSPEED, PSPEED_SET_VAL(speed));\n+}\n+\n+static void netc_port_set_rgmii_mac(struct netc_port *np,\n+\t\t\t\t int speed, int duplex)\n+{\n+\tu32 mask, val;\n+\n+\tmask = PM_IF_MODE_SSP | PM_IF_MODE_HD | PM_IF_MODE_M10;\n+\n+\tswitch (speed) {\n+\tdefault:\n+\tcase SPEED_1000:\n+\t\tval = FIELD_PREP(PM_IF_MODE_SSP, SSP_1G);\n+\t\tbreak;\n+\tcase SPEED_100:\n+\t\tval = FIELD_PREP(PM_IF_MODE_SSP, SSP_100M);\n+\t\tbreak;\n+\tcase SPEED_10:\n+\t\tval = FIELD_PREP(PM_IF_MODE_SSP, SSP_10M);\n+\t\tbreak;\n+\t}\n+\n+\tif (duplex != DUPLEX_FULL)\n+\t\tval |= PM_IF_MODE_HD;\n+\n+\tnetc_mac_port_rmw(np, NETC_PM_IF_MODE(0), mask, val);\n+}\n+\n+static void netc_port_set_rmii_mii_mac(struct netc_port *np,\n+\t\t\t\t int speed, int duplex)\n+{\n+\tu32 mask, val = 0;\n+\n+\tmask = PM_IF_MODE_SSP | PM_IF_MODE_HD | PM_IF_MODE_M10;\n+\n+\tif (speed == SPEED_10)\n+\t\tval |= PM_IF_MODE_M10;\n+\n+\tif (duplex != DUPLEX_FULL)\n+\t\tval |= PM_IF_MODE_HD;\n+\n+\tnetc_mac_port_rmw(np, NETC_PM_IF_MODE(0), mask, val);\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+\tnetc_mac_port_rmw(np, NETC_PM_CMD_CFG(0), PM_CMD_CFG_RX_EN,\n+\t\t\t PM_CMD_CFG_RX_EN);\n+}\n+\n+static void netc_port_wait_rx_empty(struct netc_port *np, int mac)\n+{\n+\tu32 val;\n+\n+\tif (read_poll_timeout(netc_port_rd, val, val & PM_IEVENT_RX_EMPTY,\n+\t\t\t 100, 10000, false, np, NETC_PM_IEVENT(mac)))\n+\t\tdev_warn(np->switch_priv->dev,\n+\t\t\t \"MAC %d of swp%d RX is not empty\\n\", mac,\n+\t\t\t np->dp->index);\n+}\n+\n+static void netc_port_mac_rx_graceful_stop(struct netc_port *np)\n+{\n+\tu32 val;\n+\n+\tif (is_netc_pseudo_port(np))\n+\t\tgoto check_rx_busy;\n+\n+\tif (np->caps.pmac) {\n+\t\tnetc_port_rmw(np, NETC_PM_CMD_CFG(1), PM_CMD_CFG_RX_EN, 0);\n+\t\tnetc_port_wait_rx_empty(np, 1);\n+\t}\n+\n+\tnetc_port_rmw(np, NETC_PM_CMD_CFG(0), PM_CMD_CFG_RX_EN, 0);\n+\tnetc_port_wait_rx_empty(np, 0);\n+\n+check_rx_busy:\n+\tif (read_poll_timeout(netc_port_rd, val, !(val & PSR_RX_BUSY),\n+\t\t\t 100, 10000, false, np, NETC_PSR))\n+\t\tdev_warn(np->switch_priv->dev, \"swp%d RX is busy\\n\",\n+\t\t\t np->dp->index);\n+\n+\tnetc_port_rmw(np, NETC_POR, PCR_RXDIS, PCR_RXDIS);\n+}\n+\n+static void netc_mac_link_up(struct phylink_config *config,\n+\t\t\t struct phy_device *phy, unsigned int mode,\n+\t\t\t phy_interface_t interface, int speed,\n+\t\t\t int duplex, bool tx_pause, bool rx_pause)\n+{\n+\tstruct dsa_port *dp = dsa_phylink_to_port(config);\n+\tstruct netc_port *np;\n+\n+\tnp = NETC_PORT(dp->ds, dp->index);\n+\tnetc_port_set_speed(np, speed);\n+\n+\tif (phy_interface_mode_is_rgmii(interface))\n+\t\tnetc_port_set_rgmii_mac(np, speed, duplex);\n+\n+\tif (interface == PHY_INTERFACE_MODE_RMII ||\n+\t interface == PHY_INTERFACE_MODE_REVMII ||\n+\t interface == PHY_INTERFACE_MODE_MII)\n+\t\tnetc_port_set_rmii_mii_mac(np, speed, duplex);\n+\n+\tnetc_port_mac_rx_enable(np);\n+}\n+\n+static void netc_mac_link_down(struct phylink_config *config,\n+\t\t\t unsigned int mode,\n+\t\t\t phy_interface_t interface)\n+{\n+\tstruct dsa_port *dp = dsa_phylink_to_port(config);\n+\n+\tnetc_port_mac_rx_graceful_stop(NETC_PORT(dp->ds, dp->index));\n+}\n+\n+static const struct phylink_mac_ops netc_phylink_mac_ops = {\n+\t.mac_config\t\t= netc_mac_config,\n+\t.mac_link_up\t\t= netc_mac_link_up,\n+\t.mac_link_down\t\t= netc_mac_link_down,\n+};\n+\n static const struct dsa_switch_ops netc_switch_ops = {\n \t.get_tag_protocol\t\t= netc_get_tag_protocol,\n \t.setup\t\t\t\t= netc_setup,\n \t.teardown\t\t\t= netc_teardown,\n+\t.phylink_get_caps\t\t= netc_phylink_get_caps,\n };\n \n static int netc_switch_probe(struct pci_dev *pdev,\n@@ -613,6 +791,7 @@ static int netc_switch_probe(struct pci_dev *pdev,\n \tds->num_ports = priv->info->num_ports;\n \tds->num_tx_queues = NETC_TC_NUM;\n \tds->ops = &netc_switch_ops;\n+\tds->phylink_mac_ops = &netc_phylink_mac_ops;\n \tds->priv = priv;\n \n \tpriv->ds = ds;\ndiff --git a/drivers/net/dsa/netc/netc_platform.c b/drivers/net/dsa/netc/netc_platform.c\nindex abd599ea9c8d..8d3fb5151902 100644\n--- a/drivers/net/dsa/netc/netc_platform.c\n+++ b/drivers/net/dsa/netc/netc_platform.c\n@@ -11,8 +11,48 @@ struct netc_switch_platform {\n \tconst struct netc_switch_info *info;\n };\n \n+static void imx94_switch_phylink_get_caps(int port,\n+\t\t\t\t\t struct phylink_config *config)\n+{\n+\tconfig->mac_capabilities = MAC_ASYM_PAUSE | MAC_SYM_PAUSE |\n+\t\t\t\t MAC_1000FD;\n+\n+\tswitch (port) {\n+\tcase 0 ... 1:\n+\t\t__set_bit(PHY_INTERFACE_MODE_SGMII,\n+\t\t\t config->supported_interfaces);\n+\t\t__set_bit(PHY_INTERFACE_MODE_1000BASEX,\n+\t\t\t config->supported_interfaces);\n+\t\t__set_bit(PHY_INTERFACE_MODE_2500BASEX,\n+\t\t\t config->supported_interfaces);\n+\t\tconfig->mac_capabilities |= MAC_2500FD;\n+\t\tfallthrough;\n+\tcase 2:\n+\t\tconfig->mac_capabilities |= MAC_10 | MAC_100;\n+\t\t__set_bit(PHY_INTERFACE_MODE_MII,\n+\t\t\t config->supported_interfaces);\n+\t\t__set_bit(PHY_INTERFACE_MODE_RMII,\n+\t\t\t config->supported_interfaces);\n+\t\tif (port == 2)\n+\t\t\t__set_bit(PHY_INTERFACE_MODE_REVMII,\n+\t\t\t\t config->supported_interfaces);\n+\n+\t\tphy_interface_set_rgmii(config->supported_interfaces);\n+\t\tbreak;\n+\tcase 3: /* CPU port */\n+\t\t__set_bit(PHY_INTERFACE_MODE_INTERNAL,\n+\t\t\t config->supported_interfaces);\n+\t\tconfig->mac_capabilities |= MAC_10FD | MAC_100FD |\n+\t\t\t\t\t MAC_2500FD;\n+\t\tbreak;\n+\tdefault:\n+\t\tbreak;\n+\t}\n+}\n+\n static const struct netc_switch_info imx94_info = {\n \t.num_ports = 4,\n+\t.phylink_get_caps = imx94_switch_phylink_get_caps,\n };\n \n static const struct netc_switch_platform netc_platforms[] = {\ndiff --git a/drivers/net/dsa/netc/netc_switch.h b/drivers/net/dsa/netc/netc_switch.h\nindex dac19bfba02b..eb65c36ecead 100644\n--- a/drivers/net/dsa/netc/netc_switch.h\n+++ b/drivers/net/dsa/netc/netc_switch.h\n@@ -34,6 +34,7 @@ struct netc_switch;\n \n struct netc_switch_info {\n \tu32 num_ports;\n+\tvoid (*phylink_get_caps)(int port, struct phylink_config *config);\n };\n \n struct netc_port_caps {\n@@ -70,6 +71,9 @@ struct netc_switch {\n \tstruct ntmp_user ntmp;\n };\n \n+#define NETC_PRIV(ds)\t\t\t((struct netc_switch *)((ds)->priv))\n+#define NETC_PORT(ds, port_id)\t\t(NETC_PRIV(ds)->ports[(port_id)])\n+\n /* Write/Read Switch base registers */\n #define netc_base_rd(r, o)\t\tnetc_read((r)->base + (o))\n #define netc_base_wr(r, o, v)\t\tnetc_write((r)->base + (o), v)\ndiff --git a/drivers/net/dsa/netc/netc_switch_hw.h b/drivers/net/dsa/netc/netc_switch_hw.h\nindex 11cb124ce4bf..881122004644 100644\n--- a/drivers/net/dsa/netc/netc_switch_hw.h\n+++ b/drivers/net/dsa/netc/netc_switch_hw.h\n@@ -71,6 +71,10 @@\n #define PCR_TXDIS\t\t\tBIT(0)\n #define PCR_RXDIS\t\t\tBIT(1)\n \n+#define NETC_PSR\t\t\t0x104\n+#define PSR_TX_BUSY\t\t\tBIT(0)\n+#define PSR_RX_BUSY\t\t\tBIT(1)\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@@ -127,6 +131,23 @@ enum netc_mfo {\n #define NETC_PM_MAXFRM(a)\t\t(0x1014 + (a) * 0x400)\n #define PM_MAXFRAM\t\t\tGENMASK(15, 0)\n \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_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+#define IFMODE_RMII\t\t\t3\n+#define IFMODE_RGMII\t\t\t4\n+#define IFMODE_SGMII\t\t\t5\n+#define PM_IF_MODE_REVMII\t\tBIT(3)\n+#define PM_IF_MODE_M10\t\t\tBIT(4)\n+#define PM_IF_MODE_HD\t\t\tBIT(6)\n+#define PM_IF_MODE_SSP\t\t\tGENMASK(14, 13)\n+#define SSP_100M\t\t\t0\n+#define SSP_10M\t\t\t1\n+#define SSP_1G\t\t\t2\n+\n #define NETC_PEMDIOCR\t\t\t0x1c00\n #define NETC_EMDIO_BASE\t\t\tNETC_PEMDIOCR\n \n", "prefixes": [ "v3", "net-next", "11/14" ] }