linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [net-next PATCH v2 2/3] net: macb: Add support for jumbo frames
       [not found] <1430725960-8441-1-git-send-email-harinik@xilinx.com>
@ 2015-05-04  7:52 ` Harini Katakam
  2015-05-04  8:48   ` Nicolas Ferre
  2015-05-04 19:02   ` Jaeden Amero
  2015-05-04  7:52 ` [net-next PATCH v2 3/3] net: macb: Add change_mtu callback with jumbo support Harini Katakam
  1 sibling, 2 replies; 5+ messages in thread
From: Harini Katakam @ 2015-05-04  7:52 UTC (permalink / raw)
  To: nicolas.ferre, davem, robh+dt, pawel.moll, mark.rutland,
	ijc+devicetree, galak, boris.brezillon, alexandre.belloni,
	harinikatakamlinux
  Cc: netdev, linux-kernel, devicetree, harinik, punnaia, michals

Check for "cdns,zynqmp-gem" compatible string and enable jumbo frame support
in NWCFG register, update descriptor length masks and registers accordingly.
Jumbo max length register should be set according to support in SoC; it is
set to 10240 for Zynq Ultrascale+ MPSoC.

Signed-off-by: Harini Katakam <harinik@xilinx.com>
Reviewed-by: Punnaiah Choudary Kalluri <punnaia@xilinx.com>
---

On v1, Michal commented that I should use macb_config for jumbo parameters
instead of defining them by reading the compatible string directly.
I can use .caps for isjumbo. But jumbo-max-length needs to be defined.
Can I add this to the structure? Any suggestions on how to handle this?

v2:
Add constant definition and update SoC name

---
 drivers/net/ethernet/cadence/macb.c |   21 ++++++++++++++++++---
 drivers/net/ethernet/cadence/macb.h |    8 ++++++++
 2 files changed, 26 insertions(+), 3 deletions(-)

diff --git a/drivers/net/ethernet/cadence/macb.c b/drivers/net/ethernet/cadence/macb.c
index 4104d49..a065283 100644
--- a/drivers/net/ethernet/cadence/macb.c
+++ b/drivers/net/ethernet/cadence/macb.c
@@ -54,6 +54,8 @@
 #define MACB_MAX_TX_LEN		((unsigned int)((1 << MACB_TX_FRMLEN_SIZE) - 1))
 #define GEM_MAX_TX_LEN		((unsigned int)((1 << GEM_TX_FRMLEN_SIZE) - 1))
 
+#define GEM_ZYNQMP_JUMBO_MAX	10240
+
 /*
  * Graceful stop timeouts in us. We should allow up to
  * 1 frame time (10 Mbits/s, full-duplex, ignoring collisions)
@@ -782,7 +784,7 @@ static int gem_rx(struct macb *bp, int budget)
 		}
 		/* now everything is ready for receiving packet */
 		bp->rx_skbuff[entry] = NULL;
-		len = MACB_BFEXT(RX_FRMLEN, ctrl);
+		len = ctrl & bp->rx_frm_len_mask;
 
 		netdev_vdbg(bp->dev, "gem_rx %u (len %u)\n", entry, len);
 
