{"id":2231134,"url":"http://patchwork.ozlabs.org/api/patches/2231134/?format=json","web_url":"http://patchwork.ozlabs.org/project/linux-tegra/patch/20260430110652.558622-18-vladimir.oltean@nxp.com/","project":{"id":21,"url":"http://patchwork.ozlabs.org/api/projects/21/?format=json","name":"Linux Tegra Development","link_name":"linux-tegra","list_id":"linux-tegra.vger.kernel.org","list_email":"linux-tegra@vger.kernel.org","web_url":null,"scm_url":null,"webscm_url":null,"list_archive_url":"","list_archive_url_format":"","commit_url_format":""},"msgid":"<20260430110652.558622-18-vladimir.oltean@nxp.com>","list_archive_url":null,"date":"2026-04-30T11:06:42","name":"[v7,phy-next,17/27] phy: introduce phy_get_max_link_rate() helper for consumers","commit_ref":null,"pull_url":null,"state":"new","archived":false,"hash":"82d32fb70cd6ffbcdbcca5b8f9d783b2c9292ed9","submitter":{"id":75582,"url":"http://patchwork.ozlabs.org/api/people/75582/?format=json","name":"Vladimir Oltean","email":"vladimir.oltean@nxp.com"},"delegate":null,"mbox":"http://patchwork.ozlabs.org/project/linux-tegra/patch/20260430110652.558622-18-vladimir.oltean@nxp.com/mbox/","series":[{"id":502276,"url":"http://patchwork.ozlabs.org/api/series/502276/?format=json","web_url":"http://patchwork.ozlabs.org/project/linux-tegra/list/?series=502276","date":"2026-04-30T11:06:26","name":"Split Generic PHY consumer and provider","version":7,"mbox":"http://patchwork.ozlabs.org/series/502276/mbox/"}],"comments":"http://patchwork.ozlabs.org/api/patches/2231134/comments/","check":"pending","checks":"http://patchwork.ozlabs.org/api/patches/2231134/checks/","tags":{},"related":[],"headers":{"Return-Path":"\n <linux-tegra+bounces-14104-incoming=patchwork.ozlabs.org@vger.kernel.org>","X-Original-To":["incoming@patchwork.ozlabs.org","linux-tegra@vger.kernel.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=N+VMwdVZ;\n\tdkim-atps=neutral","legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org\n (client-ip=172.105.105.114; helo=tor.lore.kernel.org;\n envelope-from=linux-tegra+bounces-14104-incoming=patchwork.ozlabs.org@vger.kernel.org;\n receiver=patchwork.ozlabs.org)","smtp.subspace.kernel.org;\n\tdkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com\n header.b=\"N+VMwdVZ\"","smtp.subspace.kernel.org;\n arc=fail smtp.client-ip=40.107.130.12","smtp.subspace.kernel.org;\n dmarc=pass (p=none dis=none) header.from=nxp.com","smtp.subspace.kernel.org;\n spf=pass smtp.mailfrom=nxp.com","dkim=none (message not signed)\n header.d=none;dmarc=none action=none header.from=nxp.com;"],"Received":["from tor.lore.kernel.org (tor.lore.kernel.org [172.105.105.114])\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 4g5rzM17c2z1yK1\n\tfor <incoming@patchwork.ozlabs.org>; Thu, 30 Apr 2026 21:09:35 +1000 (AEST)","from smtp.subspace.kernel.org (conduit.subspace.kernel.org\n [100.90.174.1])\n\tby tor.lore.kernel.org (Postfix) with ESMTP id 071E43059AF3\n\tfor <incoming@patchwork.ozlabs.org>; Thu, 30 Apr 2026 11:07:44 +0000 (UTC)","from localhost.localdomain (localhost.localdomain [127.0.0.1])\n\tby smtp.subspace.kernel.org (Postfix) with ESMTP id BAA2742EED6;\n\tThu, 30 Apr 2026 11:07:43 +0000 (UTC)","from MRWPR03CU001.outbound.protection.outlook.com\n (mail-francesouthazon11011012.outbound.protection.outlook.com\n [40.107.130.12])\n\t(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))\n\t(No client certificate requested)\n\tby smtp.subspace.kernel.org (Postfix) with ESMTPS id 2B3353FD15C;\n\tThu, 30 Apr 2026 11:07:40 +0000 (UTC)","from AM9PR04MB8585.eurprd04.prod.outlook.com (2603:10a6:20b:438::13)\n by VI1PR04MB7182.eurprd04.prod.outlook.com (2603:10a6:800:121::7) with\n Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9870.20; Thu, 30 Apr\n 2026 11:07:27 +0000","from AM9PR04MB8585.eurprd04.prod.outlook.com\n ([fe80::f010:fca8:7ef:62f4]) by AM9PR04MB8585.eurprd04.prod.outlook.com\n ([fe80::f010:fca8:7ef:62f4%4]) with mapi id 15.20.9846.025; Thu, 30 Apr 2026\n 11:07:26 +0000"],"ARC-Seal":["i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;\n\tt=1777547263; cv=fail;\n b=FZ2Kb9D9g81DX2Wm3OLIZCkUwi9S1ZnC1H60psbS56uuhWKfbE3NR+n2qz8QVza6KQN6uYFR0s5iDE89EpIrBFrjFUoNJjXpBA69JvcsD4YmjEikK9j+KoqIsWTi+WwH6i9lmeruVDwDNJpgetdRFwemm+hxvGjZSV5h7WTmUoE=","i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;\n b=cgWt710FmdXjSxH75fCbF5pKvgkfmME/YXmy7JVYLfMUgvnNAzAXa5rY3arbD2EZr6tdCRz2dg9zFuxgEmthfqaI6+hZ8zFlgBWLnzbkOdqsLaLKoiS04uCOZUooo4yZceT15FT/dbRsT6rywGgEvND3nTjxVq3kvCwi50Q4dDjIx3Exw70Ee2HhdbrDZD3DRbmjv7Sz+iz31/6+4IcOMtNkP3hOUxYDib6dalf/JN5p8rw1jl7xVfPnXX2wOEFSqH8BSU5ltY8xcyCGc3/2F28T3uIiGvNgkewZUTL0GOqnmD8qUUMzVxFVEwo7ppsu/uX3KYpD3DI2NlLYvUtpLQ=="],"ARC-Message-Signature":["i=2; a=rsa-sha256; d=subspace.kernel.org;\n\ts=arc-20240116; t=1777547263; c=relaxed/simple;\n\tbh=tC1sRpep2bEa9K3lfyC9FDUcSsG+XwcxEZGIn/djSR0=;\n\th=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References:\n\t Content-Type:MIME-Version;\n b=Qj5UsgYKmAF17CeR5Qotk2eqg37X9SQdwpHxkvEeqCIfUkuklmxmwyTXtLu0jGFZrealXq6+tfZAVkLBostnNl0ls9g6wwlp1yfa7eDIunXyixf5qPwhS93F9lmPdvVWxeLp3daSk1hmRlhXYp1OXn9kgxm5dYizf0n/0ACGGYE=","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=wLZf45iS4YakI5dPxIF9jeShkzkLs7+kVsb8jXpGlRQ=;\n b=xEKzEvw9Ht2xzLhgq93Ali4BnN/BgFDwlmSjNWcrNQKy+YtnveKAf6Bh36j2ZHMgPk3MZXEme31+8nX+I9GqnjdhYtmz/I2II8P4TIhdnWYaNe0zB8hyXMoGLoEp+Os4ePGxMP4/OnWcz9xpOkCAH7pdlLe1T7KZz4Pavj1W9HV7T3PxWR+AKJC80fHKWIdUP6/OAeF/qAvQhXjFQVxp3KdhaucyZUzICWJO8SIbcdYdmLGOSkdKZHjW3h+i94BoEgM0Jgn7sTgv9bWkWJFwF/ITYaPOtQSXo5cDFr/c2Q8/ffC+aWHYF1zU1Tw370B4HLgbDjtE+ZGGkZTUxtIwJQ=="],"ARC-Authentication-Results":["i=2; smtp.subspace.kernel.org;\n dmarc=pass (p=none dis=none) header.from=nxp.com;\n spf=pass smtp.mailfrom=nxp.com;\n dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com\n header.b=N+VMwdVZ; arc=fail smtp.client-ip=40.107.130.12","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=wLZf45iS4YakI5dPxIF9jeShkzkLs7+kVsb8jXpGlRQ=;\n b=N+VMwdVZJ5hMTTPbwFxIFSPLCJQhYfPHhuR66xnMFhMGljygvhUXOwYztk8ZJupjOG4AJDvbqxu6JIxRvAIbtR76jXSqRYC/90JC6Yg+uZ2tknLVz3wGcUgI8yDNNWuaQo3Q3g8efVTaJGQX6YnUM90H85V8YYe85aXuMwppA5HoIozDvjpV8r+I6Uc+a/Jeb9DpccbpQOebXawYNaUFHV+PqpIrvFL+PRJSfMf8e++nCkokC5yuDVqDEkg8iPQ/WOg47d9rXb6OUux/0aAouZ91HjLdWyd5fgvv2XyG+hbjh8OnPjCmRK68Ib6lA3ApqF5+TUyyoKRiF4vf1khO5Q==","From":"Vladimir Oltean <vladimir.oltean@nxp.com>","To":"linux-phy@lists.infradead.org","Cc":"Vinod Koul <vkoul@kernel.org>,\n\tNeil Armstrong <neil.armstrong@linaro.org>,\n\tdri-devel@lists.freedesktop.org,\n\tfreedreno@lists.freedesktop.org,\n\tlinux-arm-kernel@lists.infradead.org,\n\tlinux-arm-msm@vger.kernel.org,\n\tlinux-can@vger.kernel.org,\n\tlinux-gpio@vger.kernel.org,\n\tlinux-ide@vger.kernel.org,\n\tlinux-kernel@vger.kernel.org,\n\tlinux-media@vger.kernel.org,\n\tlinux-pci@vger.kernel.org,\n\tlinux-renesas-soc@vger.kernel.org,\n\tlinux-riscv@lists.infradead.org,\n\tlinux-rockchip@lists.infradead.org,\n\tlinux-samsung-soc@vger.kernel.org,\n\tlinux-scsi@vger.kernel.org,\n\tlinux-sunxi@lists.linux.dev,\n\tlinux-tegra@vger.kernel.org,\n\tlinux-usb@vger.kernel.org,\n\tnetdev@vger.kernel.org,\n\tspacemit@lists.linux.dev,\n\tUNGLinuxDriver@microchip.com,\n\tMarkus Schneider-Pargmann <msp@baylibre.com>,\n\tAndrzej Hajda <andrzej.hajda@intel.com>,\n\tRobert Foss <rfoss@kernel.org>,\n\tLaurent Pinchart <Laurent.pinchart@ideasonboard.com>,\n\tJonas Karlman <jonas@kwiboo.se>,\n\tJernej Skrabec <jernej.skrabec@gmail.com>,\n\tMaarten Lankhorst <maarten.lankhorst@linux.intel.com>,\n\tMaxime Ripard <mripard@kernel.org>,\n\tThomas Zimmermann <tzimmermann@suse.de>,\n\tDavid Airlie <airlied@gmail.com>,\n\tSimona Vetter <simona@ffwll.ch>,\n\tAndy Yan <andy.yan@rock-chips.com>,\n\tMarc Kleine-Budde <mkl@pengutronix.de>,\n\tVincent Mailhol <mailhol@kernel.org>,\n\tNicolas Ferre <nicolas.ferre@microchip.com>,\n\tAlexandre Belloni <alexandre.belloni@bootlin.com>,\n\tClaudiu Beznea <claudiu.beznea@tuxon.dev>,\n\tGeert Uytterhoeven <geert+renesas@glider.be>,\n\tMagnus Damm <magnus.damm@gmail.com>","Subject":"[PATCH v7 phy-next 17/27] phy: introduce phy_get_max_link_rate()\n helper for consumers","Date":"Thu, 30 Apr 2026 14:06:42 +0300","Message-Id":"<20260430110652.558622-18-vladimir.oltean@nxp.com>","X-Mailer":"git-send-email 2.34.1","In-Reply-To":"<20260430110652.558622-1-vladimir.oltean@nxp.com>","References":"<20260430110652.558622-1-vladimir.oltean@nxp.com>","Content-Transfer-Encoding":"8bit","Content-Type":"text/plain","X-ClientProxiedBy":"AM8P251CA0007.EURP251.PROD.OUTLOOK.COM\n (2603:10a6:20b:21b::12) To AM9PR04MB8585.eurprd04.prod.outlook.com\n (2603:10a6:20b:438::13)","Precedence":"bulk","X-Mailing-List":"linux-tegra@vger.kernel.org","List-Id":"<linux-tegra.vger.kernel.org>","List-Subscribe":"<mailto:linux-tegra+subscribe@vger.kernel.org>","List-Unsubscribe":"<mailto:linux-tegra+unsubscribe@vger.kernel.org>","MIME-Version":"1.0","X-MS-PublicTrafficType":"Email","X-MS-TrafficTypeDiagnostic":"AM9PR04MB8585:EE_|VI1PR04MB7182:EE_","X-MS-Office365-Filtering-Correlation-Id":"c1c45e7a-d7da-4eb9-c8f9-08dea6a8a9ce","X-LD-Processed":"686ea1d3-bc2b-4c6f-a92c-d99c5c301635,ExtAddr","X-MS-Exchange-SenderADCheck":"1","X-MS-Exchange-AntiSpam-Relay":"0","X-Microsoft-Antispam":"\n BCL:0;ARA:13230040|10070799003|7416014|376014|366016|19092799006|1800799024|18002099003|56012099003|22082099003;","X-Microsoft-Antispam-Message-Info":"\n VH+UI0OB8OaJ0d72RDddUxUnREWFIeX+Ej5z+ox2Kgoeon+FpDugxWfLCFcexXv1n/xl5FHvyPsRQQ+5XBt3n8eyRohIqraIfLsaGMR5g+0urqTEA88V2dPm6FuDyHVk526S+zNPvOfzNWZAYyY98Gl5Vh3Cg7YcsGNJbe5lllIi8SdlsSsL47qZL2KLEj5OzELVNHY0MwqFBgYWXvhGlGOohvOUSUgjwBncvuGpBKUWyUTy1Zo1fLwFDjgbnIR9xbbfbmiYK5ls42995/h51eAWiSPW4Zfd+13RwMjN5dchU9AdD9TxkLvBkBnMof7VfhTVGbACGB60VeTYPRAj2Jy5Cn72+jlvhNslmWpiXSZz/OGVLxXz3mumupN6I43Tu/cvf1e6u+iyIKvTjJHGbu5znKwzUEdF34ZlLS6i3yXgmEA3meb80EiSpzdXEO22I1JntQTcvB5uNauoDmAk+2b+EeMvADoH01gT8g8Y4qOYAMMMmY9BsaUgkQGKZmdlOsXONuF8O10zEOS5H906tCCWLgKl+qWYcUKy6uHA4Oaf/EkhF3zwAPh7TM4vooRQ8fLukt4eIhjWzgg85kNY7EhY4kfq5RHuNs2J+5YFtCPPTNWQuz/pFSBnEMGGp0p0aVGJdMZp2quUlqAS8iR71xFW2izNxFd7GJ6Osz5uxGcew84eCWYD2YUdOD8UqCQvcd/z4h7COTwrQkiFgxQ6STMAeZcqM3wENOpYgIDZTK0=","X-Forefront-Antispam-Report":"\n CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AM9PR04MB8585.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(10070799003)(7416014)(376014)(366016)(19092799006)(1800799024)(18002099003)(56012099003)(22082099003);DIR:OUT;SFP:1101;","X-MS-Exchange-AntiSpam-MessageData-ChunkCount":"1","X-MS-Exchange-AntiSpam-MessageData-0":"\n D5J2FYgiHJOlP8BlTUkufK57o8YkBCiKzILX2e4XWsG1Nii5ipMKffDOu1bz8CxJX+iRl9Re+F4teofeJTCoX7rFGeC4K8V/S6m1erzayKy8GhFyaeGep7aTiVqwbNTWfkGapG6KzpyRmP8JyfTohZQS56eBuucJ4hLi8XQeT1D33axpdS+4lVfTWWCN/oE8gaPr9B6iIO2CStyH0C8J8sTw3RVubRkhJa/1Gl6h8ODgSgfYXOLZdY2vWIp0AKMBi1YSrO4Y0eT+PQ4cTBRgIy4zq09DH1s/U4k5dnGxwh01asBICts30+f3HyupLFoymxF3a1qVW2VcuqPYwFH492M0Xx8D7a2YAJ/aH63jUk1T4ffgcAG7QWxFK92QD2O2ELK0qhN19FhzGXKEuAK3Ha7lkc6oxsaoQCJK079C2hWIQkr56kOU1g/A/ESOdTEmiRH3D+zI5SawETBIpp8UpenG27yawTtvlmft5U734ghJkCMXzlzfjsTEc5RQaURDUTUacTwH0XpYOcB1hWLF0Z05lScjbBOIaEoyhHMNRaL0lLCA3peloV30/bnsE77L+VG4D6q2sHIMItKO03rFW0LoWul9WNDNqFquGC4f6g0rnOLbeTntEzpSJ5D5WAjDfmAeERAb5OVEeazmNoKVrpp9EYAKEqr3TIFELWPSt8pWtNTWnWyMh1EqbTvLd6zcRwGv4AUpH49UcsyVBAi+A0eTuOsXNKF9IosQcdkTNicJO/ngxXB/O3gpDfomME9xy5H9RmEHMo0CGJfBii+v4U1VaWUVHQRzdlhY0cX8D8cDTfg4Gm0Pw8NfERleUA/rJTcGEZ8jL8Gsv+F8d4zAdCJphe8NH9ARwGOUs0XLqs7ioeUOOiJFZ83NrgppFLcJkR82huR8+a00Kv694d11dzFE2cg/1QuAgNReJEcBrOFTWVgppxo+hq7P56u4nvapJUS+7prBpzGEkPXCKDyBr3dfX3t91WDPYZiEKMjTbSmVsIrrP4o/i2S0EJ+dIDq5+B/0vgKNRIyTpoL/mb+OljZvjZhyDd0rKLEWF74j6FXPuBXdAZF6aKq/OhBlGR19jFEynBoENyEhQiD9YewuvI01+9UpFMJhS2vu6pPvwiE8AlNhi6EB/b1OG8iEl/SdnZzckaLt3UP8nmUAueADKYIwAttm3aVWdUE9+ykkUsWJxzhoG0pbfbTqTsLg09rpPYvp0cXAE2mrumH/lR18yFZfB4Fve9KobxVmKK68rt+pL01xePcz0I6svvameky3RgzV7Mm5cqPMJhKvXFqfI9+JJOCb5lHztxgl2WOK2SFB8d9K2kI0LsZgGcMb5rOnTf/eOIxeXKp4+GFDtqD7ooQfSQZtgB641onc333UCLmQF49/IgpElDxg3uRjLzDb36pnUs83sKZxjuP7DQckh6XVfio8oELfX7FyVzbKJe2lTwT1w3VqtU7mr7tKaLHbrUlEi4UEJeIq/ZqdwefloaKog+uVLU4eXZuOwMaP0+0KE2FIIOsqk77BUvKBllo1r5VxF7Lkstn6O46nETDrKIw/hUTGuZbb+ZR/hQnJ9WWjenxqb8ftvb7/li/49r7z3P46fPeqXwPFPlg5lrcjhFKnbNSjikGuEqhNYpbcf4extry8bDDikLd8SgZaS0J0awWjW5MNM2OXPilDgQIc5RQklP843XzUbte6xr1387A9n/BtaFlW3ufkgTzEkrDKAhAmQcTVlFgDq6Fmrr5VPxfQsmU+fpQ+azRT60t+scyhd9nVj0EJ/kIVohHHkGgw","X-OriginatorOrg":"nxp.com","X-MS-Exchange-CrossTenant-Network-Message-Id":"\n c1c45e7a-d7da-4eb9-c8f9-08dea6a8a9ce","X-MS-Exchange-CrossTenant-AuthSource":"AM9PR04MB8585.eurprd04.prod.outlook.com","X-MS-Exchange-CrossTenant-AuthAs":"Internal","X-MS-Exchange-CrossTenant-OriginalArrivalTime":"30 Apr 2026 11:07:26.8222\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 uPbOMt4E9IwHQG4aBk9IcSFvHcpJaw3BuzcEwHQC2DmGEeVpOkPFeT5YH1kD/3dyGuUroXwsf11tNTdaJldjhA==","X-MS-Exchange-Transport-CrossTenantHeadersStamped":"VI1PR04MB7182"},"content":"Consumer drivers shouldn't dereference struct phy, not even to get to\nits attributes.\n\nWe have phy_get_bus_width() as a precedent for getting the bus_width\nattribute, so let's add phy_get_max_link_rate() and use it in DRM and\nCAN drivers.\n\nIn CAN drivers, the transceiver is acquired through devm_phy_optional_get()\nand NULL is given by the API as a non-error case, so the PHY API should\nalso tolerate NULL coming back to it. This means we can further simplify\nthe call sites that test for the NULL quality of the transceiver.\n\nSigned-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>\nAcked-by: Markus Schneider-Pargmann <msp@baylibre.com> # m_can\n---\nCc: Andrzej Hajda <andrzej.hajda@intel.com>\nCc: Neil Armstrong <neil.armstrong@linaro.org>\nCc: Robert Foss <rfoss@kernel.org>\nCc: Laurent Pinchart <Laurent.pinchart@ideasonboard.com>\nCc: Jonas Karlman <jonas@kwiboo.se>\nCc: Jernej Skrabec <jernej.skrabec@gmail.com>\nCc: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>\nCc: Maxime Ripard <mripard@kernel.org>\nCc: Thomas Zimmermann <tzimmermann@suse.de>\nCc: David Airlie <airlied@gmail.com>\nCc: Simona Vetter <simona@ffwll.ch>\nCc: Andy Yan <andy.yan@rock-chips.com>\nCc: Marc Kleine-Budde <mkl@pengutronix.de>\nCc: Vincent Mailhol <mailhol@kernel.org>\nCc: Nicolas Ferre <nicolas.ferre@microchip.com>\nCc: Alexandre Belloni <alexandre.belloni@bootlin.com>\nCc: Claudiu Beznea <claudiu.beznea@tuxon.dev>\nCc: Markus Schneider-Pargmann <msp@baylibre.com>\nCc: Geert Uytterhoeven <geert+renesas@glider.be>\nCc: Magnus Damm <magnus.damm@gmail.com>\n\nv3->v7: none\nv2->v3: collect tag\nv1->v2: make phy_get_bus_width() NULL-tolerant to simplify CAN callers\n---\n drivers/gpu/drm/bridge/cadence/cdns-mhdp8546-core.c | 4 ++--\n drivers/gpu/drm/bridge/synopsys/dw-dp.c             | 2 +-\n drivers/net/can/at91_can.c                          | 3 +--\n drivers/net/can/flexcan/flexcan-core.c              | 3 +--\n drivers/net/can/m_can/m_can_platform.c              | 3 +--\n drivers/net/can/rcar/rcar_canfd.c                   | 3 +--\n drivers/phy/phy-core.c                              | 9 +++++++++\n include/linux/phy/phy.h                             | 6 ++++++\n 8 files changed, 22 insertions(+), 11 deletions(-)","diff":"diff --git a/drivers/gpu/drm/bridge/cadence/cdns-mhdp8546-core.c b/drivers/gpu/drm/bridge/cadence/cdns-mhdp8546-core.c\nindex d20c0f8ad04c..87847978c1fb 100644\n--- a/drivers/gpu/drm/bridge/cadence/cdns-mhdp8546-core.c\n+++ b/drivers/gpu/drm/bridge/cadence/cdns-mhdp8546-core.c\n@@ -1296,7 +1296,7 @@ static u32 cdns_mhdp_get_training_interval_us(struct cdns_mhdp_device *mhdp,\n \n static void cdns_mhdp_fill_host_caps(struct cdns_mhdp_device *mhdp)\n {\n-\tunsigned int link_rate;\n+\tu32 link_rate;\n \n \t/* Get source capabilities based on PHY attributes */\n \n@@ -1304,7 +1304,7 @@ static void cdns_mhdp_fill_host_caps(struct cdns_mhdp_device *mhdp)\n \tif (!mhdp->host.lanes_cnt)\n \t\tmhdp->host.lanes_cnt = 4;\n \n-\tlink_rate = mhdp->phy->attrs.max_link_rate;\n+\tlink_rate = phy_get_max_link_rate(mhdp->phy);\n \tif (!link_rate)\n \t\tlink_rate = drm_dp_bw_code_to_link_rate(DP_LINK_BW_8_1);\n \telse\ndiff --git a/drivers/gpu/drm/bridge/synopsys/dw-dp.c b/drivers/gpu/drm/bridge/synopsys/dw-dp.c\nindex 45b37885d719..137ea6679732 100644\n--- a/drivers/gpu/drm/bridge/synopsys/dw-dp.c\n+++ b/drivers/gpu/drm/bridge/synopsys/dw-dp.c\n@@ -530,7 +530,7 @@ static int dw_dp_link_parse(struct dw_dp *dp, struct drm_connector *connector)\n \n \tlink->revision = link->dpcd[DP_DPCD_REV];\n \tlink->rate = min_t(u32, min(dp->plat_data.max_link_rate,\n-\t\t\t\t    dp->phy->attrs.max_link_rate * 100),\n+\t\t\t\t    phy_get_max_link_rate(dp->phy) * 100),\n \t\t\t   drm_dp_max_link_rate(link->dpcd));\n \tlink->lanes = min_t(u8, phy_get_bus_width(dp->phy),\n \t\t\t    drm_dp_max_lane_count(link->dpcd));\ndiff --git a/drivers/net/can/at91_can.c b/drivers/net/can/at91_can.c\nindex 58da323f14d7..7749da0a58f6 100644\n--- a/drivers/net/can/at91_can.c\n+++ b/drivers/net/can/at91_can.c\n@@ -1125,8 +1125,7 @@ static int at91_can_probe(struct platform_device *pdev)\n \n \tcan_rx_offload_add_timestamp(dev, &priv->offload);\n \n-\tif (transceiver)\n-\t\tpriv->can.bitrate_max = transceiver->attrs.max_link_rate;\n+\tpriv->can.bitrate_max = phy_get_max_link_rate(transceiver);\n \n \tif (at91_is_sam9263(priv))\n \t\tdev->sysfs_groups[0] = &at91_sysfs_attr_group;\ndiff --git a/drivers/net/can/flexcan/flexcan-core.c b/drivers/net/can/flexcan/flexcan-core.c\nindex f5d22c61503f..093e48b8da58 100644\n--- a/drivers/net/can/flexcan/flexcan-core.c\n+++ b/drivers/net/can/flexcan/flexcan-core.c\n@@ -2210,8 +2210,7 @@ static int flexcan_probe(struct platform_device *pdev)\n \tpriv->reg_xceiver = reg_xceiver;\n \tpriv->transceiver = transceiver;\n \n-\tif (transceiver)\n-\t\tpriv->can.bitrate_max = transceiver->attrs.max_link_rate;\n+\tpriv->can.bitrate_max = phy_get_max_link_rate(transceiver);\n \n \tif (priv->devtype_data.quirks & FLEXCAN_QUIRK_NR_IRQ_3) {\n \t\tpriv->irq_boff = platform_get_irq(pdev, 1);\ndiff --git a/drivers/net/can/m_can/m_can_platform.c b/drivers/net/can/m_can/m_can_platform.c\nindex 56da411878af..2a0f163a683a 100644\n--- a/drivers/net/can/m_can/m_can_platform.c\n+++ b/drivers/net/can/m_can/m_can_platform.c\n@@ -131,8 +131,7 @@ static int m_can_plat_probe(struct platform_device *pdev)\n \t\tgoto probe_fail;\n \t}\n \n-\tif (transceiver)\n-\t\tmcan_class->can.bitrate_max = transceiver->attrs.max_link_rate;\n+\tmcan_class->can.bitrate_max = phy_get_max_link_rate(transceiver);\n \n \tpriv->base = addr;\n \tpriv->mram_base = mram_addr;\ndiff --git a/drivers/net/can/rcar/rcar_canfd.c b/drivers/net/can/rcar/rcar_canfd.c\nindex eaf8cac78038..9062db48d477 100644\n--- a/drivers/net/can/rcar/rcar_canfd.c\n+++ b/drivers/net/can/rcar/rcar_canfd.c\n@@ -1884,8 +1884,7 @@ static int rcar_canfd_channel_probe(struct rcar_canfd_global *gpriv, u32 ch,\n \tpriv->transceiver = transceiver;\n \tpriv->channel = ch;\n \tpriv->gpriv = gpriv;\n-\tif (transceiver)\n-\t\tpriv->can.bitrate_max = transceiver->attrs.max_link_rate;\n+\tpriv->can.bitrate_max = phy_get_max_link_rate(transceiver);\n \tpriv->can.clock.freq = fcan_freq;\n \tdev_info(dev, \"can_clk rate is %u\\n\", priv->can.clock.freq);\n \ndiff --git a/drivers/phy/phy-core.c b/drivers/phy/phy-core.c\nindex 0d0be494cfd7..737a760d97d1 100644\n--- a/drivers/phy/phy-core.c\n+++ b/drivers/phy/phy-core.c\n@@ -647,6 +647,15 @@ void phy_set_bus_width(struct phy *phy, int bus_width)\n }\n EXPORT_SYMBOL_GPL(phy_set_bus_width);\n \n+u32 phy_get_max_link_rate(struct phy *phy)\n+{\n+\tif (!phy)\n+\t\treturn 0;\n+\n+\treturn phy->attrs.max_link_rate;\n+}\n+EXPORT_SYMBOL_GPL(phy_get_max_link_rate);\n+\n /**\n  * _of_phy_get() - lookup and obtain a reference to a phy by phandle\n  * @np: device_node for which to get the phy\ndiff --git a/include/linux/phy/phy.h b/include/linux/phy/phy.h\nindex a7e2432ca1ae..34b656084caf 100644\n--- a/include/linux/phy/phy.h\n+++ b/include/linux/phy/phy.h\n@@ -57,6 +57,7 @@ int phy_notify_disconnect(struct phy *phy, int port);\n int phy_notify_state(struct phy *phy, union phy_notify state);\n int phy_get_bus_width(struct phy *phy);\n void phy_set_bus_width(struct phy *phy, int bus_width);\n+u32 phy_get_max_link_rate(struct phy *phy);\n #else\n static inline struct phy *phy_get(struct device *dev, const char *string)\n {\n@@ -256,6 +257,11 @@ static inline int phy_get_bus_width(struct phy *phy)\n static inline void phy_set_bus_width(struct phy *phy, int bus_width)\n {\n }\n+\n+static inline u32 phy_get_max_link_rate(struct phy *phy)\n+{\n+\treturn 0;\n+}\n #endif /* IS_ENABLED(CONFIG_GENERIC_PHY) */\n \n #endif /* __PHY_CONSUMER_H */\n","prefixes":["v7","phy-next","17/27"]}