]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - drivers/net/forcedeth.c
p54pci: update receive dma buffers before and after processing
[karo-tx-linux.git] / drivers / net / forcedeth.c
index e5f9d4b5ee05ddc1fb948f7220500872479ae785..af09296ef0ddc974d2bb60d0c66d7cd8b75fa4cd 100644 (file)
@@ -39,6 +39,9 @@
  * DEV_NEED_TIMERIRQ will not harm you on sane hardware, only generating a few
  * superfluous timer interrupts from the nic.
  */
+
+#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
+
 #define FORCEDETH_VERSION              "0.64"
 #define DRV_NAME                       "forcedeth"
 
 #include <asm/irq.h>
 #include <asm/system.h>
 
-#if 0
-#define dprintk                        printk
-#else
-#define dprintk(x...)          do { } while (0)
-#endif
-
 #define TX_WORK_PER_LOOP  64
 #define RX_WORK_PER_LOOP  64
 
@@ -1139,22 +1136,14 @@ static int mii_rw(struct net_device *dev, int addr, int miireg, int value)
 
        if (reg_delay(dev, NvRegMIIControl, NVREG_MIICTL_INUSE, 0,
                        NV_MIIPHY_DELAY, NV_MIIPHY_DELAYMAX)) {
-               dprintk(KERN_DEBUG "%s: mii_rw of reg %d at PHY %d timed out.\n",
-                       dev->name, miireg, addr);
                retval = -1;
        } else if (value != MII_READ) {
                /* it was a write operation - fewer failures are detectable */
-               dprintk(KERN_DEBUG "%s: mii_rw wrote 0x%x to reg %d at PHY %d\n",
-                               dev->name, value, miireg, addr);
                retval = 0;
        } else if (readl(base + NvRegMIIStatus) & NVREG_MIISTAT_ERROR) {
-               dprintk(KERN_DEBUG "%s: mii_rw of reg %d at PHY %d failed.\n",
-                               dev->name, miireg, addr);
                retval = -1;
        } else {
                retval = readl(base + NvRegMIIData);
-               dprintk(KERN_DEBUG "%s: mii_rw read from reg %d at PHY %d: 0x%x.\n",
-                               dev->name, miireg, addr, retval);
        }
 
        return retval;
@@ -1184,106 +1173,239 @@ static int phy_reset(struct net_device *dev, u32 bmcr_setup)
        return 0;
 }
 
