Message ID | 101bfd570686485c59a325f65c5d0328c6cd91dd.1706601050.git.siyanteng@loongson.cn (mailing list archive) |
---|---|
State | Changes Requested |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | stmmac: Add Loongson platform support | expand |
On Tue, Jan 30, 2024 at 04:49:15PM +0800, Yanteng Si wrote: > Loongson GMAC does not support Flow Control feature. Set flags to > disable it. > > Signed-off-by: Yanteng Si <siyanteng@loongson.cn> > Signed-off-by: Feiyang Chen <chenfeiyang@loongson.cn> > Signed-off-by: Yinggang Gu <guyinggang@loongson.cn> > --- > drivers/net/ethernet/stmicro/stmmac/dwmac-loongson.c | 1 + > drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | 6 +++--- > include/linux/stmmac.h | 1 + > 3 files changed, 5 insertions(+), 3 deletions(-) > > diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac-loongson.c b/drivers/net/ethernet/stmicro/stmmac/dwmac-loongson.c > index 1753a3c46b77..b78a73ea748b 100644 > --- a/drivers/net/ethernet/stmicro/stmmac/dwmac-loongson.c > +++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-loongson.c > @@ -335,6 +335,7 @@ static int loongson_gmac_config(struct pci_dev *pdev, > struct stmmac_resources *res, > struct device_node *np) > { > + plat->flags |= STMMAC_FLAG_DISABLE_FLOW_CONTROL; > > return 0; > } > diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c > index 3aa862269eb0..8d676cbfba1e 100644 > --- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c > +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c > @@ -1237,9 +1237,9 @@ static int stmmac_phy_setup(struct stmmac_priv *priv) > xpcs_get_interfaces(priv->hw->xpcs, > priv->phylink_config.supported_interfaces); > > - priv->phylink_config.mac_capabilities = MAC_ASYM_PAUSE | MAC_SYM_PAUSE | > - MAC_10FD | MAC_100FD | > - MAC_1000FD; > + priv->phylink_config.mac_capabilities = MAC_10FD | MAC_100FD | MAC_1000FD; > + if (!(priv->plat->flags & STMMAC_FLAG_DISABLE_FLOW_CONTROL)) > + priv->phylink_config.mac_capabilities |= MAC_ASYM_PAUSE | MAC_SYM_PAUSE; > > stmmac_set_half_duplex(priv); > > diff --git a/include/linux/stmmac.h b/include/linux/stmmac.h > index 197f6f914104..832cd8cd688f 100644 > --- a/include/linux/stmmac.h > +++ b/include/linux/stmmac.h > @@ -223,6 +223,7 @@ struct dwmac4_addrs { > #define STMMAC_FLAG_HWTSTAMP_CORRECT_LATENCY BIT(12) > #define STMMAC_FLAG_DISABLE_FORCE_1000 BIT(13) > #define STMMAC_FLAG_DISABLE_HALF_DUPLEX BIT(14) > +#define STMMAC_FLAG_DISABLE_FLOW_CONTROL BIT(15) See my last comment in patch 9/11. This can be reached by re-defining the stmmac_ops::phylink_get_caps() callback. -Serge(y) > > struct plat_stmmacenet_data { > int bus_id; > -- > 2.31.4 >
在 2024/2/6 06:13, Serge Semin 写道: > On Tue, Jan 30, 2024 at 04:49:15PM +0800, Yanteng Si wrote: >> Loongson GMAC does not support Flow Control feature. Set flags to >> disable it. >> >> Signed-off-by: Yanteng Si <siyanteng@loongson.cn> >> Signed-off-by: Feiyang Chen <chenfeiyang@loongson.cn> >> Signed-off-by: Yinggang Gu <guyinggang@loongson.cn> >> --- >> drivers/net/ethernet/stmicro/stmmac/dwmac-loongson.c | 1 + >> drivers/net/ethernet/stmicro/stmmac/stmmac_main.c | 6 +++--- >> include/linux/stmmac.h | 1 + >> 3 files changed, 5 insertions(+), 3 deletions(-) >> >> diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac-loongson.c b/drivers/net/ethernet/stmicro/stmmac/dwmac-loongson.c >> index 1753a3c46b77..b78a73ea748b 100644 >> --- a/drivers/net/ethernet/stmicro/stmmac/dwmac-loongson.c >> +++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-loongson.c >> @@ -335,6 +335,7 @@ static int loongson_gmac_config(struct pci_dev *pdev, >> struct stmmac_resources *res, >> struct device_node *np) >> { >> + plat->flags |= STMMAC_FLAG_DISABLE_FLOW_CONTROL; >> >> return 0; >> } >> diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c >> index 3aa862269eb0..8d676cbfba1e 100644 >> --- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c >> +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c >> @@ -1237,9 +1237,9 @@ static int stmmac_phy_setup(struct stmmac_priv *priv) >> xpcs_get_interfaces(priv->hw->xpcs, >> priv->phylink_config.supported_interfaces); >> >> - priv->phylink_config.mac_capabilities = MAC_ASYM_PAUSE | MAC_SYM_PAUSE | >> - MAC_10FD | MAC_100FD | >> - MAC_1000FD; >> + priv->phylink_config.mac_capabilities = MAC_10FD | MAC_100FD | MAC_1000FD; >> + if (!(priv->plat->flags & STMMAC_FLAG_DISABLE_FLOW_CONTROL)) >> + priv->phylink_config.mac_capabilities |= MAC_ASYM_PAUSE | MAC_SYM_PAUSE; >> >> stmmac_set_half_duplex(priv); >> >> diff --git a/include/linux/stmmac.h b/include/linux/stmmac.h >> index 197f6f914104..832cd8cd688f 100644 >> --- a/include/linux/stmmac.h >> +++ b/include/linux/stmmac.h >> @@ -223,6 +223,7 @@ struct dwmac4_addrs { >> #define STMMAC_FLAG_HWTSTAMP_CORRECT_LATENCY BIT(12) >> #define STMMAC_FLAG_DISABLE_FORCE_1000 BIT(13) >> #define STMMAC_FLAG_DISABLE_HALF_DUPLEX BIT(14) >> +#define STMMAC_FLAG_DISABLE_FLOW_CONTROL BIT(15) > See my last comment in patch 9/11. This can be reached by re-defining > the stmmac_ops::phylink_get_caps() callback. OK. Thanks, Yanteng > > -Serge(y) > >> >> struct plat_stmmacenet_data { >> int bus_id; >> -- >> 2.31.4 >>
diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac-loongson.c b/drivers/net/ethernet/stmicro/stmmac/dwmac-loongson.c index 1753a3c46b77..b78a73ea748b 100644 --- a/drivers/net/ethernet/stmicro/stmmac/dwmac-loongson.c +++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-loongson.c @@ -335,6 +335,7 @@ static int loongson_gmac_config(struct pci_dev *pdev, struct stmmac_resources *res, struct device_node *np) { + plat->flags |= STMMAC_FLAG_DISABLE_FLOW_CONTROL; return 0; } diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c index 3aa862269eb0..8d676cbfba1e 100644 --- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c @@ -1237,9 +1237,9 @@ static int stmmac_phy_setup(struct stmmac_priv *priv) xpcs_get_interfaces(priv->hw->xpcs, priv->phylink_config.supported_interfaces); - priv->phylink_config.mac_capabilities = MAC_ASYM_PAUSE | MAC_SYM_PAUSE | - MAC_10FD | MAC_100FD | - MAC_1000FD; + priv->phylink_config.mac_capabilities = MAC_10FD | MAC_100FD | MAC_1000FD; + if (!(priv->plat->flags & STMMAC_FLAG_DISABLE_FLOW_CONTROL)) + priv->phylink_config.mac_capabilities |= MAC_ASYM_PAUSE | MAC_SYM_PAUSE; stmmac_set_half_duplex(priv); diff --git a/include/linux/stmmac.h b/include/linux/stmmac.h index 197f6f914104..832cd8cd688f 100644 --- a/include/linux/stmmac.h +++ b/include/linux/stmmac.h @@ -223,6 +223,7 @@ struct dwmac4_addrs { #define STMMAC_FLAG_HWTSTAMP_CORRECT_LATENCY BIT(12) #define STMMAC_FLAG_DISABLE_FORCE_1000 BIT(13) #define STMMAC_FLAG_DISABLE_HALF_DUPLEX BIT(14) +#define STMMAC_FLAG_DISABLE_FLOW_CONTROL BIT(15) struct plat_stmmacenet_data { int bus_id;