return sw_field == MLX5_ACTION_IN_FIELD_OUT_IP_TTL;
 }
 
+static bool dr_action_modify_ttl_ignore(struct mlx5dr_domain *dmn)
+{
+       return !mlx5dr_ste_supp_ttl_cs_recalc(&dmn->info.caps) &&
+              !MLX5_CAP_ESW_FLOWTABLE(dmn->mdev, fdb_ipv4_ttl_modify);
+}
+
 static int dr_actions_convert_modify_header(struct mlx5dr_action *action,
                                            u32 max_hw_actions,
                                            u32 num_sw_actions,
                if (ret)
                        return ret;
 
-               if (!(*modify_ttl))
-                       *modify_ttl = dr_action_modify_check_is_ttl_modify(sw_action);
+               if (!(*modify_ttl) &&
+                   dr_action_modify_check_is_ttl_modify(sw_action)) {
+                       if (dr_action_modify_ttl_ignore(dmn))
+                               continue;
+
+                       *modify_ttl = true;
+               }
 
                /* Convert SW action to HW action */
                ret = dr_action_modify_sw_to_hw(dmn,
                         * modify actions doesn't exceeds the limit
                         */
                        hw_idx++;
-                       if ((num_sw_actions + hw_idx - i) >= max_hw_actions) {
+                       if (hw_idx >= max_hw_actions) {
                                mlx5dr_dbg(dmn, "Modify header action number exceeds HW limit\n");
                                return -EINVAL;
                        }
                hw_idx++;
        }
 
+       /* if the resulting HW actions list is empty, add NOP action */
+       if (!hw_idx)
+               hw_idx++;
+
        *num_hw_actions = hw_idx;
 
        return 0;
 
        u8      fdb_to_vport_reg_c_id[0x8];
        u8      reserved_at_8[0xd];
        u8      fdb_modify_header_fwd_to_table[0x1];
-       u8      reserved_at_16[0x1];
+       u8      fdb_ipv4_ttl_modify[0x1];
        u8      flow_source[0x1];
        u8      reserved_at_18[0x2];
        u8      multi_fdb_encap[0x1];