drm/modes: drop __drm_framebuffer_unregister.
[deliverable/linux.git] / drivers / gpu / drm / i915 / intel_fbdev.c
index bea75cafc623f158325cde3011d05a61f3fbce1e..79ac202f38701d266d4fd15826bfa4ac61cfdf8c 100644 (file)
@@ -119,9 +119,10 @@ static int intelfb_alloc(struct drm_fb_helper *helper,
 {
        struct intel_fbdev *ifbdev =
                container_of(helper, struct intel_fbdev, helper);
-       struct drm_framebuffer *fb = NULL;
+       struct drm_framebuffer *fb;
        struct drm_device *dev = helper->dev;
        struct drm_i915_private *dev_priv = to_i915(dev);
+       struct i915_ggtt *ggtt = &dev_priv->ggtt;
        struct drm_mode_fb_cmd2 mode_cmd = {};
        struct drm_i915_gem_object *obj = NULL;
        int size, ret;
@@ -146,7 +147,7 @@ static int intelfb_alloc(struct drm_fb_helper *helper,
        /* If the FB is too big, just don't use it since fbdev is not very
         * important and we should probably use that space with FBC or other
         * features. */
-       if (size * 2 < dev_priv->gtt.stolen_usable_size)
+       if (size * 2 < ggtt->stolen_usable_size)
                obj = i915_gem_object_create_stolen(dev, size);
        if (obj == NULL)
                obj = i915_gem_alloc_object(dev, size);
@@ -171,8 +172,6 @@ static int intelfb_alloc(struct drm_fb_helper *helper,
 
 out:
        mutex_unlock(&dev->struct_mutex);
-       if (!IS_ERR_OR_NULL(fb))
-               drm_framebuffer_unreference(fb);
        return ret;
 }
 
@@ -183,7 +182,8 @@ static int intelfb_create(struct drm_fb_helper *helper,
                container_of(helper, struct intel_fbdev, helper);
        struct intel_framebuffer *intel_fb = ifbdev->fb;
        struct drm_device *dev = helper->dev;
-       struct drm_i915_private *dev_priv = dev->dev_private;
+       struct drm_i915_private *dev_priv = to_i915(dev);
+       struct i915_ggtt *ggtt = &dev_priv->ggtt;
        struct fb_info *info;
        struct drm_framebuffer *fb;
        struct drm_i915_gem_object *obj;
@@ -222,7 +222,7 @@ static int intelfb_create(struct drm_fb_helper *helper,
         * This also validates that any existing fb inherited from the
         * BIOS is suitable for own access.
         */
-       ret = intel_pin_and_fence_fb_obj(NULL, &ifbdev->fb->base, NULL);
+       ret = intel_pin_and_fence_fb_obj(&ifbdev->fb->base, BIT(DRM_ROTATE_0));
        if (ret)
                goto out_unlock;
 
@@ -246,13 +246,13 @@ static int intelfb_create(struct drm_fb_helper *helper,
 
        /* setup aperture base/size for vesafb takeover */
        info->apertures->ranges[0].base = dev->mode_config.fb_base;
-       info->apertures->ranges[0].size = dev_priv->gtt.mappable_end;
+       info->apertures->ranges[0].size = ggtt->mappable_end;
 
        info->fix.smem_start = dev->mode_config.fb_base + i915_gem_obj_ggtt_offset(obj);
        info->fix.smem_len = size;
 
        info->screen_base =
-               ioremap_wc(dev_priv->gtt.mappable_base + i915_gem_obj_ggtt_offset(obj),
+               ioremap_wc(ggtt->mappable_base + i915_gem_obj_ggtt_offset(obj),
                           size);
        if (!info->screen_base) {
                DRM_ERROR("Failed to remap framebuffer into virtual memory\n");
@@ -381,6 +381,7 @@ retry:
                struct drm_connector *connector;
                struct drm_encoder *encoder;
                struct drm_fb_helper_crtc *new_crtc;
+               struct intel_crtc *intel_crtc;
 
                fb_conn = fb_helper->connector_info[i];
                connector = fb_conn->connector;
@@ -408,8 +409,8 @@ retry:
                        continue;
                }
 
-               encoder = connector->encoder;
-               if (!encoder || WARN_ON(!encoder->crtc)) {
+               encoder = connector->state->best_encoder;
+               if (!encoder || WARN_ON(!connector->state->crtc)) {
                        if (connector->force > DRM_FORCE_OFF)
                                goto bail;
 
@@ -422,7 +423,14 @@ retry:
 
                num_connectors_enabled++;
 
-               new_crtc = intel_fb_helper_crtc(fb_helper, encoder->crtc);
+               intel_crtc = to_intel_crtc(connector->state->crtc);
+               for (j = 0; j < 256; j++) {
+                       intel_crtc->lut_r[j] = j;
+                       intel_crtc->lut_g[j] = j;
+                       intel_crtc->lut_b[j] = j;
+               }
+
+               new_crtc = intel_fb_helper_crtc(fb_helper, connector->state->crtc);
 
                /*
                 * Make sure we're not trying to drive multiple connectors
@@ -468,17 +476,22 @@ retry:
                         * usually contains. But since our current
                         * code puts a mode derived from the post-pfit timings
                         * into crtc->mode this works out correctly.
+                        *
+                        * This is crtc->mode and not crtc->state->mode for the
+                        * fastboot check to work correctly. crtc_state->mode has
+                        * I915_MODE_FLAG_INHERITED, which we clear to force check
+                        * state.
                         */
                        DRM_DEBUG_KMS("looking for current mode on connector %s\n",
                                      connector->name);
-                       modes[i] = &encoder->crtc->mode;
+                       modes[i] = &connector->state->crtc->mode;
                }
                crtcs[i] = new_crtc;
 
                DRM_DEBUG_KMS("connector %s on pipe %c [CRTC:%d]: %dx%d%s\n",
                              connector->name,
-                             pipe_name(to_intel_crtc(encoder->crtc)->pipe),
-                             encoder->crtc->base.id,
+                             pipe_name(to_intel_crtc(connector->state->crtc)->pipe),
+                             connector->state->crtc->base.id,
                              modes[i]->hdisplay, modes[i]->vdisplay,
                              modes[i]->flags & DRM_MODE_FLAG_INTERLACE ? "i" :"");
 
This page took 0.027892 seconds and 5 git commands to generate.