lkml.org 
[lkml]   [2021]   [May]   [12]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.10 480/530] net: stmmac: fix TSO and TBS feature enabling during driver open
    Date
    From: Ong Boon Leong <boon.leong.ong@intel.com>

    [ Upstream commit 5e6038b88a5718910dd74b949946d9d9cee9a041 ]

    TSO and TBS cannot co-exist and current implementation requires two
    fixes:

    1) stmmac_open() does not need to call stmmac_enable_tbs() because
    the MAC is reset in stmmac_init_dma_engine() anyway.
    2) Inside stmmac_hw_setup(), we should call stmmac_enable_tso() for
    TX Q that is _not_ configured for TBS.

    Fixes: 579a25a854d4 ("net: stmmac: Initial support for TBS")
    Signed-off-by: Ong Boon Leong <boon.leong.ong@intel.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | 12 +++++++++---
    1 file changed, 9 insertions(+), 3 deletions(-)

    diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
    index 6012eadae460..5b9478dffe10 100644
    --- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
    +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
    @@ -2727,8 +2727,15 @@ static int stmmac_hw_setup(struct net_device *dev, bool init_ptp)

    /* Enable TSO */
    if (priv->tso) {
    - for (chan = 0; chan < tx_cnt; chan++)
    + for (chan = 0; chan < tx_cnt; chan++) {
    + struct stmmac_tx_queue *tx_q = &priv->tx_queue[chan];
    +
    + /* TSO and TBS cannot co-exist */
    + if (tx_q->tbs & STMMAC_TBS_AVAIL)
    + continue;
    +
    stmmac_enable_tso(priv, priv->ioaddr, 1, chan);
    + }
    }

    /* Enable Split Header */
    @@ -2820,9 +2827,8 @@ static int stmmac_open(struct net_device *dev)
    struct stmmac_tx_queue *tx_q = &priv->tx_queue[chan];
    int tbs_en = priv->plat->tx_queues_cfg[chan].tbs_en;

    + /* Setup per-TXQ tbs flag before TX descriptor alloc */
    tx_q->tbs |= tbs_en ? STMMAC_TBS_AVAIL : 0;
    - if (stmmac_enable_tbs(priv, priv->ioaddr, tbs_en, chan))
    - tx_q->tbs &= ~STMMAC_TBS_AVAIL;
    }

    ret = alloc_dma_desc_resources(priv);
    --
    2.30.2


    \
     
     \ /
      Last update: 2021-05-12 19:01    [W:4.030 / U:0.120 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site