struct drm_framebuffer *fb;
        struct intel_framebuffer *intel_fb;
 
-       val = I915_READ(DSPCNTR(i9xx_plane));
-       if (!(val & DISPLAY_PLANE_ENABLE))
+       if (!plane->get_hw_state(plane))
                return;
 
        intel_fb = kzalloc(sizeof(*intel_fb), GFP_KERNEL);
 
        fb->dev = dev;
 
+       val = I915_READ(DSPCNTR(i9xx_plane));
+
        if (INTEL_GEN(dev_priv) >= 4) {
                if (val & DISPPLANE_TILED) {
                        plane_config->tiling = I915_TILING_X;
        struct drm_framebuffer *fb;
        struct intel_framebuffer *intel_fb;
 
+       if (!plane->get_hw_state(plane))
+               return;
+
        intel_fb = kzalloc(sizeof(*intel_fb), GFP_KERNEL);
        if (!intel_fb) {
                DRM_DEBUG_KMS("failed to alloc fb\n");
        fb->dev = dev;
 
        val = I915_READ(PLANE_CTL(pipe, plane_id));
-       if (!(val & PLANE_CTL_ENABLE))
-               goto error;
 
        pixel_format = val & PLANE_CTL_FORMAT_MASK;