#define DPU_ERROR_ENC(e, fmt, ...) DPU_ERROR("enc%d " fmt,\
                (e) ? (e)->base.base.id : -1, ##__VA_ARGS__)
 
+#define DPU_ERROR_ENC_RATELIMITED(e, fmt, ...) DPU_ERROR_RATELIMITED("enc%d " fmt,\
+               (e) ? (e)->base.base.id : -1, ##__VA_ARGS__)
+
 /*
  * Two to anticipate panels that can do cmd/vid dynamic switching
  * plan is to create all possible physical encoder types, and switch between
                return;
        }
 
-       DPU_ERROR_ENC(dpu_enc, "frame done timeout\n");
+       DPU_ERROR_ENC_RATELIMITED(dpu_enc, "frame done timeout\n");
 
        if (atomic_inc_return(&dpu_enc->frame_done_timeout_cnt) == 1)
                msm_disp_snapshot_state(drm_enc->dev);
 
        } while (0)
 
 #define DPU_ERROR(fmt, ...) pr_err("[dpu error]" fmt, ##__VA_ARGS__)
+#define DPU_ERROR_RATELIMITED(fmt, ...) pr_err_ratelimited("[dpu error]" fmt, ##__VA_ARGS__)
 
 /**
  * ktime_compare_safe - compare two ktime structures