struct mlx5hws_cmd_query_caps *caps = bwc_matcher->matcher->tbl->ctx->caps;
 
        /* check the match RTC size */
-       if ((bwc_matcher->size_log +
-            MLX5HWS_MATCHER_ASSURED_MAIN_TBL_DEPTH +
-            MLX5HWS_BWC_MATCHER_SIZE_LOG_STEP) >
-           (caps->ste_alloc_log_max - 1))
-               return true;
-
-       /* check the action RTC size */
-       if ((bwc_matcher->size_log +
-            MLX5HWS_BWC_MATCHER_SIZE_LOG_STEP +
-            ilog2(roundup_pow_of_two(bwc_matcher->matcher->action_ste.max_stes)) +
-            MLX5HWS_MATCHER_ACTION_RTC_UPDATE_MULT) >
-           (caps->ste_alloc_log_max - 1))
-               return true;
-
-       return false;
+       return (bwc_matcher->size_log + MLX5HWS_MATCHER_ASSURED_MAIN_TBL_DEPTH +
+               MLX5HWS_BWC_MATCHER_SIZE_LOG_STEP) >
+              (caps->ste_alloc_log_max - 1);
 }
 
 static bool
        return hws_bwc_matcher_move(bwc_matcher);
 }
 
-static int
-hws_bwc_matcher_rehash_at(struct mlx5hws_bwc_matcher *bwc_matcher)
-{
-       /* Rehash by action template doesn't require any additional checking.
-        * The bwc_matcher already contains the new action template.
-        * Just do the usual rehash:
-        *  - create new matcher
-        *  - move all the rules to the new matcher
-        *  - destroy the old matcher
-        */
-       return hws_bwc_matcher_move(bwc_matcher);
-}
-
 int mlx5hws_bwc_rule_create_simple(struct mlx5hws_bwc_rule *bwc_rule,
                                   u32 *match_param,
                                   struct mlx5hws_rule_action rule_actions[],
        struct mlx5hws_rule_attr rule_attr;
        struct mutex *queue_lock; /* Protect the queue */
        u32 num_of_rules;
-       bool need_rehash;
        int ret = 0;
        int at_idx;
 
                at_idx = bwc_matcher->num_of_at - 1;
 
                ret = mlx5hws_matcher_attach_at(bwc_matcher->matcher,
-                                               bwc_matcher->at[at_idx],
-                                               &need_rehash);
+                                               bwc_matcher->at[at_idx]);
                if (unlikely(ret)) {
                        hws_bwc_unlock_all_queues(ctx);
                        return ret;
                }
-               if (unlikely(need_rehash)) {
-                       /* The new action template requires more action STEs.
-                        * Need to attempt creating new matcher with all
-                        * the action templates, including the new one.
-                        */
-                       ret = hws_bwc_matcher_rehash_at(bwc_matcher);
-                       if (unlikely(ret)) {
-                               mlx5hws_action_template_destroy(bwc_matcher->at[at_idx]);
-                               bwc_matcher->at[at_idx] = NULL;
-                               bwc_matcher->num_of_at--;
-
-                               hws_bwc_unlock_all_queues(ctx);
-
-                               mlx5hws_err(ctx,
-                                           "BWC rule insertion: rehash AT failed (%d)\n", ret);
-                               return ret;
-                       }
-               }
 
                hws_bwc_unlock_all_queues(ctx);
                mutex_lock(queue_lock);
        struct mlx5hws_context *ctx = bwc_matcher->matcher->tbl->ctx;
        struct mlx5hws_rule_attr rule_attr;
        struct mutex *queue_lock; /* Protect the queue */
-       bool need_rehash;
        int at_idx, ret;
        u16 idx;
 
                        at_idx = bwc_matcher->num_of_at - 1;
 
                        ret = mlx5hws_matcher_attach_at(bwc_matcher->matcher,
-                                                       bwc_matcher->at[at_idx],
-                                                       &need_rehash);
+                                                       bwc_matcher->at[at_idx]);
                        if (unlikely(ret)) {
                                hws_bwc_unlock_all_queues(ctx);
                                return ret;
                        }
