On Tue, Jan 23, 2018 at 03:16:36PM -0800, John Stultz wrote:
> In trying to use drm_hwcomposer with HiKey/HiKey960 boards, I
> found that the crtc wouldn't intitalize and the atomic commit
> calls were failing.
>
> I initially chased this down to following check in the kernel
> drm_atomic_crtc_check() function failing:
>
> if (state->event && !state->active && !crtc->state->active) {
> DRM_DEBUG_ATOMIC("[CRTC:%d:%s] requesting event but off\n",
> crtc->base.id, crtc->name);
> return -EINVAL;
> }
>
> Where because a fence was submitted state->event was set, but
> the crtc state was not active. This results in the atomic commit
> to fail and no mode to be set.
>
> After hacking around this in the kernel, Sean Paul helped me
> understand that it was the kernel complaining about the crtc
> state being provided in the atomic commit which did not have the
> active flag set.
>
> Thus, the proper fix is to make sure when we do the modesetting
> that we also set the crtc state active flag in property set.
>
> With this change, the kernel no longer rejects the atomic commit
> and the crtc initializes properly.
>
> Cc: Marissa Wall <[email protected]>
> Cc: Sean Paul <[email protected]>
> Cc: Dmitry Shmidt <[email protected]>
> Cc: Robert Foss <[email protected]>
> Cc: Matt Szczesiak <[email protected]>
> Cc: Liviu Dudau <[email protected]>
> Cc: David Hanna <[email protected]>
> Cc: Rob Herring <[email protected]>
> Signed-off-by: John Stultz <[email protected]>
Applied.
Thanks for the patch!
Sean
> ---
> drmdisplaycompositor.cpp | 7 +++++++
> 1 file changed, 7 insertions(+)
>
> diff --git a/drmdisplaycompositor.cpp b/drmdisplaycompositor.cpp
> index acd13b8..3a20b31 100644
> --- a/drmdisplaycompositor.cpp
> +++ b/drmdisplaycompositor.cpp
> @@ -520,6 +520,13 @@ int
> DrmDisplayCompositor::CommitFrame(DrmDisplayComposition *display_comp,
> }
>
> if (mode_.needs_modeset) {
> + ret = drmModeAtomicAddProperty(pset, crtc->id(),
> crtc->active_property().id(), 1);
> + if (ret < 0) {
> + ALOGE("Failed to add crtc active to pset\n");
> + drmModeAtomicFree(pset);
> + return ret;
> + }
> +
> ret = drmModeAtomicAddProperty(pset, crtc->id(),
> crtc->mode_property().id(),
> mode_.blob_id) < 0 ||
> drmModeAtomicAddProperty(pset, connector->id(),
> --
> 2.7.4
>
--
Sean Paul, Software Engineer, Google / Chromium OS
_______________________________________________
dri-devel mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/dri-devel