diff mbox series

[net,V3,2/3] net: lan743x: Support WOL at both the PHY and MAC appropriately

Message ID 20240605101611.18791-3-Raju.Lakkaraju@microchip.com (mailing list archive)
State Superseded
Delegated to: Netdev Maintainers
Headers show
Series net: lan743x: Fixes for multiple WOL related issues | expand

Checks

Context Check Description
netdev/series_format success Posting correctly formatted
netdev/tree_selection success Clearly marked for net
netdev/ynl success Generated files up to date; no warnings/errors; no diff in generated;
netdev/fixes_present success Fixes tag present in non-next series
netdev/header_inline success No static functions without inline keyword in header files
netdev/build_32bit success Errors and warnings before: 900 this patch: 900
netdev/build_tools success No tools touched, skip
netdev/cc_maintainers success CCed 7 of 7 maintainers
netdev/build_clang success Errors and warnings before: 904 this patch: 904
netdev/verify_signedoff success Signed-off-by tag matches author and committer
netdev/deprecated_api success None detected
netdev/check_selftest success No net selftest shell script
netdev/verify_fixes success Fixes tag looks correct
netdev/build_allmodconfig_warn success Errors and warnings before: 904 this patch: 904
netdev/checkpatch warning WARNING: Please use correct Fixes: style 'Fixes: <12 chars of sha1> ("<title line>")' - ie: 'Fixes: e9e13b6adc33 ("lan743x: fix for potential NULL pointer dereference with bare card")'
netdev/build_clang_rust success No Rust files in patch. Skipping build
netdev/kdoc success Errors and warnings before: 0 this patch: 0
netdev/source_inline success Was 0 now: 0
netdev/contest fail net-next-2024-06-05--12-00 (tests: 1043)

Commit Message

Raju Lakkaraju - I30499 June 5, 2024, 10:16 a.m. UTC
Prevent options not supported by the PHY from being requested to it by the MAC
Whenever a WOL option is supported by both, the PHY is given priority
since that usually leads to better power savings

Fixes: e9e13b6adc338 ("lan743x: fix for potential NULL pointer dereference with bare card")
Signed-off-by: Raju Lakkaraju <Raju.Lakkaraju@microchip.com>
---
Change List:
------------
V2 -> V3:
  - Remove the "phy does not support WOL" debug message which is not required
  - Remove WAKE_PHY support option from Ethernet MAC (LAN743x/PCI11x1x) driver
  - Add "phy_wol_supported" and "phy_wolopts" variables to hold PHY's WOL config
V1 -> V2:
  - Repost - No change
V0 -> V1:
  - Change the "phy does not support WOL" print from netif_info() to
    netif_dbg()

 .../net/ethernet/microchip/lan743x_ethtool.c  | 44 +++++++++++++++++--
 drivers/net/ethernet/microchip/lan743x_main.c | 16 +++++--
 drivers/net/ethernet/microchip/lan743x_main.h |  4 ++
 3 files changed, 56 insertions(+), 8 deletions(-)

Comments

Wojciech Drewek June 5, 2024, 11:20 a.m. UTC | #1
On 05.06.2024 12:16, Raju Lakkaraju wrote:
> Prevent options not supported by the PHY from being requested to it by the MAC
> Whenever a WOL option is supported by both, the PHY is given priority
> since that usually leads to better power savings
> 
> Fixes: e9e13b6adc338 ("lan743x: fix for potential NULL pointer dereference with bare card")
> Signed-off-by: Raju Lakkaraju <Raju.Lakkaraju@microchip.com>
> ---

Reviewed-by: Wojciech Drewek <wojciech.drewek@intel.com>

