Message ID | 3f9089bae8391d1263ef9c2b7a7c09de56308387.1714046812.git.siyanteng@loongson.cn (mailing list archive) |
---|---|
State | Changes Requested |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | stmmac: Add Loongson platform support | expand |
On Thu, Apr 25, 2024 at 09:01:54PM +0800, Yanteng Si wrote: > Alternate Descriptor Size (ATDS) is a part of the DMA-configs together > with the PBL, ALL, AEME, etc so the structure is the most suitable > place for it. The better description would be: "ATDS (Alternate Descriptor Size) is a part of the DMA Bus Mode configs (together with PBL, ALL, EME, etc) of the DW GMAC controllers. Seeing it's not changed at runtime but is activated as long as the IP-core has it supported (at least due to the Type 2 Full Checksum Offload Engine feature), move the respective parameter from the stmmac_dma_ops::init() callback argument to the stmmac_dma_cfg structure, which already have the rest of the DMA-related configs defined. Besides the being added in the next commit DW GMAC multi-channels support will require to add the stmmac_dma_ops::init_chan() callback and have the ATDS flag set/cleared for each channel in there. Having the atds-flag in the stmmac_dma_cfg structure will make the parameter accessible from stmmac_dma_ops::init_chan() callback too." Other than that the change looks good. Thanks. Reviewed-by: Serge Semin <fancer.lancer@gmail.com> -Serge(y) > > Signed-off-by: Feiyang Chen <chenfeiyang@loongson.cn> > Signed-off-by: Yinggang Gu <guyinggang@loongson.cn> > Signed-off-by: Yanteng Si <siyanteng@loongson.cn> > --- > drivers/net/ethernet/stmicro/stmmac/dwmac-sun8i.c | 2 +- > drivers/net/ethernet/stmicro/stmmac/dwmac1000_dma.c | 4 ++-- > drivers/net/ethernet/stmicro/stmmac/dwmac100_dma.c | 2 +- > drivers/net/ethernet/stmicro/stmmac/dwmac4_dma.c | 2 +- > drivers/net/ethernet/stmicro/stmmac/dwxgmac2_dma.c | 2 +- > drivers/net/ethernet/stmicro/stmmac/hwif.h | 3 +-- > drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | 5 ++--- > include/linux/stmmac.h | 1 + > 8 files changed, 10 insertions(+), 11 deletions(-) > > diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac-sun8i.c b/drivers/net/ethernet/stmicro/stmmac/dwmac-sun8i.c > index e1b761dcfa1d..d87079016952 100644 > --- a/drivers/net/ethernet/stmicro/stmmac/dwmac-sun8i.c > +++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-sun8i.c > @@ -299,7 +299,7 @@ static int sun8i_dwmac_dma_reset(void __iomem *ioaddr) > * Called from stmmac via stmmac_dma_ops->init > */ > static void sun8i_dwmac_dma_init(void __iomem *ioaddr, > - struct stmmac_dma_cfg *dma_cfg, int atds) > + struct stmmac_dma_cfg *dma_cfg) > { > writel(EMAC_RX_INT | EMAC_TX_INT, ioaddr + EMAC_INT_EN); > writel(0x1FFFFFF, ioaddr + EMAC_INT_STA); > diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac1000_dma.c b/drivers/net/ethernet/stmicro/stmmac/dwmac1000_dma.c > index daf79cdbd3ec..bb82ee9b855f 100644 > --- a/drivers/net/ethernet/stmicro/stmmac/dwmac1000_dma.c > +++ b/drivers/net/ethernet/stmicro/stmmac/dwmac1000_dma.c > @@ -71,7 +71,7 @@ static void dwmac1000_dma_axi(void __iomem *ioaddr, struct stmmac_axi *axi) > } > > static void dwmac1000_dma_init(void __iomem *ioaddr, > - struct stmmac_dma_cfg *dma_cfg, int atds) > + struct stmmac_dma_cfg *dma_cfg) > { > u32 value = readl(ioaddr + DMA_BUS_MODE); > int txpbl = dma_cfg->txpbl ?: dma_cfg->pbl; > @@ -98,7 +98,7 @@ static void dwmac1000_dma_init(void __iomem *ioaddr, > if (dma_cfg->mixed_burst) > value |= DMA_BUS_MODE_MB; > > - if (atds) > + if (dma_cfg->atds) > value |= DMA_BUS_MODE_ATDS; > > if (dma_cfg->aal) > diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac100_dma.c b/drivers/net/ethernet/stmicro/stmmac/dwmac100_dma.c > index dea270f60cc3..f861babc06f9 100644 > --- a/drivers/net/ethernet/stmicro/stmmac/dwmac100_dma.c > +++ b/drivers/net/ethernet/stmicro/stmmac/dwmac100_dma.c > @@ -19,7 +19,7 @@ > #include "dwmac_dma.h" > > static void dwmac100_dma_init(void __iomem *ioaddr, > - struct stmmac_dma_cfg *dma_cfg, int atds) > + struct stmmac_dma_cfg *dma_cfg) > { > /* Enable Application Access by writing to DMA CSR0 */ > writel(DMA_BUS_MODE_DEFAULT | (dma_cfg->pbl << DMA_BUS_MODE_PBL_SHIFT), > diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac4_dma.c b/drivers/net/ethernet/stmicro/stmmac/dwmac4_dma.c > index 84d3a8551b03..e0165358c4ac 100644 > --- a/drivers/net/ethernet/stmicro/stmmac/dwmac4_dma.c > +++ b/drivers/net/ethernet/stmicro/stmmac/dwmac4_dma.c > @@ -153,7 +153,7 @@ static void dwmac410_dma_init_channel(struct stmmac_priv *priv, > } > > static void dwmac4_dma_init(void __iomem *ioaddr, > - struct stmmac_dma_cfg *dma_cfg, int atds) > + struct stmmac_dma_cfg *dma_cfg) > { > u32 value = readl(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 dd2ab6185c40..7840bc403788 100644 > --- a/drivers/net/ethernet/stmicro/stmmac/dwxgmac2_dma.c > +++ b/drivers/net/ethernet/stmicro/stmmac/dwxgmac2_dma.c > @@ -20,7 +20,7 @@ static int dwxgmac2_dma_reset(void __iomem *ioaddr) > } > > static void dwxgmac2_dma_init(void __iomem *ioaddr, > - struct stmmac_dma_cfg *dma_cfg, int atds) > + struct stmmac_dma_cfg *dma_cfg) > { > u32 value = readl(ioaddr + XGMAC_DMA_SYSBUS_MODE); > > diff --git a/drivers/net/ethernet/stmicro/stmmac/hwif.h b/drivers/net/ethernet/stmicro/stmmac/hwif.h > index 90384db228b5..413441eb6ea0 100644 > --- a/drivers/net/ethernet/stmicro/stmmac/hwif.h > +++ b/drivers/net/ethernet/stmicro/stmmac/hwif.h > @@ -175,8 +175,7 @@ struct dma_features; > struct stmmac_dma_ops { > /* DMA core initialization */ > int (*reset)(void __iomem *ioaddr); > - void (*init)(void __iomem *ioaddr, struct stmmac_dma_cfg *dma_cfg, > - int atds); > + void (*init)(void __iomem *ioaddr, struct stmmac_dma_cfg *dma_cfg); > void (*init_chan)(struct stmmac_priv *priv, void __iomem *ioaddr, > struct stmmac_dma_cfg *dma_cfg, u32 chan); > void (*init_rx_chan)(struct stmmac_priv *priv, void __iomem *ioaddr, > diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c > index 59bf83904b62..188514ca6c47 100644 > --- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c > +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c > @@ -3006,7 +3006,6 @@ static int stmmac_init_dma_engine(struct stmmac_priv *priv) > struct stmmac_rx_queue *rx_q; > struct stmmac_tx_queue *tx_q; > u32 chan = 0; > - int atds = 0; > int ret = 0; > > if (!priv->plat->dma_cfg || !priv->plat->dma_cfg->pbl) { > @@ -3015,7 +3014,7 @@ static int stmmac_init_dma_engine(struct stmmac_priv *priv) > } > > if (priv->extend_desc && (priv->mode == STMMAC_RING_MODE)) > - atds = 1; > + priv->plat->dma_cfg->atds = 1; > > ret = stmmac_reset(priv, priv->ioaddr); > if (ret) { > @@ -3024,7 +3023,7 @@ static int stmmac_init_dma_engine(struct stmmac_priv *priv) > } > > /* DMA Configuration */ > - stmmac_dma_init(priv, priv->ioaddr, priv->plat->dma_cfg, atds); > + stmmac_dma_init(priv, priv->ioaddr, priv->plat->dma_cfg); > > if (priv->plat->axi) > stmmac_axi(priv, priv->ioaddr, priv->plat->axi); > diff --git a/include/linux/stmmac.h b/include/linux/stmmac.h > index dfa1828cd756..1b54b84a6785 100644 > --- a/include/linux/stmmac.h > +++ b/include/linux/stmmac.h > @@ -100,6 +100,7 @@ struct stmmac_dma_cfg { > bool eame; > bool multi_msi_en; > bool dche; > + bool atds; > }; > > #define AXI_BLEN 7 > -- > 2.31.4 >
在 2024/5/3 03:10, Serge Semin 写道: > "ATDS (Alternate Descriptor Size) is a part of the DMA Bus Mode configs > (together with PBL, ALL, EME, etc) of the DW GMAC controllers. Seeing > it's not changed at runtime but is activated as long as the IP-core > has it supported (at least due to the Type 2 Full Checksum Offload > Engine feature), move the respective parameter from the > stmmac_dma_ops::init() callback argument to the stmmac_dma_cfg > structure, which already have the rest of the DMA-related configs > defined. > > Besides the being added in the next commit DW GMAC multi-channels > support will require to add the stmmac_dma_ops::init_chan() callback > and have the ATDS flag set/cleared for each channel in there. Having > the atds-flag in the stmmac_dma_cfg structure will make the parameter > accessible from stmmac_dma_ops::init_chan() callback too." > > Other than that the change looks good. Thanks. > > Reviewed-by: Serge Semin<fancer.lancer@gmail.com> Ok, I'll pick them up, thanks for your comment. Thanks, Yanteng
diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac-sun8i.c b/drivers/net/ethernet/stmicro/stmmac/dwmac-sun8i.c index e1b761dcfa1d..d87079016952 100644 --- a/drivers/net/ethernet/stmicro/stmmac/dwmac-sun8i.c +++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-sun8i.c @@ -299,7 +299,7 @@ static int sun8i_dwmac_dma_reset(void __iomem *ioaddr) * Called from stmmac via stmmac_dma_ops->init */ static void sun8i_dwmac_dma_init(void __iomem *ioaddr, - struct stmmac_dma_cfg *dma_cfg, int atds) + struct stmmac_dma_cfg *dma_cfg) { writel(EMAC_RX_INT | EMAC_TX_INT, ioaddr + EMAC_INT_EN); writel(0x1FFFFFF, ioaddr + EMAC_INT_STA); diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac1000_dma.c b/drivers/net/ethernet/stmicro/stmmac/dwmac1000_dma.c index daf79cdbd3ec..bb82ee9b855f 100644 --- a/drivers/net/ethernet/stmicro/stmmac/dwmac1000_dma.c +++ b/drivers/net/ethernet/stmicro/stmmac/dwmac1000_dma.c @@ -71,7 +71,7 @@ static void dwmac1000_dma_axi(void __iomem *ioaddr, struct stmmac_axi *axi) } static void dwmac1000_dma_init(void __iomem *ioaddr, - struct stmmac_dma_cfg *dma_cfg, int atds) + struct stmmac_dma_cfg *dma_cfg) { u32 value = readl(ioaddr + DMA_BUS_MODE); int txpbl = dma_cfg->txpbl ?: dma_cfg->pbl; @@ -98,7 +98,7 @@ static void dwmac1000_dma_init(void __iomem *ioaddr, if (dma_cfg->mixed_burst) value |= DMA_BUS_MODE_MB; - if (atds) + if (dma_cfg->atds) value |= DMA_BUS_MODE_ATDS; if (dma_cfg->aal) diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac100_dma.c b/drivers/net/ethernet/stmicro/stmmac/dwmac100_dma.c index dea270f60cc3..f861babc06f9 100644 --- a/drivers/net/ethernet/stmicro/stmmac/dwmac100_dma.c +++ b/drivers/net/ethernet/stmicro/stmmac/dwmac100_dma.c @@ -19,7 +19,7 @@ #include "dwmac_dma.h" static void dwmac100_dma_init(void __iomem *ioaddr, - struct stmmac_dma_cfg *dma_cfg, int atds) + struct stmmac_dma_cfg *dma_cfg) { /* Enable Application Access by writing to DMA CSR0 */ writel(DMA_BUS_MODE_DEFAULT | (dma_cfg->pbl << DMA_BUS_MODE_PBL_SHIFT), diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac4_dma.c b/drivers/net/ethernet/stmicro/stmmac/dwmac4_dma.c index 84d3a8551b03..e0165358c4ac 100644 --- a/drivers/net/ethernet/stmicro/stmmac/dwmac4_dma.c +++ b/drivers/net/ethernet/stmicro/stmmac/dwmac4_dma.c @@ -153,7 +153,7 @@ static void dwmac410_dma_init_channel(struct stmmac_priv *priv, } static void dwmac4_dma_init(void __iomem *ioaddr, - struct stmmac_dma_cfg *dma_cfg, int atds) + struct stmmac_dma_cfg *dma_cfg) { u32 value = readl(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 dd2ab6185c40..7840bc403788 100644 --- a/drivers/net/ethernet/stmicro/stmmac/dwxgmac2_dma.c +++ b/drivers/net/ethernet/stmicro/stmmac/dwxgmac2_dma.c @@ -20,7 +20,7 @@ static int dwxgmac2_dma_reset(void __iomem *ioaddr) } static void dwxgmac2_dma_init(void __iomem *ioaddr, - struct stmmac_dma_cfg *dma_cfg, int atds) + struct stmmac_dma_cfg *dma_cfg) { u32 value = readl(ioaddr + XGMAC_DMA_SYSBUS_MODE); diff --git a/drivers/net/ethernet/stmicro/stmmac/hwif.h b/drivers/net/ethernet/stmicro/stmmac/hwif.h index 90384db228b5..413441eb6ea0 100644 --- a/drivers/net/ethernet/stmicro/stmmac/hwif.h +++ b/drivers/net/ethernet/stmicro/stmmac/hwif.h @@ -175,8 +175,7 @@ struct dma_features; struct stmmac_dma_ops { /* DMA core initialization */ int (*reset)(void __iomem *ioaddr); - void (*init)(void __iomem *ioaddr, struct stmmac_dma_cfg *dma_cfg, - int atds); + void (*init)(void __iomem *ioaddr, struct stmmac_dma_cfg *dma_cfg); void (*init_chan)(struct stmmac_priv *priv, void __iomem *ioaddr, struct stmmac_dma_cfg *dma_cfg, u32 chan); void (*init_rx_chan)(struct stmmac_priv *priv, void __iomem *ioaddr, diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c index 59bf83904b62..188514ca6c47 100644 --- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c @@ -3006,7 +3006,6 @@ static int stmmac_init_dma_engine(struct stmmac_priv *priv) struct stmmac_rx_queue *rx_q; struct stmmac_tx_queue *tx_q; u32 chan = 0; - int atds = 0; int ret = 0; if (!priv->plat->dma_cfg || !priv->plat->dma_cfg->pbl) { @@ -3015,7 +3014,7 @@ static int stmmac_init_dma_engine(struct stmmac_priv *priv) } if (priv->extend_desc && (priv->mode == STMMAC_RING_MODE)) - atds = 1; + priv->plat->dma_cfg->atds = 1; ret = stmmac_reset(priv, priv->ioaddr); if (ret) { @@ -3024,7 +3023,7 @@ static int stmmac_init_dma_engine(struct stmmac_priv *priv) } /* DMA Configuration */ - stmmac_dma_init(priv, priv->ioaddr, priv->plat->dma_cfg, atds); + stmmac_dma_init(priv, priv->ioaddr, priv->plat->dma_cfg); if (priv->plat->axi) stmmac_axi(priv, priv->ioaddr, priv->plat->axi); diff --git a/include/linux/stmmac.h b/include/linux/stmmac.h index dfa1828cd756..1b54b84a6785 100644 --- a/include/linux/stmmac.h +++ b/include/linux/stmmac.h @@ -100,6 +100,7 @@ struct stmmac_dma_cfg { bool eame; bool multi_msi_en; bool dche; + bool atds; }; #define AXI_BLEN 7