From mboxrd@z Thu Jan 1 00:00:00 1970 From: Sergei Shtylyov Subject: Re: [PATCH] net: sky2: allow mac to come from dt Date: Wed, 05 Mar 2014 21:15:51 +0300 Message-ID: <531769D7.80507@cogentembedded.com> References: <1394000535-25559-1-git-send-email-tharvey@gateworks.com> <5317318B.5020406@cogentembedded.com> Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: 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 Hello. On 03/05/2014 06:38 PM, 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. >> I highly doubt that "[local-]mac-address" prop would be added to >> (autodiscovered) PCI device node. > I wouldn't have done this if I didn't need it ;) > The u-boot bootloader will do this for boards supporting devicetree. > Specifically, it will take the ethaddr/eth apply a local-mac-address property to the devicetree using ethernet > devicetree aliases. This is to support MAC addresses coming from > EEPROM, eFUSE, etc. The key here is that it doesn't need to know > where in the tree the eth devices are because it makes use of the > aliases node. > This of course requires that you do have an ethernet alias to your > PCI based network device in your dt which I agree may seem strange for > an auto-probed bus, but in the case of a bootloader without PCI > support and/or sky2 support this seems the proper way to get the MAC > address from the bootloader to the driver. Ah, thanks for the explanation. >> [...] >>> @@ -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)) { >>> + struct device_node *np = hw->pdev->dev.of_node; >>> + if (np) >>> + iap = (unsigned char *) of_get_mac_address(np); >>> + } >>> + >>> + /* 2) mac registers set by bootloader >>> + */ Why not make it one-line? And it's kind of repetitive. >>> + if (!iap || !is_valid_ether_addr(iap)) { >>> + memcpy_fromio(&tmpaddr, hw->regs + B2_MAC_1 + port * 8, >>> + ETH_ALEN); >> This line should start right under & on the previous line. > agreed - not sure why checkpatch.pl didn't catch that It catches this only with --strict option. >> WBR, Sergei > Thanks for the review! Not at all. > Tim WBR, Sergei