mirror of
https://github.com/raspberrypi/linux.git
synced 2025-12-06 10:00:17 +00:00
net: dsa: microchip: lan937x: Fix RGMII delay tuning
commit3ceb6ac211upstream. Correct RGMII delay application logic in lan937x_set_tune_adj(). The function was missing `data16 &= ~PORT_TUNE_ADJ` before setting the new delay value. This caused the new value to be bitwise-OR'd with the existing PORT_TUNE_ADJ field instead of replacing it. For example, when setting the RGMII 2 TX delay on port 4, the intended TUNE_ADJUST value of 0 (RGMII_2_TX_DELAY_2NS) was incorrectly OR'd with the default 0x1B (from register value 0xDA3), leaving the delay at the wrong setting. This patch adds the missing mask to clear the field, ensuring the correct delay value is written. Physical measurements on the RGMII TX lines confirm the fix, showing the delay changing from ~1ns (before change) to ~2ns. While testing on i.MX 8MP showed this was within the platform's timing tolerance, it did not match the intended hardware-characterized value. Fixes:b19ac41faa("net: dsa: microchip: apply rgmii tx and rx delay in phylink mac config") Cc: stable@vger.kernel.org Signed-off-by: Oleksij Rempel <o.rempel@pengutronix.de> Link: https://patch.msgid.link/20251114090951.4057261-1-o.rempel@pengutronix.de Signed-off-by: Paolo Abeni <pabeni@redhat.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
1ecd86ec6e
commit
4d61cc2bc4
@@ -339,6 +339,7 @@ static void lan937x_set_tune_adj(struct ksz_device *dev, int port,
|
|||||||
ksz_pread16(dev, port, reg, &data16);
|
ksz_pread16(dev, port, reg, &data16);
|
||||||
|
|
||||||
/* Update tune Adjust */
|
/* Update tune Adjust */
|
||||||
|
data16 &= ~PORT_TUNE_ADJ;
|
||||||
data16 |= FIELD_PREP(PORT_TUNE_ADJ, val);
|
data16 |= FIELD_PREP(PORT_TUNE_ADJ, val);
|
||||||
ksz_pwrite16(dev, port, reg, data16);
|
ksz_pwrite16(dev, port, reg, data16);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user