Mellanox FW can support this if ignore_flow_level capability exists.
Signed-off-by: Roi Dayan <roid@mellanox.com>
Reviewed-by: Oz Shlomo <ozsh@mellanox.com>
Reviewed-by: Paul Blakey <paulb@mellanox.com>
Signed-off-by: Saeed Mahameed <saeedm@mellanox.com>
                                NL_SET_ERR_MSG_MOD(extack, "Goto action is not supported");
                                return -EOPNOTSUPP;
                        }
-                       if (dest_chain <= attr->chain) {
+                       if (!mlx5_esw_chains_backwards_supported(esw) &&
+                           dest_chain <= attr->chain) {
                                NL_SET_ERR_MSG(extack, "Goto earlier chain isn't supported");
                                return -EOPNOTSUPP;
                        }
 
        return esw->fdb_table.flags & ESW_FDB_CHAINS_AND_PRIOS_SUPPORTED;
 }
 
+bool mlx5_esw_chains_backwards_supported(struct mlx5_eswitch *esw)
+{
+       return fdb_ignore_flow_level_supported(esw);
+}
+
 u32 mlx5_esw_chains_get_chain_range(struct mlx5_eswitch *esw)
 {
        if (!mlx5_esw_chains_prios_supported(esw))
 
 
 bool
 mlx5_esw_chains_prios_supported(struct mlx5_eswitch *esw);
+bool
+mlx5_esw_chains_backwards_supported(struct mlx5_eswitch *esw);
 u32
 mlx5_esw_chains_get_prio_range(struct mlx5_eswitch *esw);
 u32