Re: [PATCH v5 06/14] net: pch_gbe: Allow longer for resets

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Paul,

I love your patch! Perhaps something to improve:

[auto build test WARNING on net-next/master]
[also build test WARNING on v4.16-rc1 next-20180216]
[if your patch is applied to the wrong git tree, please drop us a note to help improve the system]

url:    https://github.com/0day-ci/linux/commits/Paul-Burton/net-pch_gbe-Fixes-MIPS-support/20180218-213023
reproduce:
        # apt-get install sparse
        make ARCH=x86_64 allmodconfig
        make C=1 CF=-D__CHECK_ENDIAN__


sparse warnings: (new ones prefixed by >>)

   drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c:177:33: sparse: incorrect type in argument 2 (different base types) @@ expected unsigned short uid_hi @@ got short uid_hi @@
   drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c:177:33: expected unsigned short uid_hi
   drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c:177:33: got restricted __be16 <noident>
   drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c:177:45: sparse: incorrect type in argument 3 (different base types) @@ expected unsigned int uid_lo @@ got ed int uid_lo @@
   drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c:177:45: expected unsigned int uid_lo
   drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c:177:45: got restricted __be32 <noident>
   drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c:177:56: sparse: incorrect type in argument 4 (different base types) @@ expected unsigned short seqid @@ got short seqid @@
   drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c:177:56: expected unsigned short seqid
   drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c:177:56: got restricted __be16 <noident>
>> drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c:325:15: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile @@ got @@
   drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c:325:15: expected void const volatile
   drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c:325:15: got void
>> drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c:325:15: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile @@ got @@
   drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c:325:15: expected void const volatile
   drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c:325:15: got void
   drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c:354:33: sparse: incorrect type in argument 1 (different address spaces) @@ expected void @@ got unsigned int <avoid @@
   drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c:354:33: expected void
   drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c:354:33: got unsigned int
   drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c:361:33: sparse: incorrect type in argument 1 (different address spaces) @@ expected void @@ got unsigned int <avoid @@
   drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c:361:33: expected void
   drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c:361:33: got unsigned int
   drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c:389:33: sparse: incorrect type in argument 1 (different address spaces) @@ expected void @@ got unsigned int <avoid @@
   drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c:389:33: expected void
   drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c:389:33: got unsigned int
   drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c:430:33: sparse: incorrect type in argument 1 (different address spaces) @@ expected void @@ got unsigned int <avoid @@
   drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c:430:33: expected void
   drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c:430:33: got unsigned int
   drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c:463:49: sparse: incorrect type in argument 1 (different address spaces) @@ expected void @@ got unsigned int <avoid @@
   drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c:463:49: expected void
   drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c:463:49: got unsigned int
   drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c:537:41: sparse: incorrect type in argument 1 (different address spaces) @@ expected void @@ got unsigned int <avoid @@
   drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c:537:41: expected void
   drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c:537:41: got unsigned int

