From c14106dd92d12371393e1a92ea1f543c48896e61 Mon Sep 17 00:00:00 2001
From: Timothy McDaniel <timothy.mcdaniel@intel.com>
Date: Sat, 2 Jul 2022 14:35:00 -0500
Subject: [PATCH] doc: update DLB2 guide

Updated DLB2 guide to document following features.
1) CQ Weight
2) Port COS
3) Maximum CQ depth
4) Maximum enqueue depth

Signed-off-by: Timothy McDaniel <timothy.mcdaniel@intel.com>
---
 doc/guides/eventdevs/dlb2.rst | 67 ++++++++++++++++++++++++++++-------
 1 file changed, 54 insertions(+), 13 deletions(-)

diff --git a/doc/guides/eventdevs/dlb2.rst b/doc/guides/eventdevs/dlb2.rst
index bc53618b53..5b21f13b68 100644
--- a/doc/guides/eventdevs/dlb2.rst
+++ b/doc/guides/eventdevs/dlb2.rst
@@ -343,23 +343,21 @@ Class of service
 ~~~~~~~~~~~~~~~~
 
 DLB supports provisioning the DLB bandwidth into 4 classes of service.
+A LDB port or range of LDB ports may be configured to use one of the classes.
+If a port's COS is not defined, then it will be allocated from class 0,
+class 1, class 2, or class 3, in that order, depending on availability.
 
-- Class 4 corresponds to 40% of the DLB hardware bandwidth
-- Class 3 corresponds to 30% of the DLB hardware bandwidth
-- Class 2 corresponds to 20% of the DLB hardware bandwidth
-- Class 1 corresponds to 10% of the DLB hardware bandwidth
-- Class 0 corresponds to don't care
-
-The classes are applied globally to the set of ports contained in this
-scheduling domain, which is more appropriate for the bifurcated
-PMD than for the PF PMD, since the PF PMD supports just 1 scheduling
-domain.
-
-Class of service can be specified in the devargs, as follows
+The sum of the cos_bw values may not exceed 100, and no more than
+16 LDB ports may be assigned to a given class of service. If port cos is
+not defined on the command line, then each class is assigned 25% of the
+bandwidth, and the available load balanced ports are split between the classes.
+Per-port class of service and bandwidth can be specified in the devargs,
+as follows.
 
     .. code-block:: console
 
-       --allow ea:00.0,cos=<0..4>
+       --allow ea:00.0,port_cos=Px-Py:<0-3>,cos_bw=5:10:80:5
+       --allow ea:00.0,port_cos=Px:<0-3>,cos_bw=5:10:80:5
 
 Use X86 Vector Instructions
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -373,3 +371,46 @@ follows
     .. code-block:: console
 
        --allow ea:00.0,vector_opts_enabled=<y/Y>
+
+Maximum CQ Depth
+~~~~~~~~~~~~~~~~
+
+DLB supports configuring the maximum depth of a consumer queue (CQ).
+The depth must be between 32 and 128, and must be a power of 2. Note
+that credit deadlocks may occur as a result of changing the default depth.
+To prevent deadlock, the user may also need to configure the maximum
+enqueue depth.
+
+    .. code-block:: console
+
+       --allow ea:00.0,max_cq_depth=<depth>
+
+Maximum Enqueue Depth
+~~~~~~~~~~~~~~~~~~~~~
+
+DLB supports configuring the maximum enqueue depth of a producer port (PP).
+The depth must be between 32 and 1024, and must be a power of 2.
+
+    .. code-block:: console
+
+       --allow ea:00.0,max_enqueue_depth=<depth>
+
+QE Weight
+~~~~~~~~~
+
+DLB supports advanced scheduling mechanisms, such as CQ weight.
+Each load balanced CQ has a configurable work capacity (max 256)
+which corresponds to the total QE weight DLB will allow to be enqueued
+to that consumer. Every load balanced event/QE carries a weight of 0, 2, 4,
+or 8 and DLB will increment a (per CQ) load indicator when it schedules a
+QE to that CQ. The weight is also stored in the history list. When a
+completion arrives, the weight is popped from the history list and used to
+decrement the load indicator. This creates a new scheduling condition - a CQ
+whose load is equal to or in excess of capacity is not available for traffic.
+Note that the weight may not exceed the maximum CQ depth.
+
+    .. code-block:: console
+
+       --allow ea:00.0,cq_weight=all:<weight>
+       --allow ea:00.0,cq_weight=qidA-qidB:<weight>
+       --allow ea:00.0,cq_weight=qid:<weight>
-- 
2.39.5