igb: Clarify idleslope config constraints
authorJesus Sanchez-Palencia <jesus.sanchez-palencia@intel.com>
Fri, 10 Nov 2017 22:21:50 +0000 (14:21 -0800)
committerJeff Kirsher <jeffrey.t.kirsher@intel.com>
Wed, 24 Jan 2018 20:27:48 +0000 (12:27 -0800)
By design, the idleslope increments are restricted to 16.384kbps steps.
Add a comment to igb_main.c making that explicit and add one example
that illustrates the impact of that.

Signed-off-by: Jesus Sanchez-Palencia <jesus.sanchez-palencia@intel.com>
Tested-by: Aaron Brown <aaron.f.brown@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
drivers/net/ethernet/intel/igb/igb_main.c

index 21a34e9e2645e65439e7f842ef358d085c276324..78fe10819c3af373fedc45156171188344f208a6 100644 (file)
@@ -1744,6 +1744,20 @@ static void igb_configure_cbs(struct igb_adapter *adapter, int queue,
                 *     value = idleSlope * 61034
                 *             -----------------                          (E6)
                 *                  1000000
+                *
+                * NOTE: For i210, given the above, we can see that idleslope
+                *       is represented in 16.38431 kbps units by the value at
+                *       the TQAVCC register (1Gbps / 61034), which reduces
+                *       the granularity for idleslope increments.
+                *       For instance, if you want to configure a 2576kbps
+                *       idleslope, the value to be written on the register
+                *       would have to be 157.23. If rounded down, you end
+                *       up with less bandwidth available than originally
+                *       required (~2572 kbps). If rounded up, you end up
+                *       with a higher bandwidth (~2589 kbps). Below the
+                *       approach we take is to always round up the
+                *       calculated value, so the resulting bandwidth might
+                *       be slightly higher for some configurations.
                 */
                value = DIV_ROUND_UP_ULL(idleslope * 61034ULL, 1000000);