STRUCT DC_CRTC(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

πŸ’… struct dc_crtc(9) β€” the kernel API manual, but make it make sense

okay so this is a page from the Kernel API Manual, all about struct dc_crtc. it lives in ./drivers/gpu/drm/imx/dc and it's dated October 2026, bestie. let's get into it πŸŽ€


✨ NAME ✨

struct dc_crtc β€” the DC-specific drm_crtc. that's it, that's the vibe. it's the display-controller-side glow-up of a regular drm_crtc πŸ‘‘


🌸 SYNOPSIS 🌸

here's the whole struct, verbatim, no cap:

struct dc_crtc {
    struct drm_crtc base;
    struct dc_de *de;
    struct dc_cf *cf_cont;
    struct dc_cf *cf_safe;
    struct dc_ed *ed_cont;
    struct dc_ed *ed_safe;
    struct dc_fg *fg;
    unsigned int irq_dec_framecomplete;
    unsigned int irq_dec_seqcomplete;
    unsigned int irq_dec_shdload;
    unsigned int irq_ed_cont_shdload;
    unsigned int irq_ed_safe_shdload;
    struct completion dec_seqcomplete_done;
    struct completion dec_shdload_done;
    struct completion ed_cont_shdload_done;
    struct completion ed_safe_shdload_done;
    struct drm_pending_vblank_event *event;
    struct dc_crtc_irq irqs[DC_CRTC_IRQS];
};

like, look at her. so many fields. so structured. main character energy fr fr πŸ’–


πŸ¦‹ Members πŸ¦‹

okay let's go field by field, don't skip, every single one matters:

  • base β€” the base drm_crtc structure. the foundation, the roots, the blueprint 🫢
  • de β€” display engine. the whole engine, iconic.
  • cf_cont β€” the content stream constframe.
  • cf_safe β€” the safety stream constframe.
  • ed_cont β€” the content stream extdst.
  • ed_safe β€” the safety stream extdst.
  • fg β€” framegen. yes bestie, framegen πŸ’«
  • irq_dec_framecomplete β€” display engine configuration frame complete interrupt.
  • irq_dec_seqcomplete β€” display engine configuration sequence complete interrupt.
  • irq_dec_shdload β€” display engine configuration shadow load interrupt.
  • irq_ed_cont_shdload β€” content stream extdst shadow load interrupt.
  • irq_ed_safe_shdload β€” safety stream extdst shadow load interrupt.
  • dec_seqcomplete_done β€” display engine configuration sequence completion.
  • dec_shdload_done β€” display engine configuration shadow load completion.
  • ed_cont_shdload_done β€” content stream extdst shadow load completion.
  • ed_safe_shdload_done β€” safety stream extdst shadow load completion.
  • event β€” cached pending vblank event. it's been waiting for this moment ✨
  • irqs β€” the interrupt list. the whole squad, lowkey πŸ”₯

πŸ’œ Description πŸ’œ

so. each display controller contains one content stream and one safety stream. in general, the two streams have the same functionality β€” twins, basically πŸ‘―

one stream is overlaid on the other by fg. and this driver makes a very specific choice: it chooses to generate black constant color from the content stream as background color, builds plane(s) on the content stream by using layerblend(s), and always generates a constant color from the safety stream. the way that's a whole design philosophy 😭

note (and this is the good part): due to the decoupled timing, the safety stream still works to show the constant color properly even when the content stream has completely hung up due to mal-function of this driver. so when everything is on fire, the safety stream is still standing there serving looks. bestie is resilient. πŸ’…

🌈 SEE ALSO 🌈

  • Kernel file ./drivers/gpu/drm/imx/dc/dc-kms.h
  • struct dc_plane(9)

and that's the page! πŸŽ€ source/version & date tea: this one comes from ./drivers/gpu/drm/imx/dc, dated October 2026. go forth and read your structs, babe, you got this πŸ’–βœ¨πŸŒΈ

πŸ“¦ where this page comes from