Linux GPU Driver Developer's Guide

Jesse Barnes

Initial version 
Intel Corporation


    
  

Laurent Pinchart

Driver internals 
Ideas on board SPRL

Daniel Vetter

Contributions all over the place 
Intel Corporation


    
  

Lukas Wunner

vga_switcheroo documentation 


    
  

The contents of this file may be used under the terms of the GNU General Public License version 2 (the "GPL") as distributed in the kernel source COPYING file.

Revision History
Revision 1.02012-07-13LP
Added extensive documentation about driver internals.
Revision 1.12015-10-11LW
Added vga_switcheroo documentation.

Table of Contents

I. DRM Core
1. Introduction
2. DRM Internals
Driver Initialization
Driver Information
Device Instance and Driver Handling
Driver Load
Bus-specific Device Registration and PCI Support
Memory management
The Translation Table Manager (TTM)
The Graphics Execution Manager (GEM)
VMA Offset Manager
PRIME Buffer Sharing
PRIME Function References
DRM MM Range Allocator
DRM MM Range Allocator Function References
CMA Helper Functions Reference
Mode Setting
Display Modes Function Reference
Atomic Mode Setting Function Reference
Frame Buffer Creation
Dumb Buffer Objects
Output Polling
Locking
KMS Initialization and Cleanup
CRTCs (struct drm_crtc)
Planes (struct drm_plane)
Encoders (struct drm_encoder)
Connectors (struct drm_connector)
Cleanup
Output discovery and initialization example
KMS API Functions
KMS Data Structures
KMS Locking
Mode Setting Helper Functions
Helper Functions
CRTC Helper Operations
Encoder Helper Operations
Connector Helper Operations
Atomic Modeset Helper Functions Reference
Modeset Helper Functions Reference
Output Probing Helper Functions Reference
fbdev Helper Functions Reference
Display Port Helper Functions Reference
Display Port MST Helper Functions Reference
MIPI DSI Helper Functions Reference
EDID Helper Functions Reference
Rectangle Utilities Reference
Flip-work Helper Reference
HDMI Infoframes Helper Reference
Plane Helper Reference
Tile group
Bridges
KMS Properties
Existing KMS Properties
Vertical Blanking
Vertical Blanking and Interrupt Handling Functions Reference
Open/Close, File Operations and IOCTLs
Open and Close
File Operations
IOCTLs
Legacy Support Code
Legacy Suspend/Resume
Legacy DMA Services
3. Userland interfaces
Render nodes
VBlank event handling
II. DRM Drivers
4. drm/i915 Intel GFX Driver
Core Driver Infrastructure
Runtime Power Management
Interrupt Handling
Intel GVT-g Guest Support(vGPU)
Display Hardware Handling
Mode Setting Infrastructure
Frontbuffer Tracking
Display FIFO Underrun Reporting
Plane Configuration
Atomic Plane Helpers
Output Probing
Hotplug
High Definition Audio
Panel Self Refresh PSR (PSR/SRD)
Frame Buffer Compression (FBC)
Display Refresh Rate Switching (DRRS)
DPIO
CSR firmware support for DMC
Memory Management and Command Submission
Batchbuffer Parsing
Batchbuffer Pools
Logical Rings, Logical Ring Contexts and Execlists
Global GTT views
GTT Fences and Swizzling
Object Tiling IOCTLs
Buffer Object Eviction
Buffer Object Memory Shrinking
GuC-based Command Submission
GuC
GuC Client
Tracing
i915_ppgtt_create and i915_ppgtt_release
i915_context_create and i915_context_free
switch_mm
III. vga_switcheroo
5. Modes of Use
Manual switching and manual power control
Driver power control
6. Public functions
vga_switcheroo_register_handler — register handler
vga_switcheroo_unregister_handler — unregister handler
vga_switcheroo_register_client — register vga client
vga_switcheroo_register_audio_client — register audio client
vga_switcheroo_get_client_state — obtain power state of a given client
vga_switcheroo_unregister_client — unregister client
vga_switcheroo_client_fb_set — set framebuffer of a given client
vga_switcheroo_process_delayed_switch — helper for delayed switching
vga_switcheroo_set_dynamic_switch — helper for driver power control
vga_switcheroo_init_domain_pm_ops — helper for driver power control
vga_switcheroo_init_domain_pm_optimus_hdmi_audio — helper for driver power control
7. Public structures
struct vga_switcheroo_handler — handler callbacks
struct vga_switcheroo_client_ops — client callbacks
8. Public constants
enum vga_switcheroo_client_id — client identifier
enum vga_switcheroo_state — client power state
9. Private structures
struct vgasr_priv — vga_switcheroo private data
struct vga_switcheroo_client — registered client

List of Tables

2.1.
4.1. Dual channel PHY (VLV/CHV/BXT)
4.2. Single channel PHY (CHV/BXT)