net: nvethernet: Fix build for Linux v6.15

In Linux v6,15, a 'speed' argument was added to the phy_loopback()
function. Add a conftest test to detect this change and update the
nvethernet driver accordingly. Note that if 'speed' is set to 0 when
calling phy_loopback(), then phy_loopback() behaves the same way as it
did before this argument was added. So by default set speed to 0 for the
nvethernet driver.

JIRA LINQPJ14-47

Change-Id: I55f775e672bfa1a00c9ccbd825c82be1868b0b52
Signed-off-by: Jon Hunter <jonathanh@nvidia.com>
Reviewed-on: https://git-master.nvidia.com/r/c/linux-nv-oot/+/3330685
Tested-by: mobile promotions <svcmobile_promotions@nvidia.com>
GVS: buildbot_gerritrpt <buildbot_gerritrpt@nvidia.com>
Reviewed-by: mobile promotions <svcmobile_promotions@nvidia.com>
Reviewed-by: Revanth Kumar Uppala <ruppala@nvidia.com>
This commit is contained in:
Jon Hunter
2025-03-28 17:48:16 +00:00
parent 9672874453
commit 8cb3f30c12
3 changed files with 31 additions and 1 deletions

View File

@@ -1,5 +1,5 @@
// SPDX-License-Identifier: GPL-2.0-only // SPDX-License-Identifier: GPL-2.0-only
/* Copyright (c) 2019-2025, NVIDIA CORPORATION & AFFILIATES. All rights reserved */ // SPDX-FileCopyrightText: Copyright (c) 2019-2025, NVIDIA CORPORATION & AFFILIATES. All rights reserved
#ifndef OSI_STRIPPED_LIB #ifndef OSI_STRIPPED_LIB
#include "ether_linux.h" #include "ether_linux.h"
@@ -291,7 +291,11 @@ static int ether_test_phy_loopback(struct ether_priv_data *pdata)
if (!pdata->phydev) if (!pdata->phydev)
return -ENODEV; return -ENODEV;
#if defined(NV_PHY_LOOPBACK_HAS_SPEED_ARG) /* Linux v6.15 */
ret = phy_loopback(pdata->phydev, true, 0);
#else
ret = phy_loopback(pdata->phydev, true); ret = phy_loopback(pdata->phydev, true);
#endif
if (ret != 0 && ret != -EBUSY) if (ret != 0 && ret != -EBUSY)
return ret; return ret;
@@ -397,7 +401,11 @@ void ether_selftest_run(struct net_device *dev,
case ETHER_LOOPBACK_PHY: case ETHER_LOOPBACK_PHY:
ret = -EOPNOTSUPP; ret = -EOPNOTSUPP;
if (dev->phydev) if (dev->phydev)
#if defined(NV_PHY_LOOPBACK_HAS_SPEED_ARG) /* Linux v6.15 */
ret = phy_loopback(dev->phydev, true, 0);
#else
ret = phy_loopback(dev->phydev, true); ret = phy_loopback(dev->phydev, true);
#endif
if (!ret) if (!ret)
break; break;
/* Fallthrough */ /* Fallthrough */
@@ -430,7 +438,11 @@ void ether_selftest_run(struct net_device *dev,
case ETHER_LOOPBACK_PHY: case ETHER_LOOPBACK_PHY:
ret = -EOPNOTSUPP; ret = -EOPNOTSUPP;
if (dev->phydev) if (dev->phydev)
#if defined(NV_PHY_LOOPBACK_HAS_SPEED_ARG) /* Linux v6.15 */
ret = phy_loopback(dev->phydev, false, 0);
#else
ret = phy_loopback(dev->phydev, false); ret = phy_loopback(dev->phydev, false);
#endif
if (!ret) if (!ret)
break; break;
/* Fallthrough */ /* Fallthrough */

View File

@@ -193,6 +193,7 @@ NV_CONFTEST_FUNCTION_COMPILE_TESTS += pci_epf_alloc_space_has_epc_features_arg
NV_CONFTEST_FUNCTION_COMPILE_TESTS += pci_epf_driver_struct_probe_has_id_arg NV_CONFTEST_FUNCTION_COMPILE_TESTS += pci_epf_driver_struct_probe_has_id_arg
NV_CONFTEST_FUNCTION_COMPILE_TESTS += pci_epc_irq_type_enum_present NV_CONFTEST_FUNCTION_COMPILE_TESTS += pci_epc_irq_type_enum_present
NV_CONFTEST_FUNCTION_COMPILE_TESTS += pci_irq_intx NV_CONFTEST_FUNCTION_COMPILE_TESTS += pci_irq_intx
NV_CONFTEST_FUNCTION_COMPILE_TESTS += phy_loopback_has_speed_arg
NV_CONFTEST_FUNCTION_COMPILE_TESTS += platform_driver_struct_remove_returns_void NV_CONFTEST_FUNCTION_COMPILE_TESTS += platform_driver_struct_remove_returns_void
NV_CONFTEST_FUNCTION_COMPILE_TESTS += register_shrinker_has_fmt_arg NV_CONFTEST_FUNCTION_COMPILE_TESTS += register_shrinker_has_fmt_arg
NV_CONFTEST_FUNCTION_COMPILE_TESTS += shrinker_alloc NV_CONFTEST_FUNCTION_COMPILE_TESTS += shrinker_alloc

View File

@@ -8166,6 +8166,23 @@ compile_test() {
compile_check_conftest "$CODE" "NV_PCI_IRQ_INTX" "" "types" compile_check_conftest "$CODE" "NV_PCI_IRQ_INTX" "" "types"
;; ;;
phy_loopback_has_speed_arg)
#
# Determine if phy_loopback() has 'speed' argument.
#
# Commit 0d60fd50328a ("net: phy: Support speed selection for PHY
# loopback") add a 'speed' argument to phy_loopback() in Linux
# v6.15.
#
CODE="
#include <linux/phy.h>
int conftest_phy_loopback_has_speed_arg(struct phy_device *phydev) {
return phy_loopback(phydev, true, 0);
}"
compile_check_conftest "$CODE" "NV_PHY_LOOPBACK_HAS_SPEED_ARG" "" "types"
;;
platform_driver_struct_remove_returns_void) platform_driver_struct_remove_returns_void)
# #
# Determine if the 'platform_driver' structure 'remove' function # Determine if the 'platform_driver' structure 'remove' function