dce_v8_0_pick_pll(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

πŸ’… dce_v8_0_pick_pll(9) β€” the kernel API manual, bestie edition πŸŽ€

okay so this is a page from the Kernel API Manual (yes, the actual kernel, we're fancy now) and it's all about one little function that's lowkey the matchmaker of your display pipeline. let's get into it πŸ’–


✨ NAME ✨

dce_v8_0_pick_pll β€” allocate a PPLL for use by the crtc. that's it, that's the whole job. it finds a PLL and hands it over. king behavior honestly πŸ‘‘


🌸 SYNOPSIS 🌸

u32 dce_v8_0_pick_pll (struct drm_crtc *crtc );

one arg, returns a u32. simple. clean. no notes. ✨


πŸ¦‹ ARGUMENTS πŸ¦‹

  • crtc β€” the drm crtc. that's the whole description, bestie, the original said "drm crtc" and we're not gonna invent lore that isn't there πŸ™ˆ this is the crtc you're trying to find a PLL for.

πŸ’œ DESCRIPTION πŸ’œ

so here's the tea β˜• β€” this function returns the PPLL (that's the Pixel PLL, for anyone keeping score) that the crtc should use. and the rules for who gets which PLL are genuinely kind of interesting:

  • for DP monitors, a single PPLL can be used for all DP crtcs/encoders. one PLL, many friends. sharing is caring 🫢
  • for non-DP monitors, a dedicated PPLL must be used. no sharing, no borrowing, this one's yours and yours alone πŸ’…

now for the edge cases, and listen up because these matter:

  • if a particular board has an external DP PLL, return ATOM_PPLL_INVALID β€” that skips PLL programming entirely, because hello? there's literally no need to program the PLL itself when the board already handles it 😌
  • if we are not able to allocate a PLL, return ATOM_PPLL_INVALID too β€” this skips PLL programming so we don't mess up an existing monitor. like, do no harm, y'know? 🫢
ngl the ATOM_PPLL_INVALID return shows up in two very different situations β€” external DP PLL and allocation failure β€” so don't assume "invalid" means "something broke". sometimes it means "not needed", sometimes it means "couldn't get one", and both times the answer is: skip the programming. 😭

πŸ”₯ Asic specific PLL information

the deets change depending on your chip, so here's the breakdown:

⭐ DCE 8.x KB/KV

  • PPLL1, PPLL2 are available for all UNIPHY (both DP and non-DP) CI
  • PPLL0, PPLL1, PPLL2 are available for all UNIPHY (both DP and non-DP) and DAC

so on KB/KV you've got the full trio PPLL0, PPLL1, PPLL2 doing UNIPHY duty and DAC duty, while the CI situation is just PPLL1 and PPLL2 on UNIPHY. iconic lineup honestly 🌈


πŸ‘‘ SEE ALSO πŸ‘‘

the source lives here, in the kernel file ./drivers/gpu/drm/amd/amdgpu/dce_v8_0.c β€” go read it, it's giving main character energy 🧚

and here's the whole friend group, fr fr:


and that's the page!! πŸŽ€ this little beauty comes to you from ./drivers/gpu/drm/amd/amdgpu, dated October 2026 β€” go forth and pick your PLLs responsibly, bestie πŸ’–βœ¨

πŸ“¦ where this page comes from