return "MLX5_EVENT_TYPE_GPIO_EVENT";
        case MLX5_EVENT_TYPE_PORT_MODULE_EVENT:
                return "MLX5_EVENT_TYPE_PORT_MODULE_EVENT";
+       case MLX5_EVENT_TYPE_TEMP_WARN_EVENT:
+               return "MLX5_EVENT_TYPE_TEMP_WARN_EVENT";
        case MLX5_EVENT_TYPE_REMOTE_CONFIG:
                return "MLX5_EVENT_TYPE_REMOTE_CONFIG";
        case MLX5_EVENT_TYPE_DB_BF_CONGESTION:
        }
 }
 
+static void mlx5_temp_warning_event(struct mlx5_core_dev *dev,
+                                   struct mlx5_eqe *eqe)
+{
+       u64 value_lsb;
+       u64 value_msb;
+
+       value_lsb = be64_to_cpu(eqe->data.temp_warning.sensor_warning_lsb);
+       value_msb = be64_to_cpu(eqe->data.temp_warning.sensor_warning_msb);
+
+       mlx5_core_warn(dev,
+                      "High temperature on sensors with bit set %llx %llx",
+                      value_msb, value_lsb);
+}
+
 /* caller must eventually call mlx5_cq_put on the returned cq */
 static struct mlx5_core_cq *mlx5_eq_cq_get(struct mlx5_eq *eq, u32 cqn)
 {
                        mlx5_fpga_event(dev, eqe->type, &eqe->data.raw);
                        break;
 
+               case MLX5_EVENT_TYPE_TEMP_WARN_EVENT:
+                       mlx5_temp_warning_event(dev, eqe);
+                       break;
+
                case MLX5_EVENT_TYPE_GENERAL_EVENT:
                        general_event_handler(dev, eqe);
                        break;
                async_event_mask |= (1ull << MLX5_EVENT_TYPE_DCT_DRAINED);
 
 
+       if (MLX5_CAP_GEN(dev, temp_warn_event))
+               async_event_mask |= (1ull << MLX5_EVENT_TYPE_TEMP_WARN_EVENT);
+
        err = mlx5_create_map_eq(dev, &table->cmd_eq, MLX5_EQ_VEC_CMD,
                                 MLX5_NUM_CMD_EQE, 1ull << MLX5_EVENT_TYPE_CMD,
                                 "mlx5_cmd_eq", MLX5_EQ_TYPE_ASYNC);
 
        MLX5_EVENT_TYPE_PORT_CHANGE        = 0x09,
        MLX5_EVENT_TYPE_GPIO_EVENT         = 0x15,
        MLX5_EVENT_TYPE_PORT_MODULE_EVENT  = 0x16,
+       MLX5_EVENT_TYPE_TEMP_WARN_EVENT    = 0x17,
        MLX5_EVENT_TYPE_REMOTE_CONFIG      = 0x19,
        MLX5_EVENT_TYPE_GENERAL_EVENT      = 0x22,
        MLX5_EVENT_TYPE_PPS_EVENT          = 0x25,
        __be32  dctn;
 };
 
+struct mlx5_eqe_temp_warning {
+       __be64 sensor_warning_msb;
+       __be64 sensor_warning_lsb;
+} __packed;
+
 union ev_data {
        __be32                          raw[7];
        struct mlx5_eqe_cmd             cmd;
        struct mlx5_eqe_port_module     port_module;
        struct mlx5_eqe_pps             pps;
        struct mlx5_eqe_dct             dct;
+       struct mlx5_eqe_temp_warning    temp_warning;
 } __packed;
 
 struct mlx5_eqe {