-                       if (unlikely(need_rehash)) {
-                               /* The new action template requires more action
-                                * STEs. Need to attempt creating new matcher
-                                * with all the action templates, including the
-                                * new one.
-                                */
-                               ret = hws_bwc_matcher_rehash_at(bwc_matcher);
-                               if (unlikely(ret)) {
-                                       mlx5hws_action_template_destroy(bwc_matcher->at[at_idx]);
-                                       bwc_matcher->at[at_idx] = NULL;
-                                       bwc_matcher->num_of_at--;
-
-                                       hws_bwc_unlock_all_queues(ctx);
-
-                                       mlx5hws_err(ctx,
-                                                   "BWC rule update: rehash AT failed (%d)\n",
-                                                   ret);
-                                       return ret;
-                               }
-                       }
                }
 
                hws_bwc_unlock_all_queues(ctx);
 
 
 #include "internal.h"
 
-enum mlx5hws_matcher_rtc_type {
-       HWS_MATCHER_RTC_TYPE_MATCH,
-       HWS_MATCHER_RTC_TYPE_STE_ARRAY,
-       HWS_MATCHER_RTC_TYPE_MAX,
-};
-
-static const char * const mlx5hws_matcher_rtc_type_str[] = {
-       [HWS_MATCHER_RTC_TYPE_MATCH] = "MATCH",
-       [HWS_MATCHER_RTC_TYPE_STE_ARRAY] = "STE_ARRAY",
-       [HWS_MATCHER_RTC_TYPE_MAX] = "UNKNOWN",
-};
-
-static const char *hws_matcher_rtc_type_to_str(enum mlx5hws_matcher_rtc_type rtc_type)
-{
-       if (rtc_type > HWS_MATCHER_RTC_TYPE_MAX)
-               rtc_type = HWS_MATCHER_RTC_TYPE_MAX;
-       return mlx5hws_matcher_rtc_type_str[rtc_type];
-}
-
 static bool hws_matcher_requires_col_tbl(u8 log_num_of_rules)
 {
        /* Collision table concatenation is done only for large rule tables */
        }
 }
 
