Skip to content

Commit 2861952

Browse files
committed
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
Pull networking fixes from David Miller: 1) Must perform TXQ teardown before unregistering interfaces in mac80211, from Toke Høiland-Jørgensen. 2) Don't allow creating mac80211_hwsim with less than one channel, from Johannes Berg. 3) Division by zero in cfg80211, fix from Johannes Berg. 4) Fix endian issue in tipc, from Haiqing Bai. 5) BPF sockmap use-after-free fixes from Daniel Borkmann. 6) Spectre-v1 in mac80211_hwsim, from Jinbum Park. 7) Missing rhashtable_walk_exit() in tipc, from Cong Wang. 8) Revert kvzalloc() conversion of AF_PACKET, it breaks mmap() when kvzalloc() tries to use kmalloc() pages. From Eric Dumazet. 9) Fix deadlock in hv_netvsc, from Dexuan Cui. 10) Do not restart timewait timer on RST, from Florian Westphal. 11) Fix double lwstate refcount grab in ipv6, from Alexey Kodanev. 12) Unsolicit report count handling is off-by-one, fix from Hangbin Liu. 13) Sleep-in-atomic in cadence driver, from Jia-Ju Bai. 14) Respect ttl-inherit in ip6 tunnel driver, from Hangbin Liu. 15) Use-after-free in act_ife, fix from Cong Wang. 16) Missing hold to meta module in act_ife, from Vlad Buslov. * git://git.kernel.org/pub/scm/linux/kernel/git/davem/net: (91 commits) net: phy: sfp: Handle unimplemented hwmon limits and alarms net: sched: action_ife: take reference to meta module act_ife: fix a potential use-after-free net/mlx5: Fix SQ offset in QPs with small RQ tipc: correct spelling errors for tipc_topsrv_queue_evt() comments tipc: correct spelling errors for struct tipc_bc_base's comment bnxt_en: Do not adjust max_cp_rings by the ones used by RDMA. bnxt_en: Clean up unused functions. bnxt_en: Fix firmware signaled resource change logic in open. sctp: not traverse asoc trans list if non-ipv6 trans exists for ipv6_flowlabel sctp: fix invalid reference to the index variable of the iterator net/ibm/emac: wrong emac_calc_base call was used by typo net: sched: null actions array pointer before releasing action vhost: fix VHOST_GET_BACKEND_FEATURES ioctl request definition r8169: add support for NCube 8168 network card ip6_tunnel: respect ttl inherit for ip6tnl mac80211: shorten the IBSS debug messages mac80211: don't Tx a deauth frame if the AP forbade Tx mac80211: Fix station bandwidth setting after channel switch mac80211: fix a race between restart and CSA flows ...
2 parents 60c1f89 + a33710b commit 2861952

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

89 files changed

+941
-452
lines changed

Documentation/devicetree/bindings/net/cpsw.txt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,10 @@ Required properties:
1919
- slaves : Specifies number for slaves
2020
- active_slave : Specifies the slave to use for time stamping,
2121
ethtool and SIOCGMIIPHY
22+
- cpsw-phy-sel : Specifies the phandle to the CPSW phy mode selection
23+
device. See also cpsw-phy-sel.txt for it's binding.
24+
Note that in legacy cases cpsw-phy-sel may be
25+
a child device instead of a phandle.
2226

2327
Optional properties:
2428
- ti,hwmods : Must be "cpgmac0"
@@ -75,6 +79,7 @@ Examples:
7579
cpts_clock_mult = <0x80000000>;
7680
cpts_clock_shift = <29>;
7781
syscon = <&cm>;
82+
cpsw-phy-sel = <&phy_sel>;
7883
cpsw_emac0: slave@0 {
7984
phy_id = <&davinci_mdio>, <0>;
8085
phy-mode = "rgmii-txid";
@@ -103,6 +108,7 @@ Examples:
103108
cpts_clock_mult = <0x80000000>;
104109
cpts_clock_shift = <29>;
105110
syscon = <&cm>;
111+
cpsw-phy-sel = <&phy_sel>;
106112
cpsw_emac0: slave@0 {
107113
phy_id = <&davinci_mdio>, <0>;
108114
phy-mode = "rgmii-txid";

Documentation/devicetree/bindings/net/sh_eth.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ Required properties:
1616
"renesas,ether-r8a7794" if the device is a part of R8A7794 SoC.
1717
"renesas,gether-r8a77980" if the device is a part of R8A77980 SoC.
1818
"renesas,ether-r7s72100" if the device is a part of R7S72100 SoC.
19+
"renesas,ether-r7s9210" if the device is a part of R7S9210 SoC.
1920
"renesas,rcar-gen1-ether" for a generic R-Car Gen1 device.
2021
"renesas,rcar-gen2-ether" for a generic R-Car Gen2 or RZ/G1
2122
device.

drivers/net/ethernet/broadcom/bnxt/bnxt.c

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5913,12 +5913,12 @@ unsigned int bnxt_get_max_func_cp_rings(struct bnxt *bp)
59135913
return bp->hw_resc.max_cp_rings;
59145914
}
59155915

5916-
void bnxt_set_max_func_cp_rings(struct bnxt *bp, unsigned int max)
5916+
unsigned int bnxt_get_max_func_cp_rings_for_en(struct bnxt *bp)
59175917
{
5918-
bp->hw_resc.max_cp_rings = max;
5918+
return bp->hw_resc.max_cp_rings - bnxt_get_ulp_msix_num(bp);
59195919
}
59205920

5921-
unsigned int bnxt_get_max_func_irqs(struct bnxt *bp)
5921+
static unsigned int bnxt_get_max_func_irqs(struct bnxt *bp)
59225922
{
59235923
struct bnxt_hw_resc *hw_resc = &bp->hw_resc;
59245924

@@ -6684,6 +6684,8 @@ static int bnxt_hwrm_if_change(struct bnxt *bp, bool up)
66846684
hw_resc->resv_rx_rings = 0;
66856685
hw_resc->resv_hw_ring_grps = 0;
66866686
hw_resc->resv_vnics = 0;
6687+
bp->tx_nr_rings = 0;
6688+
bp->rx_nr_rings = 0;
66876689
}
66886690
return rc;
66896691
}
@@ -8629,7 +8631,8 @@ static void _bnxt_get_max_rings(struct bnxt *bp, int *max_rx, int *max_tx,
86298631

86308632
*max_tx = hw_resc->max_tx_rings;
86318633
*max_rx = hw_resc->max_rx_rings;
8632-
*max_cp = min_t(int, hw_resc->max_irqs, hw_resc->max_cp_rings);
8634+
*max_cp = min_t(int, bnxt_get_max_func_cp_rings_for_en(bp),
8635+
hw_resc->max_irqs);
86338636
*max_cp = min_t(int, *max_cp, hw_resc->max_stat_ctxs);
86348637
max_ring_grps = hw_resc->max_hw_ring_grps;
86358638
if (BNXT_CHIP_TYPE_NITRO_A0(bp) && BNXT_PF(bp)) {
@@ -8769,20 +8772,25 @@ static int bnxt_init_dflt_ring_mode(struct bnxt *bp)
87698772
if (bp->tx_nr_rings)
87708773
return 0;
87718774

8775+
bnxt_ulp_irq_stop(bp);
8776+
bnxt_clear_int_mode(bp);
87728777
rc = bnxt_set_dflt_rings(bp, true);
87738778
if (rc) {
87748779
netdev_err(bp->dev, "Not enough rings available.\n");
8775-
return rc;
8780+
goto init_dflt_ring_err;
87768781
}
87778782
rc = bnxt_init_int_mode(bp);
87788783
if (rc)
8779-
return rc;
8784+
goto init_dflt_ring_err;
8785+
87808786
bp->tx_nr_rings_per_tc = bp->tx_nr_rings;
87818787
if (bnxt_rfs_supported(bp) && bnxt_rfs_capable(bp)) {
87828788
bp->flags |= BNXT_FLAG_RFS;
87838789
bp->dev->features |= NETIF_F_NTUPLE;
87848790
}
8785-
return 0;
8791+
init_dflt_ring_err:
8792+
bnxt_ulp_irq_restart(bp, rc);
8793+
return rc;
87868794
}
87878795

87888796
int bnxt_restore_pf_fw_resources(struct bnxt *bp)

drivers/net/ethernet/broadcom/bnxt/bnxt.h

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1481,8 +1481,7 @@ int bnxt_hwrm_set_coal(struct bnxt *);
14811481
unsigned int bnxt_get_max_func_stat_ctxs(struct bnxt *bp);
14821482
void bnxt_set_max_func_stat_ctxs(struct bnxt *bp, unsigned int max);
14831483
unsigned int bnxt_get_max_func_cp_rings(struct bnxt *bp);
1484-
void bnxt_set_max_func_cp_rings(struct bnxt *bp, unsigned int max);
1485-
unsigned int bnxt_get_max_func_irqs(struct bnxt *bp);
1484+
unsigned int bnxt_get_max_func_cp_rings_for_en(struct bnxt *bp);
14861485
int bnxt_get_avail_msix(struct bnxt *bp, int num);
14871486
int bnxt_reserve_rings(struct bnxt *bp);
14881487
void bnxt_tx_disable(struct bnxt *bp);

drivers/net/ethernet/broadcom/bnxt/bnxt_sriov.c

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -451,7 +451,7 @@ static int bnxt_hwrm_func_vf_resc_cfg(struct bnxt *bp, int num_vfs)
451451

452452
bnxt_hwrm_cmd_hdr_init(bp, &req, HWRM_FUNC_VF_RESOURCE_CFG, -1, -1);
453453

454-
vf_cp_rings = hw_resc->max_cp_rings - bp->cp_nr_rings;
454+
vf_cp_rings = bnxt_get_max_func_cp_rings_for_en(bp) - bp->cp_nr_rings;
455455
vf_stat_ctx = hw_resc->max_stat_ctxs - bp->num_stat_ctxs;
456456
if (bp->flags & BNXT_FLAG_AGG_RINGS)
457457
vf_rx_rings = hw_resc->max_rx_rings - bp->rx_nr_rings * 2;
@@ -549,7 +549,8 @@ static int bnxt_hwrm_func_cfg(struct bnxt *bp, int num_vfs)
549549
max_stat_ctxs = hw_resc->max_stat_ctxs;
550550

551551
/* Remaining rings are distributed equally amongs VF's for now */
552-
vf_cp_rings = (hw_resc->max_cp_rings - bp->cp_nr_rings) / num_vfs;
552+
vf_cp_rings = (bnxt_get_max_func_cp_rings_for_en(bp) -
553+
bp->cp_nr_rings) / num_vfs;
553554
vf_stat_ctx = (max_stat_ctxs - bp->num_stat_ctxs) / num_vfs;
554555
if (bp->flags & BNXT_FLAG_AGG_RINGS)
555556
vf_rx_rings = (hw_resc->max_rx_rings - bp->rx_nr_rings * 2) /
@@ -643,7 +644,7 @@ static int bnxt_sriov_enable(struct bnxt *bp, int *num_vfs)
643644
*/
644645
vfs_supported = *num_vfs;
645646

646-
avail_cp = hw_resc->max_cp_rings - bp->cp_nr_rings;
647+
avail_cp = bnxt_get_max_func_cp_rings_for_en(bp) - bp->cp_nr_rings;
647648
avail_stat = hw_resc->max_stat_ctxs - bp->num_stat_ctxs;
648649
avail_cp = min_t(int, avail_cp, avail_stat);
649650

drivers/net/ethernet/broadcom/bnxt/bnxt_ulp.c

Lines changed: 0 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -169,7 +169,6 @@ static int bnxt_req_msix_vecs(struct bnxt_en_dev *edev, int ulp_id,
169169
edev->ulp_tbl[ulp_id].msix_requested = avail_msix;
170170
}
171171
bnxt_fill_msix_vecs(bp, ent);
172-
bnxt_set_max_func_cp_rings(bp, max_cp_rings - avail_msix);
173172
edev->flags |= BNXT_EN_FLAG_MSIX_REQUESTED;
174173
return avail_msix;
175174
}
@@ -178,7 +177,6 @@ static int bnxt_free_msix_vecs(struct bnxt_en_dev *edev, int ulp_id)
178177
{
179178
struct net_device *dev = edev->net;
180179
struct bnxt *bp = netdev_priv(dev);
181-
int max_cp_rings, msix_requested;
182180

183181
ASSERT_RTNL();
184182
if (ulp_id != BNXT_ROCE_ULP)
@@ -187,9 +185,6 @@ static int bnxt_free_msix_vecs(struct bnxt_en_dev *edev, int ulp_id)
187185
if (!(edev->flags & BNXT_EN_FLAG_MSIX_REQUESTED))
188186
return 0;
189187

190-
max_cp_rings = bnxt_get_max_func_cp_rings(bp);
191-
msix_requested = edev->ulp_tbl[ulp_id].msix_requested;
192-
bnxt_set_max_func_cp_rings(bp, max_cp_rings + msix_requested);
193188
edev->ulp_tbl[ulp_id].msix_requested = 0;
194189
edev->flags &= ~BNXT_EN_FLAG_MSIX_REQUESTED;
195190
if (netif_running(dev)) {
@@ -220,21 +215,6 @@ int bnxt_get_ulp_msix_base(struct bnxt *bp)
220215
return 0;
221216
}
222217

223-
void bnxt_subtract_ulp_resources(struct bnxt *bp, int ulp_id)
224-
{
225-
ASSERT_RTNL();
226-
if (bnxt_ulp_registered(bp->edev, ulp_id)) {
227-
struct bnxt_en_dev *edev = bp->edev;
228-
unsigned int msix_req, max;
229-
230-
msix_req = edev->ulp_tbl[ulp_id].msix_requested;
231-
max = bnxt_get_max_func_cp_rings(bp);
232-
bnxt_set_max_func_cp_rings(bp, max - msix_req);
233-
max = bnxt_get_max_func_stat_ctxs(bp);
234-
bnxt_set_max_func_stat_ctxs(bp, max - 1);
235-
}
236-
}
237-
238218
static int bnxt_send_msg(struct bnxt_en_dev *edev, int ulp_id,
239219
struct bnxt_fw_msg *fw_msg)
240220
{

drivers/net/ethernet/broadcom/bnxt/bnxt_ulp.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,6 @@ static inline bool bnxt_ulp_registered(struct bnxt_en_dev *edev, int ulp_id)
9090

9191
int bnxt_get_ulp_msix_num(struct bnxt *bp);
9292
int bnxt_get_ulp_msix_base(struct bnxt *bp);
93-
void bnxt_subtract_ulp_resources(struct bnxt *bp, int ulp_id);
9493
void bnxt_ulp_stop(struct bnxt *bp);
9594
void bnxt_ulp_start(struct bnxt *bp);
9695
void bnxt_ulp_sriov_cfg(struct bnxt *bp, int num_vfs);

drivers/net/ethernet/broadcom/genet/bcmgenet.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -186,6 +186,9 @@ struct bcmgenet_mib_counters {
186186
#define UMAC_MAC1 0x010
187187
#define UMAC_MAX_FRAME_LEN 0x014
188188

189+
#define UMAC_MODE 0x44
190+
#define MODE_LINK_STATUS (1 << 5)
191+
189192
#define UMAC_EEE_CTRL 0x064
190193
#define EN_LPI_RX_PAUSE (1 << 0)
191194
#define EN_LPI_TX_PFC (1 << 1)

drivers/net/ethernet/broadcom/genet/bcmmii.c

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -115,8 +115,14 @@ void bcmgenet_mii_setup(struct net_device *dev)
115115
static int bcmgenet_fixed_phy_link_update(struct net_device *dev,
116116
struct fixed_phy_status *status)
117117
{
118-
if (dev && dev->phydev && status)
119-
status->link = dev->phydev->link;
118+
struct bcmgenet_priv *priv;
119+
u32 reg;
120+
121+
if (dev && dev->phydev && status) {
122+
priv = netdev_priv(dev);
123+
reg = bcmgenet_umac_readl(priv, UMAC_MODE);
124+
status->link = !!(reg & MODE_LINK_STATUS);
125+
}
120126

121127
return 0;
122128
}

drivers/net/ethernet/cadence/macb_main.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -649,7 +649,7 @@ static int macb_halt_tx(struct macb *bp)
649649
if (!(status & MACB_BIT(TGO)))
650650
return 0;
651651

652-
usleep_range(10, 250);
652+
udelay(250);
653653
} while (time_before(halt_time, timeout));
654654

655655
return -ETIMEDOUT;

drivers/net/ethernet/hisilicon/hns/hnae.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -486,6 +486,8 @@ struct hnae_ae_ops {
486486
u8 *auto_neg, u16 *speed, u8 *duplex);
487487
void (*toggle_ring_irq)(struct hnae_ring *ring, u32 val);
488488
void (*adjust_link)(struct hnae_handle *handle, int speed, int duplex);
489+
bool (*need_adjust_link)(struct hnae_handle *handle,
490+
int speed, int duplex);
489491
int (*set_loopback)(struct hnae_handle *handle,
490492
enum hnae_loop loop_mode, int en);
491493
void (*get_ring_bdnum_limit)(struct hnae_queue *queue,

drivers/net/ethernet/hisilicon/hns/hns_ae_adapt.c

Lines changed: 66 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,41 @@ static void hns_ae_put_handle(struct hnae_handle *handle)
155155
hns_ae_get_ring_pair(handle->qs[i])->used_by_vf = 0;
156156
}
157157

158+
static int hns_ae_wait_flow_down(struct hnae_handle *handle)
159+
{
160+
struct dsaf_device *dsaf_dev;
161+
struct hns_ppe_cb *ppe_cb;
162+
struct hnae_vf_cb *vf_cb;
163+
int ret;
164+
int i;
165+
166+
for (i = 0; i < handle->q_num; i++) {
167+
ret = hns_rcb_wait_tx_ring_clean(handle->qs[i]);
168+
if (ret)
169+
return ret;
170+
}
171+
172+
ppe_cb = hns_get_ppe_cb(handle);
173+
ret = hns_ppe_wait_tx_fifo_clean(ppe_cb);
174+
if (ret)
175+
return ret;
176+
177+
dsaf_dev = hns_ae_get_dsaf_dev(handle->dev);
178+
if (!dsaf_dev)
179+
return -EINVAL;
180+
ret = hns_dsaf_wait_pkt_clean(dsaf_dev, handle->dport_id);
181+
if (ret)
182+
return ret;
183+
184+
vf_cb = hns_ae_get_vf_cb(handle);
185+
ret = hns_mac_wait_fifo_clean(vf_cb->mac_cb);
186+
if (ret)
187+
return ret;
188+
189+
mdelay(10);
190+
return 0;
191+
}
192+
158193
static void hns_ae_ring_enable_all(struct hnae_handle *handle, int val)
159194
{
160195
int q_num = handle->q_num;
@@ -399,12 +434,41 @@ static int hns_ae_get_mac_info(struct hnae_handle *handle,
399434
return hns_mac_get_port_info(mac_cb, auto_neg, speed, duplex);
400435
}
401436

437+
static bool hns_ae_need_adjust_link(struct hnae_handle *handle, int speed,
438+
int duplex)
439+
{
440+
struct hns_mac_cb *mac_cb = hns_get_mac_cb(handle);
441+
442+
return hns_mac_need_adjust_link(mac_cb, speed, duplex);
443+
}
444+
402445
static void hns_ae_adjust_link(struct hnae_handle *handle, int speed,
403446
int duplex)
404447
{
405448
struct hns_mac_cb *mac_cb = hns_get_mac_cb(handle);
406449

407-
hns_mac_adjust_link(mac_cb, speed, duplex);
450+
switch (mac_cb->dsaf_dev->dsaf_ver) {
451+
case AE_VERSION_1:
452+
hns_mac_adjust_link(mac_cb, speed, duplex);
453+
break;
454+
455+
case AE_VERSION_2:
456+
/* chip need to clear all pkt inside */
457+
hns_mac_disable(mac_cb, MAC_COMM_MODE_RX);
458+
if (hns_ae_wait_flow_down(handle)) {
459+
hns_mac_enable(mac_cb, MAC_COMM_MODE_RX);
460+
break;
461+
}
462+
463+
hns_mac_adjust_link(mac_cb, speed, duplex);
464+
hns_mac_enable(mac_cb, MAC_COMM_MODE_RX);
465+
break;
466+
467+
default:
468+
break;
469+
}
470+
471+
return;
408472
}
409473

410474
static void hns_ae_get_ring_bdnum_limit(struct hnae_queue *queue,
@@ -902,6 +966,7 @@ static struct hnae_ae_ops hns_dsaf_ops = {
902966
.get_status = hns_ae_get_link_status,
903967
.get_info = hns_ae_get_mac_info,
904968
.adjust_link = hns_ae_adjust_link,
969+
.need_adjust_link = hns_ae_need_adjust_link,
905970
.set_loopback = hns_ae_config_loopback,
906971
.get_ring_bdnum_limit = hns_ae_get_ring_bdnum_limit,
907972
.get_pauseparam = hns_ae_get_pauseparam,

drivers/net/ethernet/hisilicon/hns/hns_dsaf_gmac.c

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -257,6 +257,16 @@ static void hns_gmac_get_pausefrm_cfg(void *mac_drv, u32 *rx_pause_en,
257257
*tx_pause_en = dsaf_get_bit(pause_en, GMAC_PAUSE_EN_TX_FDFC_B);
258258
}
259259

260+
static bool hns_gmac_need_adjust_link(void *mac_drv, enum mac_speed speed,
261+
int duplex)
262+
{
263+
struct mac_driver *drv = (struct mac_driver *)mac_drv;
264+
struct hns_mac_cb *mac_cb = drv->mac_cb;
265+
266+
return (mac_cb->speed != speed) ||
267+
(mac_cb->half_duplex == duplex);
268+
}
269+
260270
static int hns_gmac_adjust_link(void *mac_drv, enum mac_speed speed,
261271
u32 full_duplex)
262272
{
@@ -309,6 +319,30 @@ static void hns_gmac_set_promisc(void *mac_drv, u8 en)
309319
hns_gmac_set_uc_match(mac_drv, en);
310320
}
311321

322+
int hns_gmac_wait_fifo_clean(void *mac_drv)
323+
{
324+
struct mac_driver *drv = (struct mac_driver *)mac_drv;
325+
int wait_cnt;
326+
u32 val;
327+
328+
wait_cnt = 0;
329+
while (wait_cnt++ < HNS_MAX_WAIT_CNT) {
330+
val = dsaf_read_dev(drv, GMAC_FIFO_STATE_REG);
331+
/* bit5~bit0 is not send complete pkts */
332+
if ((val & 0x3f) == 0)
333+
break;
334+
usleep_range(100, 200);
335+
}
336+
337+
if (wait_cnt >= HNS_MAX_WAIT_CNT) {
338+
dev_err(drv->dev,
339+
"hns ge %d fifo was not idle.\n", drv->mac_id);
340+
return -EBUSY;
341+
}
342+
343+
return 0;
344+
}
345+
312346
static void hns_gmac_init(void *mac_drv)
313347
{
314348
u32 port;
@@ -690,6 +724,7 @@ void *hns_gmac_config(struct hns_mac_cb *mac_cb, struct mac_params *mac_param)
690724
mac_drv->mac_disable = hns_gmac_disable;
691725
mac_drv->mac_free = hns_gmac_free;
692726
mac_drv->adjust_link = hns_gmac_adjust_link;
727+
mac_drv->need_adjust_link = hns_gmac_need_adjust_link;
693728
mac_drv->set_tx_auto_pause_frames = hns_gmac_set_tx_auto_pause_frames;
694729
mac_drv->config_max_frame_length = hns_gmac_config_max_frame_length;
695730
mac_drv->mac_pausefrm_cfg = hns_gmac_pause_frm_cfg;
@@ -717,6 +752,7 @@ void *hns_gmac_config(struct hns_mac_cb *mac_cb, struct mac_params *mac_param)
717752
mac_drv->get_strings = hns_gmac_get_strings;
718753
mac_drv->update_stats = hns_gmac_update_stats;
719754
mac_drv->set_promiscuous = hns_gmac_set_promisc;
755+
mac_drv->wait_fifo_clean = hns_gmac_wait_fifo_clean;
720756

721757
return (void *)mac_drv;
722758
}

0 commit comments

Comments
 (0)