OSDN Git Service

selftests: mlxsw: Add devlink_lib_spectrum.sh
authorPetr Machata <petrm@mellanox.com>
Sat, 30 Jun 2018 00:48:12 +0000 (02:48 +0200)
committerDavid S. Miller <davem@davemloft.net>
Sat, 30 Jun 2018 13:06:15 +0000 (22:06 +0900)
This library builds on top of devlink_lib.sh and contains functionality
specific to Spectrum ASICs, e.g., re-partitioning the various KVD
sub-parts.

Signed-off-by: Yuval Mintz <yuvalm@mellanox.com>
[petrm@mellanox.com: Split this out from another patch. Fix line length
in devlink_sp_read_kvd_defaults().]
Signed-off-by: Petr Machata <petrm@mellanox.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
MAINTAINERS
tools/testing/selftests/drivers/net/mlxsw/spectrum/devlink_lib_spectrum.sh [new file with mode: 0644]

index 3b2e592..7ed37c0 100644 (file)
@@ -9154,6 +9154,7 @@ S:        Supported
 W:     http://www.mellanox.com
 Q:     http://patchwork.ozlabs.org/project/netdev/list/
 F:     drivers/net/ethernet/mellanox/mlxsw/
+F:     tools/testing/selftests/drivers/net/mlxsw/
 
 MELLANOX FIRMWARE FLASH LIBRARY (mlxfw)
 M:     mlxsw@mellanox.com
diff --git a/tools/testing/selftests/drivers/net/mlxsw/spectrum/devlink_lib_spectrum.sh b/tools/testing/selftests/drivers/net/mlxsw/spectrum/devlink_lib_spectrum.sh
new file mode 100644 (file)
index 0000000..73035e2
--- /dev/null
@@ -0,0 +1,119 @@
+#!/bin/bash
+# SPDX-License-Identifier: GPL-2.0
+
+source "../../../../net/forwarding/devlink_lib.sh"
+
+if [ "$DEVLINK_VIDDID" != "15b3:cb84" ]; then
+       echo "SKIP: test is tailored for Mellanox Spectrum"
+       exit 1
+fi
+
+# Needed for returning to default
+declare -A KVD_DEFAULTS
+
+KVD_CHILDREN="linear hash_single hash_double"
+KVDL_CHILDREN="singles chunks large_chunks"
+
+devlink_sp_resource_minimize()
+{
+       local size
+       local i
+
+       for i in $KVD_CHILDREN; do
+               size=$(devlink_resource_get kvd "$i" | jq '.["size_min"]')
+               devlink_resource_size_set "$size" kvd "$i"
+       done
+
+       for i in $KVDL_CHILDREN; do
+               size=$(devlink_resource_get kvd linear "$i" | \
+                      jq '.["size_min"]')
+               devlink_resource_size_set "$size" kvd linear "$i"
+       done
+}
+
+devlink_sp_size_kvd_to_default()
+{
+       local need_reload=0
+       local i
+
+       for i in $KVD_CHILDREN; do
+               local size=$(echo "${KVD_DEFAULTS[kvd_$i]}" | jq '.["size"]')
+               current_size=$(devlink_resource_size_get kvd "$i")
+
+               if [ "$size" -ne "$current_size" ]; then
+                       devlink_resource_size_set "$size" kvd "$i"
+                       need_reload=1
+               fi
+       done
+
+       for i in $KVDL_CHILDREN; do
+               local size=$(echo "${KVD_DEFAULTS[kvd_linear_$i]}" | \
+                            jq '.["size"]')
+               current_size=$(devlink_resource_size_get kvd linear "$i")
+
+               if [ "$size" -ne "$current_size" ]; then
+                       devlink_resource_size_set "$size" kvd linear "$i"
+                       need_reload=1
+               fi
+       done
+
+       if [ "$need_reload" -ne "0" ]; then
+               devlink_reload
+       fi
+}
+
+devlink_sp_read_kvd_defaults()
+{
+       local key
+       local i
+
+       KVD_DEFAULTS[kvd]=$(devlink_resource_get "kvd")
+       for i in $KVD_CHILDREN; do
+               key=kvd_$i
+               KVD_DEFAULTS[$key]=$(devlink_resource_get kvd "$i")
+       done
+
+       for i in $KVDL_CHILDREN; do
+               key=kvd_linear_$i
+               KVD_DEFAULTS[$key]=$(devlink_resource_get kvd linear "$i")
+       done
+}
+
+KVD_PROFILES="default scale ipv4_max"
+
+devlink_sp_resource_kvd_profile_set()
+{
+       local profile=$1
+
+       case "$profile" in
+       scale)
+               devlink_resource_size_set 64000 kvd linear
+               devlink_resource_size_set 15616 kvd linear singles
+               devlink_resource_size_set 32000 kvd linear chunks
+               devlink_resource_size_set 16384 kvd linear large_chunks
+               devlink_resource_size_set 128000 kvd hash_single
+               devlink_resource_size_set 48000 kvd hash_double
+               devlink_reload
+               ;;
+       ipv4_max)
+               devlink_resource_size_set 64000 kvd linear
+               devlink_resource_size_set 15616 kvd linear singles
+               devlink_resource_size_set 32000 kvd linear chunks
+               devlink_resource_size_set 16384 kvd linear large_chunks
+               devlink_resource_size_set 144000 kvd hash_single
+               devlink_resource_size_set 32768 kvd hash_double
+               devlink_reload
+               ;;
+       default)
+               devlink_resource_size_set 98304 kvd linear
+               devlink_resource_size_set 16384 kvd linear singles
+               devlink_resource_size_set 49152 kvd linear chunks
+               devlink_resource_size_set 32768 kvd linear large_chunks
+               devlink_resource_size_set 87040 kvd hash_single
+               devlink_resource_size_set 60416 kvd hash_double
+               devlink_reload
+               ;;
+       *)
+               check_err 1 "Unknown profile $profile"
+       esac
+}