* [PATCH V2 net 0/2] There are some bugfix for the HNS ethernet driver
@ 2023-12-04 1:10 Jijie Shao
2023-12-04 1:10 ` [PATCH V2 net 1/2] net: hns: fix wrong head when modify the tx feature when sending packets Jijie Shao
2023-12-04 1:10 ` [PATCH V2 net 2/2] net: hns: fix fake link up on xge port Jijie Shao
0 siblings, 2 replies; 7+ messages in thread
From: Jijie Shao @ 2023-12-04 1:10 UTC (permalink / raw)
To: yisen.zhuang, salil.mehta, davem, edumazet, kuba, pabeni
Cc: shenjian15, wangjie125, liuyonglong, shaojijie, netdev, linux-kernel
There are some bugfix for the HNS ethernet driver
---
changeLog:
v1 -> v2:
- Fixed the internal function is not decorated with static issue, suggested by Jakub
v1: https://lore.kernel.org/all/20231201102703.4134592-1-shaojijie@huawei.com/
---
Yonglong Liu (2):
net: hns: fix wrong head when modify the tx feature when sending
packets
net: hns: fix fake link up on xge port
.../net/ethernet/hisilicon/hns/hns_dsaf_mac.c | 29 ++++++++++
drivers/net/ethernet/hisilicon/hns/hns_enet.c | 53 +++++++++++--------
drivers/net/ethernet/hisilicon/hns/hns_enet.h | 3 +-
3 files changed, 62 insertions(+), 23 deletions(-)
--
2.30.0
^ permalink raw reply [flat|nested] 7+ messages in thread* [PATCH V2 net 1/2] net: hns: fix wrong head when modify the tx feature when sending packets 2023-12-04 1:10 [PATCH V2 net 0/2] There are some bugfix for the HNS ethernet driver Jijie Shao @ 2023-12-04 1:10 ` Jijie Shao 2023-12-04 10:15 ` Wojciech Drewek 2023-12-04 1:10 ` [PATCH V2 net 2/2] net: hns: fix fake link up on xge port Jijie Shao 1 sibling, 1 reply; 7+ messages in thread From: Jijie Shao @ 2023-12-04 1:10 UTC (permalink / raw) To: yisen.zhuang, salil.mehta, davem, edumazet, kuba, pabeni Cc: shenjian15, wangjie125, liuyonglong, shaojijie, netdev, linux-kernel From: Yonglong Liu <liuyonglong@huawei.com> When modify the tx feature, the hns driver will modify the maybe_stop_tx() and fill_desc() functions, if the modify happens during packet sending, will cause the hardware and software pointers do not match, and the port can not work anymore. This patch deletes the maybe_stop_tx() and fill_desc() functions modification when setting tx feature, and use the skb_is_gro() to determine use tso functions or non-tso functions when packets sending. Fixes: 38f616da1c28 ("net:hns: Add support of ethtool TSO set option for Hip06 in HNS") Signed-off-by: Yonglong Liu <liuyonglong@huawei.com> Signed-off-by: Jijie Shao <shaojijie@huawei.com> --- drivers/net/ethernet/hisilicon/hns/hns_enet.c | 53 +++++++++++-------- drivers/net/ethernet/hisilicon/hns/hns_enet.h | 3 +- 2 files changed, 33 insertions(+), 23 deletions(-) diff --git a/drivers/net/ethernet/hisilicon/hns/hns_enet.c b/drivers/net/ethernet/hisilicon/hns/hns_enet.c index 0900abf5c508..8a713eed4465 100644 --- a/drivers/net/ethernet/hisilicon/hns/hns_enet.c +++ b/drivers/net/ethernet/hisilicon/hns/hns_enet.c @@ -142,7 +142,8 @@ MODULE_DEVICE_TABLE(acpi, hns_enet_acpi_match); static void fill_desc(struct hnae_ring *ring, void *priv, int size, dma_addr_t dma, int frag_end, - int buf_num, enum hns_desc_type type, int mtu) + int buf_num, enum hns_desc_type type, int mtu, + bool is_gso) { struct hnae_desc *desc = &ring->desc[ring->next_to_use]; struct hnae_desc_cb *desc_cb = &ring->desc_cb[ring->next_to_use]; @@ -275,6 +276,15 @@ static int hns_nic_maybe_stop_tso( return 0; } +static int hns_nic_maybe_stop_tx_v2(struct sk_buff **out_skb, int *bnum, + struct hnae_ring *ring) +{ + if (skb_is_gso(*out_skb)) + return hns_nic_maybe_stop_tso(out_skb, bnum, ring); + else + return hns_nic_maybe_stop_tx(out_skb, bnum, ring); +} + static void fill_tso_desc(struct hnae_ring *ring, void *priv, int size, dma_addr_t dma, int frag_end, int buf_num, enum hns_desc_type type, int mtu) @@ -300,6 +310,19 @@ static void fill_tso_desc(struct hnae_ring *ring, void *priv, mtu); } +static void fill_desc_v2(struct hnae_ring *ring, void *priv, + int size, dma_addr_t dma, int frag_end, + int buf_num, enum hns_desc_type type, int mtu, + bool is_gso) +{ + if (is_gso) + fill_tso_desc(ring, priv, size, dma, frag_end, buf_num, type, + mtu); + else + fill_v2_desc(ring, priv, size, dma, frag_end, buf_num, type, + mtu); +} + netdev_tx_t hns_nic_net_xmit_hw(struct net_device *ndev, struct sk_buff *skb, struct hns_nic_ring_data *ring_data) @@ -313,6 +336,7 @@ netdev_tx_t hns_nic_net_xmit_hw(struct net_device *ndev, int seg_num; dma_addr_t dma; int size, next_to_use; + bool is_gso; int i; switch (priv->ops.maybe_stop_tx(&skb, &buf_num, ring)) { @@ -339,8 +363,9 @@ netdev_tx_t hns_nic_net_xmit_hw(struct net_device *ndev, ring->stats.sw_err_cnt++; goto out_err_tx_ok; } + is_gso = skb_is_gso(skb); priv->ops.fill_desc(ring, skb, size, dma, seg_num == 1 ? 1 : 0, - buf_num, DESC_TYPE_SKB, ndev->mtu); + buf_num, DESC_TYPE_SKB, ndev->mtu, is_gso); /* fill the fragments */ for (i = 1; i < seg_num; i++) { @@ -354,7 +379,7 @@ netdev_tx_t hns_nic_net_xmit_hw(struct net_device *ndev, } priv->ops.fill_desc(ring, skb_frag_page(frag), size, dma, seg_num - 1 == i ? 1 : 0, buf_num, - DESC_TYPE_PAGE, ndev->mtu); + DESC_TYPE_PAGE, ndev->mtu, is_gso); } /*complete translate all packets*/ @@ -1776,15 +1801,6 @@ static int hns_nic_set_features(struct net_device *netdev, netdev_info(netdev, "enet v1 do not support tso!\n"); break; default: - if (features & (NETIF_F_TSO | NETIF_F_TSO6)) { - priv->ops.fill_desc = fill_tso_desc; - priv->ops.maybe_stop_tx = hns_nic_maybe_stop_tso; - /* The chip only support 7*4096 */ - netif_set_tso_max_size(netdev, 7 * 4096); - } else { - priv->ops.fill_desc = fill_v2_desc; - priv->ops.maybe_stop_tx = hns_nic_maybe_stop_tx; - } break; } netdev->features = features; @@ -2159,16 +2175,9 @@ static void hns_nic_set_priv_ops(struct net_device *netdev) priv->ops.maybe_stop_tx = hns_nic_maybe_stop_tx; } else { priv->ops.get_rxd_bnum = get_v2rx_desc_bnum; - if ((netdev->features & NETIF_F_TSO) || - (netdev->features & NETIF_F_TSO6)) { - priv->ops.fill_desc = fill_tso_desc; - priv->ops.maybe_stop_tx = hns_nic_maybe_stop_tso; - /* This chip only support 7*4096 */ - netif_set_tso_max_size(netdev, 7 * 4096); - } else { - priv->ops.fill_desc = fill_v2_desc; - priv->ops.maybe_stop_tx = hns_nic_maybe_stop_tx; - } + priv->ops.fill_desc = fill_desc_v2; + priv->ops.maybe_stop_tx = hns_nic_maybe_stop_tx_v2; + netif_set_tso_max_size(netdev, 7 * 4096); /* enable tso when init * control tso on/off through TSE bit in bd */ diff --git a/drivers/net/ethernet/hisilicon/hns/hns_enet.h b/drivers/net/ethernet/hisilicon/hns/hns_enet.h index ffa9d6573f54..3f3ee032f631 100644 --- a/drivers/net/ethernet/hisilicon/hns/hns_enet.h +++ b/drivers/net/ethernet/hisilicon/hns/hns_enet.h @@ -44,7 +44,8 @@ struct hns_nic_ring_data { struct hns_nic_ops { void (*fill_desc)(struct hnae_ring *ring, void *priv, int size, dma_addr_t dma, int frag_end, - int buf_num, enum hns_desc_type type, int mtu); + int buf_num, enum hns_desc_type type, int mtu, + bool is_gso); int (*maybe_stop_tx)(struct sk_buff **out_skb, int *bnum, struct hnae_ring *ring); void (*get_rxd_bnum)(u32 bnum_flag, int *out_bnum); -- 2.30.0 ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH V2 net 1/2] net: hns: fix wrong head when modify the tx feature when sending packets 2023-12-04 1:10 ` [PATCH V2 net 1/2] net: hns: fix wrong head when modify the tx feature when sending packets Jijie Shao @ 2023-12-04 10:15 ` Wojciech Drewek 2023-12-04 14:41 ` Jijie Shao 0 siblings, 1 reply; 7+ messages in thread From: Wojciech Drewek @ 2023-12-04 10:15 UTC (permalink / raw) To: Jijie Shao, yisen.zhuang, salil.mehta, davem, edumazet, kuba, pabeni Cc: shenjian15, wangjie125, liuyonglong, netdev, linux-kernel On 04.12.2023 02:10, Jijie Shao wrote: > From: Yonglong Liu <liuyonglong@huawei.com> > > When modify the tx feature, the hns driver will modify the Upon changing the... > maybe_stop_tx() and fill_desc() functions, if the modify happens > during packet sending, will cause the hardware and software > pointers do not match, and the port can not work anymore. > > This patch deletes the maybe_stop_tx() and fill_desc() functions > modification when setting tx feature, and use the skb_is_gro() > to determine use tso functions or non-tso functions when packets > sending. and use the skb_is_gro() to determine which functions to use in the tx path. > > Fixes: 38f616da1c28 ("net:hns: Add support of ethtool TSO set option for Hip06 in HNS") > Signed-off-by: Yonglong Liu <liuyonglong@huawei.com> > Signed-off-by: Jijie Shao <shaojijie@huawei.com> > --- Some commit msg suggestions, other than that: Reviewed-by: Wojciech Drewek <wojciech.drewek@intel.com> > drivers/net/ethernet/hisilicon/hns/hns_enet.c | 53 +++++++++++-------- > drivers/net/ethernet/hisilicon/hns/hns_enet.h | 3 +- > 2 files changed, 33 insertions(+), 23 deletions(-) > > diff --git a/drivers/net/ethernet/hisilicon/hns/hns_enet.c b/drivers/net/ethernet/hisilicon/hns/hns_enet.c > index 0900abf5c508..8a713eed4465 100644 > --- a/drivers/net/ethernet/hisilicon/hns/hns_enet.c > +++ b/drivers/net/ethernet/hisilicon/hns/hns_enet.c > @@ -142,7 +142,8 @@ MODULE_DEVICE_TABLE(acpi, hns_enet_acpi_match); > > static void fill_desc(struct hnae_ring *ring, void *priv, > int size, dma_addr_t dma, int frag_end, > - int buf_num, enum hns_desc_type type, int mtu) > + int buf_num, enum hns_desc_type type, int mtu, > + bool is_gso) > { > struct hnae_desc *desc = &ring->desc[ring->next_to_use]; > struct hnae_desc_cb *desc_cb = &ring->desc_cb[ring->next_to_use]; > @@ -275,6 +276,15 @@ static int hns_nic_maybe_stop_tso( > return 0; > } > > +static int hns_nic_maybe_stop_tx_v2(struct sk_buff **out_skb, int *bnum, > + struct hnae_ring *ring) > +{ > + if (skb_is_gso(*out_skb)) > + return hns_nic_maybe_stop_tso(out_skb, bnum, ring); > + else > + return hns_nic_maybe_stop_tx(out_skb, bnum, ring); > +} > + > static void fill_tso_desc(struct hnae_ring *ring, void *priv, > int size, dma_addr_t dma, int frag_end, > int buf_num, enum hns_desc_type type, int mtu) > @@ -300,6 +310,19 @@ static void fill_tso_desc(struct hnae_ring *ring, void *priv, > mtu); > } > > +static void fill_desc_v2(struct hnae_ring *ring, void *priv, > + int size, dma_addr_t dma, int frag_end, > + int buf_num, enum hns_desc_type type, int mtu, > + bool is_gso) > +{ > + if (is_gso) > + fill_tso_desc(ring, priv, size, dma, frag_end, buf_num, type, > + mtu); > + else > + fill_v2_desc(ring, priv, size, dma, frag_end, buf_num, type, > + mtu); > +} > + > netdev_tx_t hns_nic_net_xmit_hw(struct net_device *ndev, > struct sk_buff *skb, > struct hns_nic_ring_data *ring_data) > @@ -313,6 +336,7 @@ netdev_tx_t hns_nic_net_xmit_hw(struct net_device *ndev, > int seg_num; > dma_addr_t dma; > int size, next_to_use; > + bool is_gso; > int i; > > switch (priv->ops.maybe_stop_tx(&skb, &buf_num, ring)) { > @@ -339,8 +363,9 @@ netdev_tx_t hns_nic_net_xmit_hw(struct net_device *ndev, > ring->stats.sw_err_cnt++; > goto out_err_tx_ok; > } > + is_gso = skb_is_gso(skb); > priv->ops.fill_desc(ring, skb, size, dma, seg_num == 1 ? 1 : 0, > - buf_num, DESC_TYPE_SKB, ndev->mtu); > + buf_num, DESC_TYPE_SKB, ndev->mtu, is_gso); > > /* fill the fragments */ > for (i = 1; i < seg_num; i++) { > @@ -354,7 +379,7 @@ netdev_tx_t hns_nic_net_xmit_hw(struct net_device *ndev, > } > priv->ops.fill_desc(ring, skb_frag_page(frag), size, dma, > seg_num - 1 == i ? 1 : 0, buf_num, > - DESC_TYPE_PAGE, ndev->mtu); > + DESC_TYPE_PAGE, ndev->mtu, is_gso); > } > > /*complete translate all packets*/ > @@ -1776,15 +1801,6 @@ static int hns_nic_set_features(struct net_device *netdev, > netdev_info(netdev, "enet v1 do not support tso!\n"); > break; > default: > - if (features & (NETIF_F_TSO | NETIF_F_TSO6)) { > - priv->ops.fill_desc = fill_tso_desc; > - priv->ops.maybe_stop_tx = hns_nic_maybe_stop_tso; > - /* The chip only support 7*4096 */ > - netif_set_tso_max_size(netdev, 7 * 4096); > - } else { > - priv->ops.fill_desc = fill_v2_desc; > - priv->ops.maybe_stop_tx = hns_nic_maybe_stop_tx; > - } > break; > } > netdev->features = features; > @@ -2159,16 +2175,9 @@ static void hns_nic_set_priv_ops(struct net_device *netdev) > priv->ops.maybe_stop_tx = hns_nic_maybe_stop_tx; > } else { > priv->ops.get_rxd_bnum = get_v2rx_desc_bnum; > - if ((netdev->features & NETIF_F_TSO) || > - (netdev->features & NETIF_F_TSO6)) { > - priv->ops.fill_desc = fill_tso_desc; > - priv->ops.maybe_stop_tx = hns_nic_maybe_stop_tso; > - /* This chip only support 7*4096 */ > - netif_set_tso_max_size(netdev, 7 * 4096); > - } else { > - priv->ops.fill_desc = fill_v2_desc; > - priv->ops.maybe_stop_tx = hns_nic_maybe_stop_tx; > - } > + priv->ops.fill_desc = fill_desc_v2; > + priv->ops.maybe_stop_tx = hns_nic_maybe_stop_tx_v2; > + netif_set_tso_max_size(netdev, 7 * 4096); > /* enable tso when init > * control tso on/off through TSE bit in bd > */ > diff --git a/drivers/net/ethernet/hisilicon/hns/hns_enet.h b/drivers/net/ethernet/hisilicon/hns/hns_enet.h > index ffa9d6573f54..3f3ee032f631 100644 > --- a/drivers/net/ethernet/hisilicon/hns/hns_enet.h > +++ b/drivers/net/ethernet/hisilicon/hns/hns_enet.h > @@ -44,7 +44,8 @@ struct hns_nic_ring_data { > struct hns_nic_ops { > void (*fill_desc)(struct hnae_ring *ring, void *priv, > int size, dma_addr_t dma, int frag_end, > - int buf_num, enum hns_desc_type type, int mtu); > + int buf_num, enum hns_desc_type type, int mtu, > + bool is_gso); > int (*maybe_stop_tx)(struct sk_buff **out_skb, > int *bnum, struct hnae_ring *ring); > void (*get_rxd_bnum)(u32 bnum_flag, int *out_bnum); ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH V2 net 1/2] net: hns: fix wrong head when modify the tx feature when sending packets 2023-12-04 10:15 ` Wojciech Drewek @ 2023-12-04 14:41 ` Jijie Shao 0 siblings, 0 replies; 7+ messages in thread From: Jijie Shao @ 2023-12-04 14:41 UTC (permalink / raw) To: Wojciech Drewek, yisen.zhuang, salil.mehta, davem, edumazet, kuba, pabeni Cc: shaojijie, shenjian15, wangjie125, liuyonglong, netdev, linux-kernel on 2023/12/4 18:15, Wojciech Drewek wrote: > > On 04.12.2023 02:10, Jijie Shao wrote: >> From: Yonglong Liu <liuyonglong@huawei.com> >> >> When modify the tx feature, the hns driver will modify the > Upon changing the... > >> maybe_stop_tx() and fill_desc() functions, if the modify happens >> during packet sending, will cause the hardware and software >> pointers do not match, and the port can not work anymore. >> >> This patch deletes the maybe_stop_tx() and fill_desc() functions >> modification when setting tx feature, and use the skb_is_gro() >> to determine use tso functions or non-tso functions when packets >> sending. > and use the skb_is_gro() to determine which functions to use in the tx path. >> Fixes: 38f616da1c28 ("net:hns: Add support of ethtool TSO set option for Hip06 in HNS") >> Signed-off-by: Yonglong Liu <liuyonglong@huawei.com> >> Signed-off-by: Jijie Shao <shaojijie@huawei.com> >> --- > Some commit msg suggestions, other than that: > Reviewed-by: Wojciech Drewek <wojciech.drewek@intel.com> > Thanks, commit msg is refined in v3 Jijie ^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH V2 net 2/2] net: hns: fix fake link up on xge port 2023-12-04 1:10 [PATCH V2 net 0/2] There are some bugfix for the HNS ethernet driver Jijie Shao 2023-12-04 1:10 ` [PATCH V2 net 1/2] net: hns: fix wrong head when modify the tx feature when sending packets Jijie Shao @ 2023-12-04 1:10 ` Jijie Shao 2023-12-04 10:19 ` Wojciech Drewek 1 sibling, 1 reply; 7+ messages in thread From: Jijie Shao @ 2023-12-04 1:10 UTC (permalink / raw) To: yisen.zhuang, salil.mehta, davem, edumazet, kuba, pabeni Cc: shenjian15, wangjie125, liuyonglong, shaojijie, netdev, linux-kernel From: Yonglong Liu <liuyonglong@huawei.com> If a xge port just connect with an optical module and no fiber, it may have a fake link up because there may be interference on the hardware. This patch adds an anti-shake to avoid the problem. And the time of anti-shake is base on tests. Fixes: b917078c1c10 ("net: hns: Add ACPI support to check SFP present") Signed-off-by: Yonglong Liu <liuyonglong@huawei.com> Signed-off-by: Jijie Shao <shaojijie@huawei.com> --- .../net/ethernet/hisilicon/hns/hns_dsaf_mac.c | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/drivers/net/ethernet/hisilicon/hns/hns_dsaf_mac.c b/drivers/net/ethernet/hisilicon/hns/hns_dsaf_mac.c index 928d934cb21a..c3abb14edd51 100644 --- a/drivers/net/ethernet/hisilicon/hns/hns_dsaf_mac.c +++ b/drivers/net/ethernet/hisilicon/hns/hns_dsaf_mac.c @@ -66,6 +66,27 @@ static enum mac_mode hns_get_enet_interface(const struct hns_mac_cb *mac_cb) } } +static void hns_mac_link_anti_shake(struct mac_driver *mac_ctrl_drv, + u32 *link_status) +{ +#define HNS_MAC_LINK_WAIT_TIME 5 +#define HNS_MAC_LINK_WAIT_CNT 40 + + int i; + + if (!mac_ctrl_drv->get_link_status) { + *link_status = 0; + return; + } + + for (i = 0; i < HNS_MAC_LINK_WAIT_CNT; i++) { + msleep(HNS_MAC_LINK_WAIT_TIME); + mac_ctrl_drv->get_link_status(mac_ctrl_drv, link_status); + if (!*link_status) + break; + } +} + void hns_mac_get_link_status(struct hns_mac_cb *mac_cb, u32 *link_status) { struct mac_driver *mac_ctrl_drv; @@ -83,6 +104,14 @@ void hns_mac_get_link_status(struct hns_mac_cb *mac_cb, u32 *link_status) &sfp_prsnt); if (!ret) *link_status = *link_status && sfp_prsnt; + + /* for FIBER port, it may have a fake link up. + * when the link status changes from down to up, we need to do + * anti-shake. the anti-shake time is base on tests. + * only FIBER port need to do this. + */ + if (*link_status && !mac_cb->link) + hns_mac_link_anti_shake(mac_ctrl_drv, link_status); } mac_cb->link = *link_status; -- 2.30.0 ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH V2 net 2/2] net: hns: fix fake link up on xge port 2023-12-04 1:10 ` [PATCH V2 net 2/2] net: hns: fix fake link up on xge port Jijie Shao @ 2023-12-04 10:19 ` Wojciech Drewek 2023-12-04 14:43 ` Jijie Shao 0 siblings, 1 reply; 7+ messages in thread From: Wojciech Drewek @ 2023-12-04 10:19 UTC (permalink / raw) To: Jijie Shao, yisen.zhuang, salil.mehta, davem, edumazet, kuba, pabeni Cc: shenjian15, wangjie125, liuyonglong, netdev, linux-kernel On 04.12.2023 02:10, Jijie Shao wrote: > From: Yonglong Liu <liuyonglong@huawei.com> > > If a xge port just connect with an optical module and no fiber, > it may have a fake link up because there may be interference on > the hardware. This patch adds an anti-shake to avoid the problem. > And the time of anti-shake is base on tests. > > Fixes: b917078c1c10 ("net: hns: Add ACPI support to check SFP present") > Signed-off-by: Yonglong Liu <liuyonglong@huawei.com> > Signed-off-by: Jijie Shao <shaojijie@huawei.com> > --- > .../net/ethernet/hisilicon/hns/hns_dsaf_mac.c | 29 +++++++++++++++++++ > 1 file changed, 29 insertions(+) > > diff --git a/drivers/net/ethernet/hisilicon/hns/hns_dsaf_mac.c b/drivers/net/ethernet/hisilicon/hns/hns_dsaf_mac.c > index 928d934cb21a..c3abb14edd51 100644 > --- a/drivers/net/ethernet/hisilicon/hns/hns_dsaf_mac.c > +++ b/drivers/net/ethernet/hisilicon/hns/hns_dsaf_mac.c > @@ -66,6 +66,27 @@ static enum mac_mode hns_get_enet_interface(const struct hns_mac_cb *mac_cb) > } > } > > +static void hns_mac_link_anti_shake(struct mac_driver *mac_ctrl_drv, > + u32 *link_status) > +{ It would be cleaner to return the link status than using output arg IMO > +#define HNS_MAC_LINK_WAIT_TIME 5 > +#define HNS_MAC_LINK_WAIT_CNT 40 > + > + int i; > + > + if (!mac_ctrl_drv->get_link_status) { > + *link_status = 0; > + return; > + } > + > + for (i = 0; i < HNS_MAC_LINK_WAIT_CNT; i++) { > + msleep(HNS_MAC_LINK_WAIT_TIME); > + mac_ctrl_drv->get_link_status(mac_ctrl_drv, link_status); > + if (!*link_status) > + break; > + } > +} > + > void hns_mac_get_link_status(struct hns_mac_cb *mac_cb, u32 *link_status) > { > struct mac_driver *mac_ctrl_drv; > @@ -83,6 +104,14 @@ void hns_mac_get_link_status(struct hns_mac_cb *mac_cb, u32 *link_status) > &sfp_prsnt); > if (!ret) > *link_status = *link_status && sfp_prsnt; > + > + /* for FIBER port, it may have a fake link up. > + * when the link status changes from down to up, we need to do > + * anti-shake. the anti-shake time is base on tests. > + * only FIBER port need to do this. > + */ > + if (*link_status && !mac_cb->link) > + hns_mac_link_anti_shake(mac_ctrl_drv, link_status); > } > > mac_cb->link = *link_status; ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH V2 net 2/2] net: hns: fix fake link up on xge port 2023-12-04 10:19 ` Wojciech Drewek @ 2023-12-04 14:43 ` Jijie Shao 0 siblings, 0 replies; 7+ messages in thread From: Jijie Shao @ 2023-12-04 14:43 UTC (permalink / raw) To: Wojciech Drewek, yisen.zhuang, salil.mehta, davem, edumazet, kuba, pabeni Cc: shaojijie, shenjian15, wangjie125, liuyonglong, netdev, linux-kernel on 2023/12/4 18:19, Wojciech Drewek wrote: > > On 04.12.2023 02:10, Jijie Shao wrote: >> >> +static void hns_mac_link_anti_shake(struct mac_driver *mac_ctrl_drv, >> + u32 *link_status) >> +{ > It would be cleaner to return the link status than using output arg IMO > Yes, it's a good suggestion, and this is modified in v3 ^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2023-12-04 14:43 UTC | newest] Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2023-12-04 1:10 [PATCH V2 net 0/2] There are some bugfix for the HNS ethernet driver Jijie Shao 2023-12-04 1:10 ` [PATCH V2 net 1/2] net: hns: fix wrong head when modify the tx feature when sending packets Jijie Shao 2023-12-04 10:15 ` Wojciech Drewek 2023-12-04 14:41 ` Jijie Shao 2023-12-04 1:10 ` [PATCH V2 net 2/2] net: hns: fix fake link up on xge port Jijie Shao 2023-12-04 10:19 ` Wojciech Drewek 2023-12-04 14:43 ` Jijie Shao
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®