aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/net/mv643xx_eth.c18
-rw-r--r--drivers/net/mv643xx_eth.h3
2 files changed, 8 insertions, 13 deletions
diff --git a/drivers/net/mv643xx_eth.c b/drivers/net/mv643xx_eth.c
index 7ef4b0434a3f..af9bbe649fc1 100644
--- a/drivers/net/mv643xx_eth.c
+++ b/drivers/net/mv643xx_eth.c
@@ -243,8 +243,7 @@ static void mv643xx_eth_update_mac_address(struct net_device *dev)
243 unsigned int port_num = mp->port_num; 243 unsigned int port_num = mp->port_num;
244 244
245 eth_port_init_mac_tables(port_num); 245 eth_port_init_mac_tables(port_num);
246 memcpy(mp->port_mac_addr, dev->dev_addr, 6); 246 eth_port_uc_addr_set(port_num, dev->dev_addr);
247 eth_port_uc_addr_set(port_num, mp->port_mac_addr);
248} 247}
249 248
250/* 249/*
@@ -320,7 +319,7 @@ static void mv643xx_eth_tx_timeout_task(struct net_device *dev)
320 319
321 netif_device_detach(dev); 320 netif_device_detach(dev);
322 eth_port_reset(mp->port_num); 321 eth_port_reset(mp->port_num);
323 eth_port_start(mp); 322 eth_port_start(dev);
324 netif_device_attach(dev); 323 netif_device_attach(dev);
325} 324}
326 325
@@ -751,9 +750,6 @@ static int mv643xx_eth_open(struct net_device *dev)
751 /* Stop RX Queues */ 750 /* Stop RX Queues */
752 mv_write(MV643XX_ETH_RECEIVE_QUEUE_COMMAND_REG(port_num), 0x0000ff00); 751 mv_write(MV643XX_ETH_RECEIVE_QUEUE_COMMAND_REG(port_num), 0x0000ff00);
753 752
754 /* Set the MAC Address */
755 memcpy(mp->port_mac_addr, dev->dev_addr, 6);
756
757 eth_port_init(mp); 753 eth_port_init(mp);
758 754
759 INIT_WORK(&mp->rx_task, (void (*)(void *))mv643xx_eth_rx_task, dev); 755 INIT_WORK(&mp->rx_task, (void (*)(void *))mv643xx_eth_rx_task, dev);
@@ -839,7 +835,7 @@ static int mv643xx_eth_open(struct net_device *dev)
839 835
840 mv643xx_eth_rx_task(dev); /* Fill RX ring with skb's */ 836 mv643xx_eth_rx_task(dev); /* Fill RX ring with skb's */
841 837
842 eth_port_start(mp); 838 eth_port_start(dev);
843 839
844 /* Interrupt Coalescing */ 840 /* Interrupt Coalescing */
845 841
@@ -1706,7 +1702,6 @@ MODULE_DESCRIPTION("Ethernet driver for Marvell MV643XX");
1706 * Prior to calling the initialization routine eth_port_init() the user 1702 * Prior to calling the initialization routine eth_port_init() the user
1707 * must set the following fields under mv643xx_private struct: 1703 * must set the following fields under mv643xx_private struct:
1708 * port_num User Ethernet port number. 1704 * port_num User Ethernet port number.
1709 * port_mac_addr[6] User defined port MAC address.
1710 * port_config User port configuration value. 1705 * port_config User port configuration value.
1711 * port_config_extend User port config extend value. 1706 * port_config_extend User port config extend value.
1712 * port_sdma_config User port SDMA config value. 1707 * port_sdma_config User port SDMA config value.
@@ -1796,7 +1791,7 @@ static void eth_port_init(struct mv643xx_private *mp)
1796 * and ether_init_rx_desc_ring for Rx queues). 1791 * and ether_init_rx_desc_ring for Rx queues).
1797 * 1792 *
1798 * INPUT: 1793 * INPUT:
1799 * struct mv643xx_private *mp Ethernet port control struct 1794 * dev - a pointer to the required interface
1800 * 1795 *
1801 * OUTPUT: 1796 * OUTPUT:
1802 * Ethernet port is ready to receive and transmit. 1797 * Ethernet port is ready to receive and transmit.
@@ -1804,8 +1799,9 @@ static void eth_port_init(struct mv643xx_private *mp)
1804 * RETURN: 1799 * RETURN:
1805 * None. 1800 * None.
1806 */ 1801 */
1807static void eth_port_start(struct mv643xx_private *mp) 1802static void eth_port_start(struct net_device *dev)
1808{ 1803{
1804 struct mv643xx_private *mp = netdev_priv(dev);
1809 unsigned int port_num = mp->port_num; 1805 unsigned int port_num = mp->port_num;
1810 int tx_curr_desc, rx_curr_desc; 1806 int tx_curr_desc, rx_curr_desc;
1811 1807
@@ -1820,7 +1816,7 @@ static void eth_port_start(struct mv643xx_private *mp)
1820 (u32)((struct eth_rx_desc *)mp->rx_desc_dma + rx_curr_desc)); 1816 (u32)((struct eth_rx_desc *)mp->rx_desc_dma + rx_curr_desc));
1821 1817
1822 /* Add the assigned Ethernet address to the port's address table */ 1818 /* Add the assigned Ethernet address to the port's address table */
1823 eth_port_uc_addr_set(port_num, mp->port_mac_addr); 1819 eth_port_uc_addr_set(port_num, dev->dev_addr);
1824 1820
1825 /* Assign port configuration and command. */ 1821 /* Assign port configuration and command. */
1826 mv_write(MV643XX_ETH_PORT_CONFIG_REG(port_num), mp->port_config); 1822 mv_write(MV643XX_ETH_PORT_CONFIG_REG(port_num), mp->port_config);
diff --git a/drivers/net/mv643xx_eth.h b/drivers/net/mv643xx_eth.h
index f769f9b626ea..c83bcbdef4d5 100644
--- a/drivers/net/mv643xx_eth.h
+++ b/drivers/net/mv643xx_eth.h
@@ -324,7 +324,6 @@ struct mv643xx_mib_counters {
324 324
325struct mv643xx_private { 325struct mv643xx_private {
326 int port_num; /* User Ethernet port number */ 326 int port_num; /* User Ethernet port number */
327 u8 port_mac_addr[6]; /* User defined port MAC address.*/
328 u32 port_config; /* User port configuration value*/ 327 u32 port_config; /* User port configuration value*/
329 u32 port_config_extend; /* User port config extend value*/ 328 u32 port_config_extend; /* User port config extend value*/
330 u32 port_sdma_config; /* User port SDMA config value */ 329 u32 port_sdma_config; /* User port SDMA config value */
@@ -405,7 +404,7 @@ struct mv643xx_private {
405/* Port operation control routines */ 404/* Port operation control routines */
406static void eth_port_init(struct mv643xx_private *mp); 405static void eth_port_init(struct mv643xx_private *mp);
407static void eth_port_reset(unsigned int eth_port_num); 406static void eth_port_reset(unsigned int eth_port_num);
408static void eth_port_start(struct mv643xx_private *mp); 407static void eth_port_start(struct net_device *dev);
409 408
410/* Port MAC address routines */ 409/* Port MAC address routines */
411static void eth_port_uc_addr_set(unsigned int eth_port_num, 410static void eth_port_uc_addr_set(unsigned int eth_port_num,