+static int init_realtek_8211b(struct net_device *dev, struct fe_priv *np)
+{
+       static const struct {
+               int reg;
+               int init;
+       } ri[] = {
+               { PHY_REALTEK_INIT_REG1, PHY_REALTEK_INIT1 },
+               { PHY_REALTEK_INIT_REG2, PHY_REALTEK_INIT2 },
+               { PHY_REALTEK_INIT_REG1, PHY_REALTEK_INIT3 },
+               { PHY_REALTEK_INIT_REG3, PHY_REALTEK_INIT4 },
+               { PHY_REALTEK_INIT_REG4, PHY_REALTEK_INIT5 },
+               { PHY_REALTEK_INIT_REG5, PHY_REALTEK_INIT6 },
+               { PHY_REALTEK_INIT_REG1, PHY_REALTEK_INIT1 },
+       };
+       int i;
+
+       for (i = 0; i < ARRAY_SIZE(ri); i++) {
+               if (mii_rw(dev, np->phyaddr, ri[i].reg, ri[i].init))
+                       return PHY_ERROR;
+       }
+
+       return 0;
+}
+
+static int init_realtek_8211c(struct net_device *dev, struct fe_priv *np)
+{
+       u32 reg;
+       u8 __iomem *base = get_hwbase(dev);
+       u32 powerstate = readl(base + NvRegPowerState2);
+
+       /* need to perform hw phy reset */
+       powerstate |= NVREG_POWERSTATE2_PHY_RESET;
+       writel(powerstate, base + NvRegPowerState2);
+       msleep(25);
+
+       powerstate &= ~NVREG_POWERSTATE2_PHY_RESET;
+       writel(powerstate, base + NvRegPowerState2);
+       msleep(25);
+
+       reg = mii_rw(dev, np->phyaddr, PHY_REALTEK_INIT_REG6, MII_READ);
+       reg |= PHY_REALTEK_INIT9;
+       if (mii_rw(dev, np->phyaddr, PHY_REALTEK_INIT_REG6, reg))
+               return PHY_ERROR;
+       if (mii_rw(dev, np->phyaddr,
+                  PHY_REALTEK_INIT_REG1, PHY_REALTEK_INIT10))
+               return PHY_ERROR;
+       reg = mii_rw(dev, np->phyaddr, PHY_REALTEK_INIT_REG7, MII_READ);
+       if (!(reg & PHY_REALTEK_INIT11)) {
+               reg |= PHY_REALTEK_INIT11;
+               if (mii_rw(dev, np->phyaddr, PHY_REALTEK_INIT_REG7, reg))
+                       return PHY_ERROR;
+       }
+       if (mii_rw(dev, np->phyaddr,
+                  PHY_REALTEK_INIT_REG1, PHY_REALTEK_INIT1))
+               return PHY_ERROR;
+
+       return 0;
+}
+
+static int init_realtek_8201(struct net_device *dev, struct fe_priv *np)
+{
+       u32 phy_reserved;
+
+       if (np->driver_data & DEV_NEED_PHY_INIT_FIX) {
+               phy_reserved = mii_rw(dev, np->phyaddr,
+                                     PHY_REALTEK_INIT_REG6, MII_READ);
+               phy_reserved |= PHY_REALTEK_INIT7;
+               if (mii_rw(dev, np->phyaddr,
+                          PHY_REALTEK_INIT_REG6, phy_reserved))
+                       return PHY_ERROR;
+       }
+
+       return 0;
+}
+
+static int init_realtek_8201_cross(struct net_device *dev, struct fe_priv *np)
+{
+       u32 phy_reserved;
+
+       if (phy_cross == NV_CROSSOVER_DETECTION_DISABLED) {
+               if (mii_rw(dev, np->phyaddr,
+                          PHY_REALTEK_INIT_REG1, PHY_REALTEK_INIT3))
+                       return PHY_ERROR;
+               phy_reserved = mii_rw(dev, np->phyaddr,
+                                     PHY_REALTEK_INIT_REG2, MII_READ);
+               phy_reserved &= ~PHY_REALTEK_INIT_MSK1;
+               phy_reserved |= PHY_REALTEK_INIT3;
+               if (mii_rw(dev, np->phyaddr,
+                          PHY_REALTEK_INIT_REG2, phy_reserved))
+                       return PHY_ERROR;
+               if (mii_rw(dev, np->phyaddr,
+                          PHY_REALTEK_INIT_REG1, PHY_REALTEK_INIT1))
+                       return PHY_ERROR;
+       }
+
+       return 0;
+}
+
+static int init_cicada(struct net_device *dev, struct fe_priv *np,
+                      u32 phyinterface)
+{
+       u32 phy_reserved;
+
+       if (phyinterface & PHY_RGMII) {
+               phy_reserved = mii_rw(dev, np->phyaddr, MII_RESV1, MII_READ);
+               phy_reserved &= ~(PHY_CICADA_INIT1 | PHY_CICADA_INIT2);
+               phy_reserved |= (PHY_CICADA_INIT3 | PHY_CICADA_INIT4);
+               if (mii_rw(dev, np->phyaddr, MII_RESV1, phy_reserved))
+                       return PHY_ERROR;
+               phy_reserved = mii_rw(dev, np->phyaddr, MII_NCONFIG, MII_READ);
+               phy_reserved |= PHY_CICADA_INIT5;
+               if (mii_rw(dev, np->phyaddr, MII_NCONFIG, phy_reserved))
+                       return PHY_ERROR;
+       }
+       phy_reserved = mii_rw(dev, np->phyaddr, MII_SREVISION, MII_READ);
+       phy_reserved |= PHY_CICADA_INIT6;
+       if (mii_rw(dev, np->phyaddr, MII_SREVISION, phy_reserved))
+               return PHY_ERROR;
+
+       return 0;
+}
+
+static int init_vitesse(struct net_device *dev, struct fe_priv *np)
+{
+       u32 phy_reserved;
+
+       if (mii_rw(dev, np->phyaddr,
+                  PHY_VITESSE_INIT_REG1, PHY_VITESSE_INIT1))
+               return PHY_ERROR;
+       if (mii_rw(dev, np->phyaddr,
+                  PHY_VITESSE_INIT_REG2, PHY_VITESSE_INIT2))
+               return PHY_ERROR;
+       phy_reserved = mii_rw(dev, np->phyaddr,
+                             PHY_VITESSE_INIT_REG4, MII_READ);
+       if (mii_rw(dev, np->phyaddr, PHY_VITESSE_INIT_REG4, phy_reserved))
+               return PHY_ERROR;
+       phy_reserved = mii_rw(dev, np->phyaddr,
+                             PHY_VITESSE_INIT_REG3, MII_READ);
+       phy_reserved &= ~PHY_VITESSE_INIT_MSK1;
+       phy_reserved |= PHY_VITESSE_INIT3;
+       if (mii_rw(dev, np->phyaddr, PHY_VITESSE_INIT_REG3, phy_reserved))
+               return PHY_ERROR;
+       if (mii_rw(dev, np->phyaddr,
+                  PHY_VITESSE_INIT_REG2, PHY_VITESSE_INIT4))
+               return PHY_ERROR;
+       if (mii_rw(dev, np->phyaddr,
+                  PHY_VITESSE_INIT_REG2, PHY_VITESSE_INIT5))
+               return PHY_ERROR;
+       phy_reserved = mii_rw(dev, np->phyaddr,
+                             PHY_VITESSE_INIT_REG4, MII_READ);
+       phy_reserved &= ~PHY_VITESSE_INIT_MSK1;
+       phy_reserved |= PHY_VITESSE_INIT3;
+       if (mii_rw(dev, np->phyaddr, PHY_VITESSE_INIT_REG4, phy_reserved))
+               return PHY_ERROR;
+       phy_reserved = mii_rw(dev, np->phyaddr,
+                             PHY_VITESSE_INIT_REG3, MII_READ);
+       if (mii_rw(dev, np->phyaddr, PHY_VITESSE_INIT_REG3, phy_reserved))
+               return PHY_ERROR;
+       if (mii_rw(dev, np->phyaddr,
+                  PHY_VITESSE_INIT_REG2, PHY_VITESSE_INIT6))
+               return PHY_ERROR;
+       if (mii_rw(dev, np->phyaddr,
+                  PHY_VITESSE_INIT_REG2, PHY_VITESSE_INIT7))
+               return PHY_ERROR;
+       phy_reserved = mii_rw(dev, np->phyaddr,
+                             PHY_VITESSE_INIT_REG4, MII_READ);
+       if (mii_rw(dev, np->phyaddr, PHY_VITESSE_INIT_REG4, phy_reserved))
+               return PHY_ERROR;
+       phy_reserved = mii_rw(dev, np->phyaddr,
+                             PHY_VITESSE_INIT_REG3, MII_READ);
+       phy_reserved &= ~PHY_VITESSE_INIT_MSK2;
+       phy_reserved |= PHY_VITESSE_INIT8;
+       if (mii_rw(dev, np->phyaddr, PHY_VITESSE_INIT_REG3, phy_reserved))
+               return PHY_ERROR;
+       if (mii_rw(dev, np->phyaddr,
+                  PHY_VITESSE_INIT_REG2, PHY_VITESSE_INIT9))
+               return PHY_ERROR;
+       if (mii_rw(dev, np->phyaddr,
+                  PHY_VITESSE_INIT_REG1, PHY_VITESSE_INIT10))
+               return PHY_ERROR;
+
+       return 0;
+}
+
 static int phy_init(struct net_device *dev)
 {
        struct fe_priv *np = get_nvpriv(dev);
        u8 __iomem *base = get_hwbase(dev);
-       u32 phyinterface, phy_reserved, mii_status, mii_control, mii_control_1000, reg;
+       u32 phyinterface;
+       u32 mii_status, mii_control, mii_control_1000, reg;
 
        /* phy errata for E3016 phy */
        if (np->phy_model == PHY_MODEL_MARVELL_E3016) {
                reg = mii_rw(dev, np->phyaddr, MII_NCONFIG, MII_READ);
                reg &= ~PHY_MARVELL_E3016_INITMASK;
                if (mii_rw(dev, np->phyaddr, MII_NCONFIG, reg)) {
-                       printk(KERN_INFO "%s: phy write to errata reg failed.\n", pci_name(np->pci_dev));
+                       netdev_info(dev, "%s: phy write to errata reg failed\n",
+                                   pci_name(np->pci_dev));
                        return PHY_ERROR;
                }
        }
        if (np->phy_oui == PHY_OUI_REALTEK) {
                if (np->phy_model == PHY_MODEL_REALTEK_8211 &&
                    np->phy_rev == PHY_REV_REALTEK_8211B) {
-                       if (mii_rw(dev, np->phyaddr, PHY_REALTEK_INIT_REG1, PHY_REALTEK_INIT1)) {
-                               printk(KERN_INFO "%s: phy init failed.\n", pci_name(np->pci_dev));
+                       if (init_realtek_8211b(dev, np)) {
+                               netdev_info(dev, "%s: phy init failed\n",
+                                           pci_name(np->pci_dev));
                                return PHY_ERROR;
                        }
-                       if (mii_rw(dev, np->phyaddr, PHY_REALTEK_INIT_REG2, PHY_REALTEK_INIT2)) {
-                               printk(KERN_INFO "%s: phy init failed.\n", pci_name(np->pci_dev));
+               } else if (np->phy_model == PHY_MODEL_REALTEK_8211 &&
+                          np->phy_rev == PHY_REV_REALTEK_8211C) {
+                       if (init_realtek_8211c(dev, np)) {
+                               netdev_info(dev, "%s: phy init failed\n",
+                                           pci_name(np->pci_dev));
                                return PHY_ERROR;
                        }
-                       if (mii_rw(dev, np->phyaddr, PHY_REALTEK_INIT_REG1, PHY_REALTEK_INIT3)) {
-                               printk(KERN_INFO "%s: phy init failed.\n", pci_name(np->pci_dev));
+               } else if (np->phy_model == PHY_MODEL_REALTEK_8201) {
+                       if (init_realtek_8201(dev, np)) {
+                               netdev_info(dev, "%s: phy init failed\n",
+                                           pci_name(np->pci_dev));
                                return PHY_ERROR;
                        }
-                       if (mii_rw(dev, np->phyaddr, PHY_REALTEK_INIT_REG3, PHY_REALTEK_INIT4)) {
-                               printk(KERN_INFO "%s: phy init failed.\n", pci_name(np->pci_dev));
-                               return PHY_ERROR;
-                       }
-                       if (mii_rw(dev, np->phyaddr, PHY_REALTEK_INIT_REG4, PHY_REALTEK_INIT5)) {
-                               printk(KERN_INFO "%s: phy init failed.\n", pci_name(np->pci_dev));
-                               return PHY_ERROR;
-                       }
-                       if (mii_rw(dev, np->phyaddr, PHY_REALTEK_INIT_REG5, PHY_REALTEK_INIT6)) {
-                               printk(KERN_INFO "%s: phy init failed.\n", pci_name(np->pci_dev));
-                               return PHY_ERROR;
-                       }
-                       if (mii_rw(dev, np->phyaddr, PHY_REALTEK_INIT_REG1, PHY_REALTEK_INIT1)) {
-                               printk(KERN_INFO "%s: phy init failed.\n", pci_name(np->pci_dev));
-                               return PHY_ERROR;
-                       }
-               }
-               if (np->phy_model == PHY_MODEL_REALTEK_8211 &&
-                   np->phy_rev == PHY_REV_REALTEK_8211C) {
-                       u32 powerstate = readl(base + NvRegPowerState2);
-
-                       /* need to perform hw phy reset */
-                       powerstate |= NVREG_POWERSTATE2_PHY_RESET;
-                       writel(powerstate, base + NvRegPowerState2);
-                       msleep(25);
-
-                       powerstate &= ~NVREG_POWERSTATE2_PHY_RESET;
-                       writel(powerstate, base + NvRegPowerState2);
-                       msleep(25);
-
-                       reg = mii_rw(dev, np->phyaddr, PHY_REALTEK_INIT_REG6, MII_READ);
-                       reg |= PHY_REALTEK_INIT9;
-                       if (mii_rw(dev, np->phyaddr, PHY_REALTEK_INIT_REG6, reg)) {
-                               printk(KERN_INFO "%s: phy init failed.\n", pci_name(np->pci_dev));
-                               return PHY_ERROR;
-                       }
-                       if (mii_rw(dev, np->phyaddr, PHY_REALTEK_INIT_REG1, PHY_REALTEK_INIT10)) {
-                               printk(KERN_INFO "%s: phy init failed.\n", pci_name(np->pci_dev));
-                               return PHY_ERROR;
-                       }
-                       reg = mii_rw(dev, np->phyaddr, PHY_REALTEK_INIT_REG7, MII_READ);
-                       if (!(reg & PHY_REALTEK_INIT11)) {
-                               reg |= PHY_REALTEK_INIT11;
-                               if (mii_rw(dev, np->phyaddr, PHY_REALTEK_INIT_REG7, reg)) {
-                                       printk(KERN_INFO "%s: phy init failed.\n", pci_name(np->pci_dev));
-                                       return PHY_ERROR;
-                               }
-                       }
-                       if (mii_rw(dev, np->phyaddr, PHY_REALTEK_INIT_REG1, PHY_REALTEK_INIT1)) {
-                               printk(KERN_INFO "%s: phy init failed.\n", pci_name(np->pci_dev));
-                               return PHY_ERROR;
-                       }
-               }
-               if (np->phy_model == PHY_MODEL_REALTEK_8201) {
-                       if (np->driver_data & DEV_NEED_PHY_INIT_FIX) {
-                               phy_reserved = mii_rw(dev, np->phyaddr, PHY_REALTEK_INIT_REG6, MII_READ);
-                               phy_reserved |= PHY_REALTEK_INIT7;
-                               if (mii_rw(dev, np->phyaddr, PHY_REALTEK_INIT_REG6, phy_reserved)) {
-                                       printk(KERN_INFO "%s: phy init failed.\n", pci_name(np->pci_dev));
-                                       return PHY_ERROR;
-                               }
-                       }
                }
        }
 
        /* set advertise register */
        reg = mii_rw(dev, np->phyaddr, MII_ADVERTISE, MII_READ);
-       reg |= (ADVERTISE_10HALF|ADVERTISE_10FULL|ADVERTISE_100HALF|ADVERTISE_100FULL|ADVERTISE_PAUSE_ASYM|ADVERTISE_PAUSE_CAP);
+       reg |= (ADVERTISE_10HALF | ADVERTISE_10FULL |
+               ADVERTISE_100HALF | ADVERTISE_100FULL |
+               ADVERTISE_PAUSE_ASYM | ADVERTISE_PAUSE_CAP);
        if (mii_rw(dev, np->phyaddr, MII_ADVERTISE, reg)) {
-               printk(KERN_INFO "%s: phy write to advertise failed.\n", pci_name(np->pci_dev));
+               netdev_info(dev, "%s: phy write to advertise failed\n",
+                           pci_name(np->pci_dev));
                return PHY_ERROR;
        }
 
@@ -1294,7 +1416,8 @@ static int phy_init(struct net_device *dev)
        mii_status = mii_rw(dev, np->phyaddr, MII_BMSR, MII_READ);
        if (mii_status & PHY_GIGABIT) {
                np->gigabit = PHY_GIGABIT;
-               mii_control_1000 = mii_rw(dev, np->phyaddr, MII_CTRL1000, MII_READ);
+               mii_control_1000 = mii_rw(dev, np->phyaddr,
+                                         MII_CTRL1000, MII_READ);
                mii_control_1000 &= ~ADVERTISE_1000HALF;
                if (phyinterface & PHY_RGMII)
                        mii_control_1000 |= ADVERTISE_1000FULL;
@@ -1302,7 +1425,8 @@ static int phy_init(struct net_device *dev)
                        mii_control_1000 &= ~ADVERTISE_1000FULL;
 
                if (mii_rw(dev, np->phyaddr, MII_CTRL1000, mii_control_1000)) {
-                       printk(KERN_INFO "%s: phy init failed.\n", pci_name(np->pci_dev));
+                       netdev_info(dev, "%s: phy init failed\n",
+                                   pci_name(np->pci_dev));
                        return PHY_ERROR;
                }
        } else
@@ -1317,7 +1441,8 @@ static int phy_init(struct net_device *dev)
                /* start autoneg since we already performed hw reset above */
                mii_control |= BMCR_ANRESTART;
                if (mii_rw(dev, np->phyaddr, MII_BMCR, mii_control)) {
-                       printk(KERN_INFO "%s: phy init failed\n", pci_name(np->pci_dev));
+                       netdev_info(dev, "%s: phy init failed\n",
+                                   pci_name(np->pci_dev));
                        return PHY_ERROR;
                }
        } else {
@@ -1325,165 +1450,42 @@ static int phy_init(struct net_device *dev)
                 * (certain phys need bmcr to be setup with reset)
                 */
                if (phy_reset(dev, mii_control)) {
-                       printk(KERN_INFO "%s: phy reset failed\n", pci_name(np->pci_dev));
+                       netdev_info(dev, "%s: phy reset failed\n",
+                                   pci_name(np->pci_dev));
                        return PHY_ERROR;
                }
        }
 
        /* phy vendor specific configuration */
-       if ((np->phy_oui == PHY_OUI_CICADA) && (phyinterface & PHY_RGMII)) {
-               phy_reserved = mii_rw(dev, np->phyaddr, MII_RESV1, MII_READ);
-               phy_reserved &= ~(PHY_CICADA_INIT1 | PHY_CICADA_INIT2);
-               phy_reserved |= (PHY_CICADA_INIT3 | PHY_CICADA_INIT4);
-               if (mii_rw(dev, np->phyaddr, MII_RESV1, phy_reserved)) {
-                       printk(KERN_INFO "%s: phy init failed.\n", pci_name(np->pci_dev));
-                       return PHY_ERROR;
-               }
-               phy_reserved = mii_rw(dev, np->phyaddr, MII_NCONFIG, MII_READ);
-               phy_reserved |= PHY_CICADA_INIT5;
-               if (mii_rw(dev, np->phyaddr, MII_NCONFIG, phy_reserved)) {
-                       printk(KERN_INFO "%s: phy init failed.\n", pci_name(np->pci_dev));
-                       return PHY_ERROR;
-               }
-       }
-       if (np->phy_oui == PHY_OUI_CICADA) {
-               phy_reserved = mii_rw(dev, np->phyaddr, MII_SREVISION, MII_READ);
-               phy_reserved |= PHY_CICADA_INIT6;
-               if (mii_rw(dev, np->phyaddr, MII_SREVISION, phy_reserved)) {
-                       printk(KERN_INFO "%s: phy init failed.\n", pci_name(np->pci_dev));
-                       return PHY_ERROR;
-               }
-       }
-       if (np->phy_oui == PHY_OUI_VITESSE) {
-               if (mii_rw(dev, np->phyaddr, PHY_VITESSE_INIT_REG1, PHY_VITESSE_INIT1)) {
-                       printk(KERN_INFO "%s: phy init failed.\n", pci_name(np->pci_dev));
-                       return PHY_ERROR;
-               }
-               if (mii_rw(dev, np->phyaddr, PHY_VITESSE_INIT_REG2, PHY_VITESSE_INIT2)) {
-                       printk(KERN_INFO "%s: phy init failed.\n", pci_name(np->pci_dev));
+       if ((np->phy_oui == PHY_OUI_CICADA)) {
+               if (init_cicada(dev, np, phyinterface)) {
+                       netdev_info(dev, "%s: phy init failed\n",
+                                   pci_name(np->pci_dev));
                        return PHY_ERROR;
                }
-               phy_reserved = mii_rw(dev, np->phyaddr, PHY_VITESSE_INIT_REG4, MII_READ);
-               if (mii_rw(dev, np->phyaddr, PHY_VITESSE_INIT_REG4, phy_reserved)) {
-                       printk(KERN_INFO "%s: phy init failed.\n", pci_name(np->pci_dev));
+       } else if (np->phy_oui == PHY_OUI_VITESSE) {
+               if (init_vitesse(dev, np)) {
+                       netdev_info(dev, "%s: phy init failed\n",
+                                   pci_name(np->pci_dev));
                        return PHY_ERROR;
                }
-               phy_reserved = mii_rw(dev, np->phyaddr, PHY_VITESSE_INIT_REG3, MII_READ);
-               phy_reserved &= ~PHY_VITESSE_INIT_MSK1;
-               phy_reserved |= PHY_VITESSE_INIT3;
-               if (mii_rw(dev, np->phyaddr, PHY_VITESSE_INIT_REG3, phy_reserved)) {
-                       printk(KERN_INFO "%s: phy init failed.\n", pci_name(np->pci_dev));
-                       return PHY_ERROR;
-               }
-               if (mii_rw(dev, np->phyaddr, PHY_VITESSE_INIT_REG2, PHY_VITESSE_INIT4)) {
-                       printk(KERN_INFO "%s: phy init failed.\n", pci_name(np->pci_dev));
-                       return PHY_ERROR;
-               }
-               if (mii_rw(dev, np->phyaddr, PHY_VITESSE_INIT_REG2, PHY_VITESSE_INIT5)) {
-                       printk(KERN_INFO "%s: phy init failed.\n", pci_name(np->pci_dev));
-                       return PHY_ERROR;
-               }
-               phy_reserved = mii_rw(dev, np->phyaddr, PHY_VITESSE_INIT_REG4, MII_READ);
-               phy_reserved &= ~PHY_VITESSE_INIT_MSK1;
-               phy_reserved |= PHY_VITESSE_INIT3;
-               if (mii_rw(dev, np->phyaddr, PHY_VITESSE_INIT_REG4, phy_reserved)) {
-                       printk(KERN_INFO "%s: phy init failed.\n", pci_name(np->pci_dev));
-                       return PHY_ERROR;
-               }
-               phy_reserved = mii_rw(dev, np->phyaddr, PHY_VITESSE_INIT_REG3, MII_READ);
-               if (mii_rw(dev, np->phyaddr, PHY_VITESSE_INIT_REG3, phy_reserved)) {
-                       printk(KERN_INFO "%s: phy init failed.\n", pci_name(np->pci_dev));
-                       return PHY_ERROR;
-               }
-               if (mii_rw(dev, np->phyaddr, PHY_VITESSE_INIT_REG2, PHY_VITESSE_INIT6)) {
-                       printk(KERN_INFO "%s: phy init failed.\n", pci_name(np->pci_dev));
-                       return PHY_ERROR;
-               }
-               if (mii_rw(dev, np->phyaddr, PHY_VITESSE_INIT_REG2, PHY_VITESSE_INIT7)) {
-                       printk(KERN_INFO "%s: phy init failed.\n", pci_name(np->pci_dev));
-                       return PHY_ERROR;
-               }
-               phy_reserved = mii_rw(dev, np->phyaddr, PHY_VITESSE_INIT_REG4, MII_READ);
-               if (mii_rw(dev, np->phyaddr, PHY_VITESSE_INIT_REG4, phy_reserved)) {
-                       printk(KERN_INFO "%s: phy init failed.\n", pci_name(np->pci_dev));
-                       return PHY_ERROR;
-               }
-               phy_reserved = mii_rw(dev, np->phyaddr, PHY_VITESSE_INIT_REG3, MII_READ);
-               phy_reserved &= ~PHY_VITESSE_INIT_MSK2;
-               phy_reserved |= PHY_VITESSE_INIT8;
-               if (mii_rw(dev, np->phyaddr, PHY_VITESSE_INIT_REG3, phy_reserved)) {
-                       printk(KERN_INFO "%s: phy init failed.\n", pci_name(np->pci_dev));
-                       return PHY_ERROR;
-               }
-               if (mii_rw(dev, np->phyaddr, PHY_VITESSE_INIT_REG2, PHY_VITESSE_INIT9)) {
-                       printk(KERN_INFO "%s: phy init failed.\n", pci_name(np->pci_dev));
-                       return PHY_ERROR;
-               }
-               if (mii_rw(dev, np->phyaddr, PHY_VITESSE_INIT_REG1, PHY_VITESSE_INIT10)) {
-                       printk(KERN_INFO "%s: phy init failed.\n", pci_name(np->pci_dev));
-                       return PHY_ERROR;
-               }
-       }
-       if (np->phy_oui == PHY_OUI_REALTEK) {
+       } else if (np->phy_oui == PHY_OUI_REALTEK) {
                if (np->phy_model == PHY_MODEL_REALTEK_8211 &&
                    np->phy_rev == PHY_REV_REALTEK_8211B) {
                        /* reset could have cleared these out, set them back */
-                       if (mii_rw(dev, np->phyaddr, PHY_REALTEK_INIT_REG1, PHY_REALTEK_INIT1)) {
-                               printk(KERN_INFO "%s: phy init failed.\n", pci_name(np->pci_dev));
-                               return PHY_ERROR;
-                       }
-                       if (mii_rw(dev, np->phyaddr, PHY_REALTEK_INIT_REG2, PHY_REALTEK_INIT2)) {
-                               printk(KERN_INFO "%s: phy init failed.\n", pci_name(np->pci_dev));
-                               return PHY_ERROR;
-                       }
-                       if (mii_rw(dev, np->phyaddr, PHY_REALTEK_INIT_REG1, PHY_REALTEK_INIT3)) {
-                               printk(KERN_INFO "%s: phy init failed.\n", pci_name(np->pci_dev));
-                               return PHY_ERROR;
-                       }
-                       if (mii_rw(dev, np->phyaddr, PHY_REALTEK_INIT_REG3, PHY_REALTEK_INIT4)) {
-                               printk(KERN_INFO "%s: phy init failed.\n", pci_name(np->pci_dev));
-                               return PHY_ERROR;
-                       }
-                       if (mii_rw(dev, np->phyaddr, PHY_REALTEK_INIT_REG4, PHY_REALTEK_INIT5)) {
-                               printk(KERN_INFO "%s: phy init failed.\n", pci_name(np->pci_dev));
-                               return PHY_ERROR;
-                       }
-                       if (mii_rw(dev, np->phyaddr, PHY_REALTEK_INIT_REG5, PHY_REALTEK_INIT6)) {
-                               printk(KERN_INFO "%s: phy init failed.\n", pci_name(np->pci_dev));
+                       if (init_realtek_8211b(dev, np)) {
+                               netdev_info(dev, "%s: phy init failed\n",
+                                           pci_name(np->pci_dev));
                                return PHY_ERROR;
                        }
-                       if (mii_rw(dev, np->phyaddr, PHY_REALTEK_INIT_REG1, PHY_REALTEK_INIT1)) {
-                               printk(KERN_INFO "%s: phy init failed.\n", pci_name(np->pci_dev));
+               } else if (np->phy_model == PHY_MODEL_REALTEK_8201) {
+                       if (init_realtek_8201(dev, np) ||
+                           init_realtek_8201_cross(dev, np)) {
+                               netdev_info(dev, "%s: phy init failed\n",
+                                           pci_name(np->pci_dev));
                                return PHY_ERROR;
                        }
                }
-               if (np->phy_model == PHY_MODEL_REALTEK_8201) {
-                       if (np->driver_data & DEV_NEED_PHY_INIT_FIX) {
-                               phy_reserved = mii_rw(dev, np->phyaddr, PHY_REALTEK_INIT_REG6, MII_READ);
-                               phy_reserved |= PHY_REALTEK_INIT7;
-                               if (mii_rw(dev, np->phyaddr, PHY_REALTEK_INIT_REG6, phy_reserved)) {
-                                       printk(KERN_INFO "%s: phy init failed.\n", pci_name(np->pci_dev));
-                                       return PHY_ERROR;
-                               }
-                       }
-                       if (phy_cross == NV_CROSSOVER_DETECTION_DISABLED) {
-                               if (mii_rw(dev, np->phyaddr, PHY_REALTEK_INIT_REG1, PHY_REALTEK_INIT3)) {
-                                       printk(KERN_INFO "%s: phy init failed.\n", pci_name(np->pci_dev));
-                                       return PHY_ERROR;
-                               }
-                               phy_reserved = mii_rw(dev, np->phyaddr, PHY_REALTEK_INIT_REG2, MII_READ);
-                               phy_reserved &= ~PHY_REALTEK_INIT_MSK1;
-                               phy_reserved |= PHY_REALTEK_INIT3;
-                               if (mii_rw(dev, np->phyaddr, PHY_REALTEK_INIT_REG2, phy_reserved)) {
-                                       printk(KERN_INFO "%s: phy init failed.\n", pci_name(np->pci_dev));
-                                       return PHY_ERROR;
-                               }
-                               if (mii_rw(dev, np->phyaddr, PHY_REALTEK_INIT_REG1, PHY_REALTEK_INIT1)) {
-                                       printk(KERN_INFO "%s: phy init failed.\n", pci_name(np->pci_dev));
-                                       return PHY_ERROR;
-                               }
-                       }
-               }
        }
 
        /* some phys clear out pause advertisment on reset, set it back */
@@ -1506,7 +1508,6 @@ static void nv_start_rx(struct net_device *dev)
        u8 __iomem *base = get_hwbase(dev);
        u32 rx_ctrl = readl(base + NvRegReceiverControl);
 
-       dprintk(KERN_DEBUG "%s: nv_start_rx\n", dev->name);
        /* Already running? Stop it. */
        if ((readl(base + NvRegReceiverControl) & NVREG_RCVCTL_START) && !np->mac_in_use) {
                rx_ctrl &= ~NVREG_RCVCTL_START;
@@ -1519,8 +1520,6 @@ static void nv_start_rx(struct net_device *dev)
        if (np->mac_in_use)
                rx_ctrl &= ~NVREG_RCVCTL_RX_PATH_EN;
        writel(rx_ctrl, base + NvRegReceiverControl);
-       dprintk(KERN_DEBUG "%s: nv_start_rx to duplex %d, speed 0x%08x.\n",
-                               dev->name, np->duplex, np->linkspeed);
        pci_push(base);
 }
 
@@ -1530,7 +1529,6 @@ static void nv_stop_rx(struct net_device *dev)
        u8 __iomem *base = get_hwbase(dev);
        u32 rx_ctrl = readl(base + NvRegReceiverControl);
 
-       dprintk(KERN_DEBUG "%s: nv_stop_rx\n", dev->name);
        if (!np->mac_in_use)
                rx_ctrl &= ~NVREG_RCVCTL_START;
        else
@@ -1538,7 +1536,8 @@ static void nv_stop_rx(struct net_device *dev)
        writel(rx_ctrl, base + NvRegReceiverControl);
        if (reg_delay(dev, NvRegReceiverStatus, NVREG_RCVSTAT_BUSY, 0,
                      NV_RXSTOP_DELAY1, NV_RXSTOP_DELAY1MAX))
-               printk(KERN_INFO "nv_stop_rx: ReceiverStatus remained busy");
+               netdev_info(dev, "%s: ReceiverStatus remained busy\n",
+                           __func__);
 
        udelay(NV_RXSTOP_DELAY2);
        if (!np->mac_in_use)
@@ -1551,7 +1550,6 @@ static void nv_start_tx(struct net_device *dev)
        u8 __iomem *base = get_hwbase(dev);
        u32 tx_ctrl = readl(base + NvRegTransmitterControl);
 
-       dprintk(KERN_DEBUG "%s: nv_start_tx\n", dev->name);
        tx_ctrl |= NVREG_XMITCTL_START;
        if (np->mac_in_use)
                tx_ctrl &= ~NVREG_XMITCTL_TX_PATH_EN;
@@ -1565,7 +1563,6 @@ static void nv_stop_tx(struct net_device *dev)
        u8 __iomem *base = get_hwbase(dev);
        u32 tx_ctrl = readl(base + NvRegTransmitterControl);
 
-       dprintk(KERN_DEBUG "%s: nv_stop_tx\n", dev->name);
        if (!np->mac_in_use)
                tx_ctrl &= ~NVREG_XMITCTL_START;
        else
@@ -1573,7 +1570,8 @@ static void nv_stop_tx(struct net_device *dev)
        writel(tx_ctrl, base + NvRegTransmitterControl);
        if (reg_delay(dev, NvRegTransmitterStatus, NVREG_XMITSTAT_BUSY, 0,
                      NV_TXSTOP_DELAY1, NV_TXSTOP_DELAY1MAX))
-               printk(KERN_INFO "nv_stop_tx: TransmitterStatus remained busy");
+               netdev_info(dev, "%s: TransmitterStatus remained busy\n",
+                           __func__);
 
        udelay(NV_TXSTOP_DELAY2);
        if (!np->mac_in_use)
@@ -1598,7 +1596,6 @@ static void nv_txrx_reset(struct net_device *dev)
        struct fe_priv *np = netdev_priv(dev);
        u8 __iomem *base = get_hwbase(dev);
 
-       dprintk(KERN_DEBUG "%s: nv_txrx_reset\n", dev->name);
        writel(NVREG_TXRXCTL_BIT2 | NVREG_TXRXCTL_RESET | np->txrxctl_bits, base + NvRegTxRxControl);
        pci_push(base);
        udelay(NV_TXRX_RESET_DELAY);
@@ -1612,8 +1609,6 @@ static void nv_mac_reset(struct net_device *dev)
        u8 __iomem *base = get_hwbase(dev);
        u32 temp1, temp2, temp3;
 
-       dprintk(KERN_DEBUG "%s: nv_mac_reset\n", dev->name);
-
        writel(NVREG_TXRXCTL_BIT2 | NVREG_TXRXCTL_RESET | np->txrxctl_bits, base + NvRegTxRxControl);
        pci_push(base);
 
@@ -2190,18 +2185,6 @@ static netdev_tx_t nv_start_xmit(struct sk_buff *skb, struct net_device *dev)
 
        spin_unlock_irqrestore(&np->lock, flags);
 
-       dprintk(KERN_DEBUG "%s: nv_start_xmit: entries %d queued for transmission. tx_flags_extra: %x\n",
-               dev->name, entries, tx_flags_extra);
-       {
-               int j;
-               for (j = 0; j < 64; j++) {
-                       if ((j%16) == 0)
-                               dprintk("\n%03x:", j);
-                       dprintk(" %02x", ((unsigned char *)skb->data)[j]);
-               }
-               dprintk("\n");
-       }
-
        writel(NVREG_TXRXCTL_KICK|np->txrxctl_bits, get_hwbase(dev) + NvRegTxRxControl);
        return NETDEV_TX_OK;
 }
@@ -2341,18 +2324,6 @@ static netdev_tx_t nv_start_xmit_optimized(struct sk_buff *skb,
 
        spin_unlock_irqrestore(&np->lock, flags);
 
-       dprintk(KERN_DEBUG "%s: nv_start_xmit_optimized: entries %d queued for transmission. tx_flags_extra: %x\n",
-               dev->name, entries, tx_flags_extra);
-       {
-               int j;
-               for (j = 0; j < 64; j++) {
-                       if ((j%16) == 0)
-                               dprintk("\n%03x:", j);
-                       dprintk(" %02x", ((unsigned char *)skb->data)[j]);
-               }
-               dprintk("\n");
-       }
-
        writel(NVREG_TXRXCTL_KICK|np->txrxctl_bits, get_hwbase(dev) + NvRegTxRxControl);
        return NETDEV_TX_OK;
 }
@@ -2391,9 +2362,6 @@ static int nv_tx_done(struct net_device *dev, int limit)
               !((flags = le32_to_cpu(np->get_tx.orig->flaglen)) & NV_TX_VALID) &&
               (tx_work < limit)) {
 
-               dprintk(KERN_DEBUG "%s: nv_tx_done: flags 0x%x.\n",
-                                       dev->name, flags);
-
                nv_unmap_txskb(np, np->get_tx_ctx);
 
                if (np->desc_ver == DESC_VER_1) {
@@ -2456,9 +2424,6 @@ static int nv_tx_done_optimized(struct net_device *dev, int limit)
               !((flags = le32_to_cpu(np->get_tx.ex->flaglen)) & NV_TX2_VALID) &&
               (tx_work < limit)) {
 
-               dprintk(KERN_DEBUG "%s: nv_tx_done_optimized: flags 0x%x.\n",
-                                       dev->name, flags);
-
                nv_unmap_txskb(np, np->get_tx_ctx);
 
                if (flags & NV_TX2_LASTPACKET) {
@@ -2503,57 +2468,56 @@ static void nv_tx_timeout(struct net_device *dev)
        u32 status;
        union ring_type put_tx;
        int saved_tx_limit;
+       int i;
 
        if (np->msi_flags & NV_MSI_X_ENABLED)
                status = readl(base + NvRegMSIXIrqStatus) & NVREG_IRQSTAT_MASK;
        else
                status = readl(base + NvRegIrqStatus) & NVREG_IRQSTAT_MASK;
 
-       printk(KERN_INFO "%s: Got tx_timeout. irq: %08x\n", dev->name, status);
-
-       {
-               int i;
-
-               printk(KERN_INFO "%s: Ring at %lx\n",
-                      dev->name, (unsigned long)np->ring_addr);
-               printk(KERN_INFO "%s: Dumping tx registers\n", dev->name);
-               for (i = 0; i <= np->register_size; i += 32) {
-                       printk(KERN_INFO "%3x: %08x %08x %08x %08x %08x %08x %08x %08x\n",
-                                       i,
-                                       readl(base + i + 0), readl(base + i + 4),
-                                       readl(base + i + 8), readl(base + i + 12),
-                                       readl(base + i + 16), readl(base + i + 20),
-                                       readl(base + i + 24), readl(base + i + 28));
-               }
-               printk(KERN_INFO "%s: Dumping tx ring\n", dev->name);
-               for (i = 0; i < np->tx_ring_size; i += 4) {
-                       if (!nv_optimized(np)) {
-                               printk(KERN_INFO "%03x: %08x %08x // %08x %08x // %08x %08x // %08x %08x\n",
-                                      i,
-                                      le32_to_cpu(np->tx_ring.orig[i].buf),
-                                      le32_to_cpu(np->tx_ring.orig[i].flaglen),
-                                      le32_to_cpu(np->tx_ring.orig[i+1].buf),
-                                      le32_to_cpu(np->tx_ring.orig[i+1].flaglen),
-                                      le32_to_cpu(np->tx_ring.orig[i+2].buf),
-                                      le32_to_cpu(np->tx_ring.orig[i+2].flaglen),
-                                      le32_to_cpu(np->tx_ring.orig[i+3].buf),
-                                      le32_to_cpu(np->tx_ring.orig[i+3].flaglen));
-                       } else {
-                               printk(KERN_INFO "%03x: %08x %08x %08x // %08x %08x %08x // %08x %08x %08x // %08x %08x %08x\n",
-                                      i,
-                                      le32_to_cpu(np->tx_ring.ex[i].bufhigh),
-                                      le32_to_cpu(np->tx_ring.ex[i].buflow),
-                                      le32_to_cpu(np->tx_ring.ex[i].flaglen),
-                                      le32_to_cpu(np->tx_ring.ex[i+1].bufhigh),
-                                      le32_to_cpu(np->tx_ring.ex[i+1].buflow),
-                                      le32_to_cpu(np->tx_ring.ex[i+1].flaglen),
-                                      le32_to_cpu(np->tx_ring.ex[i+2].bufhigh),
-                                      le32_to_cpu(np->tx_ring.ex[i+2].buflow),
-                                      le32_to_cpu(np->tx_ring.ex[i+2].flaglen),
-                                      le32_to_cpu(np->tx_ring.ex[i+3].bufhigh),
-                                      le32_to_cpu(np->tx_ring.ex[i+3].buflow),
-                                      le32_to_cpu(np->tx_ring.ex[i+3].flaglen));
-                       }
+       netdev_info(dev, "Got tx_timeout. irq: %08x\n", status);
+
+       netdev_info(dev, "Ring at %lx\n", (unsigned long)np->ring_addr);
+       netdev_info(dev, "Dumping tx registers\n");
+       for (i = 0; i <= np->register_size; i += 32) {
+               netdev_info(dev,
+                           "%3x: %08x %08x %08x %08x %08x %08x %08x %08x\n",
+                           i,
+                           readl(base + i + 0), readl(base + i + 4),
+                           readl(base + i + 8), readl(base + i + 12),
+                           readl(base + i + 16), readl(base + i + 20),
+                           readl(base + i + 24), readl(base + i + 28));
+       }
+       netdev_info(dev, "Dumping tx ring\n");
+       for (i = 0; i < np->tx_ring_size; i += 4) {
+               if (!nv_optimized(np)) {
+                       netdev_info(dev,
+                                   "%03x: %08x %08x // %08x %08x // %08x %08x // %08x %08x\n",
+                                   i,
+                                   le32_to_cpu(np->tx_ring.orig[i].buf),
+                                   le32_to_cpu(np->tx_ring.orig[i].flaglen),
+                                   le32_to_cpu(np->tx_ring.orig[i+1].buf),
+                                   le32_to_cpu(np->tx_ring.orig[i+1].flaglen),
+                                   le32_to_cpu(np->tx_ring.orig[i+2].buf),
+                                   le32_to_cpu(np->tx_ring.orig[i+2].flaglen),
+                                   le32_to_cpu(np->tx_ring.orig[i+3].buf),
+                                   le32_to_cpu(np->tx_ring.orig[i+3].flaglen));
+               } else {
+                       netdev_info(dev,
+                                   "%03x: %08x %08x %08x // %08x %08x %08x // %08x %08x %08x // %08x %08x %08x\n",
+                                   i,
+                                   le32_to_cpu(np->tx_ring.ex[i].bufhigh),
+                                   le32_to_cpu(np->tx_ring.ex[i].buflow),
+                                   le32_to_cpu(np->tx_ring.ex[i].flaglen),
+                                   le32_to_cpu(np->tx_ring.ex[i+1].bufhigh),
+                                   le32_to_cpu(np->tx_ring.ex[i+1].buflow),
+                                   le32_to_cpu(np->tx_ring.ex[i+1].flaglen),
+                                   le32_to_cpu(np->tx_ring.ex[i+2].bufhigh),
+                                   le32_to_cpu(np->tx_ring.ex[i+2].buflow),
+                                   le32_to_cpu(np->tx_ring.ex[i+2].flaglen),
+                                   le32_to_cpu(np->tx_ring.ex[i+3].bufhigh),
+                                   le32_to_cpu(np->tx_ring.ex[i+3].buflow),
+                                   le32_to_cpu(np->tx_ring.ex[i+3].flaglen));
                }
        }
 
@@ -2608,8 +2572,6 @@ static int nv_getlen(struct net_device *dev, void *packet, int datalen)
                protolen = ntohs(((struct ethhdr *)packet)->h_proto);
                hdrlen = ETH_HLEN;
        }
-       dprintk(KERN_DEBUG "%s: nv_getlen: datalen %d, protolen %d, hdrlen %d\n",
-                               dev->name, datalen, protolen, hdrlen);
        if (protolen > ETH_DATA_LEN)
                return datalen; /* Value in proto field not a len, no checks possible */
 
@@ -2620,26 +2582,18 @@ static int nv_getlen(struct net_device *dev, void *packet, int datalen)
                        /* more data on wire than in 802 header, trim of
                         * additional data.
                         */
-                       dprintk(KERN_DEBUG "%s: nv_getlen: accepting %d bytes.\n",
-                                       dev->name, protolen);
                        return protolen;
                } else {
                        /* less data on wire than mentioned in header.
                         * Discard the packet.
                         */
-                       dprintk(KERN_DEBUG "%s: nv_getlen: discarding long packet.\n",
-                                       dev->name);
                        return -1;
                }
        } else {
                /* short packet. Accept only if 802 values are also short */
                if (protolen > ETH_ZLEN) {
-                       dprintk(KERN_DEBUG "%s: nv_getlen: discarding short packet.\n",
-                                       dev->name);
                        return -1;
                }
-               dprintk(KERN_DEBUG "%s: nv_getlen: accepting %d bytes.\n",
-                               dev->name, datalen);
                return datalen;
        }
 }
@@ -2656,9 +2610,6 @@ static int nv_rx_process(struct net_device *dev, int limit)
              !((flags = le32_to_cpu(np->get_rx.orig->flaglen)) & NV_RX_AVAIL) &&
                (rx_work < limit)) {
 
-               dprintk(KERN_DEBUG "%s: nv_rx_process: flags 0x%x.\n",
-                                       dev->name, flags);
-
                /*
                 * the packet is for us - immediately tear down the pci mapping.
                 * TODO: check if a prefetch of the first cacheline improves
@@ -2670,16 +2621,6 @@ static int nv_rx_process(struct net_device *dev, int limit)
                skb = np->get_rx_ctx->skb;
                np->get_rx_ctx->skb = NULL;
 
-               {
-                       int j;
-                       dprintk(KERN_DEBUG "Dumping packet (flags 0x%x).", flags);
-                       for (j = 0; j < 64; j++) {
-                               if ((j%16) == 0)
-                                       dprintk("\n%03x:", j);
-                               dprintk(" %02x", ((unsigned char *)skb->data)[j]);
-                       }
-                       dprintk("\n");
-               }
                /* look at what we actually got: */
                if (np->desc_ver == DESC_VER_1) {
                        if (likely(flags & NV_RX_DESCRIPTORVALID)) {
@@ -2754,8 +2695,6 @@ static int nv_rx_process(struct net_device *dev, int limit)
                /* got a valid packet - forward it to the network core */
                skb_put(skb, len);
                skb->protocol = eth_type_trans(skb, dev);
-               dprintk(KERN_DEBUG "%s: nv_rx_process: %d bytes, proto %d accepted.\n",
-                                       dev->name, len, skb->protocol);
                napi_gro_receive(&np->napi, skb);
                dev->stats.rx_packets++;
                dev->stats.rx_bytes += len;
@@ -2784,9 +2723,6 @@ static int nv_rx_process_optimized(struct net_device *dev, int limit)
              !((flags = le32_to_cpu(np->get_rx.ex->flaglen)) & NV_RX2_AVAIL) &&
              (rx_work < limit)) {
 
-               dprintk(KERN_DEBUG "%s: nv_rx_process_optimized: flags 0x%x.\n",
-                                       dev->name, flags);
-
                /*
                 * the packet is for us - immediately tear down the pci mapping.
                 * TODO: check if a prefetch of the first cacheline improves
@@ -2798,16 +2734,6 @@ static int nv_rx_process_optimized(struct net_device *dev, int limit)
                skb = np->get_rx_ctx->skb;
                np->get_rx_ctx->skb = NULL;
 
-               {
-                       int j;
-                       dprintk(KERN_DEBUG "Dumping packet (flags 0x%x).", flags);
-                       for (j = 0; j < 64; j++) {
-                               if ((j%16) == 0)
-                                       dprintk("\n%03x:", j);
-                               dprintk(" %02x", ((unsigned char *)skb->data)[j]);
-                       }
-                       dprintk("\n");
-               }
                /* look at what we actually got: */
                if (likely(flags & NV_RX2_DESCRIPTORVALID)) {
                        len = flags & LEN_MASK_V2;
@@ -2840,9 +2766,6 @@ static int nv_rx_process_optimized(struct net_device *dev, int limit)
                        skb->protocol = eth_type_trans(skb, dev);
                        prefetch(skb->data);
 
-                       dprintk(KERN_DEBUG "%s: nv_rx_process_optimized: %d bytes, proto %d accepted.\n",
-                               dev->name, len, skb->protocol);
-
                        if (likely(!np->vlangrp)) {
                                napi_gro_receive(&np->napi, skb);
                        } else {
@@ -3058,8 +2981,6 @@ static void nv_set_multicast(struct net_device *dev)
        writel(mask[0], base + NvRegMulticastMaskA);
        writel(mask[1], base + NvRegMulticastMaskB);
        writel(pff, base + NvRegPacketFilterFlags);
-       dprintk(KERN_INFO "%s: reconfiguration for multicast lists.\n",
-               dev->name);
        nv_start_rx(dev);
        spin_unlock_irq(&np->lock);
 }
@@ -3134,8 +3055,6 @@ static int nv_update_linkspeed(struct net_device *dev)
        mii_status = mii_rw(dev, np->phyaddr, MII_BMSR, MII_READ);
 
        if (!(mii_status & BMSR_LSTATUS)) {
-               dprintk(KERN_DEBUG "%s: no link detected by phy - falling back to 10HD.\n",
-                               dev->name);
                newls = NVREG_LINKSPEED_FORCE|NVREG_LINKSPEED_10;
                newdup = 0;
                retval = 0;
@@ -3143,8 +3062,6 @@ static int nv_update_linkspeed(struct net_device *dev)
        }
 
        if (np->autoneg == 0) {
-               dprintk(KERN_DEBUG "%s: nv_update_linkspeed: autoneg off, PHY set to 0x%04x.\n",
-                               dev->name, np->fixed_mode);
                if (np->fixed_mode & LPA_100FULL) {
                        newls = NVREG_LINKSPEED_FORCE|NVREG_LINKSPEED_100;
                        newdup = 1;
@@ -3167,14 +3084,11 @@ static int nv_update_linkspeed(struct net_device *dev)
                newls = NVREG_LINKSPEED_FORCE|NVREG_LINKSPEED_10;
                newdup = 0;
                retval = 0;
-               dprintk(KERN_DEBUG "%s: autoneg not completed - falling back to 10HD.\n", dev->name);
                goto set_speed;
        }
 
        adv = mii_rw(dev, np->phyaddr, MII_ADVERTISE, MII_READ);
        lpa = mii_rw(dev, np->phyaddr, MII_LPA, MII_READ);
-       dprintk(KERN_DEBUG "%s: nv_update_linkspeed: PHY advertises 0x%04x, lpa 0x%04x.\n",
-                               dev->name, adv, lpa);
 
        retval = 1;
        if (np->gigabit == PHY_GIGABIT) {
@@ -3183,8 +3097,6 @@ static int nv_update_linkspeed(struct net_device *dev)
 
                if ((control_1000 & ADVERTISE_1000FULL) &&
                        (status_1000 & LPA_1000FULL)) {
-                       dprintk(KERN_DEBUG "%s: nv_update_linkspeed: GBit ethernet detected.\n",
-                               dev->name);
                        newls = NVREG_LINKSPEED_FORCE|NVREG_LINKSPEED_1000;
                        newdup = 1;
                        goto set_speed;
@@ -3206,7 +3118,6 @@ static int nv_update_linkspeed(struct net_device *dev)
                newls = NVREG_LINKSPEED_FORCE|NVREG_LINKSPEED_10;
                newdup = 0;
        } else {
-               dprintk(KERN_DEBUG "%s: bad ability %04x - falling back to 10HD.\n", dev->name, adv_lpa);
                newls = NVREG_LINKSPEED_FORCE|NVREG_LINKSPEED_10;
                newdup = 0;
        }
@@ -3215,9 +3126,6 @@ set_speed:
        if (np->duplex == newdup && np->linkspeed == newls)
                return retval;
 
-       dprintk(KERN_INFO "%s: changing link setting from %d/%d to %d/%d.\n",
-                       dev->name, np->linkspeed, np->duplex, newls, newdup);
-
        np->duplex = newdup;
        np->linkspeed = newls;
 
@@ -3338,14 +3246,14 @@ static void nv_linkchange(struct net_device *dev)
        if (nv_update_linkspeed(dev)) {
                if (!netif_carrier_ok(dev)) {
                        netif_carrier_on(dev);
-                       printk(KERN_INFO "%s: link up.\n", dev->name);
+                       netdev_info(dev, "link up\n");
                        nv_txrx_gate(dev, false);
                        nv_start_rx(dev);
                }
        } else {
                if (netif_carrier_ok(dev)) {
                        netif_carrier_off(dev);
-                       printk(KERN_INFO "%s: link down.\n", dev->name);
+                       netdev_info(dev, "link down\n");
                        nv_txrx_gate(dev, true);
                        nv_stop_rx(dev);
                }
@@ -3359,11 +3267,9 @@ static void nv_link_irq(struct net_device *dev)
 
        miistat = readl(base + NvRegMIIStatus);
        writel(NVREG_MIISTAT_LINKCHANGE, base + NvRegMIIStatus);
-       dprintk(KERN_INFO "%s: link change irq, status 0x%x.\n", dev->name, miistat);
 
        if (miistat & (NVREG_MIISTAT_LINKCHANGE))
                nv_linkchange(dev);
-       dprintk(KERN_DEBUG "%s: link change notification done.\n", dev->name);
 }
 
 static void nv_msi_workaround(struct fe_priv *np)
@@ -3414,8 +3320,6 @@ static irqreturn_t nv_nic_irq(int foo, void *data)
        struct fe_priv *np = netdev_priv(dev);
        u8 __iomem *base = get_hwbase(dev);
 
-       dprintk(KERN_DEBUG "%s: nv_nic_irq\n", dev->name);
-
        if (!(np->msi_flags & NV_MSI_X_ENABLED)) {
                np->events = readl(base + NvRegIrqStatus);
                writel(np->events, base + NvRegIrqStatus);
@@ -3423,7 +3327,6 @@ static irqreturn_t nv_nic_irq(int foo, void *data)
                np->events = readl(base + NvRegMSIXIrqStatus);
                writel(np->events, base + NvRegMSIXIrqStatus);
        }
-       dprintk(KERN_DEBUG "%s: irq: %08x\n", dev->name, np->events);
        if (!(np->events & np->irqmask))
                return IRQ_NONE;
 
@@ -3437,8 +3340,6 @@ static irqreturn_t nv_nic_irq(int foo, void *data)
                __napi_schedule(&np->napi);
        }
 
-       dprintk(KERN_DEBUG "%s: nv_nic_irq completed\n", dev->name);
-
        return IRQ_HANDLED;
 }
 
@@ -3453,8 +3354,6 @@ static irqreturn_t nv_nic_irq_optimized(int foo, void *data)
        struct fe_priv *np = netdev_priv(dev);
        u8 __iomem *base = get_hwbase(dev);
 
-       dprintk(KERN_DEBUG "%s: nv_nic_irq_optimized\n", dev->name);
-
        if (!(np->msi_flags & NV_MSI_X_ENABLED)) {
                np->events = readl(base + NvRegIrqStatus);
                writel(np->events, base + NvRegIrqStatus);
@@ -3462,7 +3361,6 @@ static irqreturn_t nv_nic_irq_optimized(int foo, void *data)
                np->events = readl(base + NvRegMSIXIrqStatus);
                writel(np->events, base + NvRegMSIXIrqStatus);
        }
-       dprintk(KERN_DEBUG "%s: irq: %08x\n", dev->name, np->events);
        if (!(np->events & np->irqmask))
                return IRQ_NONE;
 
@@ -3475,7 +3373,6 @@ static irqreturn_t nv_nic_irq_optimized(int foo, void *data)
                writel(0, base + NvRegIrqMask);
                __napi_schedule(&np->napi);
        }
-       dprintk(KERN_DEBUG "%s: nv_nic_irq_optimized completed\n", dev->name);
 
        return IRQ_HANDLED;
 }
@@ -3489,12 +3386,9 @@ static irqreturn_t nv_nic_irq_tx(int foo, void *data)
        int i;
        unsigned long flags;
 
-       dprintk(KERN_DEBUG "%s: nv_nic_irq_tx\n", dev->name);
-
        for (i = 0;; i++) {
                events = readl(base + NvRegMSIXIrqStatus) & NVREG_IRQ_TX_ALL;
                writel(NVREG_IRQ_TX_ALL, base + NvRegMSIXIrqStatus);
-               dprintk(KERN_DEBUG "%s: tx irq: %08x\n", dev->name, events);
                if (!(events & np->irqmask))
                        break;
 
@@ -3513,12 +3407,12 @@ static irqreturn_t nv_nic_irq_tx(int foo, void *data)
                                mod_timer(&np->nic_poll, jiffies + POLL_WAIT);
                        }
                        spin_unlock_irqrestore(&np->lock, flags);
-                       printk(KERN_DEBUG "%s: too many iterations (%d) in nv_nic_irq_tx.\n", dev->name, i);
+                       netdev_dbg(dev, "%s: too many iterations (%d)\n",
+                                  __func__, i);
                        break;
                }
 
        }
-       dprintk(KERN_DEBUG "%s: nv_nic_irq_tx completed\n", dev->name);
 
        return IRQ_RETVAL(i);
 }
@@ -3603,12 +3497,9 @@ static irqreturn_t nv_nic_irq_rx(int foo, void *data)
        int i;
        unsigned long flags;
 
-       dprintk(KERN_DEBUG "%s: nv_nic_irq_rx\n", dev->name);
-
        for (i = 0;; i++) {
                events = readl(base + NvRegMSIXIrqStatus) & NVREG_IRQ_RX_ALL;
                writel(NVREG_IRQ_RX_ALL, base + NvRegMSIXIrqStatus);
-               dprintk(KERN_DEBUG "%s: rx irq: %08x\n", dev->name, events);
                if (!(events & np->irqmask))
                        break;
 
@@ -3632,11 +3523,11 @@ static irqreturn_t nv_nic_irq_rx(int foo, void *data)
                                mod_timer(&np->nic_poll, jiffies + POLL_WAIT);
                        }
                        spin_unlock_irqrestore(&np->lock, flags);
-                       printk(KERN_DEBUG "%s: too many iterations (%d) in nv_nic_irq_rx.\n", dev->name, i);
+                       netdev_dbg(dev, "%s: too many iterations (%d)\n",
+                                  __func__, i);
                        break;
                }
        }
-       dprintk(KERN_DEBUG "%s: nv_nic_irq_rx completed\n", dev->name);
 
        return IRQ_RETVAL(i);
 }
@@ -3650,12 +3541,9 @@ static irqreturn_t nv_nic_irq_other(int foo, void *data)
        int i;
        unsigned long flags;
 
-       dprintk(KERN_DEBUG "%s: nv_nic_irq_other\n", dev->name);
-
        for (i = 0;; i++) {
                events = readl(base + NvRegMSIXIrqStatus) & NVREG_IRQ_OTHER;
                writel(NVREG_IRQ_OTHER, base + NvRegMSIXIrqStatus);
-               dprintk(KERN_DEBUG "%s: irq: %08x\n", dev->name, events);
                if (!(events & np->irqmask))
                        break;
 
@@ -3700,12 +3588,12 @@ static irqreturn_t nv_nic_irq_other(int foo, void *data)
                                mod_timer(&np->nic_poll, jiffies + POLL_WAIT);
                        }
                        spin_unlock_irqrestore(&np->lock, flags);
-                       printk(KERN_DEBUG "%s: too many iterations (%d) in nv_nic_irq_other.\n", dev->name, i);
+                       netdev_dbg(dev, "%s: too many iterations (%d)\n",
+                                  __func__, i);
                        break;
                }
 
        }
