On 2023-07-30 03:35:12, Dmitry Baryshkov wrote: > The DPU_PINGPONG_TE bit is set for all PINGPONG blocks on DPU < 5.0. > Rather than checking for the flag, check for the presense of the > corresponding interrupt line. > > Reviewed-by: Marijn Suijten <marijn.suijten@xxxxxxxxxxxxxx> This patch changed significantly since the last submission, but it is still to my liking so this r-b stays! - Marijn > Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@xxxxxxxxxx> > --- > drivers/gpu/drm/msm/disp/dpu1/dpu_hw_pingpong.c | 6 ++++-- > drivers/gpu/drm/msm/disp/dpu1/dpu_hw_pingpong.h | 3 ++- > drivers/gpu/drm/msm/disp/dpu1/dpu_rm.c | 2 +- > 3 files changed, 7 insertions(+), 4 deletions(-) > > diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_pingpong.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_pingpong.c > index 9298c166b213..057cac7f5d93 100644 > --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_pingpong.c > +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_pingpong.c > @@ -282,7 +282,7 @@ static int dpu_hw_pp_setup_dsc(struct dpu_hw_pingpong *pp) > } > > struct dpu_hw_pingpong *dpu_hw_pingpong_init(const struct dpu_pingpong_cfg *cfg, > - void __iomem *addr) > + void __iomem *addr, const struct dpu_mdss_version *mdss_rev) > { > struct dpu_hw_pingpong *c; > > @@ -296,7 +296,9 @@ struct dpu_hw_pingpong *dpu_hw_pingpong_init(const struct dpu_pingpong_cfg *cfg, > c->idx = cfg->id; > c->caps = cfg; > > - if (test_bit(DPU_PINGPONG_TE, &cfg->features)) { > + if (mdss_rev->core_major_ver < 5) { > + WARN_ON(!cfg->intr_rdptr); > + > c->ops.enable_tearcheck = dpu_hw_pp_enable_te; > c->ops.disable_tearcheck = dpu_hw_pp_disable_te; > c->ops.connect_external_te = dpu_hw_pp_connect_external_te; > diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_pingpong.h b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_pingpong.h > index d3246a9a5808..0d541ca5b056 100644 > --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_pingpong.h > +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_pingpong.h > @@ -123,10 +123,11 @@ static inline struct dpu_hw_pingpong *to_dpu_hw_pingpong(struct dpu_hw_blk *hw) > * pingpong catalog entry. > * @cfg: Pingpong catalog entry for which driver object is required > * @addr: Mapped register io address of MDP > + * @mdss_rev: dpu core's major and minor versions > * Return: Error code or allocated dpu_hw_pingpong context > */ > struct dpu_hw_pingpong *dpu_hw_pingpong_init(const struct dpu_pingpong_cfg *cfg, > - void __iomem *addr); > + void __iomem *addr, const struct dpu_mdss_version *mdss_rev); > > /** > * dpu_hw_pingpong_destroy - destroys pingpong driver context > diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_rm.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_rm.c > index 4a53e2c931d6..9894eea77b5f 100644 > --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_rm.c > +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_rm.c > @@ -145,7 +145,7 @@ int dpu_rm_init(struct dpu_rm *rm, > struct dpu_hw_pingpong *hw; > const struct dpu_pingpong_cfg *pp = &cat->pingpong[i]; > > - hw = dpu_hw_pingpong_init(pp, mmio); > + hw = dpu_hw_pingpong_init(pp, mmio, cat->mdss_ver); > if (IS_ERR(hw)) { > rc = PTR_ERR(hw); > DPU_ERROR("failed pingpong object creation: err %d\n", > -- > 2.39.2 >