#include <linux/bcma/bcma.h>
 #include <linux/brcmphy.h>
 #include <linux/etherdevice.h>
+#include <linux/of_net.h>
 #include "bgmac.h"
 
 static inline bool bgmac_is_bcm4707_family(struct bcma_device *core)
        struct ssb_sprom *sprom = &core->bus->sprom;
        struct mii_bus *mii_bus;
        struct bgmac *bgmac;
-       u8 *mac;
+       const u8 *mac = NULL;
        int err;
 
        bgmac = bgmac_alloc(&core->dev);
 
        bcma_set_drvdata(core, bgmac);
 
-       switch (core->core_unit) {
-       case 0:
-               mac = sprom->et0mac;
-               break;
-       case 1:
-               mac = sprom->et1mac;
-               break;
-       case 2:
-               mac = sprom->et2mac;
-               break;
-       default:
-               dev_err(bgmac->dev, "Unsupported core_unit %d\n",
-                       core->core_unit);
-               err = -ENOTSUPP;
-               goto err;
+       if (bgmac->dev->of_node)
+               mac = of_get_mac_address(bgmac->dev->of_node);
+
+       /* If no MAC address assigned via device tree, check SPROM */
+       if (!mac) {
+               switch (core->core_unit) {
+               case 0:
+                       mac = sprom->et0mac;
+                       break;
+               case 1:
+                       mac = sprom->et1mac;
+                       break;
+               case 2:
+                       mac = sprom->et2mac;
+                       break;
+               default:
+                       dev_err(bgmac->dev, "Unsupported core_unit %d\n",
+                               core->core_unit);
+                       err = -ENOTSUPP;
+                       goto err;
+               }
        }
 
        ether_addr_copy(bgmac->net_dev->dev_addr, mac);