return -ENOENT;
        }
  
-       maddr = of_get_property(dn, "mac-address", NULL);
 -      maddr = get_property(dn, "local-mac-address", NULL);
++      maddr = of_get_property(dn, "local-mac-address", NULL);
+ 
+       /* Fall back to mac-address for older firmware */
+       if (maddr == NULL)
 -              maddr = get_property(dn, "mac-address", NULL);
++              maddr = of_get_property(dn, "mac-address", NULL);
+ 
        if (maddr == NULL) {
                dev_warn(&pdev->dev,
                         "no mac address in device tree, not configuring\n");
        return IRQ_HANDLED;
  }
  
 -      ph = get_property(dn, "phy-handle", NULL);
+ static void pasemi_adjust_link(struct net_device *dev)
+ {
+       struct pasemi_mac *mac = netdev_priv(dev);
+       int msg;
+       unsigned int flags;
+       unsigned int new_flags;
+ 
+       if (!mac->phydev->link) {
+               /* If no link, MAC speed settings don't matter. Just report
+                * link down and return.
+                */
+               if (mac->link && netif_msg_link(mac))
+                       printk(KERN_INFO "%s: Link is down.\n", dev->name);
+ 
+               netif_carrier_off(dev);
+               mac->link = 0;
+ 
+               return;
+       } else
+               netif_carrier_on(dev);
+ 
+       pci_read_config_dword(mac->pdev, PAS_MAC_CFG_PCFG, &flags);
+       new_flags = flags & ~(PAS_MAC_CFG_PCFG_HD | PAS_MAC_CFG_PCFG_SPD_M |
+                             PAS_MAC_CFG_PCFG_TSR_M);
+ 
+       if (!mac->phydev->duplex)
+               new_flags |= PAS_MAC_CFG_PCFG_HD;
+ 
+       switch (mac->phydev->speed) {
+       case 1000:
+               new_flags |= PAS_MAC_CFG_PCFG_SPD_1G |
+                            PAS_MAC_CFG_PCFG_TSR_1G;
+               break;
+       case 100:
+               new_flags |= PAS_MAC_CFG_PCFG_SPD_100M |
+                            PAS_MAC_CFG_PCFG_TSR_100M;
+               break;
+       case 10:
+               new_flags |= PAS_MAC_CFG_PCFG_SPD_10M |
+                            PAS_MAC_CFG_PCFG_TSR_10M;
+               break;
+       default:
+               printk("Unsupported speed %d\n", mac->phydev->speed);
+       }
+ 
+       /* Print on link or speed/duplex change */
+       msg = mac->link != mac->phydev->link || flags != new_flags;
+ 
+       mac->duplex = mac->phydev->duplex;
+       mac->speed = mac->phydev->speed;
+       mac->link = mac->phydev->link;
+ 
+       if (new_flags != flags)
+               pci_write_config_dword(mac->pdev, PAS_MAC_CFG_PCFG, new_flags);
+ 
+       if (msg && netif_msg_link(mac))
+               printk(KERN_INFO "%s: Link is up at %d Mbps, %s duplex.\n",
+                      dev->name, mac->speed, mac->duplex ? "full" : "half");
+ }
+ 
+ static int pasemi_mac_phy_init(struct net_device *dev)
+ {
+       struct pasemi_mac *mac = netdev_priv(dev);
+       struct device_node *dn, *phy_dn;
+       struct phy_device *phydev;
+       unsigned int phy_id;
+       const phandle *ph;
+       const unsigned int *prop;
+       struct resource r;
+       int ret;
+ 
+       dn = pci_device_to_OF_node(mac->pdev);
 -      prop = get_property(phy_dn, "reg", NULL);
++      ph = of_get_property(dn, "phy-handle", NULL);
+       if (!ph)
+               return -ENODEV;
+       phy_dn = of_find_node_by_phandle(*ph);
+ 
++      prop = of_get_property(phy_dn, "reg", NULL);
+       ret = of_address_to_resource(phy_dn->parent, 0, &r);
+       if (ret)
+               goto err;
+ 
+       phy_id = *prop;
+       snprintf(mac->phy_id, BUS_ID_SIZE, PHY_ID_FMT, (int)r.start, phy_id);
+ 
+       of_node_put(phy_dn);
+ 
+       mac->link = 0;
+       mac->speed = 0;
+       mac->duplex = -1;
+ 
+       phydev = phy_connect(dev, mac->phy_id, &pasemi_adjust_link, 0, PHY_INTERFACE_MODE_SGMII);
+ 
+       if (IS_ERR(phydev)) {
+               printk(KERN_ERR "%s: Could not attach to phy\n", dev->name);
+               return PTR_ERR(phydev);
+       }
+ 
+       mac->phydev = phydev;
+ 
+       return 0;
+ 
+ err:
+       of_node_put(phy_dn);
+       return -ENODEV;
+ }
+ 
+ 
  static int pasemi_mac_open(struct net_device *dev)
  {
        struct pasemi_mac *mac = netdev_priv(dev);