diff options
author | Reece R. Pollack | 2014-07-10 16:59:03 -0500 |
---|---|---|
committer | Murali Karicheri | 2014-12-03 10:30:12 -0600 |
commit | 06fe11cd4ff34bfdfed665726ee3901cd791c03d (patch) | |
tree | bf53ed82995091f5f404b1c626b2f9fae2b05e67 /drivers/net/ethernet/ti/keystone_ethss.c | |
parent | 26f60283eba81e1149467111959f37c793135f32 (diff) | |
download | linux-06fe11cd4ff34bfdfed665726ee3901cd791c03d.tar.gz linux-06fe11cd4ff34bfdfed665726ee3901cd791c03d.tar.xz linux-06fe11cd4ff34bfdfed665726ee3901cd791c03d.zip |
Revert "net: keystone: Clean up network interface shutdown"
This reverts commit 5d2e762de355ab33fc1a767a2dc0d6dccd40f135, which
destabilizes the RT kernel.
Diffstat (limited to 'drivers/net/ethernet/ti/keystone_ethss.c')
-rw-r--r-- | drivers/net/ethernet/ti/keystone_ethss.c | 28 |
1 files changed, 7 insertions, 21 deletions
diff --git a/drivers/net/ethernet/ti/keystone_ethss.c b/drivers/net/ethernet/ti/keystone_ethss.c index 4d36264c246..7fa411db024 100644 --- a/drivers/net/ethernet/ti/keystone_ethss.c +++ b/drivers/net/ethernet/ti/keystone_ethss.c | |||
@@ -2147,14 +2147,14 @@ static int cpsw_port_reset(struct cpsw_slave *slave) | |||
2147 | u32 i, v; | 2147 | u32 i, v; |
2148 | 2148 | ||
2149 | /* Set the soft reset bit */ | 2149 | /* Set the soft reset bit */ |
2150 | __iowmb(); | 2150 | __raw_writel(SOFT_RESET, |
2151 | __raw_writel(SOFT_RESET, &slave->sliver->soft_reset); | 2151 | &slave->sliver->soft_reset); |
2152 | __iowmb(); | ||
2153 | 2152 | ||
2154 | /* Wait for the bit to clear */ | 2153 | /* Wait for the bit to clear */ |
2155 | for (i = 0; i < DEVICE_EMACSL_RESET_POLL_COUNT; i++) { | 2154 | for (i = 0; i < DEVICE_EMACSL_RESET_POLL_COUNT; i++) { |
2156 | v = __raw_readl(&slave->sliver->soft_reset); | 2155 | v = __raw_readl(&slave->sliver->soft_reset); |
2157 | if ((v & SOFT_RESET_MASK) != SOFT_RESET) | 2156 | if ((v & SOFT_RESET_MASK) != |
2157 | SOFT_RESET) | ||
2158 | return 0; | 2158 | return 0; |
2159 | } | 2159 | } |
2160 | 2160 | ||
@@ -2172,24 +2172,12 @@ static void cpsw_port_config(struct cpsw_slave *slave, int max_rx_len) | |||
2172 | 2172 | ||
2173 | __raw_writel(max_rx_len, &slave->sliver->rx_maxlen); | 2173 | __raw_writel(max_rx_len, &slave->sliver->rx_maxlen); |
2174 | 2174 | ||
2175 | __iowmb(); | ||
2176 | __raw_writel(MACSL_ENABLE | MACSL_RX_ENABLE_EXT_CTL | | 2175 | __raw_writel(MACSL_ENABLE | MACSL_RX_ENABLE_EXT_CTL | |
2177 | MACSL_RX_ENABLE_CSF, &slave->sliver->mac_control); | 2176 | MACSL_RX_ENABLE_CSF, &slave->sliver->mac_control); |
2178 | } | 2177 | } |
2179 | 2178 | ||
2180 | static void cpsw_slave_stop(struct cpsw_slave *slave, | 2179 | static void cpsw_slave_stop(struct cpsw_slave *slave, struct cpsw_priv *priv) |
2181 | struct cpsw_intf *cpsw_intf) | ||
2182 | { | 2180 | { |
2183 | struct cpsw_priv *priv = cpsw_intf->cpsw_priv; | ||
2184 | void __iomem *sgmii_port_regs; | ||
2185 | |||
2186 | if (slave->slave_num < 2) | ||
2187 | sgmii_port_regs = priv->sgmii_port_regs; | ||
2188 | else | ||
2189 | sgmii_port_regs = priv->sgmii_port34_regs; | ||
2190 | |||
2191 | keystone_sgmii_rtreset(sgmii_port_regs, slave->slave_num, true); | ||
2192 | |||
2193 | cpsw_port_reset(slave); | 2181 | cpsw_port_reset(slave); |
2194 | 2182 | ||
2195 | if (!slave->phy) | 2183 | if (!slave->phy) |
@@ -2232,8 +2220,6 @@ static void cpsw_slave_open(struct cpsw_slave *slave, | |||
2232 | 2220 | ||
2233 | cpsw_port_reset(slave); | 2221 | cpsw_port_reset(slave); |
2234 | 2222 | ||
2235 | keystone_sgmii_rtreset(sgmii_port_regs, slave->slave_num, false); | ||
2236 | |||
2237 | cpsw_port_config(slave, priv->rx_packet_max); | 2223 | cpsw_port_config(slave, priv->rx_packet_max); |
2238 | 2224 | ||
2239 | cpsw_set_slave_mac(slave, cpsw_intf); | 2225 | cpsw_set_slave_mac(slave, cpsw_intf); |
@@ -3069,7 +3055,7 @@ static int cpsw_open(void *intf_priv, struct net_device *ndev) | |||
3069 | 3055 | ||
3070 | for_each_slave(cpsw_intf, cpsw_slave_init, cpsw_dev); | 3056 | for_each_slave(cpsw_intf, cpsw_slave_init, cpsw_dev); |
3071 | 3057 | ||
3072 | for_each_slave(cpsw_intf, cpsw_slave_stop, cpsw_intf); | 3058 | for_each_slave(cpsw_intf, cpsw_slave_stop, cpsw_dev); |
3073 | 3059 | ||
3074 | /* Serdes init */ | 3060 | /* Serdes init */ |
3075 | if (cpsw_dev->init_serdes_at_probe == 0) | 3061 | if (cpsw_dev->init_serdes_at_probe == 0) |
@@ -3134,7 +3120,7 @@ static int cpsw_close(void *intf_priv, struct net_device *ndev) | |||
3134 | if (!cpsw_dev->ale_refcnt) | 3120 | if (!cpsw_dev->ale_refcnt) |
3135 | cpsw_ale_stop(cpsw_dev->ale); | 3121 | cpsw_ale_stop(cpsw_dev->ale); |
3136 | 3122 | ||
3137 | for_each_slave(cpsw_intf, cpsw_slave_stop, cpsw_intf); | 3123 | for_each_slave(cpsw_intf, cpsw_slave_stop, cpsw_dev); |
3138 | 3124 | ||
3139 | if(!cpsw_dev->force_no_hwtstamp) | 3125 | if(!cpsw_dev->force_no_hwtstamp) |
3140 | netcp_unregister_rxhook(netcp, CPSW_RXHOOK_ORDER, | 3126 | netcp_unregister_rxhook(netcp, CPSW_RXHOOK_ORDER, |