xref: /openbmc/linux/drivers/gpu/drm/amd/display/dc/inc/hw/mem_input.h (revision 4f2c0a4acffbec01079c28f839422e64ddeff004)
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  #ifndef __DAL_MEM_INPUT_H__
26  #define __DAL_MEM_INPUT_H__
27  
28  #include "dc.h"
29  #include "include/grph_object_id.h"
30  
31  #include "dml/display_mode_structs.h"
32  
33  struct dchub_init_data;
34  struct cstate_pstate_watermarks_st {
35  	uint32_t cstate_exit_ns;
36  	uint32_t cstate_exit_z8_ns;
37  	uint32_t cstate_enter_plus_exit_z8_ns;
38  	uint32_t cstate_enter_plus_exit_ns;
39  	uint32_t pstate_change_ns;
40  	uint32_t fclk_pstate_change_ns;
41  };
42  
43  struct dcn_watermarks {
44  	uint32_t pte_meta_urgent_ns;
45  	uint32_t urgent_ns;
46  	uint32_t frac_urg_bw_nom;
47  	uint32_t frac_urg_bw_flip;
48  	int32_t urgent_latency_ns;
49  	struct cstate_pstate_watermarks_st cstate_pstate;
50  	uint32_t usr_retraining_ns;
51  };
52  
53  struct dcn_watermark_set {
54  	struct dcn_watermarks a;
55  	struct dcn_watermarks b;
56  	struct dcn_watermarks c;
57  	struct dcn_watermarks d;
58  };
59  
60  struct dce_watermarks {
61  	int a_mark;
62  	int b_mark;
63  	int c_mark;
64  	int d_mark;
65  };
66  
67  struct stutter_modes {
68  	bool enhanced;
69  	bool quad_dmif_buffer;
70  	bool watermark_nb_pstate;
71  };
72  
73  struct mem_input {
74  	const struct mem_input_funcs *funcs;
75  	struct dc_context *ctx;
76  	struct dc_plane_address request_address;
77  	struct dc_plane_address current_address;
78  	int inst;
79  	struct stutter_modes stutter_mode;
80  };
81  
82  struct vm_system_aperture_param {
83  	PHYSICAL_ADDRESS_LOC sys_default;
84  	PHYSICAL_ADDRESS_LOC sys_low;
85  	PHYSICAL_ADDRESS_LOC sys_high;
86  };
87  
88  struct vm_context0_param {
89  	PHYSICAL_ADDRESS_LOC pte_base;
90  	PHYSICAL_ADDRESS_LOC pte_start;
91  	PHYSICAL_ADDRESS_LOC pte_end;
92  	PHYSICAL_ADDRESS_LOC fault_default;
93  };
94  
95  struct mem_input_funcs {
96  	void (*mem_input_setup)(
97  			struct mem_input *mem_input,
98  			struct _vcs_dpi_display_dlg_regs_st *dlg_regs,
99  			struct _vcs_dpi_display_ttu_regs_st *ttu_regs,
100  			struct _vcs_dpi_display_rq_regs_st *rq_regs,
101  			struct _vcs_dpi_display_pipe_dest_params_st *pipe_dest);
102  
103  	void (*dcc_control)(struct mem_input *mem_input, bool enable,
104  			bool independent_64b_blks);
105  	void (*mem_program_viewport)(
106  			struct mem_input *mem_input,
107  			const struct rect *viewport,
108  			const struct rect *viewport_c);
109  
110  	void (*mem_input_program_display_marks)(
111  		struct mem_input *mem_input,
112  		struct dce_watermarks nbp,
113  		struct dce_watermarks stutter,
114  		struct dce_watermarks stutter_enter,
115  		struct dce_watermarks urgent,
116  		uint32_t total_dest_line_time_ns);
117  
118  	void (*mem_input_program_chroma_display_marks)(
119  			struct mem_input *mem_input,
120  			struct dce_watermarks nbp,
121  			struct dce_watermarks stutter,
122  			struct dce_watermarks urgent,
123  			uint32_t total_dest_line_time_ns);
124  
125  	void (*allocate_mem_input)(
126  		struct mem_input *mem_input,
127  		uint32_t h_total,/* for current target */
128  		uint32_t v_total,/* for current target */
129  		uint32_t pix_clk_khz,/* for current target */
130  		uint32_t total_streams_num);
131  
132  	void (*free_mem_input)(
133  		struct mem_input *mem_input,
134  		uint32_t paths_num);
135  
136  	bool (*mem_input_program_surface_flip_and_addr)(
137  		struct mem_input *mem_input,
138  		const struct dc_plane_address *address,
139  		bool flip_immediate);
140  
141  	void (*mem_input_program_pte_vm)(
142  		struct mem_input *mem_input,
143  		enum surface_pixel_format format,
144  		union dc_tiling_info *tiling_info,
145  		enum dc_rotation_angle rotation);
146  
147  	void (*mem_input_set_vm_system_aperture_settings)(
148  			struct mem_input *mem_input,
149  			struct vm_system_aperture_param *apt);
150  
151  	void (*mem_input_set_vm_context0_settings)(
152  			struct mem_input *mem_input,
153  			const struct vm_context0_param *vm0);
154  
155  	void (*mem_input_program_surface_config)(
156  		struct mem_input *mem_input,
157  		enum surface_pixel_format format,
158  		union dc_tiling_info *tiling_info,
159  		struct plane_size *plane_size,
160  		enum dc_rotation_angle rotation,
161  		struct dc_plane_dcc_param *dcc,
162  		bool horizontal_mirror);
163  
164  	bool (*mem_input_is_flip_pending)(struct mem_input *mem_input);
165  
166  	void (*mem_input_update_dchub)(struct mem_input *mem_input,
167  				struct dchub_init_data *dh_data);
168  
169  	void (*set_blank)(struct mem_input *mi, bool blank);
170  	void (*set_hubp_blank_en)(struct mem_input *mi, bool blank);
171  
172  	void (*set_cursor_attributes)(
173  			struct mem_input *mem_input,
174  			const struct dc_cursor_attributes *attr);
175  
176  	void (*set_cursor_position)(
177  			struct mem_input *mem_input,
178  			const struct dc_cursor_position *pos,
179  			const struct dc_cursor_mi_param *param);
180  
181  };
182  
183  #endif
184