blob: c2277d1e195b4544635aa0f218b95884af595c3b [file] [log] [blame]
Harry Wentland45622362017-09-12 15:58:20 -04001/*
2 * Copyright 2015 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#ifndef __DC_HW_SEQUENCER_H__
27#define __DC_HW_SEQUENCER_H__
Bhawanpreet Lakhafb3466a2017-08-01 15:00:25 -040028#include "dc_types.h"
29#include "clock_source.h"
30#include "inc/hw/timing_generator.h"
Yue Hin Laub51adc77e2017-12-04 16:58:11 -050031#include "inc/hw/opp.h"
Andrew Jiang87401962017-09-25 18:03:14 -040032#include "inc/hw/link_encoder.h"
Bhawanpreet Lakhafb3466a2017-08-01 15:00:25 -040033#include "core_status.h"
Harry Wentland45622362017-09-12 15:58:20 -040034
Yongqiang Sun5282cbe2018-03-27 10:05:10 -040035#define EDP_BACKLIGHT_RAMP_DISABLE_LEVEL 0xFFFFFFFF
36
Harry Wentland45622362017-09-12 15:58:20 -040037enum pipe_gating_control {
38 PIPE_GATING_CONTROL_DISABLE = 0,
39 PIPE_GATING_CONTROL_ENABLE,
40 PIPE_GATING_CONTROL_INIT
41};
42
Charlene Liuf0828112017-02-28 15:23:38 -050043struct dce_hwseq_wa {
44 bool blnd_crtc_trigger;
Yongqiang Sun7f914a62017-11-06 14:40:31 -050045 bool DEGVIDCN10_253;
Yongqiang Sun5cc26872017-11-15 16:21:34 -050046 bool false_optc_underflow;
Dmytro Laktyushkin7144d3c2018-06-05 13:14:13 -040047 bool DEGVIDCN10_254;
Yongqiang Sun7f914a62017-11-06 14:40:31 -050048};
49
50struct hwseq_wa_state {
51 bool DEGVIDCN10_253_applied;
Charlene Liuf0828112017-02-28 15:23:38 -050052};
53
54struct dce_hwseq {
55 struct dc_context *ctx;
56 const struct dce_hwseq_registers *regs;
57 const struct dce_hwseq_shift *shifts;
58 const struct dce_hwseq_mask *masks;
59 struct dce_hwseq_wa wa;
Yongqiang Sun7f914a62017-11-06 14:40:31 -050060 struct hwseq_wa_state wa_state;
Charlene Liuf0828112017-02-28 15:23:38 -050061};
62
Bhawanpreet Lakhafb3466a2017-08-01 15:00:25 -040063struct pipe_ctx;
Jerry Zuo608ac7b2017-08-25 16:16:10 -040064struct dc_state;
Bhawanpreet Lakhafb3466a2017-08-01 15:00:25 -040065struct dchub_init_data;
66struct dc_static_screen_events;
67struct resource_pool;
68struct resource_context;
Eric Bernstein31582232018-04-09 17:19:27 -040069struct stream_resource;
Harry Wentland45622362017-09-12 15:58:20 -040070
71struct hw_sequencer_funcs {
72
Bhawanpreet Lakhafb3466a2017-08-01 15:00:25 -040073 void (*init_hw)(struct dc *dc);
Harry Wentland45622362017-09-12 15:58:20 -040074
75 enum dc_status (*apply_ctx_to_hw)(
Jerry Zuo608ac7b2017-08-25 16:16:10 -040076 struct dc *dc, struct dc_state *context);
Harry Wentland45622362017-09-12 15:58:20 -040077
78 void (*reset_hw_ctx_wrap)(
Jerry Zuo608ac7b2017-08-25 16:16:10 -040079 struct dc *dc, struct dc_state *context);
Harry Wentland45622362017-09-12 15:58:20 -040080
Harry Wentland45622362017-09-12 15:58:20 -040081 void (*apply_ctx_for_surface)(
Bhawanpreet Lakhafb3466a2017-08-01 15:00:25 -040082 struct dc *dc,
Eric Yang3e9ad6162017-08-03 00:22:25 -040083 const struct dc_stream_state *stream,
84 int num_planes,
Jerry Zuo608ac7b2017-08-25 16:16:10 -040085 struct dc_state *context);
Harry Wentland45622362017-09-12 15:58:20 -040086
Zeyu Fan1bf56e62017-06-02 17:25:49 -040087 void (*program_gamut_remap)(
88 struct pipe_ctx *pipe_ctx);
89
Yue Hin Lauabe07e82017-06-28 17:21:42 -040090 void (*program_csc_matrix)(
91 struct pipe_ctx *pipe_ctx,
92 enum dc_color_space colorspace,
93 uint16_t *matrix);
94
Eric Bernstein8e357612018-04-09 15:47:42 -040095 void (*program_output_csc)(struct dc *dc,
96 struct pipe_ctx *pipe_ctx,
97 enum dc_color_space colorspace,
98 uint16_t *matrix,
99 int opp_id);
100
Harry Wentland45622362017-09-12 15:58:20 -0400101 void (*update_plane_addr)(
Bhawanpreet Lakhafb3466a2017-08-01 15:00:25 -0400102 const struct dc *dc,
Harry Wentland45622362017-09-12 15:58:20 -0400103 struct pipe_ctx *pipe_ctx);
104
Eric Bernsteinc2437b12018-05-16 16:19:50 -0400105 void (*plane_atomic_disconnect)(
106 struct dc *dc,
107 struct pipe_ctx *pipe_ctx);
108
Zeyu Fan08b16882017-07-23 18:30:15 -0400109 void (*update_dchub)(
110 struct dce_hwseq *hws,
111 struct dchub_init_data *dh_data);
112
Eric Bernsteinc2437b12018-05-16 16:19:50 -0400113 void (*update_mpcc)(
114 struct dc *dc,
115 struct pipe_ctx *pipe_ctx);
116
Harry Wentland45622362017-09-12 15:58:20 -0400117 void (*update_pending_status)(
118 struct pipe_ctx *pipe_ctx);
119
Anthony Koo90e508b2016-12-15 12:09:46 -0500120 bool (*set_input_transfer_func)(
Anthony Koofb735a92016-12-13 13:59:41 -0500121 struct pipe_ctx *pipe_ctx,
Harry Wentland3be5262e2017-07-27 09:55:38 -0400122 const struct dc_plane_state *plane_state);
Harry Wentland45622362017-09-12 15:58:20 -0400123
Anthony Koo90e508b2016-12-15 12:09:46 -0500124 bool (*set_output_transfer_func)(
125 struct pipe_ctx *pipe_ctx,
Harry Wentland0971c402017-07-27 09:33:33 -0400126 const struct dc_stream_state *stream);
Anthony Koo90e508b2016-12-15 12:09:46 -0500127
Bhawanpreet Lakhafb3466a2017-08-01 15:00:25 -0400128 void (*power_down)(struct dc *dc);
Harry Wentland45622362017-09-12 15:58:20 -0400129
Yongqiang Sun25292022017-12-19 11:51:40 -0500130 void (*enable_accelerated_mode)(struct dc *dc, struct dc_state *context);
Harry Wentland45622362017-09-12 15:58:20 -0400131
132 void (*enable_timing_synchronization)(
Bhawanpreet Lakhafb3466a2017-08-01 15:00:25 -0400133 struct dc *dc,
Harry Wentland45622362017-09-12 15:58:20 -0400134 int group_index,
135 int group_size,
136 struct pipe_ctx *grouped_pipes[]);
137
Mikita Lipskifa2123d2017-10-17 15:29:22 -0400138 void (*enable_per_frame_crtc_position_reset)(
139 struct dc *dc,
140 int group_size,
141 struct pipe_ctx *grouped_pipes[]);
142
Harry Wentland45622362017-09-12 15:58:20 -0400143 void (*enable_display_pipe_clock_gating)(
144 struct dc_context *ctx,
145 bool clock_gating);
146
147 bool (*enable_display_power_gating)(
Bhawanpreet Lakhafb3466a2017-08-01 15:00:25 -0400148 struct dc *dc,
Harry Wentland45622362017-09-12 15:58:20 -0400149 uint8_t controller_id,
150 struct dc_bios *dcb,
151 enum pipe_gating_control power_gating);
152
Yongqiang Sun7f914a62017-11-06 14:40:31 -0500153 void (*disable_plane)(struct dc *dc, struct pipe_ctx *pipe_ctx);
Yongqiang Sun18f7a1e2017-03-23 10:34:06 -0400154
Harry Wentland45622362017-09-12 15:58:20 -0400155 void (*update_info_frame)(struct pipe_ctx *pipe_ctx);
156
157 void (*enable_stream)(struct pipe_ctx *pipe_ctx);
158
Charlene Liu41766642017-09-27 23:23:16 -0400159 void (*disable_stream)(struct pipe_ctx *pipe_ctx,
160 int option);
Harry Wentland45622362017-09-12 15:58:20 -0400161
162 void (*unblank_stream)(struct pipe_ctx *pipe_ctx,
163 struct dc_link_settings *link_settings);
164
Charlene Liu41b49742018-01-11 15:31:26 -0500165 void (*blank_stream)(struct pipe_ctx *pipe_ctx);
Anthony Koo1a058732018-05-10 14:21:47 -0400166
167 void (*enable_audio_stream)(struct pipe_ctx *pipe_ctx);
168
169 void (*disable_audio_stream)(struct pipe_ctx *pipe_ctx, int option);
170
Harry Wentland45622362017-09-12 15:58:20 -0400171 void (*pipe_control_lock)(
Bhawanpreet Lakhafb3466a2017-08-01 15:00:25 -0400172 struct dc *dc,
Charlene Liuf0828112017-02-28 15:23:38 -0500173 struct pipe_ctx *pipe,
Harry Wentland45622362017-09-12 15:58:20 -0400174 bool lock);
Eric Bernstein31582232018-04-09 17:19:27 -0400175 void (*blank_pixel_data)(
176 struct dc *dc,
Eric Bernsteinea4a2022018-05-01 15:21:42 -0400177 struct pipe_ctx *pipe_ctx,
Eric Bernstein31582232018-04-09 17:19:27 -0400178 bool blank);
Harry Wentland45622362017-09-12 15:58:20 -0400179
Dmytro Laktyushkincf437592017-02-22 17:52:22 -0500180 void (*set_bandwidth)(
Bhawanpreet Lakhafb3466a2017-08-01 15:00:25 -0400181 struct dc *dc,
Jerry Zuo608ac7b2017-08-25 16:16:10 -0400182 struct dc_state *context,
Dmytro Laktyushkine21db6d2018-05-24 14:39:01 -0400183 bool safe_to_lower);
Harry Wentland45622362017-09-12 15:58:20 -0400184
185 void (*set_drr)(struct pipe_ctx **pipe_ctx, int num_pipes,
186 int vmin, int vmax);
187
Eric Cook72ada5f2017-04-18 15:24:50 -0400188 void (*get_position)(struct pipe_ctx **pipe_ctx, int num_pipes,
189 struct crtc_position *position);
190
Harry Wentland45622362017-09-12 15:58:20 -0400191 void (*set_static_screen_control)(struct pipe_ctx **pipe_ctx,
Sylvia Tsai94267b32017-04-21 15:29:55 -0400192 int num_pipes, const struct dc_static_screen_events *events);
Harry Wentland45622362017-09-12 15:58:20 -0400193
Eric Bernstein31582232018-04-09 17:19:27 -0400194 enum dc_status (*enable_stream_timing)(
Harry Wentland45622362017-09-12 15:58:20 -0400195 struct pipe_ctx *pipe_ctx,
Jerry Zuo608ac7b2017-08-25 16:16:10 -0400196 struct dc_state *context,
Bhawanpreet Lakhafb3466a2017-08-01 15:00:25 -0400197 struct dc *dc);
Vitaly Prosyak9edba552017-06-07 12:23:59 -0500198
199 void (*setup_stereo)(
200 struct pipe_ctx *pipe_ctx,
Bhawanpreet Lakhafb3466a2017-08-01 15:00:25 -0400201 struct dc *dc);
Charlene Liu15e17332017-07-17 16:04:02 -0400202
203 void (*set_avmute)(struct pipe_ctx *pipe_ctx, bool enable);
Tony Cheng6d244be2017-07-20 00:12:20 -0400204
Bhawanpreet Lakhafb3466a2017-08-01 15:00:25 -0400205 void (*log_hw_state)(struct dc *dc);
Eric Yang87480682017-07-23 15:18:57 -0400206
Bhawanpreet Lakhafb3466a2017-08-01 15:00:25 -0400207 void (*wait_for_mpcc_disconnect)(struct dc *dc,
Eric Yang6be425f2017-07-24 10:47:02 -0400208 struct resource_pool *res_pool,
209 struct pipe_ctx *pipe_ctx);
Hersen Wu41f97c02017-08-24 17:40:00 -0400210
Hersen Wu6bf52022017-09-05 12:20:39 -0400211 void (*ready_shared_resources)(struct dc *dc, struct dc_state *context);
Hersen Wu41f97c02017-08-24 17:40:00 -0400212 void (*optimize_shared_resources)(struct dc *dc);
Hersen Wu631aaa02017-10-31 15:55:15 -0400213 void (*pplib_apply_display_requirements)(
214 struct dc *dc,
215 struct dc_state *context);
Andrew Jiang87401962017-09-25 18:03:14 -0400216 void (*edp_power_control)(
Andrew Jiang069d4182017-09-26 19:45:43 -0400217 struct dc_link *link,
Andrew Jiang87401962017-09-25 18:03:14 -0400218 bool enable);
219 void (*edp_backlight_control)(
Yue Hin Lau5eefbc42017-09-15 17:42:20 -0400220 struct dc_link *link,
221 bool enable);
Yongqiang Sun904623e2017-11-24 16:31:03 -0500222 void (*edp_wait_for_hpd_ready)(struct dc_link *link, bool power_up);
Hersen Wu631aaa02017-10-31 15:55:15 -0400223
Eric Yang33fd17d92018-01-18 19:07:54 -0500224 void (*set_cursor_position)(struct pipe_ctx *pipe);
225 void (*set_cursor_attribute)(struct pipe_ctx *pipe);
Eric Bernstein8e357612018-04-09 15:47:42 -0400226
Harry Wentland45622362017-09-12 15:58:20 -0400227};
228
229void color_space_to_black_color(
Bhawanpreet Lakhafb3466a2017-08-01 15:00:25 -0400230 const struct dc *dc,
Harry Wentland45622362017-09-12 15:58:20 -0400231 enum dc_color_space colorspace,
232 struct tg_color *black_color);
233
Hersen Wu4b5e7d62017-01-06 16:23:18 -0500234bool hwss_wait_for_blank_complete(
235 struct timing_generator *tg);
236
Vitaly Prosyak38cb3e92017-12-01 11:42:18 -0600237const uint16_t *find_color_matrix(
238 enum dc_color_space color_space,
239 uint32_t *array_size);
240
Harry Wentland45622362017-09-12 15:58:20 -0400241#endif /* __DC_HW_SEQUENCER_H__ */