linux-arm-kernel.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
* [PATCH net-next v2 0/3] net: emaclite: support arm64 platform
@ 2019-12-20  8:56 Radhey Shyam Pandey
  2019-12-20  8:56 ` [PATCH net-next v2 1/3] net: emaclite: Fix coding style Radhey Shyam Pandey
                   ` (2 more replies)
  0 siblings, 3 replies; 5+ messages in thread
From: Radhey Shyam Pandey @ 2019-12-20  8:56 UTC (permalink / raw)
  To: davem, michal.simek
  Cc: netdev, Radhey Shyam Pandey, linux-kernel, linux-arm-kernel, git

MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

This patchset fixes the checkpatch warning reported in xilinx emaclite
driver. It also remove obsolete arch dependency in kconfig to support
aarch64 platform and fixes related gcc warnings.

Changes for v2:
- Modified description of reset_lock spinlock variable.

Michal Simek (1):
  net: emaclite: Fix arm64 compilation warnings

Radhey Shyam Pandey (2):
  net: emaclite: Fix coding style
  net: emaclite: In kconfig remove arch dependency

 drivers/net/ethernet/xilinx/Kconfig           |  2 +-
 drivers/net/ethernet/xilinx/xilinx_emaclite.c | 47 ++++++++++++---------------
 2 files changed, 22 insertions(+), 27 deletions(-)

-- 
2.7.4


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply	[flat|nested] 5+ messages in thread

* [PATCH net-next v2 1/3] net: emaclite: Fix coding style
  2019-12-20  8:56 [PATCH net-next v2 0/3] net: emaclite: support arm64 platform Radhey Shyam Pandey
