OpenCloudOS-Kernel/drivers/gpu/drm/nouveau
Daniel Vetter 1bf6ad622b drm/vblank: drop the mode argument from drm_calc_vbltimestamp_from_scanoutpos
If we restrict this helper to only kms drivers (which is the case) we
can look up the correct mode easily ourselves. But it's a bit tricky:

- All legacy drivers look at crtc->hwmode. But that is updated already
  at the beginning of the modeset helper, which means when we disable
  a pipe. Hence the final timestamps might be a bit off. But since
  this is an existing bug I'm not going to change it, but just try to
  be bug-for-bug compatible with the current code. This only applies
  to radeon&amdgpu.

- i915 tries to get it perfect by updating crtc->hwmode when the pipe
  is off (i.e. vblank->enabled = false).

- All other atomic drivers look at crtc->state->adjusted_mode. Those
  that look at state->requested_mode simply don't adjust their mode,
  so it's the same. That has two problems: Accessing crtc->state from
  interrupt handling code is unsafe, and it's updated before we shut
  down the pipe. For nonblocking modesets it's even worse.

For atomic drivers try to implement what i915 does. To do that we add
a new hwmode field to the vblank structure, and update it from
drm_calc_timestamping_constants(). For atomic drivers that's called
from the right spot by the helper library already, so all fine. But
for safety let's enforce that.

For legacy driver this function is only called at the end (oh the
fun), which is broken, so again let's not bother and just stay
bug-for-bug compatible.

The  benefit is that we can use drm_calc_vbltimestamp_from_scanoutpos
directly to implement ->get_vblank_timestamp in every driver, deleting
a lot of code.

v2: Completely new approach, trying to mimick the i915 solution.

v3: Fixup kerneldoc.

v4: Drop the WARN_ON to check that the vblank is off, atomic helpers
currently unconditionally call this. Recomputing the same stuff should
be harmless.

v5: Fix typos and move misplaced hunks to the right patches (Neil).

v6: Undo hunk movement (kbuild).

