From 2462b796f59d627774e8dc796bb5aad26652c12e Mon Sep 17 00:00:00 2001 From: Mandy Lavi Date: Mon, 10 Nov 2014 18:57:36 +0200 Subject: fmd: disable auto-neg if ports is SGMII2.5G In order to do so it was also required to introduce a new if type for SGMII2.5G Change-Id: Iddbe223d8b716c3ed348c7a8a53bee0c037f04f4 Signed-off-by: Mandy Lavi Reviewed-on: http://git.am.freescale.net:8181/23474 Tested-by: Review Code-CDREVIEW Reviewed-by: Shengzhou Liu Reviewed-by: Honghua Yin 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; -- cgit v0.10.2