On Fri, Mar 7, 2014 at 11:36 AM, David Miller <davem@xxxxxxxxxxxxx> wrote: > From: Tim Harvey <tharvey@xxxxxxxxxxxxx> > 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. Thanks for the suggestion - I will re-send a v3 shortly. Tim -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html