-static int hws_matcher_create_rtc(struct mlx5hws_matcher *matcher,
-                                 enum mlx5hws_matcher_rtc_type rtc_type)
+static int hws_matcher_create_rtc(struct mlx5hws_matcher *matcher)
 {
        struct mlx5hws_matcher_attr *attr = &matcher->attr;
        struct mlx5hws_cmd_rtc_create_attr rtc_attr = {0};
        struct mlx5hws_match_template *mt = matcher->mt;
        struct mlx5hws_context *ctx = matcher->tbl->ctx;
-       struct mlx5hws_matcher_action_ste *action_ste;
        struct mlx5hws_table *tbl = matcher->tbl;
-       struct mlx5hws_pool *ste_pool;
-       u32 *rtc_0_id, *rtc_1_id;
        u32 obj_id;
        int ret;
 
-       switch (rtc_type) {
-       case HWS_MATCHER_RTC_TYPE_MATCH:
-               rtc_0_id = &matcher->match_ste.rtc_0_id;
-               rtc_1_id = &matcher->match_ste.rtc_1_id;
-               ste_pool = matcher->match_ste.pool;
-
-               rtc_attr.log_size = attr->table.sz_row_log;
-               rtc_attr.log_depth = attr->table.sz_col_log;
-               rtc_attr.is_frst_jumbo = mlx5hws_matcher_mt_is_jumbo(mt);
-               rtc_attr.is_scnd_range = 0;
-               rtc_attr.miss_ft_id = matcher->end_ft_id;
-
-               if (attr->insert_mode == MLX5HWS_MATCHER_INSERT_BY_HASH) {
-                       /* The usual Hash Table */
-                       rtc_attr.update_index_mode = MLX5_IFC_RTC_STE_UPDATE_MODE_BY_HASH;
-
-                       /* The first mt is used since all share the same definer */
-                       rtc_attr.match_definer_0 = mlx5hws_definer_get_id(mt->definer);
-               } else if (attr->insert_mode == MLX5HWS_MATCHER_INSERT_BY_INDEX) {
-                       rtc_attr.update_index_mode = MLX5_IFC_RTC_STE_UPDATE_MODE_BY_OFFSET;
-                       rtc_attr.num_hash_definer = 1;
-
-                       if (attr->distribute_mode == MLX5HWS_MATCHER_DISTRIBUTE_BY_HASH) {
-                               /* Hash Split Table */
-                               rtc_attr.access_index_mode = MLX5_IFC_RTC_STE_ACCESS_MODE_BY_HASH;
-                               rtc_attr.match_definer_0 = mlx5hws_definer_get_id(mt->definer);
-                       } else if (attr->distribute_mode == MLX5HWS_MATCHER_DISTRIBUTE_BY_LINEAR) {
-                               /* Linear Lookup Table */
-                               rtc_attr.access_index_mode = MLX5_IFC_RTC_STE_ACCESS_MODE_LINEAR;
-                               rtc_attr.match_definer_0 = ctx->caps->linear_match_definer;
-                       }
+       rtc_attr.log_size = attr->table.sz_row_log;
+       rtc_attr.log_depth = attr->table.sz_col_log;
+       rtc_attr.is_frst_jumbo = mlx5hws_matcher_mt_is_jumbo(mt);
+       rtc_attr.is_scnd_range = 0;
+       rtc_attr.miss_ft_id = matcher->end_ft_id;
+
+       if (attr->insert_mode == MLX5HWS_MATCHER_INSERT_BY_HASH) {
+               /* The usual Hash Table */
+               rtc_attr.update_index_mode =
+                       MLX5_IFC_RTC_STE_UPDATE_MODE_BY_HASH;
+
+               /* The first mt is used since all share the same definer */
+               rtc_attr.match_definer_0 = mlx5hws_definer_get_id(mt->definer);
+       } else if (attr->insert_mode == MLX5HWS_MATCHER_INSERT_BY_INDEX) {
+               rtc_attr.update_index_mode =
+                       MLX5_IFC_RTC_STE_UPDATE_MODE_BY_OFFSET;
+               rtc_attr.num_hash_definer = 1;
+
+               if (attr->distribute_mode ==
+                   MLX5HWS_MATCHER_DISTRIBUTE_BY_HASH) {
+                       /* Hash Split Table */
+                       rtc_attr.access_index_mode =
+                               MLX5_IFC_RTC_STE_ACCESS_MODE_BY_HASH;
+                       rtc_attr.match_definer_0 =
+                               mlx5hws_definer_get_id(mt->definer);
+               } else if (attr->distribute_mode ==
+                          MLX5HWS_MATCHER_DISTRIBUTE_BY_LINEAR) {
+                       /* Linear Lookup Table */
+                       rtc_attr.access_index_mode =
+                               MLX5_IFC_RTC_STE_ACCESS_MODE_LINEAR;
+                       rtc_attr.match_definer_0 =
+                               ctx->caps->linear_match_definer;
                }
-               break;
-
-       case HWS_MATCHER_RTC_TYPE_STE_ARRAY:
-               action_ste = &matcher->action_ste;
-
-               rtc_0_id = &action_ste->rtc_0_id;
-               rtc_1_id = &action_ste->rtc_1_id;
-               ste_pool = action_ste->pool;
-               /* Action RTC size calculation:
-                * log((max number of rules in matcher) *
-                *     (max number of action STEs per rule) *
-                *     (2 to support writing new STEs for update rule))
-                */
-               rtc_attr.log_size =
-                       ilog2(roundup_pow_of_two(action_ste->max_stes)) +
-                       attr->table.sz_row_log +
-                       MLX5HWS_MATCHER_ACTION_RTC_UPDATE_MULT;
-               rtc_attr.log_depth = 0;
-               rtc_attr.update_index_mode = MLX5_IFC_RTC_STE_UPDATE_MODE_BY_OFFSET;
-               /* The action STEs use the default always hit definer */
-               rtc_attr.match_definer_0 = ctx->caps->trivial_match_definer;
-               rtc_attr.is_frst_jumbo = false;
-               rtc_attr.miss_ft_id = 0;
-               break;
-
-       default:
-               mlx5hws_err(ctx, "HWS Invalid RTC type\n");
-               return -EINVAL;
        }
 
-       obj_id = mlx5hws_pool_get_base_id(ste_pool);
+       obj_id = mlx5hws_pool_get_base_id(matcher->match_ste.pool);
 
        rtc_attr.pd = ctx->pd_num;
        rtc_attr.ste_base = obj_id;
        obj_id = mlx5hws_pool_get_base_id(ctx->stc_pool);
        rtc_attr.stc_base = obj_id;
 
-       ret = mlx5hws_cmd_rtc_create(ctx->mdev, &rtc_attr, rtc_0_id);
+       ret = mlx5hws_cmd_rtc_create(ctx->mdev, &rtc_attr,
+                                    &matcher->match_ste.rtc_0_id);
        if (ret) {
-               mlx5hws_err(ctx, "Failed to create matcher RTC of type %s",
-                           hws_matcher_rtc_type_to_str(rtc_type));
+               mlx5hws_err(ctx, "Failed to create matcher RTC\n");
                return ret;
        }
 
        if (tbl->type == MLX5HWS_TABLE_TYPE_FDB) {
-               obj_id = mlx5hws_pool_get_base_mirror_id(ste_pool);
+               obj_id = mlx5hws_pool_get_base_mirror_id(
+                       matcher->match_ste.pool);
                rtc_attr.ste_base = obj_id;
                rtc_attr.table_type = mlx5hws_table_get_res_fw_ft_type(tbl->type, true);
 
                rtc_attr.stc_base = obj_id;
                hws_matcher_set_rtc_attr_sz(matcher, &rtc_attr, true);
 
-               ret = mlx5hws_cmd_rtc_create(ctx->mdev, &rtc_attr, rtc_1_id);
+               ret = mlx5hws_cmd_rtc_create(ctx->mdev, &rtc_attr,
+                                            &matcher->match_ste.rtc_1_id);
                if (ret) {
-                       mlx5hws_err(ctx, "Failed to create peer matcher RTC of type %s",
-                                   hws_matcher_rtc_type_to_str(rtc_type));
+                       mlx5hws_err(ctx, "Failed to create mirror matcher RTC\n");
                        goto destroy_rtc_0;
                }
        }
        return 0;
 
 destroy_rtc_0:
-       mlx5hws_cmd_rtc_destroy(ctx->mdev, *rtc_0_id);
+       mlx5hws_cmd_rtc_destroy(ctx->mdev, matcher->match_ste.rtc_0_id);
        return ret;
 }
 
-static void hws_matcher_destroy_rtc(struct mlx5hws_matcher *matcher,
-                                   enum mlx5hws_matcher_rtc_type rtc_type)
+static void hws_matcher_destroy_rtc(struct mlx5hws_matcher *matcher)
 {
-       struct mlx5hws_table *tbl = matcher->tbl;
-       u32 rtc_0_id, rtc_1_id;
-
-       switch (rtc_type) {
-       case HWS_MATCHER_RTC_TYPE_MATCH:
-               rtc_0_id = matcher->match_ste.rtc_0_id;
-               rtc_1_id = matcher->match_ste.rtc_1_id;
-               break;
-       case HWS_MATCHER_RTC_TYPE_STE_ARRAY:
-               rtc_0_id = matcher->action_ste.rtc_0_id;
-               rtc_1_id = matcher->action_ste.rtc_1_id;
-               break;
-       default:
-               return;
-       }
+       struct mlx5_core_dev *mdev = matcher->tbl->ctx->mdev;
 
-       if (tbl->type == MLX5HWS_TABLE_TYPE_FDB)
-               mlx5hws_cmd_rtc_destroy(tbl->ctx->mdev, rtc_1_id);
+       if (matcher->tbl->type == MLX5HWS_TABLE_TYPE_FDB)
+               mlx5hws_cmd_rtc_destroy(mdev, matcher->match_ste.rtc_1_id);
 
-       mlx5hws_cmd_rtc_destroy(tbl->ctx->mdev, rtc_0_id);
+       mlx5hws_cmd_rtc_destroy(mdev, matcher->match_ste.rtc_0_id);
 }
 
 static int
        return 0;
 }
 
-static int hws_matcher_resize_init(struct mlx5hws_matcher *src_matcher)
-{
-       struct mlx5hws_matcher_resize_data *resize_data;
-
-       resize_data = kzalloc(sizeof(*resize_data), GFP_KERNEL);
-       if (!resize_data)
-               return -ENOMEM;
-
-       resize_data->max_stes = src_matcher->action_ste.max_stes;
-
-       resize_data->stc = src_matcher->action_ste.stc;
-       resize_data->rtc_0_id = src_matcher->action_ste.rtc_0_id;
-       resize_data->rtc_1_id = src_matcher->action_ste.rtc_1_id;
-       resize_data->pool = src_matcher->action_ste.max_stes ?
-                           src_matcher->action_ste.pool : NULL;
-
-       /* Place the new resized matcher on the dst matcher's list */
-       list_add(&resize_data->list_node, &src_matcher->resize_dst->resize_data);
-
-       /* Move all the previous resized matchers to the dst matcher's list */
-       while (!list_empty(&src_matcher->resize_data)) {
-               resize_data = list_first_entry(&src_matcher->resize_data,
-                                              struct mlx5hws_matcher_resize_data,
-                                              list_node);
-               list_del_init(&resize_data->list_node);
-               list_add(&resize_data->list_node, &src_matcher->resize_dst->resize_data);
-       }
-
-       return 0;
-}
-
-static void hws_matcher_resize_uninit(struct mlx5hws_matcher *matcher)
-{
-       struct mlx5hws_matcher_resize_data *resize_data;
-
-       if (!mlx5hws_matcher_is_resizable(matcher))
-               return;
-
-       while (!list_empty(&matcher->resize_data)) {
-               resize_data = list_first_entry(&matcher->resize_data,
-                                              struct mlx5hws_matcher_resize_data,
-                                              list_node);
-               list_del_init(&resize_data->list_node);
-
-               if (resize_data->max_stes) {
-                       mlx5hws_action_free_single_stc(matcher->tbl->ctx,
-                                                      matcher->tbl->type,
-                                                      &resize_data->stc);
-
-                       if (matcher->tbl->type == MLX5HWS_TABLE_TYPE_FDB)
-                               mlx5hws_cmd_rtc_destroy(matcher->tbl->ctx->mdev,
-                                                       resize_data->rtc_1_id);
-
-                       mlx5hws_cmd_rtc_destroy(matcher->tbl->ctx->mdev,
-                                               resize_data->rtc_0_id);
-
-                       if (resize_data->pool)
-                               mlx5hws_pool_destroy(resize_data->pool);
-               }
-
-               kfree(resize_data);
-       }
-}
-
 static int hws_matcher_bind_at(struct mlx5hws_matcher *matcher)
 {
        bool is_jumbo = mlx5hws_matcher_mt_is_jumbo(matcher->mt);
-       struct mlx5hws_cmd_stc_modify_attr stc_attr = {0};
-       struct mlx5hws_matcher_action_ste *action_ste;
-       struct mlx5hws_table *tbl = matcher->tbl;
-       struct mlx5hws_pool_attr pool_attr = {0};
-       struct mlx5hws_context *ctx = tbl->ctx;
-       u32 required_stes;
-       u8 max_stes = 0;
+       struct mlx5hws_context *ctx = matcher->tbl->ctx;
+       u8 required_stes, max_stes;
        int i, ret;
 
        if (matcher->flags & MLX5HWS_MATCHER_FLAGS_COLLISION)
                return 0;
 
+       max_stes = 0;
        for (i = 0; i < matcher->num_of_at; i++) {
                struct mlx5hws_action_template *at = &matcher->at[i];
 
                /* Future: Optimize reparse */
        }
 
-       /* There are no additional STEs required for matcher */
-       if (!max_stes)
-               return 0;
-
-       matcher->action_ste.max_stes = max_stes;
-
-       action_ste = &matcher->action_ste;
-
-       /* Allocate action STE mempool */
-       pool_attr.table_type = tbl->type;
-       pool_attr.pool_type = MLX5HWS_POOL_TYPE_STE;
-       pool_attr.flags = MLX5HWS_POOL_FLAG_BUDDY;
-       /* Pool size is similar to action RTC size */
-       pool_attr.alloc_log_sz = ilog2(roundup_pow_of_two(action_ste->max_stes)) +
-                                matcher->attr.table.sz_row_log +
-                                MLX5HWS_MATCHER_ACTION_RTC_UPDATE_MULT;
-       hws_matcher_set_pool_attr(&pool_attr, matcher);
-       action_ste->pool = mlx5hws_pool_create(ctx, &pool_attr);
-       if (!action_ste->pool) {
-               mlx5hws_err(ctx, "Failed to create action ste pool\n");
-               return -EINVAL;
-       }
-
-       /* Allocate action RTC */
-       ret = hws_matcher_create_rtc(matcher, HWS_MATCHER_RTC_TYPE_STE_ARRAY);
-       if (ret) {
-               mlx5hws_err(ctx, "Failed to create action RTC\n");
-               goto free_ste_pool;
-       }
-
-       /* Allocate STC for jumps to STE */
-       stc_attr.action_offset = MLX5HWS_ACTION_OFFSET_HIT;
-       stc_attr.action_type = MLX5_IFC_STC_ACTION_TYPE_JUMP_TO_STE_TABLE;
-       stc_attr.reparse_mode = MLX5_IFC_STC_REPARSE_IGNORE;
-       stc_attr.ste_table.ste_pool = action_ste->pool;
-       stc_attr.ste_table.match_definer_id = ctx->caps->trivial_match_definer;
-
-       ret = mlx5hws_action_alloc_single_stc(ctx, &stc_attr, tbl->type,
-                                             &action_ste->stc);
-       if (ret) {
-               mlx5hws_err(ctx, "Failed to create action jump to table STC\n");
-               goto free_rtc;
-       }
+       matcher->num_of_action_stes = max_stes;
 
        return 0;
-
-free_rtc:
-       hws_matcher_destroy_rtc(matcher, HWS_MATCHER_RTC_TYPE_STE_ARRAY);
-free_ste_pool:
-       mlx5hws_pool_destroy(action_ste->pool);
-       return ret;
-}
-
-static void hws_matcher_unbind_at(struct mlx5hws_matcher *matcher)
-{
-       struct mlx5hws_matcher_action_ste *action_ste;
-       struct mlx5hws_table *tbl = matcher->tbl;
-
-       action_ste = &matcher->action_ste;
-
-       if (!action_ste->max_stes ||
-           matcher->flags & MLX5HWS_MATCHER_FLAGS_COLLISION ||
-           mlx5hws_matcher_is_in_resize(matcher))
-               return;
-
-       mlx5hws_action_free_single_stc(tbl->ctx, tbl->type, &action_ste->stc);
-       hws_matcher_destroy_rtc(matcher, HWS_MATCHER_RTC_TYPE_STE_ARRAY);
-       mlx5hws_pool_destroy(action_ste->pool);
 }
 
 static int hws_matcher_bind_mt(struct mlx5hws_matcher *matcher)
        /* Create matcher end flow table anchor */
        ret = hws_matcher_create_end_ft(matcher);
        if (ret)
-               goto unbind_at;
+               goto unbind_mt;
 
        /* Allocate the RTC for the new matcher */
-       ret = hws_matcher_create_rtc(matcher, HWS_MATCHER_RTC_TYPE_MATCH);
+       ret = hws_matcher_create_rtc(matcher);
        if (ret)
                goto destroy_end_ft;
 
        return 0;
 
 destroy_rtc:
-       hws_matcher_destroy_rtc(matcher, HWS_MATCHER_RTC_TYPE_MATCH);
+       hws_matcher_destroy_rtc(matcher);
 destroy_end_ft:
        hws_matcher_destroy_end_ft(matcher);
-unbind_at:
-       hws_matcher_unbind_at(matcher);
 unbind_mt:
        hws_matcher_unbind_mt(matcher);
        return ret;
 
 static void hws_matcher_destroy_and_disconnect(struct mlx5hws_matcher *matcher)
 {
-       hws_matcher_resize_uninit(matcher);
        hws_matcher_disconnect(matcher);
-       hws_matcher_destroy_rtc(matcher, HWS_MATCHER_RTC_TYPE_MATCH);
+       hws_matcher_destroy_rtc(matcher);
        hws_matcher_destroy_end_ft(matcher);
-       hws_matcher_unbind_at(matcher);
        hws_matcher_unbind_mt(matcher);
 }
 
        if (!col_matcher)
                return -ENOMEM;
 
-       INIT_LIST_HEAD(&col_matcher->resize_data);
-
        col_matcher->tbl = matcher->tbl;
        col_matcher->mt = matcher->mt;
        col_matcher->at = matcher->at;
        struct mlx5hws_context *ctx = matcher->tbl->ctx;
        int ret;
 
-       INIT_LIST_HEAD(&matcher->resize_data);
-
        mutex_lock(&ctx->ctrl_lock);
 
        /* Allocate matcher resource and connect to the packet pipe */
 }
 
 int mlx5hws_matcher_attach_at(struct mlx5hws_matcher *matcher,
-                             struct mlx5hws_action_template *at,
-                             bool *need_rehash)
+                             struct mlx5hws_action_template *at)
 {
        bool is_jumbo = mlx5hws_matcher_mt_is_jumbo(matcher->mt);
-       struct mlx5hws_context *ctx = matcher->tbl->ctx;
        u32 required_stes;
        int ret;
 
-       *need_rehash = false;
-
        if (unlikely(matcher->num_of_at >= matcher->size_of_at_array)) {
                ret = hws_matcher_grow_at_array(matcher);
                if (ret)
                return ret;
 
        required_stes = at->num_of_action_stes - (!is_jumbo || at->only_term);
-       if (matcher->action_ste.max_stes < required_stes) {
-               mlx5hws_dbg(ctx, "Required STEs [%d] exceeds initial action template STE [%d]\n",
-                           required_stes, matcher->action_ste.max_stes);
-               *need_rehash = true;
-       }
+       if (matcher->num_of_action_stes < required_stes)
+               matcher->num_of_action_stes = required_stes;
 
        matcher->at[matcher->num_of_at] = *at;
        matcher->num_of_at += 1;
                return -EINVAL;
        }
 
-       if (src_matcher->action_ste.max_stes > dst_matcher->action_ste.max_stes) {
+       if (src_matcher->num_of_action_stes > dst_matcher->num_of_action_stes) {
                mlx5hws_err(ctx, "Src/dst matcher max STEs mismatch\n");
                return -EINVAL;
        }
 
        src_matcher->resize_dst = dst_matcher;
 
-       ret = hws_matcher_resize_init(src_matcher);
-       if (ret)
-               src_matcher->resize_dst = NULL;
-
 out:
        mutex_unlock(&src_matcher->tbl->ctx->ctrl_lock);
        return ret;