@ 2019-12-20  8:56 ` Radhey Shyam Pandey
  2019-12-20  8:56 ` [PATCH net-next v2 2/3] net: emaclite: In kconfig remove arch dependency Radhey Shyam Pandey
  2019-12-20  8:57 ` [PATCH net-next v2 3/3] net: emaclite: Fix arm64 compilation warnings Radhey Shyam Pandey
  2 siblings, 0 replies; 5+ messages in thread
From: Radhey Shyam Pandey @ 2019-12-20  8:56 UTC (permalink / raw)
  To: davem, michal.simek
  Cc: netdev, Radhey Shyam Pandey, linux-kernel, linux-arm-kernel, git

Make coding style changes to fix checkpatch script warnings.
There is no functional change. Fixes below check and warnings-

CHECK: Blank lines aren't necessary after an open brace '{'
CHECK: spinlock_t definition without comment
CHECK: Please don't use multiple blank lines
WARNING: Prefer 'unsigned int' to bare use of 'unsigned'
CHECK: braces {} should be used on all arms of this statement
CHECK: Unbalanced braces around else statement
CHECK: Alignment should match open parenthesis
WARNING: Missing a blank line after declarations

Signed-off-by: Radhey Shyam Pandey <radhey.shyam.pandey@xilinx.com>
---
Changes for v2:
Modified description of reset_lock spinlock variable.
---
 drivers/net/ethernet/xilinx/xilinx_emaclite.c | 37 ++++++++++++---------------
 1 file changed, 16 insertions(+), 21 deletions(-)

diff --git a/drivers/net/ethernet/xilinx/xilinx_emaclite.c b/drivers/net/ethernet/xilinx/xilinx_emaclite.c
index 0c26f5b..7f98728 100644
--- a/drivers/net/ethernet/xilinx/xilinx_emaclite.c
+++ b/drivers/net/ethernet/xilinx/xilinx_emaclite.c
@@ -1,6 +1,5 @@
 // SPDX-License-Identifier: GPL-2.0-or-later
-/*
- * Xilinx EmacLite Linux driver for the Xilinx Ethernet MAC Lite device.
+/* Xilinx EmacLite Linux driver for the Xilinx Ethernet MAC Lite device.
  *
  * This is a new flat driver which is based on the original emac_lite
  * driver from John Williams <john.williams@xilinx.com>.
@@ -91,8 +90,6 @@
 #define XEL_ARP_PACKET_SIZE		28	/* Max ARP packet size */
 #define XEL_HEADER_IP_LENGTH_OFFSET	16	/* IP Length Offset */
 
-
-
 #define TX_TIMEOUT		(60 * HZ)	/* Tx timeout is 60 seconds. */
 #define ALIGNMENT		4
 
@@ -115,7 +112,7 @@
  * @next_tx_buf_to_use:	next Tx buffer to write to
  * @next_rx_buf_to_use:	next Rx buffer to read from
  * @base_addr:		base address of the Emaclite device
- * @reset_lock:		lock used for synchronization
+ * @reset_lock:		lock to serialize xmit and tx_timeout execution
  * @deferred_skb:	holds an skb (for transmission at a later time) when the
  *			Tx buffer is not free
  * @phy_dev:		pointer to the PHY device
@@ -124,7 +121,6 @@
  * @last_link:		last link status
  */
 struct net_local {
-
 	struct net_device *ndev;
 
 	bool tx_ping_pong;
@@ -133,7 +129,7 @@ struct net_local {
 	u32 next_rx_buf_to_use;
 	void __iomem *base_addr;
 
-	spinlock_t reset_lock;
+	spinlock_t reset_lock; /* serialize xmit and tx_timeout execution */
 	struct sk_buff *deferred_skb;
 
 	struct phy_device *phy_dev;
@@ -144,7 +140,6 @@ struct net_local {
 	int last_link;
 };
 
-
 /*************************/
 /* EmacLite driver calls */
 /*************************/
@@ -207,7 +202,7 @@ static void xemaclite_disable_interrupts(struct net_local *drvdata)
  * address in the EmacLite device.
  */
 static void xemaclite_aligned_write(void *src_ptr, u32 *dest_ptr,
-				    unsigned length)
+				    unsigned int length)
 {
 	u32 align_buffer;
 	u32 *to_u32_ptr;
@@ -264,7 +259,7 @@ static void xemaclite_aligned_write(void *src_ptr, u32 *dest_ptr,
  * to a 16-bit aligned buffer.
  */
 static void xemaclite_aligned_read(u32 *src_ptr, u8 *dest_ptr,
-				   unsigned length)
+				   unsigned int length)
 {
 	u16 *to_u16_ptr, *from_u16_ptr;
 	u32 *from_u32_ptr;
@@ -329,7 +324,6 @@ static int xemaclite_send_data(struct net_local *drvdata, u8 *data,
 	reg_data = xemaclite_readl(addr + XEL_TSR_OFFSET);
 	if ((reg_data & (XEL_TSR_XMIT_BUSY_MASK |
 	     XEL_TSR_XMIT_ACTIVE_MASK)) == 0) {
-
 		/* Switch to next buffer if configured */
 		if (drvdata->tx_ping_pong != 0)
 			drvdata->next_tx_buf_to_use ^= XEL_BUFFER_OFFSET;
@@ -345,8 +339,9 @@ static int xemaclite_send_data(struct net_local *drvdata, u8 *data,
 		if ((reg_data & (XEL_TSR_XMIT_BUSY_MASK |
 		     XEL_TSR_XMIT_ACTIVE_MASK)) != 0)
 			return -1; /* Buffers were full, return failure */
-	} else
+	} else {
 		return -1; /* Buffer was full, return failure */
+	}
 
 	/* Write the frame to the buffer */
 	xemaclite_aligned_write(data, (u32 __force *)addr, byte_count);
@@ -421,7 +416,6 @@ static u16 xemaclite_recv_data(struct net_local *drvdata, u8 *data, int maxlen)
 	 * or an IP packet or an ARP packet
 	 */
 	if (proto_type > ETH_DATA_LEN) {
-
 		if (proto_type == ETH_P_IP) {
 			length = ((ntohl(xemaclite_readl(addr +
 					XEL_HEADER_IP_LENGTH_OFFSET +
@@ -431,23 +425,25 @@ static u16 xemaclite_recv_data(struct net_local *drvdata, u8 *data, int maxlen)
 			length = min_t(u16, length, ETH_DATA_LEN);
 			length += ETH_HLEN + ETH_FCS_LEN;
 
-		} else if (proto_type == ETH_P_ARP)
+		} else if (proto_type == ETH_P_ARP) {
 			length = XEL_ARP_PACKET_SIZE + ETH_HLEN + ETH_FCS_LEN;
-		else
+		} else {
 			/* Field contains type other than IP or ARP, use max
 			 * frame size and let user parse it
 			 */
 			length = ETH_FRAME_LEN + ETH_FCS_LEN;
-	} else
+		}
+	} else {
 		/* Use the length in the frame, plus the header and trailer */
 		length = proto_type + ETH_HLEN + ETH_FCS_LEN;
+	}
 
 	if (WARN_ON(length > maxlen))
 		length = maxlen;
 
 	/* Read from the EmacLite device */
 	xemaclite_aligned_read((u32 __force *)(addr + XEL_RXBUFF_OFFSET),
-				data, length);
+			       data, length);
 
 	/* Acknowledge the frame */
 	reg_data = xemaclite_readl(addr + XEL_RSR_OFFSET);
@@ -668,8 +664,7 @@ static irqreturn_t xemaclite_interrupt(int irq, void *dev_id)
 	/* Check if the Transmission for the first buffer is completed */
 	tx_status = xemaclite_readl(base_addr + XEL_TSR_OFFSET);
 	if (((tx_status & XEL_TSR_XMIT_BUSY_MASK) == 0) &&
-		(tx_status & XEL_TSR_XMIT_ACTIVE_MASK) != 0) {
-
+	    (tx_status & XEL_TSR_XMIT_ACTIVE_MASK) != 0) {
 		tx_status &= ~XEL_TSR_XMIT_ACTIVE_MASK;
 		xemaclite_writel(tx_status, base_addr + XEL_TSR_OFFSET);
 
@@ -679,8 +674,7 @@ static irqreturn_t xemaclite_interrupt(int irq, void *dev_id)
 	/* Check if the Transmission for the second buffer is completed */
 	tx_status = xemaclite_readl(base_addr + XEL_BUFFER_OFFSET + XEL_TSR_OFFSET);
 	if (((tx_status & XEL_TSR_XMIT_BUSY_MASK) == 0) &&
-		(tx_status & XEL_TSR_XMIT_ACTIVE_MASK) != 0) {
-
+	    (tx_status & XEL_TSR_XMIT_ACTIVE_MASK) != 0) {
 		tx_status &= ~XEL_TSR_XMIT_ACTIVE_MASK;
 		xemaclite_writel(tx_status, base_addr + XEL_BUFFER_OFFSET +
 				 XEL_TSR_OFFSET);
@@ -837,6 +831,7 @@ static int xemaclite_mdio_setup(struct net_local *lp, struct device *dev)
 	of_address_to_resource(npp, 0, &res);
 	if (lp->ndev->mem_start != res.start) {
 		struct phy_device *phydev;
+
 		phydev = of_phy_find_device(lp->phy_node);
 		if (!phydev)
 			dev_info(dev,
-- 
2.7.4


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [PATCH net-next v2 2/3] net: emaclite: In kconfig remove arch dependency
  2019-12-20  8:56 [PATCH net-next v2 0/3] net: emaclite: support arm64 platform Radhey Shyam Pandey
  2019-12-20  8:56 ` [PATCH net-next v2 1/3] net: emaclite: Fix coding style Radhey Shyam Pandey
