{"id":2232916,"url":"http://patchwork.ozlabs.org/api/1.2/patches/2232916/?format=json","web_url":"http://patchwork.ozlabs.org/project/linux-pci/patch/20260505100523.1922388-21-vladimir.oltean@nxp.com/","project":{"id":28,"url":"http://patchwork.ozlabs.org/api/1.2/projects/28/?format=json","name":"Linux PCI development","link_name":"linux-pci","list_id":"linux-pci.vger.kernel.org","list_email":"linux-pci@vger.kernel.org","web_url":null,"scm_url":null,"webscm_url":null,"list_archive_url":"","list_archive_url_format":"","commit_url_format":""},"msgid":"<20260505100523.1922388-21-vladimir.oltean@nxp.com>","list_archive_url":null,"date":"2026-05-05T10:05:12","name":"[v8,phy-next,20/31] phy: introduce phy_get_max_link_rate() helper for consumers","commit_ref":null,"pull_url":null,"state":"new","archived":false,"hash":"88e286b5d04a23927c58e2a5d8240c445f5a90ea","submitter":{"id":75582,"url":"http://patchwork.ozlabs.org/api/1.2/people/75582/?format=json","name":"Vladimir Oltean","email":"vladimir.oltean@nxp.com"},"delegate":null,"mbox":"http://patchwork.ozlabs.org/project/linux-pci/patch/20260505100523.1922388-21-vladimir.oltean@nxp.com/mbox/","series":[{"id":502805,"url":"http://patchwork.ozlabs.org/api/1.2/series/502805/?format=json","web_url":"http://patchwork.ozlabs.org/project/linux-pci/list/?series=502805","date":"2026-05-05T10:04:53","name":"Split Generic PHY consumer and provider API","version":8,"mbox":"http://patchwork.ozlabs.org/series/502805/mbox/"}],"comments":"http://patchwork.ozlabs.org/api/patches/2232916/comments/","check":"pending","checks":"http://patchwork.ozlabs.org/api/patches/2232916/checks/","tags":{},"related":[],"headers":{"Return-Path":"\n <linux-pci+bounces-53730-incoming=patchwork.ozlabs.org@vger.kernel.org>","X-Original-To":["incoming@patchwork.ozlabs.org","linux-pci@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=IKPL9rrg;\n\tdkim-atps=neutral","legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org\n (client-ip=2600:3c04:e001:36c::12fc:5321; helo=tor.lore.kernel.org;\n envelope-from=linux-pci+bounces-53730-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=\"IKPL9rrg\"","smtp.subspace.kernel.org;\n arc=fail smtp.client-ip=52.101.69.64","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\n [IPv6:2600:3c04:e001:36c::12fc:5321])\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 4g8vtW0qcdz1yJ0\n\tfor <incoming@patchwork.ozlabs.org>; Tue, 05 May 2026 20:30:59 +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 018EE30D3D89\n\tfor <incoming@patchwork.ozlabs.org>; Tue,  5 May 2026 10:14:58 +0000 (UTC)","from localhost.localdomain (localhost.localdomain [127.0.0.1])\n\tby smtp.subspace.kernel.org (Postfix) with ESMTP id 7410B43C069;\n\tTue,  5 May 2026 10:06:31 +0000 (UTC)","from AM0PR83CU005.outbound.protection.outlook.com\n (mail-westeuropeazon11010064.outbound.protection.outlook.com [52.101.69.64])\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 B7036426D1D;\n\tTue,  5 May 2026 10:06:27 +0000 (UTC)","from AM9PR04MB8585.eurprd04.prod.outlook.com (2603:10a6:20b:438::13)\n by DB9PR04MB8363.eurprd04.prod.outlook.com (2603:10a6:10:24b::11) with\n Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9846.26; Tue, 5 May\n 2026 10:06:22 +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.9870.023; Tue, 5 May 2026\n 10:06:20 +0000"],"ARC-Seal":["i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;\n\tt=1777975591; cv=fail;\n b=pMwfvq0cggnHWzor/YgK2xZwDY/EXl05urKhZt4pEegablVkonCvKEUuSmOF10pm/10qN/Tjp0t9+Fwham/Gi3j3WcmnNaJ9dTSpaA+xUyykME90pw51bm2XUfw+f3LqN6gkP0lLZ2Gq9jOVmZTV8wUQXOjPp2UkvhjJGAgq4Vw=","i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;\n b=RiqI4KQQqL2Up1v6PwzVqifqZVX0zjLonSbONAgKowxjKsvWwYjAElQw7qUkQ1x/6RR8C+9qtLbdfoT1Oi+y1wA9sg5Zlxs2KAMonz0HFqdcsfscftBkq+iS65Eo5Jb71gyP5MVGHx9tcEwAFfOJUG9b7auERNbCqUTPfTZKLJ7HHmQGsJoPfBN8TS28SfbAiz3GW5C+oUXEF7NOfi4g7Qb+HfVdeq0Gy9nN4MUi9fqybdGHDk9xh1nUR/ZeRC3NU2pw23w0/34+YS8M77Vo7HANEJ1YoIPF9PbH/2J//DJ9pBQhQ+g7iKE50/ML87YVHF2+HHtRPclKLRClZZFRjw=="],"ARC-Message-Signature":["i=2; a=rsa-sha256; d=subspace.kernel.org;\n\ts=arc-20240116; t=1777975591; c=relaxed/simple;\n\tbh=iJsB9TtB16FHCo3JJ114/4lcKrgNtiUvsaCEB4w+2Sk=;\n\th=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References:\n\t Content-Type:MIME-Version;\n b=Scd1iJaYs8p+hAvVZ10nTDVaSCS2VM7iTtVyiuWjjvusIB4d4MjlruT+9eej7EsCmWObjSPHJGhrsTEF/jrLuI5FP7tEuTbM6n6n6KzThKAYk/Sa0exeKb8+mHmWNyv3BEwsm2qr55B5hGmPLJhyFcnZAiXGJQAD/6kuSZRkWB8=","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=R5sRDgO8/76/s9f9by6DOCDUOB2Ib1AVjGCXp6EGedg=;\n b=HT29hBh95S+l52xf7tTnDpocPpmRAQNtGXtIVHXeGj/hOm9rAHGFPYYmePHCf65xEmw3knbgcDp6ewJPlwAsILFIOEFj58FgvAUuJRMO78fNxYVLhliNpVbhjNy97F6LzDm5qJxkujGS3q6qLGUb+LnUJXimoUcL+oupdkT5CGQLMYXG5XR1ZYNfN5hZzezkXo3rK630kxwdAAeARQcyCBKsXbQ4VhykfEGXPV8h/CyZdpehsEBO6xWu3B7eemYv+LCe1Y/dfBhIeH/3swmmeB2ZUuUeSRtFHxZlyUJbXU39LQYHPHhBtNtTnm0kCr+NvdMXjqF9W/VujoAtdUqE6A=="],"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=IKPL9rrg; arc=fail smtp.client-ip=52.101.69.64","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=R5sRDgO8/76/s9f9by6DOCDUOB2Ib1AVjGCXp6EGedg=;\n b=IKPL9rrg7Da9qOLxBykiXKAqnpsStY34RG9pqVopsJ4S8EvWOB5oaRxCPlx1Ap+o/TQiUebQeqPbfPG//J/3LAbnukIww+CK7+uKrapJC4a1no8GFGz3f1J+J3G5tBWOHtCSqo4bh6l88GCQIc/fsErBYflaOzlIQnoOEV7tThn9xCCvlI5Xeib9SI/yFTEqEtpL+4cyO9irGvonV0REIlKjTEIx+AfLGGOOHh49G9dodswqkvOzGD5ZBhw+wIHk4pQTs3BULl48p/EU/bGIh78iZrlqbGkvtlb8tcGkShT7pYgTyO77Xfehzjisg6CGEgXs/uYXAzXZXoNY5qlDDA==","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\tGeert Uytterhoeven <geert+renesas@glider.be>,\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\tMagnus Damm <magnus.damm@gmail.com>","Subject":"[PATCH v8 phy-next 20/31] phy: introduce phy_get_max_link_rate()\n helper for consumers","Date":"Tue,  5 May 2026 13:05:12 +0300","Message-Id":"<20260505100523.1922388-21-vladimir.oltean@nxp.com>","X-Mailer":"git-send-email 2.34.1","In-Reply-To":"<20260505100523.1922388-1-vladimir.oltean@nxp.com>","References":"<20260505100523.1922388-1-vladimir.oltean@nxp.com>","Content-Transfer-Encoding":"8bit","Content-Type":"text/plain","X-ClientProxiedBy":"FR2P281CA0049.DEUP281.PROD.OUTLOOK.COM\n (2603:10a6:d10:92::9) To AM9PR04MB8585.eurprd04.prod.outlook.com\n (2603:10a6:20b:438::13)","Precedence":"bulk","X-Mailing-List":"linux-pci@vger.kernel.org","List-Id":"<linux-pci.vger.kernel.org>","List-Subscribe":"<mailto:linux-pci+subscribe@vger.kernel.org>","List-Unsubscribe":"<mailto:linux-pci+unsubscribe@vger.kernel.org>","MIME-Version":"1.0","X-MS-PublicTrafficType":"Email","X-MS-TrafficTypeDiagnostic":"AM9PR04MB8585:EE_|DB9PR04MB8363:EE_","X-MS-Office365-Filtering-Correlation-Id":"34320779-b733-4992-3422-08deaa8df4c7","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|376014|1800799024|19092799006|7416014|366016|22082099003|18002099003|56012099003;","X-Microsoft-Antispam-Message-Info":"\n PkXF2EQTzA1R7BkWyOAdNdkouP2SKDUJ9Eg2lSmw1pFJI3HWyJvN/zitXAgRpSUSwGnYkExo3mdvuOeeDmGjfbGuyZ7elqeiX0+Ox3A7QCSx0Zo9RIK707YeI5hS/8vlrrbr421AdAklytiP/KFxnNU2lPLsSIwt5DQznFVDLulTUplRxIU4KnsxzrG0tjrVk1mhrpCebnrhuXaUeDx5jFqfkYzUEJRW5I0Jcyb+VoSPKGhRXITioEaKNzvhQK3nBMISA2VXYXi3aWucRCJQPwe2AhlB2q+jr5mOXn9I4B9NoeBOkb2DkQp3o4a1eb8fgvizgPor+zvlQ/a5zO8V3mcxK6Zlc2srDEw0PZl/oaTIYstlid0EP1bWS4fAs9ceiU4d399V2Ibv/i5j1Nsl8JSUwP2RUXv6u8C+itXXIHeaO65dVBI0yc+6Y46FDjx4itNmb7Sjj6VlhXTEO3qGQY4I1/NyD0C6HozHkkVcYB+qoJ3DovqkrsgP4484n2gQ9mY5jLQ/MiMMJrgB1eMvg1OGRbkgt8idsat+GpfbQgAJcIHDHradtQRK5Iyx+z0R6YKRMvq3l3V3rCJ0/za7XMa7+/KZ8cl6lBG1QBtkwZNERqum4Kk2+bAy/59wBP6hvo+OtWEFIloF2HIDV/JnYYxxMWkRUpwSzp/GWyV8KYQNpk6GQDDhx20kjaLggJv5","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)(376014)(1800799024)(19092799006)(7416014)(366016)(22082099003)(18002099003)(56012099003);DIR:OUT;SFP:1101;","X-MS-Exchange-AntiSpam-MessageData-ChunkCount":"1","X-MS-Exchange-AntiSpam-MessageData-0":"\n heKNdp91rcxSmoOzFldFXT16Y2C1VgElaqNvGb+cJ6+61JzGKujrTm94k8hPPqWVQj0rL2Koxs6PMDiM5opCtiiI22ukeJ89KU2CNyFpU/9R/0QkxCTASdnG3wDhzkdTBkljMRFlxoyVUlybN/VAe5utNPBFbhnheqY2wqvEdMHk7JronA24hU07m3eJ8/9m/FvOR6jNWqjZTKQ2k/J+SRMA/+FAWY1ITzDmQ9UfoAqPy/HpcpTfjU3mEBNGoxwYWGAZ7nn54Ji5wTqygz8vmG4KZxogfOjgQDlPbFUTPfrViZJnLN/HetsZT0uujaU1JvCCYw1n3f4dBBM4cWACLhgNOXv/2bgFXsYBfen2TrWJA/3a0jFi2BfSGeHC5+tW+PuBno9PRYeOH1O5Azm4BkXqFstA0D9yhVtROQhje37Y47YMxFvoJIfwjKEXDizS1EeDo26in/zOl2ZxOa4TrrhIOxiTVwa10JBIbAHRIISX1yeC0xNW11PqBz5h2zLagHw/iy7hQVopsjIsLD0UAeNWH3aTHZxCVKgRU1IxVIGU+5lUn5FUlZtlow0i2v1pz7OLte1QojiPg6DPFMZsDA4Opc6jaucDXazAhnhDwHfKTZcKG24LK5C5yFrSygPPj3zt1O3NiJEjYmwwDbn8l5Dlef39CB+ChPsFNUIB4EXRKMioS5c3kIYL9q4BbDgdvoAWHx2eOtR9tBo26oL8+ctMwkzEbwMb9N7HBO2GTtNVSPtBAI/SdFTc8b0l2SXqHHndZoyecEmxKMc643p9D85/nHfG/OYdLq2fr4NeX6qZuKTr+ufd7cFMAqasNJK9XXnaCrbuHCPd8eF2tenS6n0AjLg6NYXnIqlmRlcIq0Bh/YwG5cwOIMf+Uo2h9z6bzEVjhP0x7pXP/Cb4ta1jxkrl+oJd51DE9DTfqbOziBaAeLk1LI0AYk/j1dHPwMltnzpLzTj3GDVLD20Pp+iMtrj9JsmPDKSg0n21WT43wxhqSAm0qtMSsX7ssc2bnsOE+epXRzFG09Y9ydvmQ7G0x37NQEyDPfIneMy4BKmmplf+wUBD7imRErY5gIHjanlhO1NRJcGXokWt+TEO5ykpNaQ2SzWu+UODYA3F+DOZ9hzRJq7T0sPGh44lB/q5jpNt5CXLbHr0c4vRIcao7yBml8tq3rc9AQ+QzxHGZPbq4UcbXeTTI/1kc+YOUPRnKvsOQwdTlGC+mmYDl7RLEyYNELDWtuThqCcmRQMIhwkAugl/O0GuR7EsJSlpijZOEnBJc8K8jH1hJMFQI/AD6nV44G6zV4mVLrdYgATZYA7pB/u+dS+MJsNDRM6SGgsqzXpQqhPQPsvAS/zyrHNCk0MsUkNts/lEqv1UVc5yrZ6ZxQNTGmUHWDK7Rhfz4sq6szMNdS6AvTtDZ1iC6JBSY2mPXi15gBNOZ++DGs49N4lGZReP/BHtiaiIha/HMDBrrGk9iCMR/uNJdu/Dne3JLaKqSTKGv7zRxRjDR+sR+YVTcBsdPQf4lpHiJNxHcTvOXC1fH6B1CBzJdqbg5vqNqJuJiYIqBgx6g+nx9yXUl7zs/mZ4tcE5LpMeODs4IQuj8UFCUg6wY+DyYhVWAPiZk2zrPTeuNXw6Qt6N1adexKB6eHHfp0E7G6OjEK1NaHv+S4/6Z+D1uDtYDQEH5K5rrMhioTDZZqueK4NGn+0PJw8UBK/tpeEutBD1pRsMcKumRVmriHLDtl2a3+ZRKQPBL47Vag==","X-OriginatorOrg":"nxp.com","X-MS-Exchange-CrossTenant-Network-Message-Id":"\n 34320779-b733-4992-3422-08deaa8df4c7","X-MS-Exchange-CrossTenant-AuthSource":"AM9PR04MB8585.eurprd04.prod.outlook.com","X-MS-Exchange-CrossTenant-AuthAs":"Internal","X-MS-Exchange-CrossTenant-OriginalArrivalTime":"05 May 2026 10:06:20.9360\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 Lj6mTfmaJwTZD/kK1BNfcHCNpUjwzlz0/LaBzbDi5okPmGBjN9f1ruV1nezAPtokgaDRycUyE0Xv3YSEUPmuTA==","X-MS-Exchange-Transport-CrossTenantHeadersStamped":"DB9PR04MB8363"},"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\nAcked-by: Geert Uytterhoeven <geert+renesas@glider.be> # rcar_canfd\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\nv7->v8: make \"struct phy *\" argument const\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 6cd33204d2ff..8707111c4666 100644\n--- a/drivers/phy/phy-core.c\n+++ b/drivers/phy/phy-core.c\n@@ -675,6 +675,15 @@ int phy_request_bus_width(struct phy *phy, int bus_width)\n }\n EXPORT_SYMBOL_GPL(phy_request_bus_width);\n \n+u32 phy_get_max_link_rate(const 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 99d3d65da614..e65865b4acfe 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 int phy_request_bus_width(struct phy *phy, int bus_width);\n+u32 phy_get_max_link_rate(const struct phy *phy);\n #else\n static inline struct phy *phy_get(struct device *dev, const char *string)\n {\n@@ -260,6 +261,11 @@ static inline int phy_request_bus_width(struct phy *phy, int bus_width)\n \n \treturn -ENOSYS;\n }\n+\n+static inline u32 phy_get_max_link_rate(const struct phy *phy)\n+{\n+\treturn 0;\n+}\n #endif /* IS_ENABLED(CONFIG_GENERIC_PHY) */\n \n #endif /* __PHY_CONSUMER_H */\n","prefixes":["v8","phy-next","20/31"]}