-       dprintk(KERN_DEBUG "%s: nv_nic_irq_other completed\n", dev->name);
 
        return IRQ_RETVAL(i);
 }
@@ -3717,8 +3605,6 @@ static irqreturn_t nv_nic_irq_test(int foo, void *data)
        u8 __iomem *base = get_hwbase(dev);
        u32 events;
 
-       dprintk(KERN_DEBUG "%s: nv_nic_irq_test\n", dev->name);
-
        if (!(np->msi_flags & NV_MSI_X_ENABLED)) {
                events = readl(base + NvRegIrqStatus) & NVREG_IRQSTAT_MASK;
                writel(NVREG_IRQ_TIMER, base + NvRegIrqStatus);
@@ -3727,7 +3613,6 @@ static irqreturn_t nv_nic_irq_test(int foo, void *data)
                writel(NVREG_IRQ_TIMER, base + NvRegMSIXIrqStatus);
        }
        pci_push(base);
-       dprintk(KERN_DEBUG "%s: irq: %08x\n", dev->name, events);
        if (!(events & NVREG_IRQ_TIMER))
                return IRQ_RETVAL(0);
 
@@ -3737,8 +3622,6 @@ static irqreturn_t nv_nic_irq_test(int foo, void *data)
        np->intr_test = 1;
        spin_unlock(&np->lock);
 
