> +#ifdef CONFIG_PM > +static void lan743x_ethtool_get_wol(struct net_device *netdev, > + struct ethtool_wolinfo *wol) > +{ > + struct lan743x_adapter *adapter = netdev_priv(netdev); > + > + wol->supported = 0; > + wol->wolopts = 0; > + phy_ethtool_get_wol(netdev->phydev, wol); > + > + wol->supported &= WAKE_BCAST | WAKE_UCAST | WAKE_MCAST | > + WAKE_MAGIC | WAKE_PHY | WAKE_ARP;
Hi Bryan Say the PHY set WAKE_MAGICSECURE, because it supports that. This AND then wipes it out, making the call to phy_ethtool_get_wol() pointless. In fact, should this AND be an OR? > + > +#ifdef CONFIG_PM > +static int lan743x_ethtool_set_wol(struct net_device *netdev, > + struct ethtool_wolinfo *wol) > +{ > + struct lan743x_adapter *adapter = netdev_priv(netdev); > + > + if (wol->wolopts & WAKE_MAGICSECURE) > + return -EOPNOTSUPP; The PHY might support this. Since you call phy_ethtool_set_wol(), you should give it the chance. Andrew