mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-20 09:34:44 +08:00
net: enetc: manage ENETC_F_QBV in priv->active_offloads only when enabled
Future work in this driver would like to look at priv->active_offloads & ENETC_F_QBV to determine whether a tc-taprio qdisc offload was installed, but this does not produce the intended effect. All the other flags in priv->active_offloads are managed dynamically, except ENETC_F_QBV which is set statically based on the probed SI capability. This change makes priv->active_offloads & ENETC_F_QBV really track the presence of a tc-taprio schedule on the port. Some existing users, like the enetc_sched_speed_set() call from phylink_mac_link_up(), are best kept using the old logic: the tc-taprio offload does not re-trigger another link mode resolve, so the scheduler needs to be functional from the get go, as long as Qbv is supported at all on the port. So to preserve functionality there, look at the static station interface capability from pf->si->hw_features instead. Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com> Reviewed-by: Claudiu Manoil <claudiu.manoil@nxp.com> Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
parent
d7722973a1
commit
32bf8e1f6f
@ -777,9 +777,6 @@ static void enetc_pf_netdev_setup(struct enetc_si *si, struct net_device *ndev,
|
||||
|
||||
ndev->priv_flags |= IFF_UNICAST_FLT;
|
||||
|
||||
if (si->hw_features & ENETC_SI_F_QBV)
|
||||
priv->active_offloads |= ENETC_F_QBV;
|
||||
|
||||
if (si->hw_features & ENETC_SI_F_PSFP && !enetc_psfp_enable(priv)) {
|
||||
priv->active_offloads |= ENETC_F_QCI;
|
||||
ndev->features |= NETIF_F_HW_TC;
|
||||
@ -993,7 +990,8 @@ static void enetc_pl_mac_link_up(struct phylink_config *config,
|
||||
int idx;
|
||||
|
||||
priv = netdev_priv(pf->si->ndev);
|
||||
if (priv->active_offloads & ENETC_F_QBV)
|
||||
|
||||
if (pf->si->hw_features & ENETC_SI_F_QBV)
|
||||
enetc_sched_speed_set(priv, speed);
|
||||
|
||||
if (!phylink_autoneg_inband(mode) &&
|
||||
|
@ -70,6 +70,9 @@ static int enetc_setup_taprio(struct net_device *ndev,
|
||||
enetc_wr(&priv->si->hw,
|
||||
ENETC_QBV_PTGCR_OFFSET,
|
||||
tge & (~ENETC_QBV_TGE));
|
||||
|
||||
priv->active_offloads &= ~ENETC_F_QBV;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -125,6 +128,9 @@ static int enetc_setup_taprio(struct net_device *ndev,
|
||||
|
||||
enetc_cbd_free_data_mem(priv->si, data_size, tmp, &dma);
|
||||
|
||||
if (!err)
|
||||
priv->active_offloads |= ENETC_F_QBV;
|
||||
|
||||
return err;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user