diff --git a/msm/sde/sde_encoder_phys_cmd.c b/msm/sde/sde_encoder_phys_cmd.c index 5657480466..599d268cdc 100644 --- a/msm/sde/sde_encoder_phys_cmd.c +++ b/msm/sde/sde_encoder_phys_cmd.c @@ -254,13 +254,15 @@ static void sde_encoder_phys_cmd_te_rd_ptr_irq(void *arg, int irq_idx) { struct sde_encoder_phys *phys_enc = arg; struct sde_encoder_phys_cmd *cmd_enc; - u32 event = 0; + u32 event = 0, scheduler_status = INVALID_CTL_STATUS; + struct sde_hw_ctl *ctl; if (!phys_enc || !phys_enc->hw_pp || !phys_enc->hw_intf) return; SDE_ATRACE_BEGIN("rd_ptr_irq"); cmd_enc = to_sde_encoder_phys_cmd(phys_enc); + ctl = phys_enc->hw_ctl; /** * signal only for master, when the ctl_start irq is @@ -277,10 +279,13 @@ static void sde_encoder_phys_cmd_te_rd_ptr_irq(void *arg, int irq_idx) phys_enc->parent, phys_enc, event); } + if (ctl && ctl->ops.get_scheduler_status) + scheduler_status = ctl->ops.get_scheduler_status(ctl); + SDE_EVT32_IRQ(DRMID(phys_enc->parent), phys_enc->hw_pp->idx - PINGPONG_0, phys_enc->hw_intf->idx - INTF_0, - event, 0xfff); + event, scheduler_status, 0xfff); if (phys_enc->parent_ops.handle_vblank_virt) phys_enc->parent_ops.handle_vblank_virt(phys_enc->parent, diff --git a/msm/sde/sde_hw_ctl.c b/msm/sde/sde_hw_ctl.c index 190335e90d..96506fc7f2 100644 --- a/msm/sde/sde_hw_ctl.c +++ b/msm/sde/sde_hw_ctl.c @@ -691,7 +691,7 @@ static u32 sde_hw_ctl_get_reset_status(struct sde_hw_ctl *ctx) static u32 sde_hw_ctl_get_scheduler_status(struct sde_hw_ctl *ctx) { if (!ctx) - return 0; + return INVALID_CTL_STATUS; return (u32)SDE_REG_READ(&ctx->hw, CTL_STATUS); } diff --git a/msm/sde/sde_hw_ctl.h b/msm/sde/sde_hw_ctl.h index 812d44a17c..b520a6b4bf 100644 --- a/msm/sde/sde_hw_ctl.h +++ b/msm/sde/sde_hw_ctl.h @@ -12,6 +12,8 @@ #include "sde_hw_sspp.h" #include "sde_hw_blk.h" +#define INVALID_CTL_STATUS 0xfffff88e + /** * sde_ctl_mode_sel: Interface mode selection * SDE_CTL_MODE_SEL_VID: Video mode interface