Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/patches/2195734/?format=api
{ "id": 2195734, "url": "http://patchwork.ozlabs.org/api/patches/2195734/?format=api", "web_url": "http://patchwork.ozlabs.org/project/uboot/patch/20260211182230.968921-3-mikhail.kshevetskiy@iopsys.eu/", "project": { "id": 18, "url": "http://patchwork.ozlabs.org/api/projects/18/?format=api", "name": "U-Boot", "link_name": "uboot", "list_id": "u-boot.lists.denx.de", "list_email": "u-boot@lists.denx.de", "web_url": null, "scm_url": null, "webscm_url": null, "list_archive_url": "", "list_archive_url_format": "", "commit_url_format": "" }, "msgid": "<20260211182230.968921-3-mikhail.kshevetskiy@iopsys.eu>", "list_archive_url": null, "date": "2026-02-11T18:22:16", "name": "[v2,02/16] net: airoha: add initial support for multiple GDM port", "commit_ref": null, "pull_url": null, "state": "new", "archived": false, "hash": "1d72f131127d1056fdf555c33c86fb7dedd16ada", "submitter": { "id": 84987, "url": "http://patchwork.ozlabs.org/api/people/84987/?format=api", "name": "Mikhail Kshevetskiy", "email": "mikhail.kshevetskiy@iopsys.eu" }, "delegate": { "id": 157425, "url": "http://patchwork.ozlabs.org/api/users/157425/?format=api", "username": "jforissier", "first_name": "Jerome", "last_name": "Forissier", "email": "jerome.forissier@linaro.org" }, "mbox": "http://patchwork.ozlabs.org/project/uboot/patch/20260211182230.968921-3-mikhail.kshevetskiy@iopsys.eu/mbox/", "series": [ { "id": 491892, "url": "http://patchwork.ozlabs.org/api/series/491892/?format=api", "web_url": "http://patchwork.ozlabs.org/project/uboot/list/?series=491892", "date": "2026-02-11T18:22:15", "name": "net: airoha: PCS and MDIO support for Airoha AN7581 SoC", "version": 2, "mbox": "http://patchwork.ozlabs.org/series/491892/mbox/" } ], "comments": "http://patchwork.ozlabs.org/api/patches/2195734/comments/", "check": "pending", "checks": "http://patchwork.ozlabs.org/api/patches/2195734/checks/", "tags": {}, "related": [], "headers": { "Return-Path": "<u-boot-bounces@lists.denx.de>", "X-Original-To": "incoming@patchwork.ozlabs.org", "Delivered-To": "patchwork-incoming@legolas.ozlabs.org", "Authentication-Results": [ "legolas.ozlabs.org;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=iopsys.eu header.i=@iopsys.eu header.a=rsa-sha256\n header.s=selector1 header.b=f/MsORW+;\n\tdkim-atps=neutral", "legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=lists.denx.de\n (client-ip=2a01:238:438b:c500:173d:9f52:ddab:ee01; helo=phobos.denx.de;\n envelope-from=u-boot-bounces@lists.denx.de; receiver=patchwork.ozlabs.org)", "phobos.denx.de;\n dmarc=pass (p=reject dis=none) header.from=iopsys.eu", "phobos.denx.de;\n spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de", "phobos.denx.de;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=iopsys.eu header.i=@iopsys.eu header.b=\"f/MsORW+\";\n\tdkim-atps=neutral", "phobos.denx.de;\n dmarc=pass (p=reject dis=none) header.from=iopsys.eu", "phobos.denx.de;\n spf=pass smtp.mailfrom=mikhail.kshevetskiy@genexis.eu", "dkim=none (message not signed)\n header.d=none;dmarc=none action=none header.from=iopsys.eu;" ], "Received": [ "from phobos.denx.de (phobos.denx.de\n [IPv6:2a01:238:438b:c500:173d:9f52:ddab:ee01])\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 4fB6Hs49RZz1xtV\n\tfor <incoming@patchwork.ozlabs.org>; Thu, 12 Feb 2026 05:23:21 +1100 (AEDT)", "from h2850616.stratoserver.net (localhost [IPv6:::1])\n\tby phobos.denx.de (Postfix) with ESMTP id 65A4B83B64;\n\tWed, 11 Feb 2026 19:22:56 +0100 (CET)", "by phobos.denx.de (Postfix, from userid 109)\n id D962383DB6; Wed, 11 Feb 2026 19:22:54 +0100 (CET)", "from DU2PR03CU002.outbound.protection.outlook.com\n (mail-northeuropeazlp170110003.outbound.protection.outlook.com\n [IPv6:2a01:111:f403:c200::3])\n (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits))\n (No client certificate requested)\n by phobos.denx.de (Postfix) with ESMTPS id A402E83B64\n for <u-boot@lists.denx.de>; Wed, 11 Feb 2026 19:22:52 +0100 (CET)", "from DU2PR08MB10037.eurprd08.prod.outlook.com (2603:10a6:10:49a::20)\n by GV1PR08MB8572.eurprd08.prod.outlook.com (2603:10a6:150:84::10)\n with Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9611.10; Wed, 11 Feb\n 2026 18:22:50 +0000", "from DU2PR08MB10037.eurprd08.prod.outlook.com\n ([fe80::3c7:6d2e:8afe:e4dc]) by DU2PR08MB10037.eurprd08.prod.outlook.com\n ([fe80::3c7:6d2e:8afe:e4dc%4]) with mapi id 15.20.9587.010; Wed, 11 Feb 2026\n 18:22:50 +0000" ], "X-Spam-Checker-Version": "SpamAssassin 3.4.2 (2018-09-13) on phobos.denx.de", "X-Spam-Level": "", "X-Spam-Status": "No, score=-2.0 required=5.0 tests=BAYES_00,DKIM_SIGNED,\n DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,\n RCVD_IN_DNSWL_BLOCKED,SPF_HELO_PASS,SPF_PASS autolearn=ham\n autolearn_force=no version=3.4.2", "ARC-Seal": "i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;\n b=wSa0c8FkIwcxUjF4HAiv3y/DbFLyR4B0xZX46urywAP1X7Dwr03sfjSjlgimMlFo17nX+rvHlV7vsAQZJZ1Z+h7MN0c/0yNAewGaPeYkIiUCTIiJIAqnWIrMin7os/wZSuo4+TlXueBP+xDKfAmsPsnlKAM5dOWmy9qvFPqkp4aZXwrujVXvlUqHje/sAFPI9D+dWco013gB50VcO9mMBOrDHButxrpBhlWZ8yXMS6zsPAX1/ABuF2EA+oV5Mn1mzoE5Nmdb9XaDm4rYOPawxpKidAtNsN8g3qn/LaQA/1Y61ldfkB/7bcHx0hvZhoTg+oL5Um3jq2jvlS77SAcLUg==", "ARC-Message-Signature": "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=fNWszupRlSzkrIVYTWNmGAQwV5VgQm5NdVYfWky5RWY=;\n b=X9zIECcr9KyaEqsqdPvOohQS6wEOQjGCnhJTT/PP83M8q1IzWD3GZrACTckHA3/aPDkhHg/mH8RI+ElcLUPISui+gzWEa8h2jGjr1wmY6X+X7psh32dSDhvXojKWS/SeahlS3U4Teub4A5FfLJA9cCEJWiM2FrAfvQB3bovXYJt1Fh2s2HQjmxeAPNz8Xy30HRD37om4W4tTFUBPYR+KeZHmdA5dVWQz84nNIJCTqeec0c/5mPQQXHSMnfpjpI8V62+WlBYAxh+h6bGLWo/PEWwCwmsH1MmkUN8Z/9geVUFqkqODAMjCA8QFAvOwcpgbXRWGip46boqxX9ByYbQU6g==", "ARC-Authentication-Results": "i=1; mx.microsoft.com 1; spf=pass\n smtp.mailfrom=genexis.eu; dmarc=pass action=none header.from=iopsys.eu;\n dkim=pass header.d=iopsys.eu; arc=none", "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=iopsys.eu;\n s=selector1;\n h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;\n bh=fNWszupRlSzkrIVYTWNmGAQwV5VgQm5NdVYfWky5RWY=;\n b=f/MsORW+uilUikDnb78u0+b9Sz2BIu3t21JWVpO+npzxXHmTaLrN8irXzJEotsky8RDC+GJd22+2/Xay5gpOXU6Qj65ajP7AsUR2pOeePd0fhrcdDzFnrZHKoYJio7gD/jUaHyf2GmNSfknJaKap1RwJu9l1wHX88pwdz1Qu0ku/DmwsOggQt51UNhpmEO0Ycxh1v53ao4tfQ/VjO9Ejo2ucc41C2yDOREwDAL568HVIu7tLujEDAlDf8i3EUEQSt0VAFwzUAYBK0amt+LUcLV11o/dyt9Zp+jG6RTRLCS8MF9jozSJiHE57lq54ELvmqE6vIAwBaMquvYOTxkaFtA==", "From": "Mikhail Kshevetskiy <mikhail.kshevetskiy@iopsys.eu>", "To": "Tom Rini <trini@konsulko.com>, Christian Marangi <ansuelsmth@gmail.com>,\n Joe Hershberger <joe.hershberger@ni.com>,\n Ramon Fried <rfried.dev@gmail.com>,\n Jerome Forissier <jerome.forissier@arm.com>,\n Ray Liu <ray.xy.liu@gmail.com>,\n Marek Vasut <marek.vasut+renesas@mailbox.org>,\n Paul Barker <paul.barker.ct@bp.renesas.com>,\n Robert Marko <robert.marko@sartura.hr>, Yao Zi <me@ziyao.cc>,\n Greg Malysa <malysagreg@gmail.com>,\n Oliver Gaskell <Oliver.Gaskell@analog.com>,\n Vasileios Bimpikas <vasileios.bimpikas@analog.com>, u-boot@lists.denx.de", "Cc": "Mikhail Kshevetskiy <mikhail.kshevetskiy@iopsys.eu>", "Subject": "[PATCH v2 02/16] net: airoha: add initial support for multiple GDM\n port", "Date": "Wed, 11 Feb 2026 21:22:16 +0300", "Message-ID": "<20260211182230.968921-3-mikhail.kshevetskiy@iopsys.eu>", "X-Mailer": "git-send-email 2.51.0", "In-Reply-To": "<20260211182230.968921-1-mikhail.kshevetskiy@iopsys.eu>", "References": "<20260211182230.968921-1-mikhail.kshevetskiy@iopsys.eu>", "Content-Transfer-Encoding": "8bit", "Content-Type": "text/plain", "X-ClientProxiedBy": "MI1P293CA0012.ITAP293.PROD.OUTLOOK.COM\n (2603:10a6:290:2::10) To DU2PR08MB10037.eurprd08.prod.outlook.com\n (2603:10a6:10:49a::20)", "MIME-Version": "1.0", "X-MS-PublicTrafficType": "Email", "X-MS-TrafficTypeDiagnostic": "DU2PR08MB10037:EE_|GV1PR08MB8572:EE_", "X-MS-Office365-Filtering-Correlation-Id": "bf4d34da-9306-48b2-54e4-08de699a9090", "X-MS-Exchange-SenderADCheck": "1", "X-MS-Exchange-AntiSpam-Relay": "0", "X-Microsoft-Antispam": "BCL:0;\n ARA:13230040|1800799024|52116014|7416014|376014|366016|921020|38350700014;", "X-Microsoft-Antispam-Message-Info": "\n X3TLOQAKOzpXbCvYXiyinBHIAxCJqDgQQa6DbUkN4JM1JWzmxwLSCmsMO6M1pvIiq+jS73fnTbLBBzEJHRTnhDiliyIlwvxdymwP90jcnohgKt+X9g6+ec9YNBzZvVpVXxpsLkuvuMRFgU+inwHW/57zF/058KiwPuP71NSqBDef6LJp6tZxt7kNRtTvfXizSWGc1bSfvqCABYnE8+QYKzR/mhs+F21V3HhVuGIA+/UrVNS0JajAo1BBuaXn1OMW7POPkQ/xVyB9YO/iZGQTKs0p6H2B3d3YJAlzgZxJf1m0JTiR+DKEht7wWvh5kxx4PlCOwysiqy7V265YSf5l3dKtwsGI7wOHTzIRvUn5PXSu9KqNfcZ+nYSvMriqQF8xVgxSyBknDuiFJGBhQTRUXaUqPFEZMo3DrqZ2YSGTkQ2J1SV/Q39K8K6J+EG02fIKkhcMNOPxJjivDK4G/9MZJrw7aTR7LBX81HCN5QI0EI01W0G9nWTATP5Y29ewg7mBcJzb9hwmcJDMAwZJDG5XsFYKRYc+kyvKNTFipJFVIMro5kqW4wt9miisRuM6Kao76M/wGbrl4RW+cjoRHl4TX9zhpexVXpnefEDid9Umi7eCpnxyTf/+0Cg2OdDLnR29TmBmvtJg2xbAsbL30GUyJHZoYsOeIKOY+E1dorH7jpD/DaqyM5XHvNUhwzLQG4yruCusd4vJfmIzdqt5p47ZxdvqIWDwN/Thya5NPFRIzUpSPwbV+LdgwQRcGeF5hCw9oqtxAelwJ5IkMPUrgIbEDnR9xhenE0KcWX9OeeINTN4zF5MXbnB5/nsq7LA2C13+SsP/ZJ8ZkNFu7edmWYRsDh4xWsCoNQA9AmTwjg4eoPi/MHpUGwB7x48vRqHCj/4BDLQHYnKgPXgpvz5icB9HFhIxxVaPJpKJFViVDxxFoe50yecBhXFcOErC28VRgIsC1Zv4rXsIK9yy3xkz7qX0AnCvsy2/Evo9nl5t4xi3+9JyifKvSd/9w4MPGxOoX7luSbom8mGkErbPGDJLSBn0dA8IYjuMiWWYy0z4XLS2G4GPzufY4AO2/qTu2g3gsQm5rP8bKD9lRqbaJekXuPKlRU9bPxPoCXnulKE3m+prYVn8ZyMeCOrmbxBeX3Uvbid9tuihp2wxQ55qhWFJ6oLdKwAuelv2oypzSCpHcuohunsT+UK7/jCx8uDzaj616NnBzufUoZG/UyMikoPNdMUEZHKousb3r+gMSlouvKS5BUEp6nwU0qUHmlirFvEu4Ol+Hal9+tsD6dBXnIqr/eB23oRsrlrw2mfc9i4QJK/cbhtzXR8U3RCFrtGIrRljIPE2dt0Bffbu+G86629mqJJ5IXLbVzIBFMC9gXQ6N/kohMINgkzvveDSEFzbjFqCyCHa9LxWUFOb1d3ZSLChLgNb1wke0UXddYNeDXy9NdzCt3rz51E+T4ZhRdr90e40aPHHmyMx4ZsNBai5otQ0wDUksNlFyUKNkSf8AI4QEppD1RKZ9yOErw/mpVriumuA2bcu58S/dhcC9UH0IF82dGab1MIJ6Ep+eafPToYNWryHGXVJsJfmm2I0vACePn+GrSEkKGkWJURmx/BhwOu2MPNIyyX0J61n8WVA2XVOx4cQF4+cP+5wkCkZuwBdrzp3pSPU", "X-Forefront-Antispam-Report": "CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:;\n IPV:NLI; SFV:NSPM; H:DU2PR08MB10037.eurprd08.prod.outlook.com; PTR:;\n CAT:NONE;\n SFS:(13230040)(1800799024)(52116014)(7416014)(376014)(366016)(921020)(38350700014);\n DIR:OUT; SFP:1102;", "X-MS-Exchange-AntiSpam-MessageData-ChunkCount": "1", "X-MS-Exchange-AntiSpam-MessageData-0": "\n XPjdTJ6SW4M3DU4FNJPxhhWOa6WLMPp8OUkvx5kwW+h5A5ZvyDG1rwvsbzFV1XrjuNDG1WJXS4f7hvLG7wjpWAg9xaVGNL1rEprPBKgOWZQpCeCRwJ/Rr5RJxAMW8vAwgGFTiYShNNNVeVm54vA8mNrzwkycYwXkX1xz+S9m07zNPkFzivo56IODvrdEnNTB19q+EdbHLw1B6DWPjmWiogaz9DVGJA1KUqVzRnhLpDynqnnn4lXe/Rj4lG6vQKs+FpW3aCO5okhVT9IJxHvKjU369WxrY4CEgnGlW8FQD+8ZwDEBu6bq3gG6C+flnbljyfpRVMpsG03GoOIvNFFw9MB9ng14NYi27GyhesewyxNlKnQ3W7EUxd248H6bX2NWJ54UoNgy0s61rrs4wIfbSNtFcVKPInWAYFkqHkX4ORTc0uMy8P57wOfMPEbeu7R55/1A2awP51EzDqNCQ/C1Vxqr/Vzhcyt/+fMvj2AolknVClDjO4HliHxjePP/YY8WvVDTkVTjuMZNNNMS/30g93uwJ+TCCDAyXPjIVg3tXOljoa8Qu1h1OhPRLlpf3HIkHX1D3yhRDqOlTTf4KXQeZH5LYdftAkNjLvALhbYa9K9Fv0b+UBQWKH/UeAQ8yeejnUnJUanjMH5fkHt0tMXVwZZC048JazXVqG5NKLvg6vYgpFutZd+yVoFKpiCs9ql0lKJI0yj+ijXfbtmo0vIk5ePYonmH+gnJs5A3rZFaokLKgylZvjYY/2opHeiBXgt9dfA/5tmuLOdCtGFB6HPgO9+nlGmgQO0g55KW1Owj9bhxiyIURFr3n1ht6q0jy9VkM1zK86l+4s70rUc8SIM39GemNrYew7noBErKq7AKWvcYIfQYfwv3tcps8zwX9Tv+zpjDVvrhUH2w5cBBpKys/v49IQ38H5Q4/H/QqACfu+PkyXhQXlcabF0dqmO0kdPGIKKrsCwJs/7u312Ahs9ZdYQX94YdCwgbKFtG6+/qqJsp3st6bC11oYDzg8kBfje2fqEmmzkNWI9s+6eZ6aes4gyD4A6/SNQIcY6uitPmL4SE0OG3rNNXCtPuZavWW5Ieac4w2qDnNjKT4HwpPLyNW/tu4AjC8a+AOYYtNR82mttxU+Bvym+sA6bpzqe2T6r9XOB4CJhKjVrwgJn/52856IbtM+zt+n7Wt38RTShM76AkOWruWgQe5chQxUz2SLxWRQCGNlnO9TGnxKnFNtICuBgh75xNCabjv/h5N+k07/lR4LaTD6Qqpq8/QmMuXaFmK8DXTXOidwGKsHt3OOVVBXOowUXhGxSinuBKK6e7v/9eByS0aWGdKmjbe5BuNBxWE4CZ8sr8BcwTkKaup1imd8vVq+c+AkSCOJgakm/+eCT5pvocndC8oEouKT/Q+on2g5wTvfhiJOcED4E0eePwXLRq7UXP2mPdshaEPcMyxXCwW4N1zA7lICN1xsueB8PsO9iNuj0H+kh0b4Vos3f76qcKwUyl/NrhfYz/WlvQNEhIEOLneak9P6wI6G/+6kGqJJuDqn+FlzeWr3CTVu8KhqXI/whm1j7k7o6afFSozNJ5zmEuxrfawUrQSG3XRu5GvdlKjrJoklaV1+DkQ+D5NFqDfWpx8CZPFmf2Zs1SixqAorz+pEDml2f/2daGZqIyXBfzzkrawanXfC9ekmy86FXhbbDMl9bG9H3eP2/CIl5r8ay8AZUV+8r6siaZlDsHyDK/50V0rXCuACAyIt7+5t7Y/hgOyt3ThbHcdNIarh8=", "X-OriginatorOrg": "iopsys.eu", "X-MS-Exchange-CrossTenant-Network-Message-Id": "\n bf4d34da-9306-48b2-54e4-08de699a9090", "X-MS-Exchange-CrossTenant-AuthSource": "DU2PR08MB10037.eurprd08.prod.outlook.com", "X-MS-Exchange-CrossTenant-AuthAs": "Internal", "X-MS-Exchange-CrossTenant-OriginalArrivalTime": "11 Feb 2026 18:22:50.7932 (UTC)", "X-MS-Exchange-CrossTenant-FromEntityHeader": "Hosted", "X-MS-Exchange-CrossTenant-Id": "8d891be1-7bce-4216-9a99-bee9de02ba58", "X-MS-Exchange-CrossTenant-MailboxType": "HOSTED", "X-MS-Exchange-CrossTenant-UserPrincipalName": "\n K6yqU++uVz7daeY3LSG5ZEPwR2tPYb9n74JzCzqVrihoDa3YLs2cSYIca7vGnzX0b5uFh+nyGgLP3sMowYD2d9BJ5P0k4msoBEGONje2QKE=", "X-MS-Exchange-Transport-CrossTenantHeadersStamped": "GV1PR08MB8572", "X-BeenThere": "u-boot@lists.denx.de", "X-Mailman-Version": "2.1.39", "Precedence": "list", "List-Id": "U-Boot discussion <u-boot.lists.denx.de>", "List-Unsubscribe": "<https://lists.denx.de/options/u-boot>,\n <mailto:u-boot-request@lists.denx.de?subject=unsubscribe>", "List-Archive": "<https://lists.denx.de/pipermail/u-boot/>", "List-Post": "<mailto:u-boot@lists.denx.de>", "List-Help": "<mailto:u-boot-request@lists.denx.de?subject=help>", "List-Subscribe": "<https://lists.denx.de/listinfo/u-boot>,\n <mailto:u-boot-request@lists.denx.de?subject=subscribe>", "Errors-To": "u-boot-bounces@lists.denx.de", "Sender": "\"U-Boot\" <u-boot-bounces@lists.denx.de>", "X-Virus-Scanned": "clamav-milter 0.103.8 at phobos.denx.de", "X-Virus-Status": "Clean" }, "content": "From: Christian Marangi <ansuelsmth@gmail.com>\n\nRework the driver to support multiple GDM port. The driver is split to\nmain driver as a MISC driver with forced probe (by using the\nDM_FLAG_PROBE_AFTER_BIND) and each GDM port register a ETH driver.\n\nThis permit a 1:1 implementation with the linux kernel driver and permit\nto use the same exact DT nodes.\n\nSigned-off-by: Christian Marangi <ansuelsmth@gmail.com>\n---\n drivers/net/airoha_eth.c | 150 +++++++++++++++++++++++++++++++++------\n 1 file changed, 130 insertions(+), 20 deletions(-)", "diff": "diff --git a/drivers/net/airoha_eth.c b/drivers/net/airoha_eth.c\nindex 3a0ac7ce368..2007642ebae 100644\n--- a/drivers/net/airoha_eth.c\n+++ b/drivers/net/airoha_eth.c\n@@ -9,6 +9,7 @@\n */\n \n #include <dm.h>\n+#include <dm/device-internal.h>\n #include <dm/devres.h>\n #include <dm/lists.h>\n #include <mapmem.h>\n@@ -24,7 +25,7 @@\n #include <linux/time.h>\n #include <asm/arch/scu-regmap.h>\n \n-#define AIROHA_MAX_NUM_GDM_PORTS\t1\n+#define AIROHA_MAX_NUM_GDM_PORTS\t4\n #define AIROHA_MAX_NUM_QDMA\t\t1\n #define AIROHA_MAX_NUM_RSTS\t\t3\n #define AIROHA_MAX_NUM_XSI_RSTS\t\t4\n@@ -38,6 +39,8 @@\n #define TX_DSCP_NUM\t\t\t16\n #define RX_DSCP_NUM\t\t\tPKTBUFSRX\n \n+#define AIROHA_GDM_PORT_STRING_LEN\tsizeof(\"airoha-gdmX\")\n+\n /* SCU */\n #define SCU_SHARE_FEMEM_SEL\t\t0x958\n \n@@ -246,6 +249,21 @@\n #define QDMA_ETH_RXMSG_CRSN_MASK\tGENMASK(20, 16)\n #define QDMA_ETH_RXMSG_PPE_ENTRY_MASK\tGENMASK(15, 0)\n \n+enum {\n+\tFE_PSE_PORT_CDM1,\n+\tFE_PSE_PORT_GDM1,\n+\tFE_PSE_PORT_GDM2,\n+\tFE_PSE_PORT_GDM3,\n+\tFE_PSE_PORT_PPE1,\n+\tFE_PSE_PORT_CDM2,\n+\tFE_PSE_PORT_CDM3,\n+\tFE_PSE_PORT_CDM4,\n+\tFE_PSE_PORT_PPE2,\n+\tFE_PSE_PORT_GDM4,\n+\tFE_PSE_PORT_CDM5,\n+\tFE_PSE_PORT_DROP = 0xf,\n+};\n+\n struct airoha_qdma_desc {\n \t__le32 rsv;\n \t__le32 ctrl;\n@@ -310,11 +328,14 @@ struct airoha_eth {\n \tstruct reset_ctl_bulk rsts;\n \tstruct reset_ctl_bulk xsi_rsts;\n \n+\tstruct airoha_eth_soc_data *soc;\n+\n \tstruct airoha_qdma qdma[AIROHA_MAX_NUM_QDMA];\n-\tstruct airoha_gdm_port *ports[AIROHA_MAX_NUM_GDM_PORTS];\n+\tchar gdm_port_str[AIROHA_MAX_NUM_GDM_PORTS][AIROHA_GDM_PORT_STRING_LEN];\n };\n \n struct airoha_eth_soc_data {\n+\tu32 version;\n \tint num_xsi_rsts;\n \tconst char * const *xsi_rsts_names;\n \tconst char *switch_compatible;\n@@ -376,6 +397,8 @@ static u32 airoha_rmw(void __iomem *base, u32 offset, u32 mask, u32 val)\n #define airoha_switch_wr(eth, offset, val)\t\t\t\\\n \tairoha_wr((eth)->switch_regs, (offset), (val))\n \n+static struct driver airoha_eth_port;\n+\n static inline dma_addr_t dma_map_unaligned(void *vaddr, size_t len,\n \t\t\t\t\t enum dma_data_direction dir)\n {\n@@ -397,11 +420,26 @@ static inline void dma_unmap_unaligned(dma_addr_t addr, size_t len,\n \tdma_unmap_single(start, end - start, dir);\n }\n \n+static int airoha_get_fe_port(struct airoha_gdm_port *port)\n+{\n+\tstruct airoha_qdma *qdma = port->qdma;\n+\tstruct airoha_eth *eth = qdma->eth;\n+\n+\tswitch (eth->soc->version) {\n+\tcase 0x7523:\n+\t\t/* FIXME: GDM1 is the only supported port */\n+\t\treturn FE_PSE_PORT_GDM1;\n+\tcase 0x7581:\n+\tdefault:\n+\t\treturn port->id == 4 ? FE_PSE_PORT_GDM4 : port->id;\n+\t}\n+}\n+\n static void airoha_fe_maccr_init(struct airoha_eth *eth)\n {\n \tint p;\n \n-\tfor (p = 1; p <= ARRAY_SIZE(eth->ports); p++) {\n+\tfor (p = 1; p <= AIROHA_MAX_NUM_GDM_PORTS; p++) {\n \t\t/*\n \t\t * Disable any kind of CRC drop or offload.\n \t\t * Enable padding of short TX packets to 60 bytes.\n@@ -739,11 +777,35 @@ static int airoha_switch_init(struct udevice *dev, struct airoha_eth *eth)\n \treturn 0;\n }\n \n+static int airoha_alloc_gdm_port(struct udevice *dev, ofnode node)\n+{\n+\tstruct airoha_eth *eth = dev_get_priv(dev);\n+\tstruct udevice *gdm_dev;\n+\tchar *str;\n+\tint ret;\n+\tu32 id;\n+\n+\tret = ofnode_read_u32(node, \"reg\", &id);\n+\tif (ret)\n+\t\treturn ret;\n+\n+\tif (id > AIROHA_MAX_NUM_GDM_PORTS)\n+\t\treturn -EINVAL;\n+\n+\tstr = eth->gdm_port_str[id];\n+\tsnprintf(str, AIROHA_GDM_PORT_STRING_LEN,\n+\t\t \"airoha-gdm%d\", id);\n+\n+\treturn device_bind_with_driver_data(dev, &airoha_eth_port, str,\n+\t\t\t\t\t (ulong)eth, node, &gdm_dev);\n+}\n+\n static int airoha_eth_probe(struct udevice *dev)\n {\n \tstruct airoha_eth_soc_data *data = (void *)dev_get_driver_data(dev);\n \tstruct airoha_eth *eth = dev_get_priv(dev);\n \tstruct regmap *scu_regmap;\n+\tofnode node;\n \tint i, ret;\n \n \tscu_regmap = airoha_get_scu_regmap();\n@@ -756,6 +818,8 @@ static int airoha_eth_probe(struct udevice *dev)\n \t */\n \tregmap_write(scu_regmap, SCU_SHARE_FEMEM_SEL, 0x0);\n \n+\teth->soc = data;\n+\n \teth->fe_regs = dev_remap_addr_name(dev, \"fe\");\n \tif (!eth->fe_regs)\n \t\treturn -ENOMEM;\n@@ -795,13 +859,42 @@ static int airoha_eth_probe(struct udevice *dev)\n \tif (ret)\n \t\treturn ret;\n \n+\tofnode_for_each_subnode(node, dev_ofnode(dev)) {\n+\t\tif (!ofnode_device_is_compatible(node, \"airoha,eth-mac\"))\n+\t\t\tcontinue;\n+\n+\t\tif (!ofnode_is_enabled(node))\n+\t\t\tcontinue;\n+\n+\t\tret = airoha_alloc_gdm_port(dev, node);\n+\t\tif (ret)\n+\t\t\treturn ret;\n+\t}\n+\n \treturn airoha_switch_init(dev, eth);\n }\n \n+static int airoha_eth_port_of_to_plat(struct udevice *dev)\n+{\n+\tstruct airoha_gdm_port *port = dev_get_priv(dev);\n+\n+\treturn dev_read_u32(dev, \"reg\", &port->id);\n+}\n+\n+static int airoha_eth_port_probe(struct udevice *dev)\n+{\n+\tstruct airoha_eth *eth = (void *)dev_get_driver_data(dev);\n+\tstruct airoha_gdm_port *port = dev_get_priv(dev);\n+\n+\tport->qdma = ð->qdma[0];\n+\n+\treturn 0;\n+}\n+\n static int airoha_eth_init(struct udevice *dev)\n {\n-\tstruct airoha_eth *eth = dev_get_priv(dev);\n-\tstruct airoha_qdma *qdma = ð->qdma[0];\n+\tstruct airoha_gdm_port *port = dev_get_priv(dev);\n+\tstruct airoha_qdma *qdma = port->qdma;\n \tstruct airoha_queue *q;\n \tint qid;\n \n@@ -819,8 +912,8 @@ static int airoha_eth_init(struct udevice *dev)\n \n static void airoha_eth_stop(struct udevice *dev)\n {\n-\tstruct airoha_eth *eth = dev_get_priv(dev);\n-\tstruct airoha_qdma *qdma = ð->qdma[0];\n+\tstruct airoha_gdm_port *port = dev_get_priv(dev);\n+\tstruct airoha_qdma *qdma = port->qdma;\n \n \tairoha_qdma_clear(qdma, REG_QDMA_GLOBAL_CFG,\n \t\t\t GLOBAL_CFG_TX_DMA_EN_MASK |\n@@ -829,8 +922,8 @@ static void airoha_eth_stop(struct udevice *dev)\n \n static int airoha_eth_send(struct udevice *dev, void *packet, int length)\n {\n-\tstruct airoha_eth *eth = dev_get_priv(dev);\n-\tstruct airoha_qdma *qdma = ð->qdma[0];\n+\tstruct airoha_gdm_port *port = dev_get_priv(dev);\n+\tstruct airoha_qdma *qdma = port->qdma;\n \tstruct airoha_qdma_desc *desc;\n \tstruct airoha_queue *q;\n \tdma_addr_t dma_addr;\n@@ -852,7 +945,7 @@ static int airoha_eth_send(struct udevice *dev, void *packet, int length)\n \tdesc = &q->desc[q->head];\n \tindex = (q->head + 1) % q->ndesc;\n \n-\tfport = 1;\n+\tfport = airoha_get_fe_port(port);\n \n \tmsg0 = 0;\n \tmsg1 = FIELD_PREP(QDMA_ETH_TXMSG_FPORT_MASK, fport) |\n@@ -894,8 +987,8 @@ static int airoha_eth_send(struct udevice *dev, void *packet, int length)\n \n static int airoha_eth_recv(struct udevice *dev, int flags, uchar **packetp)\n {\n-\tstruct airoha_eth *eth = dev_get_priv(dev);\n-\tstruct airoha_qdma *qdma = ð->qdma[0];\n+\tstruct airoha_gdm_port *port = dev_get_priv(dev);\n+\tstruct airoha_qdma *qdma = port->qdma;\n \tstruct airoha_qdma_desc *desc;\n \tstruct airoha_queue *q;\n \tu16 length;\n@@ -922,8 +1015,8 @@ static int airoha_eth_recv(struct udevice *dev, int flags, uchar **packetp)\n \n static int arht_eth_free_pkt(struct udevice *dev, uchar *packet, int length)\n {\n-\tstruct airoha_eth *eth = dev_get_priv(dev);\n-\tstruct airoha_qdma *qdma = ð->qdma[0];\n+\tstruct airoha_gdm_port *port = dev_get_priv(dev);\n+\tstruct airoha_qdma *qdma = port->qdma;\n \tstruct airoha_queue *q;\n \tint qid;\n \n@@ -964,8 +1057,9 @@ static int arht_eth_free_pkt(struct udevice *dev, uchar *packet, int length)\n \n static int arht_eth_write_hwaddr(struct udevice *dev)\n {\n+\tstruct airoha_gdm_port *port = dev_get_priv(dev);\n \tstruct eth_pdata *pdata = dev_get_plat(dev);\n-\tstruct airoha_eth *eth = dev_get_priv(dev);\n+\tstruct airoha_qdma *qdma = port->qdma;\n \tunsigned char *mac = pdata->enetaddr;\n \tu32 macaddr_lsb, macaddr_msb;\n \n@@ -977,8 +1071,8 @@ static int arht_eth_write_hwaddr(struct udevice *dev)\n \t\t FIELD_PREP(SMACCR1_MAC0, mac[0]);\n \n \t/* Set MAC for Switch */\n-\tairoha_switch_wr(eth, SWITCH_SMACCR0, macaddr_lsb);\n-\tairoha_switch_wr(eth, SWITCH_SMACCR1, macaddr_msb);\n+\tairoha_switch_wr(qdma->eth, SWITCH_SMACCR0, macaddr_lsb);\n+\tairoha_switch_wr(qdma->eth, SWITCH_SMACCR1, macaddr_msb);\n \n \treturn 0;\n }\n@@ -990,6 +1084,12 @@ static int airoha_eth_bind(struct udevice *dev)\n \tstruct udevice *mdio_dev;\n \tint ret = 0;\n \n+\t/*\n+\t * Force Probe as we set the Main ETH driver as misc\n+\t * to register multiple eth port for each GDM\n+\t */\n+\tdev_or_flags(dev, DM_FLAG_PROBE_AFTER_BIND);\n+\n \tif (!CONFIG_IS_ENABLED(MDIO_MT7531_MMIO))\n \t\treturn 0;\n \n@@ -1015,12 +1115,14 @@ static int airoha_eth_bind(struct udevice *dev)\n }\n \n static const struct airoha_eth_soc_data en7523_data = {\n+\t.version = 0x7523,\n \t.xsi_rsts_names = en7523_xsi_rsts_names,\n \t.num_xsi_rsts = ARRAY_SIZE(en7523_xsi_rsts_names),\n \t.switch_compatible = \"airoha,en7523-switch\",\n };\n \n static const struct airoha_eth_soc_data en7581_data = {\n+\t.version = 0x7581,\n \t.xsi_rsts_names = en7581_xsi_rsts_names,\n \t.num_xsi_rsts = ARRAY_SIZE(en7581_xsi_rsts_names),\n \t.switch_compatible = \"airoha,en7581-switch\",\n@@ -1045,13 +1147,21 @@ static const struct eth_ops airoha_eth_ops = {\n \t.write_hwaddr = arht_eth_write_hwaddr,\n };\n \n+static struct driver airoha_eth_port = {\n+\t.name = \"airoha-eth-port\",\n+\t.id = UCLASS_ETH,\n+\t.of_to_plat = airoha_eth_port_of_to_plat,\n+\t.probe = airoha_eth_port_probe,\n+\t.ops = &airoha_eth_ops,\n+\t.priv_auto = sizeof(struct airoha_gdm_port),\n+\t.plat_auto = sizeof(struct eth_pdata),\n+};\n+\n U_BOOT_DRIVER(airoha_eth) = {\n \t.name = \"airoha-eth\",\n-\t.id = UCLASS_ETH,\n+\t.id = UCLASS_MISC,\n \t.of_match = airoha_eth_ids,\n \t.probe = airoha_eth_probe,\n \t.bind = airoha_eth_bind,\n-\t.ops = &airoha_eth_ops,\n \t.priv_auto = sizeof(struct airoha_eth),\n-\t.plat_auto = sizeof(struct eth_pdata),\n };\n", "prefixes": [ "v2", "02/16" ] }