net: ethernet: mvneta: Add 2500BaseX support for SoCs without comphy
authorSascha Hauer <s.hauer@pengutronix.de>
Tue, 16 Jun 2020 08:31:40 +0000 (10:31 +0200)
committerDavid S. Miller <davem@davemloft.net>
Fri, 19 Jun 2020 02:59:49 +0000 (19:59 -0700)
The older SoCs like Armada XP support a 2500BaseX mode in the datasheets
referred to as DR-SGMII (Double rated SGMII) or HS-SGMII (High Speed
SGMII). This is an upclocked 1000BaseX mode, thus
PHY_INTERFACE_MODE_2500BASEX is the appropriate mode define for it.
adding support for it merely means writing the correct magic value into
the MVNETA_SERDES_CFG register.

Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/marvell/mvneta.c

index 987aaaa..af60001 100644 (file)
 #define MVNETA_SERDES_CFG                       0x24A0
 #define      MVNETA_SGMII_SERDES_PROTO          0x0cc7
 #define      MVNETA_QSGMII_SERDES_PROTO                 0x0667
+#define      MVNETA_HSGMII_SERDES_PROTO                 0x1107
 #define MVNETA_TYPE_PRIO                         0x24bc
 #define      MVNETA_FORCE_UNI                    BIT(21)
 #define MVNETA_TXQ_CMD_1                         0x24e4
@@ -3564,6 +3565,11 @@ static int mvneta_config_interface(struct mvneta_port *pp,
                        mvreg_write(pp, MVNETA_SERDES_CFG,
                                    MVNETA_SGMII_SERDES_PROTO);
                        break;
+
+               case PHY_INTERFACE_MODE_2500BASEX:
+                       mvreg_write(pp, MVNETA_SERDES_CFG,
+                                   MVNETA_HSGMII_SERDES_PROTO);
+                       break;
                default:
                        return -EINVAL;
                }