@@ -828,7 +830,7 @@ static int macb_rx_frame(struct macb *bp, unsigned int first_frag,
 	struct macb_dma_desc *desc;
 
 	desc = macb_rx_desc(bp, last_frag);
-	len = MACB_BFEXT(RX_FRMLEN, desc->ctrl);
+	len = desc->ctrl & bp->rx_frm_len_mask;
 
 	netdev_vdbg(bp->dev, "macb_rx_frame frags %u - %u (len %u)\n",
 		macb_rx_ring_wrap(first_frag),
@@ -1633,7 +1635,10 @@ static void macb_init_hw(struct macb *bp)
 	config |= MACB_BF(RBOF, NET_IP_ALIGN);	/* Make eth data aligned */
 	config |= MACB_BIT(PAE);		/* PAuse Enable */
 	config |= MACB_BIT(DRFCS);		/* Discard Rx FCS */
-	config |= MACB_BIT(BIG);		/* Receive oversized frames */
+	if (bp->isjumbo)
+		config |= MACB_BIT(JFRAME);	/* Enable jumbo frames */
+	else
+		config |= MACB_BIT(BIG);	/* Receive oversized frames */
 	if (bp->dev->flags & IFF_PROMISC)
 		config |= MACB_BIT(CAF);	/* Copy All Frames */
 	else if (macb_is_gem(bp) && bp->dev->features & NETIF_F_RXCSUM)
@@ -1642,8 +1647,13 @@ static void macb_init_hw(struct macb *bp)
 		config |= MACB_BIT(NBC);	/* No BroadCast */
 	config |= macb_dbw(bp);
 	macb_writel(bp, NCFGR, config);
+	if (bp->isjumbo && bp->jumbo_max_len)
+		gem_writel(bp, JML, bp->jumbo_max_len);
 	bp->speed = SPEED_10;
 	bp->duplex = DUPLEX_HALF;
+	bp->rx_frm_len_mask = MACB_RX_FRMLEN_MASK;
+	if (bp->isjumbo)
+		bp->rx_frm_len_mask = MACB_RX_JFRMLEN_MASK;
 
 	macb_configure_dma(bp);
 
@@ -2762,6 +2772,11 @@ static int macb_probe(struct platform_device *pdev)
 	bp->pclk = pclk;
 	bp->hclk = hclk;
 	bp->tx_clk = tx_clk;
+	if (of_device_is_compatible(pdev->dev.of_node, "cdns,zynqmp-gem")) {
+		bp->isjumbo = 1;
+		bp->jumbo_max_len = GEM_ZYNQMP_JUMBO_MAX;
+	}
+
 	spin_lock_init(&bp->lock);
 
 	/* setup capabilities */
diff --git a/drivers/net/ethernet/cadence/macb.h b/drivers/net/ethernet/cadence/macb.h
index eb7d76f..e25f77e 100644
--- a/drivers/net/ethernet/cadence/macb.h
+++ b/drivers/net/ethernet/cadence/macb.h
@@ -71,6 +71,7 @@
 #define GEM_NCFGR		0x0004 /* Network Config */
 #define GEM_USRIO		0x000c /* User IO */
 #define GEM_DMACFG		0x0010 /* DMA Configuration */
+#define GEM_JML			0x0048 /* Jumbo Max Length */
 #define GEM_HRB			0x0080 /* Hash Bottom */
 #define GEM_HRT			0x0084 /* Hash Top */
 #define GEM_SA1B		0x0088 /* Specific1 Bottom */
@@ -514,6 +515,9 @@ struct macb_dma_desc {
 #define MACB_RX_BROADCAST_OFFSET		31
 #define MACB_RX_BROADCAST_SIZE			1
 
+#define MACB_RX_FRMLEN_MASK			0xFFF
+#define MACB_RX_JFRMLEN_MASK			0x3FFF
+
 /* RX checksum offload disabled: bit 24 clear in NCFGR */
 #define GEM_RX_TYPEID_MATCH_OFFSET		22
 #define GEM_RX_TYPEID_MATCH_SIZE		2
@@ -826,6 +830,10 @@ struct macb {
 	unsigned int		max_tx_length;
 
 	u64			ethtool_stats[GEM_STATS_LEN];
+
+	unsigned int		rx_frm_len_mask;
+	unsigned int		jumbo_max_len;
+	bool			isjumbo;
 };
 
 static inline bool macb_is_gem(struct macb *bp)
-- 
1.7.9.5


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

* [net-next PATCH v2 3/3] net: macb: Add change_mtu callback with jumbo support
       [not found] <1430725960-8441-1-git-send-email-harinik@xilinx.com>
  2015-05-04  7:52 ` [net-next PATCH v2 2/3] net: macb: Add support for jumbo frames Harini Katakam
@ 2015-05-04  7:52 ` Harini Katakam
  1 sibling, 0 replies; 5+ messages in thread
From: Harini Katakam @ 2015-05-04  7:52 UTC (permalink / raw)
  To: nicolas.ferre, davem, robh+dt, pawel.moll, mark.rutland,
	ijc+devicetree, galak, boris.brezillon, alexandre.belloni,
	harinikatakamlinux
  Cc: netdev, linux-kernel, devicetree, harinik, punnaia, michals

Add macb_change_mtu callback; if jumbo frame support is present allow
mtu size changes upto (jumbo max length allowed - headers).

Signed-off-by: Harini Katakam <harinik@xilinx.com>
Reviewed-by: Punnaiah Choudary Kalluri <punnaia@xilinx.com>
---

v2:
Move constant definition.

---
 drivers/net/ethernet/cadence/macb.c |   24 +++++++++++++++++++++++-
 1 file changed, 23 insertions(+), 1 deletion(-)

diff --git a/drivers/net/ethernet/cadence/macb.c b/drivers/net/ethernet/cadence/macb.c
index a065283..e4a9c17 100644
--- a/drivers/net/ethernet/cadence/macb.c
+++ b/drivers/net/ethernet/cadence/macb.c
@@ -54,6 +54,8 @@
 #define MACB_MAX_TX_LEN		((unsigned int)((1 << MACB_TX_FRMLEN_SIZE) - 1))
 #define GEM_MAX_TX_LEN		((unsigned int)((1 << GEM_TX_FRMLEN_SIZE) - 1))
 
+#define GEM_MTU_MIN_SIZE	68
+
 #define GEM_ZYNQMP_JUMBO_MAX	10240
 
 /*
@@ -1857,6 +1859,26 @@ static int macb_close(struct net_device *dev)
 	return 0;
 }
 
+static int macb_change_mtu(struct net_device *dev, int new_mtu)
+{
+	struct macb *bp = netdev_priv(dev);
+	u32 max_mtu;
+
+	if (netif_running(dev))
+		return -EBUSY;
+
+	max_mtu = ETH_DATA_LEN;
+	if (bp->isjumbo)
+		max_mtu = gem_readl(bp, JML) - ETH_HLEN - ETH_FCS_LEN;
+
+	if ((new_mtu > max_mtu) || (new_mtu < GEM_MTU_MIN_SIZE))
+		return -EINVAL;
+
+	dev->mtu = new_mtu;
+
+	return 0;
+}
+
 static void gem_update_stats(struct macb *bp)
 {
 	int i;
@@ -2133,7 +2155,7 @@ static const struct net_device_ops macb_netdev_ops = {
 	.ndo_get_stats		= macb_get_stats,
 	.ndo_do_ioctl		= macb_ioctl,
 	.ndo_validate_addr	= eth_validate_addr,
-	.ndo_change_mtu		= eth_change_mtu,
+	.ndo_change_mtu		= macb_change_mtu,
 	.ndo_set_mac_address	= eth_mac_addr,
 #ifdef CONFIG_NET_POLL_CONTROLLER
 	.ndo_poll_controller	= macb_poll_controller,
-- 
1.7.9.5


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

* Re: [net-next PATCH v2 2/3] net: macb: Add support for jumbo frames
  2015-05-04  7:52 ` [net-next PATCH v2 2/3] net: macb: Add support for jumbo frames Harini Katakam
@ 2015-05-04  8:48   ` Nicolas Ferre
  2015-05-04 19:02   ` Jaeden Amero
  1 sibling, 0 replies; 5+ messages in thread
From: Nicolas Ferre @ 2015-05-04  8:48 UTC (permalink / raw)
  To: Harini Katakam, davem, robh+dt, pawel.moll, mark.rutland,
	ijc+devicetree, galak, boris.brezillon, alexandre.belloni,
	harinikatakamlinux
  Cc: netdev, linux-kernel, devicetree, harinik, punnaia, michals

Le 04/05/2015 09:52, Harini Katakam a écrit :
> Check for "cdns,zynqmp-gem" compatible string and enable jumbo frame support
> in NWCFG register, update descriptor length masks and registers accordingly.
> Jumbo max length register should be set according to support in SoC; it is
> set to 10240 for Zynq Ultrascale+ MPSoC.
> 
> Signed-off-by: Harini Katakam <harinik@xilinx.com>
> Reviewed-by: Punnaiah Choudary Kalluri <punnaia@xilinx.com>
> ---
> 
> On v1, Michal commented that I should use macb_config for jumbo parameters
> instead of defining them by reading the compatible string directly.
> I can use .caps for isjumbo. But jumbo-max-length needs to be defined.
> Can I add this to the structure? Any suggestions on how to handle this?

Yes, adding it to the "caps" field and adding a field for the max length
is definitively the way to go.

So "NAK" for this implementation.

Thanks, bye.

> v2:
> Add constant definition and update SoC name
> 
> ---
>  drivers/net/ethernet/cadence/macb.c |   21 ++++++++++++++++++---
>  drivers/net/ethernet/cadence/macb.h |    8 ++++++++
>  2 files changed, 26 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/net/ethernet/cadence/macb.c b/drivers/net/ethernet/cadence/macb.c
> index 4104d49..a065283 100644
> --- a/drivers/net/ethernet/cadence/macb.c
> +++ b/drivers/net/ethernet/cadence/macb.c
> @@ -54,6 +54,8 @@
>  #define MACB_MAX_TX_LEN		((unsigned int)((1 << MACB_TX_FRMLEN_SIZE) - 1))
>  #define GEM_MAX_TX_LEN		((unsigned int)((1 << GEM_TX_FRMLEN_SIZE) - 1))
>  
> +#define GEM_ZYNQMP_JUMBO_MAX	10240
> +
>  /*
>   * Graceful stop timeouts in us. We should allow up to
>   * 1 frame time (10 Mbits/s, full-duplex, ignoring collisions)
> @@ -782,7 +784,7 @@ static int gem_rx(struct macb *bp, int budget)
>  		}
>  		/* now everything is ready for receiving packet */
>  		bp->rx_skbuff[entry] = NULL;
> -		len = MACB_BFEXT(RX_FRMLEN, ctrl);
> +		len = ctrl & bp->rx_frm_len_mask;
>  
>  		netdev_vdbg(bp->dev, "gem_rx %u (len %u)\n", entry, len);
>  
> @@ -828,7 +830,7 @@ static int macb_rx_frame(struct macb *bp, unsigned int first_frag,
>  	struct macb_dma_desc *desc;
>  
>  	desc = macb_rx_desc(bp, last_frag);
> -	len = MACB_BFEXT(RX_FRMLEN, desc->ctrl);
> +	len = desc->ctrl & bp->rx_frm_len_mask;
>  
>  	netdev_vdbg(bp->dev, "macb_rx_frame frags %u - %u (len %u)\n",
>  		macb_rx_ring_wrap(first_frag),
> @@ -1633,7 +1635,10 @@ static void macb_init_hw(struct macb *bp)
>  	config |= MACB_BF(RBOF, NET_IP_ALIGN);	/* Make eth data aligned */
>  	config |= MACB_BIT(PAE);		/* PAuse Enable */
>  	config |= MACB_BIT(DRFCS);		/* Discard Rx FCS */
> -	config |= MACB_BIT(BIG);		/* Receive oversized frames */
> +	if (bp->isjumbo)
> +		config |= MACB_BIT(JFRAME);	/* Enable jumbo frames */
> +	else
> +		config |= MACB_BIT(BIG);	/* Receive oversized frames */
>  	if (bp->dev->flags & IFF_PROMISC)
>  		config |= MACB_BIT(CAF);	/* Copy All Frames */
>  	else if (macb_is_gem(bp) && bp->dev->features & NETIF_F_RXCSUM)
> @@ -1642,8 +1647,13 @@ static void macb_init_hw(struct macb *bp)
>  		config |= MACB_BIT(NBC);	/* No BroadCast */
>  	config |= macb_dbw(bp);
>  	macb_writel(bp, NCFGR, config);
> +	if (bp->isjumbo && bp->jumbo_max_len)
> +		gem_writel(bp, JML, bp->jumbo_max_len);
>  	bp->speed = SPEED_10;
>  	bp->duplex = DUPLEX_HALF;
> +	bp->rx_frm_len_mask = MACB_RX_FRMLEN_MASK;
> +	if (bp->isjumbo)
> +		bp->rx_frm_len_mask = MACB_RX_JFRMLEN_MASK;
>  
>  	macb_configure_dma(bp);
>  
> @@ -2762,6 +2772,11 @@ static int macb_probe(struct platform_device *pdev)
>  	bp->pclk = pclk;
>  	bp->hclk = hclk;
>  	bp->tx_clk = tx_clk;
> +	if (of_device_is_compatible(pdev->dev.of_node, "cdns,zynqmp-gem")) {
> +		bp->isjumbo = 1;
> +		bp->jumbo_max_len = GEM_ZYNQMP_JUMBO_MAX;
> +	}
> +
>  	spin_lock_init(&bp->lock);
>  
>  	/* setup capabilities */
> diff --git a/drivers/net/ethernet/cadence/macb.h b/drivers/net/ethernet/cadence/macb.h
> index eb7d76f..e25f77e 100644
> --- a/drivers/net/ethernet/cadence/macb.h
> +++ b/drivers/net/ethernet/cadence/macb.h
> @@ -71,6 +71,7 @@
>  #define GEM_NCFGR		0x0004 /* Network Config */
>  #define GEM_USRIO		0x000c /* User IO */
>  #define GEM_DMACFG		0x0010 /* DMA Configuration */
> +#define GEM_JML			0x0048 /* Jumbo Max Length */
>  #define GEM_HRB			0x0080 /* Hash Bottom */
>  #define GEM_HRT			0x0084 /* Hash Top */
>  #define GEM_SA1B		0x0088 /* Specific1 Bottom */
> @@ -514,6 +515,9 @@ struct macb_dma_desc {
>  #define MACB_RX_BROADCAST_OFFSET		31
>  #define MACB_RX_BROADCAST_SIZE			1
>  
> +#define MACB_RX_FRMLEN_MASK			0xFFF
> +#define MACB_RX_JFRMLEN_MASK			0x3FFF
> +
>  /* RX checksum offload disabled: bit 24 clear in NCFGR */
>  #define GEM_RX_TYPEID_MATCH_OFFSET		22
>  #define GEM_RX_TYPEID_MATCH_SIZE		2
> @@ -826,6 +830,10 @@ struct macb {
>  	unsigned int		max_tx_length;
>  
>  	u64			ethtool_stats[GEM_STATS_LEN];
> +
> +	unsigned int		rx_frm_len_mask;
> +	unsigned int		jumbo_max_len;
> +	bool			isjumbo;
>  };
>  
>  static inline bool macb_is_gem(struct macb *bp)
> 


-- 
Nicolas Ferre

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

* Re: [net-next PATCH v2 2/3] net: macb: Add support for jumbo frames
  2015-05-04  7:52 ` [net-next PATCH v2 2/3] net: macb: Add support for jumbo frames Harini Katakam
  2015-05-04  8:48   ` Nicolas Ferre
@ 2015-05-04 19:02   ` Jaeden Amero
  2015-05-05  4:21     ` Harini Katakam
  1 sibling, 1 reply; 5+ messages in thread
From: Jaeden Amero @ 2015-05-04 19:02 UTC (permalink / raw)
  To: Harini Katakam, nicolas.ferre, davem, robh+dt, pawel.moll,
	mark.rutland, ijc+devicetree, galak, boris.brezillon,
	alexandre.belloni, harinikatakamlinux
  Cc: netdev, linux-kernel, devicetree, harinik, punnaia, michals

On 05/04/2015 02:52 AM, Harini Katakam wrote:
> Check for "cdns,zynqmp-gem" compatible string and enable jumbo frame support
> in NWCFG register, update descriptor length masks and registers accordingly.
> Jumbo max length register should be set according to support in SoC; it is
> set to 10240 for Zynq Ultrascale+ MPSoC.
> 
> Signed-off-by: Harini Katakam <harinik@xilinx.com>
> Reviewed-by: Punnaiah Choudary Kalluri <punnaia@xilinx.com>
> ---
> 
> On v1, Michal commented that I should use macb_config for jumbo parameters
> instead of defining them by reading the compatible string directly.
> I can use .caps for isjumbo. But jumbo-max-length needs to be defined.
> Can I add this to the structure? Any suggestions on how to handle this?
> 
> v2:
> Add constant definition and update SoC name
> 
> ---
>  drivers/net/ethernet/cadence/macb.c |   21 ++++++++++++++++++---
>  drivers/net/ethernet/cadence/macb.h |    8 ++++++++
>  2 files changed, 26 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/net/ethernet/cadence/macb.c b/drivers/net/ethernet/cadence/macb.c
> index 4104d49..a065283 100644
> --- a/drivers/net/ethernet/cadence/macb.c
> +++ b/drivers/net/ethernet/cadence/macb.c
> @@ -54,6 +54,8 @@
>  #define MACB_MAX_TX_LEN		((unsigned int)((1 << MACB_TX_FRMLEN_SIZE) - 1))
>  #define GEM_MAX_TX_LEN		((unsigned int)((1 << GEM_TX_FRMLEN_SIZE) - 1))
>  
> +#define GEM_ZYNQMP_JUMBO_MAX	10240
> +
>  /*
>   * Graceful stop timeouts in us. We should allow up to
>   * 1 frame time (10 Mbits/s, full-duplex, ignoring collisions)
> @@ -782,7 +784,7 @@ static int gem_rx(struct macb *bp, int budget)
>  		}
>  		/* now everything is ready for receiving packet */
>  		bp->rx_skbuff[entry] = NULL;
> -		len = MACB_BFEXT(RX_FRMLEN, ctrl);
> +		len = ctrl & bp->rx_frm_len_mask;
>  
>  		netdev_vdbg(bp->dev, "gem_rx %u (len %u)\n", entry, len);
>  
> @@ -828,7 +830,7 @@ static int macb_rx_frame(struct macb *bp, unsigned int first_frag,
>  	struct macb_dma_desc *desc;
>  
>  	desc = macb_rx_desc(bp, last_frag);
> -	len = MACB_BFEXT(RX_FRMLEN, desc->ctrl);
> +	len = desc->ctrl & bp->rx_frm_len_mask;
>  
>  	netdev_vdbg(bp->dev, "macb_rx_frame frags %u - %u (len %u)\n",
>  		macb_rx_ring_wrap(first_frag),
> @@ -1633,7 +1635,10 @@ static void macb_init_hw(struct macb *bp)
>  	config |= MACB_BF(RBOF, NET_IP_ALIGN);	/* Make eth data aligned */
>  	config |= MACB_BIT(PAE);		/* PAuse Enable */
>  	config |= MACB_BIT(DRFCS);		/* Discard Rx FCS */
> -	config |= MACB_BIT(BIG);		/* Receive oversized frames */
> +	if (bp->isjumbo)
> +		config |= MACB_BIT(JFRAME);	/* Enable jumbo frames */
> +	else
> +		config |= MACB_BIT(BIG);	/* Receive oversized frames */
>  	if (bp->dev->flags & IFF_PROMISC)
>  		config |= MACB_BIT(CAF);	/* Copy All Frames */
>  	else if (macb_is_gem(bp) && bp->dev->features & NETIF_F_RXCSUM)
> @@ -1642,8 +1647,13 @@ static void macb_init_hw(struct macb *bp)
>  		config |= MACB_BIT(NBC);	/* No BroadCast */
>  	config |= macb_dbw(bp);
>  	macb_writel(bp, NCFGR, config);
> +	if (bp->isjumbo && bp->jumbo_max_len)
> +		gem_writel(bp, JML, bp->jumbo_max_len);
>  	bp->speed = SPEED_10;
>  	bp->duplex = DUPLEX_HALF;
> +	bp->rx_frm_len_mask = MACB_RX_FRMLEN_MASK;
> +	if (bp->isjumbo)
> +		bp->rx_frm_len_mask = MACB_RX_JFRMLEN_MASK;
>  
>  	macb_configure_dma(bp);
>  
> @@ -2762,6 +2772,11 @@ static int macb_probe(struct platform_device *pdev)
>  	bp->pclk = pclk;
>  	bp->hclk = hclk;
>  	bp->tx_clk = tx_clk;
> +	if (of_device_is_compatible(pdev->dev.of_node, "cdns,zynqmp-gem")) {
> +		bp->isjumbo = 1;
> +		bp->jumbo_max_len = GEM_ZYNQMP_JUMBO_MAX;

Could you use the bottom 16 bits of DCFG2 instead of GEM_ZYNQMP_JUMBO_MAX?

> +	}
> +
>  	spin_lock_init(&bp->lock);
>  
>  	/* setup capabilities */
> diff --git a/drivers/net/ethernet/cadence/macb.h b/drivers/net/ethernet/cadence/macb.h
> index eb7d76f..e25f77e 100644
> --- a/drivers/net/ethernet/cadence/macb.h
> +++ b/drivers/net/ethernet/cadence/macb.h
> @@ -71,6 +71,7 @@
>  #define GEM_NCFGR		0x0004 /* Network Config */
>  #define GEM_USRIO		0x000c /* User IO */
>  #define GEM_DMACFG		0x0010 /* DMA Configuration */
> +#define GEM_JML			0x0048 /* Jumbo Max Length */
>  #define GEM_HRB			0x0080 /* Hash Bottom */
>  #define GEM_HRT			0x0084 /* Hash Top */
>  #define GEM_SA1B		0x0088 /* Specific1 Bottom */
> @@ -514,6 +515,9 @@ struct macb_dma_desc {
>  #define MACB_RX_BROADCAST_OFFSET		31
>  #define MACB_RX_BROADCAST_SIZE			1
>  
> +#define MACB_RX_FRMLEN_MASK			0xFFF
> +#define MACB_RX_JFRMLEN_MASK			0x3FFF
> +
>  /* RX checksum offload disabled: bit 24 clear in NCFGR */
>  #define GEM_RX_TYPEID_MATCH_OFFSET		22
>  #define GEM_RX_TYPEID_MATCH_SIZE		2
> @@ -826,6 +830,10 @@ struct macb {
>  	unsigned int		max_tx_length;
>  
>  	u64			ethtool_stats[GEM_STATS_LEN];
> +
> +	unsigned int		rx_frm_len_mask;
> +	unsigned int		jumbo_max_len;
> +	bool			isjumbo;
>  };
>  
>  static inline bool macb_is_gem(struct macb *bp)
> 

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

* Re: [net-next PATCH v2 2/3] net: macb: Add support for jumbo frames
  2015-05-04 19:02   ` Jaeden Amero
@ 2015-05-05  4:21     ` Harini Katakam
  0 siblings, 0 replies; 5+ messages in thread
From: Harini Katakam @ 2015-05-05  4:21 UTC (permalink / raw)
  To: Jaeden Amero
  Cc: Harini Katakam, nicolas.ferre, davem, Rob Herring, Pawel Moll,
	Mark Rutland, ijc+devicetree, Kumar Gala, boris.brezillon,
	alexandre.belloni, netdev, linux-kernel, devicetree,
	Punnaiah Choudary Kalluri, michals

Hi,

On Tue, May 5, 2015 at 12:32 AM, Jaeden Amero <jaeden.amero@ni.com> wrote:
> On 05/04/2015 02:52 AM, Harini Katakam wrote:
>> Check for "cdns,zynqmp-gem" compatible string and enable jumbo frame support
>> in NWCFG register, update descriptor length masks and registers accordingly.
>> Jumbo max length register should be set according to support in SoC; it is
>> set to 10240 for Zynq Ultrascale+ MPSoC.
>>
>> Signed-off-by: Harini Katakam <harinik@xilinx.com>
>> Reviewed-by: Punnaiah Choudary Kalluri <punnaia@xilinx.com>
>> ---
>>
>> On v1, Michal commented that I should use macb_config for jumbo parameters
>> instead of defining them by reading the compatible string directly.
>> I can use .caps for isjumbo. But jumbo-max-length needs to be defined.
>> Can I add this to the structure? Any suggestions on how to handle this?
>>
>> v2:
>> Add constant definition and update SoC name
>>
>> ---
>>  drivers/net/ethernet/cadence/macb.c |   21 ++++++++++++++++++---
>>  drivers/net/ethernet/cadence/macb.h |    8 ++++++++
>>  2 files changed, 26 insertions(+), 3 deletions(-)
>>
>> diff --git a/drivers/net/ethernet/cadence/macb.c b/drivers/net/ethernet/cadence/macb.c
<snip>
>> @@ -2762,6 +2772,11 @@ static int macb_probe(struct platform_device *pdev)
>>       bp->pclk = pclk;
>>       bp->hclk = hclk;
>>       bp->tx_clk = tx_clk;
>> +     if (of_device_is_compatible(pdev->dev.of_node, "cdns,zynqmp-gem")) {
>> +             bp->isjumbo = 1;
>> +             bp->jumbo_max_len = GEM_ZYNQMP_JUMBO_MAX;
>
> Could you use the bottom 16 bits of DCFG2 instead of GEM_ZYNQMP_JUMBO_MAX?

The bottom 16 bits are 0x3FFF but the ZynqMP SoC actually supports
only upto 10K (0x2800).

Regards,
Harini

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

end of thread, other threads:[~2015-05-05  4:21 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
     [not found] <1430725960-8441-1-git-send-email-harinik@xilinx.com>
2015-05-04  7:52 ` [net-next PATCH v2 2/3] net: macb: Add support for jumbo frames Harini Katakam
2015-05-04  8:48   ` Nicolas Ferre
2015-05-04 19:02   ` Jaeden Amero
2015-05-05  4:21     ` Harini Katakam
2015-05-04  7:52 ` [net-next PATCH v2 3/3] net: macb: Add change_mtu callback with jumbo support Harini Katakam

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).