From patchwork Tue Feb 11 08:33:47 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dimitri Fedrau via B4 Relay X-Patchwork-Id: 13969805 X-Patchwork-Delegate: kuba@kernel.org Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id DE39F1F03C4; Tue, 11 Feb 2025 08:33:55 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739262836; cv=none; b=eauIfznRHemVLTsO4PTICN1yBk59KoTV+fT5DPpqLUnV9HljxuVRiz8oC28fXrYf+21ryPo5x9/C0e0mDZZREsXVD3/XTnRRcTB9upbU/PWM3zZ2Xu5fP0+2FzawFMKOSo8lzdKQbgw4ixTGHPr5LmKNXTvZlRzI/9VVrx0DBN4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739262836; c=relaxed/simple; bh=Tgg4Lnwrg8jjds9vmzK1DKGROT5TwIeiOvy361I2DMo=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=CMi6Nh/jVoDN3cN8JOn17dvkOnC5qhTID5j3TYbCA+ZLBaQtkpMJJ2hE2RiDfKQUekiGiCCj6uXELVlm0SNiCYD0YZkuBFHqb5ossl3aJF503TdCusGGs6h3UfWQULO2Ugd/bNhRtyV2HgjFmYnB197acJZ0RPLGbMNaWdaEE6o= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=X1nzHf+9; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="X1nzHf+9" Received: by smtp.kernel.org (Postfix) with ESMTPS id 6572CC4CEE6; Tue, 11 Feb 2025 08:33:55 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1739262835; bh=Tgg4Lnwrg8jjds9vmzK1DKGROT5TwIeiOvy361I2DMo=; h=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From; b=X1nzHf+9wlPFe4GjrIcKvaJ8XEZ2IUSsnlLDLQ9nrWZlG6yETatZ9uQLLREVHhNwJ Jx49e1qMu/AAiBxWtHwGRws2mSU3hierfqpTT6513QBp+CBZYnMfxV5Gak9gYHMi2M 2z5ryeSwH6bpdvp6GsRQ3MaQyIOJAXFF/xkuT34RWF3L6GjIPxOQVWre64B8xVx4kT TWhDPW3C3cm6+FzoKo/cuu7jQ1Ee+jh1RXIqGvUtuGsudf8bCcmjbG+h/RIMurt1wF OOhMB3F+OiO2vbOfw28XiwQkPTQ9YV1gREqEbzmAMGzUWGcnXCL6F2HN0oM5bC+nHb nZjHMsSVulSLw== Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id 1E31DC0219D; Tue, 11 Feb 2025 08:33:55 +0000 (UTC) From: Dimitri Fedrau via B4 Relay Date: Tue, 11 Feb 2025 09:33:47 +0100 Subject: [PATCH net-next v4 1/3] dt-bindings: net: ethernet-phy: add property tx-amplitude-100base-tx-percent Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20250211-dp83822-tx-swing-v4-1-1e8ebd71ad54@liebherr.com> References: <20250211-dp83822-tx-swing-v4-0-1e8ebd71ad54@liebherr.com> In-Reply-To: <20250211-dp83822-tx-swing-v4-0-1e8ebd71ad54@liebherr.com> To: Andrew Lunn , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Andrew Davis , Andrew Lunn , Heiner Kallweit , Russell King , Florian Fainelli Cc: netdev@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Dimitri Fedrau , Dimitri Fedrau X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1739262831; l=1194; i=dimitri.fedrau@liebherr.com; s=20241202; h=from:subject:message-id; bh=ro3XaEK9ivn2YdVF9jgpWJDrlBMtuG5ywyyC+eUKCKc=; b=etb1fP538cRpuDsLZ2zaY0RXA3Z6765GKmhV970cPgR9jTLDR+O1GUqJwoSz32b/p2cMSzwg4 55SnxKgerOXDHsVtFrdaMsfVY5pavMYMwLj+zoZXmdd/y1XVZH+JFvV X-Developer-Key: i=dimitri.fedrau@liebherr.com; a=ed25519; pk=rT653x09JSQvotxIqQl4/XiI4AOiBZrdOGvxDUbb5m8= X-Endpoint-Received: by B4 Relay for dimitri.fedrau@liebherr.com/20241202 with auth_id=290 X-Original-From: Dimitri Fedrau Reply-To: dimitri.fedrau@liebherr.com X-Patchwork-Delegate: kuba@kernel.org From: Dimitri Fedrau Add property tx-amplitude-100base-tx-percent in the device tree bindings for configuring the tx amplitude of 100BASE-TX PHYs. Modifying it can be necessary to compensate losses on the PCB and connector, so the voltages measured on the RJ45 pins are conforming. Signed-off-by: Dimitri Fedrau Acked-by: Conor Dooley --- Documentation/devicetree/bindings/net/ethernet-phy.yaml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Documentation/devicetree/bindings/net/ethernet-phy.yaml b/Documentation/devicetree/bindings/net/ethernet-phy.yaml index 2c71454ae8e362e7032e44712949e12da6826070..e0c001f1690c1eb9b0386438f2d5558fd8c94eca 100644 --- a/Documentation/devicetree/bindings/net/ethernet-phy.yaml +++ b/Documentation/devicetree/bindings/net/ethernet-phy.yaml @@ -232,6 +232,12 @@ properties: PHY's that have configurable TX internal delays. If this property is present then the PHY applies the TX delay. + tx-amplitude-100base-tx-percent: + description: + Transmit amplitude gain applied for 100BASE-TX. When omitted, the PHYs + default will be left as is. + default: 100 + leds: type: object From patchwork Tue Feb 11 08:33:48 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dimitri Fedrau via B4 Relay X-Patchwork-Id: 13969806 X-Patchwork-Delegate: kuba@kernel.org Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 29A1F1F03D4; Tue, 11 Feb 2025 08:33:56 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739262836; cv=none; b=XzI9SZEpyjEQxFUoQVwyArqheNo7uPPHi6vrNhwbcu5nVwbHTu490lAEBSmdjU7tloN+YAHTtVblOoUE9hzty6L/LKsVKGSzIdG3DiyRybJEFoFsJhIThCJzjoxzCLo/FRJPZdUiJgwZbhWKkA3sb9Yd5AduHThkpNt3hU74Cn4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739262836; c=relaxed/simple; bh=dqTy84ZzsPlhQ7gRPsU3FpoArxfjAGj7SYVPEm9GMR4=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=niWbuTD+zDuhQsIv+2hIuo3qOgYdaVmJt6si+sL7NReG5n2d3xXvlOKy6SQBywhjk1fQXEzRc047gvF9Q6XlNqXAtDsVJahHLX0FKuq3mrJqmiYfL/FzF5mTIU4r0Ts8At1Ai0VZpWwl3ZFds7OlWAJgLih+4ekB6YFhG91uEo0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=K/Mp1Xrw; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="K/Mp1Xrw" Received: by smtp.kernel.org (Postfix) with ESMTPS id E2E68C4CEE8; Tue, 11 Feb 2025 08:33:55 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1739262835; bh=dqTy84ZzsPlhQ7gRPsU3FpoArxfjAGj7SYVPEm9GMR4=; h=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From; b=K/Mp1Xrw5nwVVFvFoqF5f65OblTmY3+CTQLe+lKp0Fa8hyT3p+sA9iJJUWPcYjduC B7QQT9pAig0IZJBeyuuibU/PLzPu95YxhO6cj5eTG4iGJxcCGAIS4Ts7KmDSBzODIG ibJqjQXdG31aMd1Ojiqdd7ebhX/4h8bzcWouYm8k6CQS8le8hC2hqEh8GsSAtWkV++ X0L4cwb3S5nC0bhkgI0mobtM5nxvOIRImn9CbFHdADtE+qW3Tk07TCqVJ7SsbTtKXi yLcCkevbZdhn6ag0u6BCUzDL1nUa3myTWlJmgBgO6/EacC9Sl47Qb3aMHR3b5oPIn1 Wq5OCk3Vl4gpg== Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id B45A8C0219D; Tue, 11 Feb 2025 08:33:55 +0000 (UTC) From: Dimitri Fedrau via B4 Relay Date: Tue, 11 Feb 2025 09:33:48 +0100 Subject: [PATCH net-next v4 2/3] net: phy: Add helper for getting tx amplitude gain Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20250211-dp83822-tx-swing-v4-2-1e8ebd71ad54@liebherr.com> References: <20250211-dp83822-tx-swing-v4-0-1e8ebd71ad54@liebherr.com> In-Reply-To: <20250211-dp83822-tx-swing-v4-0-1e8ebd71ad54@liebherr.com> To: Andrew Lunn , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Andrew Davis , Andrew Lunn , Heiner Kallweit , Russell King , Florian Fainelli Cc: netdev@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Dimitri Fedrau , Dimitri Fedrau X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1739262831; l=4168; i=dimitri.fedrau@liebherr.com; s=20241202; h=from:subject:message-id; bh=rkHlk2CzqTSrJQGoCX2wMldHNiCaKztaZdt09yvcqgc=; b=VQd9j96AQ8kCorAnx+eg2QTWTonJS6mQjcf2v8Tmb4zGeSpUidKooO25OiaBB0mR7o8Z/sCjP ul6iejQkwIiCjY0pVRMCFDmvf2B76U1H60PNiB4DhhY7ab6UClLCbbA X-Developer-Key: i=dimitri.fedrau@liebherr.com; a=ed25519; pk=rT653x09JSQvotxIqQl4/XiI4AOiBZrdOGvxDUbb5m8= X-Endpoint-Received: by B4 Relay for dimitri.fedrau@liebherr.com/20241202 with auth_id=290 X-Original-From: Dimitri Fedrau Reply-To: dimitri.fedrau@liebherr.com X-Patchwork-Delegate: kuba@kernel.org From: Dimitri Fedrau Add helper which returns the tx amplitude gain defined in device tree. Modifying it can be necessary to compensate losses on the PCB and connector, so the voltages measured on the RJ45 pins are conforming. Signed-off-by: Dimitri Fedrau --- drivers/net/phy/phy_device.c | 44 ++++++++++++++++++++++++++------------------ include/linux/phy.h | 4 ++++ 2 files changed, 30 insertions(+), 18 deletions(-) diff --git a/drivers/net/phy/phy_device.c b/drivers/net/phy/phy_device.c index 46713d27412b76077d2e51e29b8d84f4f8f0a86d..25ee085816b711c8a90ebf93001d892488935575 100644 --- a/drivers/net/phy/phy_device.c +++ b/drivers/net/phy/phy_device.c @@ -3096,19 +3096,12 @@ void phy_get_pause(struct phy_device *phydev, bool *tx_pause, bool *rx_pause) EXPORT_SYMBOL(phy_get_pause); #if IS_ENABLED(CONFIG_OF_MDIO) -static int phy_get_int_delay_property(struct device *dev, const char *name) +static int phy_get_u32_property(struct device *dev, const char *name, u32 *val) { - s32 int_delay; - int ret; - - ret = device_property_read_u32(dev, name, &int_delay); - if (ret) - return ret; - - return int_delay; + return device_property_read_u32(dev, name, val); } #else -static int phy_get_int_delay_property(struct device *dev, const char *name) +static int phy_get_u32_property(struct device *dev, const char *name, u32 *val) { return -EINVAL; } @@ -3133,12 +3126,12 @@ static int phy_get_int_delay_property(struct device *dev, const char *name) s32 phy_get_internal_delay(struct phy_device *phydev, struct device *dev, const int *delay_values, int size, bool is_rx) { - s32 delay; - int i; + u32 delay; + int i, ret; if (is_rx) { - delay = phy_get_int_delay_property(dev, "rx-internal-delay-ps"); - if (delay < 0 && size == 0) { + ret = phy_get_u32_property(dev, "rx-internal-delay-ps", &delay); + if (ret < 0 && size == 0) { if (phydev->interface == PHY_INTERFACE_MODE_RGMII_ID || phydev->interface == PHY_INTERFACE_MODE_RGMII_RXID) return 1; @@ -3147,8 +3140,8 @@ s32 phy_get_internal_delay(struct phy_device *phydev, struct device *dev, } } else { - delay = phy_get_int_delay_property(dev, "tx-internal-delay-ps"); - if (delay < 0 && size == 0) { + ret = phy_get_u32_property(dev, "tx-internal-delay-ps", &delay); + if (ret < 0 && size == 0) { if (phydev->interface == PHY_INTERFACE_MODE_RGMII_ID || phydev->interface == PHY_INTERFACE_MODE_RGMII_TXID) return 1; @@ -3157,8 +3150,8 @@ s32 phy_get_internal_delay(struct phy_device *phydev, struct device *dev, } } - if (delay < 0) - return delay; + if (ret < 0) + return ret; if (size == 0) return delay; @@ -3193,6 +3186,21 @@ s32 phy_get_internal_delay(struct phy_device *phydev, struct device *dev, } EXPORT_SYMBOL(phy_get_internal_delay); +int phy_get_tx_amplitude_gain(struct phy_device *phydev, struct device *dev, + enum ethtool_link_mode_bit_indices linkmode, + u32 *val) +{ + switch (linkmode) { + case ETHTOOL_LINK_MODE_100baseT_Full_BIT: + return phy_get_u32_property(dev, + "tx-amplitude-100base-tx-percent", + val); + default: + return -EINVAL; + } +} +EXPORT_SYMBOL(phy_get_tx_amplitude_gain); + static int phy_led_set_brightness(struct led_classdev *led_cdev, enum led_brightness value) { diff --git a/include/linux/phy.h b/include/linux/phy.h index 19f076a71f9462cd37588a5da240a1d54df0fe0f..7c9da26145d30e6659bf6c664e77a63b5d668a5c 100644 --- a/include/linux/phy.h +++ b/include/linux/phy.h @@ -2114,6 +2114,10 @@ void phy_get_pause(struct phy_device *phydev, bool *tx_pause, bool *rx_pause); s32 phy_get_internal_delay(struct phy_device *phydev, struct device *dev, const int *delay_values, int size, bool is_rx); +int phy_get_tx_amplitude_gain(struct phy_device *phydev, struct device *dev, + enum ethtool_link_mode_bit_indices linkmode, + u32 *val); + void phy_resolve_pause(unsigned long *local_adv, unsigned long *partner_adv, bool *tx_pause, bool *rx_pause); From patchwork Tue Feb 11 08:33:49 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dimitri Fedrau via B4 Relay X-Patchwork-Id: 13969807 X-Patchwork-Delegate: kuba@kernel.org Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5A5161F0E48; Tue, 11 Feb 2025 08:33:56 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739262837; cv=none; b=ZXFRiCarLZnlhruDDAWH74JwU/NSXdc7zSr1TM6Kr4x0ENDguSUu+lePxgTPa0U9OZxXHOLgB+ZQo7NnEGlGT+qdlV6vqUrEvMQr/ZSLApS4+8OttVDWkjjSwEEgeDh1dz4UBk2m8SvqZZomySNUDUOjPf9KXm390xytKSgj4Q0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739262837; c=relaxed/simple; bh=OoAMzDnzmRmO0ZesIeeusKyjpaxqRVifD0eRg6O/C+c=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=C5jx7PsFakpLdB4mcU+4icw6OcvPuctj8guKH+0n82n96Oecx3KWxX55Z8ax7xsJ3DF3k4/GbvZL4qCRjq+I7f6PMoJTXCii8CjKZG8I/Nzjql+UeeTt5XzOf/2rm0IHOVY6BrN898ELijXPHBrJ0Pv9a3Br33MCJyMbwIC+wCY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=L5rxFpor; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="L5rxFpor" Received: by smtp.kernel.org (Postfix) with ESMTPS id AB421C4CEFB; Tue, 11 Feb 2025 08:33:56 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1739262836; bh=OoAMzDnzmRmO0ZesIeeusKyjpaxqRVifD0eRg6O/C+c=; h=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From; b=L5rxFporFUw+vJQySmHodnelJKyCv/ibXsq1JVmxQYWiVRetIDX0gyxnNS92AveFF N47TrkfRhBOvhiTZd2CxJYWLbxpwV0X6VaZiCexKXjg8dQ2U/umP+pKJCJSneaxHex oicF1ulDLxKTPOzD0D0Jbd9nZXK0PLC3yu7pBlZnYPiB2goA5yFcHwEM7zNNs7ou0I zj1xL4DWqDaxU2UcmuXTk7HuD36FwMmPqfqM5MwfzJx6oDezjQaJpTzd16OYhwljPl 3/sHT7sSEX1KbKzqQOQqlYn7gc7g+GeO91zMmmTQUmcBerymikavoauzR4gc9YoHQi XzbtVVzghEwMw== Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id 734F6C0219D; Tue, 11 Feb 2025 08:33:56 +0000 (UTC) From: Dimitri Fedrau via B4 Relay Date: Tue, 11 Feb 2025 09:33:49 +0100 Subject: [PATCH net-next v4 3/3] net: phy: dp83822: Add support for changing the transmit amplitude voltage Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20250211-dp83822-tx-swing-v4-3-1e8ebd71ad54@liebherr.com> References: <20250211-dp83822-tx-swing-v4-0-1e8ebd71ad54@liebherr.com> In-Reply-To: <20250211-dp83822-tx-swing-v4-0-1e8ebd71ad54@liebherr.com> To: Andrew Lunn , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Andrew Davis , Andrew Lunn , Heiner Kallweit , Russell King , Florian Fainelli Cc: netdev@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Dimitri Fedrau , Dimitri Fedrau X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1739262831; l=3488; i=dimitri.fedrau@liebherr.com; s=20241202; h=from:subject:message-id; bh=Or6PDXKPMq4kk1AHxpqPQpxSNSkTyzooFMkd9jkPUKk=; b=xYqKd/7Ffvi2j2LFH5r9G4bvuHSZ6ADPQYa22iDmjbpIGIpdGaJhk3eEVm2gwfoG+gP+0BbPC XRcleH+EAYGCqstGUpWWGQzFdStLmZHcLfnnK/MNwqEHJaKKLg3V10a X-Developer-Key: i=dimitri.fedrau@liebherr.com; a=ed25519; pk=rT653x09JSQvotxIqQl4/XiI4AOiBZrdOGvxDUbb5m8= X-Endpoint-Received: by B4 Relay for dimitri.fedrau@liebherr.com/20241202 with auth_id=290 X-Original-From: Dimitri Fedrau Reply-To: dimitri.fedrau@liebherr.com X-Patchwork-Delegate: kuba@kernel.org From: Dimitri Fedrau Add support for changing the transmit amplitude voltage in 100BASE-TX mode. Modifying it can be necessary to compensate losses on the PCB and connector, so the voltages measured on the RJ45 pins are conforming. Signed-off-by: Dimitri Fedrau --- drivers/net/phy/dp83822.c | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/drivers/net/phy/dp83822.c b/drivers/net/phy/dp83822.c index 6599feca1967d705331d6e354205a2485ea962f2..3662f3905d5ade8ad933608fcaeabb714a588418 100644 --- a/drivers/net/phy/dp83822.c +++ b/drivers/net/phy/dp83822.c @@ -31,6 +31,7 @@ #define MII_DP83822_RCSR 0x17 #define MII_DP83822_RESET_CTRL 0x1f #define MII_DP83822_MLEDCR 0x25 +#define MII_DP83822_LDCTRL 0x403 #define MII_DP83822_LEDCFG1 0x460 #define MII_DP83822_IOCTRL1 0x462 #define MII_DP83822_IOCTRL2 0x463 @@ -123,6 +124,9 @@ #define DP83822_IOCTRL1_GPIO1_CTRL GENMASK(2, 0) #define DP83822_IOCTRL1_GPIO1_CTRL_LED_1 BIT(0) +/* LDCTRL bits */ +#define DP83822_100BASE_TX_LINE_DRIVER_SWING GENMASK(7, 4) + /* IOCTRL2 bits */ #define DP83822_IOCTRL2_GPIO2_CLK_SRC GENMASK(6, 4) #define DP83822_IOCTRL2_GPIO2_CTRL GENMASK(2, 0) @@ -197,6 +201,7 @@ struct dp83822_private { bool set_gpio2_clk_out; u32 gpio2_clk_out; bool led_pin_enable[DP83822_MAX_LED_PINS]; + int tx_amplitude_100base_tx_index; }; static int dp83822_config_wol(struct phy_device *phydev, @@ -522,6 +527,12 @@ static int dp83822_config_init(struct phy_device *phydev) FIELD_PREP(DP83822_IOCTRL2_GPIO2_CLK_SRC, dp83822->gpio2_clk_out)); + if (dp83822->tx_amplitude_100base_tx_index >= 0) + phy_modify_mmd(phydev, MDIO_MMD_VEND2, MII_DP83822_LDCTRL, + DP83822_100BASE_TX_LINE_DRIVER_SWING, + FIELD_PREP(DP83822_100BASE_TX_LINE_DRIVER_SWING, + dp83822->tx_amplitude_100base_tx_index)); + err = dp83822_config_init_leds(phydev); if (err) return err; @@ -720,6 +731,11 @@ static int dp83822_phy_reset(struct phy_device *phydev) } #ifdef CONFIG_OF_MDIO +static const u32 tx_amplitude_100base_tx_gain[] = { + 80, 82, 83, 85, 87, 88, 90, 92, + 93, 95, 97, 98, 100, 102, 103, 105, +}; + static int dp83822_of_init_leds(struct phy_device *phydev) { struct device_node *node = phydev->mdio.dev.of_node; @@ -780,6 +796,8 @@ static int dp83822_of_init(struct phy_device *phydev) struct dp83822_private *dp83822 = phydev->priv; struct device *dev = &phydev->mdio.dev; const char *of_val; + int i, ret; + u32 val; /* Signal detection for the PHY is only enabled if the FX_EN and the * SD_EN pins are strapped. Signal detection can only enabled if FX_EN @@ -815,6 +833,26 @@ static int dp83822_of_init(struct phy_device *phydev) dp83822->set_gpio2_clk_out = true; } + dp83822->tx_amplitude_100base_tx_index = -1; + ret = phy_get_tx_amplitude_gain(phydev, dev, + ETHTOOL_LINK_MODE_100baseT_Full_BIT, + &val); + if (!ret) { + for (i = 0; i < ARRAY_SIZE(tx_amplitude_100base_tx_gain); i++) { + if (tx_amplitude_100base_tx_gain[i] == val) { + dp83822->tx_amplitude_100base_tx_index = i; + break; + } + } + + if (dp83822->tx_amplitude_100base_tx_index < 0) { + phydev_err(phydev, + "Invalid value for tx-amplitude-100base-tx-percent property (%u)\n", + val); + return -EINVAL; + } + } + return dp83822_of_init_leds(phydev); }