aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWingMan Kwok2015-02-27 15:18:33 -0600
committerWingMan Kwok2015-03-10 09:20:18 -0500
commitefd468cfeeb35dbb843540d6bcc8c61231a054a7 (patch)
tree4fb93abfabe32bfe0313d3f1338f283b91126fdd /drivers/net/ethernet/ti/keystone_ethss2.c
parente55b702ba52b4e43073cb33a7a4a95c1d55ddb53 (diff)
downloadlinux-efd468cfeeb35dbb843540d6bcc8c61231a054a7.tar.gz
linux-efd468cfeeb35dbb843540d6bcc8c61231a054a7.tar.xz
linux-efd468cfeeb35dbb843540d6bcc8c61231a054a7.zip
net: keystone: add support of additional 1G sgmii mode configurations
This patch adds support of 3 1G sgmii mode configurations 1. MAC-to-PHY master (SGMII_LINK_MAC_PHY_MASTER) 2. MAC-to-PHY master NO MDIO (SGMII_LINK_MAC_PHY_MASTER_NO_MDIO) - SGMII is in master mode and auto-nego enabled - use this mode to work around link down/up issue observed on K2E/L. - these 2 modes supports only gigabit fullduplex connections. 3. MAC-to-MAC Auto-negotiation Slave (SGMII_LINK_MAC_MAC_AN_SLAVE) - When connected 2 EVMs back-to-back and one side is configured as MAC-to-MAC Auto-negotiation master the other side needs to be configured as auto-nego slave. Signed-off-by: WingMan Kwok <w-kwok2@ti.com>
Diffstat (limited to 'drivers/net/ethernet/ti/keystone_ethss2.c')
-rw-r--r--drivers/net/ethernet/ti/keystone_ethss2.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/drivers/net/ethernet/ti/keystone_ethss2.c b/drivers/net/ethernet/ti/keystone_ethss2.c
index b0f701f5289..e5fadee8c0f 100644
--- a/drivers/net/ethernet/ti/keystone_ethss2.c
+++ b/drivers/net/ethernet/ti/keystone_ethss2.c
@@ -164,6 +164,8 @@
164#define SGMII2_BASE(s) (((s) < 2) ? cpsw_dev->sgmii_port_regs : \ 164#define SGMII2_BASE(s) (((s) < 2) ? cpsw_dev->sgmii_port_regs : \
165 cpsw_dev->sgmii_port_regs + SGMII_REGS_SIZE * 2) 165 cpsw_dev->sgmii_port_regs + SGMII_REGS_SIZE * 2)
166 166
167#define IS_SGMII_MAC_PHY(i) \
168 (((i) == SGMII_LINK_MAC_PHY) || ((i) == SGMII_LINK_MAC_PHY_MASTER))
167 169
168/* CPSW Statistics register map size */ 170/* CPSW Statistics register map size */
169#define CPSW2_STATS_REGS_SIZE 0x200 171#define CPSW2_STATS_REGS_SIZE 0x200
@@ -2597,7 +2599,7 @@ static void cpsw2_slave_link(struct cpsw2_slave *slave,
2597 struct netcp_priv *netcp = netdev_priv(cpsw_intf->ndev); 2599 struct netcp_priv *netcp = netdev_priv(cpsw_intf->ndev);
2598 int sn = slave->slave_num; 2600 int sn = slave->slave_num;
2599 2601
2600 if (slave->link_interface == SGMII_LINK_MAC_PHY) { 2602 if (IS_SGMII_MAC_PHY(slave->link_interface)) {
2601 /* check only the bit in phy_link_state_mask 2603 /* check only the bit in phy_link_state_mask
2602 * that corresponds to the slave 2604 * that corresponds to the slave
2603 */ 2605 */
@@ -2640,7 +2642,7 @@ static void cpsw2_slave_open(struct cpsw2_slave *slave,
2640 cpsw_ale_add_mcast(cpsw_dev->ale, cpsw_intf->ndev->broadcast, 2642 cpsw_ale_add_mcast(cpsw_dev->ale, cpsw_intf->ndev->broadcast,
2641 1 << slave_port, 0, 0, ALE_MCAST_FWD_2); 2643 1 << slave_port, 0, 0, ALE_MCAST_FWD_2);
2642 2644
2643 if (slave->link_interface == SGMII_LINK_MAC_PHY) { 2645 if (IS_SGMII_MAC_PHY(slave->link_interface)) {
2644 slave->phy = of_phy_connect(cpsw_intf->ndev, 2646 slave->phy = of_phy_connect(cpsw_intf->ndev,
2645 cpsw_intf->phy_node, 2647 cpsw_intf->phy_node,
2646 &cpsw2_adjust_link, 0, 2648 &cpsw2_adjust_link, 0,
@@ -3044,7 +3046,7 @@ static void cpsw2_timer(unsigned long arg)
3044 */ 3046 */
3045 if (!cpsw_dev->multi_if || 3047 if (!cpsw_dev->multi_if ||
3046 (cpsw_dev->multi_if && 3048 (cpsw_dev->multi_if &&
3047 cpsw_intf->slaves->link_interface != SGMII_LINK_MAC_PHY)) { 3049 !IS_SGMII_MAC_PHY(cpsw_intf->slaves->link_interface))) {
3048 if (cpsw_intf->link_state) 3050 if (cpsw_intf->link_state)
3049 netif_carrier_on(cpsw_intf->ndev); 3051 netif_carrier_on(cpsw_intf->ndev);
3050 else 3052 else