From: Tim Harvey <[email protected]>
Date: Wed,  5 Mar 2014 14:45:12 -0800

> @@ -4748,6 +4750,7 @@ static struct net_device *sky2_init_netdev(struct 
> sky2_hw *hw, unsigned port,
>  {
>       struct sky2_port *sky2;
>       struct net_device *dev = alloc_etherdev(sizeof(*sky2));
> +     unsigned char *iap, tmpaddr[ETH_ALEN];
>  
>       if (!dev)
>               return NULL;
> @@ -4805,8 +4808,17 @@ static struct net_device *sky2_init_netdev(struct 
> sky2_hw *hw, unsigned port,
>  
>       dev->features |= dev->hw_features;
>  
> -     /* read the mac address */
> -     memcpy_fromio(dev->dev_addr, hw->regs + B2_MAC_1 + port * 8, ETH_ALEN);
> +     /* try to get mac address in the following order:
> +      * 1) from device tree data
> +      * 2) from internal registers set by bootloader
> +      */
> +     iap = of_get_mac_address(hw->pdev->dev.of_node);
> +     if (!iap) {
> +             memcpy_fromio(&tmpaddr, hw->regs + B2_MAC_1 + port * 8,
> +                           ETH_ALEN);
> +             iap = tmpaddr;
> +     }
> +     ether_addr_copy(dev->dev_addr, iap);

As Stephen Hemminger suggested do this like:

        iap = of_get_mac_address(hw->pdev->dev.of_node);
        if (iap)
                memcpy(dev->dev_addr, iap, ETH_ALEN);
        else
                memcpy_fromio(dev->dev_addr, hw->regs + B2_MAC_1 + port * 8,
                              ETH_ALEN);

That way you don't need the on-stack buffer.
--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to