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.surface_size.x, 99 surface->plane_size.grph.surface_size.y, 100 surface->plane_size.grph.surface_size.width, 101 surface->plane_size.grph.surface_size.height, 102 surface->plane_size.grph.surface_pitch); 103 104 105 SURFACE_TRACE( 106 "surface->tiling_info.gfx8.num_banks = %d;\n" 107 "surface->tiling_info.gfx8.bank_width = %d;\n" 108 "surface->tiling_info.gfx8.bank_width_c = %d;\n" 109 "surface->tiling_info.gfx8.bank_height = %d;\n" 110 "surface->tiling_info.gfx8.bank_height_c = %d;\n" 111 "surface->tiling_info.gfx8.tile_aspect = %d;\n" 112 "surface->tiling_info.gfx8.tile_aspect_c = %d;\n" 113 "surface->tiling_info.gfx8.tile_split = %d;\n" 114 "surface->tiling_info.gfx8.tile_split_c = %d;\n" 115 "surface->tiling_info.gfx8.tile_mode = %d;\n" 116 "surface->tiling_info.gfx8.tile_mode_c = %d;\n", 117 surface->tiling_info.gfx8.num_banks, 118 surface->tiling_info.gfx8.bank_width, 119 surface->tiling_info.gfx8.bank_width_c, 120 surface->tiling_info.gfx8.bank_height, 121 surface->tiling_info.gfx8.bank_height_c, 122 surface->tiling_info.gfx8.tile_aspect, 123 surface->tiling_info.gfx8.tile_aspect_c, 124 surface->tiling_info.gfx8.tile_split, 125 surface->tiling_info.gfx8.tile_split_c, 126 surface->tiling_info.gfx8.tile_mode, 127 surface->tiling_info.gfx8.tile_mode_c); 128 129 SURFACE_TRACE( 130 "surface->tiling_info.gfx8.pipe_config = %d;\n" 131 "surface->tiling_info.gfx8.array_mode = %d;\n" 132 "surface->color_space = %d;\n" 133 "surface->dcc.enable = %d;\n" 134 "surface->format = %d;\n" 135 "surface->rotation = %d;\n" 136 "surface->stereo_format = %d;\n", 137 surface->tiling_info.gfx8.pipe_config, 138 surface->tiling_info.gfx8.array_mode, 139 surface->color_space, 140 surface->dcc.enable, 141 surface->format, 142 surface->rotation, 143 surface->stereo_format); 144 SURFACE_TRACE("\n"); 145 } 146 SURFACE_TRACE("\n"); 147 } 148 149 void update_surface_trace( 150 const struct dc *dc, 151 const struct dc_surface_update *updates, 152 int surface_count) 153 { 154 int i; 155 struct core_dc *core_dc = DC_TO_CORE(dc); 156 struct dal_logger *logger = core_dc->ctx->logger; 157 158 for (i = 0; i < surface_count; i++) { 159 const struct dc_surface_update *update = &updates[i]; 160 161 SURFACE_TRACE("Update %d\n", i); 162 if (update->flip_addr) { 163 SURFACE_TRACE("flip_addr->address.type = %d;\n" 164 "flip_addr->address.grph.addr.quad_part = 0x%X;\n" 165 "flip_addr->address.grph.meta_addr.quad_part = 0x%X;\n" 166 "flip_addr->flip_immediate = %d;\n", 167 update->flip_addr->address.type, 168 update->flip_addr->address.grph.addr.quad_part, 169 update->flip_addr->address.grph.meta_addr.quad_part, 170 update->flip_addr->flip_immediate); 171 } 172 173 if (update->plane_info) { 174 SURFACE_TRACE( 175 "plane_info->color_space = %d;\n" 176 "plane_info->format = %d;\n" 177 "plane_info->plane_size.grph.surface_pitch = %d;\n" 178 "plane_info->plane_size.grph.surface_size.height = %d;\n" 179 "plane_info->plane_size.grph.surface_size.width = %d;\n" 180 "plane_info->plane_size.grph.surface_size.x = %d;\n" 181 "plane_info->plane_size.grph.surface_size.y = %d;\n" 182 "plane_info->rotation = %d;\n", 183 update->plane_info->color_space, 184 update->plane_info->format, 185 update->plane_info->plane_size.grph.surface_pitch, 186 update->plane_info->plane_size.grph.surface_size.height, 187 update->plane_info->plane_size.grph.surface_size.width, 188 update->plane_info->plane_size.grph.surface_size.x, 189 update->plane_info->plane_size.grph.surface_size.y, 190 update->plane_info->rotation, 191 update->plane_info->stereo_format); 192 193 SURFACE_TRACE( 194 "plane_info->tiling_info.gfx8.num_banks = %d;\n" 195 "plane_info->tiling_info.gfx8.bank_width = %d;\n" 196 "plane_info->tiling_info.gfx8.bank_width_c = %d;\n" 197 "plane_info->tiling_info.gfx8.bank_height = %d;\n" 198 "plane_info->tiling_info.gfx8.bank_height_c = %d;\n" 199 "plane_info->tiling_info.gfx8.tile_aspect = %d;\n" 200 "plane_info->tiling_info.gfx8.tile_aspect_c = %d;\n" 201 "plane_info->tiling_info.gfx8.tile_split = %d;\n" 202 "plane_info->tiling_info.gfx8.tile_split_c = %d;\n" 203 "plane_info->tiling_info.gfx8.tile_mode = %d;\n" 204 "plane_info->tiling_info.gfx8.tile_mode_c = %d;\n", 205 update->plane_info->tiling_info.gfx8.num_banks, 206 update->plane_info->tiling_info.gfx8.bank_width, 207 update->plane_info->tiling_info.gfx8.bank_width_c, 208 update->plane_info->tiling_info.gfx8.bank_height, 209 update->plane_info->tiling_info.gfx8.bank_height_c, 210 update->plane_info->tiling_info.gfx8.tile_aspect, 211 update->plane_info->tiling_info.gfx8.tile_aspect_c, 212 update->plane_info->tiling_info.gfx8.tile_split, 213 update->plane_info->tiling_info.gfx8.tile_split_c, 214 update->plane_info->tiling_info.gfx8.tile_mode, 215 update->plane_info->tiling_info.gfx8.tile_mode_c); 216 217 SURFACE_TRACE( 218 "plane_info->tiling_info.gfx8.pipe_config = %d;\n" 219 "plane_info->tiling_info.gfx8.array_mode = %d;\n" 220 "plane_info->visible = %d;\n", 221 update->plane_info->tiling_info.gfx8.pipe_config, 222 update->plane_info->tiling_info.gfx8.array_mode, 223 update->plane_info->visible); 224 } 225 226 if (update->scaling_info) { 227 SURFACE_TRACE( 228 "scaling_info->src_rect.x = %d;\n" 229 "scaling_info->src_rect.y = %d;\n" 230 "scaling_info->src_rect.width = %d;\n" 231 "scaling_info->src_rect.height = %d;\n" 232 "scaling_info->dst_rect.x = %d;\n" 233 "scaling_info->dst_rect.y = %d;\n" 234 "scaling_info->dst_rect.width = %d;\n" 235 "scaling_info->dst_rect.height = %d;\n" 236 "scaling_info->clip_rect.x = %d;\n" 237 "scaling_info->clip_rect.y = %d;\n" 238 "scaling_info->clip_rect.width = %d;\n" 239 "scaling_info->clip_rect.height = %d;\n" 240 "scaling_info->scaling_quality.h_taps = %d;\n" 241 "scaling_info->scaling_quality.v_taps = %d;\n" 242 "scaling_info->scaling_quality.h_taps_c = %d;\n" 243 "scaling_info->scaling_quality.v_taps_c = %d;\n", 244 update->scaling_info->src_rect.x, 245 update->scaling_info->src_rect.y, 246 update->scaling_info->src_rect.width, 247 update->scaling_info->src_rect.height, 248 update->scaling_info->dst_rect.x, 249 update->scaling_info->dst_rect.y, 250 update->scaling_info->dst_rect.width, 251 update->scaling_info->dst_rect.height, 252 update->scaling_info->clip_rect.x, 253 update->scaling_info->clip_rect.y, 254 update->scaling_info->clip_rect.width, 255 update->scaling_info->clip_rect.height, 256 update->scaling_info->scaling_quality.h_taps, 257 update->scaling_info->scaling_quality.v_taps, 258 update->scaling_info->scaling_quality.h_taps_c, 259 update->scaling_info->scaling_quality.v_taps_c); 260 } 261 SURFACE_TRACE("\n"); 262 } 263 SURFACE_TRACE("\n"); 264 } 265 266 void post_surface_trace(const struct dc *dc) 267 { 268 struct core_dc *core_dc = DC_TO_CORE(dc); 269 struct dal_logger *logger = core_dc->ctx->logger; 270 271 SURFACE_TRACE("post surface process.\n"); 272 273 } 274 275 void context_timing_trace( 276 const struct dc *dc, 277 struct resource_context *res_ctx) 278 { 279 int i; 280 struct core_dc *core_dc = DC_TO_CORE(dc); 281 struct dal_logger *logger = core_dc->ctx->logger; 282 int h_pos[MAX_PIPES], v_pos[MAX_PIPES]; 283 284 for (i = 0; i < core_dc->res_pool->pipe_count; i++) { 285 struct pipe_ctx *pipe_ctx = &res_ctx->pipe_ctx[i]; 286 287 if (pipe_ctx->stream == NULL) 288 continue; 289 290 pipe_ctx->tg->funcs->get_position(pipe_ctx->tg, &h_pos[i], &v_pos[i]); 291 } 292 for (i = 0; i < core_dc->res_pool->pipe_count; i++) { 293 struct pipe_ctx *pipe_ctx = &res_ctx->pipe_ctx[i]; 294 295 if (pipe_ctx->stream == NULL) 296 continue; 297 298 TIMING_TRACE("OTG_%d H_tot:%d V_tot:%d H_pos:%d V_pos:%d\n", 299 pipe_ctx->tg->inst, 300 pipe_ctx->stream->public.timing.h_total, 301 pipe_ctx->stream->public.timing.v_total, 302 h_pos[i], v_pos[i]); 303 } 304 } 305