Commit 7c728274 authored by Jose Abreu's avatar Jose Abreu Committed by David S. Miller

net: stmmac: gmac5+: Add support for Frame Preemption

Adds the HW specific support for Frame Preemption on GMAC5+ cores.
Signed-off-by: default avatarJose Abreu <Jose.Abreu@synopsys.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 1ac14241
...@@ -64,6 +64,8 @@ ...@@ -64,6 +64,8 @@
#define GMAC_RXQCTRL_MCBCQEN_SHIFT 20 #define GMAC_RXQCTRL_MCBCQEN_SHIFT 20
#define GMAC_RXQCTRL_TACPQE BIT(21) #define GMAC_RXQCTRL_TACPQE BIT(21)
#define GMAC_RXQCTRL_TACPQE_SHIFT 21 #define GMAC_RXQCTRL_TACPQE_SHIFT 21
#define GMAC_RXQCTRL_FPRQ GENMASK(26, 24)
#define GMAC_RXQCTRL_FPRQ_SHIFT 24
/* MAC Packet Filtering */ /* MAC Packet Filtering */
#define GMAC_PACKET_FILTER_PR BIT(0) #define GMAC_PACKET_FILTER_PR BIT(0)
...@@ -237,6 +239,7 @@ enum power_event { ...@@ -237,6 +239,7 @@ enum power_event {
/* MAC HW features3 bitmap */ /* MAC HW features3 bitmap */
#define GMAC_HW_FEAT_ASP GENMASK(29, 28) #define GMAC_HW_FEAT_ASP GENMASK(29, 28)
#define GMAC_HW_FEAT_FPESEL BIT(26)
#define GMAC_HW_FEAT_ESTWID GENMASK(21, 20) #define GMAC_HW_FEAT_ESTWID GENMASK(21, 20)
#define GMAC_HW_FEAT_ESTDEP GENMASK(19, 17) #define GMAC_HW_FEAT_ESTDEP GENMASK(19, 17)
#define GMAC_HW_FEAT_ESTSEL BIT(16) #define GMAC_HW_FEAT_ESTSEL BIT(16)
......
...@@ -985,6 +985,7 @@ const struct stmmac_ops dwmac410_ops = { ...@@ -985,6 +985,7 @@ const struct stmmac_ops dwmac410_ops = {
.config_l3_filter = dwmac4_config_l3_filter, .config_l3_filter = dwmac4_config_l3_filter,
.config_l4_filter = dwmac4_config_l4_filter, .config_l4_filter = dwmac4_config_l4_filter,
.est_configure = dwmac5_est_configure, .est_configure = dwmac5_est_configure,
.fpe_configure = dwmac5_fpe_configure,
}; };
const struct stmmac_ops dwmac510_ops = { const struct stmmac_ops dwmac510_ops = {
...@@ -1029,6 +1030,7 @@ const struct stmmac_ops dwmac510_ops = { ...@@ -1029,6 +1030,7 @@ const struct stmmac_ops dwmac510_ops = {
.config_l3_filter = dwmac4_config_l3_filter, .config_l3_filter = dwmac4_config_l3_filter,
.config_l4_filter = dwmac4_config_l4_filter, .config_l4_filter = dwmac4_config_l4_filter,
.est_configure = dwmac5_est_configure, .est_configure = dwmac5_est_configure,
.fpe_configure = dwmac5_fpe_configure,
}; };
int dwmac4_setup(struct stmmac_priv *priv) int dwmac4_setup(struct stmmac_priv *priv)
......
...@@ -404,6 +404,7 @@ static void dwmac4_get_hw_feature(void __iomem *ioaddr, ...@@ -404,6 +404,7 @@ static void dwmac4_get_hw_feature(void __iomem *ioaddr,
/* 5.10 Features */ /* 5.10 Features */
dma_cap->asp = (hw_cap & GMAC_HW_FEAT_ASP) >> 28; dma_cap->asp = (hw_cap & GMAC_HW_FEAT_ASP) >> 28;
dma_cap->fpesel = (hw_cap & GMAC_HW_FEAT_FPESEL) >> 26;
dma_cap->estwid = (hw_cap & GMAC_HW_FEAT_ESTWID) >> 20; dma_cap->estwid = (hw_cap & GMAC_HW_FEAT_ESTWID) >> 20;
dma_cap->estdep = (hw_cap & GMAC_HW_FEAT_ESTDEP) >> 17; dma_cap->estdep = (hw_cap & GMAC_HW_FEAT_ESTDEP) >> 17;
dma_cap->estsel = (hw_cap & GMAC_HW_FEAT_ESTSEL) >> 16; dma_cap->estsel = (hw_cap & GMAC_HW_FEAT_ESTSEL) >> 16;
......
...@@ -645,3 +645,26 @@ int dwmac5_est_configure(void __iomem *ioaddr, struct stmmac_est *cfg, ...@@ -645,3 +645,26 @@ int dwmac5_est_configure(void __iomem *ioaddr, struct stmmac_est *cfg,
writel(ctrl, ioaddr + MTL_EST_CONTROL); writel(ctrl, ioaddr + MTL_EST_CONTROL);
return 0; return 0;
} }
void dwmac5_fpe_configure(void __iomem *ioaddr, u32 num_txq, u32 num_rxq,
bool enable)
{
u32 value;
if (!enable) {
value = readl(ioaddr + MAC_FPE_CTRL_STS);
value &= ~EFPE;
writel(value, ioaddr + MAC_FPE_CTRL_STS);
}
value = readl(ioaddr + GMAC_RXQ_CTRL1);
value &= ~GMAC_RXQCTRL_FPRQ;
value |= (num_rxq - 1) << GMAC_RXQCTRL_FPRQ_SHIFT;
writel(value, ioaddr + GMAC_RXQ_CTRL1);
value = readl(ioaddr + MAC_FPE_CTRL_STS);
value |= EFPE;
writel(value, ioaddr + MAC_FPE_CTRL_STS);
}
...@@ -11,6 +11,9 @@ ...@@ -11,6 +11,9 @@
#define PRTYEN BIT(1) #define PRTYEN BIT(1)
#define TMOUTEN BIT(0) #define TMOUTEN BIT(0)
#define MAC_FPE_CTRL_STS 0x00000234
#define EFPE BIT(0)
#define MAC_PPS_CONTROL 0x00000b70 #define MAC_PPS_CONTROL 0x00000b70
#define PPS_MAXIDX(x) ((((x) + 1) * 8) - 1) #define PPS_MAXIDX(x) ((((x) + 1) * 8) - 1)
#define PPS_MINIDX(x) ((x) * 8) #define PPS_MINIDX(x) ((x) * 8)
...@@ -102,5 +105,7 @@ int dwmac5_flex_pps_config(void __iomem *ioaddr, int index, ...@@ -102,5 +105,7 @@ int dwmac5_flex_pps_config(void __iomem *ioaddr, int index,
u32 sub_second_inc, u32 systime_flags); u32 sub_second_inc, u32 systime_flags);
int dwmac5_est_configure(void __iomem *ioaddr, struct stmmac_est *cfg, int dwmac5_est_configure(void __iomem *ioaddr, struct stmmac_est *cfg,
unsigned int ptp_rate); unsigned int ptp_rate);
void dwmac5_fpe_configure(void __iomem *ioaddr, u32 num_txq, u32 num_rxq,
bool enable);
#endif /* __DWMAC5_H__ */ #endif /* __DWMAC5_H__ */
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment