diff mbox

[0213/1094] drm/i915: don't preserve inherited configs with nothing on v2

Message ID 1413889294-31328-214-git-send-email-dheerajx.s.jamwal@intel.com (mailing list archive)
State New, archived
Headers show

Commit Message

Dheeraj Jamwal Oct. 21, 2014, 10:46 a.m. UTC
From: Jesse Barnes <jbarnes@virtuousgeek.org>

It can be corrected later and may be what was actually desired, but
generally isn't, so if we find nothing is enabled, let the core DRM fb
helper figure something out.

v2: free the array too (Jesse)

Note that this also undoes any changes in case we bail out due to hw
cloning.

Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
(cherry picked from commit 02f5eebb63ad52c832a81109d68718df6cb1155e)

Signed-off-by: Dheeraj Jamwal <dheerajx.s.jamwal@intel.com>
---
 drivers/gpu/drm/i915/intel_fbdev.c |   26 ++++++++++++++++++++++++--
 1 file changed, 24 insertions(+), 2 deletions(-)
diff mbox

Patch

diff --git a/drivers/gpu/drm/i915/intel_fbdev.c b/drivers/gpu/drm/i915/intel_fbdev.c
index 25d2746..19be4bf 100644
--- a/drivers/gpu/drm/i915/intel_fbdev.c
+++ b/drivers/gpu/drm/i915/intel_fbdev.c
@@ -286,7 +286,17 @@  static bool intel_fb_initial_config(struct drm_fb_helper *fb_helper,
 				    struct drm_display_mode **modes,
 				    bool *enabled, int width, int height)
 {
+	struct drm_device *dev = fb_helper->dev;
 	int i, j;
+	bool *save_enabled;
+	bool any_enabled = false;
+
+	save_enabled = kcalloc(dev->mode_config.num_connector, sizeof(bool),
+			       GFP_KERNEL);
+	if (!save_enabled)
+		return false;
+
+	memcpy(save_enabled, enabled, dev->mode_config.num_connector);
 
 	for (i = 0; i < fb_helper->connector_count; i++) {
 		struct drm_fb_helper_connector *fb_conn;
@@ -318,8 +328,10 @@  static bool intel_fb_initial_config(struct drm_fb_helper *fb_helper,
 		 * match the BIOS.
 		 */
 		for (j = 0; j < fb_helper->connector_count; j++) {
-			if (crtcs[j] == new_crtc)
-				return false;
+			if (crtcs[j] == new_crtc) {
+				any_enabled = false;
+				goto out;
+			}
 		}
 
 		DRM_DEBUG_KMS("looking for cmdline mode on connector %d\n",
@@ -359,8 +371,18 @@  static bool intel_fb_initial_config(struct drm_fb_helper *fb_helper,
 			      drm_get_connector_name(connector),
 			      encoder->crtc->base.id,
 			      modes[i]->name);
+
+		any_enabled = true;
+	}
+
+out:
+	if (!any_enabled) {
+		memcpy(enabled, save_enabled, dev->mode_config.num_connector);
+		kfree(save_enabled);
+		return false;
 	}
 
+	kfree(save_enabled);
 	return true;
 }