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 <maris...@google.com>
> Cc: Sean Paul <seanp...@google.com>
> Cc: Dmitry Shmidt <dimitr...@google.com>
> Cc: Robert Foss <robert.f...@collabora.com>
> Cc: Matt Szczesiak <matt.szczes...@arm.com>
> Cc: Liviu Dudau <liviu.du...@arm.com>
> Cc: David Hanna <david.hann...@gmail.com>
> Cc: Rob Herring <rob.herr...@linaro.org>
> Signed-off-by: John Stultz <john.stu...@linaro.org>

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
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

Reply via email to