1 /* 2 * dc_debug.c 3 * 4 * Created on: Nov 3, 2016 5 * Author: yonsun 6 */ 7 8 #include "dm_services.h" 9 10 #include "dc.h" 11 12 #include "core_status.h" 13 #include "core_types.h" 14 #include "hw_sequencer.h" 15 16 #include "resource.h" 17 18 #define SURFACE_TRACE(...) do {\ 19 if (dc->debug.surface_trace) \ 20 dm_logger_write(logger, \ 21 LOG_IF_TRACE, \ 22 ##__VA_ARGS__); \ 23 } while (0) 24 25 #define TIMING_TRACE(...) do {\ 26 if (dc->debug.timing_trace) \ 27 dm_logger_write(logger, \ 28 LOG_SYNC, \ 29 ##__VA_ARGS__); \ 30 } while (0) 31 32 void pre_surface_trace( 33 const struct dc *dc, 34 const struct dc_surface *const *surfaces, 35 int surface_count) 36 { 37 int i; 38 struct core_dc *core_dc = DC_TO_CORE(dc); 39 struct dal_logger *logger = core_dc->ctx->logger; 40 41 for (i = 0; i < surface_count; i++) { 42 const struct dc_surface *surface = surfaces[i]; 43 44 SURFACE_TRACE("Surface %d:\n", i); 45 46 SURFACE_TRACE( 47 "surface->visible = %d;\n" 48 "surface->flip_immediate = %d;\n" 49 "surface->address.type = %d;\n" 50 "surface->address.grph.addr.quad_part = 0x%X;\n" 51 "surface->address.grph.meta_addr.quad_part = 0x%X;\n" 52 "surface->scaling_quality.h_taps = %d;\n" 53 "surface->scaling_quality.v_taps = %d;\n" 54 "surface->scaling_quality.h_taps_c = %d;\n" 55 "surface->scaling_quality.v_taps_c = %d;\n", 56 surface->visible, 57 surface->flip_immediate, 58 surface->address.type, 59 surface->address.grph.addr.quad_part, 60 surface->address.grph.meta_addr.quad_part, 61 surface->scaling_quality.h_taps, 62 surface->scaling_quality.v_taps, 63 surface->scaling_quality.h_taps_c, 64 surface->scaling_quality.v_taps_c); 65 66 SURFACE_TRACE( 67 "surface->src_rect.x = %d;\n" 68 "surface->src_rect.y = %d;\n" 69 "surface->src_rect.width = %d;\n" 70 "surface->src_rect.height = %d;\n" 71 "surface->dst_rect.x = %d;\n" 72 "surface->dst_rect.y = %d;\n" 73 "surface->dst_rect.width = %d;\n" 74 "surface->dst_rect.height = %d;\n" 75 "surface->clip_rect.x = %d;\n" 76 "surface->clip_rect.y = %d;\n" 77 "surface->clip_rect.width = %d;\n" 78 "surface->clip_rect.height = %d;\n", 79 surface->src_rect.x, 80 surface->src_rect.y, 81 surface->src_rect.width, 82 surface->src_rect.height, 83 surface->dst_rect.x, 84 surface->dst_rect.y, 85 surface->dst_rect.width, 86 surface->dst_rect.height, 87 surface->clip_rect.x, 88 surface->clip_rect.y, 89 surface->clip_rect.width, 90 surface->clip_rect.height); 91 92 SURFACE_TRACE( 93 "surface->plane_size.grph.surface_size.x = %d;\n" 94 "surface->plane_size.grph.surface_size.y = %d;\n" 95 "surface->plane_size.grph.surface_size.width = %d;\n" 96 "surface->plane_size.grph.surface_size.height = %d;\n" 97 "surface->plane_size.grph.surface_pitch = %d;\n" 98 "surface->plane_size.grph.meta_pitch = %d;\n", 99 surface->plane_size.grph.surface_size.x, 100 surface->plane_size.grph.surface_size.y, 101 surface->plane_size.grph.surface_size.width, 102 surface->plane_size.grph.surface_size.height, 103 surface->plane_size.grph.surface_pitch, 104 surface->plane_size.grph.meta_pitch); 105 106 107 SURFACE_TRACE( 108 "surface->tiling_info.gfx8.num_banks = %d;\n" 109 "surface->tiling_info.gfx8.bank_width = %d;\n" 110 "surface->tiling_info.gfx8.bank_width_c = %d;\n" 111 "surface->tiling_info.gfx8.bank_height = %d;\n" 112 "surface->tiling_info.gfx8.bank_height_c = %d;\n" 113 "surface->tiling_info.gfx8.tile_aspect = %d;\n" 114 "surface->tiling_info.gfx8.tile_aspect_c = %d;\n" 115 "surface->tiling_info.gfx8.tile_split = %d;\n" 116 "surface->tiling_info.gfx8.tile_split_c = %d;\n" 117 "surface->tiling_info.gfx8.tile_mode = %d;\n" 118 "surface->tiling_info.gfx8.tile_mode_c = %d;\n", 119 surface->tiling_info.gfx8.num_banks, 120 surface->tiling_info.gfx8.bank_width, 121 surface->tiling_info.gfx8.bank_width_c, 122 surface->tiling_info.gfx8.bank_height, 123 surface->tiling_info.gfx8.bank_height_c, 124 surface->tiling_info.gfx8.tile_aspect, 125 surface->tiling_info.gfx8.tile_aspect_c, 126 surface->tiling_info.gfx8.tile_split, 127 surface->tiling_info.gfx8.tile_split_c, 128 surface->tiling_info.gfx8.tile_mode, 129 surface->tiling_info.gfx8.tile_mode_c); 130 131 SURFACE_TRACE( 132 "surface->tiling_info.gfx8.pipe_config = %d;\n" 133 "surface->tiling_info.gfx8.array_mode = %d;\n" 134 "surface->color_space = %d;\n" 135 "surface->dcc.enable = %d;\n" 136 "surface->format = %d;\n" 137 "surface->rotation = %d;\n" 138 "surface->stereo_format = %d;\n", 139 surface->tiling_info.gfx8.pipe_config, 140 surface->tiling_info.gfx8.array_mode, 141 surface->color_space, 142 surface->dcc.enable, 143 surface->format, 144 surface->rotation, 145 surface->stereo_format); 146 SURFACE_TRACE("\n"); 147 } 148 SURFACE_TRACE("\n"); 149 } 150 151 void update_surface_trace( 152 const struct dc *dc, 153 const struct dc_surface_update *updates, 154 int surface_count) 155 { 156 int i; 157 struct core_dc *core_dc = DC_TO_CORE(dc); 158 struct dal_logger *logger = core_dc->ctx->logger; 159 160 for (i = 0; i < surface_count; i++) { 161 const struct dc_surface_update *update = &updates[i]; 162 163 SURFACE_TRACE("Update %d\n", i); 164 if (update->flip_addr) { 165 SURFACE_TRACE("flip_addr->address.type = %d;\n" 166 "flip_addr->address.grph.addr.quad_part = 0x%X;\n" 167 "flip_addr->address.grph.meta_addr.quad_part = 0x%X;\n" 168 "flip_addr->flip_immediate = %d;\n", 169 update->flip_addr->address.type, 170 update->flip_addr->address.grph.addr.quad_part, 171 update->flip_addr->address.grph.meta_addr.quad_part, 172 update->flip_addr->flip_immediate); 173 } 174 175 if (update->plane_info) { 176 SURFACE_TRACE( 177 "plane_info->color_space = %d;\n" 178 "plane_info->format = %d;\n" 179 "plane_info->plane_size.grph.meta_pitch = %d;\n" 180 "plane_info->plane_size.grph.surface_pitch = %d;\n" 181 "plane_info->plane_size.grph.surface_size.height = %d;\n" 182 "plane_info->plane_size.grph.surface_size.width = %d;\n" 183 "plane_info->plane_size.grph.surface_size.x = %d;\n" 184 "plane_info->plane_size.grph.surface_size.y = %d;\n" 185 "plane_info->rotation = %d;\n", 186 update->plane_info->color_space, 187 update->plane_info->format, 188 update->plane_info->plane_size.grph.meta_pitch, 189 update->plane_info->plane_size.grph.surface_pitch, 190 update->plane_info->plane_size.grph.surface_size.height, 191 update->plane_info->plane_size.grph.surface_size.width, 192 update->plane_info->plane_size.grph.surface_size.x, 193 update->plane_info->plane_size.grph.surface_size.y, 194 update->plane_info->rotation, 195 update->plane_info->stereo_format); 196 197 SURFACE_TRACE( 198 "plane_info->tiling_info.gfx8.num_banks = %d;\n" 199 "plane_info->tiling_info.gfx8.bank_width = %d;\n" 200 "plane_info->tiling_info.gfx8.bank_width_c = %d;\n" 201 "plane_info->tiling_info.gfx8.bank_height = %d;\n" 202 "plane_info->tiling_info.gfx8.bank_height_c = %d;\n" 203 "plane_info->tiling_info.gfx8.tile_aspect = %d;\n" 204 "plane_info->tiling_info.gfx8.tile_aspect_c = %d;\n" 205 "plane_info->tiling_info.gfx8.tile_split = %d;\n" 206 "plane_info->tiling_info.gfx8.tile_split_c = %d;\n" 207 "plane_info->tiling_info.gfx8.tile_mode = %d;\n" 208 "plane_info->tiling_info.gfx8.tile_mode_c = %d;\n", 209 update->plane_info->tiling_info.gfx8.num_banks, 210 update->plane_info->tiling_info.gfx8.bank_width, 211 update->plane_info->tiling_info.gfx8.bank_width_c, 212 update->plane_info->tiling_info.gfx8.bank_height, 213 update->plane_info->tiling_info.gfx8.bank_height_c, 214 update->plane_info->tiling_info.gfx8.tile_aspect, 215 update->plane_info->tiling_info.gfx8.tile_aspect_c, 216 update->plane_info->tiling_info.gfx8.tile_split, 217 update->plane_info->tiling_info.gfx8.tile_split_c, 218 update->plane_info->tiling_info.gfx8.tile_mode, 219 update->plane_info->tiling_info.gfx8.tile_mode_c); 220 221 SURFACE_TRACE( 222 "plane_info->tiling_info.gfx8.pipe_config = %d;\n" 223 "plane_info->tiling_info.gfx8.array_mode = %d;\n" 224 "plane_info->visible = %d;\n", 225 update->plane_info->tiling_info.gfx8.pipe_config, 226 update->plane_info->tiling_info.gfx8.array_mode, 227 update->plane_info->visible); 228 } 229 230 if (update->scaling_info) { 231 SURFACE_TRACE( 232 "scaling_info->src_rect.x = %d;\n" 233 "scaling_info->src_rect.y = %d;\n" 234 "scaling_info->src_rect.width = %d;\n" 235 "scaling_info->src_rect.height = %d;\n" 236 "scaling_info->dst_rect.x = %d;\n" 237 "scaling_info->dst_rect.y = %d;\n" 238 "scaling_info->dst_rect.width = %d;\n" 239 "scaling_info->dst_rect.height = %d;\n" 240 "scaling_info->clip_rect.x = %d;\n" 241 "scaling_info->clip_rect.y = %d;\n" 242 "scaling_info->clip_rect.width = %d;\n" 243 "scaling_info->clip_rect.height = %d;\n" 244 "scaling_info->scaling_quality.h_taps = %d;\n" 245 "scaling_info->scaling_quality.v_taps = %d;\n" 246 "scaling_info->scaling_quality.h_taps_c = %d;\n" 247 "scaling_info->scaling_quality.v_taps_c = %d;\n", 248 update->scaling_info->src_rect.x, 249 update->scaling_info->src_rect.y, 250 update->scaling_info->src_rect.width, 251 update->scaling_info->src_rect.height, 252 update->scaling_info->dst_rect.x, 253 update->scaling_info->dst_rect.y, 254 update->scaling_info->dst_rect.width, 255 update->scaling_info->dst_rect.height, 256 update->scaling_info->clip_rect.x, 257 update->scaling_info->clip_rect.y, 258 update->scaling_info->clip_rect.width, 259 update->scaling_info->clip_rect.height, 260 update->scaling_info->scaling_quality.h_taps, 261 update->scaling_info->scaling_quality.v_taps, 262 update->scaling_info->scaling_quality.h_taps_c, 263 update->scaling_info->scaling_quality.v_taps_c); 264 } 265 SURFACE_TRACE("\n"); 266 } 267 SURFACE_TRACE("\n"); 268 } 269 270 void post_surface_trace(const struct dc *dc) 271 { 272 struct core_dc *core_dc = DC_TO_CORE(dc); 273 struct dal_logger *logger = core_dc->ctx->logger; 274 275 SURFACE_TRACE("post surface process.\n"); 276 277 } 278 279 void context_timing_trace( 280 const struct dc *dc, 281 struct resource_context *res_ctx) 282 { 283 int i; 284 struct core_dc *core_dc = DC_TO_CORE(dc); 285 struct dal_logger *logger = core_dc->ctx->logger; 286 287 for (i = 0; i < core_dc->res_pool->pipe_count; i++) { 288 struct pipe_ctx *pipe_ctx = &res_ctx->pipe_ctx[i]; 289 int h_pos = 0; 290 int v_pos = 0; 291 292 if (pipe_ctx->stream == NULL) 293 continue; 294 295 pipe_ctx->tg->funcs->get_position(pipe_ctx->tg, &h_pos, &v_pos); 296 TIMING_TRACE("Pipe_%d H_tot:%d V_tot:%d H_pos:%d V_pos:%d\n", 297 pipe_ctx->pipe_idx, 298 pipe_ctx->stream->public.timing.h_total, 299 pipe_ctx->stream->public.timing.v_total, 300 h_pos, v_pos); 301 } 302 } 303