From mboxrd@z Thu Jan 1 00:00:00 1970 From: Rob Herring Subject: Re: [PATCH] net: sky2: allow mac to come from dt Date: Wed, 5 Mar 2014 00:32:36 -0600 Message-ID: References: <1394000535-25559-1-git-send-email-tharvey@gateworks.com> Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Return-path: In-Reply-To: <1394000535-25559-1-git-send-email-tharvey@gateworks.com> Sender: netdev-owner@vger.kernel.org To: Tim Harvey Cc: Stephen Hemminger , netdev , "devicetree@vger.kernel.org" , Grant Likely , Rob Herring List-Id: devicetree@vger.kernel.org On Wed, Mar 5, 2014 at 12:22 AM, Tim Harvey wrote: > The driver reads the mac address from the device registers which would > need to have been programmed by the bootloader. This patch adds > the ability to pull the mac from devicetree via the pci device dt node. > > Signed-off-by: Tim Harvey > Cc: netdev@vger.kernel.org > Cc: devicetree@vger.kernel.org > Cc: Grant Likely > Cc: Rob Herring > --- > drivers/net/ethernet/marvell/sky2.c | 24 +++++++++++++++++++++++- > 1 file changed, 23 insertions(+), 1 deletion(-) > > diff --git a/drivers/net/ethernet/marvell/sky2.c b/drivers/net/ethernet/marvell/sky2.c > index 55a37ae..bff493a 100644 > --- a/drivers/net/ethernet/marvell/sky2.c > +++ b/drivers/net/ethernet/marvell/sky2.c > @@ -44,6 +44,8 @@ > #include > #include > #include > +#include > +#include > > #include > > @@ -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,27 @@ static struct net_device *sky2_init_netdev(struct sky2_hw *hw, unsigned port, > > dev->features |= dev->hw_features; > > + /* try to get mac address in the following order: > + * 1) from device tree data > + * 2) from internal registers set by bootloader > + */ > + iap = NULL; > + if (IS_ENABLED(CONFIG_OF)) { This shouldn't be needed. > + struct device_node *np = hw->pdev->dev.of_node; > + if (np) > + iap = (unsigned char *) of_get_mac_address(np); > + } This should all just be 1 line. of_get_mac_address should just return NULL if !CONFIG_OF or np == NULL. > + > + /* 2) mac registers set by bootloader > + */ > + if (!iap || !is_valid_ether_addr(iap)) { Perhaps is_valid_ether_addr check should also be moved into of_get_mac_address. Rob