drivers/gpu/drm/amd/display/dmub/src/dmub_srv.c
Source file repositories/reference/linux-study-clean/drivers/gpu/drm/amd/display/dmub/src/dmub_srv.c
File Facts
- System
- Linux kernel
- Corpus path
drivers/gpu/drm/amd/display/dmub/src/dmub_srv.c- Extension
.c- Size
- 48168 bytes
- Lines
- 1484
- Domain
- Driver Families
- Bucket
- drivers/gpu
- Inferred role
- Driver Families: implementation source
- Status
- source implementation candidate
Why This File Exists
Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.
- Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.
- Defines or uses C structs; map object ownership, embedded links, reference counts, and lock ownership.
Dependency Surface
../dmub_srv.hdmub_dcn20.hdmub_dcn21.hdmub_cmd.hdmub_dcn30.hdmub_dcn301.hdmub_dcn302.hdmub_dcn303.hdmub_dcn31.hdmub_dcn314.hdmub_dcn315.hdmub_dcn316.hdmub_dcn32.hdmub_dcn35.hdmub_dcn351.hdmub_dcn36.hdmub_dcn401.hdmub_dcn42.hdmub_dcn42b.hos_types.h
Detected Declarations
function dmub_alignfunction dmub_flush_buffer_memfunction dmub_get_fw_meta_info_from_blobfunction dmub_get_fw_meta_infofunction dmub_srv_get_fw_meta_info_from_raw_fwfunction dmub_srv_hw_setupfunction dmub_srv_createfunction dmub_srv_destroyfunction dmub_srv_calc_regions_for_memory_typefunction dmub_srv_calc_region_infofunction dmub_srv_calc_mem_infofunction dmub_srv_has_hw_supportfunction dmub_srv_is_hw_initfunction dmub_srv_hw_initfunction dmub_srv_hw_resetfunction dmub_srv_fb_cmd_queuefunction dmub_srv_fb_cmd_executefunction dmub_srv_is_hw_pwr_upfunction dmub_srv_wait_for_hw_pwr_upfunction dmub_srv_wait_for_auto_loadfunction dmub_srv_update_reg_inbox0_statusfunction dmub_srv_wait_for_pendingfunction dmub_srv_wait_for_idlefunction dmub_srv_send_gpint_commandfunction dmub_srv_get_gpint_responsefunction dmub_srv_get_gpint_dataoutfunction dmub_srv_get_fw_boot_statusfunction dmub_srv_get_fw_boot_optionfunction dmub_srv_set_skip_panel_power_sequencefunction dmub_rb_out_trace_buffer_frontfunction dmub_srv_get_outbox0_msgfunction dmub_srv_get_diagnostic_datafunction dmub_srv_should_detectfunction dmub_srv_clear_inbox0_ackfunction dmub_srv_wait_for_inbox0_ackfunction dmub_srv_send_inbox0_cmdfunction dmub_srv_subvp_save_surf_addrfunction dmub_srv_set_power_statefunction dmub_srv_reg_cmd_executefunction dmub_srv_cmd_get_responsefunction dmub_srv_sync_reg_inbox0function dmub_srv_sync_inbox1function dmub_srv_sync_inboxesfunction dmub_srv_wait_for_inbox_freefunction dmub_srv_update_inbox_statusfunction dmub_srv_get_preos_info
Annotated Snippet
if (fw_info) {
memcpy(fw_info_out, fw_info, sizeof(*fw_info));
return DMUB_STATUS_OK;
}
params->inst_const_size = inst_const_size_temp;
}
/* Try 256-byte psp footer size */
params->inst_const_size -= PSP_FOOTER_BYTES_256;
fw_info = dmub_get_fw_meta_info(params);
if (fw_info) {
memcpy(fw_info_out, fw_info, sizeof(*fw_info));
return DMUB_STATUS_OK;
}
/* Try 512-byte psp footer size - final attempt */
params->inst_const_size -= PSP_FOOTER_BYTES_256; // 256 bytes already subtracted, subtract 256 again
fw_info = dmub_get_fw_meta_info(params);
if (fw_info) {
memcpy(fw_info_out, fw_info, sizeof(*fw_info));
return DMUB_STATUS_OK;
}
/* Restore original inst_const_size and subtract default PSP footer size - default behaviour */
params->inst_const_size = inst_const_size_temp - PSP_FOOTER_BYTES_256;
return DMUB_STATUS_INVALID;
}
static bool dmub_srv_hw_setup(struct dmub_srv *dmub, enum dmub_asic asic)
{
struct dmub_srv_hw_funcs *funcs = &dmub->hw_funcs;
/* default to specifying now inbox type */
enum dmub_inbox_cmd_interface_type default_inbox_type = DMUB_CMD_INTERFACE_DEFAULT;
switch (asic) {
case DMUB_ASIC_DCN20:
case DMUB_ASIC_DCN21:
case DMUB_ASIC_DCN30:
case DMUB_ASIC_DCN301:
case DMUB_ASIC_DCN302:
case DMUB_ASIC_DCN303:
dmub->regs = &dmub_srv_dcn20_regs;
funcs->reset = dmub_dcn20_reset;
funcs->reset_release = dmub_dcn20_reset_release;
funcs->backdoor_load = dmub_dcn20_backdoor_load;
funcs->setup_windows = dmub_dcn20_setup_windows;
funcs->setup_mailbox = dmub_dcn20_setup_mailbox;
funcs->get_inbox1_wptr = dmub_dcn20_get_inbox1_wptr;
funcs->get_inbox1_rptr = dmub_dcn20_get_inbox1_rptr;
funcs->set_inbox1_wptr = dmub_dcn20_set_inbox1_wptr;
funcs->is_supported = dmub_dcn20_is_supported;
funcs->is_hw_init = dmub_dcn20_is_hw_init;
funcs->set_gpint = dmub_dcn20_set_gpint;
funcs->is_gpint_acked = dmub_dcn20_is_gpint_acked;
funcs->get_gpint_response = dmub_dcn20_get_gpint_response;
funcs->get_fw_status = dmub_dcn20_get_fw_boot_status;
funcs->enable_dmub_boot_options = dmub_dcn20_enable_dmub_boot_options;
funcs->skip_dmub_panel_power_sequence = dmub_dcn20_skip_dmub_panel_power_sequence;
funcs->get_current_time = dmub_dcn20_get_current_time;
// Out mailbox register access functions for RN and above
funcs->setup_out_mailbox = dmub_dcn20_setup_out_mailbox;
funcs->get_outbox1_wptr = dmub_dcn20_get_outbox1_wptr;
funcs->set_outbox1_rptr = dmub_dcn20_set_outbox1_rptr;
//outbox0 call stacks
funcs->setup_outbox0 = dmub_dcn20_setup_outbox0;
funcs->get_outbox0_wptr = dmub_dcn20_get_outbox0_wptr;
funcs->set_outbox0_rptr = dmub_dcn20_set_outbox0_rptr;
funcs->get_diagnostic_data = dmub_dcn20_get_diagnostic_data;
if (asic == DMUB_ASIC_DCN21)
dmub->regs = &dmub_srv_dcn21_regs;
if (asic == DMUB_ASIC_DCN30) {
dmub->regs = &dmub_srv_dcn30_regs;
funcs->backdoor_load = dmub_dcn30_backdoor_load;
funcs->setup_windows = dmub_dcn30_setup_windows;
}
if (asic == DMUB_ASIC_DCN301) {
dmub->regs = &dmub_srv_dcn301_regs;
funcs->backdoor_load = dmub_dcn30_backdoor_load;
funcs->setup_windows = dmub_dcn30_setup_windows;
}
Annotation
- Immediate include surface: `../dmub_srv.h`, `dmub_dcn20.h`, `dmub_dcn21.h`, `dmub_cmd.h`, `dmub_dcn30.h`, `dmub_dcn301.h`, `dmub_dcn302.h`, `dmub_dcn303.h`.
- Detected declarations: `function dmub_align`, `function dmub_flush_buffer_mem`, `function dmub_get_fw_meta_info_from_blob`, `function dmub_get_fw_meta_info`, `function dmub_srv_get_fw_meta_info_from_raw_fw`, `function dmub_srv_hw_setup`, `function dmub_srv_create`, `function dmub_srv_destroy`, `function dmub_srv_calc_regions_for_memory_type`, `function dmub_srv_calc_region_info`.
- Atlas domain: Driver Families / drivers/gpu.
- Implementation status: source implementation candidate.
Implementation Notes
- This generated page is the file-by-file coverage layer; curated subsystem chapters should link here when they synthesize a multi-file control flow.
- Core OS pages should be promoted from atlas-only to deep-reviewed when they explain data structures, invariants, locking, lifecycle, and C implementation snippets.
- Driver-family pages are intentionally pattern-oriented unless they are part of the selected PCIe/NVMe representative device path.