vim +325 drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c

   150	
   151	static void
   152	pch_rx_timestamp(struct pch_gbe_adapter *adapter, struct sk_buff *skb)
   153	{
   154		struct skb_shared_hwtstamps *shhwtstamps;
   155		struct pci_dev *pdev;
   156		u64 ns;
   157		u32 hi, lo, val;
   158		u16 uid, seq;
   159	
   160		if (!adapter->hwts_rx_en)
   161			return;
   162	
   163		/* Get ieee1588's dev information */
   164		pdev = adapter->ptp_pdev;
   165	
   166		val = pch_ch_event_read(pdev);
   167	
   168		if (!(val & RX_SNAPSHOT_LOCKED))
   169			return;
   170	
   171		lo = pch_src_uuid_lo_read(pdev);
   172		hi = pch_src_uuid_hi_read(pdev);
   173	
   174		uid = hi & 0xffff;
   175		seq = (hi >> 16) & 0xffff;
   176	
 > 177		if (!pch_ptp_match(skb, htons(uid), htonl(lo), htons(seq)))
   178			goto out;
   179	
   180		ns = pch_rx_snap_read(pdev);
   181	
   182		shhwtstamps = skb_hwtstamps(skb);
   183		memset(shhwtstamps, 0, sizeof(*shhwtstamps));
   184		shhwtstamps->hwtstamp = ns_to_ktime(ns);
   185	out:
   186		pch_ch_event_write(pdev, RX_SNAPSHOT_LOCKED);
   187	}
   188	
   189	static void
   190	pch_tx_timestamp(struct pch_gbe_adapter *adapter, struct sk_buff *skb)
   191	{
   192		struct skb_shared_hwtstamps shhwtstamps;
   193		struct pci_dev *pdev;
   194		struct skb_shared_info *shtx;
   195		u64 ns;
   196		u32 cnt, val;
   197	
   198		shtx = skb_shinfo(skb);
   199		if (likely(!(shtx->tx_flags & SKBTX_HW_TSTAMP && adapter->hwts_tx_en)))
   200			return;
   201	
   202		shtx->tx_flags |= SKBTX_IN_PROGRESS;
   203	
   204		/* Get ieee1588's dev information */
   205		pdev = adapter->ptp_pdev;
   206	
   207		/*
   208		 * This really stinks, but we have to poll for the Tx time stamp.
   209		 */
   210		for (cnt = 0; cnt < 100; cnt++) {
   211			val = pch_ch_event_read(pdev);
   212			if (val & TX_SNAPSHOT_LOCKED)
   213				break;
   214			udelay(1);
   215		}
   216		if (!(val & TX_SNAPSHOT_LOCKED)) {
   217			shtx->tx_flags &= ~SKBTX_IN_PROGRESS;
   218			return;
   219		}
   220	
   221		ns = pch_tx_snap_read(pdev);
   222	
   223		memset(&shhwtstamps, 0, sizeof(shhwtstamps));
   224		shhwtstamps.hwtstamp = ns_to_ktime(ns);
   225		skb_tstamp_tx(skb, &shhwtstamps);
   226	
   227		pch_ch_event_write(pdev, TX_SNAPSHOT_LOCKED);
   228	}
   229	
   230	static int hwtstamp_ioctl(struct net_device *netdev, struct ifreq *ifr, int cmd)
   231	{
   232		struct hwtstamp_config cfg;
   233		struct pch_gbe_adapter *adapter = netdev_priv(netdev);
   234		struct pci_dev *pdev;
   235		u8 station[20];
   236	
   237		if (copy_from_user(&cfg, ifr->ifr_data, sizeof(cfg)))
   238			return -EFAULT;
   239	
   240		if (cfg.flags) /* reserved for future extensions */
   241			return -EINVAL;
   242	
   243		/* Get ieee1588's dev information */
   244		pdev = adapter->ptp_pdev;
   245	
   246		if (cfg.tx_type != HWTSTAMP_TX_OFF && cfg.tx_type != HWTSTAMP_TX_ON)
   247			return -ERANGE;
   248	
   249		switch (cfg.rx_filter) {
   250		case HWTSTAMP_FILTER_NONE:
   251			adapter->hwts_rx_en = 0;
   252			break;
   253		case HWTSTAMP_FILTER_PTP_V1_L4_SYNC:
   254			adapter->hwts_rx_en = 0;
   255			pch_ch_control_write(pdev, SLAVE_MODE | CAP_MODE0);
   256			break;
   257		case HWTSTAMP_FILTER_PTP_V1_L4_DELAY_REQ:
   258			adapter->hwts_rx_en = 1;
   259			pch_ch_control_write(pdev, MASTER_MODE | CAP_MODE0);
   260			break;
   261		case HWTSTAMP_FILTER_PTP_V2_L4_EVENT:
   262			adapter->hwts_rx_en = 1;
   263			pch_ch_control_write(pdev, V2_MODE | CAP_MODE2);
   264			strcpy(station, PTP_L4_MULTICAST_SA);
   265			pch_set_station_address(station, pdev);
   266			break;
   267		case HWTSTAMP_FILTER_PTP_V2_L2_EVENT:
   268			adapter->hwts_rx_en = 1;
   269			pch_ch_control_write(pdev, V2_MODE | CAP_MODE2);
   270			strcpy(station, PTP_L2_MULTICAST_SA);
   271			pch_set_station_address(station, pdev);
   272			break;
   273		default:
   274			return -ERANGE;
   275		}
   276	
   277		adapter->hwts_tx_en = cfg.tx_type == HWTSTAMP_TX_ON;
   278	
   279		/* Clear out any old time stamps. */
   280		pch_ch_event_write(pdev, TX_SNAPSHOT_LOCKED | RX_SNAPSHOT_LOCKED);
   281	
   282		return copy_to_user(ifr->ifr_data, &cfg, sizeof(cfg)) ? -EFAULT : 0;
   283	}
   284	
   285	static inline void pch_gbe_mac_load_mac_addr(struct pch_gbe_hw *hw)
   286	{
   287		iowrite32(0x01, &hw->reg->MAC_ADDR_LOAD);
   288	}
   289	
   290	/**
   291	 * pch_gbe_mac_read_mac_addr - Read MAC address
   292	 * @hw:	            Pointer to the HW structure
   293	 * Returns:
   294	 *	0:			Successful.
   295	 */
   296	s32 pch_gbe_mac_read_mac_addr(struct pch_gbe_hw *hw)
   297	{
   298		struct pch_gbe_adapter *adapter = pch_gbe_hw_to_adapter(hw);
   299		u32  adr1a, adr1b;
   300	
   301		adr1a = ioread32(&hw->reg->mac_adr[0].high);
   302		adr1b = ioread32(&hw->reg->mac_adr[0].low);
   303	
   304		hw->mac.addr[0] = (u8)(adr1a & 0xFF);
   305		hw->mac.addr[1] = (u8)((adr1a >> 8) & 0xFF);
   306		hw->mac.addr[2] = (u8)((adr1a >> 16) & 0xFF);
   307		hw->mac.addr[3] = (u8)((adr1a >> 24) & 0xFF);
   308		hw->mac.addr[4] = (u8)(adr1b & 0xFF);
   309		hw->mac.addr[5] = (u8)((adr1b >> 8) & 0xFF);
   310	
   311		netdev_dbg(adapter->netdev, "hw->mac.addr : %pM\n", hw->mac.addr);
   312		return 0;
   313	}
   314	
   315	/**
   316	 * pch_gbe_wait_clr_bit - Wait to clear a bit
   317	 * @reg:	Pointer of register
   318	 * @busy:	Busy bit
   319	 */
   320	static void pch_gbe_wait_clr_bit(void *reg, u32 bit)
   321	{
   322		int err;
   323		u32 tmp;
   324	
 > 325		err = readl_poll_timeout_atomic(reg, tmp, !(tmp & bit), 10, 25000);
   326		if (err)
   327			pr_err("Error: busy bit is not cleared\n");
   328	}
   329	

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation


[Index of Archives]     [Linux MIPS Home]     [LKML Archive]     [Linux ARM Kernel]     [Linux ARM]     [Linux]     [Git]     [Yosemite News]     [Linux SCSI]     [Linux Hams]

  Powered by Linux