From 5b4131dfe866e0e8e4ef27b4dd16d218b1790dbf Mon Sep 17 00:00:00 2001 From: Daniel Golle Date: Tue, 17 Sep 2024 17:29:20 +0100 Subject: [PATCH] generic: 6.6: backport pending fix for Aquantia PHY LEDs The 'active-low' property was not applied correctly and two fixes are required to make inverted LEDs work as expected. Signed-off-by: Daniel Golle --- ...hy-aquantia-enable-AQR112-and-AQR412.patch | 4 +- ...ntia-add-PHY_IDs-for-AQR112-variants.patch | 4 +- ...-aquantia-fix-setting-active_low-bit.patch | 55 ++++++++++++++ ...-applying-active_low-bit-after-reset.patch | 72 +++++++++++++++++++ 4 files changed, 131 insertions(+), 4 deletions(-) create mode 100644 target/linux/generic/pending-6.6/750-net-phy-aquantia-fix-setting-active_low-bit.patch create mode 100644 target/linux/generic/pending-6.6/751-net-phy-aquantia-fix-applying-active_low-bit-after-reset.patch diff --git a/target/linux/generic/hack-6.6/722-net-phy-aquantia-enable-AQR112-and-AQR412.patch b/target/linux/generic/hack-6.6/722-net-phy-aquantia-enable-AQR112-and-AQR412.patch index dee901fbe334..cba05f4bbcd7 100644 --- a/target/linux/generic/hack-6.6/722-net-phy-aquantia-enable-AQR112-and-AQR412.patch +++ b/target/linux/generic/hack-6.6/722-net-phy-aquantia-enable-AQR112-and-AQR412.patch @@ -97,7 +97,7 @@ Signed-off-by: Alex Marginean static int aqr_config_intr(struct phy_device *phydev) { bool en = phydev->interrupts == PHY_INTERRUPT_ENABLED; -@@ -816,7 +884,7 @@ static struct phy_driver aqr_driver[] = +@@ -815,7 +883,7 @@ static struct phy_driver aqr_driver[] = PHY_ID_MATCH_MODEL(PHY_ID_AQR112), .name = "Aquantia AQR112", .probe = aqr107_probe, @@ -106,7 +106,7 @@ Signed-off-by: Alex Marginean .config_intr = aqr_config_intr, .handle_interrupt = aqr_handle_interrupt, .get_tunable = aqr107_get_tunable, -@@ -839,7 +907,7 @@ static struct phy_driver aqr_driver[] = +@@ -838,7 +906,7 @@ static struct phy_driver aqr_driver[] = PHY_ID_MATCH_MODEL(PHY_ID_AQR412), .name = "Aquantia AQR412", .probe = aqr107_probe, diff --git a/target/linux/generic/hack-6.6/725-net-phy-aquantia-add-PHY_IDs-for-AQR112-variants.patch b/target/linux/generic/hack-6.6/725-net-phy-aquantia-add-PHY_IDs-for-AQR112-variants.patch index 075b0fc8e29d..78ba501145db 100644 --- a/target/linux/generic/hack-6.6/725-net-phy-aquantia-add-PHY_IDs-for-AQR112-variants.patch +++ b/target/linux/generic/hack-6.6/725-net-phy-aquantia-add-PHY_IDs-for-AQR112-variants.patch @@ -21,7 +21,7 @@ Signed-off-by: Daniel Golle #define MDIO_PHYXS_VEND_IF_STATUS 0xe812 #define MDIO_PHYXS_VEND_IF_STATUS_TYPE_MASK GENMASK(7, 3) -@@ -1023,6 +1025,30 @@ static struct phy_driver aqr_driver[] = +@@ -1022,6 +1024,30 @@ static struct phy_driver aqr_driver[] = .led_hw_control_get = aqr_phy_led_hw_control_get, .led_polarity_set = aqr_phy_led_polarity_set, }, @@ -52,7 +52,7 @@ Signed-off-by: Daniel Golle }; module_phy_driver(aqr_driver); -@@ -1043,6 +1069,8 @@ static struct mdio_device_id __maybe_unu +@@ -1042,6 +1068,8 @@ static struct mdio_device_id __maybe_unu { PHY_ID_MATCH_MODEL(PHY_ID_AQR113C) }, { PHY_ID_MATCH_MODEL(PHY_ID_AQR114C) }, { PHY_ID_MATCH_MODEL(PHY_ID_AQR813) }, diff --git a/target/linux/generic/pending-6.6/750-net-phy-aquantia-fix-setting-active_low-bit.patch b/target/linux/generic/pending-6.6/750-net-phy-aquantia-fix-setting-active_low-bit.patch new file mode 100644 index 000000000000..6072e02fd426 --- /dev/null +++ b/target/linux/generic/pending-6.6/750-net-phy-aquantia-fix-setting-active_low-bit.patch @@ -0,0 +1,55 @@ +From patchwork Tue Sep 17 13:49:40 2024 +Content-Type: text/plain; charset="utf-8" +MIME-Version: 1.0 +Content-Transfer-Encoding: 7bit +X-Patchwork-Submitter: Daniel Golle +X-Patchwork-Id: 13806176 +X-Patchwork-Delegate: kuba@kernel.org +Date: Tue, 17 Sep 2024 14:49:40 +0100 +From: Daniel Golle +To: Andrew Lunn , Heiner Kallweit , + Russell King , + "David S. Miller" , + Eric Dumazet , + Jakub Kicinski , Paolo Abeni , + Daniel Golle , + Christian Marangi , + Bartosz Golaszewski , + Robert Marko , + Russell King , netdev@vger.kernel.org, + linux-kernel@vger.kernel.org +Subject: [PATCH net 1/2] net: phy: aquantia: fix setting active_low bit +Message-ID: + +Precedence: bulk +X-Mailing-List: netdev@vger.kernel.org +List-Id: +List-Subscribe: +List-Unsubscribe: +MIME-Version: 1.0 +Content-Disposition: inline +X-Patchwork-Delegate: kuba@kernel.org + +phy_modify_mmd was used wrongly in aqr_phy_led_active_low_set() resulting +in a no-op instead of setting the VEND1_GLOBAL_LED_DRIVE_VDD bit. +Correctly set VEND1_GLOBAL_LED_DRIVE_VDD bit. + +Fixes: 61578f679378 ("net: phy: aquantia: add support for PHY LEDs") +Signed-off-by: Daniel Golle +Reviewed-by: Russell King (Oracle) +--- + drivers/net/phy/aquantia/aquantia_leds.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +--- a/drivers/net/phy/aquantia/aquantia_leds.c ++++ b/drivers/net/phy/aquantia/aquantia_leds.c +@@ -120,7 +120,8 @@ int aqr_phy_led_hw_control_set(struct ph + int aqr_phy_led_active_low_set(struct phy_device *phydev, int index, bool enable) + { + return phy_modify_mmd(phydev, MDIO_MMD_VEND1, AQR_LED_DRIVE(index), +- VEND1_GLOBAL_LED_DRIVE_VDD, enable); ++ VEND1_GLOBAL_LED_DRIVE_VDD, ++ enable ? VEND1_GLOBAL_LED_DRIVE_VDD : 0); + } + + int aqr_phy_led_polarity_set(struct phy_device *phydev, int index, unsigned long modes) diff --git a/target/linux/generic/pending-6.6/751-net-phy-aquantia-fix-applying-active_low-bit-after-reset.patch b/target/linux/generic/pending-6.6/751-net-phy-aquantia-fix-applying-active_low-bit-after-reset.patch new file mode 100644 index 000000000000..5c3494ae3316 --- /dev/null +++ b/target/linux/generic/pending-6.6/751-net-phy-aquantia-fix-applying-active_low-bit-after-reset.patch @@ -0,0 +1,72 @@ +From patchwork Tue Sep 17 13:49:55 2024 +Content-Type: text/plain; charset="utf-8" +MIME-Version: 1.0 +Content-Transfer-Encoding: 7bit +X-Patchwork-Submitter: Daniel Golle +X-Patchwork-Id: 13806177 +X-Patchwork-Delegate: kuba@kernel.org +Date: Tue, 17 Sep 2024 14:49:55 +0100 +From: Daniel Golle +To: Andrew Lunn , Heiner Kallweit , + Russell King , + "David S. Miller" , + Eric Dumazet , + Jakub Kicinski , Paolo Abeni , + Daniel Golle , + Christian Marangi , + Bartosz Golaszewski , + Robert Marko , + Russell King , netdev@vger.kernel.org, + linux-kernel@vger.kernel.org +Subject: [PATCH net 2/2] net: phy: aquantia: fix applying active_low bit + after reset +Message-ID: + <9b1f0cd91f4cda54c8be56b4fe780480baf4aa0f.1726580902.git.daniel@makrotopia.org> +References: + +Precedence: bulk +X-Mailing-List: netdev@vger.kernel.org +List-Id: +List-Subscribe: +List-Unsubscribe: +MIME-Version: 1.0 +Content-Disposition: inline +In-Reply-To: + +X-Patchwork-Delegate: kuba@kernel.org + +for_each_set_bit was used wrongly in aqr107_config_init() when iterating +over LEDs. Drop misleading 'index' variable and call +aqr_phy_led_active_low_set() for each set bit representing an LED which +is driven by VDD instead of GND pin. + +Fixes: 61578f679378 ("net: phy: aquantia: add support for PHY LEDs") +Signed-off-by: Daniel Golle +Reviewed-by: Russell King (Oracle) +--- + drivers/net/phy/aquantia/aquantia_main.c | 5 ++--- + 1 file changed, 2 insertions(+), 3 deletions(-) + +--- a/drivers/net/phy/aquantia/aquantia_main.c ++++ b/drivers/net/phy/aquantia/aquantia_main.c +@@ -501,7 +501,7 @@ static int aqr107_config_init(struct phy + { + struct aqr107_priv *priv = phydev->priv; + u32 led_active_low; +- int ret, index = 0; ++ int ret; + + /* Check that the PHY interface type is compatible */ + if (phydev->interface != PHY_INTERFACE_MODE_SGMII && +@@ -537,10 +537,9 @@ static int aqr107_config_init(struct phy + + /* Restore LED polarity state after reset */ + for_each_set_bit(led_active_low, &priv->leds_active_low, AQR_MAX_LEDS) { +- ret = aqr_phy_led_active_low_set(phydev, index, led_active_low); ++ ret = aqr_phy_led_active_low_set(phydev, led_active_low, true); + if (ret) + return ret; +- index++; + } + + return 0;