return &rx_q->dma_rx[index];
}
+static void stmmac_set_queue_rx_tail_ptr(struct stmmac_priv *priv,
+ struct stmmac_rx_queue *rx_q,
+ unsigned int chan, unsigned int index)
+{
+ /* This only needs to deal with normal descriptors as enhanced
+ * descriptiors are only supported with dwmac1000 (<v4.0) which
+ * does not implement .set_rx_tail_ptr
+ */
+ rx_q->rx_tail_addr = rx_q->dma_rx_phy + index * sizeof(struct dma_desc);
+ stmmac_set_rx_tail_ptr(priv, priv->ioaddr, rx_q->rx_tail_addr, chan);
+}
+
/**
* stmmac_rx_dirty - Get RX queue dirty
* @priv: driver private structure
stmmac_init_rx_chan(priv, priv->ioaddr, priv->plat->dma_cfg,
rx_q->dma_rx_phy, chan);
- rx_q->rx_tail_addr = rx_q->dma_rx_phy +
- (rx_q->buf_alloc_num *
- sizeof(struct dma_desc));
- stmmac_set_rx_tail_ptr(priv, priv->ioaddr,
- rx_q->rx_tail_addr, chan);
+ stmmac_set_queue_rx_tail_ptr(priv, rx_q, chan,
+ rx_q->buf_alloc_num);
}
/* DMA TX Channel Configuration */
entry = STMMAC_GET_ENTRY(entry, priv->dma_conf.dma_rx_size);
}
rx_q->dirty_rx = entry;
- rx_q->rx_tail_addr = rx_q->dma_rx_phy +
- (rx_q->dirty_rx * sizeof(struct dma_desc));
- stmmac_set_rx_tail_ptr(priv, priv->ioaddr, rx_q->rx_tail_addr, queue);
+ stmmac_set_queue_rx_tail_ptr(priv, rx_q, queue, rx_q->dirty_rx);
/* Wake up Rx DMA from the suspend state if required */
stmmac_enable_dma_reception(priv, priv->ioaddr, queue);
}
if (rx_desc) {
rx_q->dirty_rx = entry;
- rx_q->rx_tail_addr = rx_q->dma_rx_phy +
- (rx_q->dirty_rx * sizeof(struct dma_desc));
- stmmac_set_rx_tail_ptr(priv, priv->ioaddr, rx_q->rx_tail_addr, queue);
+ stmmac_set_queue_rx_tail_ptr(priv, rx_q, queue, rx_q->dirty_rx);
}
return ret;
stmmac_init_rx_chan(priv, priv->ioaddr, priv->plat->dma_cfg,
rx_q->dma_rx_phy, rx_q->queue_index);
- rx_q->rx_tail_addr = rx_q->dma_rx_phy + (rx_q->buf_alloc_num *
- sizeof(struct dma_desc));
- stmmac_set_rx_tail_ptr(priv, priv->ioaddr,
- rx_q->rx_tail_addr, rx_q->queue_index);
+ stmmac_set_queue_rx_tail_ptr(priv, rx_q, rx_q->queue_index,
+ rx_q->buf_alloc_num);
if (rx_q->xsk_pool && rx_q->buf_alloc_num) {
buf_size = xsk_pool_get_rx_frame_size(rx_q->xsk_pool);
stmmac_init_rx_chan(priv, priv->ioaddr, priv->plat->dma_cfg,
rx_q->dma_rx_phy, chan);
- rx_q->rx_tail_addr = rx_q->dma_rx_phy +
- (rx_q->buf_alloc_num *
- sizeof(struct dma_desc));
- stmmac_set_rx_tail_ptr(priv, priv->ioaddr,
- rx_q->rx_tail_addr, chan);
+ stmmac_set_queue_rx_tail_ptr(priv, rx_q, chan,
+ rx_q->buf_alloc_num);
if (rx_q->xsk_pool && rx_q->buf_alloc_num) {
buf_size = xsk_pool_get_rx_frame_size(rx_q->xsk_pool);