aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArkadi Sharshevsky <arkadis@mellanox.com>2018-01-15 02:59:08 -0500
committerDavid S. Miller <davem@davemloft.net>2018-01-16 14:15:35 -0500
commitc0253a45fde85fa4457867c9021f0750b20117bf (patch)
tree02d003255a12f49fad1644ecbb0488ac49ada3dc
parentef3116e5403ecca1653eb5cb8fbd09e239855055 (diff)
mlxsw: spectrum_dpipe: Connect dpipe tables to resources
Connect current dpipe tables to resources. The tables are connected in the following fashion: 1. IPv4 host -> KVD hash single 2. IPv6 host -> KVD hash double 3. Adjacency -> KVD linear Signed-off-by: Arkadi Sharshevsky <arkadis@mellanox.com> Signed-off-by: Jiri Pirko <jiri@mellanox.com> Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--drivers/net/ethernet/mellanox/mlxsw/spectrum_dpipe.c81
1 files changed, 69 insertions, 12 deletions
diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum_dpipe.c b/drivers/net/ethernet/mellanox/mlxsw/spectrum_dpipe.c
index 96fdba78acab..f56fa18d6b26 100644
--- a/drivers/net/ethernet/mellanox/mlxsw/spectrum_dpipe.c
+++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum_dpipe.c
@@ -771,14 +771,33 @@ static struct devlink_dpipe_table_ops mlxsw_sp_host4_ops = {
771 .size_get = mlxsw_sp_dpipe_table_host4_size_get, 771 .size_get = mlxsw_sp_dpipe_table_host4_size_get,
772}; 772};
773 773
774#define MLXSW_SP_DPIPE_TABLE_RESOURCE_UNIT_HOST4 1
775
774static int mlxsw_sp_dpipe_host4_table_init(struct mlxsw_sp *mlxsw_sp) 776static int mlxsw_sp_dpipe_host4_table_init(struct mlxsw_sp *mlxsw_sp)
775{ 777{
776 struct devlink *devlink = priv_to_devlink(mlxsw_sp->core); 778 struct devlink *devlink = priv_to_devlink(mlxsw_sp->core);
779 int err;
777 780
778 return devlink_dpipe_table_register(devlink, 781 err = devlink_dpipe_table_register(devlink,
779 MLXSW_SP_DPIPE_TABLE_NAME_HOST4, 782 MLXSW_SP_DPIPE_TABLE_NAME_HOST4,
780 &mlxsw_sp_host4_ops, 783 &mlxsw_sp_host4_ops,
781 mlxsw_sp, false); 784 mlxsw_sp, false);
785 if (err)
786 return err;
787
788 err = devlink_dpipe_table_resource_set(devlink,
789 MLXSW_SP_DPIPE_TABLE_NAME_HOST4,
790 MLXSW_SP_RESOURCE_KVD_HASH_SINGLE,
791 MLXSW_SP_DPIPE_TABLE_RESOURCE_UNIT_HOST4);
792 if (err)
793 goto err_resource_set;
794
795 return 0;
796
797err_resource_set:
798 devlink_dpipe_table_unregister(devlink,
799 MLXSW_SP_DPIPE_TABLE_NAME_HOST4);
800 return err;
782} 801}
783 802
784static void mlxsw_sp_dpipe_host4_table_fini(struct mlxsw_sp *mlxsw_sp) 803static void mlxsw_sp_dpipe_host4_table_fini(struct mlxsw_sp *mlxsw_sp)
@@ -829,14 +848,33 @@ static struct devlink_dpipe_table_ops mlxsw_sp_host6_ops = {
829 .size_get = mlxsw_sp_dpipe_table_host6_size_get, 848 .size_get = mlxsw_sp_dpipe_table_host6_size_get,
830}; 849};
831 850
851#define MLXSW_SP_DPIPE_TABLE_RESOURCE_UNIT_HOST6 2
852
832static int mlxsw_sp_dpipe_host6_table_init(struct mlxsw_sp *mlxsw_sp) 853static int mlxsw_sp_dpipe_host6_table_init(struct mlxsw_sp *mlxsw_sp)
833{ 854{
834 struct devlink *devlink = priv_to_devlink(mlxsw_sp->core); 855 struct devlink *devlink = priv_to_devlink(mlxsw_sp->core);
856 int err;
835 857
836 return devlink_dpipe_table_register(devlink, 858 err = devlink_dpipe_table_register(devlink,
837 MLXSW_SP_DPIPE_TABLE_NAME_HOST6, 859 MLXSW_SP_DPIPE_TABLE_NAME_HOST6,
838 &mlxsw_sp_host6_ops, 860 &mlxsw_sp_host6_ops,
839 mlxsw_sp, false); 861 mlxsw_sp, false);
862 if (err)
863 return err;
864
865 err = devlink_dpipe_table_resource_set(devlink,
866 MLXSW_SP_DPIPE_TABLE_NAME_HOST6,
867 MLXSW_SP_RESOURCE_KVD_HASH_DOUBLE,
868 MLXSW_SP_DPIPE_TABLE_RESOURCE_UNIT_HOST6);
869 if (err)
870 goto err_resource_set;
871
872 return 0;
873
874err_resource_set:
875 devlink_dpipe_table_unregister(devlink,
876 MLXSW_SP_DPIPE_TABLE_NAME_HOST6);
877 return err;
840} 878}
841 879
842static void mlxsw_sp_dpipe_host6_table_fini(struct mlxsw_sp *mlxsw_sp) 880static void mlxsw_sp_dpipe_host6_table_fini(struct mlxsw_sp *mlxsw_sp)
@@ -1213,14 +1251,33 @@ static struct devlink_dpipe_table_ops mlxsw_sp_dpipe_table_adj_ops = {
1213 .size_get = mlxsw_sp_dpipe_table_adj_size_get, 1251 .size_get = mlxsw_sp_dpipe_table_adj_size_get,
1214}; 1252};
1215 1253
1254#define MLXSW_SP_DPIPE_TABLE_RESOURCE_UNIT_ADJ 1
1255
1216static int mlxsw_sp_dpipe_adj_table_init(struct mlxsw_sp *mlxsw_sp) 1256static int mlxsw_sp_dpipe_adj_table_init(struct mlxsw_sp *mlxsw_sp)
1217{ 1257{
1218 struct devlink *devlink = priv_to_devlink(mlxsw_sp->core); 1258 struct devlink *devlink = priv_to_devlink(mlxsw_sp->core);
1259 int err;
1219 1260
1220 return devlink_dpipe_table_register(devlink, 1261 err = devlink_dpipe_table_register(devlink,
1221 MLXSW_SP_DPIPE_TABLE_NAME_ADJ, 1262 MLXSW_SP_DPIPE_TABLE_NAME_ADJ,
1222 &mlxsw_sp_dpipe_table_adj_ops, 1263 &mlxsw_sp_dpipe_table_adj_ops,
1223 mlxsw_sp, false); 1264 mlxsw_sp, false);
1265 if (err)
1266 return err;
1267
1268 err = devlink_dpipe_table_resource_set(devlink,
1269 MLXSW_SP_DPIPE_TABLE_NAME_ADJ,
1270 MLXSW_SP_RESOURCE_KVD_LINEAR,
1271 MLXSW_SP_DPIPE_TABLE_RESOURCE_UNIT_ADJ);
1272 if (err)
1273 goto err_resource_set;
1274
1275 return 0;
1276
1277err_resource_set:
1278 devlink_dpipe_table_unregister(devlink,
1279 MLXSW_SP_DPIPE_TABLE_NAME_ADJ);
1280 return err;
1224} 1281}
1225 1282
1226static void mlxsw_sp_dpipe_adj_table_fini(struct mlxsw_sp *mlxsw_sp) 1283static void mlxsw_sp_dpipe_adj_table_fini(struct mlxsw_sp *mlxsw_sp)