@ 2019-12-20  8:56 ` Radhey Shyam Pandey
  2019-12-23 19:38   ` kbuild test robot
  2019-12-20  8:57 ` [PATCH net-next v2 3/3] net: emaclite: Fix arm64 compilation warnings Radhey Shyam Pandey
  2 siblings, 1 reply; 5+ messages in thread
From: Radhey Shyam Pandey @ 2019-12-20  8:56 UTC (permalink / raw)
  To: davem, michal.simek
  Cc: netdev, Radhey Shyam Pandey, linux-kernel, linux-arm-kernel, git

To enable xilinx_emaclite driver support on zynqmp ultrascale platform
(ARCH64) remove the obsolete ARCH dependency list. Also include HAS_IOMEM
dependency to avoid compilation failure on architectures without IOMEM.

Sanity build test done for microblaze, zynq and zynqmp ultrascale platform.

Signed-off-by: Radhey Shyam Pandey <radhey.shyam.pandey@xilinx.com>
---
Changes for v2:
None
---
 drivers/net/ethernet/xilinx/Kconfig | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/net/ethernet/xilinx/Kconfig b/drivers/net/ethernet/xilinx/Kconfig
index 6304ebd..0692dd1 100644
--- a/drivers/net/ethernet/xilinx/Kconfig
+++ b/drivers/net/ethernet/xilinx/Kconfig
@@ -18,8 +18,8 @@ if NET_VENDOR_XILINX
 
 config XILINX_EMACLITE
 	tristate "Xilinx 10/100 Ethernet Lite support"
-	depends on PPC32 || MICROBLAZE || ARCH_ZYNQ || MIPS
 	select PHYLIB
+	depends on HAS_IOMEM
 	---help---
 	  This driver supports the 10/100 Ethernet Lite from Xilinx.
 
-- 
2.7.4


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [PATCH net-next v2 3/3] net: emaclite: Fix arm64 compilation warnings
  2019-12-20  8:56 [PATCH net-next v2 0/3] net: emaclite: support arm64 platform Radhey Shyam Pandey
  2019-12-20  8:56 ` [PATCH net-next v2 1/3] net: emaclite: Fix coding style Radhey Shyam Pandey
  2019-12-20  8:56 ` [PATCH net-next v2 2/3] net: emaclite: In kconfig remove arch dependency Radhey Shyam Pandey
@ 2019-12-20  8:57 ` Radhey Shyam Pandey
  2 siblings, 0 replies; 5+ messages in thread
From: Radhey Shyam Pandey @ 2019-12-20  8:57 UTC (permalink / raw)
  To: davem, michal.simek
  Cc: netdev, Radhey Shyam Pandey, linux-kernel, linux-arm-kernel, git

From: Michal Simek <michal.simek@xilinx.com>

Recast pointers with ulong instead of u32 for arm64.
This patch fixes these compilation warnings:

