Skip to content

Commit

Permalink
drm/i915: always preserve bios swizzling
Browse files Browse the repository at this point in the history
Currently we only set preserve_bios_swizzling when the initial fb is
shared and totally miss the single-screen case. Fix this by
consolidating all the logic for both cases.

This seems to go back to when swizzle preservation was originally
merged in

commit d9ceb81
Author: Jesse Barnes <[email protected]>
Date:   Thu Oct 9 12:57:43 2014 -0700

    drm/i915: preserve swizzle settings if necessary v4

Cc: Kristian Høgsberg <[email protected]>
Cc: Jesse Barnes <[email protected]>
Signed-off-by: Daniel Vetter <[email protected]>
  • Loading branch information
danvet committed Mar 26, 2015
1 parent f6936e2 commit 88595ac
Showing 1 changed file with 22 additions and 25 deletions.
47 changes: 22 additions & 25 deletions drivers/gpu/drm/i915/intel_display.c
Original file line number Diff line number Diff line change
Expand Up @@ -2543,14 +2543,11 @@ intel_alloc_initial_plane_obj(struct intel_crtc *crtc,
mode_cmd.flags = DRM_MODE_FB_MODIFIERS;

mutex_lock(&dev->struct_mutex);

if (intel_framebuffer_init(dev, to_intel_framebuffer(fb),
&mode_cmd, obj)) {
DRM_DEBUG_KMS("intel fb init failed\n");
goto out_unref_obj;
}

obj->frontbuffer_bits = INTEL_FRONTBUFFER_PRIMARY(crtc->pipe);
mutex_unlock(&dev->struct_mutex);

DRM_DEBUG_KMS("initial plane fb obj %p\n", obj);
Expand Down Expand Up @@ -2585,19 +2582,15 @@ intel_find_initial_plane_obj(struct intel_crtc *intel_crtc,
struct drm_crtc *c;
struct intel_crtc *i;
struct drm_i915_gem_object *obj;
struct drm_plane *primary = intel_crtc->base.primary;
struct drm_framebuffer *fb;

if (!plane_config->fb)
return;

if (intel_alloc_initial_plane_obj(intel_crtc, plane_config)) {
struct drm_plane *primary = intel_crtc->base.primary;

primary->fb = &plane_config->fb->base;
primary->state->crtc = &intel_crtc->base;
primary->crtc = &intel_crtc->base;
update_state_fb(primary);

return;
fb = &plane_config->fb->base;
goto valid_fb;
}

kfree(plane_config->fb);
Expand All @@ -2615,25 +2608,29 @@ intel_find_initial_plane_obj(struct intel_crtc *intel_crtc,
if (!i->active)
continue;

obj = intel_fb_obj(c->primary->fb);
if (obj == NULL)
fb = c->primary->fb;
if (!fb)
continue;

obj = intel_fb_obj(fb);
if (i915_gem_obj_ggtt_offset(obj) == plane_config->base) {
struct drm_plane *primary = intel_crtc->base.primary;

if (obj->tiling_mode != I915_TILING_NONE)
dev_priv->preserve_bios_swizzle = true;

drm_framebuffer_reference(c->primary->fb);
primary->fb = c->primary->fb;
primary->state->crtc = &intel_crtc->base;
primary->crtc = &intel_crtc->base;
update_state_fb(intel_crtc->base.primary);
obj->frontbuffer_bits |= INTEL_FRONTBUFFER_PRIMARY(intel_crtc->pipe);
break;
drm_framebuffer_reference(fb);
goto valid_fb;
}
}

return;

valid_fb:
obj = intel_fb_obj(fb);
if (obj->tiling_mode != I915_TILING_NONE)
dev_priv->preserve_bios_swizzle = true;

primary->fb = fb;
primary->state->crtc = &intel_crtc->base;
primary->crtc = &intel_crtc->base;
update_state_fb(primary);
obj->frontbuffer_bits |= INTEL_FRONTBUFFER_PRIMARY(intel_crtc->pipe);
}

static void i9xx_update_primary_plane(struct drm_crtc *crtc,
Expand Down

0 comments on commit 88595ac

Please sign in to comment.