|
@@ -665,6 +665,7 @@ static void xgmac_rx_refill(struct xgmac_priv *priv)
|
|
|
{
|
|
|
struct xgmac_dma_desc *p;
|
|
|
dma_addr_t paddr;
|
|
|
+ int bufsz = priv->dev->mtu + ETH_HLEN + ETH_FCS_LEN;
|
|
|
|
|
|
while (dma_ring_space(priv->rx_head, priv->rx_tail, DMA_RX_RING_SZ) > 1) {
|
|
|
int entry = priv->rx_head;
|
|
@@ -673,13 +674,13 @@ static void xgmac_rx_refill(struct xgmac_priv *priv)
|
|
|
p = priv->dma_rx + entry;
|
|
|
|
|
|
if (priv->rx_skbuff[entry] == NULL) {
|
|
|
- skb = netdev_alloc_skb(priv->dev, priv->dma_buf_sz);
|
|
|
+ skb = netdev_alloc_skb_ip_align(priv->dev, bufsz);
|
|
|
if (unlikely(skb == NULL))
|
|
|
break;
|
|
|
|
|
|
priv->rx_skbuff[entry] = skb;
|
|
|
paddr = dma_map_single(priv->device, skb->data,
|
|
|
- priv->dma_buf_sz, DMA_FROM_DEVICE);
|
|
|
+ bufsz, DMA_FROM_DEVICE);
|
|
|
desc_set_buf_addr(p, paddr, priv->dma_buf_sz);
|
|
|
}
|
|
|
|
|
@@ -703,10 +704,10 @@ static int xgmac_dma_desc_rings_init(struct net_device *dev)
|
|
|
unsigned int bfsize;
|
|
|
|
|
|
/* Set the Buffer size according to the MTU;
|
|
|
- * indeed, in case of jumbo we need to bump-up the buffer sizes.
|
|
|
+ * The total buffer size including any IP offset must be a multiple
|
|
|
+ * of 8 bytes.
|
|
|
*/
|
|
|
- bfsize = ALIGN(dev->mtu + ETH_HLEN + ETH_FCS_LEN + NET_IP_ALIGN + 64,
|
|
|
- 64);
|
|
|
+ bfsize = ALIGN(dev->mtu + ETH_HLEN + ETH_FCS_LEN + NET_IP_ALIGN, 8);
|
|
|
|
|
|
netdev_dbg(priv->dev, "mtu [%d] bfsize [%d]\n", dev->mtu, bfsize);
|
|
|
|