net: mvneta: Add support for 98DX2530 Ethernet port
authorChris Packham <chris.packham@alliedtelesis.co.nz>
Tue, 15 Mar 2022 21:52:07 +0000 (10:52 +1300)
committerPaolo Abeni <pabeni@redhat.com>
Thu, 17 Mar 2022 09:49:26 +0000 (10:49 +0100)
The 98DX2530 SoC is similar to the Armada 3700 except it needs a
different MBUS window configuration. Add a new compatible string to
identify this device and the required MBUS window configuration.

Signed-off-by: Chris Packham <chris.packham@alliedtelesis.co.nz>
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
drivers/net/ethernet/marvell/mvneta.c

index f1335a1..934f6dd 100644 (file)
@@ -76,6 +76,8 @@
 #define MVNETA_WIN_SIZE(w)                      (0x2204 + ((w) << 3))
 #define MVNETA_WIN_REMAP(w)                     (0x2280 + ((w) << 2))
 #define MVNETA_BASE_ADDR_ENABLE                 0x2290
+#define      MVNETA_AC5_CNM_DDR_TARGET         0x2
+#define      MVNETA_AC5_CNM_DDR_ATTR           0xb
 #define MVNETA_ACCESS_PROTECT_ENABLE            0x2294
 #define MVNETA_PORT_CONFIG                      0x2400
 #define      MVNETA_UNI_PROMISC_MODE            BIT(0)
@@ -544,6 +546,7 @@ struct mvneta_port {
 
        /* Flags for special SoC configurations */
        bool neta_armada3700;
+       bool neta_ac5;
        u16 rx_offset_correction;
        const struct mbus_dram_target_info *dram_target_info;
 };
@@ -5324,6 +5327,10 @@ static void mvneta_conf_mbus_windows(struct mvneta_port *pp,
                        win_protect |= 3 << (2 * i);
                }
        } else {
+               if (pp->neta_ac5)
+                       mvreg_write(pp, MVNETA_WIN_BASE(0),
+                                   (MVNETA_AC5_CNM_DDR_ATTR << 8) |
+                                   MVNETA_AC5_CNM_DDR_TARGET);
                /* For Armada3700 open default 4GB Mbus window, leaving
                 * arbitration of target/attribute to a different layer
                 * of configuration.
@@ -5409,6 +5416,10 @@ static int mvneta_probe(struct platform_device *pdev)
        /* Get special SoC configurations */
        if (of_device_is_compatible(dn, "marvell,armada-3700-neta"))
                pp->neta_armada3700 = true;
+       if (of_device_is_compatible(dn, "marvell,armada-ac5-neta")) {
+               pp->neta_armada3700 = true;
+               pp->neta_ac5 = true;
+       }
 
        dev->irq = irq_of_parse_and_map(dn, 0);
        if (dev->irq == 0)
@@ -5769,6 +5780,7 @@ static const struct of_device_id mvneta_match[] = {
        { .compatible = "marvell,armada-370-neta" },
        { .compatible = "marvell,armada-xp-neta" },
        { .compatible = "marvell,armada-3700-neta" },
+       { .compatible = "marvell,armada-ac5-neta" },
        { }
 };
 MODULE_DEVICE_TABLE(of, mvneta_match);