| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131 |
- /* SPDX-License-Identifier: GPL-2.0+ */
- /*
- * Copyright 2024 NXP
- */
- #ifndef __DC_KMS_H__
- #define __DC_KMS_H__
- #include <linux/completion.h>
- #include <drm/drm_crtc.h>
- #include <drm/drm_plane.h>
- #include <drm/drm_vblank.h>
- #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__ */
|