* [PATCH net-next v3 1/3] ethtool: Add new result codes for TDR diagnostics @ 2024-08-09 7:24 Oleksij Rempel 2024-08-09 7:24 ` [PATCH net-next v3 2/3] phy: Add Open Alliance helpers for the PHY framework Oleksij Rempel 2024-08-09 7:24 ` [PATCH net-next v3 3/3] net: phy: dp83tg720: Add cable testing support Oleksij Rempel 0 siblings, 2 replies; 7+ messages in thread From: Oleksij Rempel @ 2024-08-09 7:24 UTC (permalink / raw) To: Andrew Lunn, Heiner Kallweit, Russell King, David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni Cc: Oleksij Rempel, kernel, linux-kernel, netdev Add new result codes to support TDR diagnostics in preparation for Open Alliance 1000BaseT1 TDR support: - ETHTOOL_A_CABLE_RESULT_CODE_NOISE: TDR not possible due to high noise level. - ETHTOOL_A_CABLE_RESULT_CODE_RESOLUTION_NOT_POSSIBLE: TDR resolution not possible / out of distance. Signed-off-by: Oleksij Rempel <o.rempel@pengutronix.de> --- include/uapi/linux/ethtool_netlink.h | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/include/uapi/linux/ethtool_netlink.h b/include/uapi/linux/ethtool_netlink.h index 6d5bdcc67631a..fc814c8a5ac47 100644 --- a/include/uapi/linux/ethtool_netlink.h +++ b/include/uapi/linux/ethtool_netlink.h @@ -556,6 +556,10 @@ enum { * a regular 100 Ohm cable and a part with the abnormal impedance value */ ETHTOOL_A_CABLE_RESULT_CODE_IMPEDANCE_MISMATCH, + /* TDR not possible due to high noise level */ + ETHTOOL_A_CABLE_RESULT_CODE_NOISE, + /* TDR resolution not possible / out of distance */ + ETHTOOL_A_CABLE_RESULT_CODE_RESOLUTION_NOT_POSSIBLE, }; enum { -- 2.39.2 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH net-next v3 2/3] phy: Add Open Alliance helpers for the PHY framework 2024-08-09 7:24 [PATCH net-next v3 1/3] ethtool: Add new result codes for TDR diagnostics Oleksij Rempel @ 2024-08-09 7:24 ` Oleksij Rempel 2024-08-09 7:24 ` [PATCH net-next v3 3/3] net: phy: dp83tg720: Add cable testing support Oleksij Rempel 1 sibling, 0 replies; 7+ messages in thread From: Oleksij Rempel @ 2024-08-09 7:24 UTC (permalink / raw) To: Andrew Lunn, Heiner Kallweit, Russell King, David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni Cc: Oleksij Rempel, kernel, linux-kernel, netdev Introduce helper functions specific to Open Alliance diagnostics, integrating them into the PHY framework. Currently, these helpers are limited to 1000BaseT1 specific TDR functionality. Signed-off-by: Oleksij Rempel <o.rempel@pengutronix.de> --- changes v3: - make it optional - move headers to the drivers/net/phy folder --- drivers/net/phy/Kconfig | 3 + drivers/net/phy/Makefile | 1 + drivers/net/phy/open_alliance_helpers.c | 76 +++++++++++++++++++++++++ drivers/net/phy/open_alliance_helpers.h | 47 +++++++++++++++ 4 files changed, 127 insertions(+) create mode 100644 drivers/net/phy/open_alliance_helpers.c create mode 100644 drivers/net/phy/open_alliance_helpers.h diff --git a/drivers/net/phy/Kconfig b/drivers/net/phy/Kconfig index 7fddc8306d822..874422e530ff0 100644 --- a/drivers/net/phy/Kconfig +++ b/drivers/net/phy/Kconfig @@ -44,6 +44,9 @@ config LED_TRIGGER_PHY <Speed in megabits>Mbps OR <Speed in gigabits>Gbps OR link for any speed known to the PHY. +config OPEN_ALLIANCE_HELPERS + bool + config PHYLIB_LEDS def_bool OF depends on LEDS_CLASS=y || LEDS_CLASS=PHYLIB diff --git a/drivers/net/phy/Makefile b/drivers/net/phy/Makefile index 202ed7f450da6..e93dfec881c5d 100644 --- a/drivers/net/phy/Makefile +++ b/drivers/net/phy/Makefile @@ -23,6 +23,7 @@ obj-$(CONFIG_MDIO_DEVRES) += mdio_devres.o libphy-$(CONFIG_SWPHY) += swphy.o libphy-$(CONFIG_LED_TRIGGER_PHY) += phy_led_triggers.o +obj-$(CONFIG_OPEN_ALLIANCE_HELPERS) += open_alliance_helpers.o obj-$(CONFIG_PHYLINK) += phylink.o obj-$(CONFIG_PHYLIB) += libphy.o diff --git a/drivers/net/phy/open_alliance_helpers.c b/drivers/net/phy/open_alliance_helpers.c new file mode 100644 index 0000000000000..b7e67bdb01e33 --- /dev/null +++ b/drivers/net/phy/open_alliance_helpers.c @@ -0,0 +1,76 @@ +// SPDX-License-Identifier: GPL-2.0+ +/* + * open_alliance_helpers.c - OPEN Alliance specific PHY diagnostic helpers + * + * This file contains helper functions for implementing advanced diagnostic + * features as specified by the OPEN Alliance for automotive Ethernet PHYs. + * These helpers include functionality for Time Delay Reflection (TDR), dynamic + * channel quality assessment, and other PHY diagnostics. + * + * For more information on the specifications, refer to the OPEN Alliance + * documentation: https://opensig.org/automotive-ethernet-specifications/ + * Currently following specifications are partially or fully implemented: + * - Advanced diagnostic features for 1000BASE-T1 automotive Ethernet PHYs. + * TC12 - advanced PHY features. + * https://opensig.org/wp-content/uploads/2024/03/Advanced_PHY_features_for_automotive_Ethernet_v2.0_fin.pdf + */ + +#include <linux/ethtool_netlink.h> + +#include "open_alliance_helpers.h" + +/** + * oa_1000bt1_get_ethtool_cable_result_code - Convert TDR status to ethtool + * result code + * @reg_value: Value read from the TDR register + * + * This function takes a register value from the HDD.TDR register and converts + * the TDR status to the corresponding ethtool cable test result code. + * + * Return: The appropriate ethtool result code based on the TDR status + */ +int oa_1000bt1_get_ethtool_cable_result_code(u16 reg_value) +{ + u8 tdr_status = FIELD_GET(OA_1000BT1_HDD_TDR_STATUS_MASK, reg_value); + u8 dist_val = FIELD_GET(OA_1000BT1_HDD_TDR_DISTANCE_MASK, reg_value); + + switch (tdr_status) { + case OA_1000BT1_HDD_TDR_STATUS_CABLE_OK: + return ETHTOOL_A_CABLE_RESULT_CODE_OK; + case OA_1000BT1_HDD_TDR_STATUS_OPEN: + return ETHTOOL_A_CABLE_RESULT_CODE_OPEN; + case OA_1000BT1_HDD_TDR_STATUS_SHORT: + return ETHTOOL_A_CABLE_RESULT_CODE_SAME_SHORT; + case OA_1000BT1_HDD_TDR_STATUS_NOISE: + return ETHTOOL_A_CABLE_RESULT_CODE_NOISE; + default: + if (dist_val == OA_1000BT1_HDD_TDR_DISTANCE_RESOLUTION_NOT_POSSIBLE) + return ETHTOOL_A_CABLE_RESULT_CODE_RESOLUTION_NOT_POSSIBLE; + return ETHTOOL_A_CABLE_RESULT_CODE_UNSPEC; + } +} +EXPORT_SYMBOL_GPL(oa_1000bt1_get_ethtool_cable_result_code); + +/** + * oa_1000bt1_get_tdr_distance - Get distance to the main fault from TDR + * register value + * @reg_value: Value read from the TDR register + * + * This function takes a register value from the HDD.TDR register and extracts + * the distance to the main fault detected by the TDR feature. The distance is + * measured in centimeters and ranges from 0 to 3100 centimeters. If the + * distance is not available (0x3f), the function returns -ERANGE. + * + * Return: The distance to the main fault in centimeters, or -ERANGE if the + * resolution is not possible. + */ +int oa_1000bt1_get_tdr_distance(u16 reg_value) +{ + u8 dist_val = FIELD_GET(OA_1000BT1_HDD_TDR_DISTANCE_MASK, reg_value); + + if (dist_val == OA_1000BT1_HDD_TDR_DISTANCE_RESOLUTION_NOT_POSSIBLE) + return -ERANGE; + + return dist_val * 100; +} +EXPORT_SYMBOL_GPL(oa_1000bt1_get_tdr_distance); diff --git a/drivers/net/phy/open_alliance_helpers.h b/drivers/net/phy/open_alliance_helpers.h new file mode 100644 index 0000000000000..8b7d97bc6f186 --- /dev/null +++ b/drivers/net/phy/open_alliance_helpers.h @@ -0,0 +1,47 @@ +/* SPDX-License-Identifier: GPL-2.0 */ + +#ifndef OPEN_ALLIANCE_HELPERS_H +#define OPEN_ALLIANCE_HELPERS_H + +/* + * These defines reflect the TDR (Time Delay Reflection) diagnostic feature + * for 1000BASE-T1 automotive Ethernet PHYs as specified by the OPEN Alliance. + * + * The register values are part of the HDD.TDR register, which provides + * information about the cable status and faults. The exact register offset + * is device-specific and should be provided by the driver. + */ +#define OA_1000BT1_HDD_TDR_ACTIVATION_MASK GENMASK(1, 0) +#define OA_1000BT1_HDD_TDR_ACTIVATION_OFF 1 +#define OA_1000BT1_HDD_TDR_ACTIVATION_ON 2 + +#define OA_1000BT1_HDD_TDR_STATUS_MASK GENMASK(7, 4) +#define OA_1000BT1_HDD_TDR_STATUS_SHORT 3 +#define OA_1000BT1_HDD_TDR_STATUS_OPEN 6 +#define OA_1000BT1_HDD_TDR_STATUS_NOISE 5 +#define OA_1000BT1_HDD_TDR_STATUS_CABLE_OK 7 +#define OA_1000BT1_HDD_TDR_STATUS_TEST_IN_PROGRESS 8 +#define OA_1000BT1_HDD_TDR_STATUS_TEST_NOT_POSSIBLE 13 + +/* + * OA_1000BT1_HDD_TDR_DISTANCE_MASK: + * This mask is used to extract the distance to the first/main fault + * detected by the TDR feature. Each bit represents an approximate distance + * of 1 meter, ranging from 0 to 31 meters. The exact interpretation of the + * bits may vary, but generally: + * 000000 = no error + * 000001 = error about 0-1m away + * 000010 = error between 1-2m away + * ... + * 011111 = error about 30-31m away + * 111111 = resolution not possible / out of distance + */ +#define OA_1000BT1_HDD_TDR_DISTANCE_MASK GENMASK(13, 8) +#define OA_1000BT1_HDD_TDR_DISTANCE_NO_ERROR 0 +#define OA_1000BT1_HDD_TDR_DISTANCE_RESOLUTION_NOT_POSSIBLE 0x3f + +int oa_1000bt1_get_ethtool_cable_result_code(u16 reg_value); +int oa_1000bt1_get_tdr_distance(u16 reg_value); + +#endif /* OPEN_ALLIANCE_HELPERS_H */ + -- 2.39.2 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH net-next v3 3/3] net: phy: dp83tg720: Add cable testing support 2024-08-09 7:24 [PATCH net-next v3 1/3] ethtool: Add new result codes for TDR diagnostics Oleksij Rempel 2024-08-09 7:24 ` [PATCH net-next v3 2/3] phy: Add Open Alliance helpers for the PHY framework Oleksij Rempel @ 2024-08-09 7:24 ` Oleksij Rempel 2024-08-09 17:55 ` kernel test robot 2024-08-09 19:57 ` kernel test robot 1 sibling, 2 replies; 7+ messages in thread From: Oleksij Rempel @ 2024-08-09 7:24 UTC (permalink / raw) To: Andrew Lunn, Heiner Kallweit, Russell King, David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni Cc: Oleksij Rempel, kernel, linux-kernel, netdev Introduce cable testing support for the DP83TG720 PHY. This implementation is based on the "DP83TG720S-Q1: Configuring for Open Alliance Specification Compliance (Rev. B)" application note. The feature has been tested with cables of various lengths: - No cable: 1m till open reported. - 5 meter cable: reported properly. - 20 meter cable: reported as 19m. - 40 meter cable: reported as cable ok. Signed-off-by: Oleksij Rempel <o.rempel@pengutronix.de> --- changes v3: - select OPEN_ALLIANCE_HELPERS changes v2: - use open alliance specific helpers for the TDR results --- drivers/net/phy/Kconfig | 1 + drivers/net/phy/dp83tg720.c | 154 ++++++++++++++++++++++++++++++++++++ 2 files changed, 155 insertions(+) diff --git a/drivers/net/phy/Kconfig b/drivers/net/phy/Kconfig index 874422e530ff0..f530fcd092fe4 100644 --- a/drivers/net/phy/Kconfig +++ b/drivers/net/phy/Kconfig @@ -417,6 +417,7 @@ config DP83TD510_PHY config DP83TG720_PHY tristate "Texas Instruments DP83TG720 Ethernet 1000Base-T1 PHY" + select OPEN_ALLIANCE_HELPERS help The DP83TG720S-Q1 is an automotive Ethernet physical layer transceiver compliant with IEEE 802.3bp and Open Alliance diff --git a/drivers/net/phy/dp83tg720.c b/drivers/net/phy/dp83tg720.c index c706429b225a2..0ef4d7dba0656 100644 --- a/drivers/net/phy/dp83tg720.c +++ b/drivers/net/phy/dp83tg720.c @@ -3,10 +3,13 @@ * Copyright (c) 2023 Pengutronix, Oleksij Rempel <kernel@pengutronix.de> */ #include <linux/bitfield.h> +#include <linux/ethtool_netlink.h> #include <linux/kernel.h> #include <linux/module.h> #include <linux/phy.h> +#include "open_alliance_helpers.h" + #define DP83TG720S_PHY_ID 0x2000a284 /* MDIO_MMD_VEND2 registers */ @@ -14,6 +17,17 @@ #define DP83TG720S_STS_MII_INT BIT(7) #define DP83TG720S_LINK_STATUS BIT(0) +/* TDR Configuration Register (0x1E) */ +#define DP83TG720S_TDR_CFG 0x1e +/* 1b = TDR start, 0b = No TDR */ +#define DP83TG720S_TDR_START BIT(15) +/* 1b = TDR auto on link down, 0b = Manual TDR start */ +#define DP83TG720S_CFG_TDR_AUTO_RUN BIT(14) +/* 1b = TDR done, 0b = TDR in progress */ +#define DP83TG720S_TDR_DONE BIT(1) +/* 1b = TDR fail, 0b = TDR success */ +#define DP83TG720S_TDR_FAIL BIT(0) + #define DP83TG720S_PHY_RESET 0x1f #define DP83TG720S_HW_RESET BIT(15) @@ -22,18 +36,155 @@ /* Power Mode 0 is Normal mode */ #define DP83TG720S_LPS_CFG3_PWR_MODE_0 BIT(0) +/* Open Aliance 1000BaseT1 compatible HDD.TDR Fault Status Register */ +#define DP83TG720S_TDR_FAULT_STATUS 0x30f + +/* Register 0x0301: TDR Configuration 2 */ +#define DP83TG720S_TDR_CFG2 0x301 + +/* Register 0x0303: TDR Configuration 3 */ +#define DP83TG720S_TDR_CFG3 0x303 + +/* Register 0x0304: TDR Configuration 4 */ +#define DP83TG720S_TDR_CFG4 0x304 + +/* Register 0x0405: Unknown Register */ +#define DP83TG720S_UNKNOWN_0405 0x405 + +/* Register 0x0576: TDR Master Link Down Control */ +#define DP83TG720S_TDR_MASTER_LINK_DOWN 0x576 + #define DP83TG720S_RGMII_DELAY_CTRL 0x602 /* In RGMII mode, Enable or disable the internal delay for RXD */ #define DP83TG720S_RGMII_RX_CLK_SEL BIT(1) /* In RGMII mode, Enable or disable the internal delay for TXD */ #define DP83TG720S_RGMII_TX_CLK_SEL BIT(0) +/* Register 0x083F: Unknown Register */ +#define DP83TG720S_UNKNOWN_083F 0x83f + #define DP83TG720S_SQI_REG_1 0x871 #define DP83TG720S_SQI_OUT_WORST GENMASK(7, 5) #define DP83TG720S_SQI_OUT GENMASK(3, 1) #define DP83TG720_SQI_MAX 7 +/** + * dp83tg720_cable_test_start - Start the cable test for the DP83TG720 PHY. + * @phydev: Pointer to the phy_device structure. + * + * This sequence is based on the documented procedure for the DP83TG720 PHY. + * + * Returns: 0 on success, a negative error code on failure. + */ +static int dp83tg720_cable_test_start(struct phy_device *phydev) +{ + int ret; + + /* Initialize the PHY to run the TDR test as described in the + * "DP83TG720S-Q1: Configuring for Open Alliance Specification + * Compliance (Rev. B)" application note. + * Most of the registers are not documented. Some of register names + * are guessed by comparing the register offsets with the DP83TD510E. + */ + + /* Force master link down */ + ret = phy_set_bits_mmd(phydev, MDIO_MMD_VEND2, + DP83TG720S_TDR_MASTER_LINK_DOWN, 0x0400); + if (ret) + return ret; + + ret = phy_write_mmd(phydev, MDIO_MMD_VEND2, DP83TG720S_TDR_CFG2, + 0xa008); + if (ret) + return ret; + + ret = phy_write_mmd(phydev, MDIO_MMD_VEND2, DP83TG720S_TDR_CFG3, + 0x0928); + if (ret) + return ret; + + ret = phy_write_mmd(phydev, MDIO_MMD_VEND2, DP83TG720S_TDR_CFG4, + 0x0004); + if (ret) + return ret; + + ret = phy_write_mmd(phydev, MDIO_MMD_VEND2, DP83TG720S_UNKNOWN_0405, + 0x6400); + if (ret) + return ret; + + ret = phy_write_mmd(phydev, MDIO_MMD_VEND2, DP83TG720S_UNKNOWN_083F, + 0x3003); + if (ret) + return ret; + + /* Start the TDR */ + ret = phy_set_bits_mmd(phydev, MDIO_MMD_VEND2, DP83TG720S_TDR_CFG, + DP83TG720S_TDR_START); + if (ret) + return ret; + + return 0; +} + +/** + * dp83tg720_cable_test_get_status - Get the status of the cable test for the + * DP83TG720 PHY. + * @phydev: Pointer to the phy_device structure. + * @finished: Pointer to a boolean that indicates whether the test is finished. + * + * The function sets the @finished flag to true if the test is complete. + * + * Returns: 0 on success or a negative error code on failure. + */ +static int dp83tg720_cable_test_get_status(struct phy_device *phydev, + bool *finished) +{ + int ret, stat; + + *finished = false; + + /* Read the TDR status */ + ret = phy_read_mmd(phydev, MDIO_MMD_VEND2, DP83TG720S_TDR_CFG); + if (ret < 0) + return ret; + + /* Check if the TDR test is done */ + if (!(ret & DP83TG720S_TDR_DONE)) + return 0; + + /* Check for TDR test failure */ + if (!(ret & DP83TG720S_TDR_FAIL)) { + int location; + + /* Read fault status */ + ret = phy_read_mmd(phydev, MDIO_MMD_VEND2, + DP83TG720S_TDR_FAULT_STATUS); + if (ret < 0) + return ret; + + /* Get fault type */ + stat = oa_1000bt1_get_ethtool_cable_result_code(ret); + + /* Determine fault location */ + location = oa_1000bt1_get_tdr_distance(ret); + if (location > 0) + ethnl_cable_test_fault_length(phydev, + ETHTOOL_A_CABLE_PAIR_A, + location); + } else { + /* Active link partner or other issues */ + stat = ETHTOOL_A_CABLE_RESULT_CODE_UNSPEC; + } + + *finished = true; + + ethnl_cable_test_result(phydev, ETHTOOL_A_CABLE_PAIR_A, stat); + + return phy_init_hw(phydev); +} + static int dp83tg720_config_aneg(struct phy_device *phydev) { int ret; @@ -195,12 +346,15 @@ static struct phy_driver dp83tg720_driver[] = { PHY_ID_MATCH_MODEL(DP83TG720S_PHY_ID), .name = "TI DP83TG720S", + .flags = PHY_POLL_CABLE_TEST, .config_aneg = dp83tg720_config_aneg, .read_status = dp83tg720_read_status, .get_features = genphy_c45_pma_read_ext_abilities, .config_init = dp83tg720_config_init, .get_sqi = dp83tg720_get_sqi, .get_sqi_max = dp83tg720_get_sqi_max, + .cable_test_start = dp83tg720_cable_test_start, + .cable_test_get_status = dp83tg720_cable_test_get_status, .suspend = genphy_suspend, .resume = genphy_resume, -- 2.39.2 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH net-next v3 3/3] net: phy: dp83tg720: Add cable testing support 2024-08-09 7:24 ` [PATCH net-next v3 3/3] net: phy: dp83tg720: Add cable testing support Oleksij Rempel @ 2024-08-09 17:55 ` kernel test robot 2024-08-09 19:57 ` kernel test robot 1 sibling, 0 replies; 7+ messages in thread From: kernel test robot @ 2024-08-09 17:55 UTC (permalink / raw) To: Oleksij Rempel, Andrew Lunn, Heiner Kallweit, Russell King, David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni Cc: llvm, oe-kbuild-all, netdev, Oleksij Rempel, kernel, linux-kernel Hi Oleksij, kernel test robot noticed the following build errors: [auto build test ERROR on net-next/main] url: https://github.com/intel-lab-lkp/linux/commits/Oleksij-Rempel/phy-Add-Open-Alliance-helpers-for-the-PHY-framework/20240809-172119 base: net-next/main patch link: https://lore.kernel.org/r/20240809072440.3477125-3-o.rempel%40pengutronix.de patch subject: [PATCH net-next v3 3/3] net: phy: dp83tg720: Add cable testing support config: i386-buildonly-randconfig-004-20240809 (https://download.01.org/0day-ci/archive/20240810/202408100138.gwg3Yuur-lkp@intel.com/config) compiler: clang version 18.1.5 (https://github.com/llvm/llvm-project 617a15a9eac96088ae5e9134248d8236e34b91b1) reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20240810/202408100138.gwg3Yuur-lkp@intel.com/reproduce) If you fix the issue in a separate patch/commit (i.e. not just a new version of the same patch/commit), kindly add following tags | Reported-by: kernel test robot <lkp@intel.com> | Closes: https://lore.kernel.org/oe-kbuild-all/202408100138.gwg3Yuur-lkp@intel.com/ All errors (new ones prefixed by >>): >> drivers/net/phy/open_alliance_helpers.c:34:18: error: call to undeclared function 'FIELD_GET'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration] 34 | u8 tdr_status = FIELD_GET(OA_1000BT1_HDD_TDR_STATUS_MASK, reg_value); | ^ drivers/net/phy/open_alliance_helpers.c:69:16: error: call to undeclared function 'FIELD_GET'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration] 69 | u8 dist_val = FIELD_GET(OA_1000BT1_HDD_TDR_DISTANCE_MASK, reg_value); | ^ 2 errors generated. vim +/FIELD_GET +34 drivers/net/phy/open_alliance_helpers.c f4eee3aa678aeb Oleksij Rempel 2024-08-09 21 f4eee3aa678aeb Oleksij Rempel 2024-08-09 22 /** f4eee3aa678aeb Oleksij Rempel 2024-08-09 23 * oa_1000bt1_get_ethtool_cable_result_code - Convert TDR status to ethtool f4eee3aa678aeb Oleksij Rempel 2024-08-09 24 * result code f4eee3aa678aeb Oleksij Rempel 2024-08-09 25 * @reg_value: Value read from the TDR register f4eee3aa678aeb Oleksij Rempel 2024-08-09 26 * f4eee3aa678aeb Oleksij Rempel 2024-08-09 27 * This function takes a register value from the HDD.TDR register and converts f4eee3aa678aeb Oleksij Rempel 2024-08-09 28 * the TDR status to the corresponding ethtool cable test result code. f4eee3aa678aeb Oleksij Rempel 2024-08-09 29 * f4eee3aa678aeb Oleksij Rempel 2024-08-09 30 * Return: The appropriate ethtool result code based on the TDR status f4eee3aa678aeb Oleksij Rempel 2024-08-09 31 */ f4eee3aa678aeb Oleksij Rempel 2024-08-09 32 int oa_1000bt1_get_ethtool_cable_result_code(u16 reg_value) f4eee3aa678aeb Oleksij Rempel 2024-08-09 33 { f4eee3aa678aeb Oleksij Rempel 2024-08-09 @34 u8 tdr_status = FIELD_GET(OA_1000BT1_HDD_TDR_STATUS_MASK, reg_value); f4eee3aa678aeb Oleksij Rempel 2024-08-09 35 u8 dist_val = FIELD_GET(OA_1000BT1_HDD_TDR_DISTANCE_MASK, reg_value); f4eee3aa678aeb Oleksij Rempel 2024-08-09 36 f4eee3aa678aeb Oleksij Rempel 2024-08-09 37 switch (tdr_status) { f4eee3aa678aeb Oleksij Rempel 2024-08-09 38 case OA_1000BT1_HDD_TDR_STATUS_CABLE_OK: f4eee3aa678aeb Oleksij Rempel 2024-08-09 39 return ETHTOOL_A_CABLE_RESULT_CODE_OK; f4eee3aa678aeb Oleksij Rempel 2024-08-09 40 case OA_1000BT1_HDD_TDR_STATUS_OPEN: f4eee3aa678aeb Oleksij Rempel 2024-08-09 41 return ETHTOOL_A_CABLE_RESULT_CODE_OPEN; f4eee3aa678aeb Oleksij Rempel 2024-08-09 42 case OA_1000BT1_HDD_TDR_STATUS_SHORT: f4eee3aa678aeb Oleksij Rempel 2024-08-09 43 return ETHTOOL_A_CABLE_RESULT_CODE_SAME_SHORT; f4eee3aa678aeb Oleksij Rempel 2024-08-09 44 case OA_1000BT1_HDD_TDR_STATUS_NOISE: f4eee3aa678aeb Oleksij Rempel 2024-08-09 45 return ETHTOOL_A_CABLE_RESULT_CODE_NOISE; f4eee3aa678aeb Oleksij Rempel 2024-08-09 46 default: f4eee3aa678aeb Oleksij Rempel 2024-08-09 47 if (dist_val == OA_1000BT1_HDD_TDR_DISTANCE_RESOLUTION_NOT_POSSIBLE) f4eee3aa678aeb Oleksij Rempel 2024-08-09 48 return ETHTOOL_A_CABLE_RESULT_CODE_RESOLUTION_NOT_POSSIBLE; f4eee3aa678aeb Oleksij Rempel 2024-08-09 49 return ETHTOOL_A_CABLE_RESULT_CODE_UNSPEC; f4eee3aa678aeb Oleksij Rempel 2024-08-09 50 } f4eee3aa678aeb Oleksij Rempel 2024-08-09 51 } f4eee3aa678aeb Oleksij Rempel 2024-08-09 52 EXPORT_SYMBOL_GPL(oa_1000bt1_get_ethtool_cable_result_code); f4eee3aa678aeb Oleksij Rempel 2024-08-09 53 -- 0-DAY CI Kernel Test Service https://github.com/intel/lkp-tests/wiki ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH net-next v3 3/3] net: phy: dp83tg720: Add cable testing support 2024-08-09 7:24 ` [PATCH net-next v3 3/3] net: phy: dp83tg720: Add cable testing support Oleksij Rempel 2024-08-09 17:55 ` kernel test robot @ 2024-08-09 19:57 ` kernel test robot 2024-08-10 6:16 ` Oleksij Rempel 1 sibling, 1 reply; 7+ messages in thread From: kernel test robot @ 2024-08-09 19:57 UTC (permalink / raw) To: Oleksij Rempel, Andrew Lunn, Heiner Kallweit, Russell King, David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni Cc: oe-kbuild-all, netdev, Oleksij Rempel, kernel, linux-kernel Hi Oleksij, kernel test robot noticed the following build errors: [auto build test ERROR on net-next/main] url: https://github.com/intel-lab-lkp/linux/commits/Oleksij-Rempel/phy-Add-Open-Alliance-helpers-for-the-PHY-framework/20240809-172119 base: net-next/main patch link: https://lore.kernel.org/r/20240809072440.3477125-3-o.rempel%40pengutronix.de patch subject: [PATCH net-next v3 3/3] net: phy: dp83tg720: Add cable testing support config: m68k-allmodconfig (https://download.01.org/0day-ci/archive/20240810/202408100348.U6S1jP0z-lkp@intel.com/config) compiler: m68k-linux-gcc (GCC) 14.1.0 reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20240810/202408100348.U6S1jP0z-lkp@intel.com/reproduce) If you fix the issue in a separate patch/commit (i.e. not just a new version of the same patch/commit), kindly add following tags | Reported-by: kernel test robot <lkp@intel.com> | Closes: https://lore.kernel.org/oe-kbuild-all/202408100348.U6S1jP0z-lkp@intel.com/ All errors (new ones prefixed by >>): drivers/net/phy/open_alliance_helpers.c: In function 'oa_1000bt1_get_ethtool_cable_result_code': >> drivers/net/phy/open_alliance_helpers.c:34:25: error: implicit declaration of function 'FIELD_GET' [-Wimplicit-function-declaration] 34 | u8 tdr_status = FIELD_GET(OA_1000BT1_HDD_TDR_STATUS_MASK, reg_value); | ^~~~~~~~~ vim +/FIELD_GET +34 drivers/net/phy/open_alliance_helpers.c f4eee3aa678aeb0 Oleksij Rempel 2024-08-09 21 f4eee3aa678aeb0 Oleksij Rempel 2024-08-09 22 /** f4eee3aa678aeb0 Oleksij Rempel 2024-08-09 23 * oa_1000bt1_get_ethtool_cable_result_code - Convert TDR status to ethtool f4eee3aa678aeb0 Oleksij Rempel 2024-08-09 24 * result code f4eee3aa678aeb0 Oleksij Rempel 2024-08-09 25 * @reg_value: Value read from the TDR register f4eee3aa678aeb0 Oleksij Rempel 2024-08-09 26 * f4eee3aa678aeb0 Oleksij Rempel 2024-08-09 27 * This function takes a register value from the HDD.TDR register and converts f4eee3aa678aeb0 Oleksij Rempel 2024-08-09 28 * the TDR status to the corresponding ethtool cable test result code. f4eee3aa678aeb0 Oleksij Rempel 2024-08-09 29 * f4eee3aa678aeb0 Oleksij Rempel 2024-08-09 30 * Return: The appropriate ethtool result code based on the TDR status f4eee3aa678aeb0 Oleksij Rempel 2024-08-09 31 */ f4eee3aa678aeb0 Oleksij Rempel 2024-08-09 32 int oa_1000bt1_get_ethtool_cable_result_code(u16 reg_value) f4eee3aa678aeb0 Oleksij Rempel 2024-08-09 33 { f4eee3aa678aeb0 Oleksij Rempel 2024-08-09 @34 u8 tdr_status = FIELD_GET(OA_1000BT1_HDD_TDR_STATUS_MASK, reg_value); f4eee3aa678aeb0 Oleksij Rempel 2024-08-09 35 u8 dist_val = FIELD_GET(OA_1000BT1_HDD_TDR_DISTANCE_MASK, reg_value); f4eee3aa678aeb0 Oleksij Rempel 2024-08-09 36 f4eee3aa678aeb0 Oleksij Rempel 2024-08-09 37 switch (tdr_status) { f4eee3aa678aeb0 Oleksij Rempel 2024-08-09 38 case OA_1000BT1_HDD_TDR_STATUS_CABLE_OK: f4eee3aa678aeb0 Oleksij Rempel 2024-08-09 39 return ETHTOOL_A_CABLE_RESULT_CODE_OK; f4eee3aa678aeb0 Oleksij Rempel 2024-08-09 40 case OA_1000BT1_HDD_TDR_STATUS_OPEN: f4eee3aa678aeb0 Oleksij Rempel 2024-08-09 41 return ETHTOOL_A_CABLE_RESULT_CODE_OPEN; f4eee3aa678aeb0 Oleksij Rempel 2024-08-09 42 case OA_1000BT1_HDD_TDR_STATUS_SHORT: f4eee3aa678aeb0 Oleksij Rempel 2024-08-09 43 return ETHTOOL_A_CABLE_RESULT_CODE_SAME_SHORT; f4eee3aa678aeb0 Oleksij Rempel 2024-08-09 44 case OA_1000BT1_HDD_TDR_STATUS_NOISE: f4eee3aa678aeb0 Oleksij Rempel 2024-08-09 45 return ETHTOOL_A_CABLE_RESULT_CODE_NOISE; f4eee3aa678aeb0 Oleksij Rempel 2024-08-09 46 default: f4eee3aa678aeb0 Oleksij Rempel 2024-08-09 47 if (dist_val == OA_1000BT1_HDD_TDR_DISTANCE_RESOLUTION_NOT_POSSIBLE) f4eee3aa678aeb0 Oleksij Rempel 2024-08-09 48 return ETHTOOL_A_CABLE_RESULT_CODE_RESOLUTION_NOT_POSSIBLE; f4eee3aa678aeb0 Oleksij Rempel 2024-08-09 49 return ETHTOOL_A_CABLE_RESULT_CODE_UNSPEC; f4eee3aa678aeb0 Oleksij Rempel 2024-08-09 50 } f4eee3aa678aeb0 Oleksij Rempel 2024-08-09 51 } f4eee3aa678aeb0 Oleksij Rempel 2024-08-09 52 EXPORT_SYMBOL_GPL(oa_1000bt1_get_ethtool_cable_result_code); f4eee3aa678aeb0 Oleksij Rempel 2024-08-09 53 -- 0-DAY CI Kernel Test Service https://github.com/intel/lkp-tests/wiki ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH net-next v3 3/3] net: phy: dp83tg720: Add cable testing support 2024-08-09 19:57 ` kernel test robot @ 2024-08-10 6:16 ` Oleksij Rempel 2024-08-10 17:22 ` Andrew Lunn 0 siblings, 1 reply; 7+ messages in thread From: Oleksij Rempel @ 2024-08-10 6:16 UTC (permalink / raw) To: kernel test robot Cc: Andrew Lunn, Heiner Kallweit, Russell King, David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni, netdev, linux-kernel, kernel, oe-kbuild-all On Sat, Aug 10, 2024 at 03:57:35AM +0800, kernel test robot wrote: > Hi Oleksij, > > kernel test robot noticed the following build errors: > > [auto build test ERROR on net-next/main] > > url: https://github.com/intel-lab-lkp/linux/commits/Oleksij-Rempel/phy-Add-Open-Alliance-helpers-for-the-PHY-framework/20240809-172119 > base: net-next/main > patch link: https://lore.kernel.org/r/20240809072440.3477125-3-o.rempel%40pengutronix.de > patch subject: [PATCH net-next v3 3/3] net: phy: dp83tg720: Add cable testing support > config: m68k-allmodconfig (https://download.01.org/0day-ci/archive/20240810/202408100348.U6S1jP0z-lkp@intel.com/config) > compiler: m68k-linux-gcc (GCC) 14.1.0 > reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20240810/202408100348.U6S1jP0z-lkp@intel.com/reproduce) > > If you fix the issue in a separate patch/commit (i.e. not just a new version of > the same patch/commit), kindly add following tags > | Reported-by: kernel test robot <lkp@intel.com> > | Closes: https://lore.kernel.org/oe-kbuild-all/202408100348.U6S1jP0z-lkp@intel.com/ > > All errors (new ones prefixed by >>): > > drivers/net/phy/open_alliance_helpers.c: In function 'oa_1000bt1_get_ethtool_cable_result_code': > >> drivers/net/phy/open_alliance_helpers.c:34:25: error: implicit declaration of function 'FIELD_GET' [-Wimplicit-function-declaration] > 34 | u8 tdr_status = FIELD_GET(OA_1000BT1_HDD_TDR_STATUS_MASK, reg_value); > | ^~~~~~~~~ Huh.. why it builds on arm? -- Pengutronix e.K. | | Steuerwalder Str. 21 | http://www.pengutronix.de/ | 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 | Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 | ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH net-next v3 3/3] net: phy: dp83tg720: Add cable testing support 2024-08-10 6:16 ` Oleksij Rempel @ 2024-08-10 17:22 ` Andrew Lunn 0 siblings, 0 replies; 7+ messages in thread From: Andrew Lunn @ 2024-08-10 17:22 UTC (permalink / raw) To: Oleksij Rempel Cc: kernel test robot, Heiner Kallweit, Russell King, David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni, netdev, linux-kernel, kernel, oe-kbuild-all On Sat, Aug 10, 2024 at 08:16:48AM +0200, Oleksij Rempel wrote: > On Sat, Aug 10, 2024 at 03:57:35AM +0800, kernel test robot wrote: > > Hi Oleksij, > > > > kernel test robot noticed the following build errors: > > > > [auto build test ERROR on net-next/main] > > > > url: https://github.com/intel-lab-lkp/linux/commits/Oleksij-Rempel/phy-Add-Open-Alliance-helpers-for-the-PHY-framework/20240809-172119 > > base: net-next/main > > patch link: https://lore.kernel.org/r/20240809072440.3477125-3-o.rempel%40pengutronix.de > > patch subject: [PATCH net-next v3 3/3] net: phy: dp83tg720: Add cable testing support > > config: m68k-allmodconfig (https://download.01.org/0day-ci/archive/20240810/202408100348.U6S1jP0z-lkp@intel.com/config) > > compiler: m68k-linux-gcc (GCC) 14.1.0 > > reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20240810/202408100348.U6S1jP0z-lkp@intel.com/reproduce) > > > > If you fix the issue in a separate patch/commit (i.e. not just a new version of > > the same patch/commit), kindly add following tags > > | Reported-by: kernel test robot <lkp@intel.com> > > | Closes: https://lore.kernel.org/oe-kbuild-all/202408100348.U6S1jP0z-lkp@intel.com/ > > > > All errors (new ones prefixed by >>): > > > > drivers/net/phy/open_alliance_helpers.c: In function 'oa_1000bt1_get_ethtool_cable_result_code': > > >> drivers/net/phy/open_alliance_helpers.c:34:25: error: implicit declaration of function 'FIELD_GET' [-Wimplicit-function-declaration] > > 34 | u8 tdr_status = FIELD_GET(OA_1000BT1_HDD_TDR_STATUS_MASK, reg_value); > > | ^~~~~~~~~ > > Huh.. why it builds on arm? There has been a couple of reports like this recently. I suspect there is a some architecture header pulling in the needed header, and m68k does not. You might want to compare drivers/net/phy/open_alliance_helpers.i for arm and m68k. Andrew ^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2024-08-10 17:22 UTC | newest] Thread overview: 7+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2024-08-09 7:24 [PATCH net-next v3 1/3] ethtool: Add new result codes for TDR diagnostics Oleksij Rempel 2024-08-09 7:24 ` [PATCH net-next v3 2/3] phy: Add Open Alliance helpers for the PHY framework Oleksij Rempel 2024-08-09 7:24 ` [PATCH net-next v3 3/3] net: phy: dp83tg720: Add cable testing support Oleksij Rempel 2024-08-09 17:55 ` kernel test robot 2024-08-09 19:57 ` kernel test robot 2024-08-10 6:16 ` Oleksij Rempel 2024-08-10 17:22 ` Andrew Lunn
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).