Aw: Re: Re: BUG: MTK DRM/HDMI broken on 5.13 (mt7623/bpi-r2)

From: Frank Wunderlich
Date: Thu Jul 08 2021 - 10:01:31 EST


> Gesendet: Donnerstag, 08. Juli 2021 um 14:30 Uhr
> Von: "Dafna Hirschfeld" <dafna.hirschfeld@xxxxxxxxxxxxx>
> > i see both messages, but mtk_crtc_ddp_irq is never called and so the other 2 not.
>
> Yes, In my case the irq isr is also not called after resume which cause the warning
> even though "enable_vblank" do get called. Don't know why is that.


> > comp->funcs->enable_vblank should be mtk_drm_crtc_enable_vblank, right?
>
> No, this is a bit confusing , there are also the funcs of the components, see in file mtk_drm_ddp_comp.c
> so for mt7623 it is mtk_ovl_enable_vblank.

thanks for pointing to this. in this function another struct is filled with the callback+data, and this callback seems to be called mtk_disp_ovl_irq_handler which name suggests also a irq as trigger

412 ret = devm_request_irq(dev, irq, mtk_disp_ovl_irq_handler,
413 IRQF_TRIGGER_NONE, dev_name(dev), priv);
414 if (ret < 0) {
415 dev_err(dev, "Failed to request irq %d: %d\n", irq, ret);
416 return ret;
417 }

as i don't see this error in dmesg, i guess the registration was successful. added again some debug and it looks like the interrupt callback (mtk_disp_ovl_irq_handler) is not called

[ 5.125002] DEBUG: Passed mtk_disp_ovl_probe 416 int reg:0
[ 6.344029] DEBUG: Passed mtk_drm_crtc_enable_vblank 510
[ 6.344051] DEBUG: Passed mtk_ddp_comp_enable_vblank 117
[ 6.344057] DEBUG: Passed mtk_ovl_enable_vblank 107
[ 6.344062] DEBUG: Passed mtk_ovl_enable_vblank 112
[ 6.344066] DEBUG: Passed mtk_ddp_comp_enable_vblank 121

--- a/drivers/gpu/drm/mediatek/mtk_disp_ovl.c
+++ b/drivers/gpu/drm/mediatek/mtk_disp_ovl.c
@@ -86,6 +86,7 @@ static irqreturn_t mtk_disp_ovl_irq_handler(int irq, void *dev_id)
{
struct mtk_disp_ovl *priv = dev_id;

+printk(KERN_ALERT "DEBUG: Passed %s %d \n",__FUNCTION__,__LINE__);
/* Clear frame completion interrupt */
writel(0x0, priv->regs + DISP_REG_OVL_INTSTA);

@@ -93,6 +94,7 @@ static irqreturn_t mtk_disp_ovl_irq_handler(int irq, void *dev_id)
return IRQ_NONE;

priv->vblank_cb(priv->vblank_cb_data);
+printk(KERN_ALERT "DEBUG: Passed %s %d \n",__FUNCTION__,__LINE__);

return IRQ_HANDLED;
}
@@ -102,11 +104,12 @@ void mtk_ovl_enable_vblank(struct device *dev,
void *vblank_cb_data)
{
struct mtk_disp_ovl *ovl = dev_get_drvdata(dev);
-
+printk(KERN_ALERT "DEBUG: Passed %s %d \n",__FUNCTION__,__LINE__);
ovl->vblank_cb = vblank_cb;
ovl->vblank_cb_data = vblank_cb_data;
writel(0x0, ovl->regs + DISP_REG_OVL_INTSTA);
writel_relaxed(OVL_FME_CPL_INT, ovl->regs + DISP_REG_OVL_INTEN);
+printk(KERN_ALERT "DEBUG: Passed %s %d \n",__FUNCTION__,__LINE__);
}

void mtk_ovl_disable_vblank(struct device *dev)
@@ -410,6 +413,7 @@ static int mtk_disp_ovl_probe(struct platform_device *pdev)

ret = devm_request_irq(dev, irq, mtk_disp_ovl_irq_handler,
IRQF_TRIGGER_NONE, dev_name(dev), priv);
+printk(KERN_ALERT "DEBUG: Passed %s %d int reg:%d\n",__FUNCTION__,__LINE__,ret);
if (ret < 0) {
dev_err(dev, "Failed to request irq %d: %d\n", irq, ret);
return ret;


how can we trace this further? maybe watchdog related?

> >
> > "watchdog: watchdog0: watchdog did not stop!"
> >
> > i see this with my 5.13, 5.12-drm (5.12.0+mtk/core drm-patches) and 5.12.14 too (hdmi is working there), but not 5.12.0!
> > that means something in drm-patches (mtk/core) breaks watchdog. maybe the recursion mentioned above?