dcn32_set_p...tream_timing(9)
β¨ NAME β¨
dcn32_set_phantom_stream_timing β bestie, this is the one that sets the timing params for the phantom stream π» like it's giving main-character-but-invisible energy, no cap
(also hi, you're reading a page from the Kernel API Manual, welcome to the group chat π )
π¦ SYNOPSIS π¦
void dcn32_set_phantom_stream_timing (struct dc *dc , struct dc_state
*context , struct pipe_ctx *ref_pipe , struct dc_stream_state
*phantom_stream , display_e2e_pipe_params_st *pipes , unsigned int
pipe_cnt , unsigned int dc_pipe_idx );
literally that's the whole signature, copy it exactly, don't come for me about the spacing, that's how it is π«Ά
π ARGUMENTS π
okay so here's the cast of characters, and yes every single one of them matters:
dcβ the current dc state, like the present-tense vibecontextβ the new dc state, the glow-up versionref_pipeβ the main pipe for the phantom stream, i.e. the reference point, the blueprint, the blueprint-iest π§phantom_streamβ target phantom stream state (the ghostie we're setting up)pipesβ DML pipe paramspipe_cntβ number of DML pipes, keep count bestiedc_pipe_idxβ DC pipe index for the main pipe (i.e.ref_pipe), yes they wrote "i.e." so I'm keeping the "i.e."
π₯ DESCRIPTION π₯
So what does this actually do? It sets the timing params of the phantom stream based on the calculated output from DML. π«
The way it works: first it gets the DML pipe index using the DC pipe index (a whole little translation moment, iykyk), then it calls into DML (get_subviewport_lines_needed_in_mall) to get the number of lines required for SubVP MCLK switching β and then it assigns that to the phantom stream accordingly. Iconic, honestly.
Two things you need to hold onto, and I'm saying them exactly because they're load-bearing:
- The number of SubVP lines calculated in DML does not take into account FW processing delays and required pstate allow width, so we must include that separately. β οΈ (not me reminding you twice)
- Set phantom backporch =
vstartupof main pipe
that second bullet is not a suggestion bestie, that's the assignment π
π SEE ALSO π
go read these next, the whole friend group:
- Kernel file
./drivers/gpu/drm/amd/display/dc/dml/dcn32/dcn32_fpu.c dcn32_helper_populate_phantom_dlg_params(9)dcn32_get_num_free_pipes(9)dcn32_assign_subvp_pipe(9)dcn32_enough_pipes_for_subvp(9)subvp_subvp_schedulable(9)subvp_drr_schedulable(9)subvp_vblank_schedulable(9)subvp_subvp_admissable(9)subvp_validate_static_schedulability(9)dcn32_allow_subvp_high_refresh_rate(9)dcn32_determine_max_vratio_prefetch(9)dcn32_assign_fpo_vactive_candidate(9)dcn32_find_vactive_pipe(9)
and that's the page bestie, you ate that π
cute little sign-off before you go: this one comes from ./drivers/gpu/drm/amd/display/..., dated October 2026, and the footer names it dcn32_set_p...tream_timing(9) β yeah the title got truncated in the footer, she's a little mysterious like that π slay π
π¦ 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