diff options
author | Justin M. Forbes <jforbes@fedoraproject.org> | 2019-08-19 09:20:54 -0500 |
---|---|---|
committer | Justin M. Forbes <jforbes@fedoraproject.org> | 2019-08-19 09:21:15 -0500 |
commit | b8abfc8da1645c2ea71fec32dba849a51cd6c67f (patch) | |
tree | 48edf5e27ffc6e1dc7da33a85045462061038646 | |
parent | 6712f443168a98a13b5df85231660da126487644 (diff) | |
download | kernel-b8abfc8da1645c2ea71fec32dba849a51cd6c67f.tar.gz kernel-b8abfc8da1645c2ea71fec32dba849a51cd6c67f.tar.xz kernel-b8abfc8da1645c2ea71fec32dba849a51cd6c67f.zip |
Fixes for nouveau
-rw-r--r-- | kernel.spec | 3 | ||||
-rw-r--r-- | v2-drm-nouveau-Only-recalculate-PBN-VCPI-on-mode-connector-changes.patch | 101 |
2 files changed, 104 insertions, 0 deletions
diff --git a/kernel.spec b/kernel.spec index f1e3aaa30..f06481565 100644 --- a/kernel.spec +++ b/kernel.spec @@ -598,6 +598,9 @@ Patch513: for-v5.2-iwlwifi-mvm-disable-TX-AMSDU-on-older-NICs.patch # https://www.spinics.net/lists/linux-wireless/msg188751.html Patch514: iwlwifi-Add-support-for-SAR-South-Korea-limitation.patch +# Nouveau fixes headed upstream +Patch515: v2-drm-nouveau-Only-recalculate-PBN-VCPI-on-mode-connector-changes.patch + # END OF PATCH DEFINITIONS %endif diff --git a/v2-drm-nouveau-Only-recalculate-PBN-VCPI-on-mode-connector-changes.patch b/v2-drm-nouveau-Only-recalculate-PBN-VCPI-on-mode-connector-changes.patch new file mode 100644 index 000000000..72bf0495c --- /dev/null +++ b/v2-drm-nouveau-Only-recalculate-PBN-VCPI-on-mode-connector-changes.patch @@ -0,0 +1,101 @@ +From patchwork Fri Aug 9 00:53:05 2019 +Content-Type: text/plain; charset="utf-8" +MIME-Version: 1.0 +Content-Transfer-Encoding: 8bit +Subject: [v2] drm/nouveau: Only recalculate PBN/VCPI on mode/connector changes +From: Lyude Paul <lyude@redhat.com> +X-Patchwork-Id: 322786 +Message-Id: <20190809005307.18391-1-lyude@redhat.com> +To: nouveau@lists.freedesktop.org +Cc: Bohdan Milar <bmilar@redhat.com>, linux-kernel@vger.kernel.org, + David Airlie <airlied@linux.ie>, Daniel Vetter <daniel.vetter@ffwll.ch>, + dri-devel@lists.freedesktop.org, William Lewis <minutemaidpark@hotmail.com>, + stable@vger.kernel.org, Karol Herbst <karolherbst@gmail.com>, + Jerry Zuo <Jerry.Zuo@amd.com>, Ben Skeggs <bskeggs@redhat.com>, + David Airlie <airlied@redhat.com>, Juston Li <juston.li@intel.com>, + Laurent Pinchart <laurent.pinchart@ideasonboard.com> +Date: Thu, 8 Aug 2019 20:53:05 -0400 + +I -thought- I had fixed this entirely, but it looks like that I didn't +test this thoroughly enough as we apparently still make one big mistake +with nv50_msto_atomic_check() - we don't handle the following scenario: + +* CRTC #1 has n VCPI allocated to it, is attached to connector DP-4 + which is attached to encoder #1. enabled=y active=n +* CRTC #1 is changed from DP-4 to DP-5, causing: + * DP-4 crtc=#1→NULL (VCPI n→0) + * DP-5 crtc=NULL→#1 + * CRTC #1 steals encoder #1 back from DP-4 and gives it to DP-5 + * CRTC #1 maintains the same mode as before, just with a different + connector +* mode_changed=n connectors_changed=y + (we _SHOULD_ do VCPI 0→n here, but don't) + +Once the above scenario is repeated once, we'll attempt freeing VCPI +from the connector that we didn't allocate due to the connectors +changing, but the mode staying the same. Sigh. + +Since nv50_msto_atomic_check() has broken a few times now, let's rethink +things a bit to be more careful: limit both VCPI/PBN allocations to +mode_changed || connectors_changed, since neither VCPI or PBN should +ever need to change outside of routing and mode changes. + +Changes since v1: +* Fix accidental reversal of clock and bpp arguments in + drm_dp_calc_pbn_mode() - William Lewis + +Signed-off-by: Lyude Paul <lyude@redhat.com> +Reported-by: Bohdan Milar <bmilar@redhat.com> +Tested-by: Bohdan Milar <bmilar@redhat.com> +Fixes: 232c9eec417a ("drm/nouveau: Use atomic VCPI helpers for MST") +References: 412e85b60531 ("drm/nouveau: Only release VCPI slots on mode changes") +Cc: Lyude Paul <lyude@redhat.com> +Cc: Ben Skeggs <bskeggs@redhat.com> +Cc: Daniel Vetter <daniel.vetter@ffwll.ch> +Cc: David Airlie <airlied@redhat.com> +Cc: Jerry Zuo <Jerry.Zuo@amd.com> +Cc: Harry Wentland <harry.wentland@amd.com> +Cc: Juston Li <juston.li@intel.com> +Cc: Laurent Pinchart <laurent.pinchart@ideasonboard.com> +Cc: Karol Herbst <karolherbst@gmail.com> +Cc: Ilia Mirkin <imirkin@alum.mit.edu> +Cc: <stable@vger.kernel.org> # v5.1+ +Acked-by: Ben Skeggs <bskeggs@redhat.com> +--- + drivers/gpu/drm/nouveau/dispnv50/disp.c | 22 +++++++++++++--------- + 1 file changed, 13 insertions(+), 9 deletions(-) + +diff --git a/drivers/gpu/drm/nouveau/dispnv50/disp.c b/drivers/gpu/drm/nouveau/dispnv50/disp.c +index 126703816794..5c36c75232e6 100644 +--- a/drivers/gpu/drm/nouveau/dispnv50/disp.c ++++ b/drivers/gpu/drm/nouveau/dispnv50/disp.c +@@ -771,16 +771,20 @@ nv50_msto_atomic_check(struct drm_encoder *encoder, + struct nv50_head_atom *asyh = nv50_head_atom(crtc_state); + int slots; + +- /* When restoring duplicated states, we need to make sure that the +- * bw remains the same and avoid recalculating it, as the connector's +- * bpc may have changed after the state was duplicated +- */ +- if (!state->duplicated) +- asyh->dp.pbn = +- drm_dp_calc_pbn_mode(crtc_state->adjusted_mode.clock, +- connector->display_info.bpc * 3); ++ if (crtc_state->mode_changed || crtc_state->connectors_changed) { ++ /* ++ * When restoring duplicated states, we need to make sure that ++ * the bw remains the same and avoid recalculating it, as the ++ * connector's bpc may have changed after the state was ++ * duplicated ++ */ ++ if (!state->duplicated) { ++ const int bpp = connector->display_info.bpc * 3; ++ const int clock = crtc_state->adjusted_mode.clock; ++ ++ asyh->dp.pbn = drm_dp_calc_pbn_mode(clock, bpp); ++ } + +- if (crtc_state->mode_changed) { + slots = drm_dp_atomic_find_vcpi_slots(state, &mstm->mgr, + mstc->port, + asyh->dp.pbn); |