linux_dsm_epyc7002/drivers/gpu/drm
Daniel Vetter 9a93585699 drm/i915: stage modeset output changes
This is the core of the new modeset logic.

The current code which is based upon the crtc helper code first
updates all the link of the new display pipeline and then calls the
lower-level set_mode function to execute the required callbacks to get
there. The issue with this approach is that for disabling we need to
know the _current_ display pipe state, not the new one.

Hence we need to stage the new state of the display pipe and only
update it once we have disabled the current configuration and before we
start to update the hw registers with the new configuration.

This patch here just prepares the ground by switching the new output
state computation to these staging pointers. To make it clearer,
rename the old update_output_state function to stage_output_state.

A few peculiarities:
- We're also calling the set_mode function at various places to update
  properties. Hence after a successfule modeset we need to stage the
  current configuration (for otherwise we might fall back again). This
  happens automatically because as part of the (successful) modeset we
  need to copy the staged state to the real one. But for the hw
  readout code we need to make sure that this happens, too.
- Teach the new staged output state computation code the required
  smarts to handle the disabling of outputs. The current code handles
  this in a special case, but to better handle global modeset changes
  covering more than one crtc, we want to do this all in the same
  low-level modeset code.
- The actual modeset code is still a bit ugly and wants to know the new
  crtc->enabled state a bit early. Follow-on patches will clean that
  up, for now we have to apply the staged output configuration early,
  outside of the set_mode functions.
- Improve/add comments in stage_output_state.

Essentially all that is left to do now is move the disabling code into
set_mode and then move the staged state update code also into
set_mode, at the right place between disabling things and calling the
mode_set callbacks for the new configuration.

v2: Disabling a crtc works by passing in a NULL mode or fb, userspace
doesn't hand in the list of connectors. We therefore need to detect
this case manually and tear down all the output links.

v3: Properly update the output staging pointers after having read out
the hw state.

v4: Simplify the code, add more DRM_DEBUG_KMS output and check a few
assumptions with WARN_ON. Essentially all things that I've noticed
while debugging issues in other places of the code.

v4: Correctly disable the old set of connectors when enabling an
already enabled crtc on a new set of crtc. Reported by Paulo Zanoni.

