From: Greg Kroah-Hartman Date: Mon, 19 Nov 2018 14:48:45 +0000 (+0100) Subject: 4.14-stable patches X-Git-Tag: v4.19.3~13 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=696fffcb95fcf8316eabd851ea5478fd3b5e76a9;p=thirdparty%2Fkernel%2Fstable-queue.git 4.14-stable patches added patches: drm-amdgpu-add-missing-chip_hainan-in-amdgpu_ucode_get_load_type.patch drm-atomic_helper-disallow-new-modesets-on-unregistered-connectors.patch drm-dp_mst-check-if-primary-mstb-is-null.patch drm-i915-don-t-oops-during-modeset-shutdown-after-lpe-audio-deinit.patch drm-i915-don-t-unset-intel_connector-mst_port.patch drm-i915-execlists-force-write-serialisation-into-context-image-vs-execution.patch drm-i915-hdmi-add-hdmi-2.0-audio-clock-recovery-n-values.patch drm-i915-large-page-offsets-for-pread-pwrite.patch drm-i915-mark-pin-flags-as-u64.patch drm-i915-restore-vblank-interrupts-earlier.patch drm-i915-skip-vcpi-allocation-for-mstb-ports-that-are-gone.patch drm-nouveau-check-backlight-ids-are-0-not-0.patch drm-rockchip-allow-driver-to-be-shutdown-on-reboot-kexec.patch efi-arm-libstub-pack-fdt-after-populating-it.patch --- diff --git a/queue-4.14/drm-amdgpu-add-missing-chip_hainan-in-amdgpu_ucode_get_load_type.patch b/queue-4.14/drm-amdgpu-add-missing-chip_hainan-in-amdgpu_ucode_get_load_type.patch new file mode 100644 index 00000000000..7cc8adab1b1 --- /dev/null +++ b/queue-4.14/drm-amdgpu-add-missing-chip_hainan-in-amdgpu_ucode_get_load_type.patch @@ -0,0 +1,34 @@ +From d9997b64c52b70bd98c48f443f068253621d1ffc Mon Sep 17 00:00:00 2001 +From: Alex Deucher +Date: Tue, 28 Aug 2018 14:16:23 -0500 +Subject: drm/amdgpu: add missing CHIP_HAINAN in amdgpu_ucode_get_load_type +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +From: Alex Deucher + +commit d9997b64c52b70bd98c48f443f068253621d1ffc upstream. + +This caused a confusing error message, but there is functionally +no problem since the default method is DIRECT. + +Reviewed-by: Michel Dänzer +Signed-off-by: Alex Deucher +Cc: stable@vger.kernel.org +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.c | 1 + + 1 file changed, 1 insertion(+) + +--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.c ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.c +@@ -247,6 +247,7 @@ amdgpu_ucode_get_load_type(struct amdgpu + case CHIP_PITCAIRN: + case CHIP_VERDE: + case CHIP_OLAND: ++ case CHIP_HAINAN: + return AMDGPU_FW_LOAD_DIRECT; + #endif + #ifdef CONFIG_DRM_AMDGPU_CIK diff --git a/queue-4.14/drm-atomic_helper-disallow-new-modesets-on-unregistered-connectors.patch b/queue-4.14/drm-atomic_helper-disallow-new-modesets-on-unregistered-connectors.patch new file mode 100644 index 00000000000..f6109c1a6a8 --- /dev/null +++ b/queue-4.14/drm-atomic_helper-disallow-new-modesets-on-unregistered-connectors.patch @@ -0,0 +1,70 @@ +From e96550956fbcd090629c0e2b5b8cded2eded2adf Mon Sep 17 00:00:00 2001 +From: Lyude Paul +Date: Mon, 8 Oct 2018 19:24:30 -0400 +Subject: drm/atomic_helper: Disallow new modesets on unregistered connectors + +From: Lyude Paul + +commit e96550956fbcd090629c0e2b5b8cded2eded2adf upstream. + +With the exception of modesets which would switch the DPMS state of a +connector from on to off, we want to make sure that we disallow all +modesets which would result in enabling a new monitor or a new mode +configuration on a monitor if the connector for the display in question +is no longer registered. This allows us to stop userspace from trying to +enable new displays on connectors for an MST topology that were just +removed from the system, without preventing userspace from disabling +DPMS on those connectors. + +Changes since v5: +- Fix typo in comment, nothing else + +Signed-off-by: Lyude Paul +Reviewed-by: Daniel Vetter +Cc: stable@vger.kernel.org +Link: https://patchwork.freedesktop.org/patch/msgid/20181008232437.5571-2-lyude@redhat.com +(cherry picked from commit 4d80273976bf880c4bed9359b8f2d45663140c86) +Signed-off-by: Joonas Lahtinen +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/gpu/drm/drm_atomic_helper.c | 21 ++++++++++++++++++++- + 1 file changed, 20 insertions(+), 1 deletion(-) + +--- a/drivers/gpu/drm/drm_atomic_helper.c ++++ b/drivers/gpu/drm/drm_atomic_helper.c +@@ -306,6 +306,26 @@ update_connector_routing(struct drm_atom + return 0; + } + ++ crtc_state = drm_atomic_get_new_crtc_state(state, ++ new_connector_state->crtc); ++ /* ++ * For compatibility with legacy users, we want to make sure that ++ * we allow DPMS On->Off modesets on unregistered connectors. Modesets ++ * which would result in anything else must be considered invalid, to ++ * avoid turning on new displays on dead connectors. ++ * ++ * Since the connector can be unregistered at any point during an ++ * atomic check or commit, this is racy. But that's OK: all we care ++ * about is ensuring that userspace can't do anything but shut off the ++ * display on a connector that was destroyed after its been notified, ++ * not before. ++ */ ++ if (!READ_ONCE(connector->registered) && crtc_state->active) { ++ DRM_DEBUG_ATOMIC("[CONNECTOR:%d:%s] is not registered\n", ++ connector->base.id, connector->name); ++ return -EINVAL; ++ } ++ + funcs = connector->helper_private; + + if (funcs->atomic_best_encoder) +@@ -350,7 +370,6 @@ update_connector_routing(struct drm_atom + + set_best_encoder(state, new_connector_state, new_encoder); + +- crtc_state = drm_atomic_get_new_crtc_state(state, new_connector_state->crtc); + crtc_state->connectors_changed = true; + + DRM_DEBUG_ATOMIC("[CONNECTOR:%d:%s] using [ENCODER:%d:%s] on [CRTC:%d:%s]\n", diff --git a/queue-4.14/drm-dp_mst-check-if-primary-mstb-is-null.patch b/queue-4.14/drm-dp_mst-check-if-primary-mstb-is-null.patch new file mode 100644 index 00000000000..17937d72711 --- /dev/null +++ b/queue-4.14/drm-dp_mst-check-if-primary-mstb-is-null.patch @@ -0,0 +1,48 @@ +From 23d8003907d094f77cf959228e2248d6db819fa7 Mon Sep 17 00:00:00 2001 +From: Stanislav Lisovskiy +Date: Fri, 9 Nov 2018 11:00:12 +0200 +Subject: drm/dp_mst: Check if primary mstb is null + +From: Stanislav Lisovskiy + +commit 23d8003907d094f77cf959228e2248d6db819fa7 upstream. + +Unfortunately drm_dp_get_mst_branch_device which is called from both +drm_dp_mst_handle_down_rep and drm_dp_mst_handle_up_rep seem to rely +on that mgr->mst_primary is not NULL, which seem to be wrong as it can be +cleared with simultaneous mode set, if probing fails or in other case. +mgr->lock mutex doesn't protect against that as it might just get +assigned to NULL right before, not simultaneously. + +There are currently bugs 107738, 108616 bugs which crash in +drm_dp_get_mst_branch_device, caused by this issue. + +v2: Refactored the code, as it was nicely noticed. + Fixed Bugzilla bug numbers(second was 108616, but not 108816) + and added links. + +[changed title and added stable cc] +Signed-off-by: Lyude Paul +Signed-off-by: Stanislav Lisovskiy +Cc: stable@vger.kernel.org +Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=108616 +Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=107738 +Link: https://patchwork.freedesktop.org/patch/msgid/20181109090012.24438-1-stanislav.lisovskiy@intel.com +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/gpu/drm/drm_dp_mst_topology.c | 3 +++ + 1 file changed, 3 insertions(+) + +--- a/drivers/gpu/drm/drm_dp_mst_topology.c ++++ b/drivers/gpu/drm/drm_dp_mst_topology.c +@@ -1232,6 +1232,9 @@ static struct drm_dp_mst_branch *drm_dp_ + mutex_lock(&mgr->lock); + mstb = mgr->mst_primary; + ++ if (!mstb) ++ goto out; ++ + for (i = 0; i < lct - 1; i++) { + int shift = (i % 2) ? 0 : 4; + int port_num = (rad[i / 2] >> shift) & 0xf; diff --git a/queue-4.14/drm-i915-don-t-oops-during-modeset-shutdown-after-lpe-audio-deinit.patch b/queue-4.14/drm-i915-don-t-oops-during-modeset-shutdown-after-lpe-audio-deinit.patch new file mode 100644 index 00000000000..21e090be355 --- /dev/null +++ b/queue-4.14/drm-i915-don-t-oops-during-modeset-shutdown-after-lpe-audio-deinit.patch @@ -0,0 +1,47 @@ +From 6a8915d0f8cf323e1beb792a33095cf652db4056 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Ville=20Syrj=C3=A4l=C3=A4?= +Date: Mon, 5 Nov 2018 21:46:04 +0200 +Subject: drm/i915: Don't oops during modeset shutdown after lpe audio deinit +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +From: Ville Syrjälä + +commit 6a8915d0f8cf323e1beb792a33095cf652db4056 upstream. + +We deinit the lpe audio device before we call +drm_atomic_helper_shutdown(), which means the platform device +may already be gone when it comes time to shut down the crtc. +As we don't know when the last reference to the platform +device gets dropped by the audio driver we can't assume that +the device and its data are still around when turning off the +crtc. Mark the platform device as gone as soon as we do the +audio deinit. + +Cc: stable@vger.kernel.org +Signed-off-by: Ville Syrjälä +Link: https://patchwork.freedesktop.org/patch/msgid/20181105194604.6994-1-ville.syrjala@linux.intel.com +Reviewed-by: Chris Wilson +(cherry picked from commit f45a7977d1140c11f334e01a9f77177ed68e3bfa) +Signed-off-by: Joonas Lahtinen +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/gpu/drm/i915/intel_lpe_audio.c | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +--- a/drivers/gpu/drm/i915/intel_lpe_audio.c ++++ b/drivers/gpu/drm/i915/intel_lpe_audio.c +@@ -303,8 +303,10 @@ void intel_lpe_audio_teardown(struct drm + lpe_audio_platdev_destroy(dev_priv); + + irq_free_desc(dev_priv->lpe_audio.irq); +-} + ++ dev_priv->lpe_audio.irq = -1; ++ dev_priv->lpe_audio.platdev = NULL; ++} + + /** + * intel_lpe_audio_notify() - notify lpe audio event diff --git a/queue-4.14/drm-i915-don-t-unset-intel_connector-mst_port.patch b/queue-4.14/drm-i915-don-t-unset-intel_connector-mst_port.patch new file mode 100644 index 00000000000..40b87ae102b --- /dev/null +++ b/queue-4.14/drm-i915-don-t-unset-intel_connector-mst_port.patch @@ -0,0 +1,103 @@ +From 80c188695a77eddaa6e8885510ff4ef59fd478c3 Mon Sep 17 00:00:00 2001 +From: Lyude Paul +Date: Mon, 8 Oct 2018 19:24:32 -0400 +Subject: drm/i915: Don't unset intel_connector->mst_port + +From: Lyude Paul + +commit 80c188695a77eddaa6e8885510ff4ef59fd478c3 upstream. + +Currently we set intel_connector->mst_port to NULL to signify that the +MST port has been removed from the system so that we can prevent further +action on the port such as connector probes, mode probing, etc. +However, we're going to need access to intel_connector->mst_port in +order to fixup ->best_encoder() so that it can always return the correct +encoder for an MST port to prevent legacy DPMS prop changes from +failing. This should be safe, so instead keep intel_connector->mst_port +always set and instead just check the status of +drm_connector->regustered to signify whether or not the connector has +disappeared from the system. + +Changes since v2: +- Add a comment to mst_port_gone (Jani Nikula) +- Change mst_port_gone to a u8 instead of a bool, per the kernel bot. + Apparently bool is discouraged in structs these days +Changes since v4: +- Don't use mst_port_gone at all! Just check if the connector is + registered or not - Daniel Vetter + +Signed-off-by: Lyude Paul +Reviewed-by: Daniel Vetter +Cc: stable@vger.kernel.org +Link: https://patchwork.freedesktop.org/patch/msgid/20181008232437.5571-4-lyude@redhat.com +(cherry picked from commit 6ed5bb1fbad34382c8cfe9a9bf737e9a43053df5) +Signed-off-by: Rodrigo Vivi +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/gpu/drm/i915/intel_dp_mst.c | 17 ++++++----------- + 1 file changed, 6 insertions(+), 11 deletions(-) + +--- a/drivers/gpu/drm/i915/intel_dp_mst.c ++++ b/drivers/gpu/drm/i915/intel_dp_mst.c +@@ -311,9 +311,8 @@ static int intel_dp_mst_get_ddc_modes(st + struct edid *edid; + int ret; + +- if (!intel_dp) { ++ if (!READ_ONCE(connector->registered)) + return intel_connector_update_modes(connector, NULL); +- } + + edid = drm_dp_mst_get_edid(connector, &intel_dp->mst_mgr, intel_connector->port); + ret = intel_connector_update_modes(connector, edid); +@@ -328,9 +327,10 @@ intel_dp_mst_detect(struct drm_connector + struct intel_connector *intel_connector = to_intel_connector(connector); + struct intel_dp *intel_dp = intel_connector->mst_port; + +- if (!intel_dp) ++ if (!READ_ONCE(connector->registered)) + return connector_status_disconnected; +- return drm_dp_mst_detect_port(connector, &intel_dp->mst_mgr, intel_connector->port); ++ return drm_dp_mst_detect_port(connector, &intel_dp->mst_mgr, ++ intel_connector->port); + } + + static void +@@ -370,7 +370,7 @@ intel_dp_mst_mode_valid(struct drm_conne + int bpp = 24; /* MST uses fixed bpp */ + int max_rate, mode_rate, max_lanes, max_link_clock; + +- if (!intel_dp) ++ if (!READ_ONCE(connector->registered)) + return MODE_ERROR; + + max_link_clock = intel_dp_max_link_rate(intel_dp); +@@ -399,7 +399,7 @@ static struct drm_encoder *intel_mst_ato + struct intel_dp *intel_dp = intel_connector->mst_port; + struct intel_crtc *crtc = to_intel_crtc(state->crtc); + +- if (!intel_dp) ++ if (!READ_ONCE(connector->registered)) + return NULL; + return &intel_dp->mst_encoders[crtc->pipe]->base.base; + } +@@ -491,7 +491,6 @@ static void intel_dp_register_mst_connec + static void intel_dp_destroy_mst_connector(struct drm_dp_mst_topology_mgr *mgr, + struct drm_connector *connector) + { +- struct intel_connector *intel_connector = to_intel_connector(connector); + struct drm_i915_private *dev_priv = to_i915(connector->dev); + + drm_connector_unregister(connector); +@@ -499,10 +498,6 @@ static void intel_dp_destroy_mst_connect + if (dev_priv->fbdev) + drm_fb_helper_remove_one_connector(&dev_priv->fbdev->helper, + connector); +- /* prevent race with the check in ->detect */ +- drm_modeset_lock(&connector->dev->mode_config.connection_mutex, NULL); +- intel_connector->mst_port = NULL; +- drm_modeset_unlock(&connector->dev->mode_config.connection_mutex); + + drm_connector_unreference(connector); + DRM_DEBUG_KMS("\n"); diff --git a/queue-4.14/drm-i915-execlists-force-write-serialisation-into-context-image-vs-execution.patch b/queue-4.14/drm-i915-execlists-force-write-serialisation-into-context-image-vs-execution.patch new file mode 100644 index 00000000000..416eec54c5a --- /dev/null +++ b/queue-4.14/drm-i915-execlists-force-write-serialisation-into-context-image-vs-execution.patch @@ -0,0 +1,63 @@ +From 0a823e8fd4fd67726697854578f3584ee3a49b1d Mon Sep 17 00:00:00 2001 +From: Chris Wilson +Date: Thu, 8 Nov 2018 08:17:38 +0000 +Subject: drm/i915/execlists: Force write serialisation into context image vs execution + +From: Chris Wilson + +commit 0a823e8fd4fd67726697854578f3584ee3a49b1d upstream. + +Ensure that the writes into the context image are completed prior to the +register mmio to trigger execution. Although previously we were assured +by the SDM that all writes are flushed before an uncached memory +transaction (our mmio write to submit the context to HW for execution), +we have empirical evidence to believe that this is not actually the +case. + +Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=108656 +References: https://bugs.freedesktop.org/show_bug.cgi?id=108315 +References: https://bugs.freedesktop.org/show_bug.cgi?id=106887 +Signed-off-by: Chris Wilson +Cc: Mika Kuoppala +Cc: Tvrtko Ursulin +Acked-by: Mika Kuoppala +Link: https://patchwork.freedesktop.org/patch/msgid/20181108081740.25615-1-chris@chris-wilson.co.uk +Cc: stable@vger.kernel.org +(cherry picked from commit 987abd5c62f92ee4970b45aa077f47949974e615) +Signed-off-by: Joonas Lahtinen +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/gpu/drm/i915/intel_lrc.c | 14 +++++++++++++- + 1 file changed, 13 insertions(+), 1 deletion(-) + +--- a/drivers/gpu/drm/i915/intel_lrc.c ++++ b/drivers/gpu/drm/i915/intel_lrc.c +@@ -325,7 +325,8 @@ static u64 execlists_update_context(stru + + reg_state[CTX_RING_TAIL+1] = intel_ring_set_tail(rq->ring, rq->tail); + +- /* True 32b PPGTT with dynamic page allocation: update PDP ++ /* ++ * True 32b PPGTT with dynamic page allocation: update PDP + * registers and point the unallocated PDPs to scratch page. + * PML4 is allocated during ppgtt init, so this is not needed + * in 48-bit mode. +@@ -333,6 +334,17 @@ static u64 execlists_update_context(stru + if (ppgtt && !i915_vm_is_48bit(&ppgtt->base)) + execlists_update_context_pdps(ppgtt, reg_state); + ++ /* ++ * Make sure the context image is complete before we submit it to HW. ++ * ++ * Ostensibly, writes (including the WCB) should be flushed prior to ++ * an uncached write such as our mmio register access, the empirical ++ * evidence (esp. on Braswell) suggests that the WC write into memory ++ * may not be visible to the HW prior to the completion of the UC ++ * register write and that we may begin execution from the context ++ * before its image is complete leading to invalid PD chasing. ++ */ ++ wmb(); + return ce->lrc_desc; + } + diff --git a/queue-4.14/drm-i915-hdmi-add-hdmi-2.0-audio-clock-recovery-n-values.patch b/queue-4.14/drm-i915-hdmi-add-hdmi-2.0-audio-clock-recovery-n-values.patch new file mode 100644 index 00000000000..a9399a2b75d --- /dev/null +++ b/queue-4.14/drm-i915-hdmi-add-hdmi-2.0-audio-clock-recovery-n-values.patch @@ -0,0 +1,60 @@ +From 6503493145cba4413ecd3d4d153faeef4a1e9b85 Mon Sep 17 00:00:00 2001 +From: Clint Taylor +Date: Thu, 25 Oct 2018 11:52:00 -0700 +Subject: drm/i915/hdmi: Add HDMI 2.0 audio clock recovery N values + +From: Clint Taylor + +commit 6503493145cba4413ecd3d4d153faeef4a1e9b85 upstream. + +HDMI 2.0 594Mhz modes were incorrectly selecting 25.200Mhz Automatic N value +mode instead of HDMI specification values. + +V2: Fix 88.2 Hz N value + +Cc: Jani Nikula +Cc: stable@vger.kernel.org +Signed-off-by: Clint Taylor +Signed-off-by: Jani Nikula +Link: https://patchwork.freedesktop.org/patch/msgid/1540493521-1746-2-git-send-email-clinton.a.taylor@intel.com +(cherry picked from commit 5a400aa3c562c4a726b4da286e63c96db905ade1) +Signed-off-by: Joonas Lahtinen +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/gpu/drm/i915/intel_audio.c | 17 +++++++++++++++++ + 1 file changed, 17 insertions(+) + +--- a/drivers/gpu/drm/i915/intel_audio.c ++++ b/drivers/gpu/drm/i915/intel_audio.c +@@ -134,6 +134,9 @@ static const struct { + /* HDMI N/CTS table */ + #define TMDS_297M 297000 + #define TMDS_296M 296703 ++#define TMDS_594M 594000 ++#define TMDS_593M 593407 ++ + static const struct { + int sample_rate; + int clock; +@@ -154,6 +157,20 @@ static const struct { + { 176400, TMDS_297M, 18816, 247500 }, + { 192000, TMDS_296M, 23296, 281250 }, + { 192000, TMDS_297M, 20480, 247500 }, ++ { 44100, TMDS_593M, 8918, 937500 }, ++ { 44100, TMDS_594M, 9408, 990000 }, ++ { 48000, TMDS_593M, 5824, 562500 }, ++ { 48000, TMDS_594M, 6144, 594000 }, ++ { 32000, TMDS_593M, 5824, 843750 }, ++ { 32000, TMDS_594M, 3072, 445500 }, ++ { 88200, TMDS_593M, 17836, 937500 }, ++ { 88200, TMDS_594M, 18816, 990000 }, ++ { 96000, TMDS_593M, 11648, 562500 }, ++ { 96000, TMDS_594M, 12288, 594000 }, ++ { 176400, TMDS_593M, 35672, 937500 }, ++ { 176400, TMDS_594M, 37632, 990000 }, ++ { 192000, TMDS_593M, 23296, 562500 }, ++ { 192000, TMDS_594M, 24576, 594000 }, + }; + + /* get AUD_CONFIG_PIXEL_CLOCK_HDMI_* value for mode */ diff --git a/queue-4.14/drm-i915-large-page-offsets-for-pread-pwrite.patch b/queue-4.14/drm-i915-large-page-offsets-for-pread-pwrite.patch new file mode 100644 index 00000000000..d687b0bee69 --- /dev/null +++ b/queue-4.14/drm-i915-large-page-offsets-for-pread-pwrite.patch @@ -0,0 +1,54 @@ +From ab0d6a141843e0b4b2709dfd37b53468b5452c3a Mon Sep 17 00:00:00 2001 +From: Chris Wilson +Date: Fri, 12 Oct 2018 15:02:28 +0100 +Subject: drm/i915: Large page offsets for pread/pwrite + +From: Chris Wilson + +commit ab0d6a141843e0b4b2709dfd37b53468b5452c3a upstream. + +Handle integer overflow when computing the sub-page length for shmem +backed pread/pwrite. + +Reported-by: Tvrtko Ursulin +Signed-off-by: Chris Wilson +Cc: Tvrtko Ursulin +Cc: stable@vger.kernel.org +Reviewed-by: Tvrtko Ursulin +Link: https://patchwork.freedesktop.org/patch/msgid/20181012140228.29783-1-chris@chris-wilson.co.uk +(cherry picked from commit a5e856a5348f6cd50889d125c40bbeec7328e466) +Signed-off-by: Rodrigo Vivi +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/gpu/drm/i915/i915_gem.c | 12 ++---------- + 1 file changed, 2 insertions(+), 10 deletions(-) + +--- a/drivers/gpu/drm/i915/i915_gem.c ++++ b/drivers/gpu/drm/i915/i915_gem.c +@@ -980,11 +980,7 @@ i915_gem_shmem_pread(struct drm_i915_gem + offset = offset_in_page(args->offset); + for (idx = args->offset >> PAGE_SHIFT; remain; idx++) { + struct page *page = i915_gem_object_get_page(obj, idx); +- int length; +- +- length = remain; +- if (offset + length > PAGE_SIZE) +- length = PAGE_SIZE - offset; ++ unsigned int length = min_t(u64, remain, PAGE_SIZE - offset); + + ret = shmem_pread(page, offset, length, user_data, + page_to_phys(page) & obj_do_bit17_swizzling, +@@ -1406,11 +1402,7 @@ i915_gem_shmem_pwrite(struct drm_i915_ge + offset = offset_in_page(args->offset); + for (idx = args->offset >> PAGE_SHIFT; remain; idx++) { + struct page *page = i915_gem_object_get_page(obj, idx); +- int length; +- +- length = remain; +- if (offset + length > PAGE_SIZE) +- length = PAGE_SIZE - offset; ++ unsigned int length = min_t(u64, remain, PAGE_SIZE - offset); + + ret = shmem_pwrite(page, offset, length, user_data, + page_to_phys(page) & obj_do_bit17_swizzling, diff --git a/queue-4.14/drm-i915-mark-pin-flags-as-u64.patch b/queue-4.14/drm-i915-mark-pin-flags-as-u64.patch new file mode 100644 index 00000000000..6d2a3215a9f --- /dev/null +++ b/queue-4.14/drm-i915-mark-pin-flags-as-u64.patch @@ -0,0 +1,62 @@ +From 0014868b9c3c1dda1de6711cf58c3486fb422d07 Mon Sep 17 00:00:00 2001 +From: Chris Wilson +Date: Fri, 2 Nov 2018 16:12:09 +0000 +Subject: drm/i915: Mark pin flags as u64 + +From: Chris Wilson + +commit 0014868b9c3c1dda1de6711cf58c3486fb422d07 upstream. + +Since the flags are being used to operate on a u64 variable, they too +need to be marked as such so that the inverses are full width (and not +zero extended on 32b kernels and bdw+). + +Reported-by: Sergii Romantsov +Signed-off-by: Chris Wilson +Cc: stable@vger.kernel.org +Reviewed-by: Lionel Landwerlin +Reviewed-by: Michal Wajdeczko +Link: https://patchwork.freedesktop.org/patch/msgid/20181102161232.17742-2-chris@chris-wilson.co.uk +(cherry picked from commit 83b466b1dc5f0b4d33f0a901e8b00197a8f3582d) +Signed-off-by: Joonas Lahtinen +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/gpu/drm/i915/i915_gem_gtt.h | 24 ++++++++++++------------ + 1 file changed, 12 insertions(+), 12 deletions(-) + +--- a/drivers/gpu/drm/i915/i915_gem_gtt.h ++++ b/drivers/gpu/drm/i915/i915_gem_gtt.h +@@ -584,20 +584,20 @@ int i915_gem_gtt_insert(struct i915_addr + u64 start, u64 end, unsigned int flags); + + /* Flags used by pin/bind&friends. */ +-#define PIN_NONBLOCK BIT(0) +-#define PIN_MAPPABLE BIT(1) +-#define PIN_ZONE_4G BIT(2) +-#define PIN_NONFAULT BIT(3) +-#define PIN_NOEVICT BIT(4) ++#define PIN_NONBLOCK BIT_ULL(0) ++#define PIN_MAPPABLE BIT_ULL(1) ++#define PIN_ZONE_4G BIT_ULL(2) ++#define PIN_NONFAULT BIT_ULL(3) ++#define PIN_NOEVICT BIT_ULL(4) + +-#define PIN_MBZ BIT(5) /* I915_VMA_PIN_OVERFLOW */ +-#define PIN_GLOBAL BIT(6) /* I915_VMA_GLOBAL_BIND */ +-#define PIN_USER BIT(7) /* I915_VMA_LOCAL_BIND */ +-#define PIN_UPDATE BIT(8) ++#define PIN_MBZ BIT_ULL(5) /* I915_VMA_PIN_OVERFLOW */ ++#define PIN_GLOBAL BIT_ULL(6) /* I915_VMA_GLOBAL_BIND */ ++#define PIN_USER BIT_ULL(7) /* I915_VMA_LOCAL_BIND */ ++#define PIN_UPDATE BIT_ULL(8) + +-#define PIN_HIGH BIT(9) +-#define PIN_OFFSET_BIAS BIT(10) +-#define PIN_OFFSET_FIXED BIT(11) ++#define PIN_HIGH BIT_ULL(9) ++#define PIN_OFFSET_BIAS BIT_ULL(10) ++#define PIN_OFFSET_FIXED BIT_ULL(11) + #define PIN_OFFSET_MASK (-I915_GTT_PAGE_SIZE) + + #endif diff --git a/queue-4.14/drm-i915-restore-vblank-interrupts-earlier.patch b/queue-4.14/drm-i915-restore-vblank-interrupts-earlier.patch new file mode 100644 index 00000000000..32f019b16f8 --- /dev/null +++ b/queue-4.14/drm-i915-restore-vblank-interrupts-earlier.patch @@ -0,0 +1,88 @@ +From 7cada4d0b7a0fb813dbc9777fec092e9ed0546e9 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Ville=20Syrj=C3=A4l=C3=A4?= +Date: Wed, 3 Oct 2018 17:49:51 +0300 +Subject: drm/i915: Restore vblank interrupts earlier +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +From: Ville Syrjälä + +commit 7cada4d0b7a0fb813dbc9777fec092e9ed0546e9 upstream. + +Plane sanitation needs vblank interrupts (on account of CxSR disable). +So let's restore vblank interrupts earlier. + +v2: Make it actually build +v3: Add comment to explain why we need this (Daniel) + +Cc: stable@vger.kernel.org +Cc: Dennis +Tested-by: Dennis +Tested-by: Peter Nowee +Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=105637 +Fixes: b1e01595a66d ("drm/i915: Redo plane sanitation during readout") +Signed-off-by: Ville Syrjälä +Reviewed-by: Daniel Vetter +Link: https://patchwork.freedesktop.org/patch/msgid/20181003144951.4397-1-ville.syrjala@linux.intel.com +(cherry picked from commit 68bc30deac625b8be8d3950b30dc93d09a3645f5) +Signed-off-by: Rodrigo Vivi +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/gpu/drm/i915/intel_display.c | 23 +++++++++++++---------- + 1 file changed, 13 insertions(+), 10 deletions(-) + +--- a/drivers/gpu/drm/i915/intel_display.c ++++ b/drivers/gpu/drm/i915/intel_display.c +@@ -14829,13 +14829,9 @@ static void intel_sanitize_crtc(struct i + I915_READ(reg) & ~PIPECONF_FRAME_START_DELAY_MASK); + } + +- /* restore vblank interrupts to correct state */ +- drm_crtc_vblank_reset(&crtc->base); + if (crtc->active) { + struct intel_plane *plane; + +- drm_crtc_vblank_on(&crtc->base); +- + /* Disable everything but the primary plane */ + for_each_intel_plane_on_crtc(dev, crtc, plane) { + const struct intel_plane_state *plane_state = +@@ -15148,7 +15144,6 @@ intel_modeset_setup_hw_state(struct drm_ + struct drm_modeset_acquire_ctx *ctx) + { + struct drm_i915_private *dev_priv = to_i915(dev); +- enum pipe pipe; + struct intel_crtc *crtc; + struct intel_encoder *encoder; + int i; +@@ -15167,15 +15162,23 @@ intel_modeset_setup_hw_state(struct drm_ + /* HW state is read out, now we need to sanitize this mess. */ + get_encoder_power_domains(dev_priv); + +- intel_sanitize_plane_mapping(dev_priv); ++ /* ++ * intel_sanitize_plane_mapping() may need to do vblank ++ * waits, so we need vblank interrupts restored beforehand. ++ */ ++ for_each_intel_crtc(&dev_priv->drm, crtc) { ++ drm_crtc_vblank_reset(&crtc->base); + +- for_each_intel_encoder(dev, encoder) { +- intel_sanitize_encoder(encoder); ++ if (crtc->active) ++ drm_crtc_vblank_on(&crtc->base); + } + +- for_each_pipe(dev_priv, pipe) { +- crtc = intel_get_crtc_for_pipe(dev_priv, pipe); ++ intel_sanitize_plane_mapping(dev_priv); ++ ++ for_each_intel_encoder(dev, encoder) ++ intel_sanitize_encoder(encoder); + ++ for_each_intel_crtc(&dev_priv->drm, crtc) { + intel_sanitize_crtc(crtc, ctx); + intel_dump_pipe_config(crtc, crtc->config, + "[setup_hw_state]"); diff --git a/queue-4.14/drm-i915-skip-vcpi-allocation-for-mstb-ports-that-are-gone.patch b/queue-4.14/drm-i915-skip-vcpi-allocation-for-mstb-ports-that-are-gone.patch new file mode 100644 index 00000000000..af38e70b5b3 --- /dev/null +++ b/queue-4.14/drm-i915-skip-vcpi-allocation-for-mstb-ports-that-are-gone.patch @@ -0,0 +1,83 @@ +From c02ba4ef16eefe663fdefcccaa57fad32d5481bf Mon Sep 17 00:00:00 2001 +From: Lyude Paul +Date: Mon, 8 Oct 2018 19:24:33 -0400 +Subject: drm/i915: Skip vcpi allocation for MSTB ports that are gone + +From: Lyude Paul + +commit c02ba4ef16eefe663fdefcccaa57fad32d5481bf upstream. + +Since we need to be able to allow DPMS on->off prop changes after an MST +port has disappeared from the system, we need to be able to make sure we +can compute a config for the resulting atomic commit. Currently this is +impossible when the port has disappeared, since the VCPI slot searching +we try to do in intel_dp_mst_compute_config() will fail with -EINVAL. + +Since the only commits we want to allow on no-longer-present MST ports +are ones that shut off display hardware, we already know that no VCPI +allocations are needed. So, hardcode the VCPI slot count to 0 when +intel_dp_mst_compute_config() is called on an MST port that's gone. + +Changes since V4: +- Don't use mst_port_gone at all, just check whether or not the drm + connector is registered - Daniel Vetter + +Signed-off-by: Lyude Paul +Reviewed-by: Daniel Vetter +Cc: stable@vger.kernel.org +Link: https://patchwork.freedesktop.org/patch/msgid/20181008232437.5571-5-lyude@redhat.com +(cherry picked from commit f67207d78ceaf98b7531bc22df6f21328559c8d4) +Signed-off-by: Rodrigo Vivi +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/gpu/drm/i915/intel_dp_mst.c | 24 +++++++++++++++--------- + 1 file changed, 15 insertions(+), 9 deletions(-) + +--- a/drivers/gpu/drm/i915/intel_dp_mst.c ++++ b/drivers/gpu/drm/i915/intel_dp_mst.c +@@ -37,11 +37,11 @@ static bool intel_dp_mst_compute_config( + struct intel_dp_mst_encoder *intel_mst = enc_to_mst(&encoder->base); + struct intel_digital_port *intel_dig_port = intel_mst->primary; + struct intel_dp *intel_dp = &intel_dig_port->dp; +- struct intel_connector *connector = +- to_intel_connector(conn_state->connector); ++ struct drm_connector *connector = conn_state->connector; ++ void *port = to_intel_connector(connector)->port; + struct drm_atomic_state *state = pipe_config->base.state; + int bpp; +- int lane_count, slots; ++ int lane_count, slots = 0; + const struct drm_display_mode *adjusted_mode = &pipe_config->base.adjusted_mode; + int mst_pbn; + bool reduce_m_n = drm_dp_has_quirk(&intel_dp->desc, +@@ -66,17 +66,23 @@ static bool intel_dp_mst_compute_config( + + pipe_config->port_clock = intel_dp_max_link_rate(intel_dp); + +- if (drm_dp_mst_port_has_audio(&intel_dp->mst_mgr, connector->port)) ++ if (drm_dp_mst_port_has_audio(&intel_dp->mst_mgr, port)) + pipe_config->has_audio = true; + + mst_pbn = drm_dp_calc_pbn_mode(adjusted_mode->crtc_clock, bpp); + pipe_config->pbn = mst_pbn; + +- slots = drm_dp_atomic_find_vcpi_slots(state, &intel_dp->mst_mgr, +- connector->port, mst_pbn); +- if (slots < 0) { +- DRM_DEBUG_KMS("failed finding vcpi slots:%d\n", slots); +- return false; ++ /* Zombie connectors can't have VCPI slots */ ++ if (READ_ONCE(connector->registered)) { ++ slots = drm_dp_atomic_find_vcpi_slots(state, ++ &intel_dp->mst_mgr, ++ port, ++ mst_pbn); ++ if (slots < 0) { ++ DRM_DEBUG_KMS("failed finding vcpi slots:%d\n", ++ slots); ++ return false; ++ } + } + + intel_link_compute_m_n(bpp, lane_count, diff --git a/queue-4.14/drm-nouveau-check-backlight-ids-are-0-not-0.patch b/queue-4.14/drm-nouveau-check-backlight-ids-are-0-not-0.patch new file mode 100644 index 00000000000..2f1302d9513 --- /dev/null +++ b/queue-4.14/drm-nouveau-check-backlight-ids-are-0-not-0.patch @@ -0,0 +1,41 @@ +From dc854914999d5d52ac1b31740cb0ea8d89d0372e Mon Sep 17 00:00:00 2001 +From: Lyude Paul +Date: Thu, 6 Sep 2018 17:43:21 -0400 +Subject: drm/nouveau: Check backlight IDs are >= 0, not > 0 + +From: Lyude Paul + +commit dc854914999d5d52ac1b31740cb0ea8d89d0372e upstream. + +Remember, ida IDs start at 0, not 1! + +Signed-off-by: Lyude Paul +Reviewed-by: Karol Herbst +Cc: stable@vger.kernel.org +Signed-off-by: Ben Skeggs +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/gpu/drm/nouveau/nouveau_backlight.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +--- a/drivers/gpu/drm/nouveau/nouveau_backlight.c ++++ b/drivers/gpu/drm/nouveau/nouveau_backlight.c +@@ -116,7 +116,7 @@ nv40_backlight_init(struct drm_connector + &nv40_bl_ops, &props); + + if (IS_ERR(bd)) { +- if (bl_connector.id > 0) ++ if (bl_connector.id >= 0) + ida_simple_remove(&bl_ida, bl_connector.id); + return PTR_ERR(bd); + } +@@ -249,7 +249,7 @@ nv50_backlight_init(struct drm_connector + nv_encoder, ops, &props); + + if (IS_ERR(bd)) { +- if (bl_connector.id > 0) ++ if (bl_connector.id >= 0) + ida_simple_remove(&bl_ida, bl_connector.id); + return PTR_ERR(bd); + } diff --git a/queue-4.14/drm-rockchip-allow-driver-to-be-shutdown-on-reboot-kexec.patch b/queue-4.14/drm-rockchip-allow-driver-to-be-shutdown-on-reboot-kexec.patch new file mode 100644 index 00000000000..c86d028ce11 --- /dev/null +++ b/queue-4.14/drm-rockchip-allow-driver-to-be-shutdown-on-reboot-kexec.patch @@ -0,0 +1,54 @@ +From 7f3ef5dedb146e3d5063b6845781ad1bb59b92b5 Mon Sep 17 00:00:00 2001 +From: Marc Zyngier +Date: Sun, 5 Aug 2018 13:48:07 +0100 +Subject: drm/rockchip: Allow driver to be shutdown on reboot/kexec + +From: Marc Zyngier + +commit 7f3ef5dedb146e3d5063b6845781ad1bb59b92b5 upstream. + +Leaving the DRM driver enabled on reboot or kexec has the annoying +effect of leaving the display generating transactions whilst the +IOMMU has been shut down. + +In turn, the IOMMU driver (which shares its interrupt line with +the VOP) starts warning either on shutdown or when entering the +secondary kernel in the kexec case (nothing is expected on that +front). + +A cheap way of ensuring that things are nicely shut down is to +register a shutdown callback in the platform driver. + +Signed-off-by: Marc Zyngier +Tested-by: Vicente Bergas +Signed-off-by: Heiko Stuebner +Link: https://patchwork.freedesktop.org/patch/msgid/20180805124807.18169-1-marc.zyngier@arm.com +Cc: stable@vger.kernel.org +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/gpu/drm/rockchip/rockchip_drm_drv.c | 6 ++++++ + 1 file changed, 6 insertions(+) + +--- a/drivers/gpu/drm/rockchip/rockchip_drm_drv.c ++++ b/drivers/gpu/drm/rockchip/rockchip_drm_drv.c +@@ -425,6 +425,11 @@ static int rockchip_drm_platform_remove( + return 0; + } + ++static void rockchip_drm_platform_shutdown(struct platform_device *pdev) ++{ ++ rockchip_drm_platform_remove(pdev); ++} ++ + static const struct of_device_id rockchip_drm_dt_ids[] = { + { .compatible = "rockchip,display-subsystem", }, + { /* sentinel */ }, +@@ -434,6 +439,7 @@ MODULE_DEVICE_TABLE(of, rockchip_drm_dt_ + static struct platform_driver rockchip_drm_platform_driver = { + .probe = rockchip_drm_platform_probe, + .remove = rockchip_drm_platform_remove, ++ .shutdown = rockchip_drm_platform_shutdown, + .driver = { + .name = "rockchip-drm", + .of_match_table = rockchip_drm_dt_ids, diff --git a/queue-4.14/efi-arm-libstub-pack-fdt-after-populating-it.patch b/queue-4.14/efi-arm-libstub-pack-fdt-after-populating-it.patch new file mode 100644 index 00000000000..c1ed91941a0 --- /dev/null +++ b/queue-4.14/efi-arm-libstub-pack-fdt-after-populating-it.patch @@ -0,0 +1,57 @@ +From 72a58a63a164b4e9d2d914e65caeb551846883f1 Mon Sep 17 00:00:00 2001 +From: Ard Biesheuvel +Date: Wed, 14 Nov 2018 09:55:42 -0800 +Subject: efi/arm/libstub: Pack FDT after populating it + +From: Ard Biesheuvel + +commit 72a58a63a164b4e9d2d914e65caeb551846883f1 upstream. + +Commit: + + 24d7c494ce46 ("efi/arm-stub: Round up FDT allocation to mapping size") + +increased the allocation size for the FDT image created by the stub to a +fixed value of 2 MB, to simplify the former code that made several +attempts with increasing values for the size. This is reasonable +given that the allocation is of type EFI_LOADER_DATA, which is released +to the kernel unless it is explicitly memblock_reserve()d by the early +boot code. + +However, this allocation size leaked into the 'size' field of the FDT +header metadata, and so the entire allocation remains occupied by the +device tree binary, even if most of it is not used to store device tree +information. + +So call fdt_pack() to shrink the FDT data structure to its minimum size +after populating all the fields, so that the remaining memory is no +longer wasted. + +Signed-off-by: Ard Biesheuvel +Cc: # v4.12+ +Cc: Linus Torvalds +Cc: Peter Zijlstra +Cc: Thomas Gleixner +Cc: linux-efi@vger.kernel.org +Fixes: 24d7c494ce46 ("efi/arm-stub: Round up FDT allocation to mapping size") +Link: http://lkml.kernel.org/r/20181114175544.12860-4-ard.biesheuvel@linaro.org +Signed-off-by: Ingo Molnar +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/firmware/efi/libstub/fdt.c | 4 ++++ + 1 file changed, 4 insertions(+) + +--- a/drivers/firmware/efi/libstub/fdt.c ++++ b/drivers/firmware/efi/libstub/fdt.c +@@ -158,6 +158,10 @@ static efi_status_t update_fdt(efi_syste + return efi_status; + } + } ++ ++ /* shrink the FDT back to its minimum size */ ++ fdt_pack(fdt); ++ + return EFI_SUCCESS; + + fdt_set_fail: diff --git a/queue-4.14/series b/queue-4.14/series index 78e52bfd4b6..e07b18a9314 100644 --- a/queue-4.14/series +++ b/queue-4.14/series @@ -103,3 +103,17 @@ crypto-user-fix-leaking-uninitialized-memory-to-userspace.patch lib-ubsan.c-don-t-mark-__ubsan_handle_builtin_unreachable-as-noreturn.patch hugetlbfs-fix-kernel-bug-at-fs-hugetlbfs-inode.c-444.patch mm-swapfile.c-use-kvzalloc-for-swap_info_struct-allocation.patch +efi-arm-libstub-pack-fdt-after-populating-it.patch +drm-rockchip-allow-driver-to-be-shutdown-on-reboot-kexec.patch +drm-amdgpu-add-missing-chip_hainan-in-amdgpu_ucode_get_load_type.patch +drm-nouveau-check-backlight-ids-are-0-not-0.patch +drm-dp_mst-check-if-primary-mstb-is-null.patch +drm-atomic_helper-disallow-new-modesets-on-unregistered-connectors.patch +drm-i915-restore-vblank-interrupts-earlier.patch +drm-i915-don-t-unset-intel_connector-mst_port.patch +drm-i915-skip-vcpi-allocation-for-mstb-ports-that-are-gone.patch +drm-i915-large-page-offsets-for-pread-pwrite.patch +drm-i915-hdmi-add-hdmi-2.0-audio-clock-recovery-n-values.patch +drm-i915-don-t-oops-during-modeset-shutdown-after-lpe-audio-deinit.patch +drm-i915-mark-pin-flags-as-u64.patch +drm-i915-execlists-force-write-serialisation-into-context-image-vs-execution.patch