[PATCH] drm/mediatek: Add wait_event_timeout when disabling plane
Daniel Stone
daniel at fooishbar.org
Sat May 24 12:47:13 UTC 2025
Hi Jason,
On Thu, 22 May 2025 at 09:52, Jason-JH Lin <jason-jh.lin at mediatek.com> wrote:
> Our hardware registers are set through GCE, not by the CPU.
> DRM might assume the hardware is disabled immediately after calling
> atomic_disable() of drm_plane, but it is only truly disabled after the
> GCE IRQ is triggered.
>
> Additionally, the cursor plane in DRM uses async_commit, so DRM will
> not wait for vblank and will free the buffer immediately after calling
> atomic_disable().
>
> To prevent the framebuffer from being freed before the layer disable
> settings are configured into the hardware, which can cause an IOMMU
> fault error, a wait_event_timeout has been added to wait for the
> ddp_cmdq_cb() callback,indicating that the GCE IRQ has been triggered.
Waiting up to 500ms for each plane to be disabled is ... not ideal.
Especially as multiple planes can be disabled at once. This may happen
dynamically during runtime, e.g. when a video is playing and a user
moves their cursor over the plane to make the UI controls visible.
I think this should be handled through the atomic_commit() handler,
with asynchronous tracking of the state, instead of the hard block
here.
Cheers,
Daniel
More information about the dri-devel
mailing list