summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--drivers/net/ethernet/freescale/dpa/mac-api.c2
-rw-r--r--drivers/net/ethernet/freescale/dpa/mac.c10
-rw-r--r--drivers/net/ethernet/freescale/fman/Peripherals/FM/MAC/memac.c2
-rw-r--r--drivers/net/ethernet/freescale/fman/inc/enet_ext.h2
-rw-r--r--drivers/net/ethernet/freescale/fman/inc/flib/fsl_enet.h1
-rw-r--r--include/linux/phy.h1
6 files changed, 16 insertions, 2 deletions
diff --git a/drivers/net/ethernet/freescale/dpa/mac-api.c b/drivers/net/ethernet/freescale/dpa/mac-api.c
index 1b92e86..7fe569e 100644
--- a/drivers/net/ethernet/freescale/dpa/mac-api.c
+++ b/drivers/net/ethernet/freescale/dpa/mac-api.c
@@ -99,6 +99,8 @@ macdev2enetinterface(const struct mac_device *mac_dev)
return _100[mac_dev->phy_if];
case SPEED_1000:
return _1000[mac_dev->phy_if];
+ case SPEED_2500:
+ return e_ENET_MODE_SGMII_2500;
case SPEED_10000:
return e_ENET_MODE_XGMII_10000;
default:
diff --git a/drivers/net/ethernet/freescale/dpa/mac.c b/drivers/net/ethernet/freescale/dpa/mac.c
index e146433..faf00a1 100644
--- a/drivers/net/ethernet/freescale/dpa/mac.c
+++ b/drivers/net/ethernet/freescale/dpa/mac.c
@@ -72,7 +72,8 @@ static const char phy_str[][11] = {
[PHY_INTERFACE_MODE_RGMII_RXID] = "rgmii-rxid",
[PHY_INTERFACE_MODE_RGMII_TXID] = "rgmii-txid",
[PHY_INTERFACE_MODE_RTBI] = "rtbi",
- [PHY_INTERFACE_MODE_XGMII] = "xgmii"
+ [PHY_INTERFACE_MODE_XGMII] = "xgmii",
+ [PHY_INTERFACE_MODE_SGMII_2500] = "sgmii_2500"
};
static phy_interface_t __pure __attribute__((nonnull)) str2phy(const char *str)
@@ -97,7 +98,8 @@ static const uint16_t phy2speed[] = {
[PHY_INTERFACE_MODE_RGMII_RXID] = SPEED_1000,
[PHY_INTERFACE_MODE_RGMII_TXID] = SPEED_1000,
[PHY_INTERFACE_MODE_RTBI] = SPEED_1000,
- [PHY_INTERFACE_MODE_XGMII] = SPEED_10000
+ [PHY_INTERFACE_MODE_XGMII] = SPEED_10000,
+ [PHY_INTERFACE_MODE_SGMII_2500] = SPEED_2500
};
static struct mac_device * __cold
@@ -337,6 +339,10 @@ static int __cold mac_probe(struct platform_device *_of_dev)
mac_dev->if_support &= ~(SUPPORTED_10baseT_Half |
SUPPORTED_100baseT_Half);
+ if (strstr(char_prop, "sgmii_2500"))
+ mac_dev->if_support &= ~(SUPPORTED_10baseT_Half |
+ SUPPORTED_100baseT_Half);
+
/* Gigabit support (no half-duplex) */
if (mac_dev->max_speed == 1000)
mac_dev->if_support |= SUPPORTED_1000baseT_Full;
diff --git a/drivers/net/ethernet/freescale/fman/Peripherals/FM/MAC/memac.c b/drivers/net/ethernet/freescale/fman/Peripherals/FM/MAC/memac.c
index 9566521..73c7769 100644
--- a/drivers/net/ethernet/freescale/fman/Peripherals/FM/MAC/memac.c
+++ b/drivers/net/ethernet/freescale/fman/Peripherals/FM/MAC/memac.c
@@ -93,6 +93,8 @@ static void SetupSgmiiInternalPhy(t_Memac *p_Memac, uint8_t phyAddr)
/* SGMII mode + AN enable */
tmpReg16 = PHY_SGMII_IF_MODE_AN | PHY_SGMII_IF_MODE_SGMII;
+ if ((p_Memac->enetMode) == e_ENET_MODE_SGMII_2500)
+ tmpReg16 = PHY_SGMII_CR_PHY_RESET | PHY_SGMII_IF_MODE_SGMII;
MEMAC_MII_WritePhyReg(p_Memac, phyAddr, 0x14, tmpReg16);
/* Device ability according to SGMII specification */
diff --git a/drivers/net/ethernet/freescale/fman/inc/enet_ext.h b/drivers/net/ethernet/freescale/fman/inc/enet_ext.h
index c6b9071..ef3bee5 100644
--- a/drivers/net/ethernet/freescale/fman/inc/enet_ext.h
+++ b/drivers/net/ethernet/freescale/fman/inc/enet_ext.h
@@ -104,6 +104,7 @@ typedef enum e_EnetSpeed
e_ENET_SPEED_10 = E_ENET_SPEED_10, /**< 10 Mbps */
e_ENET_SPEED_100 = E_ENET_SPEED_100, /**< 100 Mbps */
e_ENET_SPEED_1000 = E_ENET_SPEED_1000, /**< 1000 Mbps = 1 Gbps */
+ e_ENET_SPEED_2500 = E_ENET_SPEED_2500, /**< 2500 Mbps = 2.5 Gbps */
e_ENET_SPEED_10000 = E_ENET_SPEED_10000 /**< 10000 Mbps = 10 Gbps */
} e_EnetSpeed;
@@ -134,6 +135,7 @@ typedef enum e_EnetMode
e_ENET_MODE_SGMII_1000 = (e_ENET_IF_SGMII | e_ENET_SPEED_1000),
/**< 1000 Mbps SGMII with auto-negotiation between MAC and
SGMII phy according to Cisco SGMII specification */
+ e_ENET_MODE_SGMII_2500 = (e_ENET_IF_SGMII | e_ENET_SPEED_2500),
e_ENET_MODE_SGMII_BASEX_10 = (ENET_IF_SGMII_BASEX | e_ENET_IF_SGMII | e_ENET_SPEED_10),
/**< 10 Mbps SGMII with 1000BaseX auto-negotiation between
MAC and SGMII phy or backplane */
diff --git a/drivers/net/ethernet/freescale/fman/inc/flib/fsl_enet.h b/drivers/net/ethernet/freescale/fman/inc/flib/fsl_enet.h
index dde6a4e..caa87fc 100644
--- a/drivers/net/ethernet/freescale/fman/inc/flib/fsl_enet.h
+++ b/drivers/net/ethernet/freescale/fman/inc/flib/fsl_enet.h
@@ -58,6 +58,7 @@ enum enet_speed {
E_ENET_SPEED_10 = 10, /**< 10 Mbps */
E_ENET_SPEED_100 = 100, /**< 100 Mbps */
E_ENET_SPEED_1000 = 1000, /**< 1000 Mbps = 1 Gbps */
+ E_ENET_SPEED_2500 = 2500, /**< 2500 Mbps = 2.5 Gbps */
E_ENET_SPEED_10000 = 10000 /**< 10000 Mbps = 10 Gbps */
};
diff --git a/include/linux/phy.h b/include/linux/phy.h
index a17366b..5f58615 100644
--- a/include/linux/phy.h
+++ b/include/linux/phy.h
@@ -67,6 +67,7 @@ typedef enum {
PHY_INTERFACE_MODE_RTBI,
PHY_INTERFACE_MODE_SMII,
PHY_INTERFACE_MODE_XGMII,
+ PHY_INTERFACE_MODE_SGMII_2500,
} phy_interface_t;