GPU Driver Developer’s Guide¶
- Introduction
 - DRM Internals
 - DRM Memory Management
 - Kernel Mode Setting (KMS)
- Overview
 - KMS Core Structures and Functions
 - Modeset Base Object Abstraction
 - Atomic Mode Setting
 - CRTC Abstraction
 - Frame Buffer Abstraction
 - DRM Format Handling
 - Dumb Buffer Objects
 - Plane Abstraction
 - Display Modes Function Reference
 - Connector Abstraction
 - Encoder Abstraction
 - KMS Locking
 - KMS Properties
- Requirements
 - Property Types and Blob Property Support
 - Standard Connector Properties
 - HDMI Specific Connector Properties
 - Analog TV Specific Connector Properties
 - Standard CRTC Properties
 - Standard Plane Properties
 - Plane Composition Properties
 - Damage Tracking Properties
 - Color Management Properties
 - Tile Group Property
 - Explicit Fencing Properties
 - Variable Refresh Properties
 - Cursor Hotspot Properties
 - Existing KMS Properties
 
 - Vertical Blanking
 - Vertical Blank Work
 
 - Mode Setting Helper Functions
- Modeset Helper Reference for Common Vtables
 - Atomic Modeset Helper Functions Reference
 - Simple KMS Helper Reference
 - fbdev Helper Functions Reference
 - format Helper Functions Reference
 - Framebuffer DMA Helper Functions Reference
 - Framebuffer GEM Helper Reference
 - Bridges
 - Panel Helper Reference
 - Panel Self Refresh Helper Reference
 - HDCP Helper Functions Reference
 - Display Port Helper Functions Reference
 - Display Port CEC Helper Functions Reference
 - Display Port Dual Mode Adaptor Helper Functions Reference
 - Display Port MST Helpers
 - MIPI DBI Helper Functions Reference
 - MIPI DSI Helper Functions Reference
 - Display Stream Compression Helper Functions Reference
 - Output Probing Helper Functions Reference
 - EDID Helper Functions Reference
 - SCDC Helper Functions Reference
 - HDMI Infoframes Helper Reference
 - Rectangle Utilities Reference
 - Flip-work Helper Reference
 - Auxiliary Modeset Helpers
 - OF/DT Helpers
 - Legacy Plane Helper Reference
 - Legacy CRTC/Modeset Helper Functions Reference
 - Privacy-screen class
 
 - Userland interfaces
- libdrm Device Lookup
 - Primary Nodes, DRM Master and Authentication
 - DRM Display Resource Leasing
 - Open-Source Userspace Requirements
 - Render nodes
 - Device Hot-Unplug
 - Device reset
 - IOCTL Support on Device Nodes
 - Testing and validation
 - Sysfs Support
 - VBlank event handling
 - Userspace API Structures
 - dma-buf interoperability
 
 - DRM client usage stats
 - DRM Driver uAPI
 - Kernel clients
 - GPU Driver Documentation
- drm/amdgpu AMDgpu driver
- Module Parameters
 - Core Driver Infrastructure
 - drm/amd/display - Display Core (DC)
 - dGPU firmware flashing
 - AMDGPU XGMI Support
 - AMDGPU RAS Support
 - GPU Power/Thermal Controls and Monitoring
- HWMON Interfaces
 - GPU sysfs Power State Interfaces
- power_dpm_state
 - power_dpm_force_performance_level
 - pp_table
 - pp_od_clk_voltage
 - pp_dpm_*
 - pp_power_profile_mode
 - pm_policy
 - *_busy_percent
 - gpu_metrics
 - fan_curve
 - acoustic_limit_rpm_threshold
 - acoustic_target_rpm_threshold
 - fan_target_temperature
 - fan_minimum_pwm
 - fan_zero_rpm_enable
 - fan_zero_rpm_stop_temperature
 
 - GFXOFF
 
 - Misc AMDGPU driver information
 - GPU Debugging
 - AMDGPU Process Isolation
 - AMDGPU Glossary
 
 - drm/i915 Intel GFX Driver
- Core Driver Infrastructure
 - Display Hardware Handling
- Mode Setting Infrastructure
 - Frontbuffer Tracking
 - Display FIFO Underrun Reporting
 - Plane Configuration
 - Atomic Plane Helpers
 - Asynchronous Page Flip
 - Output Probing
 - Hotplug
 - High Definition Audio
 - Intel HDMI LPE Audio Support
 - Panel Self Refresh PSR (PSR/SRD)
 - Frame Buffer Compression (FBC)
 - Display Refresh Rate Switching (DRRS)
 - DPIO
 - DMC Firmware Support
 - DMC wakelock support
 - Video BIOS Table (VBT)
 - Display clocks
 - Display PLLs
 - Display State Buffer
 
 - GT Programming
 - Memory Management and Command Submission
