Skip to content

Commit 3164a80

Browse files
Damien Lespiaujnikula
authored andcommitted
drm/i915: Fix atomic state when reusing the firmware fb
Right now, we get a warning when taking over the firmware fb: [drm:drm_atomic_plane_check] FB set but no CRTC with the following backtrace: [<ffffffffa010339d>] drm_atomic_check_only+0x35d/0x510 [drm] [<ffffffffa0103567>] drm_atomic_commit+0x17/0x60 [drm] [<ffffffffa00a6ccd>] drm_atomic_helper_plane_set_property+0x8d/0xd0 [drm_kms_helper] [<ffffffffa00f1fed>] drm_mode_plane_set_obj_prop+0x2d/0x90 [drm] [<ffffffffa00a8a1b>] restore_fbdev_mode+0x6b/0xf0 [drm_kms_helper] [<ffffffffa00aa969>] drm_fb_helper_restore_fbdev_mode_unlocked+0x29/0x80 [drm_kms_helper] [<ffffffffa00aa9e2>] drm_fb_helper_set_par+0x22/0x50 [drm_kms_helper] [<ffffffffa050a71a>] intel_fbdev_set_par+0x1a/0x60 [i915] [<ffffffff813ad444>] fbcon_init+0x4f4/0x580 That's because we update the plane state with the fb from the firmware, but we never associate the plane to that CRTC. We don't quite have the full DRM take over from HW state just yet, so fake enough of the plane atomic state to pass the checks. v2: Fix the state on which we set the CRTC in the case we're sharing the initial fb with another pipe. (Matt) Signed-off-by: Damien Lespiau <damien.lespiau@intel.com> Reviewed-by: Matt Roper <matthew.d.roper@intel.com> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch> [Jani: backported to drm-intel-fixes for v4.0-rc] Reference: http://mid.gmane.org/CA+5PVA7yXH=U757w8V=Zj2U1URG4nYNav20NpjtQ4svVueyPNw@mail.gmail.com Reference: http://lkml.kernel.org/r/CA+55aFweWR=nDzc2Y=rCtL_H8JfdprQiCimN5dwc+TgyD4Bjsg@mail.gmail.com Signed-off-by: Jani Nikula <jani.nikula@intel.com>
1 parent 832a3aa commit 3164a80

File tree

1 file changed

+9
-2
lines changed

1 file changed

+9
-2
lines changed

drivers/gpu/drm/i915/intel_display.c

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2439,7 +2439,11 @@ intel_find_plane_obj(struct intel_crtc *intel_crtc,
24392439
return;
24402440

24412441
if (intel_alloc_plane_obj(intel_crtc, plane_config)) {
2442-
update_state_fb(intel_crtc->base.primary);
2442+
struct drm_plane *primary = intel_crtc->base.primary;
2443+
2444+
primary->state->crtc = &intel_crtc->base;
2445+
update_state_fb(primary);
2446+
24432447
return;
24442448
}
24452449

@@ -2464,11 +2468,14 @@ intel_find_plane_obj(struct intel_crtc *intel_crtc,
24642468
continue;
24652469

24662470
if (i915_gem_obj_ggtt_offset(obj) == plane_config->base) {
2471+
struct drm_plane *primary = intel_crtc->base.primary;
2472+
24672473
if (obj->tiling_mode != I915_TILING_NONE)
24682474
dev_priv->preserve_bios_swizzle = true;
24692475

24702476
drm_framebuffer_reference(c->primary->fb);
2471-
intel_crtc->base.primary->fb = c->primary->fb;
2477+
primary->fb = c->primary->fb;
2478+
primary->state->crtc = &intel_crtc->base;
24722479
obj->frontbuffer_bits |= INTEL_FRONTBUFFER_PRIMARY(intel_crtc->pipe);
24732480
break;
24742481
}

0 commit comments

Comments
 (0)