* [net-next PATCH 2/3] net: macb: Add support for jumbo frames
[not found] <1428657441-27710-1-git-send-email-harinik@xilinx.com>
@ 2015-04-10 9:17 ` Harini Katakam
2015-04-10 9:17 ` Harini Katakam
` (2 subsequent siblings)
3 siblings, 0 replies; 9+ messages in thread
From: Harini Katakam @ 2015-04-10 9:17 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 ZynqMPSoC.
Signed-off-by: Harini Katakam <harinik@xilinx.com>
Reviewed-by: Punnaiah Choudary Kalluri <punnaia@xilinx.com>
---
drivers/net/ethernet/cadence/macb.c | 19 ++++++++++++++++---
drivers/net/ethernet/cadence/macb.h | 8 ++++++++
2 files changed, 24 insertions(+), 3 deletions(-)
diff --git a/drivers/net/ethernet/cadence/macb.c b/drivers/net/ethernet/cadence/macb.c
index 448a323..85de91d 100644
--- a/drivers/net/ethernet/cadence/macb.c
+++ b/drivers/net/ethernet/cadence/macb.c
@@ -779,7 +779,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);
@@ -825,7 +825,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),
@@ -1630,7 +1630,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)
@@ -1639,8 +1642,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);
@@ -2759,6 +2767,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] 9+ messages in thread
* [net-next PATCH 2/3] net: macb: Add support for jumbo frames
@ 2015-04-10 9:17 ` Harini Katakam
0 siblings, 0 replies; 9+ messages in thread
From: Harini Katakam @ 2015-04-10 9:17 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 ZynqMPSoC.
Signed-off-by: Harini Katakam <harinik@xilinx.com>
Reviewed-by: Punnaiah Choudary Kalluri <punnaia@xilinx.com>
---
drivers/net/ethernet/cadence/macb.c | 19 ++++++++++++++++---
drivers/net/ethernet/cadence/macb.h | 8 ++++++++
2 files changed, 24 insertions(+), 3 deletions(-)
diff --git a/drivers/net/ethernet/cadence/macb.c b/drivers/net/ethernet/cadence/macb.c
index 448a323..85de91d 100644
--- a/drivers/net/ethernet/cadence/macb.c
+++ b/drivers/net/ethernet/cadence/macb.c
@@ -779,7 +779,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);
@@ -825,7 +825,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),
@@ -1630,7 +1630,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)
@@ -1639,8 +1642,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);
@@ -2759,6 +2767,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] 9+ messages in thread
* [net-next PATCH 3/3] net: macb: Add change_mtu callback with jumbo support
[not found] <1428657441-27710-1-git-send-email-harinik@xilinx.com>
@ 2015-04-10 9:17 ` Harini Katakam
2015-04-10 9:17 ` Harini Katakam
` (2 subsequent siblings)
3 siblings, 0 replies; 9+ messages in thread
From: Harini Katakam @ 2015-04-10 9:17 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>
---
drivers/net/ethernet/cadence/macb.c | 26 +++++++++++++++++++++++++-
1 file changed, 25 insertions(+), 1 deletion(-)
diff --git a/drivers/net/ethernet/cadence/macb.c b/drivers/net/ethernet/cadence/macb.c
index 85de91d..33f3283 100644
--- a/drivers/net/ethernet/cadence/macb.c
+++ b/drivers/net/ethernet/cadence/macb.c
@@ -54,6 +54,10 @@
#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
+
/*
* Graceful stop timeouts in us. We should allow up to
* 1 frame time (10 Mbits/s, full-duplex, ignoring collisions)
@@ -1852,6 +1856,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;
@@ -2128,7 +2152,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] 9+ messages in thread
* [net-next PATCH 3/3] net: macb: Add change_mtu callback with jumbo support
@ 2015-04-10 9:17 ` Harini Katakam
0 siblings, 0 replies; 9+ messages in thread
From: Harini Katakam @ 2015-04-10 9:17 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>
---
drivers/net/ethernet/cadence/macb.c | 26 +++++++++++++++++++++++++-
1 file changed, 25 insertions(+), 1 deletion(-)
diff --git a/drivers/net/ethernet/cadence/macb.c b/drivers/net/ethernet/cadence/macb.c
index 85de91d..33f3283 100644
--- a/drivers/net/ethernet/cadence/macb.c
+++ b/drivers/net/ethernet/cadence/macb.c
@@ -54,6 +54,10 @@
#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
+
/*
* Graceful stop timeouts in us. We should allow up to
* 1 frame time (10 Mbits/s, full-duplex, ignoring collisions)
@@ -1852,6 +1856,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;
@@ -2128,7 +2152,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] 9+ messages in thread
* Re: [net-next PATCH 3/3] net: macb: Add change_mtu callback with jumbo support
2015-04-10 9:17 ` Harini Katakam
(?)
@ 2015-04-10 9:35 ` Harini Katakam
-1 siblings, 0 replies; 9+ messages in thread
From: Harini Katakam @ 2015-04-10 9:35 UTC (permalink / raw)
To: Harini Katakam
Cc: 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
On Fri, Apr 10, 2015 at 2:47 PM, Harini Katakam
<harini.katakam@xilinx.com> wrote:
> 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>
> ---
> drivers/net/ethernet/cadence/macb.c | 26 +++++++++++++++++++++++++-
> 1 file changed, 25 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/net/ethernet/cadence/macb.c b/drivers/net/ethernet/cadence/macb.c
> index 85de91d..33f3283 100644
> --- a/drivers/net/ethernet/cadence/macb.c
> +++ b/drivers/net/ethernet/cadence/macb.c
> @@ -54,6 +54,10 @@
> #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
I'm sorry - this definition is in the wrong patch. I'll correct it and
send a v2.
Regards,
Harini
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [net-next PATCH 1/3] devicetree: Add compatible string for Zynq Ultrascale MPSoC
[not found] <1428657441-27710-1-git-send-email-harinik@xilinx.com>
@ 2015-04-10 9:41 ` Michal Simek
2015-04-10 9:17 ` Harini Katakam
` (2 subsequent siblings)
3 siblings, 0 replies; 9+ messages in thread
From: Michal Simek @ 2015-04-10 9:41 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
On 04/10/2015 11:17 AM, Harini Katakam wrote:
> Add "cdns,zynqmp-gem" to be used for Zynq Ultrascal MPSoc.
type here. And look below.
>
> Signed-off-by: Harini Katakam <harinik@xilinx.com>
> Reviewed-by: Punnaiah Choudary Kalluri <punnaia@xilinx.com>
> ---
> Documentation/devicetree/bindings/net/macb.txt | 1 +
> 1 file changed, 1 insertion(+)
>
> diff --git a/Documentation/devicetree/bindings/net/macb.txt b/Documentation/devicetree/bindings/net/macb.txt
> index ba19d67..a112add 100644
> --- a/Documentation/devicetree/bindings/net/macb.txt
> +++ b/Documentation/devicetree/bindings/net/macb.txt
> @@ -9,6 +9,7 @@ Required properties:
> the Cadence GEM, or the generic form: "cdns,gem".
> Use "cdns,sama5d3-gem" for the Gigabit IP available on Atmel sama5d3 SoCs.
> Use "cdns,sama5d4-gem" for the Gigabit IP available on Atmel sama5d4 SoCs.
> + Use "cdns,zynqmp-gem" for Zynq Ultrascale MPSoC.
Please use official name
Zynq UltraScale+ MPSoC
Thanks,
Michal
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [net-next PATCH 1/3] devicetree: Add compatible string for Zynq Ultrascale MPSoC
@ 2015-04-10 9:41 ` Michal Simek
0 siblings, 0 replies; 9+ messages in thread
From: Michal Simek @ 2015-04-10 9:41 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
On 04/10/2015 11:17 AM, Harini Katakam wrote:
> Add "cdns,zynqmp-gem" to be used for Zynq Ultrascal MPSoc.
type here. And look below.
>
> Signed-off-by: Harini Katakam <harinik@xilinx.com>
> Reviewed-by: Punnaiah Choudary Kalluri <punnaia@xilinx.com>
> ---
> Documentation/devicetree/bindings/net/macb.txt | 1 +
> 1 file changed, 1 insertion(+)
>
> diff --git a/Documentation/devicetree/bindings/net/macb.txt b/Documentation/devicetree/bindings/net/macb.txt
> index ba19d67..a112add 100644
> --- a/Documentation/devicetree/bindings/net/macb.txt
> +++ b/Documentation/devicetree/bindings/net/macb.txt
> @@ -9,6 +9,7 @@ Required properties:
> the Cadence GEM, or the generic form: "cdns,gem".
> Use "cdns,sama5d3-gem" for the Gigabit IP available on Atmel sama5d3 SoCs.
> Use "cdns,sama5d4-gem" for the Gigabit IP available on Atmel sama5d4 SoCs.
> + Use "cdns,zynqmp-gem" for Zynq Ultrascale MPSoC.
Please use official name
Zynq UltraScale+ MPSoC
Thanks,
Michal
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [net-next PATCH 2/3] net: macb: Add support for jumbo frames
[not found] ` <1428657441-27710-2-git-send-email-harinik@xilinx.com>
@ 2015-04-10 9:50 ` Michal Simek
0 siblings, 0 replies; 9+ messages in thread
From: Michal Simek @ 2015-04-10 9:50 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
On 04/10/2015 11:17 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 ZynqMPSoC.
>
> Signed-off-by: Harini Katakam <harinik@xilinx.com>
> Reviewed-by: Punnaiah Choudary Kalluri <punnaia@xilinx.com>
> ---
> drivers/net/ethernet/cadence/macb.c | 19 ++++++++++++++++---
> drivers/net/ethernet/cadence/macb.h | 8 ++++++++
> 2 files changed, 24 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/net/ethernet/cadence/macb.c b/drivers/net/ethernet/cadence/macb.c
> index 448a323..85de91d 100644
> --- a/drivers/net/ethernet/cadence/macb.c
> +++ b/drivers/net/ethernet/cadence/macb.c
> @@ -779,7 +779,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);
>
> @@ -825,7 +825,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),
> @@ -1630,7 +1630,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)
> @@ -1639,8 +1642,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);
>
> @@ -2759,6 +2767,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;
> + }
Not like this.
Nicolas will look at the rest but I think you should extend "struct
macb_config" and add that setup there instead of checking compatible
string here.
Maybe isjumbo can be hadled via caps bit already present in this
structure but please wait for others.
Thanks,
Michal
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [net-next PATCH 2/3] net: macb: Add support for jumbo frames
@ 2015-04-10 9:50 ` Michal Simek
0 siblings, 0 replies; 9+ messages in thread
From: Michal Simek @ 2015-04-10 9:50 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
On 04/10/2015 11:17 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 ZynqMPSoC.
>
> Signed-off-by: Harini Katakam <harinik@xilinx.com>
> Reviewed-by: Punnaiah Choudary Kalluri <punnaia@xilinx.com>
> ---
> drivers/net/ethernet/cadence/macb.c | 19 ++++++++++++++++---
> drivers/net/ethernet/cadence/macb.h | 8 ++++++++
> 2 files changed, 24 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/net/ethernet/cadence/macb.c b/drivers/net/ethernet/cadence/macb.c
> index 448a323..85de91d 100644
> --- a/drivers/net/ethernet/cadence/macb.c
> +++ b/drivers/net/ethernet/cadence/macb.c
> @@ -779,7 +779,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);
>
> @@ -825,7 +825,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),
> @@ -1630,7 +1630,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)
> @@ -1639,8 +1642,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);
>
> @@ -2759,6 +2767,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;
> + }
Not like this.
Nicolas will look at the rest but I think you should extend "struct
macb_config" and add that setup there instead of checking compatible
string here.
Maybe isjumbo can be hadled via caps bit already present in this
structure but please wait for others.
Thanks,
Michal
^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2015-04-10 10:52 UTC | newest]
Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
[not found] <1428657441-27710-1-git-send-email-harinik@xilinx.com>
2015-04-10 9:17 ` [net-next PATCH 2/3] net: macb: Add support for jumbo frames Harini Katakam
2015-04-10 9:17 ` Harini Katakam
2015-04-10 9:17 ` [net-next PATCH 3/3] net: macb: Add change_mtu callback with jumbo support Harini Katakam
2015-04-10 9:17 ` Harini Katakam
2015-04-10 9:35 ` Harini Katakam
2015-04-10 9:41 ` [net-next PATCH 1/3] devicetree: Add compatible string for Zynq Ultrascale MPSoC Michal Simek
2015-04-10 9:41 ` Michal Simek
[not found] ` <1428657441-27710-2-git-send-email-harinik@xilinx.com>
2015-04-10 9:50 ` [net-next PATCH 2/3] net: macb: Add support for jumbo frames Michal Simek
2015-04-10 9:50 ` Michal Simek
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.