summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJosh Boyer <jwboyer@fedoraproject.org>2014-05-01 11:35:57 -0400
committerJosh Boyer <jwboyer@fedoraproject.org>2014-05-01 11:35:57 -0400
commit05009c750bfc35afde8c106ef6f4884a684a0490 (patch)
tree14187cc24d1c2c62b7c47af13876ee03a3a85634
parent8b5b8cffdcbb4a68691a151f4d126da07bac2ec0 (diff)
downloadkernel-05009c750bfc35afde8c106ef6f4884a684a0490.tar.gz
kernel-05009c750bfc35afde8c106ef6f4884a684a0490.tar.xz
kernel-05009c750bfc35afde8c106ef6f4884a684a0490.zip
Add backported drm qxl fix (rhbz 1060327)
-rw-r--r--drm-fix-qxl-mode-flags-backport.patch119
-rw-r--r--kernel.spec9
2 files changed, 128 insertions, 0 deletions
diff --git a/drm-fix-qxl-mode-flags-backport.patch b/drm-fix-qxl-mode-flags-backport.patch
new file mode 100644
index 00000000..e8885ff6
--- /dev/null
+++ b/drm-fix-qxl-mode-flags-backport.patch
@@ -0,0 +1,119 @@
+Bugzilla: 1060327
+Upstream-status: Queued for 3.16
+
+diff -up linux-3.14.2-200.fc20.i686/drivers/gpu/drm/drm_crtc_helper.c.dma linux-3.14.2-200.fc20.i686/drivers/gpu/drm/drm_crtc_helper.c
+--- linux-3.14.2-200.fc20.i686/drivers/gpu/drm/drm_crtc_helper.c.dma 2014-03-31 13:40:15.000000000 +1000
++++ linux-3.14.2-200.fc20.i686/drivers/gpu/drm/drm_crtc_helper.c 2014-05-01 10:27:07.410210002 +1000
+@@ -120,8 +120,8 @@ static void drm_mode_validate_flag(struc
+ * RETURNS:
+ * Number of modes found on @connector.
+ */
+-int drm_helper_probe_single_connector_modes(struct drm_connector *connector,
+- uint32_t maxX, uint32_t maxY)
++static int drm_helper_probe_single_connector_modes_merge_bits(struct drm_connector *connector,
++ uint32_t maxX, uint32_t maxY, bool merge_type_bits)
+ {
+ struct drm_device *dev = connector->dev;
+ struct drm_display_mode *mode;
+@@ -173,7 +173,7 @@ int drm_helper_probe_single_connector_mo
+ if (count == 0)
+ goto prune;
+
+- drm_mode_connector_list_update(connector);
++ drm_mode_connector_list_update(connector, merge_type_bits);
+
+ if (maxX && maxY)
+ drm_mode_validate_size(dev, &connector->modes, maxX,
+@@ -213,8 +213,21 @@ prune:
+
+ return count;
+ }
++
++int drm_helper_probe_single_connector_modes(struct drm_connector *connector,
++ uint32_t maxX, uint32_t maxY)
++{
++ return drm_helper_probe_single_connector_modes_merge_bits(connector, maxX, maxY, true);
++}
+ EXPORT_SYMBOL(drm_helper_probe_single_connector_modes);
+
++int drm_helper_probe_single_connector_modes_nomerge(struct drm_connector *connector,
++ uint32_t maxX, uint32_t maxY)
++{
++ return drm_helper_probe_single_connector_modes_merge_bits(connector, maxX, maxY, false);
++}
++EXPORT_SYMBOL(drm_helper_probe_single_connector_modes_nomerge);
++
+ /**
+ * drm_helper_encoder_in_use - check if a given encoder is in use
+ * @encoder: encoder to check
+diff -up linux-3.14.2-200.fc20.i686/drivers/gpu/drm/drm_modes.c.dma linux-3.14.2-200.fc20.i686/drivers/gpu/drm/drm_modes.c
+--- linux-3.14.2-200.fc20.i686/drivers/gpu/drm/drm_modes.c.dma 2014-03-31 13:40:15.000000000 +1000
++++ linux-3.14.2-200.fc20.i686/drivers/gpu/drm/drm_modes.c 2014-05-01 10:27:59.015207267 +1000
+@@ -1025,7 +1025,7 @@ EXPORT_SYMBOL(drm_mode_sort);
+ * list and only adds different modes. All modes unverified after this point
+ * will be removed by the prune invalid modes.
+ */
+-void drm_mode_connector_list_update(struct drm_connector *connector)
++void drm_mode_connector_list_update(struct drm_connector *connector, bool merge_type_bits)
+ {
+ struct drm_display_mode *mode;
+ struct drm_display_mode *pmode, *pt;
+@@ -1041,7 +1041,10 @@ void drm_mode_connector_list_update(stru
+ /* if equal delete the probed mode */
+ mode->status = pmode->status;
+ /* Merge type bits together */
+- mode->type |= pmode->type;
++ if (merge_type_bits)
++ mode->type |= pmode->type;
++ else
++ mode->type = pmode->type;
+ list_del(&pmode->head);
+ drm_mode_destroy(connector->dev, pmode);
+ break;
+diff -up linux-3.14.2-200.fc20.i686/drivers/gpu/drm/qxl/qxl_display.c.dma linux-3.14.2-200.fc20.i686/drivers/gpu/drm/qxl/qxl_display.c
+--- linux-3.14.2-200.fc20.i686/drivers/gpu/drm/qxl/qxl_display.c.dma 2014-03-31 13:40:15.000000000 +1000
++++ linux-3.14.2-200.fc20.i686/drivers/gpu/drm/qxl/qxl_display.c 2014-05-01 10:27:07.411210001 +1000
+@@ -841,7 +841,7 @@ static const struct drm_connector_funcs
+ .save = qxl_conn_save,
+ .restore = qxl_conn_restore,
+ .detect = qxl_conn_detect,
+- .fill_modes = drm_helper_probe_single_connector_modes,
++ .fill_modes = drm_helper_probe_single_connector_modes_nomerge,
+ .set_property = qxl_conn_set_property,
+ .destroy = qxl_conn_destroy,
+ };
+diff -up linux-3.14.2-200.fc20.i686/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c.dma linux-3.14.2-200.fc20.i686/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c
+--- linux-3.14.2-200.fc20.i686/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c.dma 2014-03-31 13:40:15.000000000 +1000
++++ linux-3.14.2-200.fc20.i686/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c 2014-05-01 10:27:07.411210001 +1000
+@@ -2003,7 +2003,7 @@ int vmw_du_connector_fill_modes(struct d
+ if (du->pref_mode)
+ list_move(&du->pref_mode->head, &connector->probed_modes);
+
+- drm_mode_connector_list_update(connector);
++ drm_mode_connector_list_update(connector, true);
+
+ return 1;
+ }
+diff -up linux-3.14.2-200.fc20.i686/include/drm/drm_crtc.h.dma linux-3.14.2-200.fc20.i686/include/drm/drm_crtc.h
+--- linux-3.14.2-200.fc20.i686/include/drm/drm_crtc.h.dma 2014-03-31 13:40:15.000000000 +1000
++++ linux-3.14.2-200.fc20.i686/include/drm/drm_crtc.h 2014-05-01 10:27:07.412210001 +1000
+@@ -1033,7 +1033,7 @@ extern int drm_mode_hsync(const struct d
+ extern int drm_mode_vrefresh(const struct drm_display_mode *mode);
+ extern void drm_mode_set_crtcinfo(struct drm_display_mode *p,
+ int adjust_flags);
+-extern void drm_mode_connector_list_update(struct drm_connector *connector);
++extern void drm_mode_connector_list_update(struct drm_connector *connector, bool merge_type_bits);
+ extern int drm_mode_connector_update_edid_property(struct drm_connector *connector,
+ struct edid *edid);
+ extern int drm_object_property_set_value(struct drm_mode_object *obj,
+diff -up linux-3.14.2-200.fc20.i686/include/drm/drm_crtc_helper.h.dma linux-3.14.2-200.fc20.i686/include/drm/drm_crtc_helper.h
+--- linux-3.14.2-200.fc20.i686/include/drm/drm_crtc_helper.h.dma 2014-03-31 13:40:15.000000000 +1000
++++ linux-3.14.2-200.fc20.i686/include/drm/drm_crtc_helper.h 2014-05-01 10:27:07.412210001 +1000
+@@ -126,6 +126,7 @@ struct drm_connector_helper_funcs {
+ };
+
+ extern int drm_helper_probe_single_connector_modes(struct drm_connector *connector, uint32_t maxX, uint32_t maxY);
++extern int drm_helper_probe_single_connector_modes_nomerge(struct drm_connector *connector, uint32_t maxX, uint32_t maxY);
+ extern void drm_helper_disable_unused_functions(struct drm_device *dev);
+ extern int drm_crtc_helper_set_config(struct drm_mode_set *set);
+ extern bool drm_crtc_helper_set_mode(struct drm_crtc *crtc,
diff --git a/kernel.spec b/kernel.spec
index cfb4d94a..cadc8b63 100644
--- a/kernel.spec
+++ b/kernel.spec
@@ -754,6 +754,9 @@ Patch25069: mm-try_to_unmap_cluster-should-lock_page-before-mloc.patch
#rhbz 983342 1093120
Patch25070: 0001-acpi-video-Add-4-new-models-to-the-use_native_backli.patch
+#rhbz 1060327
+Patch25071: drm-fix-qxl-mode-flags-backport.patch
+
# END OF PATCH DEFINITIONS
%endif
@@ -1462,6 +1465,9 @@ ApplyPatch mm-try_to_unmap_cluster-should-lock_page-before-mloc.patch
#rhbz 983342 1093120
ApplyPatch 0001-acpi-video-Add-4-new-models-to-the-use_native_backli.patch
+#rhbz 1060327
+ApplyPatch drm-fix-qxl-mode-flags-backport.patch
+
# END OF PATCH APPLICATIONS
%endif
@@ -2273,6 +2279,9 @@ fi
# ||----w |
# || ||
%changelog
+* Thu May 01 2014 Josh Boyer <jwboyer@fedoraproject.org>
+- Add backported drm qxl fix (rhbz 1060327)
+
* Thu May 1 2014 Hans de Goede <hdegoede@redhat.com>
- Sync min/max quirk patch with upstream to add a quirk for the ThinkPad L540
(rhbz 1088588)