STRUCT AMDGPU_DISPLAY_MANAGER(9)
π NAME π
Okay bestie, this is the struct amdgpu_display_manager page from the Kernel API Manual β manual name struct amdgpu_display_manager(9) β and itβs literally the central amdgpu display manager device. One big struct, whole lotta display-manager glue, main character energy. π«Ά
β¨ SYNOPSIS β¨
Hereβs the struct in all its glory β exact fields, exact names, no βI fixed the spacingβ nonsense, bestie π
struct amdgpu_display_manager {
struct dc *dc;
struct dmub_srv *dmub_srv;
struct dmub_notification *dmub_notify;
dmub_notify_interrupt_callback_t
dmub_callback[AMDGPU_DMUB_NOTIFICATION_MAX];
bool dmub_thread_offload[AMDGPU_DMUB_NOTIFICATION_MAX];
struct dmub_srv_fb_info *dmub_fb_info;
const struct firmware *dmub_fw;
struct amdgpu_bo *dmub_bo;
u64 dmub_bo_gpu_addr;
void *dmub_bo_cpu_addr;
uint32_t dmcub_fw_version;
uint32_t fw_inst_size;
struct cgs_device *cgs_device;
struct amdgpu_device *adev;
struct drm_device *ddev;
u16 display_indexes_num;
struct drm_private_obj atomic_obj;
struct mutex dc_lock;
spinlock_t dmub_lock;
struct mutex audio_lock;
struct drm_audio_component *audio_component;
bool audio_registered;
struct list_head irq_handler_list_low_tab[DAL_IRQ_SOURCES_NUMBER];
struct list_head irq_handler_list_high_tab[DAL_IRQ_SOURCES_NUMBER];
struct common_irq_params pflip_params[DC_IRQ_SOURCE_PFLIP_LAST -
DC_IRQ_SOURCE_PFLIP_FIRST + 1];
struct common_irq_params vblank_params[DC_IRQ_SOURCE_VBLANK6 -
DC_IRQ_SOURCE_VBLANK1 + 1];
struct common_irq_params vline0_params[DC_IRQ_SOURCE_DC6_VLINE0 -
DC_IRQ_SOURCE_DC1_VLINE0 + 1];
struct common_irq_params vupdate_params[DC_IRQ_SOURCE_VUPDATE6 -
DC_IRQ_SOURCE_VUPDATE1 + 1];
spinlock_t irq_reg_lock;
struct common_irq_params dmub_trace_params[1];
struct common_irq_params dmub_outbox_params[1];
spinlock_t irq_handler_list_table_lock;
struct workqueue_struct *irq_wq;
struct workqueue_struct *vmin_vmax_wq;
struct backlight_device *backlight_dev[AMDGPU_DM_MAX_NUM_EDP];
const struct dc_link *backlight_link[AMDGPU_DM_MAX_NUM_EDP];
uint8_t num_of_edps;
struct amdgpu_dm_backlight_caps
backlight_caps[AMDGPU_DM_MAX_NUM_EDP];
struct mod_freesync *freesync_module;
struct mod_power *power_module;
struct hdcp_workqueue *hdcp_workqueue;
struct workqueue_struct *vblank_control_workqueue;
struct idle_workqueue *idle_workqueue;
struct drm_atomic_commit *cached_state;
struct dc_state *cached_dc_state;
struct dm_compressor_info compressor;
const struct firmware *fw_dmcu;
uint32_t dmcu_fw_version;
const struct gpu_info_soc_bounding_box_v1_0 *soc_bounding_box;
uint32_t active_vblank_irq_count;
#if defined(CONFIG_DRM_AMD_SECURE_DISPLAY);
struct secure_display_context secure_display_ctx;
#endif;
struct hpd_rx_irq_offload_work_queue *hpd_rx_offload_wq;
struct amdgpu_encoder mst_encoders[AMDGPU_DM_MAX_CRTC];
bool force_timing_sync;
bool disable_hpd_irq;
bool dmcub_trace_event_en;
struct list_head da_list;
struct completion dmub_aux_transfer_done;
struct workqueue_struct *delayed_hpd_wq;
u32 brightness[AMDGPU_DM_MAX_NUM_EDP];
u32 actual_brightness[AMDGPU_DM_MAX_NUM_EDP];
bool aux_hpd_discon_quirk;
bool edp0_on_dp1_quirk;
struct mutex dpia_aux_lock;
void *bb_from_dmub;
void *i2c_devres_group;
struct amdgpu_i2c_adapter *oem_i2c;
struct fused_io_sync {
struct completion replied;
char reply_data[0x40];
} fused_io[8];
struct workqueue_struct *hdmi_frl_status_polling_wq;
struct delayed_work hdmi_frl_status_polling_work;
unsigned int hdmi_frl_status_polling_delay_ms;
struct dm_boot_time_crc_info boot_time_crc_info;
};
Quick heads-up, bestie:power_module,hdmi_frl_status_polling_wq,hdmi_frl_status_polling_delay_ms, andboot_time_crc_infoare all in the struct above, but the originalMemberslist doesnβt describe those β so Iβm not inventing lore, theyβre just chilling in the code block π«Ά
π«Ά Members π«Ά
Members time β this is the cast of characters. Every technical detail stays exactly where it belongs; Iβm just giving it group-chat energy. π
dcβ Display Core control structure. Main character of the display-core situation β¨dmub_srvβ DMUB service, used for controlling the DMUB on hardware that supports it. The pointer to thedmub_srvwill beNULLon hardware that does not support it. πdmub_notifyβ notification from DMUB. π¬dmub_callbackβ callback functions to handle notification from DMUB. πdmub_thread_offloadβ flag to indicate if callback is offload. βdmub_fb_infoβ framebuffer regions for the DMUB. πΌοΈdmub_fwβ DMUB firmware, required on hardware that has DMUB support. π₯dmub_boβ buffer object for the DMUB. π§Έdmub_bo_gpu_addrβ GPU virtual address for the DMUB buffer object. π°οΈdmub_bo_cpu_addrβ CPU address for the DMUB buffer object. π§dmcub_fw_versionβ DMCUB firmware version. π·οΈfw_inst_sizeβ size of the firmware instruction buffer. πcgs_deviceβ the Common Graphics Services device. It provides an interface for accessing registers. ποΈadevβ AMDGPU base driver structure. π§±ddevβ DRM base driver structure. π¬display_indexes_numβ max number of display streams supported. π’atomic_objβ in combination withdm_atomic_stateit helps manage global atomic state that doesnβt map cleanly into existing drm resources, likedc_context. πdc_lockβ guards access to DC functions that can issue register write sequences. πdmub_lockβ guards access to DMUB command submission. π‘οΈaudio_lockβ guards access to audio instance changes. πaudio_componentβ used to notify ELD changes to sound driver. π§audio_registeredβtrueif the audio component has been registered successfully,falseotherwise. βirq_handler_list_low_tabβ low priority IRQ handler table. It is an*mtable consisting ofnIRQ sources, andmhandlers per IRQ source. Low priority IRQ handlers are deferred to a workqueue to be processed. Hence, they can sleep. Note that handlers are called in the same order as they were registered (FIFO). π΄irq_handler_list_high_tabβ high priority IRQ handler table. It is an*mtable, same asirq_handler_list_low_tab. However, handlers in this table are not deferred and are called immediately. β‘pflip_paramsβ page flip IRQ parameters, passed to registered handlers when triggered. πvblank_paramsβ vertical blanking IRQ parameters, passed to registered handlers when triggered. πvline0_paramsβ OTG vertical interrupt0 IRQ parameters, passed to registered handlers when triggered. πvupdate_paramsβ vertical update IRQ parameters, passed to registered handlers when triggered. πirq_reg_lockβ serializes the read-modify-writes of the HW interrupt control registers. Several interrupt sources share one register β e.g. the enable and clear bits of bothVSTARTUP(vblank) andVUPDATE_NO_LOCKlive inOTG_GLOBAL_SYNC_STATUS. Therefore, enabling one source must not race with acking another. Held only acrossamdgpu_dm_irq_setandamdgpu_dm_irq_ack. π§¨dmub_trace_paramsβ DMUB trace event IRQ parameters, passed to registered handlers when triggered. π§΅dmub_outbox_paramsβ DMUB Outbox parameters. π€irq_handler_list_table_lockβ synchronizes access to IRQ tables. πirq_wqβ dedicated high-priority unbound workqueue for deferred IRQ work. βοΈvmin_vmax_wqβ dedicated unbound workqueue for deferred vmin/vmax updates. πbacklight_devβ backlight control device. π‘backlight_linkβ link on which to control backlight. πnum_of_edpsβ number of backlight eDPs. π₯οΈbacklight_capsβ capabilities of the backlight device. ποΈfreesync_moduleβ module handling freesync calculations. πhdcp_workqueueβ AMDGPU content protection queue. π‘οΈvblank_control_workqueueβ deferred work for vblank control events. πidle_workqueueβ periodic work for idle events. π€cached_stateβ caches device atomic state for suspend/resume. πΎcached_dc_stateβ cached state of content streams. ποΈcompressorβ frame buffer compression buffer. Seestruct dm_compressor_info. ποΈfw_dmcuβ reference to DMCU firmware. π¦dmcu_fw_versionβ version of the DMCU firmware. π·οΈsoc_bounding_boxβgpu_infoFW provided soc bounding box struct or0if not available in FW. π¦active_vblank_irq_countβ number of currently active vblank irqs. π’secure_display_ctxβ store secure display relevant info. e.g. the ROI information, thework_structto command dmub, etc. πhpd_rx_offload_wqβ work queue to offload works ofhpd_rx_irq. π₯mst_encodersβ fake encoders used for DP MST. πforce_timing_syncβ set via debugfs. When set, indicates that all connected displays will be forced to synchronize. πdisable_hpd_irqβ disables all HPD and HPD RX interrupt handling in the driver whentrue. π«dmcub_trace_event_enβ enable dmcub trace events. π§΅da_listβ DAL fb memory allocation list, for communication with SMU. πdmub_aux_transfer_doneβstruct completionused to indicate when DMUB transfers are done. βdelayed_hpd_wqβ work queue used to delay DMUB HPD work. β³brightnessβ cached backlight values. π‘actual_brightnessβ last successfully applied backlight values. πaux_hpd_discon_quirkβ quirk for hpd discon while aux is on-going. occurred on certain intel platform. π§©edp0_on_dp1_quirkβ quirk for platforms that put edp0 on DP1. π§©dpia_aux_lockβ guards access to DPIA AUX. πbb_from_dmubβ bounding box data read from dmub during early initialization for DCN4+. Data is stored as a byte array that should be casted to the appropriate bb struct. π§±i2c_devres_groupβ devres group for DM i2c adapter lifetime management. π§΅oem_i2cβ OEM i2c bus. πfused_ioβ dmub fused io interface. πhdmi_frl_status_polling_workβ workqueue for200msfrl status polling. β±οΈ
β¨ SEE ALSO β¨
okay so like, that was the whole struct, but the kernel docs are not about to let you leave without the rest of the squad π these are the other kernel-doc structs that live in the same neighborhood, so go say hi:
- Kernel file
./drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.hβ this is THE header, the mothership, the one that has all of these in it π«Ά struct dm_compressor_info(9)struct dm_boot_time_crc_info(9)struct dmub_hpd_work(9)struct vblank_control_work(9)struct idle_workqueue(9)struct vupdate_offload_work(9)struct amdgpu_dm_luminance_data(9)struct amdgpu_dm_backlight_caps(9)struct dal_allocation(9)struct hpd_rx_irq_offload_work_queue(9)struct hpd_rx_irq_offload_work(9)struct amdgpu_hdmi_vsdb_info(9)
like, yes, that's a lot of structs, and yes, you're gonna read them, because they're literally right there in amdgpu_dm.h and they all get their own manpages π completionist behavior only, no cap.
and that's a wrap on struct amdgpu_display_manager(9) bestie π this whole page is straight out of the kernel source tree at ./drivers/gpu/drm/amd/display/... β that path is truncated in the footer but you get the vibe β and it's version-dated October 2026, title line all struct amdg...play_manager(9) because even the headers run out of room sometimes π go read the code, slay, bye ππ¦
π¦ where this page comes from
- nixpkgs unstable: linux-manual 7.3.1
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms