Atomic Mode-Setting Thierry Reding NVIDIA Corporation February 1, - - PowerPoint PPT Presentation

atomic mode setting
SMART_READER_LITE
LIVE PREVIEW

Atomic Mode-Setting Thierry Reding NVIDIA Corporation February 1, - - PowerPoint PPT Presentation

Atomic Mode-Setting Thierry Reding NVIDIA Corporation February 1, 2015 Thierry Reding (NVIDIA) Atomic Mode-Setting February 1, 2015 1 / 25 Table of Contents 1 A Bit of History Pre-KMS Era Kernel Mode-Setting Era 2 Atomic Mode-Setting


slide-1
SLIDE 1

Atomic Mode-Setting

Thierry Reding

NVIDIA Corporation

February 1, 2015

Thierry Reding (NVIDIA) Atomic Mode-Setting February 1, 2015 1 / 25

slide-2
SLIDE 2

Table of Contents

1 A Bit of History

Pre-KMS Era Kernel Mode-Setting Era

2 Atomic Mode-Setting

Building Blocks

3 Driver Conversion

Preparatory Work Three Phases Follow-up Work

4 Future Work

Userspace Drivers

5 Summary

Thierry Reding (NVIDIA) Atomic Mode-Setting February 1, 2015 2 / 25

slide-3
SLIDE 3

A Bit of History Pre-KMS Era

Prehistory

user-space mode-setting X driver has direct access to graphics card registers X needs superuser privileges

Thierry Reding (NVIDIA) Atomic Mode-Setting February 1, 2015 3 / 25

slide-4
SLIDE 4

A Bit of History Pre-KMS Era

The Middle Ages

DRM allows multiple processes to access a single graphics card attempt to provide a common API

buffer management command submission

user-space still performs mode-setting

Thierry Reding (NVIDIA) Atomic Mode-Setting February 1, 2015 4 / 25

slide-5
SLIDE 5

A Bit of History Kernel Mode-Setting Era

Renaissance

kernel mode-setting (KMS) is introduced kernel drivers are now in charge of mode-setting kernel drivers also manage other resources

buffer objects

  • utput configuration

hotplug

Thierry Reding (NVIDIA) Atomic Mode-Setting February 1, 2015 5 / 25

slide-6
SLIDE 6

A Bit of History Kernel Mode-Setting Era

Renaissance - Kernel Mode-Setting

CRTCs, encoders and connectors

query configurations and capabilities set modes and framebuffers page-flip buffers

planes

query number of available planes and supported formats set a plane (position, size, framebuffer) ...

  • bject properties

Thierry Reding (NVIDIA) Atomic Mode-Setting February 1, 2015 6 / 25

slide-7
SLIDE 7

A Bit of History Kernel Mode-Setting Era

Renaissance - Not everything is perfect

mode sets fail too late, there’s no way to rollback KMS does not guarantee that a configuration is applied in totality for the next frame no VBLANK-synchronized page-flips for planes (!) compositors want perfect frames

Thierry Reding (NVIDIA) Atomic Mode-Setting February 1, 2015 7 / 25

slide-8
SLIDE 8

A Bit of History Kernel Mode-Setting Era

Perfect Frames?

Suppose we want to show two planes on the screen: Whereas we really want this:

Thierry Reding (NVIDIA) Atomic Mode-Setting February 1, 2015 8 / 25

slide-9
SLIDE 9

Atomic Mode-Setting

Atomic Mode-Setting

allows an output configuration to be validated before it is applied:

no hardware is touched before the driver acknowledges that the configuration is valid and can be applied no need for rollback

allows atomic updates of an output configuration:

multiple planes updated at the same time perfect frames

allows for unification and simplification of drivers

legacy code can be removed from drivers much of the handling moves into helpers

Thierry Reding (NVIDIA) Atomic Mode-Setting February 1, 2015 9 / 25

slide-10
SLIDE 10

