drivers/gpu/drm/amd/display/dc/dml2_0/dml2_translation_helper.c
Source file repositories/reference/linux-study-clean/drivers/gpu/drm/amd/display/dc/dml2_0/dml2_translation_helper.c
File Facts
- System
- Linux kernel
- Corpus path
drivers/gpu/drm/amd/display/dc/dml2_0/dml2_translation_helper.c- Extension
.c- Size
- 69358 bytes
- Lines
- 1539
- 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
display_mode_core.hdml2_internal_types.hdml2_translation_helper.h
Detected Declarations
function filesfunction dml2_init_socbb_paramsfunction dml2_init_soc_statesfunction dml2_translate_ip_paramsfunction dml2_translate_socbb_paramsfunction dml2_translate_soc_statesfunction populate_dml_timing_cfg_from_stream_statefunction populate_dml_output_cfg_from_stream_statefunction populate_dummy_dml_surface_cfgfunction populate_dml_surface_cfg_from_plane_statefunction populate_dummy_dml_plane_cfgfunction populate_dml_plane_cfg_from_plane_statefunction map_stream_to_dml_display_cfgfunction get_plane_idfunction map_plane_to_dml_display_cfgfunction dml2_populate_pipe_to_plane_index_mappingfunction populate_dml_writeback_cfg_from_stream_statefunction dml2_map_hpo_stream_encoder_to_hpo_link_encoder_indexfunction map_dc_state_into_dml_display_cfgfunction dml2_update_pipe_ctx_dchub_regs
Annotated Snippet
if (dml2->config.bbox_overrides.sr_exit_latency_us) {
p->in_states->state_array[i].sr_exit_time_us =
dml2->config.bbox_overrides.sr_exit_latency_us;
}
if (dml2->config.bbox_overrides.sr_enter_plus_exit_latency_us) {
p->in_states->state_array[i].sr_enter_plus_exit_time_us =
dml2->config.bbox_overrides.sr_enter_plus_exit_latency_us;
}
if (dml2->config.bbox_overrides.sr_exit_z8_time_us) {
p->in_states->state_array[i].sr_exit_z8_time_us =
dml2->config.bbox_overrides.sr_exit_z8_time_us;
}
if (dml2->config.bbox_overrides.sr_enter_plus_exit_z8_time_us) {
p->in_states->state_array[i].sr_enter_plus_exit_z8_time_us =
dml2->config.bbox_overrides.sr_enter_plus_exit_z8_time_us;
}
if (dml2->config.bbox_overrides.urgent_latency_us) {
p->in_states->state_array[i].urgent_latency_pixel_data_only_us =
dml2->config.bbox_overrides.urgent_latency_us;
}
if (dml2->config.bbox_overrides.dram_clock_change_latency_us) {
p->in_states->state_array[i].dram_clock_change_latency_us =
dml2->config.bbox_overrides.dram_clock_change_latency_us;
}
if (dml2->config.bbox_overrides.fclk_change_latency_us) {
p->in_states->state_array[i].fclk_change_latency_us =
dml2->config.bbox_overrides.fclk_change_latency_us;
}
}
/* DCFCLK stas values are project specific */
if ((dml2->v20.dml_core_ctx.project == dml_project_dcn32) ||
(dml2->v20.dml_core_ctx.project == dml_project_dcn321)) {
p->dcfclk_stas_mhz[0] = (int)p->in_states->state_array[0].dcfclk_mhz;
p->dcfclk_stas_mhz[1] = 615;
p->dcfclk_stas_mhz[2] = 906;
p->dcfclk_stas_mhz[3] = 1324;
p->dcfclk_stas_mhz[4] = (int)p->in_states->state_array[1].dcfclk_mhz;
} else if (dml2->v20.dml_core_ctx.project != dml_project_dcn35 &&
dml2->v20.dml_core_ctx.project != dml_project_dcn36 &&
dml2->v20.dml_core_ctx.project != dml_project_dcn351) {
p->dcfclk_stas_mhz[0] = 300;
p->dcfclk_stas_mhz[1] = 615;
p->dcfclk_stas_mhz[2] = 906;
p->dcfclk_stas_mhz[3] = 1324;
p->dcfclk_stas_mhz[4] = 1500;
}
/* Copy clocks tables entries, if available */
if (dml2->config.bbox_overrides.clks_table.num_states) {
p->in_states->num_states = dml2->config.bbox_overrides.clks_table.num_states;
for (i = 0; i < dml2->config.bbox_overrides.clks_table.num_entries_per_clk.num_dcfclk_levels; i++) {
p->in_states->state_array[i].dcfclk_mhz = dml2->config.bbox_overrides.clks_table.clk_entries[i].dcfclk_mhz;
}
p->dcfclk_stas_mhz[0] = dml2->config.bbox_overrides.clks_table.clk_entries[0].dcfclk_mhz;
if (i > 1)
p->dcfclk_stas_mhz[4] = dml2->config.bbox_overrides.clks_table.clk_entries[i-1].dcfclk_mhz;
for (i = 0; i < dml2->config.bbox_overrides.clks_table.num_entries_per_clk.num_fclk_levels; i++) {
p->in_states->state_array[i].fabricclk_mhz =
dml2->config.bbox_overrides.clks_table.clk_entries[i].fclk_mhz;
}
for (i = 0; i < dml2->config.bbox_overrides.clks_table.num_entries_per_clk.num_memclk_levels; i++) {
p->in_states->state_array[i].dram_speed_mts =
dml2->config.bbox_overrides.clks_table.clk_entries[i].memclk_mhz * transactions_per_mem_clock;
}
for (i = 0; i < dml2->config.bbox_overrides.clks_table.num_entries_per_clk.num_socclk_levels; i++) {
p->in_states->state_array[i].socclk_mhz =
dml2->config.bbox_overrides.clks_table.clk_entries[i].socclk_mhz;
}
for (i = 0; i < dml2->config.bbox_overrides.clks_table.num_entries_per_clk.num_dtbclk_levels; i++) {
if (dml2->config.bbox_overrides.clks_table.clk_entries[i].dtbclk_mhz > 0)
p->in_states->state_array[i].dtbclk_mhz =
dml2->config.bbox_overrides.clks_table.clk_entries[i].dtbclk_mhz;
}
for (i = 0; i < dml2->config.bbox_overrides.clks_table.num_entries_per_clk.num_dispclk_levels; i++) {
p->in_states->state_array[i].dispclk_mhz =
dml2->config.bbox_overrides.clks_table.clk_entries[i].dispclk_mhz;
p->in_states->state_array[i].dppclk_mhz =
dml2->config.bbox_overrides.clks_table.clk_entries[i].dppclk_mhz;
Annotation
- Immediate include surface: `display_mode_core.h`, `dml2_internal_types.h`, `dml2_translation_helper.h`.
- Detected declarations: `function files`, `function dml2_init_socbb_params`, `function dml2_init_soc_states`, `function dml2_translate_ip_params`, `function dml2_translate_socbb_params`, `function dml2_translate_soc_states`, `function populate_dml_timing_cfg_from_stream_state`, `function populate_dml_output_cfg_from_stream_state`, `function populate_dummy_dml_surface_cfg`, `function populate_dml_surface_cfg_from_plane_state`.
- 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.