drm/nouveau/kms/nv50: transition to atomic interfaces internally

This commit implements the atomic commit interfaces, and implements the
legacy modeset and page flipping interfaces on top of them.

There's two major changes in behavior from before:

- We're now making use of interlocks between core and satellite EVO
  channels, which greatly improves our ability to keep their states
  synchronised.
- DPMS is now implemented as a full modeset to either tear down the
  entire pipe (or bring it back up).  This choice was made mostly
  to ease the initial implementation, but I'm also not sure what we
  gain by bring backing the old behaviour.  We shall see.

This does NOT currently expose the atomic ioctl by default, due to
limited testing having been performed.

Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
This commit is contained in:
Ben Skeggs 2016-11-04 17:20:36 +10:00
parent 5f674a5c46
commit 839ca903f1
3 changed files with 779 additions and 89 deletions

View File

@ -280,7 +280,7 @@ nouveau_framebuffer_new(struct drm_device *dev,
return ret; return ret;
} }
static struct drm_framebuffer * struct drm_framebuffer *
nouveau_user_framebuffer_create(struct drm_device *dev, nouveau_user_framebuffer_create(struct drm_device *dev,
struct drm_file *file_priv, struct drm_file *file_priv,
const struct drm_mode_fb_cmd2 *mode_cmd) const struct drm_mode_fb_cmd2 *mode_cmd)

View File

@ -106,4 +106,7 @@ nouveau_backlight_exit(struct drm_device *dev) {
} }
#endif #endif
struct drm_framebuffer *
nouveau_user_framebuffer_create(struct drm_device *, struct drm_file *,
const struct drm_mode_fb_cmd2 *);
#endif #endif

File diff suppressed because it is too large Load Diff