drivers/net/ethernet/xilinx/xilinx_emaclite.c:
In function ‘xemaclite_send_data’:
drivers/net/ethernet/xilinx/xilinx_emaclite.c:335:35:
warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
   addr = (void __iomem __force *)((u32 __force)addr ^
                                   ^
drivers/net/ethernet/xilinx/xilinx_emaclite.c:335:10:
warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
   addr = (void __iomem __force *)((u32 __force)addr ^
          ^
drivers/net/ethernet/xilinx/xilinx_emaclite.c:
In function ‘xemaclite_recv_data’:
drivers/net/ethernet/xilinx/xilinx_emaclite.c:397:36:
warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
    addr = (void __iomem __force *)((u32 __force)addr ^
                                    ^
drivers/net/ethernet/xilinx/xilinx_emaclite.c:397:11:
warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
    addr = (void __iomem __force *)((u32 __force)addr ^
           ^
drivers/net/ethernet/xilinx/xilinx_emaclite.c:
In function ‘xemaclite_rx_handler’:
drivers/net/ethernet/xilinx/xilinx_emaclite.c:97:42:
warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
 #define BUFFER_ALIGN(adr) ((ALIGNMENT - ((u32)adr)) % ALIGNMENT)
                                          ^
drivers/net/ethernet/xilinx/xilinx_emaclite.c:612:10:
note: in expansion of macro ‘BUFFER_ALIGN’
  align = BUFFER_ALIGN(skb->data);
          ^~~~~~~~~~~~
In file included from ./include/linux/dma-mapping.h:7,
                 from ./include/linux/skbuff.h:31,
                 from ./include/linux/if_ether.h:19,
                 from ./include/uapi/linux/ethtool.h:19,
                 from ./include/linux/ethtool.h:18,
                 from ./include/linux/netdevice.h:37,
                 from drivers/net/ethernet/xilinx/xilinx_emaclite.c:12:
drivers/net/ethernet/xilinx/xilinx_emaclite.c:
In function ‘xemaclite_of_probe’:
drivers/net/ethernet/xilinx/xilinx_emaclite.c:1191:4:
warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
    (unsigned int __force)lp->base_addr, ndev->irq);
    ^
./include/linux/device.h:1780:33: note: in definition of macro ‘dev_info’
  _dev_info(dev, dev_fmt(fmt), ##__VA_ARGS__)
                                 ^~~~~~~~~~~

Signed-off-by: Michal Simek <michal.simek@xilinx.com>
Signed-off-by: Radhey Shyam Pandey <radhey.shyam.pandey@xilinx.com>
---
Changes for v2:
None
---
 drivers/net/ethernet/xilinx/xilinx_emaclite.c | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/drivers/net/ethernet/xilinx/xilinx_emaclite.c b/drivers/net/ethernet/xilinx/xilinx_emaclite.c
index 7f98728..96e9d21 100644
--- a/drivers/net/ethernet/xilinx/xilinx_emaclite.c
+++ b/drivers/net/ethernet/xilinx/xilinx_emaclite.c
@@ -94,7 +94,7 @@
 #define ALIGNMENT		4
 
 /* BUFFER_ALIGN(adr) calculates the number of bytes to the next alignment. */
-#define BUFFER_ALIGN(adr) ((ALIGNMENT - ((u32)adr)) % ALIGNMENT)
+#define BUFFER_ALIGN(adr) ((ALIGNMENT - ((ulong)adr)) % ALIGNMENT)
 
 #ifdef __BIG_ENDIAN
 #define xemaclite_readl		ioread32be
@@ -332,7 +332,7 @@ static int xemaclite_send_data(struct net_local *drvdata, u8 *data,
 		 * if it is configured in HW
 		 */
 
-		addr = (void __iomem __force *)((u32 __force)addr ^
+		addr = (void __iomem __force *)((ulong __force)addr ^
 						 XEL_BUFFER_OFFSET);
 		reg_data = xemaclite_readl(addr + XEL_TSR_OFFSET);
 
@@ -394,7 +394,7 @@ static u16 xemaclite_recv_data(struct net_local *drvdata, u8 *data, int maxlen)
 		 * will correct on subsequent calls
 		 */
 		if (drvdata->rx_ping_pong != 0)
-			addr = (void __iomem __force *)((u32 __force)addr ^
+			addr = (void __iomem __force *)((ulong __force)addr ^
 							 XEL_BUFFER_OFFSET);
 		else
 			return 0;	/* No data was available */
@@ -1186,9 +1186,9 @@ static int xemaclite_of_probe(struct platform_device *ofdev)
 	}
 
 	dev_info(dev,
-		 "Xilinx EmacLite at 0x%08X mapped to 0x%08X, irq=%d\n",
+		 "Xilinx EmacLite at 0x%08X mapped to 0x%08lX, irq=%d\n",
 		 (unsigned int __force)ndev->mem_start,
-		 (unsigned int __force)lp->base_addr, ndev->irq);
+		 (unsigned long __force)lp->base_addr, ndev->irq);
 	return 0;
 
 error:
-- 
2.7.4


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [PATCH net-next v2 2/3] net: emaclite: In kconfig remove arch dependency
  2019-12-20  8:56 ` [PATCH net-next v2 2/3] net: emaclite: In kconfig remove arch dependency Radhey Shyam Pandey
@ 2019-12-23 19:38   ` kbuild test robot
  0 siblings, 0 replies; 5+ messages in thread
From: kbuild test robot @ 2019-12-23 19:38 UTC (permalink / raw)
  To: Radhey Shyam Pandey
  Cc: kbuild-all, netdev, Radhey Shyam Pandey, linux-kernel,
	michal.simek, git, davem, linux-arm-kernel

Hi Radhey,

I love your patch! Perhaps something to improve:

[auto build test WARNING on net-next/master]
[also build test WARNING on net/master v5.5-rc3 next-20191220]
[cannot apply to xlnx/master]
[if your patch is applied to the wrong git tree, please drop us a note to help
improve the system. BTW, we also suggest to use '--base' option to specify the
base tree in git format-patch, please see https://stackoverflow.com/a/37406982]

url:    https://github.com/0day-ci/linux/commits/Radhey-Shyam-Pandey/net-emaclite-Fix-coding-style/20191223-163233
base:   https://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next.git ac80010fc94eb0680d9a432b639583bd7ac29066
reproduce:
        # apt-get install sparse
        # sparse version: v0.6.1-129-g341daf20-dirty
        make ARCH=x86_64 allmodconfig
        make C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__'

If you fix the issue, kindly add following tag
Reported-by: kbuild test robot <lkp@intel.com>


sparse warnings: (new ones prefixed by >>)

>> drivers/net/ethernet/xilinx/xilinx_emaclite.c:411:24: sparse: sparse: cast to restricted __be32
>> drivers/net/ethernet/xilinx/xilinx_emaclite.c:411:24: sparse: sparse: cast to restricted __be32
>> drivers/net/ethernet/xilinx/xilinx_emaclite.c:411:24: sparse: sparse: cast to restricted __be32
>> drivers/net/ethernet/xilinx/xilinx_emaclite.c:411:24: sparse: sparse: cast to restricted __be32
>> drivers/net/ethernet/xilinx/xilinx_emaclite.c:411:24: sparse: sparse: cast to restricted __be32
>> drivers/net/ethernet/xilinx/xilinx_emaclite.c:411:24: sparse: sparse: cast to restricted __be32
   drivers/net/ethernet/xilinx/xilinx_emaclite.c:420:36: sparse: sparse: cast to restricted __be32
   drivers/net/ethernet/xilinx/xilinx_emaclite.c:420:36: sparse: sparse: cast to restricted __be32
   drivers/net/ethernet/xilinx/xilinx_emaclite.c:420:36: sparse: sparse: cast to restricted __be32
   drivers/net/ethernet/xilinx/xilinx_emaclite.c:420:36: sparse: sparse: cast to restricted __be32
   drivers/net/ethernet/xilinx/xilinx_emaclite.c:420:36: sparse: sparse: cast to restricted __be32
   drivers/net/ethernet/xilinx/xilinx_emaclite.c:420:36: sparse: sparse: cast to restricted __be32
   drivers/net/ethernet/xilinx/xilinx_emaclite.c:612:17: sparse: sparse: non size-preserving pointer to integer cast

vim +411 drivers/net/ethernet/xilinx/xilinx_emaclite.c

bb81b2ddfa194b drivers/net/xilinx_emaclite.c                 John Linn           2009-08-20  363  
bb81b2ddfa194b drivers/net/xilinx_emaclite.c                 John Linn           2009-08-20  364  /**
bb81b2ddfa194b drivers/net/xilinx_emaclite.c                 John Linn           2009-08-20  365   * xemaclite_recv_data - Receive a frame
bb81b2ddfa194b drivers/net/xilinx_emaclite.c                 John Linn           2009-08-20  366   * @drvdata:	Pointer to the Emaclite device private data
bb81b2ddfa194b drivers/net/xilinx_emaclite.c                 John Linn           2009-08-20  367   * @data:	Address where the data is to be received
f713d50f33c1fb drivers/net/ethernet/xilinx/xilinx_emaclite.c Radhey Shyam Pandey 2018-06-28  368   * @maxlen:    Maximum supported ethernet packet length
bb81b2ddfa194b drivers/net/xilinx_emaclite.c                 John Linn           2009-08-20  369   *
bb81b2ddfa194b drivers/net/xilinx_emaclite.c                 John Linn           2009-08-20  370   * This function is intended to be called from the interrupt context or
bb81b2ddfa194b drivers/net/xilinx_emaclite.c                 John Linn           2009-08-20  371   * with a wrapper which waits for the receive frame to be available.
bb81b2ddfa194b drivers/net/xilinx_emaclite.c                 John Linn           2009-08-20  372   *
bb81b2ddfa194b drivers/net/xilinx_emaclite.c                 John Linn           2009-08-20  373   * Return:	Total number of bytes received
bb81b2ddfa194b drivers/net/xilinx_emaclite.c                 John Linn           2009-08-20  374   */
cd224553641848 drivers/net/ethernet/xilinx/xilinx_emaclite.c Anssi Hannula       2017-02-14  375  static u16 xemaclite_recv_data(struct net_local *drvdata, u8 *data, int maxlen)
bb81b2ddfa194b drivers/net/xilinx_emaclite.c                 John Linn           2009-08-20  376  {
bb81b2ddfa194b drivers/net/xilinx_emaclite.c                 John Linn           2009-08-20  377  	void __iomem *addr;
bb81b2ddfa194b drivers/net/xilinx_emaclite.c                 John Linn           2009-08-20  378  	u16 length, proto_type;
bb81b2ddfa194b drivers/net/xilinx_emaclite.c                 John Linn           2009-08-20  379  	u32 reg_data;
bb81b2ddfa194b drivers/net/xilinx_emaclite.c                 John Linn           2009-08-20  380  
bb81b2ddfa194b drivers/net/xilinx_emaclite.c                 John Linn           2009-08-20  381  	/* Determine the expected buffer address */
bb81b2ddfa194b drivers/net/xilinx_emaclite.c                 John Linn           2009-08-20  382  	addr = (drvdata->base_addr + drvdata->next_rx_buf_to_use);
bb81b2ddfa194b drivers/net/xilinx_emaclite.c                 John Linn           2009-08-20  383  
bb81b2ddfa194b drivers/net/xilinx_emaclite.c                 John Linn           2009-08-20  384  	/* Verify which buffer has valid data */
acf138f1b00bdd drivers/net/ethernet/xilinx/xilinx_emaclite.c Anssi Hannula       2017-02-14  385  	reg_data = xemaclite_readl(addr + XEL_RSR_OFFSET);
bb81b2ddfa194b drivers/net/xilinx_emaclite.c                 John Linn           2009-08-20  386  
bb81b2ddfa194b drivers/net/xilinx_emaclite.c                 John Linn           2009-08-20  387  	if ((reg_data & XEL_RSR_RECV_DONE_MASK) == XEL_RSR_RECV_DONE_MASK) {
bb81b2ddfa194b drivers/net/xilinx_emaclite.c                 John Linn           2009-08-20  388  		if (drvdata->rx_ping_pong != 0)
bb81b2ddfa194b drivers/net/xilinx_emaclite.c                 John Linn           2009-08-20  389  			drvdata->next_rx_buf_to_use ^= XEL_BUFFER_OFFSET;
bb81b2ddfa194b drivers/net/xilinx_emaclite.c                 John Linn           2009-08-20  390  	} else {
bb81b2ddfa194b drivers/net/xilinx_emaclite.c                 John Linn           2009-08-20  391  		/* The instance is out of sync, try other buffer if other
bb81b2ddfa194b drivers/net/xilinx_emaclite.c                 John Linn           2009-08-20  392  		 * buffer is configured, return 0 otherwise. If the instance is
bb81b2ddfa194b drivers/net/xilinx_emaclite.c                 John Linn           2009-08-20  393  		 * out of sync, do not update the 'next_rx_buf_to_use' since it
49a83f002731db drivers/net/ethernet/xilinx/xilinx_emaclite.c Radhey Shyam Pandey 2018-06-28  394  		 * will correct on subsequent calls
49a83f002731db drivers/net/ethernet/xilinx/xilinx_emaclite.c Radhey Shyam Pandey 2018-06-28  395  		 */
bb81b2ddfa194b drivers/net/xilinx_emaclite.c                 John Linn           2009-08-20  396  		if (drvdata->rx_ping_pong != 0)
bb81b2ddfa194b drivers/net/xilinx_emaclite.c                 John Linn           2009-08-20  397  			addr = (void __iomem __force *)((u32 __force)addr ^
bb81b2ddfa194b drivers/net/xilinx_emaclite.c                 John Linn           2009-08-20  398  							 XEL_BUFFER_OFFSET);
bb81b2ddfa194b drivers/net/xilinx_emaclite.c                 John Linn           2009-08-20  399  		else
bb81b2ddfa194b drivers/net/xilinx_emaclite.c                 John Linn           2009-08-20  400  			return 0;	/* No data was available */
bb81b2ddfa194b drivers/net/xilinx_emaclite.c                 John Linn           2009-08-20  401  
bb81b2ddfa194b drivers/net/xilinx_emaclite.c                 John Linn           2009-08-20  402  		/* Verify that buffer has valid data */
acf138f1b00bdd drivers/net/ethernet/xilinx/xilinx_emaclite.c Anssi Hannula       2017-02-14  403  		reg_data = xemaclite_readl(addr + XEL_RSR_OFFSET);
bb81b2ddfa194b drivers/net/xilinx_emaclite.c                 John Linn           2009-08-20  404  		if ((reg_data & XEL_RSR_RECV_DONE_MASK) !=
bb81b2ddfa194b drivers/net/xilinx_emaclite.c                 John Linn           2009-08-20  405  		     XEL_RSR_RECV_DONE_MASK)
bb81b2ddfa194b drivers/net/xilinx_emaclite.c                 John Linn           2009-08-20  406  			return 0;	/* No data was available */
bb81b2ddfa194b drivers/net/xilinx_emaclite.c                 John Linn           2009-08-20  407  	}
bb81b2ddfa194b drivers/net/xilinx_emaclite.c                 John Linn           2009-08-20  408  
49a83f002731db drivers/net/ethernet/xilinx/xilinx_emaclite.c Radhey Shyam Pandey 2018-06-28  409  	/* Get the protocol type of the ethernet frame that arrived
49a83f002731db drivers/net/ethernet/xilinx/xilinx_emaclite.c Radhey Shyam Pandey 2018-06-28  410  	 */
acf138f1b00bdd drivers/net/ethernet/xilinx/xilinx_emaclite.c Anssi Hannula       2017-02-14 @411  	proto_type = ((ntohl(xemaclite_readl(addr + XEL_HEADER_OFFSET +
44180a573ec936 drivers/net/xilinx_emaclite.c                 Michal Simek        2010-09-10  412  			XEL_RXBUFF_OFFSET)) >> XEL_HEADER_SHIFT) &
bb81b2ddfa194b drivers/net/xilinx_emaclite.c                 John Linn           2009-08-20  413  			XEL_RPLR_LENGTH_MASK);
bb81b2ddfa194b drivers/net/xilinx_emaclite.c                 John Linn           2009-08-20  414  
bb81b2ddfa194b drivers/net/xilinx_emaclite.c                 John Linn           2009-08-20  415  	/* Check if received ethernet frame is a raw ethernet frame
49a83f002731db drivers/net/ethernet/xilinx/xilinx_emaclite.c Radhey Shyam Pandey 2018-06-28  416  	 * or an IP packet or an ARP packet
49a83f002731db drivers/net/ethernet/xilinx/xilinx_emaclite.c Radhey Shyam Pandey 2018-06-28  417  	 */
cd224553641848 drivers/net/ethernet/xilinx/xilinx_emaclite.c Anssi Hannula       2017-02-14  418  	if (proto_type > ETH_DATA_LEN) {
bb81b2ddfa194b drivers/net/xilinx_emaclite.c                 John Linn           2009-08-20  419  		if (proto_type == ETH_P_IP) {
acf138f1b00bdd drivers/net/ethernet/xilinx/xilinx_emaclite.c Anssi Hannula       2017-02-14  420  			length = ((ntohl(xemaclite_readl(addr +
bb81b2ddfa194b drivers/net/xilinx_emaclite.c                 John Linn           2009-08-20  421  					XEL_HEADER_IP_LENGTH_OFFSET +
44180a573ec936 drivers/net/xilinx_emaclite.c                 Michal Simek        2010-09-10  422  					XEL_RXBUFF_OFFSET)) >>
bb81b2ddfa194b drivers/net/xilinx_emaclite.c                 John Linn           2009-08-20  423  					XEL_HEADER_SHIFT) &
bb81b2ddfa194b drivers/net/xilinx_emaclite.c                 John Linn           2009-08-20  424  					XEL_RPLR_LENGTH_MASK);
cd224553641848 drivers/net/ethernet/xilinx/xilinx_emaclite.c Anssi Hannula       2017-02-14  425  			length = min_t(u16, length, ETH_DATA_LEN);
bb81b2ddfa194b drivers/net/xilinx_emaclite.c                 John Linn           2009-08-20  426  			length += ETH_HLEN + ETH_FCS_LEN;
bb81b2ddfa194b drivers/net/xilinx_emaclite.c                 John Linn           2009-08-20  427  
69ddb40fcc98c1 drivers/net/ethernet/xilinx/xilinx_emaclite.c Radhey Shyam Pandey 2019-12-20  428  		} else if (proto_type == ETH_P_ARP) {
bb81b2ddfa194b drivers/net/xilinx_emaclite.c                 John Linn           2009-08-20  429  			length = XEL_ARP_PACKET_SIZE + ETH_HLEN + ETH_FCS_LEN;
69ddb40fcc98c1 drivers/net/ethernet/xilinx/xilinx_emaclite.c Radhey Shyam Pandey 2019-12-20  430  		} else {
bb81b2ddfa194b drivers/net/xilinx_emaclite.c                 John Linn           2009-08-20  431  			/* Field contains type other than IP or ARP, use max
49a83f002731db drivers/net/ethernet/xilinx/xilinx_emaclite.c Radhey Shyam Pandey 2018-06-28  432  			 * frame size and let user parse it
49a83f002731db drivers/net/ethernet/xilinx/xilinx_emaclite.c Radhey Shyam Pandey 2018-06-28  433  			 */
bb81b2ddfa194b drivers/net/xilinx_emaclite.c                 John Linn           2009-08-20  434  			length = ETH_FRAME_LEN + ETH_FCS_LEN;
69ddb40fcc98c1 drivers/net/ethernet/xilinx/xilinx_emaclite.c Radhey Shyam Pandey 2019-12-20  435  		}
69ddb40fcc98c1 drivers/net/ethernet/xilinx/xilinx_emaclite.c Radhey Shyam Pandey 2019-12-20  436  	} else {
bb81b2ddfa194b drivers/net/xilinx_emaclite.c                 John Linn           2009-08-20  437  		/* Use the length in the frame, plus the header and trailer */
bb81b2ddfa194b drivers/net/xilinx_emaclite.c                 John Linn           2009-08-20  438  		length = proto_type + ETH_HLEN + ETH_FCS_LEN;
69ddb40fcc98c1 drivers/net/ethernet/xilinx/xilinx_emaclite.c Radhey Shyam Pandey 2019-12-20  439  	}
bb81b2ddfa194b drivers/net/xilinx_emaclite.c                 John Linn           2009-08-20  440  
cd224553641848 drivers/net/ethernet/xilinx/xilinx_emaclite.c Anssi Hannula       2017-02-14  441  	if (WARN_ON(length > maxlen))
cd224553641848 drivers/net/ethernet/xilinx/xilinx_emaclite.c Anssi Hannula       2017-02-14  442  		length = maxlen;
cd224553641848 drivers/net/ethernet/xilinx/xilinx_emaclite.c Anssi Hannula       2017-02-14  443  
bb81b2ddfa194b drivers/net/xilinx_emaclite.c                 John Linn           2009-08-20  444  	/* Read from the EmacLite device */
bb81b2ddfa194b drivers/net/xilinx_emaclite.c                 John Linn           2009-08-20  445  	xemaclite_aligned_read((u32 __force *)(addr + XEL_RXBUFF_OFFSET),
bb81b2ddfa194b drivers/net/xilinx_emaclite.c                 John Linn           2009-08-20  446  			       data, length);
bb81b2ddfa194b drivers/net/xilinx_emaclite.c                 John Linn           2009-08-20  447  
bb81b2ddfa194b drivers/net/xilinx_emaclite.c                 John Linn           2009-08-20  448  	/* Acknowledge the frame */
acf138f1b00bdd drivers/net/ethernet/xilinx/xilinx_emaclite.c Anssi Hannula       2017-02-14  449  	reg_data = xemaclite_readl(addr + XEL_RSR_OFFSET);
bb81b2ddfa194b drivers/net/xilinx_emaclite.c                 John Linn           2009-08-20  450  	reg_data &= ~XEL_RSR_RECV_DONE_MASK;
acf138f1b00bdd drivers/net/ethernet/xilinx/xilinx_emaclite.c Anssi Hannula       2017-02-14  451  	xemaclite_writel(reg_data, addr + XEL_RSR_OFFSET);
bb81b2ddfa194b drivers/net/xilinx_emaclite.c                 John Linn           2009-08-20  452  
bb81b2ddfa194b drivers/net/xilinx_emaclite.c                 John Linn           2009-08-20  453  	return length;
bb81b2ddfa194b drivers/net/xilinx_emaclite.c                 John Linn           2009-08-20  454  }
bb81b2ddfa194b drivers/net/xilinx_emaclite.c                 John Linn           2009-08-20  455  

:::::: The code at line 411 was first introduced by commit
:::::: acf138f1b00bdd1b7cd9894562ed0c2a1670888e net: xilinx_emaclite: fix freezes due to unordered I/O

:::::: TO: Anssi Hannula <anssi.hannula@bitwise.fi>
:::::: CC: David S. Miller <davem@davemloft.net>

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

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2019-12-23 19:39 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-12-20  8:56 [PATCH net-next v2 0/3] net: emaclite: support arm64 platform Radhey Shyam Pandey
2019-12-20  8:56 ` [PATCH net-next v2 1/3] net: emaclite: Fix coding style Radhey Shyam Pandey
2019-12-20  8:56 ` [PATCH net-next v2 2/3] net: emaclite: In kconfig remove arch dependency Radhey Shyam Pandey
2019-12-23 19:38   ` kbuild test robot
2019-12-20  8:57 ` [PATCH net-next v2 3/3] net: emaclite: Fix arm64 compilation warnings Radhey Shyam Pandey

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).