]> Git Repo - linux.git/blob - drivers/gpu/drm/amd/display/dc/inc/hw/mpc.h
Linux 6.14-rc3
[linux.git] / drivers / gpu / drm / amd / display / dc / inc / hw / mpc.h
1 /*
2  * Copyright 2012-15 Advanced Micro Devices, Inc.
3  *
4  * Permission is hereby granted, free of charge, to any person obtaining a
5  * copy of this software and associated documentation files (the "Software"),
6  * to deal in the Software without restriction, including without limitation
7  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8  * and/or sell copies of the Software, and to permit persons to whom the
9  * Software is furnished to do so, subject to the following conditions:
10  *
11  * The above copyright notice and this permission notice shall be included in
12  * all copies or substantial portions of the Software.
13  *
14  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
17  * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
18  * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
19  * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
20  * OTHER DEALINGS IN THE SOFTWARE.
21  *
22  * Authors: AMD
23  *
24  */
25
26 /**
27  * DOC: overview
28  *
29  * Multiple Pipe/Plane Combiner (MPC) is a component in the hardware pipeline
30  * that performs blending of multiple planes, using global and per-pixel alpha.
31  * It also performs post-blending color correction operations according to the
32  * hardware capabilities, such as color transformation matrix and gamma 1D and
33  * 3D LUT.
34  *
35  * MPC receives output from all DPP pipes and combines them to multiple outputs
36  * supporting "M MPC inputs -> N MPC outputs" flexible composition
37  * architecture. It features:
38  *
39  * - Programmable blending structure to allow software controlled blending and
40  *   cascading;
41  * - Programmable window location of each DPP in active region of display;
42  * - Combining multiple DPP pipes in one active region when a single DPP pipe
43  *   cannot process very large surface;
44  * - Combining multiple DPP from different SLS with blending;
45  * - Stereo formats from single DPP in top-bottom or side-by-side modes;
46  * - Stereo formats from 2 DPPs;
47  * - Alpha blending of multiple layers from different DPP pipes;
48  * - Programmable background color;
49  */
50
51 #ifndef __DC_MPCC_H__
52 #define __DC_MPCC_H__
53
54 #include "dc_hw_types.h"
55 #include "hw_shared.h"
56 #include "transform.h"
57
58 #define MAX_MPCC 6
59 #define MAX_OPP 6
60
61 #define MAX_DWB         2
62
63 enum mpc_output_csc_mode {
64         MPC_OUTPUT_CSC_DISABLE = 0,
65         MPC_OUTPUT_CSC_COEF_A,
66         MPC_OUTPUT_CSC_COEF_B
67 };
68
69
70 enum mpcc_blend_mode {
71         MPCC_BLEND_MODE_BYPASS,
72         MPCC_BLEND_MODE_TOP_LAYER_PASSTHROUGH,
73         MPCC_BLEND_MODE_TOP_LAYER_ONLY,
74         MPCC_BLEND_MODE_TOP_BOT_BLENDING
75 };
76
77 /**
78  * enum mpcc_alpha_blend_mode - define the alpha blend mode regarding pixel
79  * alpha and plane alpha values
80  */
81 enum mpcc_alpha_blend_mode {
82         /**
83          * @MPCC_ALPHA_BLEND_MODE_PER_PIXEL_ALPHA: per pixel alpha using DPP
84          * alpha value
85          */
86         MPCC_ALPHA_BLEND_MODE_PER_PIXEL_ALPHA,
87         /**
88          * @MPCC_ALPHA_BLEND_MODE_PER_PIXEL_ALPHA_COMBINED_GLOBAL_GAIN: per
89          * pixel alpha using DPP alpha value multiplied by a global gain (plane
90          * alpha)
91          */
92         MPCC_ALPHA_BLEND_MODE_PER_PIXEL_ALPHA_COMBINED_GLOBAL_GAIN,
93         /**
94          * @MPCC_ALPHA_BLEND_MODE_GLOBAL_ALPHA: global alpha value, ignores
95          * pixel alpha and consider only plane alpha
96          */
97         MPCC_ALPHA_BLEND_MODE_GLOBAL_ALPHA
98 };
99
100 enum mpcc_movable_cm_location {
101         MPCC_MOVABLE_CM_LOCATION_BEFORE,
102         MPCC_MOVABLE_CM_LOCATION_AFTER,
103 };
104
105 enum MCM_LUT_XABLE {
106         MCM_LUT_DISABLE,
107         MCM_LUT_DISABLED = MCM_LUT_DISABLE,
108         MCM_LUT_ENABLE,
109         MCM_LUT_ENABLED = MCM_LUT_ENABLE,
110 };
111
112 enum MCM_LUT_ID {
113         MCM_LUT_3DLUT,
114         MCM_LUT_1DLUT,
115         MCM_LUT_SHAPER
116 };
117
118 union mcm_lut_params {
119         const struct pwl_params *pwl;
120         const struct tetrahedral_params *lut3d;
121 };
122
123 /**
124  * struct mpcc_blnd_cfg - MPCC blending configuration
125  */
126 struct mpcc_blnd_cfg {
127         /**
128          * @black_color: background color.
129          */
130         struct tg_color black_color;
131
132         /**
133          * @alpha_mode: alpha blend mode (MPCC_ALPHA_BLND_MODE).
134          */
135         enum mpcc_alpha_blend_mode alpha_mode;
136
137         /**
138          * @pre_multiplied_alpha:
139          * Whether pixel color values were pre-multiplied by the alpha channel
140          * (MPCC_ALPHA_MULTIPLIED_MODE).
141          */
142         bool pre_multiplied_alpha;
143
144         /**
145          * @global_gain: Used when blend mode considers both pixel alpha and plane.
146          */
147         int global_gain;
148
149         /**
150          * @global_alpha: Plane alpha value.
151          */
152         int global_alpha;
153
154         /**
155          * @overlap_only: Whether overlapping of different planes is allowed.
156          */
157         bool overlap_only;
158
159         /* MPCC top/bottom gain settings */
160
161         /**
162          * @bottom_gain_mode: Blend mode for bottom gain setting.
163          */
164         int bottom_gain_mode;
165
166         /**
167          * @background_color_bpc: Background color for bpc.
168          */
169         int background_color_bpc;
170
171         /**
172          * @top_gain: Top gain setting.
173          */
174         int top_gain;
175
176         /**
177          * @bottom_inside_gain: Blend mode for bottom inside.
178          */
179         int bottom_inside_gain;
180
181         /**
182          * @bottom_outside_gain: Blend mode for bottom outside.
183          */
184         int bottom_outside_gain;
185 };
186
187 struct mpc_grph_gamut_adjustment {
188         struct fixed31_32 temperature_matrix[CSC_TEMPERATURE_MATRIX_SIZE];
189         enum graphics_gamut_adjust_type gamut_adjust_type;
190         enum mpcc_gamut_remap_id mpcc_gamut_remap_block_id;
191 };
192
193 struct mpcc_sm_cfg {
194         bool enable;
195         /* 0-single plane,2-row subsampling,4-column subsampling,6-checkboard subsampling */
196         int sm_mode;
197         /* 0- disable frame alternate, 1- enable frame alternate */
198         bool frame_alt;
199         /* 0- disable field alternate, 1- enable field alternate */
200         bool field_alt;
201         /* 0-no force,2-force frame polarity from top,3-force frame polarity from bottom */
202         int force_next_frame_porlarity;
203         /* 0-no force,2-force field polarity from top,3-force field polarity from bottom */
204         int force_next_field_polarity;
205 };
206
207 struct mpc_denorm_clamp {
208         int clamp_max_r_cr;
209         int clamp_min_r_cr;
210         int clamp_max_g_y;
211         int clamp_min_g_y;
212         int clamp_max_b_cb;
213         int clamp_min_b_cb;
214 };
215
216 struct mpc_dwb_flow_control {
217         int flow_ctrl_mode;
218         int flow_ctrl_cnt0;
219         int flow_ctrl_cnt1;
220 };
221
222 /**
223  * struct mpcc - MPCC connection and blending configuration for a single MPCC instance.
224  *
225  * This struct is used as a node in an MPC tree.
226  */
227 struct mpcc {
228         /**
229          * @mpcc_id: MPCC physical instance.
230          */
231         int mpcc_id;
232
233         /**
234          * @dpp_id: DPP input to this MPCC
235          */
236         int dpp_id;
237
238         /**
239          * @mpcc_bot: Pointer to bottom layer MPCC. NULL when not connected.
240          */
241         struct mpcc *mpcc_bot;
242
243         /**
244          * @blnd_cfg: The blending configuration for this MPCC.
245          */
246         struct mpcc_blnd_cfg blnd_cfg;
247
248         /**
249          * @sm_cfg: stereo mix setting for this MPCC
250          */
251         struct mpcc_sm_cfg sm_cfg;
252
253         /**
254          * @shared_bottom:
255          *
256          * If MPCC output to both OPP and DWB endpoints, true. Otherwise, false.
257          */
258         bool shared_bottom;
259 };
260
261 /**
262  * struct mpc_tree - MPC tree represents all MPCC connections for a pipe.
263  *
264  *
265  */
266 struct mpc_tree {
267         /**
268          * @opp_id: The OPP instance that owns this MPC tree.
269          */
270         int opp_id;
271
272         /**
273          * @opp_list: the top MPCC layer of the MPC tree that outputs to OPP endpoint
274          */
275         struct mpcc *opp_list;
276 };
277
278 struct mpc {
279         const struct mpc_funcs *funcs;
280         struct dc_context *ctx;
281
282         struct mpcc mpcc_array[MAX_MPCC];
283         struct pwl_params blender_params;
284         bool cm_bypass_mode;
285 };
286
287 struct mpcc_state {
288         uint32_t opp_id;
289         uint32_t dpp_id;
290         uint32_t bot_mpcc_id;
291         uint32_t mode;
292         uint32_t alpha_mode;
293         uint32_t pre_multiplied_alpha;
294         uint32_t overlap_only;
295         uint32_t idle;
296         uint32_t busy;
297         uint32_t shaper_lut_mode;
298         uint32_t lut3d_mode;
299         uint32_t lut3d_bit_depth;
300         uint32_t lut3d_size;
301         uint32_t rgam_mode;
302         uint32_t rgam_lut;
303         struct mpc_grph_gamut_adjustment gamut_remap;
304 };
305
306 /**
307  * struct mpc_funcs - funcs
308  */
309 struct mpc_funcs {
310         /**
311         * @read_mpcc_state:
312         *
313         * Read register content from given MPCC physical instance.
314         *
315         * Parameters:
316         *
317         * - [in/out] mpc - MPC context
318         * - [in] mpcc_instance - MPC context instance
319         * - [in] mpcc_state - MPC context state
320         *
321         * Return:
322         *
323         * void
324         */
325         void (*read_mpcc_state)(
326                         struct mpc *mpc,
327                         int mpcc_inst,
328                         struct mpcc_state *s);
329
330         /**
331         * @insert_plane:
332         *
333         * Insert DPP into MPC tree based on specified blending position.
334         * Only used for planes that are part of blending chain for OPP output
335         *
336         * Parameters:
337         *
338         * - [in/out] mpc  - MPC context.
339         * - [in/out] tree - MPC tree structure that plane will be added to.
340         * - [in] blnd_cfg - MPCC blending configuration for the new blending layer.
341         * - [in] sm_cfg   - MPCC stereo mix configuration for the new blending layer.
342         *                   stereo mix must disable for the very bottom layer of the tree config.
343         * - [in] insert_above_mpcc - Insert new plane above this MPCC.
344         *                          If NULL, insert as bottom plane.
345         * - [in] dpp_id  - DPP instance for the plane to be added.
346         * - [in] mpcc_id - The MPCC physical instance to use for blending.
347         *
348         * Return:
349         *
350         * struct mpcc* - MPCC that was added.
351         */
352         struct mpcc* (*insert_plane)(
353                         struct mpc *mpc,
354                         struct mpc_tree *tree,
355                         struct mpcc_blnd_cfg *blnd_cfg,
356                         struct mpcc_sm_cfg *sm_cfg,
357                         struct mpcc *insert_above_mpcc,
358                         int dpp_id,
359                         int mpcc_id);
360
361         /**
362         * @remove_mpcc:
363         *
364         * Remove a specified MPCC from the MPC tree.
365         *
366         * Parameters:
367         *
368         * - [in/out] mpc   - MPC context.
369         * - [in/out] tree  - MPC tree structure that plane will be removed from.
370         * - [in/out] mpcc  - MPCC to be removed from tree.
371         *
372         * Return:
373         *
374         * void
375         */
376         void (*remove_mpcc)(
377                         struct mpc *mpc,
378                         struct mpc_tree *tree,
379                         struct mpcc *mpcc);
380
381         /**
382         * @mpc_init:
383         *
384         * Reset the MPCC HW status by disconnecting all muxes.
385         *
386         * Parameters:
387         *
388         * - [in/out] mpc - MPC context.
389         *
390         * Return:
391         *
392         * void
393         */
394         void (*mpc_init)(struct mpc *mpc);
395
396         /**
397         * @mpc_init_single_inst:
398         *
399         * Initialize given MPCC physical instance.
400         *
401         * Parameters:
402         * - [in/out] mpc - MPC context.
403         * - [in] mpcc_id - The MPCC physical instance to be initialized.
404         */
405         void (*mpc_init_single_inst)(
406                         struct mpc *mpc,
407                         unsigned int mpcc_id);
408
409         /**
410         * @update_blending:
411         *
412         * Update the blending configuration for a specified MPCC.
413         *
414         * Parameters:
415         *
416         * - [in/out] mpc - MPC context.
417         * - [in] blnd_cfg - MPCC blending configuration.
418         * - [in] mpcc_id  - The MPCC physical instance.
419         *
420         * Return:
421         *
422         * void
423         */
424         void (*update_blending)(
425                 struct mpc *mpc,
426                 struct mpcc_blnd_cfg *blnd_cfg,
427                 int mpcc_id);
428
429         /**
430         * @cursor_lock:
431         *
432         * Lock cursor updates for the specified OPP. OPP defines the set of
433         * MPCC that are locked together for cursor.
434         *
435         * Parameters:
436         *
437         * - [in] mpc - MPC context.
438         * - [in] opp_id  - The OPP to lock cursor updates on
439         * - [in] lock - lock/unlock the OPP
440         *
441         * Return:
442         *
443         * void
444         */
445         void (*cursor_lock)(
446                         struct mpc *mpc,
447                         int opp_id,
448                         bool lock);
449
450         /**
451         * @insert_plane_to_secondary:
452         *
453         * Add DPP into secondary MPC tree based on specified blending
454         * position.  Only used for planes that are part of blending chain for
455         * DWB output
456         *
457         * Parameters:
458         *
459         * - [in/out] mpc  - MPC context.
460         * - [in/out] tree - MPC tree structure that plane will be added to.
461         * - [in] blnd_cfg - MPCC blending configuration for the new blending layer.
462         * - [in] sm_cfg   - MPCC stereo mix configuration for the new blending layer.
463         *           stereo mix must disable for the very bottom layer of the tree config.
464         * - [in] insert_above_mpcc - Insert new plane above this MPCC.  If
465         *          NULL, insert as bottom plane.
466         * - [in] dpp_id - DPP instance for the plane to be added.
467         * - [in] mpcc_id - The MPCC physical instance to use for blending.
468         *
469         * Return:
470         *
471         * struct mpcc* - MPCC that was added.
472         */
473         struct mpcc* (*insert_plane_to_secondary)(
474                         struct mpc *mpc,
475                         struct mpc_tree *tree,
476                         struct mpcc_blnd_cfg *blnd_cfg,
477                         struct mpcc_sm_cfg *sm_cfg,
478                         struct mpcc *insert_above_mpcc,
479                         int dpp_id,
480                         int mpcc_id);
481
482         /**
483         * @remove_mpcc_from_secondary:
484         *
485         * Remove a specified DPP from the 'secondary' MPC tree.
486         *
487         * Parameters:
488         *
489         * - [in/out] mpc  - MPC context.
490         * - [in/out] tree - MPC tree structure that plane will be removed from.
491         * - [in]     mpcc - MPCC to be removed from tree.
492         *
493         * Return:
494         *
495         * void
496         */
497         void (*remove_mpcc_from_secondary)(
498                         struct mpc *mpc,
499                         struct mpc_tree *tree,
500                         struct mpcc *mpcc);
501
502         /**
503         * @get_mpcc_for_dpp_from_secondary:
504         *
505         * Find, if it exists, a MPCC from a given 'secondary' MPC tree that
506         * is associated with specified plane.
507         *
508         * Parameters:
509         * - [in/out] tree - MPC tree structure to search for plane.
510         * - [in] dpp_id - DPP to be searched.
511         *
512         * Return:
513         *
514         * struct mpcc* - pointer to plane or NULL if no plane found.
515         */
516         struct mpcc* (*get_mpcc_for_dpp_from_secondary)(
517                         struct mpc_tree *tree,
518                         int dpp_id);
519
520         /**
521         * @get_mpcc_for_dpp:
522         *
523         * Find, if it exists, a MPCC from a given MPC tree that
524         * is associated with specified plane.
525         *
526         * Parameters:
527         * - [in/out] tree - MPC tree structure to search for plane.
528         * - [in] dpp_id - DPP to be searched.
529         *
530         * Return:
531         *
532         * struct mpcc* - pointer to plane or NULL if no plane found.
533         */
534         struct mpcc* (*get_mpcc_for_dpp)(
535                         struct mpc_tree *tree,
536                         int dpp_id);
537
538         /**
539         * @wait_for_idle:
540         *
541         * Wait for a MPCC in MPC context to enter idle state.
542         *
543         * Parameters:
544         * - [in/out] mpc - MPC Context.
545         * - [in] id - MPCC to wait for idle state.
546         *
547         * Return:
548         *
549         * void
550         */
551         void (*wait_for_idle)(struct mpc *mpc, int id);
552
553         /**
554         * @assert_mpcc_idle_before_connect:
555         *
556         * Assert if MPCC in MPC context is in idle state.
557         *
558         * Parameters:
559         * - [in/out] mpc - MPC context.
560         * - [in] id - MPCC to assert idle state.
561         *
562         * Return:
563         *
564         * void
565         */
566         void (*assert_mpcc_idle_before_connect)(struct mpc *mpc, int mpcc_id);
567
568         /**
569         * @init_mpcc_list_from_hw:
570         *
571         * Iterate through the MPCC array from a given MPC context struct
572         * and configure each MPCC according to its registers' values.
573         *
574         * Parameters:
575         * - [in/out] mpc - MPC context to initialize MPCC array.
576         * - [in/out] tree - MPC tree structure containing MPCC contexts to initialize.
577         *
578         * Return:
579         *
580         * void
581         */
582         void (*init_mpcc_list_from_hw)(
583                 struct mpc *mpc,
584                 struct mpc_tree *tree);
585
586         /**
587         * @set_denorm:
588         *
589         * Set corresponding OPP DENORM_CONTROL register value to specific denorm_mode
590         * based on given color depth.
591         *
592         * Parameters:
593         * - [in/out] mpc - MPC context.
594         * - [in] opp_id - Corresponding OPP to update register.
595         * - [in] output_depth - Arbitrary color depth to set denorm_mode.
596         *
597         * Return:
598         *
599         * void
600         */
601         void (*set_denorm)(struct mpc *mpc,
602                         int opp_id,
603                         enum dc_color_depth output_depth);
604
605         /**
606         * @set_denorm_clamp:
607         *
608         * Set denorm clamp values on corresponding OPP DENORM CONTROL register.
609         *
610         * Parameters:
611         * - [in/out] mpc - MPC context.
612         * - [in] opp_id - Corresponding OPP to update register.
613         * - [in] denorm_clamp - Arbitrary denorm clamp to be set.
614         *
615         * Return:
616         *
617         * void
618         */
619         void (*set_denorm_clamp)(
620                         struct mpc *mpc,
621                         int opp_id,
622                         struct mpc_denorm_clamp denorm_clamp);
623
624         /**
625         * @set_output_csc:
626         *
627         * Set the Output Color Space Conversion matrix
628         * with given values and mode.
629         *
630         * Parameters:
631         * - [in/out] mpc - MPC context.
632         * - [in] opp_id - Corresponding OPP to update register.
633         * - [in] regval - Values to set in CSC matrix.
634         * - [in] ocsc_mode - Mode to set CSC.
635         *
636         * Return:
637         *
638         * void
639         */
640         void (*set_output_csc)(struct mpc *mpc,
641                         int opp_id,
642                         const uint16_t *regval,
643                         enum mpc_output_csc_mode ocsc_mode);
644
645         /**
646         * @set_ocsc_default:
647         *
648         * Set the Output Color Space Conversion matrix
649         * to default values according to color space.
650         *
651         * Parameters:
652         * - [in/out] mpc - MPC context.
653         * - [in] opp_id - Corresponding OPP to update register.
654         * - [in] color_space - OCSC color space.
655         * - [in] ocsc_mode - Mode to set CSC.
656         *
657         * Return:
658         *
659         * void
660         *
661         */
662         void (*set_ocsc_default)(struct mpc *mpc,
663                         int opp_id,
664                         enum dc_color_space color_space,
665                         enum mpc_output_csc_mode ocsc_mode);
666
667         /**
668         * @set_output_gamma:
669         *
670         * Set Output Gamma with given curve parameters.
671         *
672         * Parameters:
673         * - [in/out] mpc - MPC context.
674         * - [in] mpcc_id - Corresponding MPC to update registers.
675         * - [in] params - Parameters.
676         *
677         * Return:
678         *
679         * void
680         *
681         */
682         void (*set_output_gamma)(
683                         struct mpc *mpc,
684                         int mpcc_id,
685                         const struct pwl_params *params);
686         /**
687         * @power_on_mpc_mem_pwr:
688         *
689         * Power on/off memory LUT for given MPCC.
690         * Powering on enables LUT to be updated.
691         * Powering off allows entering low power mode.
692         *
693         * Parameters:
694         * - [in/out] mpc - MPC context.
695         * - [in] mpcc_id - MPCC to power on.
696         * - [in] power_on
697         *
698         * Return:
699         *
700         * void
701         */
702         void (*power_on_mpc_mem_pwr)(
703                         struct mpc *mpc,
704                         int mpcc_id,
705                         bool power_on);
706         /**
707         * @set_dwb_mux:
708         *
709         * Set corresponding Display Writeback mux
710         * MPC register field to given MPCC id.
711         *
712         * Parameters:
713         * - [in/out] mpc - MPC context.
714         * - [in] dwb_id - DWB to be set.
715         * - [in] mpcc_id - MPCC id to be stored in DWB mux register.
716         *
717         * Return:
718         *
719         * void
720         */
721         void (*set_dwb_mux)(
722                         struct mpc *mpc,
723                         int dwb_id,
724                         int mpcc_id);
725
726         /**
727         * @disable_dwb_mux:
728         *
729         * Reset corresponding Display Writeback mux
730         * MPC register field.
731         *
732         * Parameters:
733         * - [in/out] mpc - MPC context.
734         * - [in] dwb_id - DWB to be set.
735         *
736         * Return:
737         *
738         * void
739         */
740         void (*disable_dwb_mux)(
741                 struct mpc *mpc,
742                 int dwb_id);
743
744         /**
745         * @is_dwb_idle:
746         *
747         * Check DWB status on MPC_DWB0_MUX_STATUS register field.
748         * Return if it is null.
749         *
750         * Parameters:
751         * - [in/out] mpc - MPC context.
752         * - [in] dwb_id - DWB to be checked.
753         *
754         * Return:
755         *
756         * bool - wheter DWB is idle or not
757         */
758         bool (*is_dwb_idle)(
759                 struct mpc *mpc,
760                 int dwb_id);
761
762         /**
763         * @set_out_rate_control:
764         *
765         * Set display output rate control.
766         *
767         * Parameters:
768         * - [in/out] mpc - MPC context.
769         * - [in] opp_id - OPP to be set.
770         * - [in] enable
771         * - [in] rate_2x_mode
772         * - [in] flow_control
773         *
774         * Return:
775         *
776         * void
777         */
778         void (*set_out_rate_control)(
779                 struct mpc *mpc,
780                 int opp_id,
781                 bool enable,
782                 bool rate_2x_mode,
783                 struct mpc_dwb_flow_control *flow_control);
784
785         /**
786         * @set_gamut_remap:
787         *
788         * Set post-blending CTM for given MPCC.
789         *
790         * Parameters:
791         * - [in] mpc - MPC context.
792         * - [in] mpcc_id - MPCC to set gamut map.
793         * - [in] adjust
794         *
795         * Return:
796         *
797         * void
798         */
799         void (*set_gamut_remap)(
800                         struct mpc *mpc,
801                         int mpcc_id,
802                         const struct mpc_grph_gamut_adjustment *adjust);
803
804         /**
805         * @program_1dlut:
806         *
807         * Set 1 dimensional Lookup Table.
808         *
809         * Parameters:
810         * - [in/out] mpc - MPC context
811         * - [in] params - curve parameters for the LUT configuration
812         * - [in] rmu_idx
813         *
814         * bool - wheter LUT was set (set with given parameters) or not (params is NULL and LUT is disabled).
815         */
816         bool (*program_1dlut)(
817                         struct mpc *mpc,
818                         const struct pwl_params *params,
819                         uint32_t rmu_idx);
820
821         /**
822         * @program_shaper:
823         *
824         * Set shaper.
825         *
826         * Parameters:
827         * - [in/out] mpc - MPC context
828         * - [in] params - curve parameters to be set
829         * - [in] rmu_idx
830         *
831         * Return:
832         *
833         * bool - wheter shaper was set (set with given parameters) or not (params is NULL and LUT is disabled).
834         */
835         bool (*program_shaper)(
836                         struct mpc *mpc,
837                         const struct pwl_params *params,
838                         uint32_t rmu_idx);
839
840         /**
841         * @acquire_rmu:
842         *
843         * Set given MPCC to be multiplexed to given RMU unit.
844         *
845         * Parameters:
846         * - [in/out] mpc - MPC context
847         * - [in] mpcc_id - MPCC
848         * - [in] rmu_idx - Given RMU unit to set MPCC to be multiplexed to.
849         *
850         * Return:
851         *
852         * unit32_t - rmu_idx if operation was successful, -1 else.
853         */
854         uint32_t (*acquire_rmu)(struct mpc *mpc, int mpcc_id, int rmu_idx);
855
856         /**
857         * @program_3dlut:
858         *
859         * Set 3 dimensional Lookup Table.
860         *
861         * Parameters:
862         * - [in/out] mpc - MPC context
863         * - [in] params - tetrahedral parameters for the LUT configuration
864         * - [in] rmu_idx
865         *
866         * bool - wheter LUT was set (set with given parameters) or not (params is NULL and LUT is disabled).
867         */
868         bool (*program_3dlut)(
869                         struct mpc *mpc,
870                         const struct tetrahedral_params *params,
871                         int rmu_idx);
872
873         /**
874         * @release_rmu:
875         *
876         * For a given MPCC, release the RMU unit it muliplexes to.
877         *
878         * Parameters:
879         * - [in/out] mpc - MPC context
880         * - [in] mpcc_id - MPCC
881         *
882         * Return:
883         *
884         * int - a valid rmu_idx representing released RMU unit or -1 if there was no RMU unit to release.
885         */
886         int (*release_rmu)(struct mpc *mpc, int mpcc_id);
887
888         /**
889         * @get_mpc_out_mux:
890         *
891         * Return MPC out mux.
892         *
893         * Parameters:
894         * - [in] mpc - MPC context.
895         * - [in] opp_id - OPP
896         *
897         * Return:
898         *
899         * unsigned int - Out Mux
900         */
901         unsigned int (*get_mpc_out_mux)(
902                                 struct mpc *mpc,
903                                 int opp_id);
904
905         /**
906         * @set_bg_color:
907         *
908         * Find corresponding bottommost MPCC and
909         * set its bg color.
910         *
911         * Parameters:
912         * - [in/out] mpc - MPC context.
913         * - [in] bg_color - background color to be set.
914         * - [in] mpcc_id
915         *
916         * Return:
917         *
918         * void
919         */
920         void (*set_bg_color)(struct mpc *mpc,
921                         struct tg_color *bg_color,
922                         int mpcc_id);
923
924         /**
925         * @set_mpc_mem_lp_mode:
926         *
927         * Set mpc_mem_lp_mode.
928         *
929         * Parameters:
930         * - [in/out] mpc - MPC context.
931         *
932         * Return:
933         *
934         * void
935         */
936
937         void (*set_mpc_mem_lp_mode)(struct mpc *mpc);
938         /**
939         * @set_movable_cm_location:
940         *
941         * Set Movable CM Location.
942         *
943         * Parameters:
944         * - [in/out] mpc - MPC context.
945         * - [in] location
946         * - [in] mpcc_id
947         *
948         * Return:
949         *
950         * void
951         */
952
953         void (*set_movable_cm_location)(struct mpc *mpc, enum mpcc_movable_cm_location location, int mpcc_id);
954         /**
955         * @update_3dlut_fast_load_select:
956         *
957         * Update 3D LUT fast load select.
958         *
959         * Parameters:
960         * - [in/out] mpc - MPC context.
961         * - [in] mpcc_id
962         * - [in] hubp_idx
963         *
964         * Return:
965         *
966         * void
967         */
968
969         void (*update_3dlut_fast_load_select)(struct mpc *mpc, int mpcc_id, int hubp_idx);
970         /**
971         * @get_3dlut_fast_load_status:
972         *
973         * Get 3D LUT fast load status and reference them with done, soft_underflow and hard_underflow pointers.
974         *
975         * Parameters:
976         * - [in/out] mpc - MPC context.
977         * - [in] mpcc_id
978         * - [in/out] done
979         * - [in/out] soft_underflow
980         * - [in/out] hard_underflow
981         *
982         * Return:
983         *
984         * void
985         */
986         void (*get_3dlut_fast_load_status)(struct mpc *mpc, int mpcc_id, uint32_t *done, uint32_t *soft_underflow, uint32_t *hard_underflow);
987
988         /**
989         * @populate_lut:
990         *
991         * Populate LUT with given tetrahedral parameters.
992         *
993         * Parameters:
994         * - [in/out] mpc - MPC context.
995         * - [in] id
996         * - [in] params
997         * - [in] lut_bank_a
998         * - [in] mpcc_id
999         *
1000         * Return:
1001         *
1002         * void
1003         */
1004         void (*populate_lut)(struct mpc *mpc, const enum MCM_LUT_ID id, const union mcm_lut_params params,
1005                         bool lut_bank_a, int mpcc_id);
1006
1007         /**
1008         * @program_lut_read_write_control:
1009         *
1010         * Program LUT RW control.
1011         *
1012         * Parameters:
1013         * - [in/out] mpc - MPC context.
1014         * - [in] id
1015         * - [in] lut_bank_a
1016         * - [in] mpcc_id
1017         *
1018         * Return:
1019         *
1020         * void
1021         */
1022         void (*program_lut_read_write_control)(struct mpc *mpc, const enum MCM_LUT_ID id, bool lut_bank_a, int mpcc_id);
1023
1024         /**
1025         * @program_lut_mode:
1026         *
1027         * Program LUT mode.
1028         *
1029         * Parameters:
1030         * - [in/out] mpc - MPC context.
1031         * - [in] id
1032         * - [in] xable
1033         * - [in] lut_bank_a
1034         * - [in] mpcc_id
1035         *
1036         * Return:
1037         *
1038         * void
1039         */
1040         void (*program_lut_mode)(struct mpc *mpc, const enum MCM_LUT_ID id, const enum MCM_LUT_XABLE xable,
1041                         bool lut_bank_a, int mpcc_id);
1042         /**
1043         * @program_3dlut_size:
1044         *
1045         * Program 3D LUT size.
1046         *
1047         * Parameters:
1048         * - [in/out] mpc - MPC context.
1049         * - [in] is_17x17x17 - is 3dlut 17x17x17
1050         * - [in] mpcc_id
1051         *
1052         * Return:
1053         *
1054         * void
1055         */
1056         void (*program_3dlut_size)(struct mpc *mpc, bool is_17x17x17, int mpcc_id);
1057 };
1058
1059 #endif
This page took 0.095829 seconds and 4 git commands to generate.