From 2c677df5ef2a7e81d480d4c86825195d06aba4b2 Mon Sep 17 00:00:00 2001 From: David Wu Date: Wed, 22 Dec 2021 16:23:10 +0800 Subject: [PATCH] ethernet: stmmac: unmap dma buffer after receive data for RX Signed-off-by: David Wu Change-Id: Icde5634bfb7d8d71eef08b3ddc20739483cc6316 --- .../ethernet/stmicro/stmmac/dwmac-rk-tool.c | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac-rk-tool.c b/drivers/net/ethernet/stmicro/stmmac/dwmac-rk-tool.c index 8a4853a5d715..541788f9e2c8 100644 --- a/drivers/net/ethernet/stmicro/stmmac/dwmac-rk-tool.c +++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-rk-tool.c @@ -612,7 +612,12 @@ static int dwmac_rk_rx_validate(struct stmmac_priv *priv, } frame_len -= ETH_FCS_LEN; + prefetch(skb->data - NET_IP_ALIGN); skb_put(skb, frame_len); + dma_unmap_single(priv->device, + lb_priv->rx_skbuff_dma, + lb_priv->dma_buf_sz, + DMA_FROM_DEVICE); ret = dwmac_rk_loopback_validate(priv, lb_priv, skb); dwmac_rk_rx_clean(priv, lb_priv); @@ -1187,6 +1192,21 @@ static void dwmac_rk_mtl_configuration(struct stmmac_priv *priv) dwmac_rk_mac_enable_rx_queues(priv); } +static void dwmac_rk_mmc_setup(struct stmmac_priv *priv) +{ + unsigned int mode = MMC_CNTRL_RESET_ON_READ | MMC_CNTRL_COUNTER_RESET | + MMC_CNTRL_PRESET | MMC_CNTRL_FULL_HALF_PRESET; + + stmmac_mmc_intr_all_mask(priv, priv->mmcaddr); + + if (priv->dma_cap.rmon) { + stmmac_mmc_ctrl(priv, priv->mmcaddr, mode); + memset(&priv->mmc, 0, sizeof(struct stmmac_counters)); + } else { + netdev_info(priv->dev, "No MAC Management Counters available\n"); + } +} + static int dwmac_rk_init(struct net_device *dev, struct dwmac_rk_lb_priv *lb_priv) { @@ -1228,6 +1248,8 @@ static int dwmac_rk_init(struct net_device *dev, dwmac_rk_mtl_configuration(priv); + dwmac_rk_mmc_setup(priv); + ret = priv->hw->mac->rx_ipc(priv->hw); if (!ret) { pr_warn(" RX IPC Checksum Offload disabled\n");