.dump = mlx5_fw_fatal_reporter_dump,
 };
 
-#define MLX5_REPORTER_FW_GRACEFUL_PERIOD 1200000
+#define MLX5_FW_REPORTER_ECPF_GRACEFUL_PERIOD 180000
+#define MLX5_FW_REPORTER_PF_GRACEFUL_PERIOD 60000
+#define MLX5_FW_REPORTER_VF_GRACEFUL_PERIOD 30000
+#define MLX5_FW_REPORTER_DEFAULT_GRACEFUL_PERIOD MLX5_FW_REPORTER_VF_GRACEFUL_PERIOD
+
 static void mlx5_fw_reporters_create(struct mlx5_core_dev *dev)
 {
        struct mlx5_core_health *health = &dev->priv.health;
        struct devlink *devlink = priv_to_devlink(dev);
+       u64 grace_period;
+
+       if (mlx5_core_is_ecpf(dev)) {
+               grace_period = MLX5_FW_REPORTER_ECPF_GRACEFUL_PERIOD;
+       } else if (mlx5_core_is_pf(dev)) {
+               grace_period = MLX5_FW_REPORTER_PF_GRACEFUL_PERIOD;
+       } else {
+               /* VF or SF */
+               grace_period = MLX5_FW_REPORTER_DEFAULT_GRACEFUL_PERIOD;
+       }
 
        health->fw_reporter =
                devlink_health_reporter_create(devlink, &mlx5_fw_reporter_ops,
        health->fw_fatal_reporter =
                devlink_health_reporter_create(devlink,
                                               &mlx5_fw_fatal_reporter_ops,
-                                              MLX5_REPORTER_FW_GRACEFUL_PERIOD,
+                                              grace_period,
                                               dev);
        if (IS_ERR(health->fw_fatal_reporter))
                mlx5_core_warn(dev, "Failed to create fw fatal reporter, err = %ld\n",