Atomic Mode-Setting Building Blocks

Atomic Mode-Setting - Building Blocks

Universal Planes Properties Atomic State

Thierry Reding (NVIDIA) Atomic Mode-Setting February 1, 2015 10 / 25

slide-11
SLIDE 11

Atomic Mode-Setting Building Blocks

Universal Planes

root window is special in legacy KMS

becomes a regular plane hardware treats them the same anyway

code becomes simpler

cursor exposed as plane

exports a list of supported formats

helpers are available

implement legacy IOCTLs using universal planes implement primary plane using legacy callbacks

Thierry Reding (NVIDIA) Atomic Mode-Setting February 1, 2015 11 / 25

slide-12
SLIDE 12

Atomic Mode-Setting Building Blocks

Properties and Atomic State

interface parameters are converted to object properties properties are stored in atomic state objects

blob properties are read-only, no way to change the video mode from userspace (yet)

atomic state objects are validated and applied

Thierry Reding (NVIDIA) Atomic Mode-Setting February 1, 2015 12 / 25

slide-13
SLIDE 13

Driver Conversion Preparatory Work

Universal Planes

relatively easy to implement

matches what modern hardware exposes

many drivers are already converted

good references

Thierry Reding (NVIDIA) Atomic Mode-Setting February 1, 2015 13 / 25

slide-14
SLIDE 14

Driver Conversion Preparatory Work

VBLANK Handling

atomic mode-setting has somewhat strict requirements

plane updates are synchronized to VBLANKs to make sure framebuffers are unused before unreferenced good news because drivers don’t have to worry anymore

drivers must disable VBLANK machinery when the display controller is off (drm crtc vblank off()) when the display controller is enabled the VBLANK machinery must be turned on again (drm crtc vblank on()) Helpers fall over if the hardware state isn’t accurately mirrored in the VBLANK machinery.

Thierry Reding (NVIDIA) Atomic Mode-Setting February 1, 2015 14 / 25

slide-15
SLIDE 15

Driver Conversion Preparatory Work

Driver Rewrite

atomic mode-setting has fairly high expectations especially important for atomic DPMS

  • >prepare() is called when the CRTC or encoder is disabled
  • >mode set() is called when the mode changes
  • >commit() is used when the CRTC or encoder is enabled

On Tegra everything was done in ->dpms(), requiring an almost complete rewrite.

Thierry Reding (NVIDIA) Atomic Mode-Setting February 1, 2015 15 / 25

slide-16
SLIDE 16

Driver Conversion Three Phases

Conversion in Three Phases

Phase 1 - Transitional Helpers Phase 2 - Atomic State Object Scaffolding Phase 3 - Rolling out Atomic Support Transitional and atomic helpers are very modular and the conversion is suprisingly painless.

Thierry Reding (NVIDIA) Atomic Mode-Setting February 1, 2015 16 / 25

slide-17
SLIDE 17

Driver Conversion Three Phases

Phase 1 - Transitional Helpers

implement legacy entry points in terms of new atomic callbacks

CRTCs

  • >atomic check() - validate state
  • >atomic begin() - prepare for updates
  • >atomic flush() - apply updates atomically
  • >mode set nofb() - apply CRTC timings

It is possible to set a mode without a primary plane. planes

  • >prepare fb() - e.g. pin backing storage
  • >cleanup fb() - e.g. unpin backing storage
  • >atomic check() - validate state
  • >atomic update() - plane updates
  • >atomic disable() - disable plane

caveat: ->atomic destroy state() needs to be wired up here,

  • therwise the transitional helpers will leak state objects

Thierry Reding (NVIDIA) Atomic Mode-Setting February 1, 2015 17 / 25

slide-18
SLIDE 18

Driver Conversion Three Phases

Phase 2 - Atomic State Object Scaffolding

wire up state callbacks for planes, CRTCs and connectors:

  • >reset()

