#define MLX5_ESW_VPORT_TBL_SIZE_SAMPLE (64 * 1024)
 
-static const struct esw_vport_tbl_namespace mlx5_esw_vport_tbl_sample_ns = {
+static struct esw_vport_tbl_namespace mlx5_esw_vport_tbl_sample_ns = {
        .max_fte = MLX5_ESW_VPORT_TBL_SIZE_SAMPLE,
        .max_num_groups = 0,    /* default num of groups */
-       .flags = MLX5_FLOW_TABLE_TUNNEL_EN_REFORMAT | MLX5_FLOW_TABLE_TUNNEL_EN_DECAP,
+       .flags = 0,
 };
 
 struct mlx5e_tc_psample {
 
        u16 prio;
        u16 vport;
        u16 vhca_id;
-       const struct esw_vport_tbl_namespace *vport_ns;
+       struct esw_vport_tbl_namespace *vport_ns;
 } __packed;
 
 struct mlx5_vport_table {
        struct mlx5_vport_key key;
 };
 
+static void
+esw_vport_tbl_init(struct mlx5_eswitch *esw, struct esw_vport_tbl_namespace *ns)
+{
+       if (esw->offloads.encap != DEVLINK_ESWITCH_ENCAP_MODE_NONE)
+               ns->flags |= (MLX5_FLOW_TABLE_TUNNEL_EN_REFORMAT |
+                             MLX5_FLOW_TABLE_TUNNEL_EN_DECAP);
+}
+
 static struct mlx5_flow_table *
 esw_vport_tbl_create(struct mlx5_eswitch *esw, struct mlx5_flow_namespace *ns,
                     const struct esw_vport_tbl_namespace *vport_ns)
        u32 hkey;
 
        mutex_lock(&esw->fdb_table.offloads.vports.lock);
+       esw_vport_tbl_init(esw, attr->vport_ns);
        hkey = flow_attr_to_vport_key(esw, attr, &skey);
        e = esw_vport_tbl_lookup(esw, &skey, hkey);
        if (e) {
        u32 hkey;
 
        mutex_lock(&esw->fdb_table.offloads.vports.lock);
+       esw_vport_tbl_init(esw, attr->vport_ns);
        hkey = flow_attr_to_vport_key(esw, attr, &key);
        e = esw_vport_tbl_lookup(esw, &key, hkey);
        if (!e || --e->num_rules)
 
 
 #define MLX5_ESW_FT_OFFLOADS_DROP_RULE (1)
 
-static const struct esw_vport_tbl_namespace mlx5_esw_vport_tbl_mirror_ns = {
+static struct esw_vport_tbl_namespace mlx5_esw_vport_tbl_mirror_ns = {
        .max_fte = MLX5_ESW_VPORT_TBL_SIZE,
        .max_num_groups = MLX5_ESW_VPORT_TBL_NUM_GROUPS,
        .flags = 0,