Message ID | yq1r3x5vbh9.fsf@sermon.lab.mkp.net |
---|---|
State | Superseded, archived |
Delegated to: | David Miller |
Headers | show |
On Fri, 2014-11-14 at 14:16 -0500, Martin K. Petersen wrote: > > Attempt to look up the MAC address in Open Firmware on systems that > support it. If the "local-mac-address" property is not valid resort to > using the IDPROM value. > > Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com> Thanks Martin, I will add your patch to my queue.
Hello. On 11/14/2014 10:16 PM, Martin K. Petersen wrote: > Attempt to look up the MAC address in Open Firmware on systems that > support it. If the "local-mac-address" property is not valid resort to > using the IDPROM value. > Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com> > diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c > index d2df4e3d1032..365924124fab 100644 > --- a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c > +++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c [...] > @@ -7959,6 +7964,31 @@ int ixgbe_wol_supported(struct ixgbe_adapter *adapter, u16 device_id, > return is_wol_supported; > } > > +#ifdef CONFIG_OF > +/** > + * ixgbe_of_mac_addr - Look up MAC address in Open Firmware > + * @adapter: Pointer to adapter struct > + */ > +static void ixgbe_of_mac_addr(struct ixgbe_adapter *adapter) > +{ > + struct device_node *dp = pci_device_to_OF_node(adapter->pdev); > + struct ixgbe_hw *hw = &adapter->hw; > + const unsigned char *addr; > + int len; > + > + addr = of_get_property(dp, "local-mac-address", &len); > + if (addr && len == 6) { > + e_dev_info("Using OpenPROM MAC address\n"); > + memcpy(hw->mac.perm_addr, addr, 6); > + } > + > + if (!is_valid_ether_addr(hw->mac.perm_addr)) { > + e_dev_info("Using IDPROM MAC address\n"); > + memcpy(hw->mac.perm_addr, idprom->id_ethaddr, 6); > + } > +} > +#endif > + > /** > * ixgbe_probe - Device Initialization Routine > * @pdev: PCI device information struct > @@ -8223,6 +8253,10 @@ skip_sriov: > goto err_sw_init; > } > > +#ifdef CONFIG_OF > + ixgbe_of_mac_addr(adapter); > +#endif Eww... why not define the following above instead: #else static inline void ixgbe_of_mac_addr(struct ixgbe_adapter *adapter) {} #endif This is closer to what Documentation/SubmittingPatches suggests. WBR, Sergei -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
From: "Martin K. Petersen" <martin.petersen@oracle.com> Date: Fri, 14 Nov 2014 14:16:50 -0500 > +#ifdef CONFIG_OF > +#include <asm/idprom.h> > +#include <asm/prom.h> > +#endif CONFIG_OF doesn't imply the presence of idprom. idprom is completely sparc/m68k specific, whereas OF exists on many platforms other than sparc/m68k. -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On 11/14/2014 11:16 AM, Martin K. Petersen wrote: [snip] > +#ifdef CONFIG_OF > +/** > + * ixgbe_of_mac_addr - Look up MAC address in Open Firmware > + * @adapter: Pointer to adapter struct > + */ > +static void ixgbe_of_mac_addr(struct ixgbe_adapter *adapter) > +{ > + struct device_node *dp = pci_device_to_OF_node(adapter->pdev); > + struct ixgbe_hw *hw = &adapter->hw; > + const unsigned char *addr; > + int len; > + > + addr = of_get_property(dp, "local-mac-address", &len); > + if (addr && len == 6) { > + e_dev_info("Using OpenPROM MAC address\n"); > + memcpy(hw->mac.perm_addr, addr, 6); > + } Cannot you use of_get_mac_address() here which does iterate through all the OF standard ways to specify a MAC address: mac-address, local-mac-address and address? Benefit is that this will work for all DT-enabled platforms. > + > + if (!is_valid_ether_addr(hw->mac.perm_addr)) { > + e_dev_info("Using IDPROM MAC address\n"); > + memcpy(hw->mac.perm_addr, idprom->id_ethaddr, 6); > + } > +} > +#endif > + > /** > * ixgbe_probe - Device Initialization Routine > * @pdev: PCI device information struct > @@ -8223,6 +8253,10 @@ skip_sriov: > goto err_sw_init; > } > > +#ifdef CONFIG_OF > + ixgbe_of_mac_addr(adapter); > +#endif > + > memcpy(netdev->dev_addr, hw->mac.perm_addr, netdev->addr_len); > > if (!is_valid_ether_addr(netdev->dev_addr)) { > -- > To unsubscribe from this list: send the line "unsubscribe netdev" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html > -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c index d2df4e3d1032..365924124fab 100644 --- a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c +++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c @@ -50,6 +50,11 @@ #include <linux/prefetch.h> #include <scsi/fc/fc_fcoe.h> +#ifdef CONFIG_OF +#include <asm/idprom.h> +#include <asm/prom.h> +#endif + #include "ixgbe.h" #include "ixgbe_common.h" #include "ixgbe_dcb_82599.h" @@ -7959,6 +7964,31 @@ int ixgbe_wol_supported(struct ixgbe_adapter *adapter, u16 device_id, return is_wol_supported; } +#ifdef CONFIG_OF +/** + * ixgbe_of_mac_addr - Look up MAC address in Open Firmware + * @adapter: Pointer to adapter struct + */ +static void ixgbe_of_mac_addr(struct ixgbe_adapter *adapter) +{ + struct device_node *dp = pci_device_to_OF_node(adapter->pdev); + struct ixgbe_hw *hw = &adapter->hw; + const unsigned char *addr; + int len; + + addr = of_get_property(dp, "local-mac-address", &len); + if (addr && len == 6) { + e_dev_info("Using OpenPROM MAC address\n"); + memcpy(hw->mac.perm_addr, addr, 6); + } + + if (!is_valid_ether_addr(hw->mac.perm_addr)) { + e_dev_info("Using IDPROM MAC address\n"); + memcpy(hw->mac.perm_addr, idprom->id_ethaddr, 6); + } +} +#endif + /** * ixgbe_probe - Device Initialization Routine * @pdev: PCI device information struct @@ -8223,6 +8253,10 @@ skip_sriov: goto err_sw_init; } +#ifdef CONFIG_OF + ixgbe_of_mac_addr(adapter); +#endif + memcpy(netdev->dev_addr, hw->mac.perm_addr, netdev->addr_len); if (!is_valid_ether_addr(netdev->dev_addr)) {
Attempt to look up the MAC address in Open Firmware on systems that support it. If the "local-mac-address" property is not valid resort to using the IDPROM value. Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com> -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html