> Change List:
> ------------
> V2 -> V3:
>   - Remove the "phy does not support WOL" debug message which is not required
>   - Remove WAKE_PHY support option from Ethernet MAC (LAN743x/PCI11x1x) driver
>   - Add "phy_wol_supported" and "phy_wolopts" variables to hold PHY's WOL config
> V1 -> V2:
>   - Repost - No change
> V0 -> V1:
>   - Change the "phy does not support WOL" print from netif_info() to
>     netif_dbg()
> 
>  .../net/ethernet/microchip/lan743x_ethtool.c  | 44 +++++++++++++++++--
>  drivers/net/ethernet/microchip/lan743x_main.c | 16 +++++--
>  drivers/net/ethernet/microchip/lan743x_main.h |  4 ++
>  3 files changed, 56 insertions(+), 8 deletions(-)
> 
> diff --git a/drivers/net/ethernet/microchip/lan743x_ethtool.c b/drivers/net/ethernet/microchip/lan743x_ethtool.c
> index d0f4ff4ee075..0d1740d64676 100644
> --- a/drivers/net/ethernet/microchip/lan743x_ethtool.c
> +++ b/drivers/net/ethernet/microchip/lan743x_ethtool.c
> @@ -1127,8 +1127,12 @@ static void lan743x_ethtool_get_wol(struct net_device *netdev,
>  	if (netdev->phydev)
>  		phy_ethtool_get_wol(netdev->phydev, wol);
>  
> -	wol->supported |= WAKE_BCAST | WAKE_UCAST | WAKE_MCAST |
> -		WAKE_MAGIC | WAKE_PHY | WAKE_ARP;
> +	if (wol->supported != adapter->phy_wol_supported)
> +		netif_warn(adapter, drv, adapter->netdev,
> +			   "PHY changed its supported WOL! old=%x, new=%x\n",
> +			   adapter->phy_wol_supported, wol->supported);
> +
> +	wol->supported |= MAC_SUPPORTED_WAKES;
>  
>  	if (adapter->is_pci11x1x)
>  		wol->supported |= WAKE_MAGICSECURE;
> @@ -1143,7 +1147,39 @@ static int lan743x_ethtool_set_wol(struct net_device *netdev,
>  {
>  	struct lan743x_adapter *adapter = netdev_priv(netdev);
>  
> +	/* WAKE_MAGICSEGURE is a modifier of and only valid together with
> +	 * WAKE_MAGIC
> +	 */
> +	if ((wol->wolopts & WAKE_MAGICSECURE) && !(wol->wolopts & WAKE_MAGIC))
> +		return -EINVAL;
> +
> +	if (netdev->phydev) {
> +		struct ethtool_wolinfo phy_wol;
> +		int ret;
> +
> +		phy_wol.wolopts = wol->wolopts & adapter->phy_wol_supported;
> +
> +		/* If WAKE_MAGICSECURE was requested, filter out WAKE_MAGIC
> +		 * for PHYs that do not support WAKE_MAGICSECURE
> +		 */
> +		if (wol->wolopts & WAKE_MAGICSECURE &&
> +		    !(adapter->phy_wol_supported & WAKE_MAGICSECURE))
> +			phy_wol.wolopts &= ~WAKE_MAGIC;
> +
> +		ret = phy_ethtool_set_wol(netdev->phydev, &phy_wol);
> +		if (ret && (ret != -EOPNOTSUPP))
> +			return ret;
> +
> +		if (ret == -EOPNOTSUPP)
> +			adapter->phy_wolopts = 0;
> +		else
> +			adapter->phy_wolopts = phy_wol.wolopts;
> +	} else {
> +		adapter->phy_wolopts = 0;
> +	}
> +
>  	adapter->wolopts = 0;
> +	wol->wolopts &= ~adapter->phy_wolopts;
>  	if (wol->wolopts & WAKE_UCAST)
>  		adapter->wolopts |= WAKE_UCAST;
>  	if (wol->wolopts & WAKE_MCAST)
> @@ -1164,10 +1200,10 @@ static int lan743x_ethtool_set_wol(struct net_device *netdev,
>  		memset(adapter->sopass, 0, sizeof(u8) * SOPASS_MAX);
>  	}
>  
> +	wol->wolopts = adapter->wolopts | adapter->phy_wolopts;
>  	device_set_wakeup_enable(&adapter->pdev->dev, (bool)wol->wolopts);
>  
> -	return netdev->phydev ? phy_ethtool_set_wol(netdev->phydev, wol)
> -			: -ENETDOWN;
> +	return 0;
>  }
>  #endif /* CONFIG_PM */
>  
> diff --git a/drivers/net/ethernet/microchip/lan743x_main.c b/drivers/net/ethernet/microchip/lan743x_main.c
> index 6a40b961fafb..b6810840bc61 100644
> --- a/drivers/net/ethernet/microchip/lan743x_main.c
> +++ b/drivers/net/ethernet/microchip/lan743x_main.c
> @@ -3118,6 +3118,15 @@ static int lan743x_netdev_open(struct net_device *netdev)
>  		if (ret)
>  			goto close_tx;
>  	}
> +
> +	if (adapter->netdev->phydev) {
> +		struct ethtool_wolinfo wol = { .cmd = ETHTOOL_GWOL };
> +
> +		phy_ethtool_get_wol(netdev->phydev, &wol);
> +		adapter->phy_wol_supported = wol.supported;
> +		adapter->phy_wolopts = wol.wolopts;
> +	}
> +
>  	return 0;
>  
>  close_tx:
> @@ -3587,10 +3596,9 @@ static void lan743x_pm_set_wol(struct lan743x_adapter *adapter)
>  
>  	pmtctl |= PMT_CTL_ETH_PHY_D3_COLD_OVR_ | PMT_CTL_ETH_PHY_D3_OVR_;
>  
> -	if (adapter->wolopts & WAKE_PHY) {
> -		pmtctl |= PMT_CTL_ETH_PHY_EDPD_PLL_CTL_;
> +	if (adapter->phy_wolopts)
>  		pmtctl |= PMT_CTL_ETH_PHY_WAKE_EN_;
> -	}
> +
>  	if (adapter->wolopts & WAKE_MAGIC) {
>  		wucsr |= MAC_WUCSR_MPEN_;
>  		macrx |= MAC_RX_RXEN_;
> @@ -3686,7 +3694,7 @@ static int lan743x_pm_suspend(struct device *dev)
>  	lan743x_csr_write(adapter, MAC_WUCSR2, 0);
>  	lan743x_csr_write(adapter, MAC_WK_SRC, 0xFFFFFFFF);
>  
> -	if (adapter->wolopts)
> +	if (adapter->wolopts || adapter->phy_wolopts)
>  		lan743x_pm_set_wol(adapter);
>  
>  	if (adapter->is_pci11x1x) {
> diff --git a/drivers/net/ethernet/microchip/lan743x_main.h b/drivers/net/ethernet/microchip/lan743x_main.h
> index fac0f33d10b2..3b2585a384e2 100644
> --- a/drivers/net/ethernet/microchip/lan743x_main.h
> +++ b/drivers/net/ethernet/microchip/lan743x_main.h
> @@ -1042,6 +1042,8 @@ enum lan743x_sgmii_lsd {
>  	LINK_2500_SLAVE
>  };
>  
> +#define MAC_SUPPORTED_WAKES  (WAKE_BCAST | WAKE_UCAST | WAKE_MCAST | \
> +			      WAKE_MAGIC | WAKE_ARP)
>  struct lan743x_adapter {
>  	struct net_device       *netdev;
>  	struct mii_bus		*mdiobus;
> @@ -1049,6 +1051,8 @@ struct lan743x_adapter {
>  #ifdef CONFIG_PM
>  	u32			wolopts;
>  	u8			sopass[SOPASS_MAX];
> +	u32			phy_wolopts;
> +	u32			phy_wol_supported;
>  #endif
>  	struct pci_dev		*pdev;
>  	struct lan743x_csr      csr;
kernel test robot June 5, 2024, 2:56 p.m. UTC | #2
Hi Raju,

kernel test robot noticed the following build errors:

[auto build test ERROR on net/main]

url:    https://github.com/intel-lab-lkp/linux/commits/Raju-Lakkaraju/net-lan743x-disable-WOL-upon-resume-to-restore-full-data-path-operation/20240605-182110
base:   net/main
patch link:    https://lore.kernel.org/r/20240605101611.18791-3-Raju.Lakkaraju%40microchip.com
patch subject: [PATCH net V3 2/3] net: lan743x: Support WOL at both the PHY and MAC appropriately
config: alpha-allyesconfig (https://download.01.org/0day-ci/archive/20240605/202406052200.w3zuc32H-lkp@intel.com/config)
compiler: alpha-linux-gcc (GCC) 13.2.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20240605/202406052200.w3zuc32H-lkp@intel.com/reproduce)

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202406052200.w3zuc32H-lkp@intel.com/

All errors (new ones prefixed by >>):

   drivers/net/ethernet/microchip/lan743x_main.c: In function 'lan743x_netdev_open':
>> drivers/net/ethernet/microchip/lan743x_main.c:3126:24: error: 'struct lan743x_adapter' has no member named 'phy_wol_supported'
    3126 |                 adapter->phy_wol_supported = wol.supported;
         |                        ^~
>> drivers/net/ethernet/microchip/lan743x_main.c:3127:24: error: 'struct lan743x_adapter' has no member named 'phy_wolopts'
    3127 |                 adapter->phy_wolopts = wol.wolopts;
         |                        ^~


vim +3126 drivers/net/ethernet/microchip/lan743x_main.c

  3085	
  3086	static int lan743x_netdev_open(struct net_device *netdev)
  3087	{
  3088		struct lan743x_adapter *adapter = netdev_priv(netdev);
  3089		int index;
  3090		int ret;
  3091	
  3092		ret = lan743x_intr_open(adapter);
  3093		if (ret)
  3094			goto return_error;
  3095	
  3096		ret = lan743x_mac_open(adapter);
  3097		if (ret)
  3098			goto close_intr;
  3099	
  3100		ret = lan743x_phy_open(adapter);
  3101		if (ret)
  3102			goto close_mac;
  3103	
  3104		ret = lan743x_ptp_open(adapter);
  3105		if (ret)
  3106			goto close_phy;
  3107	
  3108		lan743x_rfe_open(adapter);
  3109	
  3110		for (index = 0; index < LAN743X_USED_RX_CHANNELS; index++) {
  3111			ret = lan743x_rx_open(&adapter->rx[index]);
  3112			if (ret)
  3113				goto close_rx;
  3114		}
  3115	
  3116		for (index = 0; index < adapter->used_tx_channels; index++) {
  3117			ret = lan743x_tx_open(&adapter->tx[index]);
  3118			if (ret)
  3119				goto close_tx;
  3120		}
  3121	
  3122		if (adapter->netdev->phydev) {
  3123			struct ethtool_wolinfo wol = { .cmd = ETHTOOL_GWOL };
  3124	
  3125			phy_ethtool_get_wol(netdev->phydev, &wol);
> 3126			adapter->phy_wol_supported = wol.supported;
> 3127			adapter->phy_wolopts = wol.wolopts;
  3128		}
  3129	
  3130		return 0;
  3131	
  3132	close_tx:
  3133		for (index = 0; index < adapter->used_tx_channels; index++) {
  3134			if (adapter->tx[index].ring_cpu_ptr)
  3135				lan743x_tx_close(&adapter->tx[index]);
  3136		}
  3137	
  3138	close_rx:
  3139		for (index = 0; index < LAN743X_USED_RX_CHANNELS; index++) {
  3140			if (adapter->rx[index].ring_cpu_ptr)
  3141				lan743x_rx_close(&adapter->rx[index]);
  3142		}
  3143		lan743x_ptp_close(adapter);
  3144	
  3145	close_phy:
  3146		lan743x_phy_close(adapter);
  3147	
  3148	close_mac:
  3149		lan743x_mac_close(adapter);
  3150	
  3151	close_intr:
  3152		lan743x_intr_close(adapter);
  3153	
  3154	return_error:
  3155		netif_warn(adapter, ifup, adapter->netdev,
  3156			   "Error opening LAN743x\n");
  3157		return ret;
  3158	}
  3159
kernel test robot June 5, 2024, 10:25 p.m. UTC | #3
Hi Raju,

kernel test robot noticed the following build errors:

[auto build test ERROR on net/main]

url:    https://github.com/intel-lab-lkp/linux/commits/Raju-Lakkaraju/net-lan743x-disable-WOL-upon-resume-to-restore-full-data-path-operation/20240605-182110
base:   net/main
patch link:    https://lore.kernel.org/r/20240605101611.18791-3-Raju.Lakkaraju%40microchip.com
patch subject: [PATCH net V3 2/3] net: lan743x: Support WOL at both the PHY and MAC appropriately
config: s390-allmodconfig (https://download.01.org/0day-ci/archive/20240606/202406060612.UBlHLtM8-lkp@intel.com/config)
compiler: clang version 19.0.0git (https://github.com/llvm/llvm-project d7d2d4f53fc79b4b58e8d8d08151b577c3699d4a)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20240606/202406060612.UBlHLtM8-lkp@intel.com/reproduce)

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202406060612.UBlHLtM8-lkp@intel.com/

All errors (new ones prefixed by >>):

   In file included from drivers/net/ethernet/microchip/lan743x_main.c:4:
   In file included from include/linux/module.h:19:
   In file included from include/linux/elf.h:6:
   In file included from arch/s390/include/asm/elf.h:173:
   In file included from arch/s390/include/asm/mmu_context.h:11:
   In file included from arch/s390/include/asm/pgalloc.h:18:
   In file included from include/linux/mm.h:2253:
   include/linux/vmstat.h:500:43: warning: arithmetic between different enumeration types ('enum zone_stat_item' and 'enum numa_stat_item') [-Wenum-enum-conversion]
     500 |         return vmstat_text[NR_VM_ZONE_STAT_ITEMS +
         |                            ~~~~~~~~~~~~~~~~~~~~~ ^
     501 |                            item];
         |                            ~~~~
   include/linux/vmstat.h:507:43: warning: arithmetic between different enumeration types ('enum zone_stat_item' and 'enum numa_stat_item') [-Wenum-enum-conversion]
     507 |         return vmstat_text[NR_VM_ZONE_STAT_ITEMS +
         |                            ~~~~~~~~~~~~~~~~~~~~~ ^
     508 |                            NR_VM_NUMA_EVENT_ITEMS +
         |                            ~~~~~~~~~~~~~~~~~~~~~~
   include/linux/vmstat.h:514:36: warning: arithmetic between different enumeration types ('enum node_stat_item' and 'enum lru_list') [-Wenum-enum-conversion]
     514 |         return node_stat_name(NR_LRU_BASE + lru) + 3; // skip "nr_"
         |                               ~~~~~~~~~~~ ^ ~~~
   include/linux/vmstat.h:519:43: warning: arithmetic between different enumeration types ('enum zone_stat_item' and 'enum numa_stat_item') [-Wenum-enum-conversion]
     519 |         return vmstat_text[NR_VM_ZONE_STAT_ITEMS +
         |                            ~~~~~~~~~~~~~~~~~~~~~ ^
     520 |                            NR_VM_NUMA_EVENT_ITEMS +
         |                            ~~~~~~~~~~~~~~~~~~~~~~
   include/linux/vmstat.h:528:43: warning: arithmetic between different enumeration types ('enum zone_stat_item' and 'enum numa_stat_item') [-Wenum-enum-conversion]
     528 |         return vmstat_text[NR_VM_ZONE_STAT_ITEMS +
         |                            ~~~~~~~~~~~~~~~~~~~~~ ^
     529 |                            NR_VM_NUMA_EVENT_ITEMS +
         |                            ~~~~~~~~~~~~~~~~~~~~~~
   In file included from drivers/net/ethernet/microchip/lan743x_main.c:5:
   In file included from include/linux/pci.h:39:
   In file included from include/linux/io.h:14:
   In file included from arch/s390/include/asm/io.h:93:
   include/asm-generic/io.h:548:31: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
     548 |         val = __raw_readb(PCI_IOBASE + addr);
         |                           ~~~~~~~~~~ ^
   include/asm-generic/io.h:561:61: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
     561 |         val = __le16_to_cpu((__le16 __force)__raw_readw(PCI_IOBASE + addr));
         |                                                         ~~~~~~~~~~ ^
   include/uapi/linux/byteorder/big_endian.h:37:59: note: expanded from macro '__le16_to_cpu'
      37 | #define __le16_to_cpu(x) __swab16((__force __u16)(__le16)(x))
         |                                                           ^
   include/uapi/linux/swab.h:102:54: note: expanded from macro '__swab16'
     102 | #define __swab16(x) (__u16)__builtin_bswap16((__u16)(x))
         |                                                      ^
   In file included from drivers/net/ethernet/microchip/lan743x_main.c:5:
   In file included from include/linux/pci.h:39:
   In file included from include/linux/io.h:14:
   In file included from arch/s390/include/asm/io.h:93:
   include/asm-generic/io.h:574:61: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
     574 |         val = __le32_to_cpu((__le32 __force)__raw_readl(PCI_IOBASE + addr));
         |                                                         ~~~~~~~~~~ ^
   include/uapi/linux/byteorder/big_endian.h:35:59: note: expanded from macro '__le32_to_cpu'
      35 | #define __le32_to_cpu(x) __swab32((__force __u32)(__le32)(x))
         |                                                           ^
   include/uapi/linux/swab.h:115:54: note: expanded from macro '__swab32'
     115 | #define __swab32(x) (__u32)__builtin_bswap32((__u32)(x))
         |                                                      ^
   In file included from drivers/net/ethernet/microchip/lan743x_main.c:5:
   In file included from include/linux/pci.h:39:
   In file included from include/linux/io.h:14:
   In file included from arch/s390/include/asm/io.h:93:
   include/asm-generic/io.h:585:33: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
     585 |         __raw_writeb(value, PCI_IOBASE + addr);
         |                             ~~~~~~~~~~ ^
   include/asm-generic/io.h:595:59: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
     595 |         __raw_writew((u16 __force)cpu_to_le16(value), PCI_IOBASE + addr);
         |                                                       ~~~~~~~~~~ ^
   include/asm-generic/io.h:605:59: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
     605 |         __raw_writel((u32 __force)cpu_to_le32(value), PCI_IOBASE + addr);
         |                                                       ~~~~~~~~~~ ^
   include/asm-generic/io.h:693:20: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
     693 |         readsb(PCI_IOBASE + addr, buffer, count);
         |                ~~~~~~~~~~ ^
   include/asm-generic/io.h:701:20: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
     701 |         readsw(PCI_IOBASE + addr, buffer, count);
         |                ~~~~~~~~~~ ^
   include/asm-generic/io.h:709:20: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
     709 |         readsl(PCI_IOBASE + addr, buffer, count);
         |                ~~~~~~~~~~ ^
   include/asm-generic/io.h:718:21: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
     718 |         writesb(PCI_IOBASE + addr, buffer, count);
         |                 ~~~~~~~~~~ ^
   include/asm-generic/io.h:727:21: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
     727 |         writesw(PCI_IOBASE + addr, buffer, count);
         |                 ~~~~~~~~~~ ^
   include/asm-generic/io.h:736:21: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
     736 |         writesl(PCI_IOBASE + addr, buffer, count);
         |                 ~~~~~~~~~~ ^
>> drivers/net/ethernet/microchip/lan743x_main.c:3126:12: error: no member named 'phy_wol_supported' in 'struct lan743x_adapter'
    3126 |                 adapter->phy_wol_supported = wol.supported;
         |                 ~~~~~~~  ^
>> drivers/net/ethernet/microchip/lan743x_main.c:3127:12: error: no member named 'phy_wolopts' in 'struct lan743x_adapter'
    3127 |                 adapter->phy_wolopts = wol.wolopts;
         |                 ~~~~~~~  ^
   17 warnings and 2 errors generated.


vim +3126 drivers/net/ethernet/microchip/lan743x_main.c

  3085	
  3086	static int lan743x_netdev_open(struct net_device *netdev)
  3087	{
  3088		struct lan743x_adapter *adapter = netdev_priv(netdev);
  3089		int index;
  3090		int ret;
  3091	
  3092		ret = lan743x_intr_open(adapter);
  3093		if (ret)
  3094			goto return_error;
  3095	
  3096		ret = lan743x_mac_open(adapter);
  3097		if (ret)
  3098			goto close_intr;
  3099	
  3100		ret = lan743x_phy_open(adapter);
  3101		if (ret)
  3102			goto close_mac;
  3103	
  3104		ret = lan743x_ptp_open(adapter);
  3105		if (ret)
  3106			goto close_phy;
  3107	
  3108		lan743x_rfe_open(adapter);
  3109	
  3110		for (index = 0; index < LAN743X_USED_RX_CHANNELS; index++) {
  3111			ret = lan743x_rx_open(&adapter->rx[index]);
  3112			if (ret)
  3113				goto close_rx;
  3114		}
  3115	
  3116		for (index = 0; index < adapter->used_tx_channels; index++) {
  3117			ret = lan743x_tx_open(&adapter->tx[index]);
  3118			if (ret)
  3119				goto close_tx;
  3120		}
  3121	
  3122		if (adapter->netdev->phydev) {
  3123			struct ethtool_wolinfo wol = { .cmd = ETHTOOL_GWOL };
  3124	
  3125			phy_ethtool_get_wol(netdev->phydev, &wol);
> 3126			adapter->phy_wol_supported = wol.supported;
> 3127			adapter->phy_wolopts = wol.wolopts;
  3128		}
  3129	
  3130		return 0;
  3131	
  3132	close_tx:
  3133		for (index = 0; index < adapter->used_tx_channels; index++) {
  3134			if (adapter->tx[index].ring_cpu_ptr)
  3135				lan743x_tx_close(&adapter->tx[index]);
  3136		}
  3137	
  3138	close_rx:
  3139		for (index = 0; index < LAN743X_USED_RX_CHANNELS; index++) {
  3140			if (adapter->rx[index].ring_cpu_ptr)
  3141				lan743x_rx_close(&adapter->rx[index]);
  3142		}
  3143		lan743x_ptp_close(adapter);
  3144	
  3145	close_phy:
  3146		lan743x_phy_close(adapter);
  3147	
  3148	close_mac:
  3149		lan743x_mac_close(adapter);
  3150	
  3151	close_intr:
  3152		lan743x_intr_close(adapter);
  3153	
  3154	return_error:
  3155		netif_warn(adapter, ifup, adapter->netdev,
  3156			   "Error opening LAN743x\n");
  3157		return ret;
  3158	}
  3159
Raju Lakkaraju - I30499 June 6, 2024, 10:22 a.m. UTC | #4
The target architecture of alpha's config file miss the "CONFIG_PM=y"
cofiguration.

"phy_wolopts" and "phy_wol_supported" variable define in struct
lan743x_adapter under CONFIG_PM compiler option.

these variable define in drivers/net/ethernet/microchip/lan743x_main.h file.

Thanks,
Raju

The 06/05/2024 22:56, kernel test robot wrote:
> EXTERNAL EMAIL: Do not click links or open attachments unless you know the content is safe
> 
> Hi Raju,
> 
> kernel test robot noticed the following build errors:
> 
> [auto build test ERROR on net/main]
> 
> url:    https://github.com/intel-lab-lkp/linux/commits/Raju-Lakkaraju/net-lan743x-disable-WOL-upon-resume-to-restore-full-data-path-operation/20240605-182110
> base:   net/main
> patch link:    https://lore.kernel.org/r/20240605101611.18791-3-Raju.Lakkaraju%40microchip.com
> patch subject: [PATCH net V3 2/3] net: lan743x: Support WOL at both the PHY and MAC appropriately
> config: alpha-allyesconfig (https://download.01.org/0day-ci/archive/20240605/202406052200.w3zuc32H-lkp@intel.com/config)
> compiler: alpha-linux-gcc (GCC) 13.2.0
> reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20240605/202406052200.w3zuc32H-lkp@intel.com/reproduce)
> 
> If you fix the issue in a separate patch/commit (i.e. not just a new version of
> the same patch/commit), kindly add following tags
> | Reported-by: kernel test robot <lkp@intel.com>
> | Closes: https://lore.kernel.org/oe-kbuild-all/202406052200.w3zuc32H-lkp@intel.com/
> 
> All errors (new ones prefixed by >>):
> 
>    drivers/net/ethernet/microchip/lan743x_main.c: In function 'lan743x_netdev_open':
> >> drivers/net/ethernet/microchip/lan743x_main.c:3126:24: error: 'struct lan743x_adapter' has no member named 'phy_wol_supported'
>     3126 |                 adapter->phy_wol_supported = wol.supported;
>          |                        ^~
> >> drivers/net/ethernet/microchip/lan743x_main.c:3127:24: error: 'struct lan743x_adapter' has no member named 'phy_wolopts'
>     3127 |                 adapter->phy_wolopts = wol.wolopts;
>          |                        ^~
> 
> 
> vim +3126 drivers/net/ethernet/microchip/lan743x_main.c
> 
>   3085
>   3086  static int lan743x_netdev_open(struct net_device *netdev)
>   3087  {
>   3088          struct lan743x_adapter *adapter = netdev_priv(netdev);
>   3089          int index;
>   3090          int ret;
>   3091
>   3092          ret = lan743x_intr_open(adapter);
>   3093          if (ret)
>   3094                  goto return_error;
>   3095
>   3096          ret = lan743x_mac_open(adapter);
>   3097          if (ret)
>   3098                  goto close_intr;
>   3099
>   3100          ret = lan743x_phy_open(adapter);
>   3101          if (ret)
>   3102                  goto close_mac;
>   3103
>   3104          ret = lan743x_ptp_open(adapter);
>   3105          if (ret)
>   3106                  goto close_phy;
>   3107
>   3108          lan743x_rfe_open(adapter);
>   3109
>   3110          for (index = 0; index < LAN743X_USED_RX_CHANNELS; index++) {
>   3111                  ret = lan743x_rx_open(&adapter->rx[index]);
>   3112                  if (ret)
>   3113                          goto close_rx;
>   3114          }
>   3115
>   3116          for (index = 0; index < adapter->used_tx_channels; index++) {
>   3117                  ret = lan743x_tx_open(&adapter->tx[index]);
>   3118                  if (ret)
>   3119                          goto close_tx;
>   3120          }
>   3121
>   3122          if (adapter->netdev->phydev) {
>   3123                  struct ethtool_wolinfo wol = { .cmd = ETHTOOL_GWOL };
>   3124
>   3125                  phy_ethtool_get_wol(netdev->phydev, &wol);
> > 3126                  adapter->phy_wol_supported = wol.supported;
> > 3127                  adapter->phy_wolopts = wol.wolopts;
>   3128          }
>   3129
>   3130          return 0;
>   3131
>   3132  close_tx:
>   3133          for (index = 0; index < adapter->used_tx_channels; index++) {
>   3134                  if (adapter->tx[index].ring_cpu_ptr)
>   3135                          lan743x_tx_close(&adapter->tx[index]);
>   3136          }
>   3137
>   3138  close_rx:
>   3139          for (index = 0; index < LAN743X_USED_RX_CHANNELS; index++) {
>   3140                  if (adapter->rx[index].ring_cpu_ptr)
>   3141                          lan743x_rx_close(&adapter->rx[index]);
>   3142          }
>   3143          lan743x_ptp_close(adapter);
>   3144
>   3145  close_phy:
>   3146          lan743x_phy_close(adapter);
>   3147
>   3148  close_mac:
>   3149          lan743x_mac_close(adapter);
>   3150
>   3151  close_intr:
>   3152          lan743x_intr_close(adapter);
>   3153
>   3154  return_error:
>   3155          netif_warn(adapter, ifup, adapter->netdev,
>   3156                     "Error opening LAN743x\n");
>   3157          return ret;
>   3158  }
>   3159
> 
> --
> 0-DAY CI Kernel Test Service
> https://github.com/intel/lkp-tests/wiki
Raju Lakkaraju - I30499 June 6, 2024, 10:30 a.m. UTC | #5
"phy_wolopts" and "phy_wol_supported" variable define in struct lan743x_adapter
under CONFIG_PM compiler build option.

These variable define in drivers/net/ethernet/microchip/lan743x_main.h file.
Can you please add the config (CONFIG_PM=y) to build?

Thanks,
Raju

The 06/06/2024 06:25, kernel test robot wrote:
> EXTERNAL EMAIL: Do not click links or open attachments unless you know the content is safe
> 
> Hi Raju,
> 
> kernel test robot noticed the following build errors:
> 
> [auto build test ERROR on net/main]
> 
> url:    https://github.com/intel-lab-lkp/linux/commits/Raju-Lakkaraju/net-lan743x-disable-WOL-upon-resume-to-restore-full-data-path-operation/20240605-182110
> base:   net/main
> patch link:    https://lore.kernel.org/r/20240605101611.18791-3-Raju.Lakkaraju%40microchip.com
> patch subject: [PATCH net V3 2/3] net: lan743x: Support WOL at both the PHY and MAC appropriately
> config: s390-allmodconfig (https://download.01.org/0day-ci/archive/20240606/202406060612.UBlHLtM8-lkp@intel.com/config)
> compiler: clang version 19.0.0git (https://github.com/llvm/llvm-project d7d2d4f53fc79b4b58e8d8d08151b577c3699d4a)
> reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20240606/202406060612.UBlHLtM8-lkp@intel.com/reproduce)
> 
> If you fix the issue in a separate patch/commit (i.e. not just a new version of
> the same patch/commit), kindly add following tags
> | Reported-by: kernel test robot <lkp@intel.com>
> | Closes: https://lore.kernel.org/oe-kbuild-all/202406060612.UBlHLtM8-lkp@intel.com/
> 
> All errors (new ones prefixed by >>):
> 
>    In file included from drivers/net/ethernet/microchip/lan743x_main.c:4:
>    In file included from include/linux/module.h:19:
>    In file included from include/linux/elf.h:6:
>    In file included from arch/s390/include/asm/elf.h:173:
>    In file included from arch/s390/include/asm/mmu_context.h:11:
>    In file included from arch/s390/include/asm/pgalloc.h:18:
>    In file included from include/linux/mm.h:2253:
>    include/linux/vmstat.h:500:43: warning: arithmetic between different enumeration types ('enum zone_stat_item' and 'enum numa_stat_item') [-Wenum-enum-conversion]
>      500 |         return vmstat_text[NR_VM_ZONE_STAT_ITEMS +
>          |                            ~~~~~~~~~~~~~~~~~~~~~ ^
>      501 |                            item];
>          |                            ~~~~
>    include/linux/vmstat.h:507:43: warning: arithmetic between different enumeration types ('enum zone_stat_item' and 'enum numa_stat_item') [-Wenum-enum-conversion]
>      507 |         return vmstat_text[NR_VM_ZONE_STAT_ITEMS +
>          |                            ~~~~~~~~~~~~~~~~~~~~~ ^
>      508 |                            NR_VM_NUMA_EVENT_ITEMS +
>          |                            ~~~~~~~~~~~~~~~~~~~~~~
>    include/linux/vmstat.h:514:36: warning: arithmetic between different enumeration types ('enum node_stat_item' and 'enum lru_list') [-Wenum-enum-conversion]
>      514 |         return node_stat_name(NR_LRU_BASE + lru) + 3; // skip "nr_"
>          |                               ~~~~~~~~~~~ ^ ~~~
>    include/linux/vmstat.h:519:43: warning: arithmetic between different enumeration types ('enum zone_stat_item' and 'enum numa_stat_item') [-Wenum-enum-conversion]
>      519 |         return vmstat_text[NR_VM_ZONE_STAT_ITEMS +
>          |                            ~~~~~~~~~~~~~~~~~~~~~ ^
>      520 |                            NR_VM_NUMA_EVENT_ITEMS +
>          |                            ~~~~~~~~~~~~~~~~~~~~~~
>    include/linux/vmstat.h:528:43: warning: arithmetic between different enumeration types ('enum zone_stat_item' and 'enum numa_stat_item') [-Wenum-enum-conversion]
>      528 |         return vmstat_text[NR_VM_ZONE_STAT_ITEMS +
>          |                            ~~~~~~~~~~~~~~~~~~~~~ ^
>      529 |                            NR_VM_NUMA_EVENT_ITEMS +
>          |                            ~~~~~~~~~~~~~~~~~~~~~~
>    In file included from drivers/net/ethernet/microchip/lan743x_main.c:5:
>    In file included from include/linux/pci.h:39:
>    In file included from include/linux/io.h:14:
>    In file included from arch/s390/include/asm/io.h:93:
>    include/asm-generic/io.h:548:31: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
>      548 |         val = __raw_readb(PCI_IOBASE + addr);
>          |                           ~~~~~~~~~~ ^
>    include/asm-generic/io.h:561:61: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
>      561 |         val = __le16_to_cpu((__le16 __force)__raw_readw(PCI_IOBASE + addr));
>          |                                                         ~~~~~~~~~~ ^
>    include/uapi/linux/byteorder/big_endian.h:37:59: note: expanded from macro '__le16_to_cpu'
>       37 | #define __le16_to_cpu(x) __swab16((__force __u16)(__le16)(x))
>          |                                                           ^
>    include/uapi/linux/swab.h:102:54: note: expanded from macro '__swab16'
>      102 | #define __swab16(x) (__u16)__builtin_bswap16((__u16)(x))
>          |                                                      ^
>    In file included from drivers/net/ethernet/microchip/lan743x_main.c:5:
>    In file included from include/linux/pci.h:39:
>    In file included from include/linux/io.h:14:
>    In file included from arch/s390/include/asm/io.h:93:
>    include/asm-generic/io.h:574:61: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
>      574 |         val = __le32_to_cpu((__le32 __force)__raw_readl(PCI_IOBASE + addr));
>          |                                                         ~~~~~~~~~~ ^
>    include/uapi/linux/byteorder/big_endian.h:35:59: note: expanded from macro '__le32_to_cpu'
>       35 | #define __le32_to_cpu(x) __swab32((__force __u32)(__le32)(x))
>          |                                                           ^
>    include/uapi/linux/swab.h:115:54: note: expanded from macro '__swab32'
>      115 | #define __swab32(x) (__u32)__builtin_bswap32((__u32)(x))
>          |                                                      ^
>    In file included from drivers/net/ethernet/microchip/lan743x_main.c:5:
>    In file included from include/linux/pci.h:39:
>    In file included from include/linux/io.h:14:
>    In file included from arch/s390/include/asm/io.h:93:
>    include/asm-generic/io.h:585:33: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
>      585 |         __raw_writeb(value, PCI_IOBASE + addr);
>          |                             ~~~~~~~~~~ ^
>    include/asm-generic/io.h:595:59: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
>      595 |         __raw_writew((u16 __force)cpu_to_le16(value), PCI_IOBASE + addr);
>          |                                                       ~~~~~~~~~~ ^
>    include/asm-generic/io.h:605:59: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
>      605 |         __raw_writel((u32 __force)cpu_to_le32(value), PCI_IOBASE + addr);
>          |                                                       ~~~~~~~~~~ ^
>    include/asm-generic/io.h:693:20: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
>      693 |         readsb(PCI_IOBASE + addr, buffer, count);
>          |                ~~~~~~~~~~ ^
>    include/asm-generic/io.h:701:20: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
>      701 |         readsw(PCI_IOBASE + addr, buffer, count);
>          |                ~~~~~~~~~~ ^
>    include/asm-generic/io.h:709:20: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
>      709 |         readsl(PCI_IOBASE + addr, buffer, count);
>          |                ~~~~~~~~~~ ^
>    include/asm-generic/io.h:718:21: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
>      718 |         writesb(PCI_IOBASE + addr, buffer, count);
>          |                 ~~~~~~~~~~ ^
>    include/asm-generic/io.h:727:21: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
>      727 |         writesw(PCI_IOBASE + addr, buffer, count);
>          |                 ~~~~~~~~~~ ^
>    include/asm-generic/io.h:736:21: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
>      736 |         writesl(PCI_IOBASE + addr, buffer, count);
>          |                 ~~~~~~~~~~ ^
> >> drivers/net/ethernet/microchip/lan743x_main.c:3126:12: error: no member named 'phy_wol_supported' in 'struct lan743x_adapter'
>     3126 |                 adapter->phy_wol_supported = wol.supported;
>          |                 ~~~~~~~  ^
> >> drivers/net/ethernet/microchip/lan743x_main.c:3127:12: error: no member named 'phy_wolopts' in 'struct lan743x_adapter'
>     3127 |                 adapter->phy_wolopts = wol.wolopts;
>          |                 ~~~~~~~  ^
>    17 warnings and 2 errors generated.
> 
> 
> vim +3126 drivers/net/ethernet/microchip/lan743x_main.c
> 
>   3085
>   3086  static int lan743x_netdev_open(struct net_device *netdev)
>   3087  {
>   3088          struct lan743x_adapter *adapter = netdev_priv(netdev);
>   3089          int index;
>   3090          int ret;
>   3091
>   3092          ret = lan743x_intr_open(adapter);
>   3093          if (ret)
>   3094                  goto return_error;
>   3095
>   3096          ret = lan743x_mac_open(adapter);
>   3097          if (ret)
>   3098                  goto close_intr;
>   3099
>   3100          ret = lan743x_phy_open(adapter);
>   3101          if (ret)
>   3102                  goto close_mac;
>   3103
>   3104          ret = lan743x_ptp_open(adapter);
>   3105          if (ret)
>   3106                  goto close_phy;
>   3107
>   3108          lan743x_rfe_open(adapter);
>   3109
>   3110          for (index = 0; index < LAN743X_USED_RX_CHANNELS; index++) {
>   3111                  ret = lan743x_rx_open(&adapter->rx[index]);
>   3112                  if (ret)
>   3113                          goto close_rx;
>   3114          }
>   3115
>   3116          for (index = 0; index < adapter->used_tx_channels; index++) {
>   3117                  ret = lan743x_tx_open(&adapter->tx[index]);
>   3118                  if (ret)
>   3119                          goto close_tx;
>   3120          }
>   3121
>   3122          if (adapter->netdev->phydev) {
>   3123                  struct ethtool_wolinfo wol = { .cmd = ETHTOOL_GWOL };
>   3124
>   3125                  phy_ethtool_get_wol(netdev->phydev, &wol);
> > 3126                  adapter->phy_wol_supported = wol.supported;
> > 3127                  adapter->phy_wolopts = wol.wolopts;
>   3128          }
>   3129
>   3130          return 0;
>   3131
>   3132  close_tx:
>   3133          for (index = 0; index < adapter->used_tx_channels; index++) {
>   3134                  if (adapter->tx[index].ring_cpu_ptr)
>   3135                          lan743x_tx_close(&adapter->tx[index]);
>   3136          }
>   3137
>   3138  close_rx:
>   3139          for (index = 0; index < LAN743X_USED_RX_CHANNELS; index++) {
>   3140                  if (adapter->rx[index].ring_cpu_ptr)
>   3141                          lan743x_rx_close(&adapter->rx[index]);
>   3142          }
>   3143          lan743x_ptp_close(adapter);
>   3144
>   3145  close_phy:
>   3146          lan743x_phy_close(adapter);
>   3147
>   3148  close_mac:
>   3149          lan743x_mac_close(adapter);
>   3150
>   3151  close_intr:
>   3152          lan743x_intr_close(adapter);
>   3153
>   3154  return_error:
>   3155          netif_warn(adapter, ifup, adapter->netdev,
>   3156                     "Error opening LAN743x\n");
>   3157          return ret;
>   3158  }
>   3159
> 
> --
> 0-DAY CI Kernel Test Service
> https://github.com/intel/lkp-tests/wiki
Andrew Lunn June 6, 2024, 1:30 p.m. UTC | #6
On Thu, Jun 06, 2024 at 03:52:51PM +0530, Raju Lakkaraju wrote:
> The target architecture of alpha's config file miss the "CONFIG_PM=y"
> cofiguration.

No. Your patch is missing support for CONFIG_PM = n. Or you need to
add a depends on PM.

We expect the kernel to build for any configuration. There are build
bots which create random configurations and see if they build. Not
having PM is a valid configuration, especially for a big iron server
which never sleeps.

    Andrew
Raju Lakkaraju - I30499 June 11, 2024, 6:27 a.m. UTC | #7
This patch series implement the following fixes:
1. Disable WOL upon resume in order to restore full data path operation
2. Support WOL at both the PHY and MAC appropriately 
3. Remove interrupt mask clearing from config_init 

Patch-3 was sent seperately earlier. Review comments in link: 
https://lore.kernel.org/lkml/4a565d54-f468-4e32-8a2c-102c1203f72c@lunn.ch/T/

Reviewed-by: Wojciech Drewek <wojciech.drewek@intel.com>                        
Reported-by: kernel test robot <lkp@intel.com>                                  
Closes: https://lore.kernel.org/oe-kbuild-all/202406052200.w3zuc32H-lkp@intel.com/

Raju Lakkaraju (3):
  net: lan743x: disable WOL upon resume to restore full data path
    operation
  net: lan743x: Support WOL at both the PHY and MAC appropriately
  net: phy: mxl-gpy: Remove interrupt mask clearing from config_init

 .../net/ethernet/microchip/lan743x_ethtool.c  | 44 ++++++++++++--
 drivers/net/ethernet/microchip/lan743x_main.c | 46 ++++++++++++---
 drivers/net/ethernet/microchip/lan743x_main.h | 28 +++++++++
 drivers/net/phy/mxl-gpy.c                     | 58 ++++++++++++-------
 4 files changed, 144 insertions(+), 32 deletions(-)
Horatiu Vultur June 11, 2024, 7:10 a.m. UTC | #8
Hi Raju,

Is this not supposed to be v4?
Because I can see v3 here:
https://www.spinics.net/lists/netdev/msg1002225.html

The 06/11/2024 11:57, Raju Lakkaraju wrote:
> This patch series implement the following fixes:
> 1. Disable WOL upon resume in order to restore full data path operation
> 2. Support WOL at both the PHY and MAC appropriately 
> 3. Remove interrupt mask clearing from config_init 
> 
> Patch-3 was sent seperately earlier. Review comments in link: 
> https://lore.kernel.org/lkml/4a565d54-f468-4e32-8a2c-102c1203f72c@lunn.ch/T/
> 
> Reviewed-by: Wojciech Drewek <wojciech.drewek@intel.com>                        
> Reported-by: kernel test robot <lkp@intel.com>                                  
> Closes: https://lore.kernel.org/oe-kbuild-all/202406052200.w3zuc32H-lkp@intel.com/

I think you should drop the 'Reported-by' and 'Closes' tags because the
issue that is getting closed is the one that you introduced in one of
your previous version of the patch series.

> 
> Raju Lakkaraju (3):
>   net: lan743x: disable WOL upon resume to restore full data path
>     operation
>   net: lan743x: Support WOL at both the PHY and MAC appropriately
>   net: phy: mxl-gpy: Remove interrupt mask clearing from config_init
> 
>  .../net/ethernet/microchip/lan743x_ethtool.c  | 44 ++++++++++++--
>  drivers/net/ethernet/microchip/lan743x_main.c | 46 ++++++++++++---
>  drivers/net/ethernet/microchip/lan743x_main.h | 28 +++++++++
>  drivers/net/phy/mxl-gpy.c                     | 58 ++++++++++++-------
>  4 files changed, 144 insertions(+), 32 deletions(-)
> 
> -- 
> 2.34.1
> 
>
Raju Lakkaraju - I30499 June 11, 2024, 8:01 a.m. UTC | #9
Hi Horatiu,

There is no new changes except "kernel test robot" reported issue.

I fix the issue and sent the patch along with other old patches.
Also add "Reported-by" and "Closes" tags to all patches and
--in-reply-to=202406052200.w3zuc32H-lkp@intel.com.
i.e.
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202406052200.w3zuc32H-lkp@intel.com/

Is it sufficient? or
Do you need to generete new version of patches ?

Thanks,
Raju
The 06/11/2024 09:10, Horatiu Vultur wrote:
> Hi Raju,
> 
> Is this not supposed to be v4?
> Because I can see v3 here:
> https://www.spinics.net/lists/netdev/msg1002225.html
> 
> The 06/11/2024 11:57, Raju Lakkaraju wrote:
> > This patch series implement the following fixes:
> > 1. Disable WOL upon resume in order to restore full data path operation
> > 2. Support WOL at both the PHY and MAC appropriately 
> > 3. Remove interrupt mask clearing from config_init 
> > 
> > Patch-3 was sent seperately earlier. Review comments in link: 
> > https://lore.kernel.org/lkml/4a565d54-f468-4e32-8a2c-102c1203f72c@lunn.ch/T/
> > 
> > Reviewed-by: Wojciech Drewek <wojciech.drewek@intel.com>                        
> > Reported-by: kernel test robot <lkp@intel.com>                                  
> > Closes: https://lore.kernel.org/oe-kbuild-all/202406052200.w3zuc32H-lkp@intel.com/
> 
> I think you should drop the 'Reported-by' and 'Closes' tags because the
> issue that is getting closed is the one that you introduced in one of
> your previous version of the patch series.
> 
> > 
> > Raju Lakkaraju (3):
> >   net: lan743x: disable WOL upon resume to restore full data path
> >     operation
> >   net: lan743x: Support WOL at both the PHY and MAC appropriately
> >   net: phy: mxl-gpy: Remove interrupt mask clearing from config_init
> > 
> >  .../net/ethernet/microchip/lan743x_ethtool.c  | 44 ++++++++++++--
> >  drivers/net/ethernet/microchip/lan743x_main.c | 46 ++++++++++++---
> >  drivers/net/ethernet/microchip/lan743x_main.h | 28 +++++++++
> >  drivers/net/phy/mxl-gpy.c                     | 58 ++++++++++++-------
> >  4 files changed, 144 insertions(+), 32 deletions(-)
> > 
> > -- 
> > 2.34.1
> > 
> > 
> 
> -- 
> /Horatiu
Horatiu Vultur June 11, 2024, 10:45 a.m. UTC | #10
The 06/11/2024 13:31, Raju Lakkaraju wrote:
> Hi Horatiu,
> 
> There is no new changes except "kernel test robot" reported issue.

So there is no change in the code, you just added the tags between this
version and the previous one where the robot complained?
Because to me it looks like you added an extra #ifdef in 2/3 patch.

> 
> I fix the issue and sent the patch along with other old patches.
> Also add "Reported-by" and "Closes" tags to all patches and
> --in-reply-to=202406052200.w3zuc32H-lkp@intel.com.
> i.e.
> If you fix the issue in a separate patch/commit (i.e. not just a new version of
> the same patch/commit), kindly add following tags
> | Reported-by: kernel test robot <lkp@intel.com>
> | Closes: https://lore.kernel.org/oe-kbuild-all/202406052200.w3zuc32H-lkp@intel.com/

It doesn't say to add only if you fix the issue in a separate patch and
not just for a new version of the patch/commit.
Or I miss reading this?

> 
> Is it sufficient? or
> Do you need to generete new version of patches ?

Every time when you do a change in your patch until is accepted, you
will need to generate a new version.
Don't forget about 24h rule. That you need to wait 24h before you can
send a new version.

> 
> Thanks,
> Raju
> The 06/11/2024 09:10, Horatiu Vultur wrote:
> > Hi Raju,
> > 
> > Is this not supposed to be v4?
> > Because I can see v3 here:
> > https://www.spinics.net/lists/netdev/msg1002225.html
> > 
> > The 06/11/2024 11:57, Raju Lakkaraju wrote:
> > > This patch series implement the following fixes:
> > > 1. Disable WOL upon resume in order to restore full data path operation
> > > 2. Support WOL at both the PHY and MAC appropriately 
> > > 3. Remove interrupt mask clearing from config_init 
> > > 
> > > Patch-3 was sent seperately earlier. Review comments in link: 
> > > https://lore.kernel.org/lkml/4a565d54-f468-4e32-8a2c-102c1203f72c@lunn.ch/T/
> > > 
> > > Reviewed-by: Wojciech Drewek <wojciech.drewek@intel.com>                        
> > > Reported-by: kernel test robot <lkp@intel.com>                                  
> > > Closes: https://lore.kernel.org/oe-kbuild-all/202406052200.w3zuc32H-lkp@intel.com/
> > 
> > I think you should drop the 'Reported-by' and 'Closes' tags because the
> > issue that is getting closed is the one that you introduced in one of
> > your previous version of the patch series.
> > 
> > > 
> > > Raju Lakkaraju (3):
> > >   net: lan743x: disable WOL upon resume to restore full data path
> > >     operation
> > >   net: lan743x: Support WOL at both the PHY and MAC appropriately
> > >   net: phy: mxl-gpy: Remove interrupt mask clearing from config_init
> > > 
> > >  .../net/ethernet/microchip/lan743x_ethtool.c  | 44 ++++++++++++--
> > >  drivers/net/ethernet/microchip/lan743x_main.c | 46 ++++++++++++---
> > >  drivers/net/ethernet/microchip/lan743x_main.h | 28 +++++++++
> > >  drivers/net/phy/mxl-gpy.c                     | 58 ++++++++++++-------
> > >  4 files changed, 144 insertions(+), 32 deletions(-)
> > > 
> > > -- 
> > > 2.34.1
> > > 
> > > 
> > 
> > -- 
> > /Horatiu
> 
> -- 
> Thanks,                                                                         
> Raju
diff mbox series

Patch

diff --git a/drivers/net/ethernet/microchip/lan743x_ethtool.c b/drivers/net/ethernet/microchip/lan743x_ethtool.c
index d0f4ff4ee075..0d1740d64676 100644
--- a/drivers/net/ethernet/microchip/lan743x_ethtool.c
+++ b/drivers/net/ethernet/microchip/lan743x_ethtool.c
@@ -1127,8 +1127,12 @@  static void lan743x_ethtool_get_wol(struct net_device *netdev,
 	if (netdev->phydev)
 		phy_ethtool_get_wol(netdev->phydev, wol);
 
-	wol->supported |= WAKE_BCAST | WAKE_UCAST | WAKE_MCAST |
-		WAKE_MAGIC | WAKE_PHY | WAKE_ARP;
+	if (wol->supported != adapter->phy_wol_supported)
+		netif_warn(adapter, drv, adapter->netdev,
+			   "PHY changed its supported WOL! old=%x, new=%x\n",
+			   adapter->phy_wol_supported, wol->supported);
+
+	wol->supported |= MAC_SUPPORTED_WAKES;
 
 	if (adapter->is_pci11x1x)
 		wol->supported |= WAKE_MAGICSECURE;
@@ -1143,7 +1147,39 @@  static int lan743x_ethtool_set_wol(struct net_device *netdev,
 {
 	struct lan743x_adapter *adapter = netdev_priv(netdev);
 
+	/* WAKE_MAGICSEGURE is a modifier of and only valid together with
+	 * WAKE_MAGIC
+	 */
+	if ((wol->wolopts & WAKE_MAGICSECURE) && !(wol->wolopts & WAKE_MAGIC))
+		return -EINVAL;
+
+	if (netdev->phydev) {
+		struct ethtool_wolinfo phy_wol;
+		int ret;
+
+		phy_wol.wolopts = wol->wolopts & adapter->phy_wol_supported;
+
+		/* If WAKE_MAGICSECURE was requested, filter out WAKE_MAGIC
+		 * for PHYs that do not support WAKE_MAGICSECURE
+		 */
+		if (wol->wolopts & WAKE_MAGICSECURE &&
+		    !(adapter->phy_wol_supported & WAKE_MAGICSECURE))
+			phy_wol.wolopts &= ~WAKE_MAGIC;
+
+		ret = phy_ethtool_set_wol(netdev->phydev, &phy_wol);
+		if (ret && (ret != -EOPNOTSUPP))
+			return ret;
+
+		if (ret == -EOPNOTSUPP)
+			adapter->phy_wolopts = 0;
+		else
+			adapter->phy_wolopts = phy_wol.wolopts;
+	} else {
+		adapter->phy_wolopts = 0;
+	}
+
 	adapter->wolopts = 0;
+	wol->wolopts &= ~adapter->phy_wolopts;
 	if (wol->wolopts & WAKE_UCAST)
 		adapter->wolopts |= WAKE_UCAST;
 	if (wol->wolopts & WAKE_MCAST)
@@ -1164,10 +1200,10 @@  static int lan743x_ethtool_set_wol(struct net_device *netdev,
 		memset(adapter->sopass, 0, sizeof(u8) * SOPASS_MAX);
 	}
 
+	wol->wolopts = adapter->wolopts | adapter->phy_wolopts;
 	device_set_wakeup_enable(&adapter->pdev->dev, (bool)wol->wolopts);
 
-	return netdev->phydev ? phy_ethtool_set_wol(netdev->phydev, wol)
-			: -ENETDOWN;
+	return 0;
 }
 #endif /* CONFIG_PM */
 
diff --git a/drivers/net/ethernet/microchip/lan743x_main.c b/drivers/net/ethernet/microchip/lan743x_main.c
index 6a40b961fafb..b6810840bc61 100644
--- a/drivers/net/ethernet/microchip/lan743x_main.c
+++ b/drivers/net/ethernet/microchip/lan743x_main.c
@@ -3118,6 +3118,15 @@  static int lan743x_netdev_open(struct net_device *netdev)
 		if (ret)
 			goto close_tx;
 	}
+
+	if (adapter->netdev->phydev) {
+		struct ethtool_wolinfo wol = { .cmd = ETHTOOL_GWOL };
+
+		phy_ethtool_get_wol(netdev->phydev, &wol);
+		adapter->phy_wol_supported = wol.supported;
+		adapter->phy_wolopts = wol.wolopts;
+	}
+
 	return 0;
 
 close_tx:
@@ -3587,10 +3596,9 @@  static void lan743x_pm_set_wol(struct lan743x_adapter *adapter)
 
 	pmtctl |= PMT_CTL_ETH_PHY_D3_COLD_OVR_ | PMT_CTL_ETH_PHY_D3_OVR_;
 
-	if (adapter->wolopts & WAKE_PHY) {
-		pmtctl |= PMT_CTL_ETH_PHY_EDPD_PLL_CTL_;
+	if (adapter->phy_wolopts)
 		pmtctl |= PMT_CTL_ETH_PHY_WAKE_EN_;
-	}
+
 	if (adapter->wolopts & WAKE_MAGIC) {
 		wucsr |= MAC_WUCSR_MPEN_;
 		macrx |= MAC_RX_RXEN_;
@@ -3686,7 +3694,7 @@  static int lan743x_pm_suspend(struct device *dev)
 	lan743x_csr_write(adapter, MAC_WUCSR2, 0);
 	lan743x_csr_write(adapter, MAC_WK_SRC, 0xFFFFFFFF);
 
-	if (adapter->wolopts)
+	if (adapter->wolopts || adapter->phy_wolopts)
 		lan743x_pm_set_wol(adapter);
 
 	if (adapter->is_pci11x1x) {
diff --git a/drivers/net/ethernet/microchip/lan743x_main.h b/drivers/net/ethernet/microchip/lan743x_main.h
index fac0f33d10b2..3b2585a384e2 100644
--- a/drivers/net/ethernet/microchip/lan743x_main.h
+++ b/drivers/net/ethernet/microchip/lan743x_main.h
@@ -1042,6 +1042,8 @@  enum lan743x_sgmii_lsd {
 	LINK_2500_SLAVE
 };
 
+#define MAC_SUPPORTED_WAKES  (WAKE_BCAST | WAKE_UCAST | WAKE_MCAST | \
+			      WAKE_MAGIC | WAKE_ARP)
 struct lan743x_adapter {
 	struct net_device       *netdev;
 	struct mii_bus		*mdiobus;
@@ -1049,6 +1051,8 @@  struct lan743x_adapter {
 #ifdef CONFIG_PM
 	u32			wolopts;
 	u8			sopass[SOPASS_MAX];
+	u32			phy_wolopts;
+	u32			phy_wol_supported;
 #endif
 	struct pci_dev		*pdev;
 	struct lan743x_csr      csr;