static irqreturn_t mace_interrupt(int irq, void *dev_id);
 static irqreturn_t mace_dma_intr(int irq, void *dev_id);
 static void mace_tx_timeout(struct net_device *dev, unsigned int txqueue);
-static void __mace_set_address(struct net_device *dev, void *addr);
+static void __mace_set_address(struct net_device *dev, const void *addr);
 
 /*
  * Load a receive DMA channel with a base address and ring length
        unsigned char *addr;
        struct net_device *dev;
        unsigned char checksum = 0;
+       u8 macaddr[ETH_ALEN];
        int err;
 
        dev = alloc_etherdev(PRIV_BYTES);
        for (j = 0; j < 6; ++j) {
                u8 v = bitrev8(addr[j<<4]);
                checksum ^= v;
-               dev->dev_addr[j] = v;
+               macaddr[j] = v;
        }
+       eth_hw_addr_set(dev, macaddr);
        for (; j < 8; ++j) {
                checksum ^= bitrev8(addr[j<<4]);
        }
  * Load the address on a mace controller.
  */
 
-static void __mace_set_address(struct net_device *dev, void *addr)
+static void __mace_set_address(struct net_device *dev, const void *addr)
 {
        struct mace_data *mp = netdev_priv(dev);
        volatile struct mace *mb = mp->mace;
-       unsigned char *p = addr;
+       const unsigned char *p = addr;
+       u8 macaddr[ETH_ALEN];
        int i;
 
        /* load up the hardware address */
                        ;
        }
        for (i = 0; i < 6; ++i)
-               mb->padr = dev->dev_addr[i] = p[i];
+               mb->padr = macaddr[i] = p[i];
+       eth_hw_addr_set(dev, macaddr);
        if (mp->chipid != BROKEN_ADDRCHG_REV)
                mb->iac = 0;
 }