- Intel GPU Basics
 - Locking Guidelines
 - GEM BO Management Implementation Details
 - Buffer Object Eviction
 - Buffer Object Memory Shrinking
 - Batchbuffer Parsing
 - User Batchbuffer Execution
 - Scheduling
 - Logical Rings, Logical Ring Contexts and Execlists
 - Global GTT views
 - GTT Fences and Swizzling
 - Object Tiling IOCTLs
 - Protected Objects
 
 - Microcontrollers
 - Tracing
 - Perf
 - Style
 - i915 DRM client usage stats implementation
 
 - drm/imagination PowerVR Graphics Driver
 - drm/mcde ST-Ericsson MCDE Multi-channel display engine
 - drm/meson AmLogic Meson Video Processing Unit
 - drm/pl111 ARM PrimeCell PL110 and PL111 CLCD Driver
 - drm/tegra NVIDIA Tegra GPU and display driver
 - drm/tve200 Faraday TV Encoder 200
 - drm/v3d Broadcom V3D Graphics Driver
 - drm/vc4 Broadcom VC4 Graphics Driver
 - drm/vkms Virtual Kernel Modesetting
 - drm/bridge/dw-hdmi Synopsys DesignWare HDMI Controller
 - drm/xen-front Xen para-virtualized frontend driver
 - drm/xe Intel GFX Driver
 - Arm Framebuffer Compression (AFBC)
 - drm/komeda Arm display driver
 - drm/Panfrost Mali Driver
 - drm/Panthor CSF driver
 - Xilinx ZynqMP Ultrascale+ DisplayPort Subsystem
 
 - drm/amdgpu AMDgpu driver
 - Backlight support
 - VGA Switcheroo
 - VGA Arbiter
 - Automated testing of the DRM subsystem
 - Misc DRM driver uAPI- and feature implementation guidelines
- Asynchronous VM_BIND
 - VM_BIND locking
- The DRM GPUVM set of helpers
 - Nomenclature
 - Locks and locking order
 - Protection and lifetime of gpu_vm_bos and gpu_vmas
 - Revalidation and eviction of local objects
 - Locking with external buffer objects
 - Accessing the gpu_vm’s lists without the dma_resv lock held
 - userptr gpu_vmas
 - Locking at bind and unbind time
 - Locking for recoverable page-fault page-table updates
 
 
 - TODO list
- Difficulty
 - Remove custom dumb_map_offset implementations
 - Convert existing KMS drivers to atomic modesetting
 - Clean up the clipped coordination confusion around planes
 - Improve plane atomic_check helpers
 - Convert early atomic drivers to async commit helpers
 - Rename drm_atomic_state
 - Fallout from atomic KMS
 - Get rid of dev->struct_mutex from GEM drivers
 - Move Buffer Object Locking to dma_resv_lock()
 - Convert logging to drm_* functions with drm_device parameter
 - Convert drivers to use simple modeset suspend/resume
 - Reimplement functions in drm_fbdev_fb_ops without fbdev
 - Benchmark and optimize blitting and format-conversion function
 - drm_framebuffer_funcs and drm_mode_config_funcs.fb_create cleanup
 - Generic fbdev defio support
 - connector register/unregister fixes
 - Remove load/unload callbacks
 - Replace drm_detect_hdmi_monitor() with drm_display_info.is_hdmi
 - Consolidate custom driver modeset properties
 - Use struct iosys_map throughout codebase
 - Review all drivers for setting struct drm_mode_config.{max_width,max_height} correctly
 - Request memory regions in all drivers
 - Remove driver dependencies on FB_DEVICE
 - Remove disable/unprepare in remove/shutdown in panel-simple and panel-edp
 - Transition away from using mipi_dsi_*_write_seq()
 - Make panic handling work
 - Clean up the debugfs support
 - Object lifetime fixes
 - Remove automatic page mapping from dma-buf importing
 - Add unit tests using the Kernel Unit Testing (KUnit) framework
 - Clean up and document former selftests suites
 - Enable trinity for DRM
 - Make KMS tests in i-g-t generic
 - Extend virtual test driver (VKMS)
 - Backlight Refactoring
 - AMD DC Display Driver
 - Convert fbdev drivers to DRM
 
 - GPU RFC Section