Reviewed-by: Jesse Barnes <jbarnes@virtuousgeek.org>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
2012-09-06 08:02:57 +02:00
..
ast drm: Make the .mode_fixup() operations mode argument a const pointer 2012-07-19 21:52:38 -04:00
cirrus drm: Make the .mode_fixup() operations mode argument a const pointer 2012-07-19 21:52:38 -04:00
exynos drm/exynos: fixed exception to page allocation failure 2012-07-27 11:13:57 +09:00
gma500 Merge branch 'drm-next' of git://people.freedesktop.org/~airlied/linux 2012-07-26 14:18:18 -07:00
i2c drm: Make the .mode_fixup() operations mode argument a const pointer 2012-07-19 21:52:38 -04:00
i810 drm: kill dma queue support 2012-07-19 22:50:55 -04:00
i915 drm/i915: stage modeset output changes 2012-09-06 08:02:57 +02:00
mga drm: kill reclaim_buffers callback 2012-07-19 22:50:28 -04:00
mgag200 drm/mgag200: fix G200ER pll picking algorithm 2012-08-10 20:31:37 +10:00
nouveau drm/nv86/fifo: suspend fix 2012-08-14 09:36:53 +10:00
r128 drm: kill reclaim_buffers callback 2012-07-19 22:50:28 -04:00
radeon drm/radeon: fix typo in function header comment 2012-08-13 10:53:29 -04:00
savage drm/savage: clean up reclaim_buffers 2012-07-19 22:50:16 -04:00
sis drm/sis: fixup sis_mm ioctl structs 2012-07-19 22:51:58 -04:00
tdfx drm: kill reclaim_buffers callback 2012-07-19 22:50:28 -04:00
ttm drm/ttm: Fix buffer object metadata accounting regression v2 2012-06-12 15:57:47 +01:00
udl drm/udl: call begin/end cpu access at more appropriate time 2012-08-17 10:10:07 +02:00
via drm/via: clean up reclaim_buffers 2012-07-19 22:48:28 -04:00
vmwgfx drm: track dev_mapping in more robust and flexible way 2012-07-25 14:09:30 +10:00
ati_pcigart.c
drm_agpsupport.c
drm_auth.c
drm_buffer.c
drm_bufs.c drm: kill dma queue support 2012-07-19 22:50:55 -04:00
drm_cache.c Merge branch 'drm-intel-next' of git://people.freedesktop.org/~danvet/drm-intel into drm-core-next 2012-04-12 10:27:01 +01:00
drm_context.c drm: Unify and fix idr error handling 2012-04-24 09:50:20 +01:00
drm_crtc_helper.c drm: Don't initialize local ret variable when not needed 2012-05-22 10:32:58 +01:00
drm_crtc.c drm: Use stdint types for consistency 2012-05-29 11:07:09 +01:00
drm_debugfs.c drm: kill dma queue support 2012-07-19 22:50:55 -04:00
drm_dma.c drm: kill dma queue support 2012-07-19 22:50:55 -04:00
drm_dp_i2c_helper.c
drm_drv.c drm: kill dma queue support 2012-07-19 22:50:55 -04:00
drm_edid_load.c drm/edid: Fix potential memory leak in edid_load() 2012-08-10 20:30:04 +10:00
drm_edid_modes.h drm: replace open-coded ARRAY_SIZE with macro 2012-04-20 13:12:16 +01:00
drm_edid.c drm: edid: Don't add inferred modes with higher resolution 2012-07-03 11:18:10 +01:00
drm_encoder_slave.c
drm_fb_helper.c drm/fb-helper: don't clobber output routing in setup_crtcs 2012-08-17 10:10:05 +02:00
drm_fops.c drm: track dev_mapping in more robust and flexible way 2012-07-25 14:09:30 +10:00
drm_gem.c drm: Add colouring to the range allocator 2012-07-16 05:59:37 +10:00
drm_global.c
drm_hashtab.c
drm_info.c drm: kill dma queue support 2012-07-19 22:50:55 -04:00
drm_ioc32.c
drm_ioctl.c drm/prime: expose capability flags for userspace. 2012-05-18 11:12:16 +01:00
drm_irq.c drm: Disallow DRM_IOCTL_MODESET_CTL for KMS drivers 2012-07-18 06:05:48 +10:00
drm_lock.c drm: ditch strange DRIVER_DMA_QUEUE only error bail-out 2012-07-19 22:50:47 -04:00
drm_memory.c drm: remove unused code 2012-02-29 10:18:29 +00:00
drm_mm.c drm: Add colouring to the range allocator 2012-07-16 05:59:37 +10:00
drm_modes.c drm: Add drm_mode_copy() 2012-03-15 09:52:51 +00:00
drm_pci.c drm/pci: add support for getting the supported link bw. 2012-07-19 22:29:25 -04:00
drm_platform.c drm: cope with platformdev->id == -1 2012-03-07 14:03:40 +00:00
drm_prime.c drm/prime: add exported buffers to current fprivs imported buffer list (v2) 2012-05-23 10:46:03 +01:00
drm_proc.c drm: kill dma queue support 2012-07-19 22:50:55 -04:00
drm_scatter.c
drm_stub.c drm: Don't initialize local ret variable when not needed 2012-05-22 10:32:58 +01:00
drm_sysfs.c drm: fail gracefully when proc isn't setup. 2012-07-16 05:57:03 +10:00
drm_trace_points.c
drm_trace.h
drm_usb.c drm/usb: fix module license on drm/usb layer. 2012-04-19 09:33:32 +01:00
drm_vm.c drm: pass dev to drm_vm_{open,close}_locked() 2012-05-11 17:37:46 +01:00
Kconfig drm/kms: driver for virtual cirrus under qemu 2012-05-17 11:02:24 +01:00
Makefile drm/kms: driver for virtual cirrus under qemu 2012-05-17 11:02:24 +01:00
README.drm

************************************************************
* For the very latest on DRI development, please see:      *
*     http://dri.freedesktop.org/                          *
************************************************************

The Direct Rendering Manager (drm) is a device-independent kernel-level
device driver that provides support for the XFree86 Direct Rendering
Infrastructure (DRI).

The DRM supports the Direct Rendering Infrastructure (DRI) in four major
ways:

    1. The DRM provides synchronized access to the graphics hardware via
       the use of an optimized two-tiered lock.

    2. The DRM enforces the DRI security policy for access to the graphics
       hardware by only allowing authenticated X11 clients access to
       restricted regions of memory.

    3. The DRM provides a generic DMA engine, complete with multiple
       queues and the ability to detect the need for an OpenGL context
       switch.

    4. The DRM is extensible via the use of small device-specific modules
       that rely extensively on the API exported by the DRM module.


Documentation on the DRI is available from:
    http://dri.freedesktop.org/wiki/Documentation
    http://sourceforge.net/project/showfiles.php?group_id=387
    http://dri.sourceforge.net/doc/

For specific information about kernel-level support, see:

    The Direct Rendering Manager, Kernel Support for the Direct Rendering
    Infrastructure
    http://dri.sourceforge.net/doc/drm_low_level.html

    Hardware Locking for the Direct Rendering Infrastructure
    http://dri.sourceforge.net/doc/hardware_locking_low_level.html

    A Security Analysis of the Direct Rendering Infrastructure
    http://dri.sourceforge.net/doc/security_low_level.html