Skip to contentSkip to conversation

igb: allow setting MAC address on i211 using a device tree blob V2

Intel-wired-lan John Holland 2 participants 4 messages Feb 13, 2016 – Feb 16, 2016

Subsystems (3)
lore
Share & tools
lore
#0 lore raw

Hello,

The Intel i211 LOM pcie ethernet controllers' iNVM operates as an OTP and has no externel EEPROM interface [1]. The following allows the driver to pickup the MAC address from a device tree blob when CONFIG_OF has been enabled.

[1]
http://www.intel.com/content/www/us/en/embedded/products/networking/i211-ethernet-controller-datasheet.html

Changes V2
- Restrict searching for compatible devices to current pci device.

---

  drivers/net/ethernet/intel/igb/igb_main.c | 30 
++++++++++++++++++++++++++++++
  1 file changed, 30 insertions(+)
(quoted diff) +0 -0

b/drivers/net/ethernet/intel/igb/igb_main.c
index 31e5f39..f7788fa 100644

drivers/net/ethernet/intel/igb/igb_main.c +25 -0
@@ -56,6 +56,11 @@
  #include <linux/i2c.h>
  #include "igb.h"
 
+#ifdef CONFIG_OF
+#include <linux/of_net.h>
+#include <linux/etherdevice.h>
+#endif
+
  #define MAJ 5
  #define MIN 3
  #define BUILD 0
@@ -2216,6 +2221,26 @@ static s32 igb_init_i2c(struct igb_adapter *adapter)
         return status;
  }
 
+#ifdef CONFIG_OF
+/**
+ *  igb_read_mac_addr_dts - Read mac address from the device tree blob
+ *  @dev: pointer to device structure
+ *  @mac_addr: pointer to found mac address
+ **/
+static void igb_read_mac_addr_dts(const struct device *dev, u8 *mac_addr)
+{
+       const u8 *mac;
+       struct device_node *dn;
+
+       dn = of_find_compatible_node(dev->of_node, NULL, "intel,i210");
+       if (dn) {
+               mac = of_get_mac_address(dn);
+               if (mac)
+                       ether_addr_copy(mac_addr, mac);
+       }
+}
+#endif
+
  /**
   *  igb_probe - Device Initialization Routine
   *  @pdev: PCI device information struct
@@ -2420,6 +2445,11 @@ static int igb_probe(struct pci_dev *pdev, const 

struct pci_device_id *ent)

         if (hw->mac.ops.read_mac_addr(hw))
                 dev_err(&pdev->dev, "NVM Read Error\n");

+#ifdef CONFIG_OF
+ if (!is_valid_ether_addr(hw->mac.addr))
+ igb_read_mac_addr_dts(&pdev->dev, hw->mac.addr);
+#endif
+

         memcpy(netdev->dev_addr, hw->mac.addr, netdev->addr_len);

         if (!is_valid_ether_addr(netdev->dev_addr)) {
#1 lore raw
Quoted 7 lines · John Holland

Hello,

The Intel i211 LOM pcie ethernet controllers' iNVM operates as an OTP and has no externel EEPROM interface [1]. The following allows the driver to pickup the MAC address from a device tree blob when CONFIG_OF has been enabled.

Quoted 6 lines

[1] http://www.intel.com/content/www/us/en/embedded/products/networking/i211-ethernet-controller-datasheet.html

Changes V2
- Restrict searching for compatible devices to current pci device.

Hi John

Thanks for fixing multiple device support.

Please could you add documentation in Documentation/devicetree/bindings/net. I know these are standard properties, but it is somewhat unusual to attach them to a PCI node, so having an example would be good.

Thanks
Andrew

#2 lore raw
Quoted 22 lines · Andrew Lunn
Quoted 9 lines · John Holland

Hello,

The Intel i211 LOM pcie ethernet controllers' iNVM operates as an OTP and has no externel EEPROM interface [1]. The following allows the driver to pickup the MAC address from a device tree blob when CONFIG_OF has been enabled.

Quoted 6 lines

[1] http://www.intel.com/content/www/us/en/embedded/products/networking/i211-ethernet-controller-datasheet.html

Changes V2
- Restrict searching for compatible devices to current pci device.

Hi John

Thanks for fixing multiple device support.

Quoted 7 lines

Please could you add documentation in Documentation/devicetree/bindings/net. I know these are standard properties, but it is somewhat unusual to attach them to a PCI node, so having an example would be good.

Thanks
Andrew

Odd that the marvel sky2 allows just that, but supplies no documentation.

I can supply some kind of usage description/example, showing how to use this feature to pull in the MAC address from u-boot and route it to the i210. Just uncertain as how to name the respective file. igb.txt or i210.txt come to mind. Do you prefer one over the other?

John

#3 lore raw
Quoted 5 lines

I can supply some kind of usage description/example, showing how to use this feature to pull in the MAC address from u-boot and route it to the i210. Just uncertain as how to name the respective file. igb.txt or i210.txt come to mind. Do you prefer one over the other?

Hi John

It is quite common to name it after the compatible string, so intel,i210.txt

Thanks
Andrew