drivers/gpu/drm/amd/display/dc/hwss/dcn10/dcn10_hwseq.c
Source file repositories/reference/linux-study-clean/drivers/gpu/drm/amd/display/dc/hwss/dcn10/dcn10_hwseq.c
File Facts
- System
- Linux kernel
- Corpus path
drivers/gpu/drm/amd/display/dc/hwss/dcn10/dcn10_hwseq.c- Extension
.c- Size
- 133997 bytes
- Lines
- 4207
- 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.
- Uses kernel synchronization; read lock ordering, sleepability, and interrupt context assumptions before translating.
- Allocates kernel memory; connect allocation flags and lifetime to context constraints.
- Defines or uses C structs; map object ownership, embedded links, reference counts, and lock ownership.
Dependency Surface
linux/delay.hdm_services.hbasics/dc_common.hcore_types.hresource.hcustom_float.hdcn10_hwseq.hdcn10/dcn10_hw_sequencer_debug.hdce/dce_hwseq.habm.hdmcu.hdcn10/dcn10_optc.hdcn10/dcn10_dpp.hdcn10/dcn10_mpc.htiming_generator.hopp.hipp.hmpc.hreg_helper.hdcn10/dcn10_hubp.hdcn10/dcn10_hubbub.hdcn10/dcn10_cm_common.hdccg.hclk_mgr.hlink_hwss.hdpcd_defs.hdsc.hdio/dcn10/dcn10_dio.hdce/dmub_psr.hdc_dmub_srv.hdce/dmub_hw_lock_mgr.hdc_trace.h
Detected Declarations
function filesfunction dcn10_wait_for_pipe_update_if_neededfunction linefunction dcn10_lock_all_pipesfunction log_mpc_crcfunction dcn10_log_hubbub_statefunction dcn10_log_hubp_statesfunction dcn10_log_color_statefunction dcn10_log_hw_statefunction dcn10_did_underflow_occurfunction dcn10_enable_power_gating_planefunction dcn10_disable_vgafunction dcn10_dpp_pg_controlfunction dcn10_hubp_pg_controlfunction power_on_plane_resourcesfunction undo_DEGVIDCN10_253_wafunction apply_DEGVIDCN10_253_wafunction dcn10_bios_golden_initfunction false_optc_underflow_wafunction calculate_vready_offset_for_groupfunction dcn10_enable_stream_timingfunction dcn10_reset_back_end_for_pipefunction dcn10_hw_wa_force_recoveryfunction dcn10_verify_allow_pstate_change_highfunction dcn10_plane_atomic_disconnectfunction dcn10_plane_atomic_power_downfunction dcn10_plane_atomic_disablefunction dcn10_disable_planefunction dcn10_init_pipesfunction dcn10_init_hwfunction dcn10_power_down_on_bootfunction dcn10_reset_hw_ctx_wrapfunction patch_address_for_sbs_tb_stereofunction dcn10_update_plane_addrfunction dcn10_set_input_transfer_funcfunction log_tffunction dcn10_set_output_transfer_funcfunction dcn10_pipe_control_lockfunction delay_cursor_until_vupdatefunction dcn10_cursor_lockfunction wait_for_reset_trigger_to_occurfunction reduceSizeAndFractionfunction is_low_refresh_ratefunction get_clock_dividerfunction dcn10_align_pixel_clocksfunction dcn10_enable_vblanks_synchronizationfunction dcn10_enable_timing_synchronizationfunction dcn10_enable_per_frame_crtc_position_reset
Annotated Snippet
if (!s->blank_en) {
DTN_INFO("[%2d]: %5xh %6xh %5d %6d %2xh %2xh %6xh %6d %8d %8d %7d %8xh",
hubp->inst,
s->pixel_format,
s->inuse_addr_hi,
s->viewport_width,
s->viewport_height,
s->rotation_angle,
s->h_mirror_en,
s->sw_mode,
s->dcc_en,
s->blank_en,
s->clock_en,
s->ttu_disable,
s->underflow_status);
DTN_INFO_MICRO_SEC(s->min_ttu_vblank);
DTN_INFO_MICRO_SEC(s->qos_level_low_wm);
DTN_INFO_MICRO_SEC(s->qos_level_high_wm);
DTN_INFO("\n");
}
}
DTN_INFO("\n=======HUBP FL======\n");
static const char * const pLabels[] = {
"inst", "Enabled ", "Done ", "adr_mode ", "width ", "mpc_width ",
"tmz", "xbar_sel_R", "xbar_sel_G", "xbar_sel_B", "adr_hi ",
"adr_low", "REFCYC", "Bias", "Scale", "Mode",
"Format", "prefetch"};
for (i = 0; i < pool->pipe_count; i++) {
struct dcn_hubp_state *s = &(TO_DCN10_HUBP(pool->hubps[i])->state);
struct dcn_fl_regs_st *fl_regs = &s->fl_regs;
struct _vcs_dpi_display_dlg_regs_st *dlg_regs = &s->dlg_attr;
if (!s->blank_en) {
uint32_t values[] = {
pool->hubps[i]->inst,
fl_regs->lut_enable,
fl_regs->lut_done,
fl_regs->lut_addr_mode,
fl_regs->lut_width,
fl_regs->lut_mpc_width,
fl_regs->lut_tmz,
fl_regs->lut_crossbar_sel_r,
fl_regs->lut_crossbar_sel_g,
fl_regs->lut_crossbar_sel_b,
fl_regs->lut_addr_hi,
fl_regs->lut_addr_lo,
fl_regs->refcyc_3dlut_group,
fl_regs->lut_fl_bias,
fl_regs->lut_fl_scale,
fl_regs->lut_fl_mode,
fl_regs->lut_fl_format,
dlg_regs->dst_y_prefetch};
int num_elements = 18;
for (int j = 0; j < num_elements; j++)
DTN_INFO("%s \t %8xh\n", pLabels[j], values[j]);
}
}
DTN_INFO("\n=========RQ========\n");
DTN_INFO("HUBP: drq_exp_m prq_exp_m mrq_exp_m crq_exp_m plane1_ba L:chunk_s min_chu_s meta_ch_s"
" min_m_c_s dpte_gr_s mpte_gr_s swath_hei pte_row_h C:chunk_s min_chu_s meta_ch_s"
" min_m_c_s dpte_gr_s mpte_gr_s swath_hei pte_row_h\n");
for (i = 0; i < pool->pipe_count; i++) {
struct dcn_hubp_state *s = &(TO_DCN10_HUBP(pool->hubps[i])->state);
struct _vcs_dpi_display_rq_regs_st *rq_regs = &s->rq_regs;
if (!s->blank_en)
DTN_INFO("[%2d]: %8xh %8xh %8xh %8xh %8xh %8xh %8xh %8xh %8xh %8xh %8xh %8xh %8xh %8xh %8xh %8xh %8xh %8xh %8xh %8xh %8xh\n",
pool->hubps[i]->inst, rq_regs->drq_expansion_mode, rq_regs->prq_expansion_mode, rq_regs->mrq_expansion_mode,
rq_regs->crq_expansion_mode, rq_regs->plane1_base_address, rq_regs->rq_regs_l.chunk_size,
rq_regs->rq_regs_l.min_chunk_size, rq_regs->rq_regs_l.meta_chunk_size,
rq_regs->rq_regs_l.min_meta_chunk_size, rq_regs->rq_regs_l.dpte_group_size,
rq_regs->rq_regs_l.mpte_group_size, rq_regs->rq_regs_l.swath_height,
rq_regs->rq_regs_l.pte_row_height_linear, rq_regs->rq_regs_c.chunk_size, rq_regs->rq_regs_c.min_chunk_size,
rq_regs->rq_regs_c.meta_chunk_size, rq_regs->rq_regs_c.min_meta_chunk_size,
rq_regs->rq_regs_c.dpte_group_size, rq_regs->rq_regs_c.mpte_group_size,
rq_regs->rq_regs_c.swath_height, rq_regs->rq_regs_c.pte_row_height_linear);
}
DTN_INFO("========DLG========\n");
DTN_INFO("HUBP: rc_hbe dlg_vbe min_d_y_n rc_per_ht rc_x_a_s "
" dst_y_a_s dst_y_pf dst_y_vvb dst_y_rvb dst_y_vfl dst_y_rfl rf_pix_fq"
" vratio_pf vrat_pf_c rc_pg_vbl rc_pg_vbc rc_mc_vbl rc_mc_vbc rc_pg_fll"
" rc_pg_flc rc_mc_fll rc_mc_flc pr_nom_l pr_nom_c rc_pg_nl rc_pg_nc "
" mr_nom_l mr_nom_c rc_mc_nl rc_mc_nc rc_ld_pl rc_ld_pc rc_ld_l "
" rc_ld_c cha_cur0 ofst_cur1 cha_cur1 vr_af_vc0 ddrq_limt x_rt_dlay"
Annotation
- Immediate include surface: `linux/delay.h`, `dm_services.h`, `basics/dc_common.h`, `core_types.h`, `resource.h`, `custom_float.h`, `dcn10_hwseq.h`, `dcn10/dcn10_hw_sequencer_debug.h`.
- Detected declarations: `function files`, `function dcn10_wait_for_pipe_update_if_needed`, `function line`, `function dcn10_lock_all_pipes`, `function log_mpc_crc`, `function dcn10_log_hubbub_state`, `function dcn10_log_hubp_states`, `function dcn10_log_color_state`, `function dcn10_log_hw_state`, `function dcn10_did_underflow_occur`.
- Atlas domain: Driver Families / drivers/gpu.
- Implementation status: source implementation candidate.
- Synchronization appears in or near this file; preserve lock ordering, sleepability, and interrupt-context constraints.
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.