@@ -339,7 +339,7 @@ static void tulip_up(struct net_device *dev)
339339 }
340340 } else {
341341 /* This is set_rx_mode(), but without starting the transmitter. */
342- u16 * eaddrs = (u16 * )dev -> dev_addr ;
342+ const u16 * eaddrs = (const u16 * )dev -> dev_addr ;
343343 u16 * setup_frm = & tp -> setup_frame [15 * 6 ];
344344 dma_addr_t mapping ;
345345
@@ -1001,8 +1001,8 @@ static void build_setup_frame_hash(u16 *setup_frm, struct net_device *dev)
10011001 struct tulip_private * tp = netdev_priv (dev );
10021002 u16 hash_table [32 ];
10031003 struct netdev_hw_addr * ha ;
1004+ const u16 * eaddrs ;
10041005 int i ;
1005- u16 * eaddrs ;
10061006
10071007 memset (hash_table , 0 , sizeof (hash_table ));
10081008 __set_bit_le (255 , hash_table ); /* Broadcast entry */
@@ -1019,7 +1019,7 @@ static void build_setup_frame_hash(u16 *setup_frm, struct net_device *dev)
10191019 setup_frm = & tp -> setup_frame [13 * 6 ];
10201020
10211021 /* Fill the final entry with our physical address. */
1022- eaddrs = (u16 * )dev -> dev_addr ;
1022+ eaddrs = (const u16 * )dev -> dev_addr ;
10231023 * setup_frm ++ = eaddrs [0 ]; * setup_frm ++ = eaddrs [0 ];
10241024 * setup_frm ++ = eaddrs [1 ]; * setup_frm ++ = eaddrs [1 ];
10251025 * setup_frm ++ = eaddrs [2 ]; * setup_frm ++ = eaddrs [2 ];
@@ -1029,7 +1029,7 @@ static void build_setup_frame_perfect(u16 *setup_frm, struct net_device *dev)
10291029{
10301030 struct tulip_private * tp = netdev_priv (dev );
10311031 struct netdev_hw_addr * ha ;
1032- u16 * eaddrs ;
1032+ const u16 * eaddrs ;
10331033
10341034 /* We have <= 14 addresses so we can use the wonderful
10351035 16 address perfect filtering of the Tulip. */
@@ -1044,7 +1044,7 @@ static void build_setup_frame_perfect(u16 *setup_frm, struct net_device *dev)
10441044 setup_frm = & tp -> setup_frame [15 * 6 ];
10451045
10461046 /* Fill the final entry with our physical address. */
1047- eaddrs = (u16 * )dev -> dev_addr ;
1047+ eaddrs = (const u16 * )dev -> dev_addr ;
10481048 * setup_frm ++ = eaddrs [0 ]; * setup_frm ++ = eaddrs [0 ];
10491049 * setup_frm ++ = eaddrs [1 ]; * setup_frm ++ = eaddrs [1 ];
10501050 * setup_frm ++ = eaddrs [2 ]; * setup_frm ++ = eaddrs [2 ];
@@ -1305,6 +1305,7 @@ static int tulip_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
13051305 int chip_idx = ent -> driver_data ;
13061306 const char * chip_name = tulip_tbl [chip_idx ].chip_name ;
13071307 unsigned int eeprom_missing = 0 ;
1308+ u8 addr [ETH_ALEN ] __aligned (2 );
13081309 unsigned int force_csr0 = 0 ;
13091310
13101311 board_idx ++ ;
@@ -1506,13 +1507,15 @@ static int tulip_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
15061507 do {
15071508 value = ioread32 (ioaddr + CSR9 );
15081509 } while (value < 0 && -- boguscnt > 0 );
1509- put_unaligned_le16 (value , ((__le16 * )dev -> dev_addr ) + i );
1510+ put_unaligned_le16 (value , ((__le16 * )addr ) + i );
15101511 sum += value & 0xffff ;
15111512 }
1513+ eth_hw_addr_set (dev , addr );
15121514 } else if (chip_idx == COMET ) {
15131515 /* No need to read the EEPROM. */
1514- put_unaligned_le32 (ioread32 (ioaddr + 0xA4 ), dev -> dev_addr );
1515- put_unaligned_le16 (ioread32 (ioaddr + 0xA8 ), dev -> dev_addr + 4 );
1516+ put_unaligned_le32 (ioread32 (ioaddr + 0xA4 ), addr );
1517+ put_unaligned_le16 (ioread32 (ioaddr + 0xA8 ), addr + 4 );
1518+ eth_hw_addr_set (dev , addr );
15161519 for (i = 0 ; i < 6 ; i ++ )
15171520 sum += dev -> dev_addr [i ];
15181521 } else {
@@ -1575,20 +1578,23 @@ static int tulip_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
15751578#endif
15761579
15771580 for (i = 0 ; i < 6 ; i ++ ) {
1578- dev -> dev_addr [i ] = ee_data [i + sa_offset ];
1581+ addr [i ] = ee_data [i + sa_offset ];
15791582 sum += ee_data [i + sa_offset ];
15801583 }
1584+ eth_hw_addr_set (dev , addr );
15811585 }
15821586 /* Lite-On boards have the address byte-swapped. */
15831587 if ((dev -> dev_addr [0 ] == 0xA0 ||
15841588 dev -> dev_addr [0 ] == 0xC0 ||
15851589 dev -> dev_addr [0 ] == 0x02 ) &&
1586- dev -> dev_addr [1 ] == 0x00 )
1590+ dev -> dev_addr [1 ] == 0x00 ) {
15871591 for (i = 0 ; i < 6 ; i += 2 ) {
1588- char tmp = dev -> dev_addr [i ];
1589- dev -> dev_addr [i ] = dev -> dev_addr [i + 1 ];
1590- dev -> dev_addr [i + 1 ] = tmp ;
1592+ addr [i ] = dev -> dev_addr [i + 1 ];
1593+ addr [i + 1 ] = dev -> dev_addr [i ];
15911594 }
1595+ eth_hw_addr_set (dev , addr );
1596+ }
1597+
15921598 /* On the Zynx 315 Etherarray and other multiport boards only the
15931599 first Tulip has an EEPROM.
15941600 On Sparc systems the mac address is held in the OBP property
@@ -1604,8 +1610,9 @@ static int tulip_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
16041610#endif
16051611 eeprom_missing = 1 ;
16061612 for (i = 0 ; i < 5 ; i ++ )
1607- dev -> dev_addr [i ] = last_phys_addr [i ];
1608- dev -> dev_addr [i ] = last_phys_addr [i ] + 1 ;
1613+ addr [i ] = last_phys_addr [i ];
1614+ addr [i ] = last_phys_addr [i ] + 1 ;
1615+ eth_hw_addr_set (dev , addr );
16091616#if defined(CONFIG_SPARC )
16101617 addr = of_get_property (dp , "local-mac-address" , & len );
16111618 if (addr && len == ETH_ALEN )
0 commit comments