From 3b341544a3dae555d48ece948c44b3b434543077 Mon Sep 17 00:00:00 2001 From: Eric Anholt Date: Tue, 2 Apr 2019 13:29:00 -0700 Subject: [PATCH 597/703] drm/vc4: Fix vblank timestamping for firmwarekms. The core doesn't expect a false return from the scanoutpos function in normal usage, so we were doing the precise vblank timestamping path and thus "immediate" vblank disables (even though firmwarekms can't actually disable vblanks interrupts, sigh), and the kernel would get confused when getting timestamp info when also turning vblanks back on. Signed-off-by: Eric Anholt --- drivers/gpu/drm/vc4/vc4_crtc.c | 3 --- drivers/gpu/drm/vc4/vc4_firmware_kms.c | 6 ++++++ 2 files changed, 6 insertions(+), 3 deletions(-) --- a/drivers/gpu/drm/vc4/vc4_crtc.c +++ b/drivers/gpu/drm/vc4/vc4_crtc.c @@ -133,9 +133,6 @@ bool vc4_crtc_get_scanoutpos(struct drm_ int vblank_lines; bool ret = false; - if (vc4->firmware_kms) - return 0; - /* preempt_disable_rt() should go right here in PREEMPT_RT patchset. */ /* Get optional system timestamp before query. */ --- a/drivers/gpu/drm/vc4/vc4_firmware_kms.c +++ b/drivers/gpu/drm/vc4/vc4_firmware_kms.c @@ -673,6 +673,12 @@ static int vc4_fkms_bind(struct device * vc4->firmware_kms = true; + /* firmware kms doesn't have precise a scanoutpos implementation, so + * we can't do the precise vblank timestamp mode. + */ + drm->driver->get_scanout_position = NULL; + drm->driver->get_vblank_timestamp = NULL; + vc4_crtc = devm_kzalloc(dev, sizeof(*vc4_crtc), GFP_KERNEL); if (!vc4_crtc) return -ENOMEM;