Cc: Mario Kleiner <mario.kleiner@tuebingen.mpg.de>
Cc: Eric Anholt <eric@anholt.net>
Cc: Rob Clark <robdclark@gmail.com>
Cc: linux-arm-msm@vger.kernel.org
Cc: freedreno@lists.freedesktop.org
Cc: Alex Deucher <alexander.deucher@amd.com>
Cc: Christian König <christian.koenig@amd.com>
Cc: Ben Skeggs <bskeggs@redhat.com>
Reviewed-by: Neil Armstrong <narmstrong@baylibre.com>
Acked-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
Link: http://patchwork.freedesktop.org/patch/msgid/20170509140329.24114-4-daniel.vetter@ffwll.ch
2017-05-10 10:21:31 +02:00
..
dispnv04 drm: Add acquire ctx to ->gamma_set hook 2017-04-06 10:21:55 +02:00
include drm/nouveau/gr/gp107: initial support 2017-04-06 14:39:04 +10:00
nvif drm/nouveau/core/client: allow creation of subclients 2017-02-17 15:15:00 +10:00
nvkm drm/nouveau/fb/gf100-: Fix 32 bit wraparound in new ram detection 2017-04-29 22:39:23 +10:00
Kbuild drm/nouveau/drm/nouveau: add a LED driver for the NVIDIA logo 2016-10-12 17:29:29 +10:00
Kconfig drm: fix compilations issues introduced by "drm: allow to use mmuless SoC" 2017-01-09 11:30:30 +01:00
nouveau_abi16.c drm/nouveau: allocate device object for every client 2017-02-17 15:15:04 +10:00
nouveau_abi16.h drm/nouveau/abi16: implement limited interoperability with usif/nvif 2015-11-03 15:02:18 +10:00
nouveau_acpi.c gpu: drm: drivers: Convert printk(KERN_<LEVEL> to pr_<level> 2017-03-01 09:44:11 +01:00
nouveau_acpi.h
nouveau_backlight.c drm/nouveau: allocate device object for every client 2017-02-17 15:15:04 +10:00
nouveau_bios.c drm/nouveau: allocate device object for every client 2017-02-17 15:15:04 +10:00
nouveau_bios.h drm/nouveau/nouveau: bios pointers may be unaligned, use proper accessors 2016-10-12 17:29:02 +10:00
nouveau_bo.c drm/ttm: add io_mem_pfn callback 2017-04-04 23:33:42 -04:00
nouveau_bo.h drm/nouveau: size is u64 everywhere 2017-02-17 17:38:04 +10:00
nouveau_chan.c drm/nouveau: check for dead channel before trying to idle 2017-02-17 17:38:09 +10:00
nouveau_chan.h drm/nouveau: request notifications for channels that have been killed 2017-02-17 17:38:09 +10:00
nouveau_connector.c drm/nouveau/i2c: modify aux interface to return length actually transferred 2017-03-07 17:05:16 +10:00
nouveau_connector.h drm: Don't include <drm/drm_encoder.h> in <drm/drm_crtc.h> 2016-12-18 16:29:29 +05:30
nouveau_crtc.h drm/nouveau/kms/nv50: remove code to support non-atomic connector properties 2016-11-07 14:05:01 +10:00
nouveau_debugfs.c drm/nouveau: Remove nouveau_drm_debugfs_cleanup() 2017-03-01 16:09:52 +01:00
nouveau_debugfs.h drm/nouveau: Remove nouveau_drm_debugfs_cleanup() 2017-03-01 16:09:52 +01:00
nouveau_display.c drm/vblank: drop the mode argument from drm_calc_vbltimestamp_from_scanoutpos 2017-05-10 10:21:31 +02:00
nouveau_display.h drm/vblank: drop the mode argument from drm_calc_vbltimestamp_from_scanoutpos 2017-05-10 10:21:31 +02:00
nouveau_dma.c drm/nouveau: rename nouveau_drm.h to nouveau_drv.h 2016-05-20 14:43:04 +10:00
nouveau_dma.h
nouveau_dp.c drm/nouveau/kms/nv50: initial support for DP 1.2 multi-stream 2016-11-07 14:05:03 +10:00
nouveau_drm.c drm/vblank: drop the mode argument from drm_calc_vbltimestamp_from_scanoutpos 2017-05-10 10:21:31 +02:00
nouveau_drv.h Linux 4.10-rc8 2017-02-23 12:10:12 +10:00
nouveau_encoder.h drm/nouveau/kms/nv50: initial support for DP 1.2 multi-stream 2016-11-07 14:05:03 +10:00
nouveau_fbcon.c Merge airlied/drm-next into drm-misc-next 2017-02-26 21:34:42 +01:00
nouveau_fbcon.h drm/nouveau/fbcon: refcount the drm_framebuffer 2016-11-07 14:04:44 +10:00
nouveau_fence.c Less anger inducing pull request for 4.11 2017-02-23 18:58:18 -08:00
nouveau_fence.h drm/nouveau/fence/g84-: protect against concurrent access to semaphore buffers 2017-01-31 20:05:25 +10:00
nouveau_gem.c drm/nouveau: size is u64 everywhere 2017-02-17 17:38:04 +10:00
nouveau_gem.h drm/nouveau: size is u64 everywhere 2017-02-17 17:38:04 +10:00
nouveau_hwmon.c drm/nouveau/hwmon: expose power_max and power_crit 2017-02-17 17:38:17 +10:00
nouveau_hwmon.h
nouveau_ioc32.c
nouveau_ioctl.h
nouveau_led.c drm/nouveau/drm/nouveau/led: prevent a possible use-after-free 2017-02-17 17:38:07 +10:00
nouveau_led.h drm/nouveau/nouveau/led: prevent compiling the led-code if nouveau=y and leds=m 2017-01-31 20:05:25 +10:00
nouveau_nvif.c drm/nouveau/core/client: pass notification callback to nvkm_client_new 2017-02-17 15:15:00 +10:00
nouveau_platform.c drm/nouveau/platform: support for probing GP10B 2017-04-06 14:39:04 +10:00
nouveau_platform.h drm/nouveau: rename nouveau_drm.h to nouveau_drv.h 2016-05-20 14:43:04 +10:00
nouveau_prime.c drm/nouveau: pass nvif_client to nouveau_bo_new() instead of drm_device 2017-02-17 15:15:02 +10:00
nouveau_reg.h
nouveau_sgdma.c drm/nouveau: s/mem/reg/ for struct ttm_mem_reg variables 2017-02-17 15:15:04 +10:00
nouveau_ttm.c drm/nouveau: s/mem/reg/ for struct ttm_mem_reg variables 2017-02-17 15:15:04 +10:00
nouveau_ttm.h
nouveau_usif.c drm: Remove drm_pending_event->pid 2017-03-14 14:38:33 +01:00
nouveau_usif.h
nouveau_vga.c drm/nouveau: Don't register Thunderbolt eGPU with vga_switcheroo 2017-03-30 22:42:30 +02:00
nouveau_vga.h
nv04_fbcon.c drm/nouveau: allocate device object for every client 2017-02-17 15:15:04 +10:00
nv04_fence.c dma-buf: Rename struct fence to dma_fence 2016-10-25 14:40:39 +02:00
nv10_fence.c drm/nouveau/kms/nv50: remove code to support non-atomic page flips 2016-11-07 14:05:01 +10:00
nv10_fence.h drm/nouveau/kms/nv50: remove code to support non-atomic page flips 2016-11-07 14:05:01 +10:00
nv17_fence.c drm/nouveau: s/mem/reg/ for struct ttm_mem_reg variables 2017-02-17 15:15:04 +10:00
nv50_display.c Merge tag 'drm-misc-next-2017-04-07' of git://anongit.freedesktop.org/git/drm-misc into drm-next 2017-04-11 07:41:10 +10:00
nv50_display.h drm/nouveau/kms/nv50: remove code to support non-atomic page flips 2016-11-07 14:05:01 +10:00
nv50_fbcon.c drm/nouveau/fbcon: make use of drm_fb_helper.fb 2016-11-07 14:04:44 +10:00
nv50_fence.c drm/nouveau: s/mem/reg/ for struct ttm_mem_reg variables 2017-02-17 15:15:04 +10:00
nv84_fence.c Linux 4.10-rc8 2017-02-23 12:10:12 +10:00
nvc0_fbcon.c drm/nouveau/fbcon: make use of drm_fb_helper.fb 2016-11-07 14:04:44 +10:00
nvc0_fence.c drm/nouveau: rename nouveau_drm.h to nouveau_drv.h 2016-05-20 14:43:04 +10:00