drm atomic helper * reset()

  • >atomic duplicate state()

drm atomic helper * duplicate state()

  • >atomic destroy state()

drm atomic helper * destroy state()

default helpers are good enough for starters

Thierry Reding (NVIDIA) Atomic Mode-Setting February 1, 2015 18 / 25

slide-19
SLIDE 19

Driver Conversion Three Phases

Phase 3 - Rolling out Atomic Support

Step 1 - switch to atomic helpers internally:

Planes:

drm atomic helper update plane() drm atomic helper disable plane()

Driver:

drm atomic helper check() drm atomic helper commit()

Driver now uses only atomic interfaces internally.

Thierry Reding (NVIDIA) Atomic Mode-Setting February 1, 2015 19 / 25

slide-20
SLIDE 20

Driver Conversion Three Phases

Phase 3 - Rolling out Atomic Support

Step 2 - switch to atomic helpers for userspace IOCTLs:

drm atomic helper set config()

DRM MODE IOCTL SET CRTC

provide a custom ->atomic commit() implementation

to support asynchronous commits, required for page-flipping

drm atomic helper page flip()

DRM MODE IOCTL PAGEFLIP

Driver is now fully atomic (semantically).

Thierry Reding (NVIDIA) Atomic Mode-Setting February 1, 2015 20 / 25

slide-21
SLIDE 21

Driver Conversion Follow-up Work

Rip out Cruft

  • >mode set() and ->mode set base() are no longer used
  • >mode set nofb() does what is necessary to set a mode

atomic DPMS

DPMS standby and suspend are no more (w00t)

  • >disable() and ->enable() callbacks

atomic DPMS is a full off or on cycle

Isn’t this exactly what Tegra used to do before the almost complete rewrite? Almost, except the atomic helpers now keep track of everything.

Thierry Reding (NVIDIA) Atomic Mode-Setting February 1, 2015 21 / 25

slide-22
SLIDE 22

Driver Conversion Follow-up Work

Where the fun begins

Subclassing atomic state:

embed struct drm * state in device-specific structures move device-specific data into these structures

Allows ->atomic check() to cache information already computed. Simplifies other code because it doesn’t need to recompute. Implement truly atomic updates:

e.g. ->atomic flush() ”GO” bits

Thierry Reding (NVIDIA) Atomic Mode-Setting February 1, 2015 22 / 25

slide-23
SLIDE 23

Future Work Userspace

Userspace IOCTL

brand new in Linux v3.20 still hidden behind drm.atomic parameter amalgamation of objects and properties:

array of object IDs array of per-object property counts array of properties flags

page-flip test-only non-block allow modeset

Thierry Reding (NVIDIA) Atomic Mode-Setting February 1, 2015 23 / 25

slide-24
SLIDE 24

Future Work Drivers

More cool stuff

hardware readout:

  • >reset() reads state of hardware at driver load time

no transition if no state is changed seamless transition between firmware or bootloader and kernel

unify asynchronous commits

possibly via generic helpers

asynchronous page-flips

eglSwapInterval() because everybody loves benchmarks generic flip-queue that works for all drivers

can fast-forward over a bunch of updates if supported by the driver it’s like benchmarking page-flips, but without the tearing

plane rotation via standard properties

Thierry Reding (NVIDIA) Atomic Mode-Setting February 1, 2015 24 / 25

slide-25
SLIDE 25

Summary

Summary

Atomic mode-setting is not only necessary but allows a bunch of nice and long overdue cleanup and unification. Atomic mode-setting is nowhere near as complicated as it sounds. Before converting your driver, make sure to have well-behaved callbacks and VBLANK handling. Given that the conversion is almost trivial because of excellent helpers.

Bottom Line

If you maintain a KMS driver, go convert it now, otherwise you are going to miss out on all the good stuff coming up.

Thierry Reding (NVIDIA) Atomic Mode-Setting February 1, 2015 25 / 25