/* SPDX-License-Identifier: GPL-2.0+ */ /* * Copyright 2024 NXP */ #ifndef __DC_KMS_H__ #define __DC_KMS_H__ #include #include #include #include #include "dc-de.h" #include "dc-fu.h" #include "dc-pe.h" #define DC_CRTC_IRQS 5 struct dc_crtc_irq { struct dc_crtc *dc_crtc; unsigned int irq; }; /** * struct dc_crtc - DC specific drm_crtc * * Each display controller contains one content stream and one safety stream. * In general, the two streams have the same functionality. One stream is * overlaid on the other by @fg. This driver chooses to generate black constant * color from the content stream as background color, build plane(s) on the * content stream by using layerblend(s) and always generate a constant color * from the safety stream. Note that 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. */ struct dc_crtc { /** @base: base drm_crtc structure */ struct drm_crtc base; /** @de: display engine */ struct dc_de *de; /** @cf_cont: content stream constframe */ struct dc_cf *cf_cont; /** @cf_safe: safety stream constframe */ struct dc_cf *cf_safe; /** @ed_cont: content stream extdst */ struct dc_ed *ed_cont; /** @ed_safe: safety stream extdst */ struct dc_ed *ed_safe; /** @fg: framegen */ struct dc_fg *fg; /** * @irq_dec_framecomplete: * * display engine configuration frame complete interrupt */ unsigned int irq_dec_framecomplete; /** * @irq_dec_seqcomplete: * * display engine configuration sequence complete interrupt */ unsigned int irq_dec_seqcomplete; /** * @irq_dec_shdload: * * display engine configuration shadow load interrupt */ unsigned int irq_dec_shdload; /** * @irq_ed_cont_shdload: * * content stream extdst shadow load interrupt */ unsigned int irq_ed_cont_shdload; /** * @irq_ed_safe_shdload: * * safety stream extdst shadow load interrupt */ unsigned int irq_ed_safe_shdload; /** * @dec_seqcomplete_done: * * display engine configuration sequence completion */ struct completion dec_seqcomplete_done; /** * @dec_shdload_done: * * display engine configuration shadow load completion */ struct completion dec_shdload_done; /** * @ed_cont_shdload_done: * * content stream extdst shadow load completion */ struct completion ed_cont_shdload_done; /** * @ed_safe_shdload_done: * * safety stream extdst shadow load completion */ struct completion ed_safe_shdload_done; /** @event: cached pending vblank event */ struct drm_pending_vblank_event *event; /** @irqs: interrupt list */ struct dc_crtc_irq irqs[DC_CRTC_IRQS]; }; /** * struct dc_plane - DC specific drm_plane * * Build a plane on content stream with a fetchunit and a layerblend. */ struct dc_plane { /** @base: base drm_plane structure */ struct drm_plane base; /** @fu: fetchunit */ struct dc_fu *fu; /** @cf: content stream constframe */ struct dc_cf *cf; /** @lb: layerblend */ struct dc_lb *lb; /** @ed: content stream extdst */ struct dc_ed *ed; }; #endif /* __DC_KMS_H__ */