[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20241017173101.oby36jwek7tninsx@skbuf>
Date: Thu, 17 Oct 2024 20:31:01 +0300
From: Vladimir Oltean <olteanv@...il.com>
To: Furong Xu <0x1207@...il.com>
Cc: netdev@...r.kernel.org, linux-stm32@...md-mailman.stormreply.com,
linux-arm-kernel@...ts.infradead.org, linux-kernel@...r.kernel.org,
Andrew Lunn <andrew@...n.ch>,
Alexandre Torgue <alexandre.torgue@...s.st.com>,
Jose Abreu <joabreu@...opsys.com>,
"David S. Miller" <davem@...emloft.net>,
Eric Dumazet <edumazet@...gle.com>,
Jakub Kicinski <kuba@...nel.org>, Paolo Abeni <pabeni@...hat.com>,
Maxime Coquelin <mcoquelin.stm32@...il.com>, xfr@...look.com
Subject: Re: [PATCH net-next v1 5/5] net: stmmac: xgmac: Complete FPE support
On Tue, Oct 15, 2024 at 05:09:26PM +0800, Furong Xu wrote:
> diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_fpe.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_fpe.c
> index 6060a1d702c6..80f12b6e84e6 100644
> --- a/drivers/net/ethernet/stmicro/stmmac/stmmac_fpe.c
> +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_fpe.c
> @@ -160,41 +160,54 @@ void stmmac_fpe_apply(struct stmmac_priv *priv)
> }
> }
>
> -static void dwmac5_fpe_configure(void __iomem *ioaddr,
> - struct stmmac_fpe_cfg *cfg,
> - u32 num_txq, u32 num_rxq,
> - bool tx_enable, bool pmac_enable)
> +static void common_fpe_configure(void __iomem *ioaddr,
> + struct stmmac_fpe_cfg *cfg, u32 rxq,
> + bool tx_enable, bool pmac_enable,
> + u32 rxq_addr, u32 fprq_mask, u32 fprq_shift,
> + u32 mac_fpe_addr, u32 int_en_addr,
> + u32 int_en_bit)
11 arguments to a function is a bit too much. Could you introduce a
structure with FPE constants per hardware IP, and just pass a pointer to
that?
> {
> u32 value;
>
> - writel(value, ioaddr + XGMAC_MAC_FPE_CTRL_STS);
> - return;
> + if (!num_tc) {
> + /* Restore default TC:Queue mapping */
> + for (u32 i = 0; i < priv->plat->tx_queues_to_use; i++) {
> + val = readl(priv->ioaddr + XGMAC_MTL_TXQ_OPMODE(i));
> + writel(u32_replace_bits(val, i, XGMAC_Q2TCMAP),
> + priv->ioaddr + XGMAC_MTL_TXQ_OPMODE(i));
> + }
> }
>
> - value = readl(ioaddr + XGMAC_RXQ_CTRL1);
> - value &= ~XGMAC_FPRQ;
> - value |= (num_rxq - 1) << XGMAC_FPRQ_SHIFT;
> - writel(value, ioaddr + XGMAC_RXQ_CTRL1);
> + /* Synopsys Databook:
> + * "All Queues within a traffic class are selected in a round robin
> + * fashion (when packets are available) when the traffic class is
> + * selected by the scheduler for packet transmission. This is true for
> + * any of the scheduling algorithms."
> + */
> + for (u32 tc = 0; tc < num_tc; tc++) {
> + count = ndev->tc_to_txq[tc].count;
> + offset = ndev->tc_to_txq[tc].offset;
> +
> + if (pclass & BIT(tc))
> + preemptible_txqs |= GENMASK(offset + count - 1, offset);
>
> - value = readl(ioaddr + XGMAC_MAC_FPE_CTRL_STS);
> - value |= STMMAC_MAC_FPE_CTRL_STS_EFPE;
> - writel(value, ioaddr + XGMAC_MAC_FPE_CTRL_STS);
> + for (u32 i = 0; i < count; i++) {
> + val = readl(priv->ioaddr + XGMAC_MTL_TXQ_OPMODE(offset + i));
> + writel(u32_replace_bits(val, tc, XGMAC_Q2TCMAP),
> + priv->ioaddr + XGMAC_MTL_TXQ_OPMODE(offset + i));
> + }
> + }
I agree with Simon that this patch is hard to review. The diff looks
like a jungle here, the portion with - has nothing to do with the
portion with +. Please try to do as suggested, first refactor existing
code into the common stuff, then call common stuff from new places.
Also try to keep an eye on how things look in git diff, and splitting
even further if it gets messy.
Powered by blists - more mailing lists