From: Ilan Tayari <il...@mellanox.com>

Add handlers for this event to perform graceful teardown of the device.

Signed-off-by: Ilan Tayari <il...@mellanox.com>
Signed-off-by: Adi Nissim <a...@mellanox.com>
Signed-off-by: Saeed Mahameed <sae...@mellanox.com>
---
 .../ethernet/mellanox/mlx5/core/fpga/core.c   | 28 ++++++++++++++++---
 1 file changed, 24 insertions(+), 4 deletions(-)

diff --git a/drivers/net/ethernet/mellanox/mlx5/core/fpga/core.c 
b/drivers/net/ethernet/mellanox/mlx5/core/fpga/core.c
index 26caa0475985..436a8136f26f 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/fpga/core.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/fpga/core.c
@@ -50,6 +50,11 @@ static const char *const mlx5_fpga_error_strings[] = {
        "Temperature Critical",
 };
 
+static const char * const mlx5_fpga_qp_error_strings[] = {
+       "Null Syndrome",
+       "Retry Counter Expired",
+       "RNR Expired",
+};
 static struct mlx5_fpga_device *mlx5_fpga_device_alloc(void)
 {
        struct mlx5_fpga_device *fdev = NULL;
@@ -271,23 +276,38 @@ static const char *mlx5_fpga_syndrome_to_string(u8 
syndrome)
        return "Unknown";
 }
 
+static const char *mlx5_fpga_qp_syndrome_to_string(u8 syndrome)
+{
+       if (syndrome < ARRAY_SIZE(mlx5_fpga_qp_error_strings))
+               return mlx5_fpga_qp_error_strings[syndrome];
+       return "Unknown";
+}
+
 void mlx5_fpga_event(struct mlx5_core_dev *mdev, u8 event, void *data)
 {
        struct mlx5_fpga_device *fdev = mdev->fpga;
        const char *event_name;
        bool teardown = false;
        unsigned long flags;
+       u32 fpga_qpn;
        u8 syndrome;
 
-       if (event != MLX5_EVENT_TYPE_FPGA_ERROR) {
+       switch (event) {
+       case MLX5_EVENT_TYPE_FPGA_ERROR:
+               syndrome = MLX5_GET(fpga_error_event, data, syndrome);
+               event_name = mlx5_fpga_syndrome_to_string(syndrome);
+               break;
+       case MLX5_EVENT_TYPE_FPGA_QP_ERROR:
+               syndrome = MLX5_GET(fpga_qp_error_event, data, syndrome);
+               event_name = mlx5_fpga_qp_syndrome_to_string(syndrome);
+               fpga_qpn = MLX5_GET(fpga_qp_error_event, data, fpga_qpn);
+               break;
+       default:
                mlx5_fpga_warn_ratelimited(fdev, "Unexpected event %u\n",
                                           event);
                return;
        }
 
-       syndrome = MLX5_GET(fpga_error_event, data, syndrome);
-       event_name = mlx5_fpga_syndrome_to_string(syndrome);
-
        spin_lock_irqsave(&fdev->state_lock, flags);
        switch (fdev->state) {
        case MLX5_FPGA_STATUS_SUCCESS:
-- 
2.17.0

Reply via email to