net: altera_tse: add write_hwaddr support
authorThomas Chou <thomas@wytron.com.tw>
Tue, 27 Apr 2010 12:15:10 +0000 (20:15 +0800)
committerBen Warren <biggerbadderben@gmail.com>
Mon, 3 May 2010 21:52:50 +0000 (14:52 -0700)
Signed-off-by: Thomas Chou <thomas@wytron.com.tw>
Signed-off-by: Ben Warren <biggerbadderben@gmail.com>
drivers/net/altera_tse.c

index 59279049aa380fee24ccf908e9908ef086f0a3dd..5c0c274ba3aad0d35f7e75fbbc3c49f8eee8b532 100644 (file)
@@ -752,6 +752,40 @@ static int init_phy(struct eth_device *dev)
        return 1;
 }
 
+static int tse_set_mac_address(struct eth_device *dev)
+{
+       struct altera_tse_priv *priv = dev->priv;
+       volatile struct alt_tse_mac *mac_dev = priv->mac_dev;
+
+       debug("Setting MAC address to 0x%02x%02x%02x%02x%02x%02x\n",
+             dev->enetaddr[5], dev->enetaddr[4],
+             dev->enetaddr[3], dev->enetaddr[2],
+             dev->enetaddr[1], dev->enetaddr[0]);
+       mac_dev->mac_addr_0 = ((dev->enetaddr[3]) << 24 |
+                              (dev->enetaddr[2]) << 16 |
+                              (dev->enetaddr[1]) << 8 | (dev->enetaddr[0]));
+
+       mac_dev->mac_addr_1 = ((dev->enetaddr[5] << 8 |
+                               (dev->enetaddr[4])) & 0xFFFF);
+
+       /* Set the MAC address */
+       mac_dev->supp_mac_addr_0_0 = mac_dev->mac_addr_0;
+       mac_dev->supp_mac_addr_0_1 = mac_dev->mac_addr_1;
+
+       /* Set the MAC address */
+       mac_dev->supp_mac_addr_1_0 = mac_dev->mac_addr_0;
+       mac_dev->supp_mac_addr_1_1 = mac_dev->mac_addr_1;
+
+       /* Set the MAC address */
+       mac_dev->supp_mac_addr_2_0 = mac_dev->mac_addr_0;
+       mac_dev->supp_mac_addr_2_1 = mac_dev->mac_addr_1;
+
+       /* Set the MAC address */
+       mac_dev->supp_mac_addr_3_0 = mac_dev->mac_addr_0;
+       mac_dev->supp_mac_addr_3_1 = mac_dev->mac_addr_1;
+       return 0;
+}
+
 static int tse_eth_init(struct eth_device *dev, bd_t * bd)
 {
        int dat;
@@ -829,34 +863,6 @@ static int tse_eth_init(struct eth_device *dev, bd_t * bd)
 
        mac_dev->command_config.image = dat;
 
-       /* Set the MAC address */
-       debug("Setting MAC address to 0x%x%x%x%x%x%x\n",
-             dev->enetaddr[5], dev->enetaddr[4],
-             dev->enetaddr[3], dev->enetaddr[2],
-             dev->enetaddr[1], dev->enetaddr[0]);
-       mac_dev->mac_addr_0 = ((dev->enetaddr[3]) << 24 |
-                              (dev->enetaddr[2]) << 16 |
-                              (dev->enetaddr[1]) << 8 | (dev->enetaddr[0]));
-
-       mac_dev->mac_addr_1 = ((dev->enetaddr[5] << 8 |
-                               (dev->enetaddr[4])) & 0xFFFF);
-
-       /* Set the MAC address */
-       mac_dev->supp_mac_addr_0_0 = mac_dev->mac_addr_0;
-       mac_dev->supp_mac_addr_0_1 = mac_dev->mac_addr_1;
-
-       /* Set the MAC address */
-       mac_dev->supp_mac_addr_1_0 = mac_dev->mac_addr_0;
-       mac_dev->supp_mac_addr_1_1 = mac_dev->mac_addr_1;
-
-       /* Set the MAC address */
-       mac_dev->supp_mac_addr_2_0 = mac_dev->mac_addr_0;
-       mac_dev->supp_mac_addr_2_1 = mac_dev->mac_addr_1;
-
-       /* Set the MAC address */
-       mac_dev->supp_mac_addr_3_0 = mac_dev->mac_addr_0;
-       mac_dev->supp_mac_addr_3_1 = mac_dev->mac_addr_1;
-
        /* configure the TSE core  */
        /*  -- output clocks,  */
        /*  -- and later config stuff for SGMII */
@@ -920,6 +926,7 @@ int altera_tse_initialize(u8 dev_num, int mac_base,
        dev->halt = tse_eth_halt;
        dev->send = tse_eth_send;
        dev->recv = tse_eth_rx;
+       dev->write_hwaddr = tse_set_mac_address;
        sprintf(dev->name, "%s-%hu", "ALTERA_TSE", dev_num);
 
        eth_register(dev);