diff options
-rw-r--r-- | 0011-drm-915-Limit-audio-CDCLK-2BCLK-constraint-back-to-GLK-only.patch | 63 | ||||
-rw-r--r-- | 0011-drm-i915-gt-Detect-if-we-miss-WaIdleLiteRestore.patch | 130 | ||||
-rw-r--r-- | PKGBUILD | 10 |
3 files changed, 68 insertions, 135 deletions
diff --git a/0011-drm-915-Limit-audio-CDCLK-2BCLK-constraint-back-to-GLK-only.patch b/0011-drm-915-Limit-audio-CDCLK-2BCLK-constraint-back-to-GLK-only.patch new file mode 100644 index 0000000..5c8cbde --- /dev/null +++ b/0011-drm-915-Limit-audio-CDCLK-2BCLK-constraint-back-to-GLK-only.patch @@ -0,0 +1,63 @@ +From 238026166679e618b3bad1c86b0e37a43303b6b0 Mon Sep 17 00:00:00 2001 +From: Kai Vehmanen <kai.vehmanen@linux.intel.com> +Date: Tue, 31 Dec 2019 16:00:07 +0200 +Subject: drm/i915: Limit audio CDCLK>=2*BCLK constraint back to GLK only + +Revert changes done in commit f6ec9483091f ("drm/i915: extend audio +CDCLK>=2*BCLK constraint to more platforms"). Audio drivers +communicate with i915 over HDA bus multiple times during system +boot-up and each of these transactions result in matching +get_power/put_power calls to i915, and depending on the platform, +a modeset change causing visible flicker. + +GLK is the only platform with minimum CDCLK significantly lower +than BCLK, and thus for GLK setting a higher CDCLK is mandatory. + +For other platforms, minimum CDCLK is close but below 2*BCLK +(e.g. on ICL, CDCLK=176.4kHz with BCLK=96kHz). Spec-wise the constraint +should be set, but in practise no communication errors have been +reported and the downside if set is the flicker observed at boot-time. + +Revert to old behaviour until better mechanism to manage +probe-time clocks is available. + +The full CDCLK>=2*BCLK constraint is still enforced at pipe +enable time in intel_crtc_compute_min_cdclk(). + +Bugzilla: https://gitlab.freedesktop.org/drm/intel/issues/913 +Fixes: f6ec9483091f ("drm/i915: extend audio CDCLK>=2*BCLK constraint to more platforms") +Signed-off-by: Kai Vehmanen <kai.vehmanen@linux.intel.com> +Reviewed-by: Matt Roper <matthew.d.roper@intel.com> +Signed-off-by: Matt Roper <matthew.d.roper@intel.com> +Link: https://patchwork.freedesktop.org/patch/msgid/20191231140007.31728-1-kai.vehmanen@linux.intel.com +(cherry picked from commit 1ee48a61aa57dbdbc3cd2808d8b28df40d938e44) +Signed-off-by: Joonas Lahtinen <joonas.lahtinen@linux.intel.com> +--- + drivers/gpu/drm/i915/display/intel_audio.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/drivers/gpu/drm/i915/display/intel_audio.c b/drivers/gpu/drm/i915/display/intel_audio.c +index 05ef43b13d1c..0cf475f3063c 100644 +--- a/drivers/gpu/drm/i915/display/intel_audio.c ++++ b/drivers/gpu/drm/i915/display/intel_audio.c +@@ -858,7 +858,7 @@ static unsigned long i915_audio_component_get_power(struct device *kdev) + } + + /* Force CDCLK to 2*BCLK as long as we need audio powered. */ +- if (INTEL_GEN(dev_priv) >= 10 || IS_GEMINILAKE(dev_priv)) ++ if (IS_GEMINILAKE(dev_priv)) + glk_force_audio_cdclk(dev_priv, true); + + if (INTEL_GEN(dev_priv) >= 10 || IS_GEMINILAKE(dev_priv)) +@@ -877,7 +877,7 @@ static void i915_audio_component_put_power(struct device *kdev, + + /* Stop forcing CDCLK to 2*BCLK if no need for audio to be powered. */ + if (--dev_priv->audio_power_refcount == 0) +- if (INTEL_GEN(dev_priv) >= 10 || IS_GEMINILAKE(dev_priv)) ++ if (IS_GEMINILAKE(dev_priv)) + glk_force_audio_cdclk(dev_priv, false); + + intel_display_power_put(dev_priv, POWER_DOMAIN_AUDIO, cookie); +-- +cgit v1.2.1-1-g437b + diff --git a/0011-drm-i915-gt-Detect-if-we-miss-WaIdleLiteRestore.patch b/0011-drm-i915-gt-Detect-if-we-miss-WaIdleLiteRestore.patch deleted file mode 100644 index 5ee3f39..0000000 --- a/0011-drm-i915-gt-Detect-if-we-miss-WaIdleLiteRestore.patch +++ /dev/null @@ -1,130 +0,0 @@ -From 8c19c0f7eacb125b9a097d080a385d527f8ff836 Mon Sep 17 00:00:00 2001 -From: Chris Wilson <chris@chris-wilson.co.uk> -Date: Mon, 30 Dec 2019 11:15:30 +0000 -Subject: drm/i915/gt: Detect if we miss WaIdleLiteRestore - -In order to avoid confusing the HW, we must never submit an empty ring -during lite-restore, that is we should always advance the RING_TAIL -before submitting to stay ahead of the RING_HEAD. - -Normally this is prevented by keeping a couple of spare NOPs in the -request->wa_tail so that on resubmission we can advance the tail. This -relies on the request only being resubmitted once, which is the normal -condition as it is seen once for ELSP[1] and then later in ELSP[0]. On -preemption, the requests are unwound and the tail reset back to the -normal end point (as we know the request is incomplete and therefore its -RING_HEAD is even earlier). - -However, if this w/a should fail we would try and resubmit the request -with the RING_TAIL already set to the location of this request's wa_tail -potentially causing a GPU hang. We can spot when we do try and -incorrectly resubmit without advancing the RING_TAIL and spare any -embarrassment by forcing the context restore. - -In the case of preempt-to-busy, we leave the requests running on the HW -while we unwind. As the ring is still live, we cannot rewind our -rq->tail without forcing a reload so leave it set to rq->wa_tail and -only force a reload if we resubmit after a lite-restore. (Normally, the -forced reload will be a part of the preemption event.) - -Fixes: 22b7a426bbe1 ("drm/i915/execlists: Preempt-to-busy") -Closes: https://gitlab.freedesktop.org/drm/intel/issues/673 -Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> -Cc: Mika Kuoppala <mika.kuoppala@linux.intel.com> -Cc: Tvrtko Ursulin <tvrtko.ursulin@intel.com> -Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com> -Cc: stable@vger.kernel.org -Link: https://patchwork.freedesktop.org/patch/msgid/20191209023215.3519970-1-chris@chris-wilson.co.uk -(cherry picked from commit 82c69bf58650e644c61aa2bf5100b63a1070fd2f) ---- - drivers/gpu/drm/i915/gt/intel_lrc.c | 42 ++++++++++++++++++------------------- - 1 file changed, 20 insertions(+), 22 deletions(-) - -diff --git a/drivers/gpu/drm/i915/gt/intel_lrc.c b/drivers/gpu/drm/i915/gt/intel_lrc.c -index 06a506c29463..6600b2e08fe3 100644 ---- a/drivers/gpu/drm/i915/gt/intel_lrc.c -+++ b/drivers/gpu/drm/i915/gt/intel_lrc.c -@@ -471,12 +471,6 @@ lrc_descriptor(struct intel_context *ce, struct intel_engine_cs *engine) - return desc; - } - --static void unwind_wa_tail(struct i915_request *rq) --{ -- rq->tail = intel_ring_wrap(rq->ring, rq->wa_tail - WA_TAIL_BYTES); -- assert_ring_tail_valid(rq->ring, rq->tail); --} -- - static struct i915_request * - __unwind_incomplete_requests(struct intel_engine_cs *engine) - { -@@ -495,7 +489,6 @@ __unwind_incomplete_requests(struct intel_engine_cs *engine) - continue; /* XXX */ - - __i915_request_unsubmit(rq); -- unwind_wa_tail(rq); - - /* - * Push the request back into the queue for later resubmission. -@@ -649,13 +642,29 @@ execlists_schedule_out(struct i915_request *rq) - i915_request_put(rq); - } - --static u64 execlists_update_context(const struct i915_request *rq) -+static u64 execlists_update_context(struct i915_request *rq) - { - struct intel_context *ce = rq->hw_context; -- u64 desc; -+ u64 desc = ce->lrc_desc; -+ u32 tail; - -- ce->lrc_reg_state[CTX_RING_TAIL + 1] = -- intel_ring_set_tail(rq->ring, rq->tail); -+ /* -+ * WaIdleLiteRestore:bdw,skl -+ * -+ * We should never submit the context with the same RING_TAIL twice -+ * just in case we submit an empty ring, which confuses the HW. -+ * -+ * We append a couple of NOOPs (gen8_emit_wa_tail) after the end of -+ * the normal request to be able to always advance the RING_TAIL on -+ * subsequent resubmissions (for lite restore). Should that fail us, -+ * and we try and submit the same tail again, force the context -+ * reload. -+ */ -+ tail = intel_ring_set_tail(rq->ring, rq->tail); -+ if (unlikely(ce->lrc_reg_state[CTX_RING_TAIL + 1] == tail)) -+ desc |= CTX_DESC_FORCE_RESTORE; -+ ce->lrc_reg_state[CTX_RING_TAIL + 1] = tail; -+ rq->tail = rq->wa_tail; - - /* - * Make sure the context image is complete before we submit it to HW. -@@ -674,7 +683,6 @@ static u64 execlists_update_context(const struct i915_request *rq) - */ - mb(); - -- desc = ce->lrc_desc; - ce->lrc_desc &= ~CTX_DESC_FORCE_RESTORE; - - return desc; -@@ -1149,16 +1157,6 @@ static void execlists_dequeue(struct intel_engine_cs *engine) - if (!list_is_last(&last->sched.link, - &engine->active.requests)) - return; -- -- /* -- * WaIdleLiteRestore:bdw,skl -- * Apply the wa NOOPs to prevent -- * ring:HEAD == rq:TAIL as we resubmit the -- * request. See gen8_emit_fini_breadcrumb() for -- * where we prepare the padding after the -- * end of the request. -- */ -- last->tail = last->wa_tail; - } - } - --- -cgit v1.2.1-1-g437b - - @@ -17,7 +17,7 @@ pkgbase=linux-ck _supver=5 _majver=4 -_minver=11 +_minver=12 _gccpatchver='20190822' _ckpatchversion=ck1 if [ "$_minver" == "0" ]; then @@ -49,7 +49,7 @@ source=( 0008-drm-i915-save-AUD_FREQ_CNTRL-state-at-audio-domain-suspend.patch 0009-drm-i915-Fix-audio-power-up-sequence-for-gen10-display.patch 0010-drm-i915-extend-audio-CDCLK-2BCLK-constraint-to-more-platforms.patch - 0011-drm-i915-gt-Detect-if-we-miss-WaIdleLiteRestore.patch + 0011-drm-915-Limit-audio-CDCLK-2BCLK-constraint-back-to-GLK-only.patch 0012-pinctrl-sunrisepoint-Add-missing-Interrupt-Status-register-offset.patch 0013-Revert-iwlwifi-mvm-fix-scan-config-command-size.patch 0014-e1000e-Revert-e1000e-Make-watchdog-use-delayed-work.patch @@ -65,7 +65,7 @@ validpgpkeys=( '647F28654894E3BD457199BE38DBBDC86092693E' # Greg Kroah-Hartman ) # https://www.kernel.org/pub/linux/kernel/v5.x/sha256sums.asc -b2sums=('38f2620f7773ddd1d26e0638f1e2200e5f37611dc1d606a4200e352a4593bd934f109ee936093194347a26f8797683bbed5e9b81fab353d23bbe1bf28fda2ddc' +b2sums=('f08d30011b2021724a240f45a4d0a92ba01b97d0d2d33ce0d88aeb6dfb0a2e5a532fd55ad0a2ef0e3ec160cb23b351a09b494382e80b0db85bcfe7cfeaa554dd' 'SKIP' '8e25246725016ac6a1452592b092616aacba744ee6d1f87355b141011e31d91b2faca01494930a8bb4b816f92f86929098cc60bf786bdc68513e7bc572b06226' '0e4e01200c6250c6d251d2cb38889e9f488e07b1014ea8c8f81182457cf057ce444b14e21afc786671115ec0b100e3ce9b32a5785c2b0b07b11d956887f477d3' @@ -77,7 +77,7 @@ b2sums=('38f2620f7773ddd1d26e0638f1e2200e5f37611dc1d606a4200e352a4593bd934f109ee 'f28183f6fd07ba0e6787e935d56dd683435e0bdd6e04cba717aa5b0da093d40a79a422f3398b813e41d70411cbd664045518050fd9b61a0350e75e36e747c345' '7fc476dc0fef4d0a11c3f04c33a0350eae87115dcafcfb96a453112041ba88e1cf5a3535c95069568c849f04c356e2bde0686c8e5ba25be7a781b775f808a43c' '9d1ad2023e9ffc92a4ccb6194a858267fbb6286c13784b8b8a2af3d5814abd0e4229409489f8a6bea5157193324dba58553ba03229169809bec73a8cc59c26ba' - 'da61a317ad2994f3c0cfe320cfd2d731eaa2aafe0a0fb52d3118e50a2a4299842e94b478a49bfb629a82571f50bcb6c52174808311711e3d3ee05df205881ab2' + '7d6e7b7c2791971de427b346732c3fa345635db68c84c0b1ac736862fc62da61516975ccd78b28d3df50967d8ae1fe6b3251383733f797c19c1671b8b8a5aa42' '782f41ae6352cfc1c47ed54eddcded54969c7d43a326dc2d6593b373b4dc4672bc82a6d938090635dc02ef3b3b74e133a2170c7f9c6fd614641c7cb3b013ff2e' 'ae21b49fe1c6fef81aa93282d0a242c196a0378256e890013a05d4e2f3b79ad92526bd1088ab6e44fba511abeabcb328ef58907ab03214d21d2fb88ea702f3e0' 'e1da80f3c9197e62223398b717e0c3ecfcdc7f33fa6477a9e8634ae806823c208bd5e05401a0b72a506d8e1df5a5cdf6624ff88926e7042156ee0fb6278e3ca3' @@ -114,7 +114,7 @@ prepare() { patch -p1 -i ../0008-drm-i915-save-AUD_FREQ_CNTRL-state-at-audio-domain-suspend.patch patch -p1 -i ../0009-drm-i915-Fix-audio-power-up-sequence-for-gen10-display.patch patch -p1 -i ../0010-drm-i915-extend-audio-CDCLK-2BCLK-constraint-to-more-platforms.patch - patch -p1 -i ../0011-drm-i915-gt-Detect-if-we-miss-WaIdleLiteRestore.patch + patch -p1 -i ../0011-drm-915-Limit-audio-CDCLK-2BCLK-constraint-back-to-GLK-only.patch patch -p1 -i ../0012-pinctrl-sunrisepoint-Add-missing-Interrupt-Status-register-offset.patch patch -p1 -i ../0013-Revert-iwlwifi-mvm-fix-scan-config-command-size.patch patch -p1 -i ../0014-e1000e-Revert-e1000e-Make-watchdog-use-delayed-work.patch |