net/mlx5: Query and cache PCAM, MCAM registers on initialization
[linux-2.6-block.git] / drivers / net / ethernet / mellanox / mlx5 / core / fw.c
index 5718aada66055c9d439ccac237f287f834ab5a2c..d0bbefa08af78cac0b5b095ea283ab6e50ecd7e4 100644 (file)
@@ -91,6 +91,20 @@ out:
 }
 EXPORT_SYMBOL(mlx5_core_query_vendor_id);
 
+static int mlx5_get_pcam_reg(struct mlx5_core_dev *dev)
+{
+       return mlx5_query_pcam_reg(dev, dev->caps.pcam,
+                                  MLX5_PCAM_FEATURE_ENHANCED_FEATURES,
+                                  MLX5_PCAM_REGS_5000_TO_507F);
+}
+
+static int mlx5_get_mcam_reg(struct mlx5_core_dev *dev)
+{
+       return mlx5_query_mcam_reg(dev, dev->caps.mcam,
+                                  MLX5_MCAM_FEATURE_ENHANCED_FEATURES,
+                                  MLX5_MCAM_REGS_FIRST_128);
+}
+
 int mlx5_query_hca_caps(struct mlx5_core_dev *dev)
 {
        int err;
@@ -154,6 +168,12 @@ int mlx5_query_hca_caps(struct mlx5_core_dev *dev)
                        return err;
        }
 
+       if (MLX5_CAP_GEN(dev, pcam_reg))
+               mlx5_get_pcam_reg(dev);
+
+       if (MLX5_CAP_GEN(dev, mcam_reg))
+               mlx5_get_mcam_reg(dev);
+
        return 0;
 }