Subject: Re: [PATCH net-next 1/4] net: wangxun: Add support for PTP clock

From: kernel test robot <[email-masked]>
Date: Fri, 3 Jan 2025 00:16:06 +0800

Hi Jiawen,

kernel test robot noticed the following build warnings:

[auto build test WARNING on net-next/main]

url:    https://github.com/intel-lab-lkp/linux/commits/Jiawen-Wu/net-wangxun-Add-support-for-PTP-clock/20250102-181338
base:   net-next/main
patch link:    https://lore.kernel.org/r/20250102103026.1982137-2-jiawenwu%40trustnetic.com
patch subject: [PATCH net-next 1/4] net: wangxun: Add support for PTP clock
config: x86_64-buildonly-randconfig-004-20250102 (https://download.01.org/0day-ci/archive/20250102/[email-masked]/config)
compiler: clang version 19.1.3 (https://github.com/llvm/llvm-project ab51eccf88f5321e7c60591c5546b254b6afab99)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20250102/[email-masked]/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 <[email-masked]>
| Closes: https://lore.kernel.org/oe-kbuild-all/[email-masked]/

All warnings (new ones prefixed by >>):

   In file included from drivers/net/ethernet/wangxun/libwx/wx_ptp.c:4:
   In file included from include/linux/ptp_classify.h:14:
   In file included from include/linux/ip.h:16:
   In file included from include/linux/skbuff.h:17:
   In file included from include/linux/bvec.h:10:
   In file included from include/linux/highmem.h:8:
   In file included from include/linux/cacheflush.h:5:
   In file included from arch/x86/include/asm/cacheflush.h:5:
   In file included from include/linux/mm.h:2223:
   include/linux/vmstat.h:518:36: warning: arithmetic between different enumeration types ('enum node_stat_item' and 'enum lru_list') [-Wenum-enum-conversion]
     518 |         return node_stat_name(NR_LRU_BASE + lru) + 3; // skip "nr_"
         |                               ~~~~~~~~~~~ ^ ~~~
>> drivers/net/ethernet/wangxun/libwx/wx_ptp.c:358:2: warning: unannotated fall-through between switch labels [-Wimplicit-fallthrough]
     358 |         case HWTSTAMP_TX_ON:
         |         ^
   drivers/net/ethernet/wangxun/libwx/wx_ptp.c:358:2: note: insert 'break;' to avoid fall-through
     358 |         case HWTSTAMP_TX_ON:
         |         ^
         |         break; 
   2 warnings generated.

vim +358 drivers/net/ethernet/wangxun/libwx/wx_ptp.c

   315	
   316	/**
   317	 * wx_ptp_set_timestamp_mode - setup the hardware for the requested mode
   318	 * @wx: the private board structure
   319	 * @config: the hwtstamp configuration requested
   320	 *
   321	 * Returns 0 on success, negative on failure
   322	 *
   323	 * Outgoing time stamping can be enabled and disabled. Play nice and
   324	 * disable it when requested, although it shouldn't cause any overhead
   325	 * when no packet needs it. At most one packet in the queue may be
   326	 * marked for time stamping, otherwise it would be impossible to tell
   327	 * for sure to which packet the hardware time stamp belongs.
   328	 *
   329	 * Incoming time stamping has to be configured via the hardware
   330	 * filters. Not all combinations are supported, in particular event
   331	 * type has to be specified. Matching the kind of event packet is
   332	 * not supported, with the exception of "all V2 events regardless of
   333	 * level 2 or 4".
   334	 *
   335	 * Since hardware always timestamps Path delay packets when timestamping V2
   336	 * packets, regardless of the type specified in the register, only use V2
   337	 * Event mode. This more accurately tells the user what the hardware is going
   338	 * to do anyways.
   339	 *
   340	 * Note: this may modify the hwtstamp configuration towards a more general
   341	 * mode, if required to support the specifically requested mode.
   342	 */
   343	static int wx_ptp_set_timestamp_mode(struct wx *wx,
   344					     struct hwtstamp_config *config)
   345	{
   346		u32 tsync_tx_ctl = WX_TSC_1588_CTL_ENABLED;
   347		u32 tsync_rx_ctl = WX_PSR_1588_CTL_ENABLED;
   348		DECLARE_BITMAP(flags, WX_PF_FLAGS_NBITS);
   349		u32 tsync_rx_mtrl = PTP_EV_PORT << 16;
   350		bool is_l2 = false;
   351		u32 regval;
   352	
   353		memcpy(flags, wx->flags, sizeof(wx->flags));
   354	
   355		switch (config->tx_type) {
   356		case HWTSTAMP_TX_OFF:
   357			tsync_tx_ctl = 0;
 > 358		case HWTSTAMP_TX_ON:
   359			break;
   360		default:
   361			return -ERANGE;
   362		}
   363	
   364		switch (config->rx_filter) {
   365		case HWTSTAMP_FILTER_NONE:
   366			tsync_rx_ctl = 0;
   367			tsync_rx_mtrl = 0;
   368			clear_bit(WX_FLAG_RX_HWTSTAMP_ENABLED, flags);
   369			clear_bit(WX_FLAG_RX_HWTSTAMP_IN_REGISTER, flags);
   370			break;
   371		case HWTSTAMP_FILTER_PTP_V1_L4_SYNC:
   372			tsync_rx_ctl |= WX_PSR_1588_CTL_TYPE_L4_V1;
   373			tsync_rx_mtrl |= WX_PSR_1588_MSG_V1_SYNC;
   374			set_bit(WX_FLAG_RX_HWTSTAMP_ENABLED, flags);
   375			set_bit(WX_FLAG_RX_HWTSTAMP_IN_REGISTER, flags);
   376			break;
   377		case HWTSTAMP_FILTER_PTP_V1_L4_DELAY_REQ:
   378			tsync_rx_ctl |= WX_PSR_1588_CTL_TYPE_L4_V1;
   379			tsync_rx_mtrl |= WX_PSR_1588_MSG_V1_DELAY_REQ;
   380			set_bit(WX_FLAG_RX_HWTSTAMP_ENABLED, flags);
   381			set_bit(WX_FLAG_RX_HWTSTAMP_IN_REGISTER, flags);
   382			break;
   383		case HWTSTAMP_FILTER_PTP_V2_EVENT:
   384		case HWTSTAMP_FILTER_PTP_V2_L2_EVENT:
   385		case HWTSTAMP_FILTER_PTP_V2_L4_EVENT:
   386		case HWTSTAMP_FILTER_PTP_V2_SYNC:
   387		case HWTSTAMP_FILTER_PTP_V2_L2_SYNC:
   388		case HWTSTAMP_FILTER_PTP_V2_L4_SYNC:
   389		case HWTSTAMP_FILTER_PTP_V2_DELAY_REQ:
   390		case HWTSTAMP_FILTER_PTP_V2_L2_DELAY_REQ:
   391		case HWTSTAMP_FILTER_PTP_V2_L4_DELAY_REQ:
   392			tsync_rx_ctl |= WX_PSR_1588_CTL_TYPE_EVENT_V2;
   393			is_l2 = true;
   394			config->rx_filter = HWTSTAMP_FILTER_PTP_V2_EVENT;
   395			set_bit(WX_FLAG_RX_HWTSTAMP_ENABLED, flags);
   396			set_bit(WX_FLAG_RX_HWTSTAMP_IN_REGISTER, flags);
   397			break;
   398		default:
   399			/* register RXMTRL must be set in order to do V1 packets,
   400			 * therefore it is not possible to time stamp both V1 Sync and
   401			 * Delay_Req messages unless hardware supports timestamping all
   402			 * packets => return error
   403			 */
   404			clear_bit(WX_FLAG_RX_HWTSTAMP_ENABLED, wx->flags);
   405			clear_bit(WX_FLAG_RX_HWTSTAMP_IN_REGISTER, wx->flags);
   406			config->rx_filter = HWTSTAMP_FILTER_NONE;
   407			return -ERANGE;
   408		}
   409	
   410		/* define ethertype filter for timestamping L2 packets */
   411		if (is_l2)
   412			wr32(wx, WX_PSR_ETYPE_SWC(WX_PSR_ETYPE_SWC_FILTER_1588),
   413			     (WX_PSR_ETYPE_SWC_FILTER_EN | /* enable filter */
   414			      WX_PSR_ETYPE_SWC_1588 | /* enable timestamping */
   415			      ETH_P_1588)); /* 1588 eth protocol type */
   416		else
   417			wr32(wx, WX_PSR_ETYPE_SWC(WX_PSR_ETYPE_SWC_FILTER_1588), 0);
   418	
   419		/* enable/disable TX */
   420		regval = rd32ptp(wx, WX_TSC_1588_CTL);
   421		regval &= ~WX_TSC_1588_CTL_ENABLED;
   422		regval |= tsync_tx_ctl;
   423		wr32ptp(wx, WX_TSC_1588_CTL, regval);
   424	
   425		/* enable/disable RX */
   426		regval = rd32(wx, WX_PSR_1588_CTL);
   427		regval &= ~(WX_PSR_1588_CTL_ENABLED | WX_PSR_1588_CTL_TYPE_MASK);
   428		regval |= tsync_rx_ctl;
   429		wr32(wx, WX_PSR_1588_CTL, regval);
   430	
   431		/* define which PTP packets are time stamped */
   432		wr32(wx, WX_PSR_1588_MSG, tsync_rx_mtrl);
   433	
   434		WX_WRITE_FLUSH(wx);
   435	
   436		/* configure adapter flags only when HW is actually configured */
   437		memcpy(wx->flags, flags, sizeof(wx->flags));
   438	
   439		/* clear TX/RX timestamp state, just to be sure */
   440		wx_ptp_clear_tx_timestamp(wx);
   441		rd32(wx, WX_PSR_1588_STMPH);
   442	
   443		return 0;
   444	}
   445	

-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki