1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26#ifndef __DAL_HUBP_H__
27#define __DAL_HUBP_H__
28
29#include "mem_input.h"
30
31#define OPP_ID_INVALID 0xf
32
33
34enum cursor_pitch {
35 CURSOR_PITCH_64_PIXELS = 0,
36 CURSOR_PITCH_128_PIXELS,
37 CURSOR_PITCH_256_PIXELS
38};
39
40enum cursor_lines_per_chunk {
41#if defined(CONFIG_DRM_AMD_DC_DCN2_0)
42 CURSOR_LINE_PER_CHUNK_1 = 0,
43#endif
44 CURSOR_LINE_PER_CHUNK_2 = 1,
45 CURSOR_LINE_PER_CHUNK_4,
46 CURSOR_LINE_PER_CHUNK_8,
47 CURSOR_LINE_PER_CHUNK_16
48};
49
50struct hubp {
51 const struct hubp_funcs *funcs;
52 struct dc_context *ctx;
53 struct dc_plane_address request_address;
54 int inst;
55
56
57 int opp_id;
58 int mpcc_id;
59 struct dc_cursor_attributes curs_attr;
60 bool power_gated;
61};
62
63struct hubp_funcs {
64 void (*hubp_setup)(
65 struct hubp *hubp,
66 struct _vcs_dpi_display_dlg_regs_st *dlg_regs,
67 struct _vcs_dpi_display_ttu_regs_st *ttu_regs,
68 struct _vcs_dpi_display_rq_regs_st *rq_regs,
69 struct _vcs_dpi_display_pipe_dest_params_st *pipe_dest);
70
71 void (*hubp_setup_interdependent)(
72 struct hubp *hubp,
73 struct _vcs_dpi_display_dlg_regs_st *dlg_regs,
74 struct _vcs_dpi_display_ttu_regs_st *ttu_regs);
75
76 void (*dcc_control)(struct hubp *hubp, bool enable,
77 bool independent_64b_blks);
78 void (*mem_program_viewport)(
79 struct hubp *hubp,
80 const struct rect *viewport,
81 const struct rect *viewport_c);
82
83 bool (*hubp_program_surface_flip_and_addr)(
84 struct hubp *hubp,
85 const struct dc_plane_address *address,
86 bool flip_immediate);
87
88 void (*hubp_program_pte_vm)(
89 struct hubp *hubp,
90 enum surface_pixel_format format,
91 union dc_tiling_info *tiling_info,
92 enum dc_rotation_angle rotation);
93
94 void (*hubp_set_vm_system_aperture_settings)(
95 struct hubp *hubp,
96 struct vm_system_aperture_param *apt);
97
98 void (*hubp_set_vm_context0_settings)(
99 struct hubp *hubp,
100 const struct vm_context0_param *vm0);
101
102 void (*hubp_program_surface_config)(
103 struct hubp *hubp,
104 enum surface_pixel_format format,
105 union dc_tiling_info *tiling_info,
106 union plane_size *plane_size,
107 enum dc_rotation_angle rotation,
108 struct dc_plane_dcc_param *dcc,
109 bool horizontal_mirror,
110 unsigned int compa_level);
111
112 bool (*hubp_is_flip_pending)(struct hubp *hubp);
113
114 void (*hubp_update_dchub)(struct hubp *hubp,
115 struct dchub_init_data *dh_data);
116
117 void (*set_blank)(struct hubp *hubp, bool blank);
118 void (*set_hubp_blank_en)(struct hubp *hubp, bool blank);
119
120 void (*set_cursor_attributes)(
121 struct hubp *hubp,
122 const struct dc_cursor_attributes *attr);
123
124 void (*set_cursor_position)(
125 struct hubp *hubp,
126 const struct dc_cursor_position *pos,
127 const struct dc_cursor_mi_param *param);
128
129 void (*hubp_disconnect)(struct hubp *hubp);
130
131 void (*hubp_clk_cntl)(struct hubp *hubp, bool enable);
132 void (*hubp_vtg_sel)(struct hubp *hubp, uint32_t otg_inst);
133 void (*hubp_read_state)(struct hubp *hubp);
134 void (*hubp_clear_underflow)(struct hubp *hubp);
135 void (*hubp_disable_control)(struct hubp *hubp, bool disable_hubp);
136 unsigned int (*hubp_get_underflow_status)(struct hubp *hubp);
137 void (*hubp_init)(struct hubp *hubp);
138
139#if defined(CONFIG_DRM_AMD_DC_DCN2_0)
140 void (*dmdata_set_attributes)(
141 struct hubp *hubp,
142 const struct dc_dmdata_attributes *attr);
143
144 void (*dmdata_load)(
145 struct hubp *hubp,
146 uint32_t dmdata_sw_size,
147 const uint32_t *dmdata_sw_data);
148 bool (*dmdata_status_done)(struct hubp *hubp);
149 void (*hubp_enable_tripleBuffer)(
150 struct hubp *hubp,
151 bool enable);
152
153 bool (*hubp_is_triplebuffer_enabled)(
154 struct hubp *hubp);
155
156 void (*hubp_set_flip_control_surface_gsl)(
157 struct hubp *hubp,
158 bool enable);
159#endif
160
161};
162
163#endif
164