• Vladimir Oltean's avatar
    net: mscc: ocelot: initialize watermarks to sane defaults · a4ae997a
    Vladimir Oltean authored
    This is meant to be a gentle introduction into the world of watermarks
    on ocelot. The code is placed in ocelot_devlink.c because it will be
    integrated with devlink, even if it isn't right now.
    
    My first step was intended to be to replicate the default configuration
    of the congestion watermarks programatically, since they are now going
    to be tuned by the user.
    
    But after studying and understanding through trial and error how they
    work, I now believe that the configuration used out of reset does not do
    justice to the word "reservation", since the sum of all reservations
    exceeds the total amount of resources (otherwise said, all reservations
    cannot be fulfilled at the same time, which means that, contrary to the
    reference manual, they don't guarantee anything).
    
    As an example, here's a dump of the reservation watermarks for frame
    buffers, for port 0 (for brevity, the ports 1-6 were omitted, but they
    have the same configuration):
    
    BUF_Q_RSRV_I(port 0, prio 0) = max 3000 bytes
    BUF_Q_RSRV_I(port 0, prio 1) = max 3000 bytes
    BUF_Q_RSRV_I(port 0, prio 2) = max 3000 bytes
    BUF_Q_RSRV_I(port 0, prio 3) = max 3000 bytes
    BUF_Q_RSRV_I(port 0, prio 4) = max 3000 bytes
    BUF_Q_RSRV_I(port 0, prio 5) = max 3000 bytes
    BUF_Q_RSRV_I(port 0, prio 6) = max 3000 bytes
    BUF_Q_RSRV_I(port 0, prio 7) = max 3000 bytes
    
    Otherwise said, every port-tc has an ingress reservation of 3000 bytes,
    and there are 7 ports in VSC9959 Felix (6 user ports and 1 CPU port).
    Concentrating only on the ingress reservations, there are, in total,
    8 [traffic classes] x 7 [ports] x 3000 [bytes] = 168,000 bytes of memory
    reserved on ingress.
    But, surprise, Felix only has 128 KB of packet buffer in total...
    A similar thing happens with Seville, which has a larger packet buffer,
    but also more ports, and the default configuration is also overcommitted.
    
    This patch disables the (apparently) bogus reservations and moves all
    resources to the shared area. This way, real reservations can be set up
    by the user, using devlink-sb.
    Signed-off-by: default avatarVladimir Oltean <vladimir.oltean@nxp.com>
    Reviewed-by: default avatarFlorian Fainelli <f.fainelli@gmail.com>
    Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
    a4ae997a
ocelot_devlink.c 14.8 KB