-       dprintk(KERN_DEBUG "%s: nv_nic_irq_test completed\n", dev->name);
-
        return IRQ_RETVAL(1);
 }
 
@@ -3794,7 +3677,9 @@ static int nv_request_irq(struct net_device *dev, int intr_test)
                                sprintf(np->name_rx, "%s-rx", dev->name);
                                if (request_irq(np->msi_x_entry[NV_MSI_X_VECTOR_RX].vector,
                                                nv_nic_irq_rx, IRQF_SHARED, np->name_rx, dev) != 0) {
-                                       printk(KERN_INFO "forcedeth: request_irq failed for rx %d\n", ret);
+                                       netdev_info(dev,
+                                                   "request_irq failed for rx %d\n",
+                                                   ret);
                                        pci_disable_msix(np->pci_dev);
                                        np->msi_flags &= ~NV_MSI_X_ENABLED;
                                        goto out_err;
@@ -3803,7 +3688,9 @@ static int nv_request_irq(struct net_device *dev, int intr_test)
                                sprintf(np->name_tx, "%s-tx", dev->name);
                                if (request_irq(np->msi_x_entry[NV_MSI_X_VECTOR_TX].vector,
                                                nv_nic_irq_tx, IRQF_SHARED, np->name_tx, dev) != 0) {
-                                       printk(KERN_INFO "forcedeth: request_irq failed for tx %d\n", ret);
+                                       netdev_info(dev,
+                                                   "request_irq failed for tx %d\n",
+                                                   ret);
                                        pci_disable_msix(np->pci_dev);
                                        np->msi_flags &= ~NV_MSI_X_ENABLED;
                                        goto out_free_rx;
@@ -3812,7 +3699,9 @@ static int nv_request_irq(struct net_device *dev, int intr_test)
                                sprintf(np->name_other, "%s-other", dev->name);
                                if (request_irq(np->msi_x_entry[NV_MSI_X_VECTOR_OTHER].vector,
                                                nv_nic_irq_other, IRQF_SHARED, np->name_other, dev) != 0) {
-                                       printk(KERN_INFO "forcedeth: request_irq failed for link %d\n", ret);
+                                       netdev_info(dev,
+                                                   "request_irq failed for link %d\n",
+                                                   ret);
                                        pci_disable_msix(np->pci_dev);
                                        np->msi_flags &= ~NV_MSI_X_ENABLED;
                                        goto out_free_tx;
@@ -3826,7 +3715,9 @@ static int nv_request_irq(struct net_device *dev, int intr_test)
                        } else {
                                /* Request irq for all interrupts */
                                if (request_irq(np->msi_x_entry[NV_MSI_X_VECTOR_ALL].vector, handler, IRQF_SHARED, dev->name, dev) != 0) {
-                                       printk(KERN_INFO "forcedeth: request_irq failed %d\n", ret);
+                                       netdev_info(dev,
+                                                   "request_irq failed %d\n",
+                                                   ret);
                                        pci_disable_msix(np->pci_dev);
                                        np->msi_flags &= ~NV_MSI_X_ENABLED;
                                        goto out_err;
@@ -3844,7 +3735,8 @@ static int nv_request_irq(struct net_device *dev, int intr_test)
                        np->msi_flags |= NV_MSI_ENABLED;
                        dev->irq = np->pci_dev->irq;
                        if (request_irq(np->pci_dev->irq, handler, IRQF_SHARED, dev->name, dev) != 0) {
-                               printk(KERN_INFO "forcedeth: request_irq failed %d\n", ret);
+                               netdev_info(dev, "request_irq failed %d\n",
+                                           ret);
                                pci_disable_msi(np->pci_dev);
                                np->msi_flags &= ~NV_MSI_ENABLED;
                                dev->irq = np->pci_dev->irq;
@@ -3929,7 +3821,7 @@ static void nv_do_nic_poll(unsigned long data)
 
        if (np->recover_error) {
                np->recover_error = 0;
-               printk(KERN_INFO "%s: MAC in recoverable error state\n", dev->name);
+               netdev_info(dev, "MAC in recoverable error state\n");
                if (netif_running(dev)) {
                        netif_tx_lock_bh(dev);
                        netif_addr_lock(dev);
@@ -4057,6 +3949,7 @@ static int nv_set_wol(struct net_device *dev, struct ethtool_wolinfo *wolinfo)
                writel(flags, base + NvRegWakeUpFlags);
                spin_unlock_irq(&np->lock);
        }
+       device_set_wakeup_enable(&np->pci_dev->dev, np->wolenabled);
        return 0;
 }
 
@@ -4225,14 +4118,14 @@ static int nv_set_settings(struct net_device *dev, struct ethtool_cmd *ecmd)
                }
 
                if (netif_running(dev))
-                       printk(KERN_INFO "%s: link down.\n", dev->name);
+                       netdev_info(dev, "link down\n");
                bmcr = mii_rw(dev, np->phyaddr, MII_BMCR, MII_READ);
                if (np->phy_model == PHY_MODEL_MARVELL_E3016) {
                        bmcr |= BMCR_ANENABLE;
                        /* reset the phy in order for settings to stick,
                         * and cause autoneg to start */
                        if (phy_reset(dev, bmcr)) {
-                               printk(KERN_INFO "%s: phy reset failed\n", dev->name);
+                               netdev_info(dev, "phy reset failed\n");
                                return -EINVAL;
                        }
                } else {
@@ -4281,7 +4174,7 @@ static int nv_set_settings(struct net_device *dev, struct ethtool_cmd *ecmd)
                if (np->phy_oui == PHY_OUI_MARVELL) {
                        /* reset the phy in order for forced mode settings to stick */
                        if (phy_reset(dev, bmcr)) {
-                               printk(KERN_INFO "%s: phy reset failed\n", dev->name);
+                               netdev_info(dev, "phy reset failed\n");
                                return -EINVAL;
                        }
                } else {
@@ -4343,7 +4236,7 @@ static int nv_nway_reset(struct net_device *dev)
                        spin_unlock(&np->lock);
                        netif_addr_unlock(dev);
                        netif_tx_unlock_bh(dev);
-                       printk(KERN_INFO "%s: link down.\n", dev->name);
+                       netdev_info(dev, "link down\n");
                }
 
                bmcr = mii_rw(dev, np->phyaddr, MII_BMCR, MII_READ);
@@ -4351,7 +4244,7 @@ static int nv_nway_reset(struct net_device *dev)
                        bmcr |= BMCR_ANENABLE;
                        /* reset the phy in order for settings to stick*/
                        if (phy_reset(dev, bmcr)) {
-                               printk(KERN_INFO "%s: phy reset failed\n", dev->name);
+                               netdev_info(dev, "phy reset failed\n");
                                return -EINVAL;
                        }
                } else {
@@ -4524,12 +4417,11 @@ static int nv_set_pauseparam(struct net_device *dev, struct ethtool_pauseparam*
 
        if ((!np->autoneg && np->duplex == 0) ||
            (np->autoneg && !pause->autoneg && np->duplex == 0)) {
-               printk(KERN_INFO "%s: can not set pause settings when forced link is in half duplex.\n",
-                      dev->name);
+               netdev_info(dev, "can not set pause settings when forced link is in half duplex\n");
                return -EINVAL;
        }
        if (pause->tx_pause && !(np->pause_flags & NV_PAUSEFRAME_TX_CAPABLE)) {
-               printk(KERN_INFO "%s: hardware does not support tx pause frames.\n", dev->name);
+               netdev_info(dev, "hardware does not support tx pause frames\n");
                return -EINVAL;
        }
 
@@ -4564,7 +4456,7 @@ static int nv_set_pauseparam(struct net_device *dev, struct ethtool_pauseparam*
                mii_rw(dev, np->phyaddr, MII_ADVERTISE, adv);
 
                if (netif_running(dev))
-                       printk(KERN_INFO "%s: link down.\n", dev->name);
+                       netdev_info(dev, "link down\n");
                bmcr = mii_rw(dev, np->phyaddr, MII_BMCR, MII_READ);
                bmcr |= (BMCR_ANENABLE | BMCR_ANRESTART);
                mii_rw(dev, np->phyaddr, MII_BMCR, bmcr);
@@ -4826,8 +4718,7 @@ static int nv_loopback_test(struct net_device *dev)
        pkt_len = ETH_DATA_LEN;
        tx_skb = dev_alloc_skb(pkt_len);
        if (!tx_skb) {
-               printk(KERN_ERR "dev_alloc_skb() failed during loopback test"
-                        " of %s\n", dev->name);
+               netdev_err(dev, "dev_alloc_skb() failed during loopback test\n");
                ret = 0;
                goto out;
        }
@@ -4874,21 +4765,15 @@ static int nv_loopback_test(struct net_device *dev)
        if (ret) {
                if (len != pkt_len) {
                        ret = 0;
-                       dprintk(KERN_DEBUG "%s: loopback len mismatch %d vs %d\n",
-                               dev->name, len, pkt_len);
                } else {
                        rx_skb = np->rx_skb[0].skb;
                        for (i = 0; i < pkt_len; i++) {
                                if (rx_skb->data[i] != (u8)(i & 0xff)) {
                                        ret = 0;
-                                       dprintk(KERN_DEBUG "%s: loopback pattern check failed on byte %d\n",
-                                               dev->name, i);
                                        break;
                                }
                        }
                }
-       } else {
-               dprintk(KERN_DEBUG "%s: loopback - did not receive test packet\n", dev->name);
        }
 
        pci_unmap_single(np->pci_dev, test_dma_addr,
@@ -5138,8 +5023,6 @@ static int nv_open(struct net_device *dev)
        int oom, i;
        u32 low;
 
-       dprintk(KERN_DEBUG "nv_open: begin\n");
-
        /* power up phy */
        mii_rw(dev, np->phyaddr, MII_BMCR,
               mii_rw(dev, np->phyaddr, MII_BMCR, MII_READ) & ~BMCR_PDOWN);
@@ -5190,7 +5073,8 @@ static int nv_open(struct net_device *dev)
        if (reg_delay(dev, NvRegUnknownSetupReg5,
                      NVREG_UNKSETUP5_BIT31, NVREG_UNKSETUP5_BIT31,
                      NV_SETUP5_DELAY, NV_SETUP5_DELAYMAX))
-               printk(KERN_INFO "open: SetupReg5, Bit 31 remained off\n");
+               netdev_info(dev,
+                           "%s: SetupReg5, Bit 31 remained off\n", __func__);
 
        writel(0, base + NvRegMIIMask);
        writel(NVREG_IRQSTAT_MASK, base + NvRegIrqStatus);
@@ -5266,7 +5150,6 @@ static int nv_open(struct net_device *dev)
                u32 miistat;
                miistat = readl(base + NvRegMIIStatus);
                writel(NVREG_MIISTAT_MASK_ALL, base + NvRegMIIStatus);
-               dprintk(KERN_INFO "startup: got 0x%08x.\n", miistat);
        }
        /* set linkspeed to invalid value, thus force nv_update_linkspeed
         * to init hw */
@@ -5279,7 +5162,7 @@ static int nv_open(struct net_device *dev)
        if (ret) {
                netif_carrier_on(dev);
        } else {
-               printk(KERN_INFO "%s: no link during initialization.\n", dev->name);
+               netdev_info(dev, "no link during initialization\n");
                netif_carrier_off(dev);
        }
        if (oom)
@@ -5322,7 +5205,6 @@ static int nv_close(struct net_device *dev)
        base = get_hwbase(dev);
        nv_disable_hw_interrupts(dev, np->irqmask);
        pci_push(base);
-       dprintk(KERN_INFO "%s: Irqmask is zero again\n", dev->name);
 
        spin_unlock_irq(&np->lock);
 
@@ -5391,8 +5273,8 @@ static int __devinit nv_probe(struct pci_dev *pci_dev, const struct pci_device_i
        static int printed_version;
 
        if (!printed_version++)
-               printk(KERN_INFO "%s: Reverse Engineered nForce ethernet"
-                      " driver. Version %s.\n", DRV_NAME, FORCEDETH_VERSION);
+               pr_info("Reverse Engineered nForce ethernet driver. Version %s.\n",
+                       FORCEDETH_VERSION);
 
        dev = alloc_etherdev(sizeof(struct fe_priv));
        err = -ENOMEM;
@@ -5435,10 +5317,6 @@ static int __devinit nv_probe(struct pci_dev *pci_dev, const struct pci_device_i
        err = -EINVAL;
        addr = 0;
        for (i = 0; i < DEVICE_COUNT_RESOURCE; i++) {
-               dprintk(KERN_DEBUG "%s: resource %d start %p len %ld flags 0x%08lx.\n",
-                               pci_name(pci_dev), i, (void *)pci_resource_start(pci_dev, i),
-                               pci_resource_len(pci_dev, i),
-                               pci_resource_flags(pci_dev, i));
                if (pci_resource_flags(pci_dev, i) & IORESOURCE_MEM &&
                                pci_resource_len(pci_dev, i) >= np->register_size) {
                        addr = pci_resource_start(pci_dev, i);
@@ -5446,8 +5324,7 @@ static int __devinit nv_probe(struct pci_dev *pci_dev, const struct pci_device_i
                }
        }
        if (i == DEVICE_COUNT_RESOURCE) {
-               dev_printk(KERN_INFO, &pci_dev->dev,
-                          "Couldn't find register window\n");
+               dev_info(&pci_dev->dev, "Couldn't find register window\n");
                goto out_relreg;
        }
 
@@ -5463,13 +5340,13 @@ static int __devinit nv_probe(struct pci_dev *pci_dev, const struct pci_device_i
                np->txrxctl_bits = NVREG_TXRXCTL_DESC_3;
                if (dma_64bit) {
                        if (pci_set_dma_mask(pci_dev, DMA_BIT_MASK(39)))
-                               dev_printk(KERN_INFO, &pci_dev->dev,
-                                       "64-bit DMA failed, using 32-bit addressing\n");
+                               dev_info(&pci_dev->dev,
+                                        "64-bit DMA failed, using 32-bit addressing\n");
                        else
                                dev->features |= NETIF_F_HIGHDMA;
                        if (pci_set_consistent_dma_mask(pci_dev, DMA_BIT_MASK(39))) {
-                               dev_printk(KERN_INFO, &pci_dev->dev,
-                                       "64-bit DMA (consistent) failed, using 32-bit ring buffers\n");
+                               dev_info(&pci_dev->dev,
+                                        "64-bit DMA (consistent) failed, using 32-bit ring buffers\n");
                        }
                }
        } else if (id->driver_data & DEV_HAS_LARGEDESC) {
@@ -5590,7 +5467,9 @@ static int __devinit nv_probe(struct pci_dev *pci_dev, const struct pci_device_i
                dev->dev_addr[4] = (np->orig_mac[0] >>  8) & 0xff;
                dev->dev_addr[5] = (np->orig_mac[0] >>  0) & 0xff;
                writel(txreg|NVREG_TRANSMITPOLL_MAC_ADDR_REV, base + NvRegTransmitPoll);
-               printk(KERN_DEBUG "nv_probe: set workaround bit for reversed mac addr\n");
+               dev_dbg(&pci_dev->dev,
+                       "%s: set workaround bit for reversed mac addr\n",
+                       __func__);
        }
        memcpy(dev->perm_addr, dev->dev_addr, dev->addr_len);
 
@@ -5599,28 +5478,21 @@ static int __devinit nv_probe(struct pci_dev *pci_dev, const struct pci_device_i
                 * Bad mac address. At least one bios sets the mac address
                 * to 01:23:45:67:89:ab
                 */
-               dev_printk(KERN_ERR, &pci_dev->dev,
-                       "Invalid Mac address detected: %pM\n",
+               dev_err(&pci_dev->dev,
+                       "Invalid MAC address detected: %pM - Please complain to your hardware vendor.\n",
                        dev->dev_addr);
-               dev_printk(KERN_ERR, &pci_dev->dev,
-                       "Please complain to your hardware vendor. Switching to a random MAC.\n");
                random_ether_addr(dev->dev_addr);
+               dev_err(&pci_dev->dev,
+                       "Using random MAC address: %pM\n", dev->dev_addr);
        }
 
-       dprintk(KERN_DEBUG "%s: MAC Address %pM\n",
-               pci_name(pci_dev), dev->dev_addr);
-
        /* set mac address */
        nv_copy_mac_to_hw(dev);
 
-       /* Workaround current PCI init glitch:  wakeup bits aren't
-        * being set from PCI PM capability.
-        */
-       device_init_wakeup(&pci_dev->dev, 1);
-
        /* disable WOL */
        writel(0, base + NvRegWakeUpFlags);
        np->wolenabled = 0;
+       device_set_wakeup_enable(&pci_dev->dev, false);
 
        if (id->driver_data & DEV_HAS_POWER_CNTRL) {
 
@@ -5671,11 +5543,9 @@ static int __devinit nv_probe(struct pci_dev *pci_dev, const struct pci_device_i
        if (id->driver_data & DEV_NEED_TIMERIRQ)
                np->irqmask |= NVREG_IRQ_TIMER;
        if (id->driver_data & DEV_NEED_LINKTIMER) {
-               dprintk(KERN_INFO "%s: link timer on.\n", pci_name(pci_dev));
                np->need_linktimer = 1;
                np->link_timeout = jiffies + LINK_TIMEOUT;
        } else {
-               dprintk(KERN_INFO "%s: link timer off.\n", pci_name(pci_dev));
                np->need_linktimer = 0;
        }
 
@@ -5706,16 +5576,12 @@ static int __devinit nv_probe(struct pci_dev *pci_dev, const struct pci_device_i
                        np->mac_in_use = 1;
                        if (np->mgmt_version > 0)
                                np->mac_in_use = readl(base + NvRegMgmtUnitControl) & NVREG_MGMTUNITCONTROL_INUSE;
-                       dprintk(KERN_INFO "%s: mgmt unit is running. mac in use %x.\n",
-                               pci_name(pci_dev), np->mac_in_use);
                        /* management unit setup the phy already? */
                        if (np->mac_in_use &&
                            ((readl(base + NvRegTransmitterControl) & NVREG_XMITCTL_SYNC_MASK) ==
                             NVREG_XMITCTL_SYNC_PHY_INIT)) {
                                /* phy is inited by mgmt unit */
                                phyinitialized = 1;
-                               dprintk(KERN_INFO "%s: Phy already initialized by mgmt unit.\n",
-                                       pci_name(pci_dev));
                        } else {
                                /* we need to init the phy */
                        }
@@ -5741,8 +5607,6 @@ static int __devinit nv_probe(struct pci_dev *pci_dev, const struct pci_device_i
                np->phy_model = id2 & PHYID2_MODEL_MASK;
                id1 = (id1 & PHYID1_OUI_MASK) << PHYID1_OUI_SHFT;
                id2 = (id2 & PHYID2_OUI_MASK) >> PHYID2_OUI_SHFT;
-               dprintk(KERN_DEBUG "%s: open: Found PHY %04x:%04x at address %d.\n",
-                       pci_name(pci_dev), id1, id2, phyaddr);
                np->phyaddr = phyaddr;
                np->phy_oui = id1 | id2;
 
@@ -5756,8 +5620,7 @@ static int __devinit nv_probe(struct pci_dev *pci_dev, const struct pci_device_i
                break;
        }
        if (i == 33) {
-               dev_printk(KERN_INFO, &pci_dev->dev,
-                       "open: Could not find a valid PHY.\n");
+               dev_info(&pci_dev->dev, "open: Could not find a valid PHY\n");
                goto out_error;
        }
 
@@ -5778,37 +5641,27 @@ static int __devinit nv_probe(struct pci_dev *pci_dev, const struct pci_device_i
 
        err = register_netdev(dev);
        if (err) {
-               dev_printk(KERN_INFO, &pci_dev->dev,
-                          "unable to register netdev: %d\n", err);
+               dev_info(&pci_dev->dev, "unable to register netdev: %d\n", err);
                goto out_error;
        }
 
-       dev_printk(KERN_INFO, &pci_dev->dev, "ifname %s, PHY OUI 0x%x @ %d, "
-                  "addr %2.2x:%2.2x:%2.2x:%2.2x:%2.2x:%2.2x\n",
-                  dev->name,
-                  np->phy_oui,
-                  np->phyaddr,
-                  dev->dev_addr[0],
-                  dev->dev_addr[1],
-                  dev->dev_addr[2],
-                  dev->dev_addr[3],
-                  dev->dev_addr[4],
-                  dev->dev_addr[5]);
-
-       dev_printk(KERN_INFO, &pci_dev->dev, "%s%s%s%s%s%s%s%s%s%sdesc-v%u\n",
-               dev->features & NETIF_F_HIGHDMA ? "highdma " : "",
-               dev->features & (NETIF_F_IP_CSUM | NETIF_F_SG) ?
+       dev_info(&pci_dev->dev, "ifname %s, PHY OUI 0x%x @ %d, addr %pM\n",
+                dev->name, np->phy_oui, np->phyaddr, dev->dev_addr);
+
+       dev_info(&pci_dev->dev, "%s%s%s%s%s%s%s%s%s%sdesc-v%u\n",
+                dev->features & NETIF_F_HIGHDMA ? "highdma " : "",
+                dev->features & (NETIF_F_IP_CSUM | NETIF_F_SG) ?
                        "csum " : "",
-               dev->features & (NETIF_F_HW_VLAN_RX | NETIF_F_HW_VLAN_TX) ?
+                dev->features & (NETIF_F_HW_VLAN_RX | NETIF_F_HW_VLAN_TX) ?
                        "vlan " : "",
-               id->driver_data & DEV_HAS_POWER_CNTRL ? "pwrctl " : "",
-               id->driver_data & DEV_HAS_MGMT_UNIT ? "mgmt " : "",
-               id->driver_data & DEV_NEED_TIMERIRQ ? "timirq " : "",
-               np->gigabit == PHY_GIGABIT ? "gbit " : "",
-               np->need_linktimer ? "lnktim " : "",
-               np->msi_flags & NV_MSI_CAPABLE ? "msi " : "",
-               np->msi_flags & NV_MSI_X_CAPABLE ? "msi-x " : "",
-               np->desc_ver);
+                id->driver_data & DEV_HAS_POWER_CNTRL ? "pwrctl " : "",
+                id->driver_data & DEV_HAS_MGMT_UNIT ? "mgmt " : "",
+                id->driver_data & DEV_NEED_TIMERIRQ ? "timirq " : "",
+                np->gigabit == PHY_GIGABIT ? "gbit " : "",
+                np->need_linktimer ? "lnktim " : "",
+                np->msi_flags & NV_MSI_CAPABLE ? "msi " : "",
+                np->msi_flags & NV_MSI_X_CAPABLE ? "msi-x " : "",
+                np->desc_ver);
 
        return 0;
 
@@ -5890,8 +5743,9 @@ static void __devexit nv_remove(struct pci_dev *pci_dev)
 }
 
 #ifdef CONFIG_PM
-static int nv_suspend(struct pci_dev *pdev, pm_message_t state)
+static int nv_suspend(struct device *device)
 {
+       struct pci_dev *pdev = to_pci_dev(device);
        struct net_device *dev = pci_get_drvdata(pdev);
        struct fe_priv *np = netdev_priv(dev);
        u8 __iomem *base = get_hwbase(dev);
@@ -5907,25 +5761,17 @@ static int nv_suspend(struct pci_dev *pdev, pm_message_t state)
        for (i = 0; i <= np->register_size/sizeof(u32); i++)
                np->saved_config_space[i] = readl(base + i*sizeof(u32));
 
-       pci_save_state(pdev);
-       pci_enable_wake(pdev, pci_choose_state(pdev, state), np->wolenabled);
-       pci_disable_device(pdev);
-       pci_set_power_state(pdev, pci_choose_state(pdev, state));
        return 0;
 }
 
-static int nv_resume(struct pci_dev *pdev)
+static int nv_resume(struct device *device)
 {
+       struct pci_dev *pdev = to_pci_dev(device);
        struct net_device *dev = pci_get_drvdata(pdev);
        struct fe_priv *np = netdev_priv(dev);
        u8 __iomem *base = get_hwbase(dev);
        int i, rc = 0;
 
-       pci_set_power_state(pdev, PCI_D0);
-       pci_restore_state(pdev);
-       /* ack any pending wake events, disable PME */
-       pci_enable_wake(pdev, PCI_D0, 0);
-
        /* restore non-pci configuration space */
        for (i = 0; i <= np->register_size/sizeof(u32); i++)
                writel(np->saved_config_space[i], base+i*sizeof(u32));
@@ -5944,6 +5790,9 @@ static int nv_resume(struct pci_dev *pdev)
        return rc;
 }
 
+static SIMPLE_DEV_PM_OPS(nv_pm_ops, nv_suspend, nv_resume);
+#define NV_PM_OPS (&nv_pm_ops)
+
 static void nv_shutdown(struct pci_dev *pdev)
 {
        struct net_device *dev = pci_get_drvdata(pdev);
@@ -5966,15 +5815,13 @@ static void nv_shutdown(struct pci_dev *pdev)
         * only put the device into D3 if we really go for poweroff.
         */
        if (system_state == SYSTEM_POWER_OFF) {
-               if (pci_enable_wake(pdev, PCI_D3cold, np->wolenabled))
-                       pci_enable_wake(pdev, PCI_D3hot, np->wolenabled);
+               pci_wake_from_d3(pdev, np->wolenabled);
                pci_set_power_state(pdev, PCI_D3hot);
        }
 }
 #else
-#define nv_suspend NULL
+#define NV_PM_OPS NULL
 #define nv_shutdown NULL
-#define nv_resume NULL
 #endif /* CONFIG_PM */
 
 static DEFINE_PCI_DEVICE_TABLE(pci_tbl) = {
@@ -6146,9 +5993,8 @@ static struct pci_driver driver = {
        .id_table       = pci_tbl,
        .probe          = nv_probe,
        .remove         = __devexit_p(nv_remove),
-       .suspend        = nv_suspend,
-       .resume         = nv_resume,
        .shutdown       = nv_shutdown,
+       .driver.pm      = NV_PM_OPS,
 };
 
 static int __init init_nic(void)