]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
net: macb: add mpfs specific usrio configuration
authorConor Dooley <conor.dooley@microchip.com>
Wed, 25 Mar 2026 16:28:11 +0000 (16:28 +0000)
committerJakub Kicinski <kuba@kernel.org>
Sun, 29 Mar 2026 21:34:28 +0000 (14:34 -0700)
On mpfs the driver needs to make sure the tsu clock source is not the
fabric, as this requires that the hardware is in Timer Adjust mode,
which is not compatible with the linux driver trying to control the
hardware. It is unlikely that this will be set, as the peripheral is
reset during probe, but if the resets are not provided in devicetree
it's probable that this bit is set incorrectly, as U-Boot's macb driver
has the same issue with using usrio settings for at91 platforms as the
default.

Fixes: 8aad66aa59be5 ("net: macb: add polarfire soc reset support")
Signed-off-by: Conor Dooley <conor.dooley@microchip.com>
Link: https://patch.msgid.link/20260325-excavate-jester-798e7cfe02b5@spud
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/ethernet/cadence/macb.h
drivers/net/ethernet/cadence/macb_main.c

index 1bdbe66b05590aecdc0190724f6f7353f702b4c1..8e5305f9a7545396d014a93a535cb3e4593db0b9 100644 (file)
 #define MACB_CAPS_EEE                          BIT(25)
 #define MACB_CAPS_USRIO_HAS_MII                        BIT(26)
 #define MACB_CAPS_USRIO_HAS_REFCLK_SOURCE      BIT(27)
+#define MACB_CAPS_USRIO_HAS_TSUCLK_SOURCE      BIT(28)
 
 /* LSO settings */
 #define MACB_LSO_UFO_ENABLE                    0x01
@@ -1229,6 +1230,7 @@ struct macb_usrio_config {
        u32 refclk;
        u32 clken;
        u32 hdfctlen;
+       u32 tsu_source;
        bool refclk_default_external;
 };
 
index 464b9e5bcdcf8a8285b7f658c9878e4fb1c1cd9f..2587279d50a02544e3e85f6aaf251159b5cec628 100644 (file)
@@ -4921,6 +4921,9 @@ static int macb_init_dflt(struct platform_device *pdev)
                                val |= bp->usrio->refclk;
                }
 
+               if (bp->caps & MACB_CAPS_USRIO_HAS_TSUCLK_SOURCE)
+                       val |= bp->usrio->tsu_source;
+
                macb_or_gem_writel(bp, USRIO, val);
        }
 
@@ -5524,6 +5527,10 @@ static const struct macb_usrio_config at91_default_usrio = {
        .clken = MACB_BIT(CLKEN),
 };
 
+static const struct macb_usrio_config mpfs_usrio = {
+       .tsu_source = 0,
+};
+
 static const struct macb_usrio_config sama7g5_gem_usrio = {
        .mii = 0,
        .rmii = 1,
@@ -5637,10 +5644,11 @@ static const struct macb_config zynq_config = {
 static const struct macb_config mpfs_config = {
        .caps = MACB_CAPS_GIGABIT_MODE_AVAILABLE |
                MACB_CAPS_JUMBO |
-               MACB_CAPS_GEM_HAS_PTP,
+               MACB_CAPS_GEM_HAS_PTP |
+               MACB_CAPS_USRIO_HAS_TSUCLK_SOURCE,
        .dma_burst_length = 16,
        .init = init_reset_optional,
-       .usrio = &at91_default_usrio,
+       .usrio = &mpfs_usrio,
        .max_tx_length = 4040, /* Cadence Erratum 1686 */
        .jumbo_max_len = 4040,
 };