Commit e735fd55 authored by Marcin Wojtas's avatar Marcin Wojtas Committed by David S. Miller

net: mvneta: fix operation for 64K PAGE_SIZE

Recent changes in the mvneta driver reworked allocation
and handling of the ingress buffers to use entire pages.
Apart from that in SW BM scenario the HW must be informed
via PRXDQS about the biggest possible incoming buffer
that can be propagated by RX descriptors.

The BufferSize field was filled according to the MTU-dependent
pkt_size value. Later change to PAGE_SIZE broke RX operation
when usin 64K pages, as the field is simply too small.

This patch conditionally limits the value passed to the BufferSize
of the PRXDQS register, depending on the PAGE_SIZE used.
On the occasion remove now unused frag_size field of the mvneta_port
structure.

Fixes: 562e2f46 ("net: mvneta: Improve the buffer allocation method for SWBM")
Signed-off-by: default avatarMarcin Wojtas <mw@semihalf.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 369a094d
...@@ -408,7 +408,6 @@ struct mvneta_port { ...@@ -408,7 +408,6 @@ struct mvneta_port {
struct mvneta_pcpu_stats __percpu *stats; struct mvneta_pcpu_stats __percpu *stats;
int pkt_size; int pkt_size;
unsigned int frag_size;
void __iomem *base; void __iomem *base;
struct mvneta_rx_queue *rxqs; struct mvneta_rx_queue *rxqs;
struct mvneta_tx_queue *txqs; struct mvneta_tx_queue *txqs;
...@@ -2905,7 +2904,9 @@ static void mvneta_rxq_hw_init(struct mvneta_port *pp, ...@@ -2905,7 +2904,9 @@ static void mvneta_rxq_hw_init(struct mvneta_port *pp,
if (!pp->bm_priv) { if (!pp->bm_priv) {
/* Set Offset */ /* Set Offset */
mvneta_rxq_offset_set(pp, rxq, 0); mvneta_rxq_offset_set(pp, rxq, 0);
mvneta_rxq_buf_size_set(pp, rxq, pp->frag_size); mvneta_rxq_buf_size_set(pp, rxq, PAGE_SIZE < SZ_64K ?
PAGE_SIZE :
MVNETA_RX_BUF_SIZE(pp->pkt_size));
mvneta_rxq_bm_disable(pp, rxq); mvneta_rxq_bm_disable(pp, rxq);
mvneta_rxq_fill(pp, rxq, rxq->size); mvneta_rxq_fill(pp, rxq, rxq->size);
} else { } else {
...@@ -3760,7 +3761,6 @@ static int mvneta_open(struct net_device *dev) ...@@ -3760,7 +3761,6 @@ static int mvneta_open(struct net_device *dev)
int ret; int ret;
pp->pkt_size = MVNETA_RX_PKT_SIZE(pp->dev->mtu); pp->pkt_size = MVNETA_RX_PKT_SIZE(pp->dev->mtu);
pp->frag_size = PAGE_SIZE;
ret = mvneta_setup_rxqs(pp); ret = mvneta_setup_rxqs(pp);
if (ret) if (ret)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment