|
|
@@ -5253,13 +5253,8 @@ static int __bnxt_open_nic(struct bnxt *bp, bool irq_re_init, bool link_re_init)
|
|
|
netdev_warn(bp->dev, "failed to update phy settings\n");
|
|
|
}
|
|
|
|
|
|
- if (irq_re_init) {
|
|
|
+ if (irq_re_init)
|
|
|
udp_tunnel_get_rx_info(bp->dev);
|
|
|
- if (!bnxt_hwrm_tunnel_dst_port_alloc(
|
|
|
- bp, htons(0x17c1),
|
|
|
- TUNNEL_DST_PORT_FREE_REQ_TUNNEL_TYPE_GENEVE))
|
|
|
- bp->nge_port_cnt = 1;
|
|
|
- }
|
|
|
|
|
|
set_bit(BNXT_STATE_OPEN, &bp->state);
|
|
|
bnxt_enable_int(bp);
|
|
|
@@ -5877,6 +5872,15 @@ static void bnxt_sp_task(struct work_struct *work)
|
|
|
bnxt_hwrm_tunnel_dst_port_free(
|
|
|
bp, TUNNEL_DST_PORT_FREE_REQ_TUNNEL_TYPE_VXLAN);
|
|
|
}
|
|
|
+ if (test_and_clear_bit(BNXT_GENEVE_ADD_PORT_SP_EVENT, &bp->sp_event)) {
|
|
|
+ bnxt_hwrm_tunnel_dst_port_alloc(
|
|
|
+ bp, bp->nge_port,
|
|
|
+ TUNNEL_DST_PORT_FREE_REQ_TUNNEL_TYPE_GENEVE);
|
|
|
+ }
|
|
|
+ if (test_and_clear_bit(BNXT_GENEVE_DEL_PORT_SP_EVENT, &bp->sp_event)) {
|
|
|
+ bnxt_hwrm_tunnel_dst_port_free(
|
|
|
+ bp, TUNNEL_DST_PORT_FREE_REQ_TUNNEL_TYPE_GENEVE);
|
|
|
+ }
|
|
|
if (test_and_clear_bit(BNXT_RESET_TASK_SP_EVENT, &bp->sp_event))
|
|
|
bnxt_reset(bp, false);
|
|
|
|
|
|
@@ -6269,6 +6273,16 @@ static void bnxt_udp_tunnel_add(struct net_device *dev,
|
|
|
schedule_work(&bp->sp_task);
|
|
|
}
|
|
|
break;
|
|
|
+ case UDP_TUNNEL_TYPE_GENEVE:
|
|
|
+ if (bp->nge_port_cnt && bp->nge_port != ti->port)
|
|
|
+ return;
|
|
|
+
|
|
|
+ bp->nge_port_cnt++;
|
|
|
+ if (bp->nge_port_cnt == 1) {
|
|
|
+ bp->nge_port = ti->port;
|
|
|
+ set_bit(BNXT_GENEVE_ADD_PORT_SP_EVENT, &bp->sp_event);
|
|
|
+ }
|
|
|
+ break;
|
|
|
default:
|
|
|
return;
|
|
|
}
|
|
|
@@ -6298,6 +6312,16 @@ static void bnxt_udp_tunnel_del(struct net_device *dev,
|
|
|
|
|
|
set_bit(BNXT_VXLAN_DEL_PORT_SP_EVENT, &bp->sp_event);
|
|
|
break;
|
|
|
+ case UDP_TUNNEL_TYPE_GENEVE:
|
|
|
+ if (!bp->nge_port_cnt || bp->nge_port != ti->port)
|
|
|
+ return;
|
|
|
+ bp->nge_port_cnt--;
|
|
|
+
|
|
|
+ if (bp->nge_port_cnt != 0)
|
|
|
+ return;
|
|
|
+
|
|
|
+ set_bit(BNXT_GENEVE_DEL_PORT_SP_EVENT, &bp->sp_event);
|
|
|
+ break;
|
|
|
default:
|
|
|
return;
|
|
|
}
|