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);
                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);
 
                        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;
        }
 
                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;
        }
 
        __be16                  vxlan_port;
        u8                      vxlan_port_cnt;
        __le16                  vxlan_fw_dst_port_id;
+       __be16                  nge_port;
        u8                      nge_port_cnt;
        __le16                  nge_fw_dst_port_id;
        u8                      port_partition_type;
 #define BNXT_PERIODIC_STATS_SP_EVENT   9
 #define BNXT_HWRM_PORT_MODULE_SP_EVENT 10
 #define BNXT_RESET_TASK_SILENT_SP_EVENT        11
+#define BNXT_GENEVE_ADD_PORT_SP_EVENT  12
+#define BNXT_GENEVE_DEL_PORT_SP_EVENT  13
 
        struct bnxt_pf_info     pf;
 #ifdef CONFIG_BNXT_SRIOV