lkml.org 
[lkml]   [2021]   [Oct]   [25]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.14 064/169] net: enetc: make sure all traffic classes can send large frames
    Date
    From: Vladimir Oltean <vladimir.oltean@nxp.com>

    [ Upstream commit e378f4967c8edd64c680f2e279cb646ee06b6f2d ]

    The enetc driver does not implement .ndo_change_mtu, instead it
    configures the MAC register field PTC{Traffic Class}MSDUR[MAXSDU]
    statically to a large value during probe time.

    The driver used to configure only the max SDU for traffic class 0, and
    that was fine while the driver could only use traffic class 0. But with
    the introduction of mqprio, sending a large frame into any other TC than
    0 is broken.

    This patch fixes that by replicating per traffic class the static
    configuration done in enetc_configure_port_mac().

    Fixes: cbe9e835946f ("enetc: Enable TC offloading with mqprio")
    Reported-by: Richie Pearn <richard.pearn@nxp.com>
    Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>
    Reviewed-by: <Claudiu Manoil <claudiu.manoil@nxp.com>
    Link: https://lore.kernel.org/r/20211020173340.1089992-1-vladimir.oltean@nxp.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/net/ethernet/freescale/enetc/enetc_pf.c | 5 ++++-
    1 file changed, 4 insertions(+), 1 deletion(-)

    diff --git a/drivers/net/ethernet/freescale/enetc/enetc_pf.c b/drivers/net/ethernet/freescale/enetc/enetc_pf.c
    index cf00709caea4..3ac324509f43 100644
    --- a/drivers/net/ethernet/freescale/enetc/enetc_pf.c
    +++ b/drivers/net/ethernet/freescale/enetc/enetc_pf.c
    @@ -517,10 +517,13 @@ static void enetc_port_si_configure(struct enetc_si *si)

    static void enetc_configure_port_mac(struct enetc_hw *hw)
    {
    + int tc;
    +
    enetc_port_wr(hw, ENETC_PM0_MAXFRM,
    ENETC_SET_MAXFRM(ENETC_RX_MAXFRM_SIZE));

    - enetc_port_wr(hw, ENETC_PTCMSDUR(0), ENETC_MAC_MAXFRM_SIZE);
    + for (tc = 0; tc < 8; tc++)
    + enetc_port_wr(hw, ENETC_PTCMSDUR(tc), ENETC_MAC_MAXFRM_SIZE);

    enetc_port_wr(hw, ENETC_PM0_CMD_CFG, ENETC_PM0_CMD_PHY_TX_EN |
    ENETC_PM0_CMD_TXP | ENETC_PM0_PROMISC);
    --
    2.33.0


    \
     
     \ /
      Last update: 2021-10-25 21:54    [W:8.641 / U:0.032 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site