linux_dsm_epyc7002/drivers/gpu/drm/nouveau
Lyude Paul db1231ddc0 drm/nouveau: Only recalculate PBN/VCPI on mode/connector changes
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: 232c9eec41 ("drm/nouveau: Use atomic VCPI helpers for MST")
References: 412e85b605 ("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>
Signed-off-by: Dave Airlie <airlied@redhat.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20190809005307.18391-1-lyude@redhat.com
2019-08-15 13:27:59 +10:00
..
dispnv04 drm/nouveau: fix bogus GPL-2 license header 2019-07-19 16:26:51 +10:00
dispnv50 drm/nouveau: Only recalculate PBN/VCPI on mode/connector changes 2019-08-15 13:27:59 +10:00
include drm/nouveau: fix bogus GPL-2 license header 2019-07-19 16:26:50 +10:00
nvif drm/nouveau: fix bogus GPL-2 license header 2019-07-19 16:26:51 +10:00
nvkm drm/nouveau/secboot/gp102-: remove WAR for SEC2 RTOS start bug 2019-07-19 16:26:51 +10:00
Kbuild drm/nouveau: fix bogus GPL-2 license header 2019-07-19 16:26:51 +10:00
Kconfig mm: don't select MIGRATE_VMA_HELPER from HMM_MIRROR 2019-07-02 14:32:45 -03:00
nouveau_abi16.c drm/nouveau: prepare for enabling svm with existing userspace interfaces 2019-02-20 09:00:01 +10:00
nouveau_abi16.h drm/nouveau: fix bogus GPL-2 license header 2019-07-19 16:26:50 +10:00
nouveau_acpi.c drm/nouveau: fix bogus GPL-2 license header 2019-07-19 16:26:50 +10:00
nouveau_acpi.h drm/nouveau: fix bogus GPL-2 license header 2019-07-19 16:26:50 +10:00
nouveau_backlight.c drm/nouveau: register backlight on pascal and newer 2019-01-11 16:25:54 +10:00
nouveau_bios.c
nouveau_bios.h
nouveau_bo.c drm/nouveau: prepare for enabling svm with existing userspace interfaces 2019-02-20 09:00:01 +10:00
nouveau_bo.h drm/nouveau: fix bogus GPL-2 license header 2019-07-19 16:26:50 +10:00
nouveau_chan.c drm/nouveau/svm: initial support for shared virtual memory 2019-02-20 09:00:02 +10:00
nouveau_chan.h drm/nouveau: fix bogus GPL-2 license header 2019-07-19 16:26:50 +10:00
nouveau_connector.c drm/nouveau: fix memory leak in nouveau_conn_reset() 2019-07-19 16:26:51 +10:00
nouveau_connector.h
nouveau_crtc.h
nouveau_debugfs.c drm/nouveau/debugfs: Fix check of pm_runtime_get_sync failure 2019-03-22 09:57:58 +10:00
nouveau_debugfs.h drm/nouveau: fix bogus GPL-2 license header 2019-07-19 16:26:50 +10:00
nouveau_display.c drm/nouveau: Remove duplicate ACPI_VIDEO_NOTIFY_PROBE definition 2019-05-01 11:08:39 +10:00
nouveau_display.h drm/nouveau: fix bogus GPL-2 license header 2019-07-19 16:26:50 +10:00
nouveau_dma.c
nouveau_dma.h
nouveau_dmem.c drm fixes for -rc1: 2019-07-19 12:29:43 -07:00
nouveau_dmem.h drm/nouveau/dmem: device memory helpers for SVM 2019-02-20 09:00:02 +10:00
nouveau_dp.c
nouveau_drm.c drm/nouveau/core: allow detected chipset to be overridden 2019-05-14 16:58:06 +10:00
nouveau_drv.h drm/nouveau: fix bogus GPL-2 license header 2019-07-19 16:26:50 +10:00
nouveau_encoder.h
nouveau_fbcon.c drm/nouveau: Use drm_fb_helper_fill_info 2019-03-27 10:03:16 +01:00
nouveau_fbcon.h drm/nouveau: Use drm_fb_helper_fill_info 2019-03-27 10:03:16 +01:00
nouveau_fence.c
nouveau_fence.h drm/nouveau: fix bogus GPL-2 license header 2019-07-19 16:26:50 +10:00
nouveau_gem.c drm/nouveau: prepare for enabling svm with existing userspace interfaces 2019-02-20 09:00:01 +10:00
nouveau_gem.h drm/nouveau: fix bogus GPL-2 license header 2019-07-19 16:26:50 +10:00
nouveau_hwmon.c drm/nouveau/hwmon: return EINVAL if the GPU is powered down for sensors reads 2019-07-19 16:26:51 +10:00
nouveau_hwmon.h
nouveau_ioc32.c
nouveau_ioctl.h drm/nouveau: fix bogus GPL-2 license header 2019-07-19 16:26:50 +10:00
nouveau_led.c
nouveau_led.h
nouveau_mem.c
nouveau_mem.h
nouveau_nvif.c
nouveau_platform.c
nouveau_platform.h
nouveau_prime.c
nouveau_reg.h drm/nouveau: fix bogus GPL-2 license header 2019-07-19 16:26:50 +10:00
nouveau_sgdma.c drm/nouveau: fix bogus GPL-2 license header 2019-07-19 16:26:50 +10:00
nouveau_svm.c nouveau: unlock mmap_sem on all errors from nouveau_range_fault 2019-07-25 16:14:40 -03:00
nouveau_svm.h drm/nouveau/svm: new ioctl to migrate process memory to GPU memory 2019-02-20 09:00:03 +10:00
nouveau_ttm.c drm/ttm: Quick-test mmap offset in ttm_bo_mmap() 2019-03-19 15:03:53 -05:00
nouveau_ttm.h drm/nouveau: fix bogus GPL-2 license header 2019-07-19 16:26:50 +10:00
nouveau_usif.c
nouveau_usif.h drm/nouveau: fix bogus GPL-2 license header 2019-07-19 16:26:50 +10:00
nouveau_vga.c drm/nouveau: fix bogus GPL-2 license header 2019-07-19 16:26:50 +10:00
nouveau_vga.h drm/nouveau: fix bogus GPL-2 license header 2019-07-19 16:26:50 +10:00
nouveau_vmm.c drm/nouveau/svm: initial support for shared virtual memory 2019-02-20 09:00:02 +10:00
nouveau_vmm.h drm/nouveau/svm: initial support for shared virtual memory 2019-02-20 09:00:02 +10:00
nv04_fbcon.c
nv04_fence.c
nv10_fence.c
nv10_fence.h drm/nouveau: fix bogus GPL-2 license header 2019-07-19 16:26:50 +10:00
nv17_fence.c
nv50_display.h
nv50_fbcon.c
nv50_fence.c
nv84_fence.c drm/nouveau: prepare for enabling svm with existing userspace interfaces 2019-02-20 09:00:01 +10:00
nvc0_fbcon.c
nvc0_fence.c