signed char phys[4];                            /* MII device addresses. */
        u16 advertising;                                        /* NWay media advertisement */
        int mii_phy_cnt;
+       u32 ethtool_ops_nesting;
        struct mii_if_info mii;
        unsigned int tx_full:1;                         /* The Tx queue is full. */
        unsigned int default_port:4;            /* Last dev->if_port value. */
        struct epic_private *ep = netdev_priv(dev);
        void __iomem *ioaddr = ep->ioaddr;
 
+       if (ep->ethtool_ops_nesting == U32_MAX)
+               return -EBUSY;
        /* power-up, if interface is down */
-       if (!netif_running(dev)) {
+       if (!ep->ethtool_ops_nesting++ && !netif_running(dev)) {
                ew32(GENCTL, 0x0200);
                ew32(NVCTL, (er32(NVCTL) & ~0x003c) | 0x4800);
        }
        void __iomem *ioaddr = ep->ioaddr;
 
        /* power-down, if interface is down */
-       if (!netif_running(dev)) {
+       if (!--ep->ethtool_ops_nesting && !netif_running(dev)) {
                ew32(GENCTL, 0x0008);
                ew32(NVCTL, (er32(NVCTL) & ~0x483c) | 0x0000);
        }