From: Russell King (Oracle) Date: Wed, 19 Nov 2025 10:23:30 +0000 (+0000) Subject: net: stmmac: move stmmac_axi_blen_to_mask() to stmmac_main.c X-Git-Tag: v6.19-rc1~170^2~107^2~2 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=6ff3310ca28298e363c78143b6a2f20312421f4e;p=thirdparty%2Fkernel%2Flinux.git net: stmmac: move stmmac_axi_blen_to_mask() to stmmac_main.c Move the call to stmmac_axi_blen_to_mask() out of the individual MAC version drivers into the main code in stmmac_init_dma_engine(), passing the resulting value through a new member, axi_blen_regval, in the struct stmmac_axi structure. There is now no need for stmmac_axi_blen_to_dma_mask() to use u32p_replace_bits(), so use FIELD_PREP() instead. Signed-off-by: Russell King (Oracle) Link: https://patch.msgid.link/E1vLfLW-0000000FMb1-0zKV@rmk-PC.armlinux.org.uk Signed-off-by: Jakub Kicinski --- diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac1000_dma.c b/drivers/net/ethernet/stmicro/stmmac/dwmac1000_dma.c index b6476a1bfeab0..6d9b8fac3c6d0 100644 --- a/drivers/net/ethernet/stmicro/stmmac/dwmac1000_dma.c +++ b/drivers/net/ethernet/stmicro/stmmac/dwmac1000_dma.c @@ -41,8 +41,7 @@ static void dwmac1000_dma_axi(void __iomem *ioaddr, struct stmmac_axi *axi) * set). Note that the UNDEF bit is readonly, and is the inverse of * Bus Mode bit 16. */ - stmmac_axi_blen_to_mask(&value, axi->axi_blen, - ARRAY_SIZE(axi->axi_blen)); + value = (value & ~DMA_AXI_BLEN_MASK) | axi->axi_blen_regval; writel(value, ioaddr + DMA_AXI_BUS_MODE); } diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac4_dma.c b/drivers/net/ethernet/stmicro/stmmac/dwmac4_dma.c index 90d03c7b29f4c..7b513324cfb08 100644 --- a/drivers/net/ethernet/stmicro/stmmac/dwmac4_dma.c +++ b/drivers/net/ethernet/stmicro/stmmac/dwmac4_dma.c @@ -40,8 +40,7 @@ static void dwmac4_dma_axi(void __iomem *ioaddr, struct stmmac_axi *axi) * set). Note that the UNDEF bit is readonly, and is the inverse of * Bus Mode bit 16. */ - stmmac_axi_blen_to_mask(&value, axi->axi_blen, - ARRAY_SIZE(axi->axi_blen)); + value = (value & ~DMA_AXI_BLEN_MASK) | axi->axi_blen_regval; writel(value, ioaddr + DMA_SYS_BUS_MODE); } diff --git a/drivers/net/ethernet/stmicro/stmmac/dwxgmac2_dma.c b/drivers/net/ethernet/stmicro/stmmac/dwxgmac2_dma.c index 8a2cb6ca9588e..cc1bdc0975d5b 100644 --- a/drivers/net/ethernet/stmicro/stmmac/dwxgmac2_dma.c +++ b/drivers/net/ethernet/stmicro/stmmac/dwxgmac2_dma.c @@ -106,8 +106,7 @@ static void dwxgmac2_dma_axi(void __iomem *ioaddr, struct stmmac_axi *axi) * set). Note that the UNDEF bit is readonly, and is the inverse of * Bus Mode bit 16. */ - stmmac_axi_blen_to_mask(&value, axi->axi_blen, - ARRAY_SIZE(axi->axi_blen)); + value = (value & ~DMA_AXI_BLEN_MASK) | axi->axi_blen_regval; writel(value, ioaddr + XGMAC_DMA_SYSBUS_MODE); writel(XGMAC_TDPS, ioaddr + XGMAC_TX_EDMA_CTRL); diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c index 0b1e571f70f0e..aac82ddfb8c03 100644 --- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c @@ -223,7 +223,7 @@ void stmmac_axi_blen_to_mask(u32 *regval, const u32 *blen, size_t len) val |= burst >> 2; } - u32p_replace_bits(regval, val, DMA_AXI_BLEN_MASK); + *regval = FIELD_PREP(DMA_AXI_BLEN_MASK, val); } /** @@ -3212,8 +3212,12 @@ static int stmmac_init_dma_engine(struct stmmac_priv *priv) /* DMA Configuration */ stmmac_dma_init(priv, priv->ioaddr, priv->plat->dma_cfg); - if (priv->plat->axi) + if (priv->plat->axi) { + /* Encode the AXI burst length to a register value */ + stmmac_axi_blen_to_mask(&priv->plat->axi->axi_blen_regval, + priv->plat->axi->axi_blen, AXI_BLEN); stmmac_axi(priv, priv->ioaddr, priv->plat->axi); + } /* DMA CSR Channel configuration */ for (chan = 0; chan < dma_csr_ch; chan++) { diff --git a/include/linux/stmmac.h b/include/linux/stmmac.h index 673b068fdadf4..d1a41fe0825f9 100644 --- a/include/linux/stmmac.h +++ b/include/linux/stmmac.h @@ -113,6 +113,7 @@ struct stmmac_axi { u32 axi_wr_osr_lmt; u32 axi_rd_osr_lmt; bool axi_kbbe; + u32 axi_blen_regval; u32 axi_blen[AXI_BLEN]; bool axi_fb; bool axi_mb;