xref: /openbsd-src/sys/dev/pci/drm/amd/display/dc/inc/hw_sequencer.h (revision f005ef32267c16bdb134f0e9fa4477dbe07c263a)
1fb4d8502Sjsg /*
2fb4d8502Sjsg  * Copyright 2015 Advanced Micro Devices, Inc.
3fb4d8502Sjsg  *
4fb4d8502Sjsg  * Permission is hereby granted, free of charge, to any person obtaining a
5fb4d8502Sjsg  * copy of this software and associated documentation files (the "Software"),
6fb4d8502Sjsg  * to deal in the Software without restriction, including without limitation
7fb4d8502Sjsg  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8fb4d8502Sjsg  * and/or sell copies of the Software, and to permit persons to whom the
9fb4d8502Sjsg  * Software is furnished to do so, subject to the following conditions:
10fb4d8502Sjsg  *
11fb4d8502Sjsg  * The above copyright notice and this permission notice shall be included in
12fb4d8502Sjsg  * all copies or substantial portions of the Software.
13fb4d8502Sjsg  *
14fb4d8502Sjsg  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15fb4d8502Sjsg  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16fb4d8502Sjsg  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
17fb4d8502Sjsg  * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
18fb4d8502Sjsg  * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
19fb4d8502Sjsg  * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
20fb4d8502Sjsg  * OTHER DEALINGS IN THE SOFTWARE.
21fb4d8502Sjsg  *
22fb4d8502Sjsg  * Authors: AMD
23fb4d8502Sjsg  *
24fb4d8502Sjsg  */
25fb4d8502Sjsg 
26fb4d8502Sjsg #ifndef __DC_HW_SEQUENCER_H__
27fb4d8502Sjsg #define __DC_HW_SEQUENCER_H__
28fb4d8502Sjsg #include "dc_types.h"
29fb4d8502Sjsg #include "clock_source.h"
30fb4d8502Sjsg #include "inc/hw/timing_generator.h"
31fb4d8502Sjsg #include "inc/hw/opp.h"
32fb4d8502Sjsg #include "inc/hw/link_encoder.h"
33fb4d8502Sjsg #include "core_status.h"
34fb4d8502Sjsg 
35fb4d8502Sjsg struct pipe_ctx;
36fb4d8502Sjsg struct dc_state;
37c349dbc7Sjsg struct dc_stream_status;
38c349dbc7Sjsg struct dc_writeback_info;
39fb4d8502Sjsg struct dchub_init_data;
40c349dbc7Sjsg struct dc_static_screen_params;
41fb4d8502Sjsg struct resource_pool;
42c349dbc7Sjsg struct dc_phy_addr_space_config;
43c349dbc7Sjsg struct dc_virtual_addr_space_config;
44c349dbc7Sjsg struct dpp;
45c349dbc7Sjsg struct dce_hwseq;
461bb76ff1Sjsg struct link_resource;
47*f005ef32Sjsg struct dc_dmub_cmd;
48*f005ef32Sjsg 
49*f005ef32Sjsg struct subvp_pipe_control_lock_fast_params {
50*f005ef32Sjsg 	struct dc *dc;
51*f005ef32Sjsg 	bool lock;
52*f005ef32Sjsg 	struct pipe_ctx *pipe_ctx;
53*f005ef32Sjsg };
54*f005ef32Sjsg 
55*f005ef32Sjsg struct pipe_control_lock_params {
56*f005ef32Sjsg 	struct dc *dc;
57*f005ef32Sjsg 	struct pipe_ctx *pipe_ctx;
58*f005ef32Sjsg 	bool lock;
59*f005ef32Sjsg };
60*f005ef32Sjsg 
61*f005ef32Sjsg struct set_flip_control_gsl_params {
62*f005ef32Sjsg 	struct pipe_ctx *pipe_ctx;
63*f005ef32Sjsg 	bool flip_immediate;
64*f005ef32Sjsg };
65*f005ef32Sjsg 
66*f005ef32Sjsg struct program_triplebuffer_params {
67*f005ef32Sjsg 	const struct dc *dc;
68*f005ef32Sjsg 	struct pipe_ctx *pipe_ctx;
69*f005ef32Sjsg 	bool enableTripleBuffer;
70*f005ef32Sjsg };
71*f005ef32Sjsg 
72*f005ef32Sjsg struct update_plane_addr_params {
73*f005ef32Sjsg 	struct dc *dc;
74*f005ef32Sjsg 	struct pipe_ctx *pipe_ctx;
75*f005ef32Sjsg };
76*f005ef32Sjsg 
77*f005ef32Sjsg struct set_input_transfer_func_params {
78*f005ef32Sjsg 	struct dc *dc;
79*f005ef32Sjsg 	struct pipe_ctx *pipe_ctx;
80*f005ef32Sjsg 	struct dc_plane_state *plane_state;
81*f005ef32Sjsg };
82*f005ef32Sjsg 
83*f005ef32Sjsg struct program_gamut_remap_params {
84*f005ef32Sjsg 	struct pipe_ctx *pipe_ctx;
85*f005ef32Sjsg };
86*f005ef32Sjsg 
87*f005ef32Sjsg struct program_manual_trigger_params {
88*f005ef32Sjsg 	struct pipe_ctx *pipe_ctx;
89*f005ef32Sjsg };
90*f005ef32Sjsg 
91*f005ef32Sjsg struct send_dmcub_cmd_params {
92*f005ef32Sjsg 	struct dc_context *ctx;
93*f005ef32Sjsg 	union dmub_rb_cmd *cmd;
94*f005ef32Sjsg 	enum dm_dmub_wait_type wait_type;
95*f005ef32Sjsg };
96*f005ef32Sjsg 
97*f005ef32Sjsg struct setup_dpp_params {
98*f005ef32Sjsg 	struct pipe_ctx *pipe_ctx;
99*f005ef32Sjsg };
100*f005ef32Sjsg 
101*f005ef32Sjsg struct program_bias_and_scale_params {
102*f005ef32Sjsg 	struct pipe_ctx *pipe_ctx;
103*f005ef32Sjsg };
104*f005ef32Sjsg 
105*f005ef32Sjsg struct set_output_transfer_func_params {
106*f005ef32Sjsg 	struct dc *dc;
107*f005ef32Sjsg 	struct pipe_ctx *pipe_ctx;
108*f005ef32Sjsg 	const struct dc_stream_state *stream;
109*f005ef32Sjsg };
110*f005ef32Sjsg 
111*f005ef32Sjsg struct update_visual_confirm_params {
112*f005ef32Sjsg 	struct dc *dc;
113*f005ef32Sjsg 	struct pipe_ctx *pipe_ctx;
114*f005ef32Sjsg 	int mpcc_id;
115*f005ef32Sjsg };
116*f005ef32Sjsg 
117*f005ef32Sjsg struct power_on_mpc_mem_pwr_params {
118*f005ef32Sjsg 	struct mpc *mpc;
119*f005ef32Sjsg 	int mpcc_id;
120*f005ef32Sjsg 	bool power_on;
121*f005ef32Sjsg };
122*f005ef32Sjsg 
123*f005ef32Sjsg struct set_output_csc_params {
124*f005ef32Sjsg 	struct mpc *mpc;
125*f005ef32Sjsg 	int opp_id;
126*f005ef32Sjsg 	const uint16_t *regval;
127*f005ef32Sjsg 	enum mpc_output_csc_mode ocsc_mode;
128*f005ef32Sjsg };
129*f005ef32Sjsg 
130*f005ef32Sjsg struct set_ocsc_default_params {
131*f005ef32Sjsg 	struct mpc *mpc;
132*f005ef32Sjsg 	int opp_id;
133*f005ef32Sjsg 	enum dc_color_space color_space;
134*f005ef32Sjsg 	enum mpc_output_csc_mode ocsc_mode;
135*f005ef32Sjsg };
136*f005ef32Sjsg 
137*f005ef32Sjsg union block_sequence_params {
138*f005ef32Sjsg 	struct update_plane_addr_params update_plane_addr_params;
139*f005ef32Sjsg 	struct subvp_pipe_control_lock_fast_params subvp_pipe_control_lock_fast_params;
140*f005ef32Sjsg 	struct pipe_control_lock_params pipe_control_lock_params;
141*f005ef32Sjsg 	struct set_flip_control_gsl_params set_flip_control_gsl_params;
142*f005ef32Sjsg 	struct program_triplebuffer_params program_triplebuffer_params;
143*f005ef32Sjsg 	struct set_input_transfer_func_params set_input_transfer_func_params;
144*f005ef32Sjsg 	struct program_gamut_remap_params program_gamut_remap_params;
145*f005ef32Sjsg 	struct program_manual_trigger_params program_manual_trigger_params;
146*f005ef32Sjsg 	struct send_dmcub_cmd_params send_dmcub_cmd_params;
147*f005ef32Sjsg 	struct setup_dpp_params setup_dpp_params;
148*f005ef32Sjsg 	struct program_bias_and_scale_params program_bias_and_scale_params;
149*f005ef32Sjsg 	struct set_output_transfer_func_params set_output_transfer_func_params;
150*f005ef32Sjsg 	struct update_visual_confirm_params update_visual_confirm_params;
151*f005ef32Sjsg 	struct power_on_mpc_mem_pwr_params power_on_mpc_mem_pwr_params;
152*f005ef32Sjsg 	struct set_output_csc_params set_output_csc_params;
153*f005ef32Sjsg 	struct set_ocsc_default_params set_ocsc_default_params;
154*f005ef32Sjsg };
155*f005ef32Sjsg 
156*f005ef32Sjsg enum block_sequence_func {
157*f005ef32Sjsg 	DMUB_SUBVP_PIPE_CONTROL_LOCK_FAST = 0,
158*f005ef32Sjsg 	OPTC_PIPE_CONTROL_LOCK,
159*f005ef32Sjsg 	HUBP_SET_FLIP_CONTROL_GSL,
160*f005ef32Sjsg 	HUBP_PROGRAM_TRIPLEBUFFER,
161*f005ef32Sjsg 	HUBP_UPDATE_PLANE_ADDR,
162*f005ef32Sjsg 	DPP_SET_INPUT_TRANSFER_FUNC,
163*f005ef32Sjsg 	DPP_PROGRAM_GAMUT_REMAP,
164*f005ef32Sjsg 	OPTC_PROGRAM_MANUAL_TRIGGER,
165*f005ef32Sjsg 	DMUB_SEND_DMCUB_CMD,
166*f005ef32Sjsg 	DPP_SETUP_DPP,
167*f005ef32Sjsg 	DPP_PROGRAM_BIAS_AND_SCALE,
168*f005ef32Sjsg 	DPP_SET_OUTPUT_TRANSFER_FUNC,
169*f005ef32Sjsg 	MPC_UPDATE_VISUAL_CONFIRM,
170*f005ef32Sjsg 	MPC_POWER_ON_MPC_MEM_PWR,
171*f005ef32Sjsg 	MPC_SET_OUTPUT_CSC,
172*f005ef32Sjsg 	MPC_SET_OCSC_DEFAULT,
173*f005ef32Sjsg };
174*f005ef32Sjsg 
175*f005ef32Sjsg struct block_sequence {
176*f005ef32Sjsg 	union block_sequence_params params;
177*f005ef32Sjsg 	enum block_sequence_func func;
178*f005ef32Sjsg };
179fb4d8502Sjsg 
180fb4d8502Sjsg struct hw_sequencer_funcs {
1815ca02815Sjsg 	void (*hardware_release)(struct dc *dc);
182c349dbc7Sjsg 	/* Embedded Display Related */
183c349dbc7Sjsg 	void (*edp_power_control)(struct dc_link *link, bool enable);
184c349dbc7Sjsg 	void (*edp_wait_for_hpd_ready)(struct dc_link *link, bool power_up);
1855ca02815Sjsg 	void (*edp_wait_for_T12)(struct dc_link *link);
186fb4d8502Sjsg 
187c349dbc7Sjsg 	/* Pipe Programming Related */
188fb4d8502Sjsg 	void (*init_hw)(struct dc *dc);
189ad8b1aafSjsg 	void (*power_down_on_boot)(struct dc *dc);
190c349dbc7Sjsg 	void (*enable_accelerated_mode)(struct dc *dc,
191fb4d8502Sjsg 			struct dc_state *context);
192c349dbc7Sjsg 	enum dc_status (*apply_ctx_to_hw)(struct dc *dc,
193c349dbc7Sjsg 			struct dc_state *context);
194fb4d8502Sjsg 	void (*disable_plane)(struct dc *dc, struct pipe_ctx *pipe_ctx);
1951bb76ff1Sjsg 	void (*disable_pixel_data)(struct dc *dc, struct pipe_ctx *pipe_ctx, bool blank);
196c349dbc7Sjsg 	void (*apply_ctx_for_surface)(struct dc *dc,
197c349dbc7Sjsg 			const struct dc_stream_state *stream,
198c349dbc7Sjsg 			int num_planes, struct dc_state *context);
199c349dbc7Sjsg 	void (*program_front_end_for_ctx)(struct dc *dc,
200c349dbc7Sjsg 			struct dc_state *context);
201ad8b1aafSjsg 	void (*wait_for_pending_cleared)(struct dc *dc,
202ad8b1aafSjsg 			struct dc_state *context);
203c349dbc7Sjsg 	void (*post_unlock_program_front_end)(struct dc *dc,
204c349dbc7Sjsg 			struct dc_state *context);
205c349dbc7Sjsg 	void (*update_plane_addr)(const struct dc *dc,
206c349dbc7Sjsg 			struct pipe_ctx *pipe_ctx);
207c349dbc7Sjsg 	void (*update_dchub)(struct dce_hwseq *hws,
208c349dbc7Sjsg 			struct dchub_init_data *dh_data);
209fb4d8502Sjsg 	void (*wait_for_mpcc_disconnect)(struct dc *dc,
210fb4d8502Sjsg 			struct resource_pool *res_pool,
211fb4d8502Sjsg 			struct pipe_ctx *pipe_ctx);
212ad8b1aafSjsg 	void (*edp_backlight_control)(
213ad8b1aafSjsg 			struct dc_link *link,
214ad8b1aafSjsg 			bool enable);
215c349dbc7Sjsg 	void (*program_triplebuffer)(const struct dc *dc,
216c349dbc7Sjsg 		struct pipe_ctx *pipe_ctx, bool enableTripleBuffer);
217c349dbc7Sjsg 	void (*update_pending_status)(struct pipe_ctx *pipe_ctx);
218ad8b1aafSjsg 	void (*power_down)(struct dc *dc);
2191bb76ff1Sjsg 	void (*update_dsc_pg)(struct dc *dc, struct dc_state *context, bool safe_to_disable);
220fb4d8502Sjsg 
221c349dbc7Sjsg 	/* Pipe Lock Related */
222c349dbc7Sjsg 	void (*pipe_control_lock)(struct dc *dc,
223c349dbc7Sjsg 			struct pipe_ctx *pipe, bool lock);
224c349dbc7Sjsg 	void (*interdependent_update_lock)(struct dc *dc,
225c349dbc7Sjsg 			struct dc_state *context, bool lock);
226c349dbc7Sjsg 	void (*set_flip_control_gsl)(struct pipe_ctx *pipe_ctx,
227c349dbc7Sjsg 			bool flip_immediate);
228c349dbc7Sjsg 	void (*cursor_lock)(struct dc *dc, struct pipe_ctx *pipe, bool lock);
229c349dbc7Sjsg 
230c349dbc7Sjsg 	/* Timing Related */
231c349dbc7Sjsg 	void (*get_position)(struct pipe_ctx **pipe_ctx, int num_pipes,
232c349dbc7Sjsg 			struct crtc_position *position);
233c349dbc7Sjsg 	int (*get_vupdate_offset_from_vsync)(struct pipe_ctx *pipe_ctx);
234c349dbc7Sjsg 	void (*calc_vupdate_position)(
235fb4d8502Sjsg 			struct dc *dc,
236c349dbc7Sjsg 			struct pipe_ctx *pipe_ctx,
237c349dbc7Sjsg 			uint32_t *start_line,
238c349dbc7Sjsg 			uint32_t *end_line);
239c349dbc7Sjsg 	void (*enable_per_frame_crtc_position_reset)(struct dc *dc,
240c349dbc7Sjsg 			int group_size, struct pipe_ctx *grouped_pipes[]);
241c349dbc7Sjsg 	void (*enable_timing_synchronization)(struct dc *dc,
242c349dbc7Sjsg 			int group_index, int group_size,
243c349dbc7Sjsg 			struct pipe_ctx *grouped_pipes[]);
2445ca02815Sjsg 	void (*enable_vblanks_synchronization)(struct dc *dc,
2455ca02815Sjsg 			int group_index, int group_size,
2465ca02815Sjsg 			struct pipe_ctx *grouped_pipes[]);
247c349dbc7Sjsg 	void (*setup_periodic_interrupt)(struct dc *dc,
2481bb76ff1Sjsg 			struct pipe_ctx *pipe_ctx);
249c349dbc7Sjsg 	void (*set_drr)(struct pipe_ctx **pipe_ctx, int num_pipes,
2505ca02815Sjsg 			struct dc_crtc_timing_adjust adjust);
251c349dbc7Sjsg 	void (*set_static_screen_control)(struct pipe_ctx **pipe_ctx,
252c349dbc7Sjsg 			int num_pipes,
253c349dbc7Sjsg 			const struct dc_static_screen_params *events);
254ad8b1aafSjsg #ifndef TRIM_FSFT
255ad8b1aafSjsg 	bool (*optimize_timing_for_fsft)(struct dc *dc,
256ad8b1aafSjsg 			struct dc_crtc_timing *timing,
257ad8b1aafSjsg 			unsigned int max_input_rate_in_khz);
258ad8b1aafSjsg #endif
259fb4d8502Sjsg 
260c349dbc7Sjsg 	/* Stream Related */
261c349dbc7Sjsg 	void (*enable_stream)(struct pipe_ctx *pipe_ctx);
262c349dbc7Sjsg 	void (*disable_stream)(struct pipe_ctx *pipe_ctx);
263c349dbc7Sjsg 	void (*blank_stream)(struct pipe_ctx *pipe_ctx);
264c349dbc7Sjsg 	void (*unblank_stream)(struct pipe_ctx *pipe_ctx,
265c349dbc7Sjsg 			struct dc_link_settings *link_settings);
266c349dbc7Sjsg 
267c349dbc7Sjsg 	/* Bandwidth Related */
268c349dbc7Sjsg 	void (*prepare_bandwidth)(struct dc *dc, struct dc_state *context);
269c349dbc7Sjsg 	bool (*update_bandwidth)(struct dc *dc, struct dc_state *context);
270c349dbc7Sjsg 	void (*optimize_bandwidth)(struct dc *dc, struct dc_state *context);
271c349dbc7Sjsg 
272c349dbc7Sjsg 	/* Infopacket Related */
273c349dbc7Sjsg 	void (*set_avmute)(struct pipe_ctx *pipe_ctx, bool enable);
274c349dbc7Sjsg 	void (*send_immediate_sdp_message)(
275c349dbc7Sjsg 			struct pipe_ctx *pipe_ctx,
276c349dbc7Sjsg 			const uint8_t *custom_sdp_message,
277c349dbc7Sjsg 			unsigned int sdp_message_size);
278c349dbc7Sjsg 	void (*update_info_frame)(struct pipe_ctx *pipe_ctx);
279c349dbc7Sjsg 	void (*set_dmdata_attributes)(struct pipe_ctx *pipe);
280c349dbc7Sjsg 	void (*program_dmdata_engine)(struct pipe_ctx *pipe_ctx);
281c349dbc7Sjsg 	bool (*dmdata_status_done)(struct pipe_ctx *pipe_ctx);
282c349dbc7Sjsg 
283c349dbc7Sjsg 	/* Cursor Related */
284fb4d8502Sjsg 	void (*set_cursor_position)(struct pipe_ctx *pipe);
285fb4d8502Sjsg 	void (*set_cursor_attribute)(struct pipe_ctx *pipe);
286fb4d8502Sjsg 	void (*set_cursor_sdr_white_level)(struct pipe_ctx *pipe);
287fb4d8502Sjsg 
288c349dbc7Sjsg 	/* Colour Related */
289c349dbc7Sjsg 	void (*program_gamut_remap)(struct pipe_ctx *pipe_ctx);
290c349dbc7Sjsg 	void (*program_output_csc)(struct dc *dc, struct pipe_ctx *pipe_ctx,
291c349dbc7Sjsg 			enum dc_color_space colorspace,
292c349dbc7Sjsg 			uint16_t *matrix, int opp_id);
293c349dbc7Sjsg 
294c349dbc7Sjsg 	/* VM Related */
295c349dbc7Sjsg 	int (*init_sys_ctx)(struct dce_hwseq *hws,
296c349dbc7Sjsg 			struct dc *dc,
297c349dbc7Sjsg 			struct dc_phy_addr_space_config *pa_config);
298c349dbc7Sjsg 	void (*init_vm_ctx)(struct dce_hwseq *hws,
299c349dbc7Sjsg 			struct dc *dc,
300c349dbc7Sjsg 			struct dc_virtual_addr_space_config *va_config,
301c349dbc7Sjsg 			int vmid);
302c349dbc7Sjsg 
303c349dbc7Sjsg 	/* Writeback Related */
304c349dbc7Sjsg 	void (*update_writeback)(struct dc *dc,
305c349dbc7Sjsg 			struct dc_writeback_info *wb_info,
306c349dbc7Sjsg 			struct dc_state *context);
307c349dbc7Sjsg 	void (*enable_writeback)(struct dc *dc,
308c349dbc7Sjsg 			struct dc_writeback_info *wb_info,
309c349dbc7Sjsg 			struct dc_state *context);
310c349dbc7Sjsg 	void (*disable_writeback)(struct dc *dc,
311c349dbc7Sjsg 			unsigned int dwb_pipe_inst);
312c349dbc7Sjsg 
313c349dbc7Sjsg 	bool (*mmhubbub_warmup)(struct dc *dc,
314c349dbc7Sjsg 			unsigned int num_dwb,
315c349dbc7Sjsg 			struct dc_writeback_info *wb_info);
316c349dbc7Sjsg 
317c349dbc7Sjsg 	/* Clock Related */
318c349dbc7Sjsg 	enum dc_status (*set_clock)(struct dc *dc,
319c349dbc7Sjsg 			enum dc_clock_type clock_type,
320c349dbc7Sjsg 			uint32_t clk_khz, uint32_t stepping);
321c349dbc7Sjsg 	void (*get_clock)(struct dc *dc, enum dc_clock_type clock_type,
322c349dbc7Sjsg 			struct dc_clock_config *clock_cfg);
323c349dbc7Sjsg 	void (*optimize_pwr_state)(const struct dc *dc,
324c349dbc7Sjsg 			struct dc_state *context);
325c349dbc7Sjsg 	void (*exit_optimized_pwr_state)(const struct dc *dc,
326c349dbc7Sjsg 			struct dc_state *context);
327c349dbc7Sjsg 
328c349dbc7Sjsg 	/* Audio Related */
329c349dbc7Sjsg 	void (*enable_audio_stream)(struct pipe_ctx *pipe_ctx);
330c349dbc7Sjsg 	void (*disable_audio_stream)(struct pipe_ctx *pipe_ctx);
331c349dbc7Sjsg 
332c349dbc7Sjsg 	/* Stereo 3D Related */
333c349dbc7Sjsg 	void (*setup_stereo)(struct pipe_ctx *pipe_ctx, struct dc *dc);
334c349dbc7Sjsg 
335c349dbc7Sjsg 	/* HW State Logging Related */
336c349dbc7Sjsg 	void (*log_hw_state)(struct dc *dc, struct dc_log_buffer_ctx *log_ctx);
337c349dbc7Sjsg 	void (*get_hw_state)(struct dc *dc, char *pBuf,
338c349dbc7Sjsg 			unsigned int bufSize, unsigned int mask);
339c349dbc7Sjsg 	void (*clear_status_bits)(struct dc *dc, unsigned int mask);
340c349dbc7Sjsg 
341ad8b1aafSjsg 	bool (*set_backlight_level)(struct pipe_ctx *pipe_ctx,
342ad8b1aafSjsg 			uint32_t backlight_pwm_u16_16,
343ad8b1aafSjsg 			uint32_t frame_ramp);
344ad8b1aafSjsg 
345ad8b1aafSjsg 	void (*set_abm_immediate_disable)(struct pipe_ctx *pipe_ctx);
346ad8b1aafSjsg 
347ad8b1aafSjsg 	void (*set_pipe)(struct pipe_ctx *pipe_ctx);
348ad8b1aafSjsg 
3491bb76ff1Sjsg 	void (*enable_dp_link_output)(struct dc_link *link,
3501bb76ff1Sjsg 			const struct link_resource *link_res,
3511bb76ff1Sjsg 			enum amd_signal_type signal,
3521bb76ff1Sjsg 			enum clock_source_id clock_source,
3531bb76ff1Sjsg 			const struct dc_link_settings *link_settings);
3541bb76ff1Sjsg 	void (*enable_tmds_link_output)(struct dc_link *link,
3551bb76ff1Sjsg 			const struct link_resource *link_res,
3561bb76ff1Sjsg 			enum amd_signal_type signal,
3571bb76ff1Sjsg 			enum clock_source_id clock_source,
3581bb76ff1Sjsg 			enum dc_color_depth color_depth,
3591bb76ff1Sjsg 			uint32_t pixel_clock);
3601bb76ff1Sjsg 	void (*enable_lvds_link_output)(struct dc_link *link,
3611bb76ff1Sjsg 			const struct link_resource *link_res,
3621bb76ff1Sjsg 			enum clock_source_id clock_source,
3631bb76ff1Sjsg 			uint32_t pixel_clock);
3641bb76ff1Sjsg 	void (*disable_link_output)(struct dc_link *link,
3651bb76ff1Sjsg 			const struct link_resource *link_res,
3661bb76ff1Sjsg 			enum amd_signal_type signal);
3671bb76ff1Sjsg 
3685ca02815Sjsg 	void (*get_dcc_en_bits)(struct dc *dc, int *dcc_en_bits);
3695ca02815Sjsg 
370ad8b1aafSjsg 	/* Idle Optimization Related */
371ad8b1aafSjsg 	bool (*apply_idle_power_optimizations)(struct dc *dc, bool enable);
372c349dbc7Sjsg 
3735ca02815Sjsg 	bool (*does_plane_fit_in_mall)(struct dc *dc, struct dc_plane_state *plane,
3745ca02815Sjsg 			struct dc_cursor_attributes *cursor_attr);
3755ca02815Sjsg 
3765ca02815Sjsg 	bool (*is_abm_supported)(struct dc *dc,
3775ca02815Sjsg 			struct dc_state *context, struct dc_stream_state *stream);
3785ca02815Sjsg 
3795ca02815Sjsg 	void (*set_disp_pattern_generator)(const struct dc *dc,
3805ca02815Sjsg 			struct pipe_ctx *pipe_ctx,
3815ca02815Sjsg 			enum controller_dp_test_pattern test_pattern,
3825ca02815Sjsg 			enum controller_dp_color_space color_space,
3835ca02815Sjsg 			enum dc_color_depth color_depth,
3845ca02815Sjsg 			const struct tg_color *solid_color,
3855ca02815Sjsg 			int width, int height, int offset);
3865ca02815Sjsg 
387*f005ef32Sjsg 	void (*subvp_pipe_control_lock_fast)(union block_sequence_params *params);
3881bb76ff1Sjsg 	void (*z10_restore)(const struct dc *dc);
3895ca02815Sjsg 	void (*z10_save_init)(struct dc *dc);
3905ca02815Sjsg 
391*f005ef32Sjsg 	void (*blank_phantom)(struct dc *dc,
392*f005ef32Sjsg 			struct timing_generator *tg,
393*f005ef32Sjsg 			int width,
394*f005ef32Sjsg 			int height);
395*f005ef32Sjsg 
3965ca02815Sjsg 	void (*update_visual_confirm_color)(struct dc *dc,
3975ca02815Sjsg 			struct pipe_ctx *pipe_ctx,
3985ca02815Sjsg 			int mpcc_id);
3991bb76ff1Sjsg 
4001bb76ff1Sjsg 	void (*update_phantom_vp_position)(struct dc *dc,
4011bb76ff1Sjsg 			struct dc_state *context,
4021bb76ff1Sjsg 			struct pipe_ctx *phantom_pipe);
403*f005ef32Sjsg 	void (*apply_update_flags_for_phantom)(struct pipe_ctx *phantom_pipe);
404*f005ef32Sjsg 	bool (*is_pipe_topology_transition_seamless)(struct dc *dc,
405*f005ef32Sjsg 			const struct dc_state *cur_ctx,
406*f005ef32Sjsg 			const struct dc_state *new_ctx);
4071bb76ff1Sjsg 
4081bb76ff1Sjsg 	void (*commit_subvp_config)(struct dc *dc, struct dc_state *context);
409*f005ef32Sjsg 	void (*enable_phantom_streams)(struct dc *dc, struct dc_state *context);
4101bb76ff1Sjsg 	void (*subvp_pipe_control_lock)(struct dc *dc,
4111bb76ff1Sjsg 			struct dc_state *context,
4121bb76ff1Sjsg 			bool lock,
4131bb76ff1Sjsg 			bool should_lock_all_pipes,
4141bb76ff1Sjsg 			struct pipe_ctx *top_pipe_to_program,
4151bb76ff1Sjsg 			bool subvp_prev_use);
4161bb76ff1Sjsg 
417fb4d8502Sjsg };
418fb4d8502Sjsg 
419fb4d8502Sjsg void color_space_to_black_color(
420fb4d8502Sjsg 	const struct dc *dc,
421fb4d8502Sjsg 	enum dc_color_space colorspace,
422fb4d8502Sjsg 	struct tg_color *black_color);
423fb4d8502Sjsg 
424fb4d8502Sjsg bool hwss_wait_for_blank_complete(
425fb4d8502Sjsg 		struct timing_generator *tg);
426fb4d8502Sjsg 
427fb4d8502Sjsg const uint16_t *find_color_matrix(
428fb4d8502Sjsg 		enum dc_color_space color_space,
429fb4d8502Sjsg 		uint32_t *array_size);
430fb4d8502Sjsg 
4315ca02815Sjsg void get_surface_visual_confirm_color(
4325ca02815Sjsg 		const struct pipe_ctx *pipe_ctx,
4335ca02815Sjsg 		struct tg_color *color);
4345ca02815Sjsg 
4351bb76ff1Sjsg void get_subvp_visual_confirm_color(
4361bb76ff1Sjsg 	struct dc *dc,
437*f005ef32Sjsg 	struct dc_state *context,
4381bb76ff1Sjsg 	struct pipe_ctx *pipe_ctx,
4391bb76ff1Sjsg 	struct tg_color *color);
4401bb76ff1Sjsg 
4415ca02815Sjsg void get_hdr_visual_confirm_color(
4425ca02815Sjsg 		struct pipe_ctx *pipe_ctx,
4435ca02815Sjsg 		struct tg_color *color);
4445ca02815Sjsg void get_mpctree_visual_confirm_color(
4455ca02815Sjsg 		struct pipe_ctx *pipe_ctx,
4465ca02815Sjsg 		struct tg_color *color);
4475ca02815Sjsg void get_surface_tile_visual_confirm_color(
4485ca02815Sjsg 		struct pipe_ctx *pipe_ctx,
4495ca02815Sjsg 		struct tg_color *color);
450*f005ef32Sjsg 
451*f005ef32Sjsg void get_mclk_switch_visual_confirm_color(
452*f005ef32Sjsg 		struct dc *dc,
453*f005ef32Sjsg 		struct dc_state *context,
454*f005ef32Sjsg 		struct pipe_ctx *pipe_ctx,
455*f005ef32Sjsg 		struct tg_color *color);
456*f005ef32Sjsg 
457*f005ef32Sjsg void hwss_execute_sequence(struct dc *dc,
458*f005ef32Sjsg 		struct block_sequence block_sequence[],
459*f005ef32Sjsg 		int num_steps);
460*f005ef32Sjsg 
461*f005ef32Sjsg void hwss_build_fast_sequence(struct dc *dc,
462*f005ef32Sjsg 		struct dc_dmub_cmd *dc_dmub_cmd,
463*f005ef32Sjsg 		unsigned int dmub_cmd_count,
464*f005ef32Sjsg 		struct block_sequence block_sequence[],
465*f005ef32Sjsg 		int *num_steps,
466*f005ef32Sjsg 		struct pipe_ctx *pipe_ctx);
467*f005ef32Sjsg 
468*f005ef32Sjsg void hwss_send_dmcub_cmd(union block_sequence_params *params);
469*f005ef32Sjsg 
470*f005ef32Sjsg void hwss_program_manual_trigger(union block_sequence_params *params);
471*f005ef32Sjsg 
472*f005ef32Sjsg void hwss_setup_dpp(union block_sequence_params *params);
473*f005ef32Sjsg 
474*f005ef32Sjsg void hwss_program_bias_and_scale(union block_sequence_params *params);
475*f005ef32Sjsg 
476*f005ef32Sjsg void hwss_power_on_mpc_mem_pwr(union block_sequence_params *params);
477*f005ef32Sjsg 
478*f005ef32Sjsg void hwss_set_output_csc(union block_sequence_params *params);
479*f005ef32Sjsg 
480*f005ef32Sjsg void hwss_set_ocsc_default(union block_sequence_params *params);
481*f005ef32Sjsg 
482fb4d8502Sjsg #endif /* __DC_HW_SEQUENCER_H__ */
483