File: | dev/pci/drm/amd/display/dc/dc_dmub_srv.c |
Warning: | line 452, column 43 Dereference of null pointer |
Press '?' to see keyboard shortcuts
Keyboard shortcuts:
1 | /* | ||||||||||
2 | * Copyright 2019 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 | #include "dc.h" | ||||||||||
27 | #include "dc_dmub_srv.h" | ||||||||||
28 | #include "../dmub/dmub_srv.h" | ||||||||||
29 | #include "dm_helpers.h" | ||||||||||
30 | #include "dc_hw_types.h" | ||||||||||
31 | #include "core_types.h" | ||||||||||
32 | #include "../basics/conversion.h" | ||||||||||
33 | #include "cursor_reg_cache.h" | ||||||||||
34 | |||||||||||
35 | #define CTXdc_dmub_srv->ctx dc_dmub_srv->ctx | ||||||||||
36 | #define DC_LOGGERdc_dmub_srv->ctx->logger CTXdc_dmub_srv->ctx->logger | ||||||||||
37 | |||||||||||
38 | static void dc_dmub_srv_construct(struct dc_dmub_srv *dc_srv, struct dc *dc, | ||||||||||
39 | struct dmub_srv *dmub) | ||||||||||
40 | { | ||||||||||
41 | dc_srv->dmub = dmub; | ||||||||||
42 | dc_srv->ctx = dc->ctx; | ||||||||||
43 | } | ||||||||||
44 | |||||||||||
45 | struct dc_dmub_srv *dc_dmub_srv_create(struct dc *dc, struct dmub_srv *dmub) | ||||||||||
46 | { | ||||||||||
47 | struct dc_dmub_srv *dc_srv = | ||||||||||
48 | kzalloc(sizeof(struct dc_dmub_srv), GFP_KERNEL(0x0001 | 0x0004)); | ||||||||||
49 | |||||||||||
50 | if (dc_srv == NULL((void *)0)) { | ||||||||||
51 | BREAK_TO_DEBUGGER()do { ___drm_dbg(((void *)0), DRM_UT_DRIVER, "%s():%d\n", __func__ , 51); do {} while (0); } while (0); | ||||||||||
52 | return NULL((void *)0); | ||||||||||
53 | } | ||||||||||
54 | |||||||||||
55 | dc_dmub_srv_construct(dc_srv, dc, dmub); | ||||||||||
56 | |||||||||||
57 | return dc_srv; | ||||||||||
58 | } | ||||||||||
59 | |||||||||||
60 | void dc_dmub_srv_destroy(struct dc_dmub_srv **dmub_srv) | ||||||||||
61 | { | ||||||||||
62 | if (*dmub_srv) { | ||||||||||
63 | kfree(*dmub_srv); | ||||||||||
64 | *dmub_srv = NULL((void *)0); | ||||||||||
65 | } | ||||||||||
66 | } | ||||||||||
67 | |||||||||||
68 | void dc_dmub_srv_cmd_queue(struct dc_dmub_srv *dc_dmub_srv, | ||||||||||
69 | union dmub_rb_cmd *cmd) | ||||||||||
70 | { | ||||||||||
71 | struct dmub_srv *dmub = dc_dmub_srv->dmub; | ||||||||||
72 | struct dc_context *dc_ctx = dc_dmub_srv->ctx; | ||||||||||
73 | enum dmub_status status; | ||||||||||
74 | |||||||||||
75 | status = dmub_srv_cmd_queue(dmub, cmd); | ||||||||||
76 | if (status == DMUB_STATUS_OK) | ||||||||||
77 | return; | ||||||||||
78 | |||||||||||
79 | if (status != DMUB_STATUS_QUEUE_FULL) | ||||||||||
80 | goto error; | ||||||||||
81 | |||||||||||
82 | /* Execute and wait for queue to become empty again. */ | ||||||||||
83 | dc_dmub_srv_cmd_execute(dc_dmub_srv); | ||||||||||
84 | dc_dmub_srv_wait_idle(dc_dmub_srv); | ||||||||||
85 | |||||||||||
86 | /* Requeue the command. */ | ||||||||||
87 | status = dmub_srv_cmd_queue(dmub, cmd); | ||||||||||
88 | if (status == DMUB_STATUS_OK) | ||||||||||
89 | return; | ||||||||||
90 | |||||||||||
91 | error: | ||||||||||
92 | DC_ERROR("Error queuing DMUB command: status=%d\n", status)do { (void)(dc_ctx); __drm_err("Error queuing DMUB command: status=%d\n" , status); } while (0); | ||||||||||
93 | dc_dmub_srv_log_diagnostic_data(dc_dmub_srv); | ||||||||||
94 | } | ||||||||||
95 | |||||||||||
96 | void dc_dmub_srv_cmd_execute(struct dc_dmub_srv *dc_dmub_srv) | ||||||||||
97 | { | ||||||||||
98 | struct dmub_srv *dmub = dc_dmub_srv->dmub; | ||||||||||
99 | struct dc_context *dc_ctx = dc_dmub_srv->ctx; | ||||||||||
100 | enum dmub_status status; | ||||||||||
101 | |||||||||||
102 | status = dmub_srv_cmd_execute(dmub); | ||||||||||
103 | if (status != DMUB_STATUS_OK) { | ||||||||||
104 | DC_ERROR("Error starting DMUB execution: status=%d\n", status)do { (void)(dc_ctx); __drm_err("Error starting DMUB execution: status=%d\n" , status); } while (0); | ||||||||||
105 | dc_dmub_srv_log_diagnostic_data(dc_dmub_srv); | ||||||||||
106 | } | ||||||||||
107 | } | ||||||||||
108 | |||||||||||
109 | void dc_dmub_srv_wait_idle(struct dc_dmub_srv *dc_dmub_srv) | ||||||||||
110 | { | ||||||||||
111 | struct dmub_srv *dmub = dc_dmub_srv->dmub; | ||||||||||
112 | struct dc_context *dc_ctx = dc_dmub_srv->ctx; | ||||||||||
113 | enum dmub_status status; | ||||||||||
114 | |||||||||||
115 | status = dmub_srv_wait_for_idle(dmub, 100000); | ||||||||||
116 | if (status != DMUB_STATUS_OK) { | ||||||||||
117 | DC_ERROR("Error waiting for DMUB idle: status=%d\n", status)do { (void)(dc_ctx); __drm_err("Error waiting for DMUB idle: status=%d\n" , status); } while (0); | ||||||||||
118 | dc_dmub_srv_log_diagnostic_data(dc_dmub_srv); | ||||||||||
119 | } | ||||||||||
120 | } | ||||||||||
121 | |||||||||||
122 | void dc_dmub_srv_clear_inbox0_ack(struct dc_dmub_srv *dmub_srv) | ||||||||||
123 | { | ||||||||||
124 | struct dmub_srv *dmub = dmub_srv->dmub; | ||||||||||
125 | struct dc_context *dc_ctx = dmub_srv->ctx; | ||||||||||
126 | enum dmub_status status = DMUB_STATUS_OK; | ||||||||||
127 | |||||||||||
128 | status = dmub_srv_clear_inbox0_ack(dmub); | ||||||||||
129 | if (status != DMUB_STATUS_OK) { | ||||||||||
130 | DC_ERROR("Error clearing INBOX0 ack: status=%d\n", status)do { (void)(dc_ctx); __drm_err("Error clearing INBOX0 ack: status=%d\n" , status); } while (0); | ||||||||||
131 | dc_dmub_srv_log_diagnostic_data(dmub_srv); | ||||||||||
132 | } | ||||||||||
133 | } | ||||||||||
134 | |||||||||||
135 | void dc_dmub_srv_wait_for_inbox0_ack(struct dc_dmub_srv *dmub_srv) | ||||||||||
136 | { | ||||||||||
137 | struct dmub_srv *dmub = dmub_srv->dmub; | ||||||||||
138 | struct dc_context *dc_ctx = dmub_srv->ctx; | ||||||||||
139 | enum dmub_status status = DMUB_STATUS_OK; | ||||||||||
140 | |||||||||||
141 | status = dmub_srv_wait_for_inbox0_ack(dmub, 100000); | ||||||||||
142 | if (status != DMUB_STATUS_OK) { | ||||||||||
143 | DC_ERROR("Error waiting for INBOX0 HW Lock Ack\n")do { (void)(dc_ctx); __drm_err("Error waiting for INBOX0 HW Lock Ack\n" ); } while (0); | ||||||||||
144 | dc_dmub_srv_log_diagnostic_data(dmub_srv); | ||||||||||
145 | } | ||||||||||
146 | } | ||||||||||
147 | |||||||||||
148 | void dc_dmub_srv_send_inbox0_cmd(struct dc_dmub_srv *dmub_srv, | ||||||||||
149 | union dmub_inbox0_data_register data) | ||||||||||
150 | { | ||||||||||
151 | struct dmub_srv *dmub = dmub_srv->dmub; | ||||||||||
152 | struct dc_context *dc_ctx = dmub_srv->ctx; | ||||||||||
153 | enum dmub_status status = DMUB_STATUS_OK; | ||||||||||
154 | |||||||||||
155 | status = dmub_srv_send_inbox0_cmd(dmub, data); | ||||||||||
156 | if (status != DMUB_STATUS_OK) { | ||||||||||
157 | DC_ERROR("Error sending INBOX0 cmd\n")do { (void)(dc_ctx); __drm_err("Error sending INBOX0 cmd\n"); } while (0); | ||||||||||
158 | dc_dmub_srv_log_diagnostic_data(dmub_srv); | ||||||||||
159 | } | ||||||||||
160 | } | ||||||||||
161 | |||||||||||
162 | bool_Bool dc_dmub_srv_cmd_with_reply_data(struct dc_dmub_srv *dc_dmub_srv, union dmub_rb_cmd *cmd) | ||||||||||
163 | { | ||||||||||
164 | struct dmub_srv *dmub; | ||||||||||
165 | enum dmub_status status; | ||||||||||
166 | |||||||||||
167 | if (!dc_dmub_srv || !dc_dmub_srv->dmub) | ||||||||||
168 | return false0; | ||||||||||
169 | |||||||||||
170 | dmub = dc_dmub_srv->dmub; | ||||||||||
171 | |||||||||||
172 | status = dmub_srv_cmd_with_reply_data(dmub, cmd); | ||||||||||
173 | if (status != DMUB_STATUS_OK) { | ||||||||||
174 | DC_LOG_DEBUG("No reply for DMUB command: status=%d\n", status)___drm_dbg(((void *)0), DRM_UT_KMS, "No reply for DMUB command: status=%d\n" , status); | ||||||||||
175 | return false0; | ||||||||||
176 | } | ||||||||||
177 | |||||||||||
178 | return true1; | ||||||||||
179 | } | ||||||||||
180 | |||||||||||
181 | void dc_dmub_srv_wait_phy_init(struct dc_dmub_srv *dc_dmub_srv) | ||||||||||
182 | { | ||||||||||
183 | struct dmub_srv *dmub = dc_dmub_srv->dmub; | ||||||||||
184 | struct dc_context *dc_ctx = dc_dmub_srv->ctx; | ||||||||||
185 | enum dmub_status status; | ||||||||||
186 | |||||||||||
187 | for (;;) { | ||||||||||
188 | /* Wait up to a second for PHY init. */ | ||||||||||
189 | status = dmub_srv_wait_for_phy_init(dmub, 1000000); | ||||||||||
190 | if (status == DMUB_STATUS_OK) | ||||||||||
191 | /* Initialization OK */ | ||||||||||
192 | break; | ||||||||||
193 | |||||||||||
194 | DC_ERROR("DMCUB PHY init failed: status=%d\n", status)do { (void)(dc_ctx); __drm_err("DMCUB PHY init failed: status=%d\n" , status); } while (0); | ||||||||||
195 | ASSERT(0)do { if (({ static int __warned; int __ret = !!(!(0)); if (__ret && !__warned) { printf("WARNING %s failed at %s:%d\n" , "!(0)", "/usr/src/sys/dev/pci/drm/amd/display/dc/dc_dmub_srv.c" , 195); __warned = 1; } __builtin_expect(!!(__ret), 0); })) do {} while (0); } while (0); | ||||||||||
196 | |||||||||||
197 | if (status != DMUB_STATUS_TIMEOUT) | ||||||||||
198 | /* | ||||||||||
199 | * Server likely initialized or we don't have | ||||||||||
200 | * DMCUB HW support - this won't end. | ||||||||||
201 | */ | ||||||||||
202 | break; | ||||||||||
203 | |||||||||||
204 | /* Continue spinning so we don't hang the ASIC. */ | ||||||||||
205 | } | ||||||||||
206 | } | ||||||||||
207 | |||||||||||
208 | bool_Bool dc_dmub_srv_notify_stream_mask(struct dc_dmub_srv *dc_dmub_srv, | ||||||||||
209 | unsigned int stream_mask) | ||||||||||
210 | { | ||||||||||
211 | struct dmub_srv *dmub; | ||||||||||
212 | const uint32_t timeout = 30; | ||||||||||
213 | |||||||||||
214 | if (!dc_dmub_srv || !dc_dmub_srv->dmub) | ||||||||||
215 | return false0; | ||||||||||
216 | |||||||||||
217 | dmub = dc_dmub_srv->dmub; | ||||||||||
218 | |||||||||||
219 | return dmub_srv_send_gpint_command( | ||||||||||
220 | dmub, DMUB_GPINT__IDLE_OPT_NOTIFY_STREAM_MASK, | ||||||||||
221 | stream_mask, timeout) == DMUB_STATUS_OK; | ||||||||||
222 | } | ||||||||||
223 | |||||||||||
224 | bool_Bool dc_dmub_srv_is_restore_required(struct dc_dmub_srv *dc_dmub_srv) | ||||||||||
225 | { | ||||||||||
226 | struct dmub_srv *dmub; | ||||||||||
227 | struct dc_context *dc_ctx; | ||||||||||
228 | union dmub_fw_boot_status boot_status; | ||||||||||
229 | enum dmub_status status; | ||||||||||
230 | |||||||||||
231 | if (!dc_dmub_srv || !dc_dmub_srv->dmub) | ||||||||||
232 | return false0; | ||||||||||
233 | |||||||||||
234 | dmub = dc_dmub_srv->dmub; | ||||||||||
235 | dc_ctx = dc_dmub_srv->ctx; | ||||||||||
236 | |||||||||||
237 | status = dmub_srv_get_fw_boot_status(dmub, &boot_status); | ||||||||||
238 | if (status != DMUB_STATUS_OK) { | ||||||||||
239 | DC_ERROR("Error querying DMUB boot status: error=%d\n", status)do { (void)(dc_ctx); __drm_err("Error querying DMUB boot status: error=%d\n" , status); } while (0); | ||||||||||
240 | return false0; | ||||||||||
241 | } | ||||||||||
242 | |||||||||||
243 | return boot_status.bits.restore_required; | ||||||||||
244 | } | ||||||||||
245 | |||||||||||
246 | bool_Bool dc_dmub_srv_get_dmub_outbox0_msg(const struct dc *dc, struct dmcub_trace_buf_entry *entry) | ||||||||||
247 | { | ||||||||||
248 | struct dmub_srv *dmub = dc->ctx->dmub_srv->dmub; | ||||||||||
249 | return dmub_srv_get_outbox0_msg(dmub, entry); | ||||||||||
250 | } | ||||||||||
251 | |||||||||||
252 | void dc_dmub_trace_event_control(struct dc *dc, bool_Bool enable) | ||||||||||
253 | { | ||||||||||
254 | dm_helpers_dmub_outbox_interrupt_control(dc->ctx, enable); | ||||||||||
255 | } | ||||||||||
256 | |||||||||||
257 | void dc_dmub_srv_drr_update_cmd(struct dc *dc, uint32_t tg_inst, uint32_t vtotal_min, uint32_t vtotal_max) | ||||||||||
258 | { | ||||||||||
259 | union dmub_rb_cmd cmd = { 0 }; | ||||||||||
260 | |||||||||||
261 | cmd.drr_update.header.type = DMUB_CMD__FW_ASSISTED_MCLK_SWITCH; | ||||||||||
262 | cmd.drr_update.header.sub_type = DMUB_CMD__FAMS_DRR_UPDATE; | ||||||||||
263 | cmd.drr_update.dmub_optc_state_req.v_total_max = vtotal_max; | ||||||||||
264 | cmd.drr_update.dmub_optc_state_req.v_total_min = vtotal_min; | ||||||||||
265 | cmd.drr_update.dmub_optc_state_req.tg_inst = tg_inst; | ||||||||||
266 | |||||||||||
267 | cmd.drr_update.header.payload_bytes = sizeof(cmd.drr_update) - sizeof(cmd.drr_update.header); | ||||||||||
268 | |||||||||||
269 | // Send the command to the DMCUB. | ||||||||||
270 | dc_dmub_srv_cmd_queue(dc->ctx->dmub_srv, &cmd); | ||||||||||
271 | dc_dmub_srv_cmd_execute(dc->ctx->dmub_srv); | ||||||||||
272 | dc_dmub_srv_wait_idle(dc->ctx->dmub_srv); | ||||||||||
273 | } | ||||||||||
274 | |||||||||||
275 | void dc_dmub_srv_set_drr_manual_trigger_cmd(struct dc *dc, uint32_t tg_inst) | ||||||||||
276 | { | ||||||||||
277 | union dmub_rb_cmd cmd = { 0 }; | ||||||||||
278 | |||||||||||
279 | cmd.drr_update.header.type = DMUB_CMD__FW_ASSISTED_MCLK_SWITCH; | ||||||||||
280 | cmd.drr_update.header.sub_type = DMUB_CMD__FAMS_SET_MANUAL_TRIGGER; | ||||||||||
281 | cmd.drr_update.dmub_optc_state_req.tg_inst = tg_inst; | ||||||||||
282 | |||||||||||
283 | cmd.drr_update.header.payload_bytes = sizeof(cmd.drr_update) - sizeof(cmd.drr_update.header); | ||||||||||
284 | |||||||||||
285 | // Send the command to the DMCUB. | ||||||||||
286 | dc_dmub_srv_cmd_queue(dc->ctx->dmub_srv, &cmd); | ||||||||||
287 | dc_dmub_srv_cmd_execute(dc->ctx->dmub_srv); | ||||||||||
288 | dc_dmub_srv_wait_idle(dc->ctx->dmub_srv); | ||||||||||
289 | } | ||||||||||
290 | |||||||||||
291 | static uint8_t dc_dmub_srv_get_pipes_for_stream(struct dc *dc, struct dc_stream_state *stream) | ||||||||||
292 | { | ||||||||||
293 | uint8_t pipes = 0; | ||||||||||
294 | int i = 0; | ||||||||||
295 | |||||||||||
296 | for (i = 0; i < MAX_PIPES6; i++) { | ||||||||||
297 | struct pipe_ctx *pipe = &dc->current_state->res_ctx.pipe_ctx[i]; | ||||||||||
298 | |||||||||||
299 | if (pipe->stream == stream && pipe->stream_res.tg) | ||||||||||
300 | pipes = i; | ||||||||||
301 | } | ||||||||||
302 | return pipes; | ||||||||||
303 | } | ||||||||||
304 | |||||||||||
305 | static int dc_dmub_srv_get_timing_generator_offset(struct dc *dc, struct dc_stream_state *stream) | ||||||||||
306 | { | ||||||||||
307 | int tg_inst = 0; | ||||||||||
308 | int i = 0; | ||||||||||
309 | |||||||||||
310 | for (i = 0; i < MAX_PIPES6; i++) { | ||||||||||
311 | struct pipe_ctx *pipe = &dc->current_state->res_ctx.pipe_ctx[i]; | ||||||||||
312 | |||||||||||
313 | if (pipe->stream == stream && pipe->stream_res.tg) { | ||||||||||
314 | tg_inst = pipe->stream_res.tg->inst; | ||||||||||
315 | break; | ||||||||||
316 | } | ||||||||||
317 | } | ||||||||||
318 | return tg_inst; | ||||||||||
319 | } | ||||||||||
320 | |||||||||||
321 | bool_Bool dc_dmub_srv_p_state_delegate(struct dc *dc, bool_Bool should_manage_pstate, struct dc_state *context) | ||||||||||
322 | { | ||||||||||
323 | union dmub_rb_cmd cmd = { 0 }; | ||||||||||
324 | struct dmub_cmd_fw_assisted_mclk_switch_config *config_data = &cmd.fw_assisted_mclk_switch.config_data; | ||||||||||
325 | int i = 0; | ||||||||||
326 | int ramp_up_num_steps = 1; // TODO: Ramp is currently disabled. Reenable it. | ||||||||||
327 | uint8_t visual_confirm_enabled; | ||||||||||
328 | |||||||||||
329 | if (dc == NULL((void *)0)) | ||||||||||
330 | return false0; | ||||||||||
331 | |||||||||||
332 | visual_confirm_enabled = dc->debug.visual_confirm == VISUAL_CONFIRM_FAMS; | ||||||||||
333 | |||||||||||
334 | // Format command. | ||||||||||
335 | cmd.fw_assisted_mclk_switch.header.type = DMUB_CMD__FW_ASSISTED_MCLK_SWITCH; | ||||||||||
336 | cmd.fw_assisted_mclk_switch.header.sub_type = DMUB_CMD__FAMS_SETUP_FW_CTRL; | ||||||||||
337 | cmd.fw_assisted_mclk_switch.config_data.fams_enabled = should_manage_pstate; | ||||||||||
338 | cmd.fw_assisted_mclk_switch.config_data.visual_confirm_enabled = visual_confirm_enabled; | ||||||||||
339 | |||||||||||
340 | for (i = 0; context && i < context->stream_count; i++) { | ||||||||||
341 | struct dc_stream_state *stream = context->streams[i]; | ||||||||||
342 | uint8_t min_refresh_in_hz = (stream->timing.min_refresh_in_uhz + 999999) / 1000000; | ||||||||||
343 | int tg_inst = dc_dmub_srv_get_timing_generator_offset(dc, stream); | ||||||||||
344 | |||||||||||
345 | config_data->pipe_data[tg_inst].pix_clk_100hz = stream->timing.pix_clk_100hz; | ||||||||||
346 | config_data->pipe_data[tg_inst].min_refresh_in_hz = min_refresh_in_hz; | ||||||||||
347 | config_data->pipe_data[tg_inst].max_ramp_step = ramp_up_num_steps; | ||||||||||
348 | config_data->pipe_data[tg_inst].pipes = dc_dmub_srv_get_pipes_for_stream(dc, stream); | ||||||||||
349 | } | ||||||||||
350 | |||||||||||
351 | cmd.fw_assisted_mclk_switch.header.payload_bytes = | ||||||||||
352 | sizeof(cmd.fw_assisted_mclk_switch) - sizeof(cmd.fw_assisted_mclk_switch.header); | ||||||||||
353 | |||||||||||
354 | // Send the command to the DMCUB. | ||||||||||
355 | dc_dmub_srv_cmd_queue(dc->ctx->dmub_srv, &cmd); | ||||||||||
356 | dc_dmub_srv_cmd_execute(dc->ctx->dmub_srv); | ||||||||||
357 | dc_dmub_srv_wait_idle(dc->ctx->dmub_srv); | ||||||||||
358 | |||||||||||
359 | return true1; | ||||||||||
360 | } | ||||||||||
361 | |||||||||||
362 | void dc_dmub_srv_query_caps_cmd(struct dmub_srv *dmub) | ||||||||||
363 | { | ||||||||||
364 | union dmub_rb_cmd cmd = { 0 }; | ||||||||||
365 | enum dmub_status status; | ||||||||||
366 | |||||||||||
367 | if (!dmub) { | ||||||||||
368 | return; | ||||||||||
369 | } | ||||||||||
370 | |||||||||||
371 | memset(&cmd, 0, sizeof(cmd))__builtin_memset((&cmd), (0), (sizeof(cmd))); | ||||||||||
372 | |||||||||||
373 | /* Prepare fw command */ | ||||||||||
374 | cmd.query_feature_caps.header.type = DMUB_CMD__QUERY_FEATURE_CAPS; | ||||||||||
375 | cmd.query_feature_caps.header.sub_type = 0; | ||||||||||
376 | cmd.query_feature_caps.header.ret_status = 1; | ||||||||||
377 | cmd.query_feature_caps.header.payload_bytes = sizeof(struct dmub_cmd_query_feature_caps_data); | ||||||||||
378 | |||||||||||
379 | /* Send command to fw */ | ||||||||||
380 | status = dmub_srv_cmd_with_reply_data(dmub, &cmd); | ||||||||||
381 | |||||||||||
382 | ASSERT(status == DMUB_STATUS_OK)do { if (({ static int __warned; int __ret = !!(!(status == DMUB_STATUS_OK )); if (__ret && !__warned) { printf("WARNING %s failed at %s:%d\n" , "!(status == DMUB_STATUS_OK)", "/usr/src/sys/dev/pci/drm/amd/display/dc/dc_dmub_srv.c" , 382); __warned = 1; } __builtin_expect(!!(__ret), 0); })) do {} while (0); } while (0); | ||||||||||
383 | |||||||||||
384 | /* If command was processed, copy feature caps to dmub srv */ | ||||||||||
385 | if (status == DMUB_STATUS_OK && | ||||||||||
386 | cmd.query_feature_caps.header.ret_status == 0) { | ||||||||||
387 | memcpy(&dmub->feature_caps,__builtin_memcpy((&dmub->feature_caps), (&cmd.query_feature_caps .query_feature_caps_data), (sizeof(struct dmub_feature_caps)) ) | ||||||||||
388 | &cmd.query_feature_caps.query_feature_caps_data,__builtin_memcpy((&dmub->feature_caps), (&cmd.query_feature_caps .query_feature_caps_data), (sizeof(struct dmub_feature_caps)) ) | ||||||||||
389 | sizeof(struct dmub_feature_caps))__builtin_memcpy((&dmub->feature_caps), (&cmd.query_feature_caps .query_feature_caps_data), (sizeof(struct dmub_feature_caps)) ); | ||||||||||
390 | } | ||||||||||
391 | } | ||||||||||
392 | |||||||||||
393 | void dc_dmub_srv_get_visual_confirm_color_cmd(struct dc *dc, struct pipe_ctx *pipe_ctx) | ||||||||||
394 | { | ||||||||||
395 | union dmub_rb_cmd cmd = { 0 }; | ||||||||||
396 | enum dmub_status status; | ||||||||||
397 | unsigned int panel_inst = 0; | ||||||||||
398 | |||||||||||
399 | dc_get_edp_link_panel_inst(dc, pipe_ctx->stream->link, &panel_inst); | ||||||||||
400 | |||||||||||
401 | memset(&cmd, 0, sizeof(cmd))__builtin_memset((&cmd), (0), (sizeof(cmd))); | ||||||||||
402 | |||||||||||
403 | // Prepare fw command | ||||||||||
404 | cmd.visual_confirm_color.header.type = DMUB_CMD__GET_VISUAL_CONFIRM_COLOR; | ||||||||||
405 | cmd.visual_confirm_color.header.sub_type = 0; | ||||||||||
406 | cmd.visual_confirm_color.header.ret_status = 1; | ||||||||||
407 | cmd.visual_confirm_color.header.payload_bytes = sizeof(struct dmub_cmd_visual_confirm_color_data); | ||||||||||
408 | cmd.visual_confirm_color.visual_confirm_color_data.visual_confirm_color.panel_inst = panel_inst; | ||||||||||
409 | |||||||||||
410 | // Send command to fw | ||||||||||
411 | status = dmub_srv_cmd_with_reply_data(dc->ctx->dmub_srv->dmub, &cmd); | ||||||||||
412 | |||||||||||
413 | ASSERT(status == DMUB_STATUS_OK)do { if (({ static int __warned; int __ret = !!(!(status == DMUB_STATUS_OK )); if (__ret && !__warned) { printf("WARNING %s failed at %s:%d\n" , "!(status == DMUB_STATUS_OK)", "/usr/src/sys/dev/pci/drm/amd/display/dc/dc_dmub_srv.c" , 413); __warned = 1; } __builtin_expect(!!(__ret), 0); })) do {} while (0); } while (0); | ||||||||||
414 | |||||||||||
415 | // If command was processed, copy feature caps to dmub srv | ||||||||||
416 | if (status == DMUB_STATUS_OK && | ||||||||||
417 | cmd.visual_confirm_color.header.ret_status == 0) { | ||||||||||
418 | memcpy(&dc->ctx->dmub_srv->dmub->visual_confirm_color,__builtin_memcpy((&dc->ctx->dmub_srv->dmub->visual_confirm_color ), (&cmd.visual_confirm_color.visual_confirm_color_data), (sizeof(struct dmub_visual_confirm_color))) | ||||||||||
419 | &cmd.visual_confirm_color.visual_confirm_color_data,__builtin_memcpy((&dc->ctx->dmub_srv->dmub->visual_confirm_color ), (&cmd.visual_confirm_color.visual_confirm_color_data), (sizeof(struct dmub_visual_confirm_color))) | ||||||||||
420 | sizeof(struct dmub_visual_confirm_color))__builtin_memcpy((&dc->ctx->dmub_srv->dmub->visual_confirm_color ), (&cmd.visual_confirm_color.visual_confirm_color_data), (sizeof(struct dmub_visual_confirm_color))); | ||||||||||
421 | } | ||||||||||
422 | } | ||||||||||
423 | |||||||||||
424 | #ifdef CONFIG_DRM_AMD_DC_DCN1 | ||||||||||
425 | /** | ||||||||||
426 | * *********************************************************************************************** | ||||||||||
427 | * populate_subvp_cmd_drr_info: Helper to populate DRR pipe info for the DMCUB subvp command | ||||||||||
428 | * | ||||||||||
429 | * Populate the DMCUB SubVP command with DRR pipe info. All the information required for calculating | ||||||||||
430 | * the SubVP + DRR microschedule is populated here. | ||||||||||
431 | * | ||||||||||
432 | * High level algorithm: | ||||||||||
433 | * 1. Get timing for SubVP pipe, phantom pipe, and DRR pipe | ||||||||||
434 | * 2. Calculate the min and max vtotal which supports SubVP + DRR microschedule | ||||||||||
435 | * 3. Populate the drr_info with the min and max supported vtotal values | ||||||||||
436 | * | ||||||||||
437 | * @param [in] dc: current dc state | ||||||||||
438 | * @param [in] subvp_pipe: pipe_ctx for the SubVP pipe | ||||||||||
439 | * @param [in] vblank_pipe: pipe_ctx for the DRR pipe | ||||||||||
440 | * @param [in] pipe_data: Pipe data which stores the VBLANK/DRR info | ||||||||||
441 | * | ||||||||||
442 | * @return: void | ||||||||||
443 | * | ||||||||||
444 | * *********************************************************************************************** | ||||||||||
445 | */ | ||||||||||
446 | static void populate_subvp_cmd_drr_info(struct dc *dc, | ||||||||||
447 | struct pipe_ctx *subvp_pipe, | ||||||||||
448 | struct pipe_ctx *vblank_pipe, | ||||||||||
449 | struct dmub_cmd_fw_assisted_mclk_switch_pipe_data_v2 *pipe_data) | ||||||||||
450 | { | ||||||||||
451 | struct dc_crtc_timing *main_timing = &subvp_pipe->stream->timing; | ||||||||||
452 | struct dc_crtc_timing *phantom_timing = &subvp_pipe->stream->mall_stream_config.paired_stream->timing; | ||||||||||
| |||||||||||
453 | struct dc_crtc_timing *drr_timing = &vblank_pipe->stream->timing; | ||||||||||
454 | uint16_t drr_frame_us = 0; | ||||||||||
455 | uint16_t min_drr_supported_us = 0; | ||||||||||
456 | uint16_t max_drr_supported_us = 0; | ||||||||||
457 | uint16_t max_drr_vblank_us = 0; | ||||||||||
458 | uint16_t max_drr_mallregion_us = 0; | ||||||||||
459 | uint16_t mall_region_us = 0; | ||||||||||
460 | uint16_t prefetch_us = 0; | ||||||||||
461 | uint16_t subvp_active_us = 0; | ||||||||||
462 | uint16_t drr_active_us = 0; | ||||||||||
463 | uint16_t min_vtotal_supported = 0; | ||||||||||
464 | uint16_t max_vtotal_supported = 0; | ||||||||||
465 | |||||||||||
466 | pipe_data->pipe_config.vblank_data.drr_info.drr_in_use = true1; | ||||||||||
467 | pipe_data->pipe_config.vblank_data.drr_info.use_ramping = false0; // for now don't use ramping | ||||||||||
468 | pipe_data->pipe_config.vblank_data.drr_info.drr_window_size_ms = 4; // hardcode 4ms DRR window for now | ||||||||||
469 | |||||||||||
470 | drr_frame_us = div64_u64(((uint64_t)drr_timing->v_total * drr_timing->h_total * 1000000), | ||||||||||
471 | (((uint64_t)drr_timing->pix_clk_100hz * 100))); | ||||||||||
472 | // P-State allow width and FW delays already included phantom_timing->v_addressable | ||||||||||
473 | mall_region_us = div64_u64(((uint64_t)phantom_timing->v_addressable * phantom_timing->h_total * 1000000), | ||||||||||
474 | (((uint64_t)phantom_timing->pix_clk_100hz * 100))); | ||||||||||
475 | min_drr_supported_us = drr_frame_us + mall_region_us + SUBVP_DRR_MARGIN_US500; | ||||||||||
476 | min_vtotal_supported = div64_u64(((uint64_t)drr_timing->pix_clk_100hz * 100 * min_drr_supported_us), | ||||||||||
477 | (((uint64_t)drr_timing->h_total * 1000000))); | ||||||||||
478 | |||||||||||
479 | prefetch_us = div64_u64(((uint64_t)(phantom_timing->v_total - phantom_timing->v_front_porch) * phantom_timing->h_total * 1000000), | ||||||||||
480 | (((uint64_t)phantom_timing->pix_clk_100hz * 100) + dc->caps.subvp_prefetch_end_to_mall_start_us)); | ||||||||||
481 | subvp_active_us = div64_u64(((uint64_t)main_timing->v_addressable * main_timing->h_total * 1000000), | ||||||||||
482 | (((uint64_t)main_timing->pix_clk_100hz * 100))); | ||||||||||
483 | drr_active_us = div64_u64(((uint64_t)drr_timing->v_addressable * drr_timing->h_total * 1000000), | ||||||||||
484 | (((uint64_t)drr_timing->pix_clk_100hz * 100))); | ||||||||||
485 | max_drr_vblank_us = div64_u64((subvp_active_us - prefetch_us - drr_active_us), 2) + drr_active_us; | ||||||||||
486 | max_drr_mallregion_us = subvp_active_us - prefetch_us - mall_region_us; | ||||||||||
487 | max_drr_supported_us = max_drr_vblank_us > max_drr_mallregion_us ? max_drr_vblank_us : max_drr_mallregion_us; | ||||||||||
488 | max_vtotal_supported = div64_u64(((uint64_t)drr_timing->pix_clk_100hz * 100 * max_drr_supported_us), | ||||||||||
489 | (((uint64_t)drr_timing->h_total * 1000000))); | ||||||||||
490 | |||||||||||
491 | pipe_data->pipe_config.vblank_data.drr_info.min_vtotal_supported = min_vtotal_supported; | ||||||||||
492 | pipe_data->pipe_config.vblank_data.drr_info.max_vtotal_supported = max_vtotal_supported; | ||||||||||
493 | } | ||||||||||
494 | |||||||||||
495 | /** | ||||||||||
496 | * *********************************************************************************************** | ||||||||||
497 | * populate_subvp_cmd_vblank_pipe_info: Helper to populate VBLANK pipe info for the DMUB subvp command | ||||||||||
498 | * | ||||||||||
499 | * Populate the DMCUB SubVP command with VBLANK pipe info. All the information required to calculate | ||||||||||
500 | * the microschedule for SubVP + VBLANK case is stored in the pipe_data (subvp_data and vblank_data). | ||||||||||
501 | * Also check if the VBLANK pipe is a DRR display -- if it is make a call to populate drr_info. | ||||||||||
502 | * | ||||||||||
503 | * @param [in] dc: current dc state | ||||||||||
504 | * @param [in] context: new dc state | ||||||||||
505 | * @param [in] cmd: DMUB cmd to be populated with SubVP info | ||||||||||
506 | * @param [in] vblank_pipe: pipe_ctx for the VBLANK pipe | ||||||||||
507 | * @param [in] cmd_pipe_index: index for the pipe array in DMCUB SubVP cmd | ||||||||||
508 | * | ||||||||||
509 | * @return: void | ||||||||||
510 | * | ||||||||||
511 | * *********************************************************************************************** | ||||||||||
512 | */ | ||||||||||
513 | static void populate_subvp_cmd_vblank_pipe_info(struct dc *dc, | ||||||||||
514 | struct dc_state *context, | ||||||||||
515 | union dmub_rb_cmd *cmd, | ||||||||||
516 | struct pipe_ctx *vblank_pipe, | ||||||||||
517 | uint8_t cmd_pipe_index) | ||||||||||
518 | { | ||||||||||
519 | uint32_t i; | ||||||||||
520 | struct pipe_ctx *pipe = NULL((void *)0); | ||||||||||
521 | struct dmub_cmd_fw_assisted_mclk_switch_pipe_data_v2 *pipe_data = | ||||||||||
522 | &cmd->fw_assisted_mclk_switch_v2.config_data.pipe_data[cmd_pipe_index]; | ||||||||||
523 | |||||||||||
524 | // Find the SubVP pipe | ||||||||||
525 | for (i = 0; i < dc->res_pool->pipe_count; i++) { | ||||||||||
526 | pipe = &context->res_ctx.pipe_ctx[i]; | ||||||||||
527 | |||||||||||
528 | // We check for master pipe, but it shouldn't matter since we only need | ||||||||||
529 | // the pipe for timing info (stream should be same for any pipe splits) | ||||||||||
530 | if (!pipe->stream
| ||||||||||
531 | continue; | ||||||||||
532 | |||||||||||
533 | // Find the SubVP pipe | ||||||||||
534 | if (pipe->stream->mall_stream_config.type
| ||||||||||
535 | break; | ||||||||||
536 | } | ||||||||||
537 | |||||||||||
538 | pipe_data->mode = VBLANK; | ||||||||||
539 | pipe_data->pipe_config.vblank_data.pix_clk_100hz = vblank_pipe->stream->timing.pix_clk_100hz; | ||||||||||
540 | pipe_data->pipe_config.vblank_data.vblank_start = vblank_pipe->stream->timing.v_total - | ||||||||||
541 | vblank_pipe->stream->timing.v_front_porch; | ||||||||||
542 | pipe_data->pipe_config.vblank_data.vtotal = vblank_pipe->stream->timing.v_total; | ||||||||||
543 | pipe_data->pipe_config.vblank_data.htotal = vblank_pipe->stream->timing.h_total; | ||||||||||
544 | pipe_data->pipe_config.vblank_data.vblank_pipe_index = vblank_pipe->pipe_idx; | ||||||||||
545 | pipe_data->pipe_config.vblank_data.vstartup_start = vblank_pipe->pipe_dlg_param.vstartup_start; | ||||||||||
546 | pipe_data->pipe_config.vblank_data.vblank_end = | ||||||||||
547 | vblank_pipe->stream->timing.v_total - vblank_pipe->stream->timing.v_front_porch - vblank_pipe->stream->timing.v_addressable; | ||||||||||
548 | |||||||||||
549 | if (vblank_pipe->stream->ignore_msa_timing_param) | ||||||||||
550 | populate_subvp_cmd_drr_info(dc, pipe, vblank_pipe, pipe_data); | ||||||||||
551 | } | ||||||||||
552 | |||||||||||
553 | /** | ||||||||||
554 | * *********************************************************************************************** | ||||||||||
555 | * update_subvp_prefetch_end_to_mall_start: Helper for SubVP + SubVP case | ||||||||||
556 | * | ||||||||||
557 | * For SubVP + SubVP, we use a single vertical interrupt to start the microschedule for both | ||||||||||
558 | * SubVP pipes. In order for this to work correctly, the MALL REGION of both SubVP pipes must | ||||||||||
559 | * start at the same time. This function lengthens the prefetch end to mall start delay of the | ||||||||||
560 | * SubVP pipe that has the shorter prefetch so that both MALL REGION's will start at the same time. | ||||||||||
561 | * | ||||||||||
562 | * @param [in] dc: current dc state | ||||||||||
563 | * @param [in] context: new dc state | ||||||||||
564 | * @param [in] cmd: DMUB cmd to be populated with SubVP info | ||||||||||
565 | * @param [in] subvp_pipes: Array of SubVP pipes (should always be length 2) | ||||||||||
566 | * | ||||||||||
567 | * @return: void | ||||||||||
568 | * | ||||||||||
569 | * *********************************************************************************************** | ||||||||||
570 | */ | ||||||||||
571 | static void update_subvp_prefetch_end_to_mall_start(struct dc *dc, | ||||||||||
572 | struct dc_state *context, | ||||||||||
573 | union dmub_rb_cmd *cmd, | ||||||||||
574 | struct pipe_ctx *subvp_pipes[]) | ||||||||||
575 | { | ||||||||||
576 | uint32_t subvp0_prefetch_us = 0; | ||||||||||
577 | uint32_t subvp1_prefetch_us = 0; | ||||||||||
578 | uint32_t prefetch_delta_us = 0; | ||||||||||
579 | struct dc_crtc_timing *phantom_timing0 = &subvp_pipes[0]->stream->mall_stream_config.paired_stream->timing; | ||||||||||
580 | struct dc_crtc_timing *phantom_timing1 = &subvp_pipes[1]->stream->mall_stream_config.paired_stream->timing; | ||||||||||
581 | struct dmub_cmd_fw_assisted_mclk_switch_pipe_data_v2 *pipe_data = NULL((void *)0); | ||||||||||
582 | |||||||||||
583 | subvp0_prefetch_us = div64_u64(((uint64_t)(phantom_timing0->v_total - phantom_timing0->v_front_porch) * | ||||||||||
584 | (uint64_t)phantom_timing0->h_total * 1000000), | ||||||||||
585 | (((uint64_t)phantom_timing0->pix_clk_100hz * 100) + dc->caps.subvp_prefetch_end_to_mall_start_us)); | ||||||||||
586 | subvp1_prefetch_us = div64_u64(((uint64_t)(phantom_timing1->v_total - phantom_timing1->v_front_porch) * | ||||||||||
587 | (uint64_t)phantom_timing1->h_total * 1000000), | ||||||||||
588 | (((uint64_t)phantom_timing1->pix_clk_100hz * 100) + dc->caps.subvp_prefetch_end_to_mall_start_us)); | ||||||||||
589 | |||||||||||
590 | // Whichever SubVP PIPE has the smaller prefetch (including the prefetch end to mall start time) | ||||||||||
591 | // should increase it's prefetch time to match the other | ||||||||||
592 | if (subvp0_prefetch_us > subvp1_prefetch_us) { | ||||||||||
593 | pipe_data = &cmd->fw_assisted_mclk_switch_v2.config_data.pipe_data[1]; | ||||||||||
594 | prefetch_delta_us = subvp0_prefetch_us - subvp1_prefetch_us; | ||||||||||
595 | pipe_data->pipe_config.subvp_data.prefetch_to_mall_start_lines = | ||||||||||
596 | div64_u64(((uint64_t)(dc->caps.subvp_prefetch_end_to_mall_start_us + prefetch_delta_us) * | ||||||||||
597 | ((uint64_t)phantom_timing1->pix_clk_100hz * 100) + ((uint64_t)phantom_timing1->h_total * 1000000 - 1)), | ||||||||||
598 | ((uint64_t)phantom_timing1->h_total * 1000000)); | ||||||||||
599 | |||||||||||
600 | } else if (subvp1_prefetch_us > subvp0_prefetch_us) { | ||||||||||
601 | pipe_data = &cmd->fw_assisted_mclk_switch_v2.config_data.pipe_data[0]; | ||||||||||
602 | prefetch_delta_us = subvp1_prefetch_us - subvp0_prefetch_us; | ||||||||||
603 | pipe_data->pipe_config.subvp_data.prefetch_to_mall_start_lines = | ||||||||||
604 | div64_u64(((uint64_t)(dc->caps.subvp_prefetch_end_to_mall_start_us + prefetch_delta_us) * | ||||||||||
605 | ((uint64_t)phantom_timing0->pix_clk_100hz * 100) + ((uint64_t)phantom_timing0->h_total * 1000000 - 1)), | ||||||||||
606 | ((uint64_t)phantom_timing0->h_total * 1000000)); | ||||||||||
607 | } | ||||||||||
608 | } | ||||||||||
609 | |||||||||||
610 | /** | ||||||||||
611 | * *************************************************************************************** | ||||||||||
612 | * setup_subvp_dmub_command: Helper to populate the SubVP pipe info for the DMUB subvp command | ||||||||||
613 | * | ||||||||||
614 | * Populate the DMCUB SubVP command with SubVP pipe info. All the information required to | ||||||||||
615 | * calculate the microschedule for the SubVP pipe is stored in the pipe_data of the DMCUB | ||||||||||
616 | * SubVP command. | ||||||||||
617 | * | ||||||||||
618 | * @param [in] dc: current dc state | ||||||||||
619 | * @param [in] context: new dc state | ||||||||||
620 | * @param [in] cmd: DMUB cmd to be populated with SubVP info | ||||||||||
621 | * @param [in] subvp_pipe: pipe_ctx for the SubVP pipe | ||||||||||
622 | * @param [in] cmd_pipe_index: index for the pipe array in DMCUB SubVP cmd | ||||||||||
623 | * | ||||||||||
624 | * @return: void | ||||||||||
625 | * | ||||||||||
626 | * *************************************************************************************** | ||||||||||
627 | */ | ||||||||||
628 | static void populate_subvp_cmd_pipe_info(struct dc *dc, | ||||||||||
629 | struct dc_state *context, | ||||||||||
630 | union dmub_rb_cmd *cmd, | ||||||||||
631 | struct pipe_ctx *subvp_pipe, | ||||||||||
632 | uint8_t cmd_pipe_index) | ||||||||||
633 | { | ||||||||||
634 | uint32_t j; | ||||||||||
635 | struct dmub_cmd_fw_assisted_mclk_switch_pipe_data_v2 *pipe_data = | ||||||||||
636 | &cmd->fw_assisted_mclk_switch_v2.config_data.pipe_data[cmd_pipe_index]; | ||||||||||
637 | struct dc_crtc_timing *main_timing = &subvp_pipe->stream->timing; | ||||||||||
638 | struct dc_crtc_timing *phantom_timing = &subvp_pipe->stream->mall_stream_config.paired_stream->timing; | ||||||||||
639 | uint32_t out_num_stream, out_den_stream, out_num_plane, out_den_plane, out_num, out_den; | ||||||||||
640 | |||||||||||
641 | pipe_data->mode = SUBVP; | ||||||||||
642 | pipe_data->pipe_config.subvp_data.pix_clk_100hz = subvp_pipe->stream->timing.pix_clk_100hz; | ||||||||||
643 | pipe_data->pipe_config.subvp_data.htotal = subvp_pipe->stream->timing.h_total; | ||||||||||
644 | pipe_data->pipe_config.subvp_data.vtotal = subvp_pipe->stream->timing.v_total; | ||||||||||
645 | pipe_data->pipe_config.subvp_data.main_vblank_start = | ||||||||||
646 | main_timing->v_total - main_timing->v_front_porch; | ||||||||||
647 | pipe_data->pipe_config.subvp_data.main_vblank_end = | ||||||||||
648 | main_timing->v_total - main_timing->v_front_porch - main_timing->v_addressable; | ||||||||||
649 | pipe_data->pipe_config.subvp_data.mall_region_lines = phantom_timing->v_addressable; | ||||||||||
650 | pipe_data->pipe_config.subvp_data.main_pipe_index = subvp_pipe->pipe_idx; | ||||||||||
651 | pipe_data->pipe_config.subvp_data.is_drr = subvp_pipe->stream->ignore_msa_timing_param; | ||||||||||
652 | |||||||||||
653 | /* Calculate the scaling factor from the src and dst height. | ||||||||||
654 | * e.g. If 3840x2160 being downscaled to 1920x1080, the scaling factor is 1/2. | ||||||||||
655 | * Reduce the fraction 1080/2160 = 1/2 for the "scaling factor" | ||||||||||
656 | * | ||||||||||
657 | * Make sure to combine stream and plane scaling together. | ||||||||||
658 | */ | ||||||||||
659 | reduce_fraction(subvp_pipe->stream->src.height, subvp_pipe->stream->dst.height, | ||||||||||
660 | &out_num_stream, &out_den_stream); | ||||||||||
661 | reduce_fraction(subvp_pipe->plane_state->src_rect.height, subvp_pipe->plane_state->dst_rect.height, | ||||||||||
662 | &out_num_plane, &out_den_plane); | ||||||||||
663 | reduce_fraction(out_num_stream * out_num_plane, out_den_stream * out_den_plane, &out_num, &out_den); | ||||||||||
664 | pipe_data->pipe_config.subvp_data.scale_factor_numerator = out_num; | ||||||||||
665 | pipe_data->pipe_config.subvp_data.scale_factor_denominator = out_den; | ||||||||||
666 | |||||||||||
667 | // Prefetch lines is equal to VACTIVE + BP + VSYNC | ||||||||||
668 | pipe_data->pipe_config.subvp_data.prefetch_lines = | ||||||||||
669 | phantom_timing->v_total - phantom_timing->v_front_porch; | ||||||||||
670 | |||||||||||
671 | // Round up | ||||||||||
672 | pipe_data->pipe_config.subvp_data.prefetch_to_mall_start_lines = | ||||||||||
673 | div64_u64(((uint64_t)dc->caps.subvp_prefetch_end_to_mall_start_us * ((uint64_t)phantom_timing->pix_clk_100hz * 100) + | ||||||||||
674 | ((uint64_t)phantom_timing->h_total * 1000000 - 1)), ((uint64_t)phantom_timing->h_total * 1000000)); | ||||||||||
675 | pipe_data->pipe_config.subvp_data.processing_delay_lines = | ||||||||||
676 | div64_u64(((uint64_t)(dc->caps.subvp_fw_processing_delay_us) * ((uint64_t)phantom_timing->pix_clk_100hz * 100) + | ||||||||||
677 | ((uint64_t)phantom_timing->h_total * 1000000 - 1)), ((uint64_t)phantom_timing->h_total * 1000000)); | ||||||||||
678 | |||||||||||
679 | if (subvp_pipe->bottom_pipe) { | ||||||||||
680 | pipe_data->pipe_config.subvp_data.main_split_pipe_index = subvp_pipe->bottom_pipe->pipe_idx; | ||||||||||
681 | } else if (subvp_pipe->next_odm_pipe) { | ||||||||||
682 | pipe_data->pipe_config.subvp_data.main_split_pipe_index = subvp_pipe->next_odm_pipe->pipe_idx; | ||||||||||
683 | } else { | ||||||||||
684 | pipe_data->pipe_config.subvp_data.main_split_pipe_index = 0; | ||||||||||
685 | } | ||||||||||
686 | |||||||||||
687 | // Find phantom pipe index based on phantom stream | ||||||||||
688 | for (j = 0; j < dc->res_pool->pipe_count; j++) { | ||||||||||
689 | struct pipe_ctx *phantom_pipe = &context->res_ctx.pipe_ctx[j]; | ||||||||||
690 | |||||||||||
691 | if (phantom_pipe->stream == subvp_pipe->stream->mall_stream_config.paired_stream) { | ||||||||||
692 | pipe_data->pipe_config.subvp_data.phantom_pipe_index = phantom_pipe->pipe_idx; | ||||||||||
693 | if (phantom_pipe->bottom_pipe) { | ||||||||||
694 | pipe_data->pipe_config.subvp_data.phantom_split_pipe_index = phantom_pipe->bottom_pipe->pipe_idx; | ||||||||||
695 | } else if (phantom_pipe->next_odm_pipe) { | ||||||||||
696 | pipe_data->pipe_config.subvp_data.phantom_split_pipe_index = phantom_pipe->next_odm_pipe->pipe_idx; | ||||||||||
697 | } else { | ||||||||||
698 | pipe_data->pipe_config.subvp_data.phantom_split_pipe_index = 0; | ||||||||||
699 | } | ||||||||||
700 | break; | ||||||||||
701 | } | ||||||||||
702 | } | ||||||||||
703 | } | ||||||||||
704 | |||||||||||
705 | /** | ||||||||||
706 | * *************************************************************************************** | ||||||||||
707 | * dc_dmub_setup_subvp_dmub_command: Populate the DMCUB SubVP command | ||||||||||
708 | * | ||||||||||
709 | * This function loops through each pipe and populates the DMUB | ||||||||||
710 | * SubVP CMD info based on the pipe (e.g. SubVP, VBLANK). | ||||||||||
711 | * | ||||||||||
712 | * @param [in] dc: current dc state | ||||||||||
713 | * @param [in] context: new dc state | ||||||||||
714 | * @param [in] cmd: DMUB cmd to be populated with SubVP info | ||||||||||
715 | * | ||||||||||
716 | * @return: void | ||||||||||
717 | * | ||||||||||
718 | * *************************************************************************************** | ||||||||||
719 | */ | ||||||||||
720 | void dc_dmub_setup_subvp_dmub_command(struct dc *dc, | ||||||||||
721 | struct dc_state *context, | ||||||||||
722 | bool_Bool enable) | ||||||||||
723 | { | ||||||||||
724 | uint8_t cmd_pipe_index = 0; | ||||||||||
725 | uint32_t i, pipe_idx; | ||||||||||
726 | uint8_t subvp_count = 0; | ||||||||||
727 | union dmub_rb_cmd cmd; | ||||||||||
728 | struct pipe_ctx *subvp_pipes[2]; | ||||||||||
729 | uint32_t wm_val_refclk = 0; | ||||||||||
730 | |||||||||||
731 | memset(&cmd, 0, sizeof(cmd))__builtin_memset((&cmd), (0), (sizeof(cmd))); | ||||||||||
732 | // FW command for SUBVP | ||||||||||
733 | cmd.fw_assisted_mclk_switch_v2.header.type = DMUB_CMD__FW_ASSISTED_MCLK_SWITCH; | ||||||||||
734 | cmd.fw_assisted_mclk_switch_v2.header.sub_type = DMUB_CMD__HANDLE_SUBVP_CMD; | ||||||||||
735 | cmd.fw_assisted_mclk_switch_v2.header.payload_bytes = | ||||||||||
736 | sizeof(cmd.fw_assisted_mclk_switch_v2) - sizeof(cmd.fw_assisted_mclk_switch_v2.header); | ||||||||||
737 | |||||||||||
738 | for (i = 0; i < dc->res_pool->pipe_count; i++) { | ||||||||||
| |||||||||||
739 | struct pipe_ctx *pipe = &context->res_ctx.pipe_ctx[i]; | ||||||||||
740 | |||||||||||
741 | if (!pipe->stream) | ||||||||||
742 | continue; | ||||||||||
743 | |||||||||||
744 | /* For SubVP pipe count, only count the top most (ODM / MPC) pipe | ||||||||||
745 | */ | ||||||||||
746 | if (pipe->plane_state && !pipe->top_pipe && !pipe->prev_odm_pipe && | ||||||||||
747 | pipe->stream->mall_stream_config.type == SUBVP_MAIN) | ||||||||||
748 | subvp_pipes[subvp_count++] = pipe; | ||||||||||
749 | } | ||||||||||
750 | |||||||||||
751 | if (enable) { | ||||||||||
752 | // For each pipe that is a "main" SUBVP pipe, fill in pipe data for DMUB SUBVP cmd | ||||||||||
753 | for (i = 0, pipe_idx = 0; i < dc->res_pool->pipe_count; i++) { | ||||||||||
754 | struct pipe_ctx *pipe = &context->res_ctx.pipe_ctx[i]; | ||||||||||
755 | |||||||||||
756 | if (!pipe->stream
| ||||||||||
757 | continue; | ||||||||||
758 | |||||||||||
759 | /* When populating subvp cmd info, only pass in the top most (ODM / MPC) pipe. | ||||||||||
760 | * Any ODM or MPC splits being used in SubVP will be handled internally in | ||||||||||
761 | * populate_subvp_cmd_pipe_info | ||||||||||
762 | */ | ||||||||||
763 | if (pipe->plane_state
| ||||||||||
764 | !pipe->top_pipe && !pipe->prev_odm_pipe && | ||||||||||
765 | pipe->stream->mall_stream_config.type == SUBVP_MAIN) { | ||||||||||
766 | populate_subvp_cmd_pipe_info(dc, context, &cmd, pipe, cmd_pipe_index++); | ||||||||||
767 | } else if (pipe->plane_state
| ||||||||||
768 | !pipe->top_pipe
| ||||||||||
769 | // Don't need to check for ActiveDRAMClockChangeMargin < 0, not valid in cases where | ||||||||||
770 | // we run through DML without calculating "natural" P-state support | ||||||||||
771 | populate_subvp_cmd_vblank_pipe_info(dc, context, &cmd, pipe, cmd_pipe_index++); | ||||||||||
772 | |||||||||||
773 | } | ||||||||||
774 | pipe_idx++; | ||||||||||
775 | } | ||||||||||
776 | if (subvp_count == 2) { | ||||||||||
777 | update_subvp_prefetch_end_to_mall_start(dc, context, &cmd, subvp_pipes); | ||||||||||
778 | } | ||||||||||
779 | cmd.fw_assisted_mclk_switch_v2.config_data.pstate_allow_width_us = dc->caps.subvp_pstate_allow_width_us; | ||||||||||
780 | cmd.fw_assisted_mclk_switch_v2.config_data.vertical_int_margin_us = dc->caps.subvp_vertical_int_margin_us; | ||||||||||
781 | |||||||||||
782 | // Store the original watermark value for this SubVP config so we can lower it when the | ||||||||||
783 | // MCLK switch starts | ||||||||||
784 | wm_val_refclk = context->bw_ctx.bw.dcn.watermarks.a.cstate_pstate.pstate_change_ns * | ||||||||||
785 | (dc->res_pool->ref_clocks.dchub_ref_clock_inKhz / 1000) / 1000; | ||||||||||
786 | |||||||||||
787 | cmd.fw_assisted_mclk_switch_v2.config_data.watermark_a_cache = wm_val_refclk < 0xFFFF ? wm_val_refclk : 0xFFFF; | ||||||||||
788 | } | ||||||||||
789 | dc_dmub_srv_cmd_queue(dc->ctx->dmub_srv, &cmd); | ||||||||||
790 | dc_dmub_srv_cmd_execute(dc->ctx->dmub_srv); | ||||||||||
791 | dc_dmub_srv_wait_idle(dc->ctx->dmub_srv); | ||||||||||
792 | } | ||||||||||
793 | #endif | ||||||||||
794 | |||||||||||
795 | bool_Bool dc_dmub_srv_get_diagnostic_data(struct dc_dmub_srv *dc_dmub_srv, struct dmub_diagnostic_data *diag_data) | ||||||||||
796 | { | ||||||||||
797 | if (!dc_dmub_srv || !dc_dmub_srv->dmub || !diag_data) | ||||||||||
798 | return false0; | ||||||||||
799 | return dmub_srv_get_diagnostic_data(dc_dmub_srv->dmub, diag_data); | ||||||||||
800 | } | ||||||||||
801 | |||||||||||
802 | void dc_dmub_srv_log_diagnostic_data(struct dc_dmub_srv *dc_dmub_srv) | ||||||||||
803 | { | ||||||||||
804 | struct dmub_diagnostic_data diag_data = {0}; | ||||||||||
805 | |||||||||||
806 | if (!dc_dmub_srv || !dc_dmub_srv->dmub) { | ||||||||||
807 | DC_LOG_ERROR("%s: invalid parameters.", __func__)__drm_err("%s: invalid parameters.", __func__); | ||||||||||
808 | return; | ||||||||||
809 | } | ||||||||||
810 | |||||||||||
811 | if (!dc_dmub_srv_get_diagnostic_data(dc_dmub_srv, &diag_data)) { | ||||||||||
812 | DC_LOG_ERROR("%s: dc_dmub_srv_get_diagnostic_data failed.", __func__)__drm_err("%s: dc_dmub_srv_get_diagnostic_data failed.", __func__ ); | ||||||||||
813 | return; | ||||||||||
814 | } | ||||||||||
815 | |||||||||||
816 | DC_LOG_DEBUG(___drm_dbg(((void *)0), DRM_UT_KMS, "DMCUB STATE\n" " dmcub_version : %08x\n" " scratch [0] : %08x\n" " scratch [1] : %08x\n" " scratch [2] : %08x\n" " scratch [3] : %08x\n" " scratch [4] : %08x\n" " scratch [5] : %08x\n" " scratch [6] : %08x\n" " scratch [7] : %08x\n" " scratch [8] : %08x\n" " scratch [9] : %08x\n" " scratch [10] : %08x\n" " scratch [11] : %08x\n" " scratch [12] : %08x\n" " scratch [13] : %08x\n" " scratch [14] : %08x\n" " scratch [15] : %08x\n" " pc : %08x\n" " unk_fault_addr : %08x\n" " inst_fault_addr : %08x\n" " data_fault_addr : %08x\n" " inbox1_rptr : %08x\n" " inbox1_wptr : %08x\n" " inbox1_size : %08x\n" " inbox0_rptr : %08x\n" " inbox0_wptr : %08x\n" " inbox0_size : %08x\n" " is_enabled : %d\n" " is_soft_reset : %d\n" " is_secure_reset : %d\n" " is_traceport_en : %d\n" " is_cw0_en : %d\n" " is_cw6_en : %d\n" , diag_data.dmcub_version, diag_data.scratch[0], diag_data.scratch [1], diag_data.scratch[2], diag_data.scratch[3], diag_data.scratch [4], diag_data.scratch[5], diag_data.scratch[6], diag_data.scratch [7], diag_data.scratch[8], diag_data.scratch[9], diag_data.scratch [10], diag_data.scratch[11], diag_data.scratch[12], diag_data .scratch[13], diag_data.scratch[14], diag_data.scratch[15], diag_data .pc, diag_data.undefined_address_fault_addr, diag_data.inst_fetch_fault_addr , diag_data.data_write_fault_addr, diag_data.inbox1_rptr, diag_data .inbox1_wptr, diag_data.inbox1_size, diag_data.inbox0_rptr, diag_data .inbox0_wptr, diag_data.inbox0_size, diag_data.is_dmcub_enabled , diag_data.is_dmcub_soft_reset, diag_data.is_dmcub_secure_reset , diag_data.is_traceport_en, diag_data.is_cw0_enabled, diag_data .is_cw6_enabled) | ||||||||||
817 | "DMCUB STATE\n"___drm_dbg(((void *)0), DRM_UT_KMS, "DMCUB STATE\n" " dmcub_version : %08x\n" " scratch [0] : %08x\n" " scratch [1] : %08x\n" " scratch [2] : %08x\n" " scratch [3] : %08x\n" " scratch [4] : %08x\n" " scratch [5] : %08x\n" " scratch [6] : %08x\n" " scratch [7] : %08x\n" " scratch [8] : %08x\n" " scratch [9] : %08x\n" " scratch [10] : %08x\n" " scratch [11] : %08x\n" " scratch [12] : %08x\n" " scratch [13] : %08x\n" " scratch [14] : %08x\n" " scratch [15] : %08x\n" " pc : %08x\n" " unk_fault_addr : %08x\n" " inst_fault_addr : %08x\n" " data_fault_addr : %08x\n" " inbox1_rptr : %08x\n" " inbox1_wptr : %08x\n" " inbox1_size : %08x\n" " inbox0_rptr : %08x\n" " inbox0_wptr : %08x\n" " inbox0_size : %08x\n" " is_enabled : %d\n" " is_soft_reset : %d\n" " is_secure_reset : %d\n" " is_traceport_en : %d\n" " is_cw0_en : %d\n" " is_cw6_en : %d\n" , diag_data.dmcub_version, diag_data.scratch[0], diag_data.scratch [1], diag_data.scratch[2], diag_data.scratch[3], diag_data.scratch [4], diag_data.scratch[5], diag_data.scratch[6], diag_data.scratch [7], diag_data.scratch[8], diag_data.scratch[9], diag_data.scratch [10], diag_data.scratch[11], diag_data.scratch[12], diag_data .scratch[13], diag_data.scratch[14], diag_data.scratch[15], diag_data .pc, diag_data.undefined_address_fault_addr, diag_data.inst_fetch_fault_addr , diag_data.data_write_fault_addr, diag_data.inbox1_rptr, diag_data .inbox1_wptr, diag_data.inbox1_size, diag_data.inbox0_rptr, diag_data .inbox0_wptr, diag_data.inbox0_size, diag_data.is_dmcub_enabled , diag_data.is_dmcub_soft_reset, diag_data.is_dmcub_secure_reset , diag_data.is_traceport_en, diag_data.is_cw0_enabled, diag_data .is_cw6_enabled) | ||||||||||
818 | " dmcub_version : %08x\n"___drm_dbg(((void *)0), DRM_UT_KMS, "DMCUB STATE\n" " dmcub_version : %08x\n" " scratch [0] : %08x\n" " scratch [1] : %08x\n" " scratch [2] : %08x\n" " scratch [3] : %08x\n" " scratch [4] : %08x\n" " scratch [5] : %08x\n" " scratch [6] : %08x\n" " scratch [7] : %08x\n" " scratch [8] : %08x\n" " scratch [9] : %08x\n" " scratch [10] : %08x\n" " scratch [11] : %08x\n" " scratch [12] : %08x\n" " scratch [13] : %08x\n" " scratch [14] : %08x\n" " scratch [15] : %08x\n" " pc : %08x\n" " unk_fault_addr : %08x\n" " inst_fault_addr : %08x\n" " data_fault_addr : %08x\n" " inbox1_rptr : %08x\n" " inbox1_wptr : %08x\n" " inbox1_size : %08x\n" " inbox0_rptr : %08x\n" " inbox0_wptr : %08x\n" " inbox0_size : %08x\n" " is_enabled : %d\n" " is_soft_reset : %d\n" " is_secure_reset : %d\n" " is_traceport_en : %d\n" " is_cw0_en : %d\n" " is_cw6_en : %d\n" , diag_data.dmcub_version, diag_data.scratch[0], diag_data.scratch [1], diag_data.scratch[2], diag_data.scratch[3], diag_data.scratch [4], diag_data.scratch[5], diag_data.scratch[6], diag_data.scratch [7], diag_data.scratch[8], diag_data.scratch[9], diag_data.scratch [10], diag_data.scratch[11], diag_data.scratch[12], diag_data .scratch[13], diag_data.scratch[14], diag_data.scratch[15], diag_data .pc, diag_data.undefined_address_fault_addr, diag_data.inst_fetch_fault_addr , diag_data.data_write_fault_addr, diag_data.inbox1_rptr, diag_data .inbox1_wptr, diag_data.inbox1_size, diag_data.inbox0_rptr, diag_data .inbox0_wptr, diag_data.inbox0_size, diag_data.is_dmcub_enabled , diag_data.is_dmcub_soft_reset, diag_data.is_dmcub_secure_reset , diag_data.is_traceport_en, diag_data.is_cw0_enabled, diag_data .is_cw6_enabled) | ||||||||||
819 | " scratch [0] : %08x\n"___drm_dbg(((void *)0), DRM_UT_KMS, "DMCUB STATE\n" " dmcub_version : %08x\n" " scratch [0] : %08x\n" " scratch [1] : %08x\n" " scratch [2] : %08x\n" " scratch [3] : %08x\n" " scratch [4] : %08x\n" " scratch [5] : %08x\n" " scratch [6] : %08x\n" " scratch [7] : %08x\n" " scratch [8] : %08x\n" " scratch [9] : %08x\n" " scratch [10] : %08x\n" " scratch [11] : %08x\n" " scratch [12] : %08x\n" " scratch [13] : %08x\n" " scratch [14] : %08x\n" " scratch [15] : %08x\n" " pc : %08x\n" " unk_fault_addr : %08x\n" " inst_fault_addr : %08x\n" " data_fault_addr : %08x\n" " inbox1_rptr : %08x\n" " inbox1_wptr : %08x\n" " inbox1_size : %08x\n" " inbox0_rptr : %08x\n" " inbox0_wptr : %08x\n" " inbox0_size : %08x\n" " is_enabled : %d\n" " is_soft_reset : %d\n" " is_secure_reset : %d\n" " is_traceport_en : %d\n" " is_cw0_en : %d\n" " is_cw6_en : %d\n" , diag_data.dmcub_version, diag_data.scratch[0], diag_data.scratch [1], diag_data.scratch[2], diag_data.scratch[3], diag_data.scratch [4], diag_data.scratch[5], diag_data.scratch[6], diag_data.scratch [7], diag_data.scratch[8], diag_data.scratch[9], diag_data.scratch [10], diag_data.scratch[11], diag_data.scratch[12], diag_data .scratch[13], diag_data.scratch[14], diag_data.scratch[15], diag_data .pc, diag_data.undefined_address_fault_addr, diag_data.inst_fetch_fault_addr , diag_data.data_write_fault_addr, diag_data.inbox1_rptr, diag_data .inbox1_wptr, diag_data.inbox1_size, diag_data.inbox0_rptr, diag_data .inbox0_wptr, diag_data.inbox0_size, diag_data.is_dmcub_enabled , diag_data.is_dmcub_soft_reset, diag_data.is_dmcub_secure_reset , diag_data.is_traceport_en, diag_data.is_cw0_enabled, diag_data .is_cw6_enabled) | ||||||||||
820 | " scratch [1] : %08x\n"___drm_dbg(((void *)0), DRM_UT_KMS, "DMCUB STATE\n" " dmcub_version : %08x\n" " scratch [0] : %08x\n" " scratch [1] : %08x\n" " scratch [2] : %08x\n" " scratch [3] : %08x\n" " scratch [4] : %08x\n" " scratch [5] : %08x\n" " scratch [6] : %08x\n" " scratch [7] : %08x\n" " scratch [8] : %08x\n" " scratch [9] : %08x\n" " scratch [10] : %08x\n" " scratch [11] : %08x\n" " scratch [12] : %08x\n" " scratch [13] : %08x\n" " scratch [14] : %08x\n" " scratch [15] : %08x\n" " pc : %08x\n" " unk_fault_addr : %08x\n" " inst_fault_addr : %08x\n" " data_fault_addr : %08x\n" " inbox1_rptr : %08x\n" " inbox1_wptr : %08x\n" " inbox1_size : %08x\n" " inbox0_rptr : %08x\n" " inbox0_wptr : %08x\n" " inbox0_size : %08x\n" " is_enabled : %d\n" " is_soft_reset : %d\n" " is_secure_reset : %d\n" " is_traceport_en : %d\n" " is_cw0_en : %d\n" " is_cw6_en : %d\n" , diag_data.dmcub_version, diag_data.scratch[0], diag_data.scratch [1], diag_data.scratch[2], diag_data.scratch[3], diag_data.scratch [4], diag_data.scratch[5], diag_data.scratch[6], diag_data.scratch [7], diag_data.scratch[8], diag_data.scratch[9], diag_data.scratch [10], diag_data.scratch[11], diag_data.scratch[12], diag_data .scratch[13], diag_data.scratch[14], diag_data.scratch[15], diag_data .pc, diag_data.undefined_address_fault_addr, diag_data.inst_fetch_fault_addr , diag_data.data_write_fault_addr, diag_data.inbox1_rptr, diag_data .inbox1_wptr, diag_data.inbox1_size, diag_data.inbox0_rptr, diag_data .inbox0_wptr, diag_data.inbox0_size, diag_data.is_dmcub_enabled , diag_data.is_dmcub_soft_reset, diag_data.is_dmcub_secure_reset , diag_data.is_traceport_en, diag_data.is_cw0_enabled, diag_data .is_cw6_enabled) | ||||||||||
821 | " scratch [2] : %08x\n"___drm_dbg(((void *)0), DRM_UT_KMS, "DMCUB STATE\n" " dmcub_version : %08x\n" " scratch [0] : %08x\n" " scratch [1] : %08x\n" " scratch [2] : %08x\n" " scratch [3] : %08x\n" " scratch [4] : %08x\n" " scratch [5] : %08x\n" " scratch [6] : %08x\n" " scratch [7] : %08x\n" " scratch [8] : %08x\n" " scratch [9] : %08x\n" " scratch [10] : %08x\n" " scratch [11] : %08x\n" " scratch [12] : %08x\n" " scratch [13] : %08x\n" " scratch [14] : %08x\n" " scratch [15] : %08x\n" " pc : %08x\n" " unk_fault_addr : %08x\n" " inst_fault_addr : %08x\n" " data_fault_addr : %08x\n" " inbox1_rptr : %08x\n" " inbox1_wptr : %08x\n" " inbox1_size : %08x\n" " inbox0_rptr : %08x\n" " inbox0_wptr : %08x\n" " inbox0_size : %08x\n" " is_enabled : %d\n" " is_soft_reset : %d\n" " is_secure_reset : %d\n" " is_traceport_en : %d\n" " is_cw0_en : %d\n" " is_cw6_en : %d\n" , diag_data.dmcub_version, diag_data.scratch[0], diag_data.scratch [1], diag_data.scratch[2], diag_data.scratch[3], diag_data.scratch [4], diag_data.scratch[5], diag_data.scratch[6], diag_data.scratch [7], diag_data.scratch[8], diag_data.scratch[9], diag_data.scratch [10], diag_data.scratch[11], diag_data.scratch[12], diag_data .scratch[13], diag_data.scratch[14], diag_data.scratch[15], diag_data .pc, diag_data.undefined_address_fault_addr, diag_data.inst_fetch_fault_addr , diag_data.data_write_fault_addr, diag_data.inbox1_rptr, diag_data .inbox1_wptr, diag_data.inbox1_size, diag_data.inbox0_rptr, diag_data .inbox0_wptr, diag_data.inbox0_size, diag_data.is_dmcub_enabled , diag_data.is_dmcub_soft_reset, diag_data.is_dmcub_secure_reset , diag_data.is_traceport_en, diag_data.is_cw0_enabled, diag_data .is_cw6_enabled) | ||||||||||
822 | " scratch [3] : %08x\n"___drm_dbg(((void *)0), DRM_UT_KMS, "DMCUB STATE\n" " dmcub_version : %08x\n" " scratch [0] : %08x\n" " scratch [1] : %08x\n" " scratch [2] : %08x\n" " scratch [3] : %08x\n" " scratch [4] : %08x\n" " scratch [5] : %08x\n" " scratch [6] : %08x\n" " scratch [7] : %08x\n" " scratch [8] : %08x\n" " scratch [9] : %08x\n" " scratch [10] : %08x\n" " scratch [11] : %08x\n" " scratch [12] : %08x\n" " scratch [13] : %08x\n" " scratch [14] : %08x\n" " scratch [15] : %08x\n" " pc : %08x\n" " unk_fault_addr : %08x\n" " inst_fault_addr : %08x\n" " data_fault_addr : %08x\n" " inbox1_rptr : %08x\n" " inbox1_wptr : %08x\n" " inbox1_size : %08x\n" " inbox0_rptr : %08x\n" " inbox0_wptr : %08x\n" " inbox0_size : %08x\n" " is_enabled : %d\n" " is_soft_reset : %d\n" " is_secure_reset : %d\n" " is_traceport_en : %d\n" " is_cw0_en : %d\n" " is_cw6_en : %d\n" , diag_data.dmcub_version, diag_data.scratch[0], diag_data.scratch [1], diag_data.scratch[2], diag_data.scratch[3], diag_data.scratch [4], diag_data.scratch[5], diag_data.scratch[6], diag_data.scratch [7], diag_data.scratch[8], diag_data.scratch[9], diag_data.scratch [10], diag_data.scratch[11], diag_data.scratch[12], diag_data .scratch[13], diag_data.scratch[14], diag_data.scratch[15], diag_data .pc, diag_data.undefined_address_fault_addr, diag_data.inst_fetch_fault_addr , diag_data.data_write_fault_addr, diag_data.inbox1_rptr, diag_data .inbox1_wptr, diag_data.inbox1_size, diag_data.inbox0_rptr, diag_data .inbox0_wptr, diag_data.inbox0_size, diag_data.is_dmcub_enabled , diag_data.is_dmcub_soft_reset, diag_data.is_dmcub_secure_reset , diag_data.is_traceport_en, diag_data.is_cw0_enabled, diag_data .is_cw6_enabled) | ||||||||||
823 | " scratch [4] : %08x\n"___drm_dbg(((void *)0), DRM_UT_KMS, "DMCUB STATE\n" " dmcub_version : %08x\n" " scratch [0] : %08x\n" " scratch [1] : %08x\n" " scratch [2] : %08x\n" " scratch [3] : %08x\n" " scratch [4] : %08x\n" " scratch [5] : %08x\n" " scratch [6] : %08x\n" " scratch [7] : %08x\n" " scratch [8] : %08x\n" " scratch [9] : %08x\n" " scratch [10] : %08x\n" " scratch [11] : %08x\n" " scratch [12] : %08x\n" " scratch [13] : %08x\n" " scratch [14] : %08x\n" " scratch [15] : %08x\n" " pc : %08x\n" " unk_fault_addr : %08x\n" " inst_fault_addr : %08x\n" " data_fault_addr : %08x\n" " inbox1_rptr : %08x\n" " inbox1_wptr : %08x\n" " inbox1_size : %08x\n" " inbox0_rptr : %08x\n" " inbox0_wptr : %08x\n" " inbox0_size : %08x\n" " is_enabled : %d\n" " is_soft_reset : %d\n" " is_secure_reset : %d\n" " is_traceport_en : %d\n" " is_cw0_en : %d\n" " is_cw6_en : %d\n" , diag_data.dmcub_version, diag_data.scratch[0], diag_data.scratch [1], diag_data.scratch[2], diag_data.scratch[3], diag_data.scratch [4], diag_data.scratch[5], diag_data.scratch[6], diag_data.scratch [7], diag_data.scratch[8], diag_data.scratch[9], diag_data.scratch [10], diag_data.scratch[11], diag_data.scratch[12], diag_data .scratch[13], diag_data.scratch[14], diag_data.scratch[15], diag_data .pc, diag_data.undefined_address_fault_addr, diag_data.inst_fetch_fault_addr , diag_data.data_write_fault_addr, diag_data.inbox1_rptr, diag_data .inbox1_wptr, diag_data.inbox1_size, diag_data.inbox0_rptr, diag_data .inbox0_wptr, diag_data.inbox0_size, diag_data.is_dmcub_enabled , diag_data.is_dmcub_soft_reset, diag_data.is_dmcub_secure_reset , diag_data.is_traceport_en, diag_data.is_cw0_enabled, diag_data .is_cw6_enabled) | ||||||||||
824 | " scratch [5] : %08x\n"___drm_dbg(((void *)0), DRM_UT_KMS, "DMCUB STATE\n" " dmcub_version : %08x\n" " scratch [0] : %08x\n" " scratch [1] : %08x\n" " scratch [2] : %08x\n" " scratch [3] : %08x\n" " scratch [4] : %08x\n" " scratch [5] : %08x\n" " scratch [6] : %08x\n" " scratch [7] : %08x\n" " scratch [8] : %08x\n" " scratch [9] : %08x\n" " scratch [10] : %08x\n" " scratch [11] : %08x\n" " scratch [12] : %08x\n" " scratch [13] : %08x\n" " scratch [14] : %08x\n" " scratch [15] : %08x\n" " pc : %08x\n" " unk_fault_addr : %08x\n" " inst_fault_addr : %08x\n" " data_fault_addr : %08x\n" " inbox1_rptr : %08x\n" " inbox1_wptr : %08x\n" " inbox1_size : %08x\n" " inbox0_rptr : %08x\n" " inbox0_wptr : %08x\n" " inbox0_size : %08x\n" " is_enabled : %d\n" " is_soft_reset : %d\n" " is_secure_reset : %d\n" " is_traceport_en : %d\n" " is_cw0_en : %d\n" " is_cw6_en : %d\n" , diag_data.dmcub_version, diag_data.scratch[0], diag_data.scratch [1], diag_data.scratch[2], diag_data.scratch[3], diag_data.scratch [4], diag_data.scratch[5], diag_data.scratch[6], diag_data.scratch [7], diag_data.scratch[8], diag_data.scratch[9], diag_data.scratch [10], diag_data.scratch[11], diag_data.scratch[12], diag_data .scratch[13], diag_data.scratch[14], diag_data.scratch[15], diag_data .pc, diag_data.undefined_address_fault_addr, diag_data.inst_fetch_fault_addr , diag_data.data_write_fault_addr, diag_data.inbox1_rptr, diag_data .inbox1_wptr, diag_data.inbox1_size, diag_data.inbox0_rptr, diag_data .inbox0_wptr, diag_data.inbox0_size, diag_data.is_dmcub_enabled , diag_data.is_dmcub_soft_reset, diag_data.is_dmcub_secure_reset , diag_data.is_traceport_en, diag_data.is_cw0_enabled, diag_data .is_cw6_enabled) | ||||||||||
825 | " scratch [6] : %08x\n"___drm_dbg(((void *)0), DRM_UT_KMS, "DMCUB STATE\n" " dmcub_version : %08x\n" " scratch [0] : %08x\n" " scratch [1] : %08x\n" " scratch [2] : %08x\n" " scratch [3] : %08x\n" " scratch [4] : %08x\n" " scratch [5] : %08x\n" " scratch [6] : %08x\n" " scratch [7] : %08x\n" " scratch [8] : %08x\n" " scratch [9] : %08x\n" " scratch [10] : %08x\n" " scratch [11] : %08x\n" " scratch [12] : %08x\n" " scratch [13] : %08x\n" " scratch [14] : %08x\n" " scratch [15] : %08x\n" " pc : %08x\n" " unk_fault_addr : %08x\n" " inst_fault_addr : %08x\n" " data_fault_addr : %08x\n" " inbox1_rptr : %08x\n" " inbox1_wptr : %08x\n" " inbox1_size : %08x\n" " inbox0_rptr : %08x\n" " inbox0_wptr : %08x\n" " inbox0_size : %08x\n" " is_enabled : %d\n" " is_soft_reset : %d\n" " is_secure_reset : %d\n" " is_traceport_en : %d\n" " is_cw0_en : %d\n" " is_cw6_en : %d\n" , diag_data.dmcub_version, diag_data.scratch[0], diag_data.scratch [1], diag_data.scratch[2], diag_data.scratch[3], diag_data.scratch [4], diag_data.scratch[5], diag_data.scratch[6], diag_data.scratch [7], diag_data.scratch[8], diag_data.scratch[9], diag_data.scratch [10], diag_data.scratch[11], diag_data.scratch[12], diag_data .scratch[13], diag_data.scratch[14], diag_data.scratch[15], diag_data .pc, diag_data.undefined_address_fault_addr, diag_data.inst_fetch_fault_addr , diag_data.data_write_fault_addr, diag_data.inbox1_rptr, diag_data .inbox1_wptr, diag_data.inbox1_size, diag_data.inbox0_rptr, diag_data .inbox0_wptr, diag_data.inbox0_size, diag_data.is_dmcub_enabled , diag_data.is_dmcub_soft_reset, diag_data.is_dmcub_secure_reset , diag_data.is_traceport_en, diag_data.is_cw0_enabled, diag_data .is_cw6_enabled) | ||||||||||
826 | " scratch [7] : %08x\n"___drm_dbg(((void *)0), DRM_UT_KMS, "DMCUB STATE\n" " dmcub_version : %08x\n" " scratch [0] : %08x\n" " scratch [1] : %08x\n" " scratch [2] : %08x\n" " scratch [3] : %08x\n" " scratch [4] : %08x\n" " scratch [5] : %08x\n" " scratch [6] : %08x\n" " scratch [7] : %08x\n" " scratch [8] : %08x\n" " scratch [9] : %08x\n" " scratch [10] : %08x\n" " scratch [11] : %08x\n" " scratch [12] : %08x\n" " scratch [13] : %08x\n" " scratch [14] : %08x\n" " scratch [15] : %08x\n" " pc : %08x\n" " unk_fault_addr : %08x\n" " inst_fault_addr : %08x\n" " data_fault_addr : %08x\n" " inbox1_rptr : %08x\n" " inbox1_wptr : %08x\n" " inbox1_size : %08x\n" " inbox0_rptr : %08x\n" " inbox0_wptr : %08x\n" " inbox0_size : %08x\n" " is_enabled : %d\n" " is_soft_reset : %d\n" " is_secure_reset : %d\n" " is_traceport_en : %d\n" " is_cw0_en : %d\n" " is_cw6_en : %d\n" , diag_data.dmcub_version, diag_data.scratch[0], diag_data.scratch [1], diag_data.scratch[2], diag_data.scratch[3], diag_data.scratch [4], diag_data.scratch[5], diag_data.scratch[6], diag_data.scratch [7], diag_data.scratch[8], diag_data.scratch[9], diag_data.scratch [10], diag_data.scratch[11], diag_data.scratch[12], diag_data .scratch[13], diag_data.scratch[14], diag_data.scratch[15], diag_data .pc, diag_data.undefined_address_fault_addr, diag_data.inst_fetch_fault_addr , diag_data.data_write_fault_addr, diag_data.inbox1_rptr, diag_data .inbox1_wptr, diag_data.inbox1_size, diag_data.inbox0_rptr, diag_data .inbox0_wptr, diag_data.inbox0_size, diag_data.is_dmcub_enabled , diag_data.is_dmcub_soft_reset, diag_data.is_dmcub_secure_reset , diag_data.is_traceport_en, diag_data.is_cw0_enabled, diag_data .is_cw6_enabled) | ||||||||||
827 | " scratch [8] : %08x\n"___drm_dbg(((void *)0), DRM_UT_KMS, "DMCUB STATE\n" " dmcub_version : %08x\n" " scratch [0] : %08x\n" " scratch [1] : %08x\n" " scratch [2] : %08x\n" " scratch [3] : %08x\n" " scratch [4] : %08x\n" " scratch [5] : %08x\n" " scratch [6] : %08x\n" " scratch [7] : %08x\n" " scratch [8] : %08x\n" " scratch [9] : %08x\n" " scratch [10] : %08x\n" " scratch [11] : %08x\n" " scratch [12] : %08x\n" " scratch [13] : %08x\n" " scratch [14] : %08x\n" " scratch [15] : %08x\n" " pc : %08x\n" " unk_fault_addr : %08x\n" " inst_fault_addr : %08x\n" " data_fault_addr : %08x\n" " inbox1_rptr : %08x\n" " inbox1_wptr : %08x\n" " inbox1_size : %08x\n" " inbox0_rptr : %08x\n" " inbox0_wptr : %08x\n" " inbox0_size : %08x\n" " is_enabled : %d\n" " is_soft_reset : %d\n" " is_secure_reset : %d\n" " is_traceport_en : %d\n" " is_cw0_en : %d\n" " is_cw6_en : %d\n" , diag_data.dmcub_version, diag_data.scratch[0], diag_data.scratch [1], diag_data.scratch[2], diag_data.scratch[3], diag_data.scratch [4], diag_data.scratch[5], diag_data.scratch[6], diag_data.scratch [7], diag_data.scratch[8], diag_data.scratch[9], diag_data.scratch [10], diag_data.scratch[11], diag_data.scratch[12], diag_data .scratch[13], diag_data.scratch[14], diag_data.scratch[15], diag_data .pc, diag_data.undefined_address_fault_addr, diag_data.inst_fetch_fault_addr , diag_data.data_write_fault_addr, diag_data.inbox1_rptr, diag_data .inbox1_wptr, diag_data.inbox1_size, diag_data.inbox0_rptr, diag_data .inbox0_wptr, diag_data.inbox0_size, diag_data.is_dmcub_enabled , diag_data.is_dmcub_soft_reset, diag_data.is_dmcub_secure_reset , diag_data.is_traceport_en, diag_data.is_cw0_enabled, diag_data .is_cw6_enabled) | ||||||||||
828 | " scratch [9] : %08x\n"___drm_dbg(((void *)0), DRM_UT_KMS, "DMCUB STATE\n" " dmcub_version : %08x\n" " scratch [0] : %08x\n" " scratch [1] : %08x\n" " scratch [2] : %08x\n" " scratch [3] : %08x\n" " scratch [4] : %08x\n" " scratch [5] : %08x\n" " scratch [6] : %08x\n" " scratch [7] : %08x\n" " scratch [8] : %08x\n" " scratch [9] : %08x\n" " scratch [10] : %08x\n" " scratch [11] : %08x\n" " scratch [12] : %08x\n" " scratch [13] : %08x\n" " scratch [14] : %08x\n" " scratch [15] : %08x\n" " pc : %08x\n" " unk_fault_addr : %08x\n" " inst_fault_addr : %08x\n" " data_fault_addr : %08x\n" " inbox1_rptr : %08x\n" " inbox1_wptr : %08x\n" " inbox1_size : %08x\n" " inbox0_rptr : %08x\n" " inbox0_wptr : %08x\n" " inbox0_size : %08x\n" " is_enabled : %d\n" " is_soft_reset : %d\n" " is_secure_reset : %d\n" " is_traceport_en : %d\n" " is_cw0_en : %d\n" " is_cw6_en : %d\n" , diag_data.dmcub_version, diag_data.scratch[0], diag_data.scratch [1], diag_data.scratch[2], diag_data.scratch[3], diag_data.scratch [4], diag_data.scratch[5], diag_data.scratch[6], diag_data.scratch [7], diag_data.scratch[8], diag_data.scratch[9], diag_data.scratch [10], diag_data.scratch[11], diag_data.scratch[12], diag_data .scratch[13], diag_data.scratch[14], diag_data.scratch[15], diag_data .pc, diag_data.undefined_address_fault_addr, diag_data.inst_fetch_fault_addr , diag_data.data_write_fault_addr, diag_data.inbox1_rptr, diag_data .inbox1_wptr, diag_data.inbox1_size, diag_data.inbox0_rptr, diag_data .inbox0_wptr, diag_data.inbox0_size, diag_data.is_dmcub_enabled , diag_data.is_dmcub_soft_reset, diag_data.is_dmcub_secure_reset , diag_data.is_traceport_en, diag_data.is_cw0_enabled, diag_data .is_cw6_enabled) | ||||||||||
829 | " scratch [10] : %08x\n"___drm_dbg(((void *)0), DRM_UT_KMS, "DMCUB STATE\n" " dmcub_version : %08x\n" " scratch [0] : %08x\n" " scratch [1] : %08x\n" " scratch [2] : %08x\n" " scratch [3] : %08x\n" " scratch [4] : %08x\n" " scratch [5] : %08x\n" " scratch [6] : %08x\n" " scratch [7] : %08x\n" " scratch [8] : %08x\n" " scratch [9] : %08x\n" " scratch [10] : %08x\n" " scratch [11] : %08x\n" " scratch [12] : %08x\n" " scratch [13] : %08x\n" " scratch [14] : %08x\n" " scratch [15] : %08x\n" " pc : %08x\n" " unk_fault_addr : %08x\n" " inst_fault_addr : %08x\n" " data_fault_addr : %08x\n" " inbox1_rptr : %08x\n" " inbox1_wptr : %08x\n" " inbox1_size : %08x\n" " inbox0_rptr : %08x\n" " inbox0_wptr : %08x\n" " inbox0_size : %08x\n" " is_enabled : %d\n" " is_soft_reset : %d\n" " is_secure_reset : %d\n" " is_traceport_en : %d\n" " is_cw0_en : %d\n" " is_cw6_en : %d\n" , diag_data.dmcub_version, diag_data.scratch[0], diag_data.scratch [1], diag_data.scratch[2], diag_data.scratch[3], diag_data.scratch [4], diag_data.scratch[5], diag_data.scratch[6], diag_data.scratch [7], diag_data.scratch[8], diag_data.scratch[9], diag_data.scratch [10], diag_data.scratch[11], diag_data.scratch[12], diag_data .scratch[13], diag_data.scratch[14], diag_data.scratch[15], diag_data .pc, diag_data.undefined_address_fault_addr, diag_data.inst_fetch_fault_addr , diag_data.data_write_fault_addr, diag_data.inbox1_rptr, diag_data .inbox1_wptr, diag_data.inbox1_size, diag_data.inbox0_rptr, diag_data .inbox0_wptr, diag_data.inbox0_size, diag_data.is_dmcub_enabled , diag_data.is_dmcub_soft_reset, diag_data.is_dmcub_secure_reset , diag_data.is_traceport_en, diag_data.is_cw0_enabled, diag_data .is_cw6_enabled) | ||||||||||
830 | " scratch [11] : %08x\n"___drm_dbg(((void *)0), DRM_UT_KMS, "DMCUB STATE\n" " dmcub_version : %08x\n" " scratch [0] : %08x\n" " scratch [1] : %08x\n" " scratch [2] : %08x\n" " scratch [3] : %08x\n" " scratch [4] : %08x\n" " scratch [5] : %08x\n" " scratch [6] : %08x\n" " scratch [7] : %08x\n" " scratch [8] : %08x\n" " scratch [9] : %08x\n" " scratch [10] : %08x\n" " scratch [11] : %08x\n" " scratch [12] : %08x\n" " scratch [13] : %08x\n" " scratch [14] : %08x\n" " scratch [15] : %08x\n" " pc : %08x\n" " unk_fault_addr : %08x\n" " inst_fault_addr : %08x\n" " data_fault_addr : %08x\n" " inbox1_rptr : %08x\n" " inbox1_wptr : %08x\n" " inbox1_size : %08x\n" " inbox0_rptr : %08x\n" " inbox0_wptr : %08x\n" " inbox0_size : %08x\n" " is_enabled : %d\n" " is_soft_reset : %d\n" " is_secure_reset : %d\n" " is_traceport_en : %d\n" " is_cw0_en : %d\n" " is_cw6_en : %d\n" , diag_data.dmcub_version, diag_data.scratch[0], diag_data.scratch [1], diag_data.scratch[2], diag_data.scratch[3], diag_data.scratch [4], diag_data.scratch[5], diag_data.scratch[6], diag_data.scratch [7], diag_data.scratch[8], diag_data.scratch[9], diag_data.scratch [10], diag_data.scratch[11], diag_data.scratch[12], diag_data .scratch[13], diag_data.scratch[14], diag_data.scratch[15], diag_data .pc, diag_data.undefined_address_fault_addr, diag_data.inst_fetch_fault_addr , diag_data.data_write_fault_addr, diag_data.inbox1_rptr, diag_data .inbox1_wptr, diag_data.inbox1_size, diag_data.inbox0_rptr, diag_data .inbox0_wptr, diag_data.inbox0_size, diag_data.is_dmcub_enabled , diag_data.is_dmcub_soft_reset, diag_data.is_dmcub_secure_reset , diag_data.is_traceport_en, diag_data.is_cw0_enabled, diag_data .is_cw6_enabled) | ||||||||||
831 | " scratch [12] : %08x\n"___drm_dbg(((void *)0), DRM_UT_KMS, "DMCUB STATE\n" " dmcub_version : %08x\n" " scratch [0] : %08x\n" " scratch [1] : %08x\n" " scratch [2] : %08x\n" " scratch [3] : %08x\n" " scratch [4] : %08x\n" " scratch [5] : %08x\n" " scratch [6] : %08x\n" " scratch [7] : %08x\n" " scratch [8] : %08x\n" " scratch [9] : %08x\n" " scratch [10] : %08x\n" " scratch [11] : %08x\n" " scratch [12] : %08x\n" " scratch [13] : %08x\n" " scratch [14] : %08x\n" " scratch [15] : %08x\n" " pc : %08x\n" " unk_fault_addr : %08x\n" " inst_fault_addr : %08x\n" " data_fault_addr : %08x\n" " inbox1_rptr : %08x\n" " inbox1_wptr : %08x\n" " inbox1_size : %08x\n" " inbox0_rptr : %08x\n" " inbox0_wptr : %08x\n" " inbox0_size : %08x\n" " is_enabled : %d\n" " is_soft_reset : %d\n" " is_secure_reset : %d\n" " is_traceport_en : %d\n" " is_cw0_en : %d\n" " is_cw6_en : %d\n" , diag_data.dmcub_version, diag_data.scratch[0], diag_data.scratch [1], diag_data.scratch[2], diag_data.scratch[3], diag_data.scratch [4], diag_data.scratch[5], diag_data.scratch[6], diag_data.scratch [7], diag_data.scratch[8], diag_data.scratch[9], diag_data.scratch [10], diag_data.scratch[11], diag_data.scratch[12], diag_data .scratch[13], diag_data.scratch[14], diag_data.scratch[15], diag_data .pc, diag_data.undefined_address_fault_addr, diag_data.inst_fetch_fault_addr , diag_data.data_write_fault_addr, diag_data.inbox1_rptr, diag_data .inbox1_wptr, diag_data.inbox1_size, diag_data.inbox0_rptr, diag_data .inbox0_wptr, diag_data.inbox0_size, diag_data.is_dmcub_enabled , diag_data.is_dmcub_soft_reset, diag_data.is_dmcub_secure_reset , diag_data.is_traceport_en, diag_data.is_cw0_enabled, diag_data .is_cw6_enabled) | ||||||||||
832 | " scratch [13] : %08x\n"___drm_dbg(((void *)0), DRM_UT_KMS, "DMCUB STATE\n" " dmcub_version : %08x\n" " scratch [0] : %08x\n" " scratch [1] : %08x\n" " scratch [2] : %08x\n" " scratch [3] : %08x\n" " scratch [4] : %08x\n" " scratch [5] : %08x\n" " scratch [6] : %08x\n" " scratch [7] : %08x\n" " scratch [8] : %08x\n" " scratch [9] : %08x\n" " scratch [10] : %08x\n" " scratch [11] : %08x\n" " scratch [12] : %08x\n" " scratch [13] : %08x\n" " scratch [14] : %08x\n" " scratch [15] : %08x\n" " pc : %08x\n" " unk_fault_addr : %08x\n" " inst_fault_addr : %08x\n" " data_fault_addr : %08x\n" " inbox1_rptr : %08x\n" " inbox1_wptr : %08x\n" " inbox1_size : %08x\n" " inbox0_rptr : %08x\n" " inbox0_wptr : %08x\n" " inbox0_size : %08x\n" " is_enabled : %d\n" " is_soft_reset : %d\n" " is_secure_reset : %d\n" " is_traceport_en : %d\n" " is_cw0_en : %d\n" " is_cw6_en : %d\n" , diag_data.dmcub_version, diag_data.scratch[0], diag_data.scratch [1], diag_data.scratch[2], diag_data.scratch[3], diag_data.scratch [4], diag_data.scratch[5], diag_data.scratch[6], diag_data.scratch [7], diag_data.scratch[8], diag_data.scratch[9], diag_data.scratch [10], diag_data.scratch[11], diag_data.scratch[12], diag_data .scratch[13], diag_data.scratch[14], diag_data.scratch[15], diag_data .pc, diag_data.undefined_address_fault_addr, diag_data.inst_fetch_fault_addr , diag_data.data_write_fault_addr, diag_data.inbox1_rptr, diag_data .inbox1_wptr, diag_data.inbox1_size, diag_data.inbox0_rptr, diag_data .inbox0_wptr, diag_data.inbox0_size, diag_data.is_dmcub_enabled , diag_data.is_dmcub_soft_reset, diag_data.is_dmcub_secure_reset , diag_data.is_traceport_en, diag_data.is_cw0_enabled, diag_data .is_cw6_enabled) | ||||||||||
833 | " scratch [14] : %08x\n"___drm_dbg(((void *)0), DRM_UT_KMS, "DMCUB STATE\n" " dmcub_version : %08x\n" " scratch [0] : %08x\n" " scratch [1] : %08x\n" " scratch [2] : %08x\n" " scratch [3] : %08x\n" " scratch [4] : %08x\n" " scratch [5] : %08x\n" " scratch [6] : %08x\n" " scratch [7] : %08x\n" " scratch [8] : %08x\n" " scratch [9] : %08x\n" " scratch [10] : %08x\n" " scratch [11] : %08x\n" " scratch [12] : %08x\n" " scratch [13] : %08x\n" " scratch [14] : %08x\n" " scratch [15] : %08x\n" " pc : %08x\n" " unk_fault_addr : %08x\n" " inst_fault_addr : %08x\n" " data_fault_addr : %08x\n" " inbox1_rptr : %08x\n" " inbox1_wptr : %08x\n" " inbox1_size : %08x\n" " inbox0_rptr : %08x\n" " inbox0_wptr : %08x\n" " inbox0_size : %08x\n" " is_enabled : %d\n" " is_soft_reset : %d\n" " is_secure_reset : %d\n" " is_traceport_en : %d\n" " is_cw0_en : %d\n" " is_cw6_en : %d\n" , diag_data.dmcub_version, diag_data.scratch[0], diag_data.scratch [1], diag_data.scratch[2], diag_data.scratch[3], diag_data.scratch [4], diag_data.scratch[5], diag_data.scratch[6], diag_data.scratch [7], diag_data.scratch[8], diag_data.scratch[9], diag_data.scratch [10], diag_data.scratch[11], diag_data.scratch[12], diag_data .scratch[13], diag_data.scratch[14], diag_data.scratch[15], diag_data .pc, diag_data.undefined_address_fault_addr, diag_data.inst_fetch_fault_addr , diag_data.data_write_fault_addr, diag_data.inbox1_rptr, diag_data .inbox1_wptr, diag_data.inbox1_size, diag_data.inbox0_rptr, diag_data .inbox0_wptr, diag_data.inbox0_size, diag_data.is_dmcub_enabled , diag_data.is_dmcub_soft_reset, diag_data.is_dmcub_secure_reset , diag_data.is_traceport_en, diag_data.is_cw0_enabled, diag_data .is_cw6_enabled) | ||||||||||
834 | " scratch [15] : %08x\n"___drm_dbg(((void *)0), DRM_UT_KMS, "DMCUB STATE\n" " dmcub_version : %08x\n" " scratch [0] : %08x\n" " scratch [1] : %08x\n" " scratch [2] : %08x\n" " scratch [3] : %08x\n" " scratch [4] : %08x\n" " scratch [5] : %08x\n" " scratch [6] : %08x\n" " scratch [7] : %08x\n" " scratch [8] : %08x\n" " scratch [9] : %08x\n" " scratch [10] : %08x\n" " scratch [11] : %08x\n" " scratch [12] : %08x\n" " scratch [13] : %08x\n" " scratch [14] : %08x\n" " scratch [15] : %08x\n" " pc : %08x\n" " unk_fault_addr : %08x\n" " inst_fault_addr : %08x\n" " data_fault_addr : %08x\n" " inbox1_rptr : %08x\n" " inbox1_wptr : %08x\n" " inbox1_size : %08x\n" " inbox0_rptr : %08x\n" " inbox0_wptr : %08x\n" " inbox0_size : %08x\n" " is_enabled : %d\n" " is_soft_reset : %d\n" " is_secure_reset : %d\n" " is_traceport_en : %d\n" " is_cw0_en : %d\n" " is_cw6_en : %d\n" , diag_data.dmcub_version, diag_data.scratch[0], diag_data.scratch [1], diag_data.scratch[2], diag_data.scratch[3], diag_data.scratch [4], diag_data.scratch[5], diag_data.scratch[6], diag_data.scratch [7], diag_data.scratch[8], diag_data.scratch[9], diag_data.scratch [10], diag_data.scratch[11], diag_data.scratch[12], diag_data .scratch[13], diag_data.scratch[14], diag_data.scratch[15], diag_data .pc, diag_data.undefined_address_fault_addr, diag_data.inst_fetch_fault_addr , diag_data.data_write_fault_addr, diag_data.inbox1_rptr, diag_data .inbox1_wptr, diag_data.inbox1_size, diag_data.inbox0_rptr, diag_data .inbox0_wptr, diag_data.inbox0_size, diag_data.is_dmcub_enabled , diag_data.is_dmcub_soft_reset, diag_data.is_dmcub_secure_reset , diag_data.is_traceport_en, diag_data.is_cw0_enabled, diag_data .is_cw6_enabled) | ||||||||||
835 | " pc : %08x\n"___drm_dbg(((void *)0), DRM_UT_KMS, "DMCUB STATE\n" " dmcub_version : %08x\n" " scratch [0] : %08x\n" " scratch [1] : %08x\n" " scratch [2] : %08x\n" " scratch [3] : %08x\n" " scratch [4] : %08x\n" " scratch [5] : %08x\n" " scratch [6] : %08x\n" " scratch [7] : %08x\n" " scratch [8] : %08x\n" " scratch [9] : %08x\n" " scratch [10] : %08x\n" " scratch [11] : %08x\n" " scratch [12] : %08x\n" " scratch [13] : %08x\n" " scratch [14] : %08x\n" " scratch [15] : %08x\n" " pc : %08x\n" " unk_fault_addr : %08x\n" " inst_fault_addr : %08x\n" " data_fault_addr : %08x\n" " inbox1_rptr : %08x\n" " inbox1_wptr : %08x\n" " inbox1_size : %08x\n" " inbox0_rptr : %08x\n" " inbox0_wptr : %08x\n" " inbox0_size : %08x\n" " is_enabled : %d\n" " is_soft_reset : %d\n" " is_secure_reset : %d\n" " is_traceport_en : %d\n" " is_cw0_en : %d\n" " is_cw6_en : %d\n" , diag_data.dmcub_version, diag_data.scratch[0], diag_data.scratch [1], diag_data.scratch[2], diag_data.scratch[3], diag_data.scratch [4], diag_data.scratch[5], diag_data.scratch[6], diag_data.scratch [7], diag_data.scratch[8], diag_data.scratch[9], diag_data.scratch [10], diag_data.scratch[11], diag_data.scratch[12], diag_data .scratch[13], diag_data.scratch[14], diag_data.scratch[15], diag_data .pc, diag_data.undefined_address_fault_addr, diag_data.inst_fetch_fault_addr , diag_data.data_write_fault_addr, diag_data.inbox1_rptr, diag_data .inbox1_wptr, diag_data.inbox1_size, diag_data.inbox0_rptr, diag_data .inbox0_wptr, diag_data.inbox0_size, diag_data.is_dmcub_enabled , diag_data.is_dmcub_soft_reset, diag_data.is_dmcub_secure_reset , diag_data.is_traceport_en, diag_data.is_cw0_enabled, diag_data .is_cw6_enabled) | ||||||||||
836 | " unk_fault_addr : %08x\n"___drm_dbg(((void *)0), DRM_UT_KMS, "DMCUB STATE\n" " dmcub_version : %08x\n" " scratch [0] : %08x\n" " scratch [1] : %08x\n" " scratch [2] : %08x\n" " scratch [3] : %08x\n" " scratch [4] : %08x\n" " scratch [5] : %08x\n" " scratch [6] : %08x\n" " scratch [7] : %08x\n" " scratch [8] : %08x\n" " scratch [9] : %08x\n" " scratch [10] : %08x\n" " scratch [11] : %08x\n" " scratch [12] : %08x\n" " scratch [13] : %08x\n" " scratch [14] : %08x\n" " scratch [15] : %08x\n" " pc : %08x\n" " unk_fault_addr : %08x\n" " inst_fault_addr : %08x\n" " data_fault_addr : %08x\n" " inbox1_rptr : %08x\n" " inbox1_wptr : %08x\n" " inbox1_size : %08x\n" " inbox0_rptr : %08x\n" " inbox0_wptr : %08x\n" " inbox0_size : %08x\n" " is_enabled : %d\n" " is_soft_reset : %d\n" " is_secure_reset : %d\n" " is_traceport_en : %d\n" " is_cw0_en : %d\n" " is_cw6_en : %d\n" , diag_data.dmcub_version, diag_data.scratch[0], diag_data.scratch [1], diag_data.scratch[2], diag_data.scratch[3], diag_data.scratch [4], diag_data.scratch[5], diag_data.scratch[6], diag_data.scratch [7], diag_data.scratch[8], diag_data.scratch[9], diag_data.scratch [10], diag_data.scratch[11], diag_data.scratch[12], diag_data .scratch[13], diag_data.scratch[14], diag_data.scratch[15], diag_data .pc, diag_data.undefined_address_fault_addr, diag_data.inst_fetch_fault_addr , diag_data.data_write_fault_addr, diag_data.inbox1_rptr, diag_data .inbox1_wptr, diag_data.inbox1_size, diag_data.inbox0_rptr, diag_data .inbox0_wptr, diag_data.inbox0_size, diag_data.is_dmcub_enabled , diag_data.is_dmcub_soft_reset, diag_data.is_dmcub_secure_reset , diag_data.is_traceport_en, diag_data.is_cw0_enabled, diag_data .is_cw6_enabled) | ||||||||||
837 | " inst_fault_addr : %08x\n"___drm_dbg(((void *)0), DRM_UT_KMS, "DMCUB STATE\n" " dmcub_version : %08x\n" " scratch [0] : %08x\n" " scratch [1] : %08x\n" " scratch [2] : %08x\n" " scratch [3] : %08x\n" " scratch [4] : %08x\n" " scratch [5] : %08x\n" " scratch [6] : %08x\n" " scratch [7] : %08x\n" " scratch [8] : %08x\n" " scratch [9] : %08x\n" " scratch [10] : %08x\n" " scratch [11] : %08x\n" " scratch [12] : %08x\n" " scratch [13] : %08x\n" " scratch [14] : %08x\n" " scratch [15] : %08x\n" " pc : %08x\n" " unk_fault_addr : %08x\n" " inst_fault_addr : %08x\n" " data_fault_addr : %08x\n" " inbox1_rptr : %08x\n" " inbox1_wptr : %08x\n" " inbox1_size : %08x\n" " inbox0_rptr : %08x\n" " inbox0_wptr : %08x\n" " inbox0_size : %08x\n" " is_enabled : %d\n" " is_soft_reset : %d\n" " is_secure_reset : %d\n" " is_traceport_en : %d\n" " is_cw0_en : %d\n" " is_cw6_en : %d\n" , diag_data.dmcub_version, diag_data.scratch[0], diag_data.scratch [1], diag_data.scratch[2], diag_data.scratch[3], diag_data.scratch [4], diag_data.scratch[5], diag_data.scratch[6], diag_data.scratch [7], diag_data.scratch[8], diag_data.scratch[9], diag_data.scratch [10], diag_data.scratch[11], diag_data.scratch[12], diag_data .scratch[13], diag_data.scratch[14], diag_data.scratch[15], diag_data .pc, diag_data.undefined_address_fault_addr, diag_data.inst_fetch_fault_addr , diag_data.data_write_fault_addr, diag_data.inbox1_rptr, diag_data .inbox1_wptr, diag_data.inbox1_size, diag_data.inbox0_rptr, diag_data .inbox0_wptr, diag_data.inbox0_size, diag_data.is_dmcub_enabled , diag_data.is_dmcub_soft_reset, diag_data.is_dmcub_secure_reset , diag_data.is_traceport_en, diag_data.is_cw0_enabled, diag_data .is_cw6_enabled) | ||||||||||
838 | " data_fault_addr : %08x\n"___drm_dbg(((void *)0), DRM_UT_KMS, "DMCUB STATE\n" " dmcub_version : %08x\n" " scratch [0] : %08x\n" " scratch [1] : %08x\n" " scratch [2] : %08x\n" " scratch [3] : %08x\n" " scratch [4] : %08x\n" " scratch [5] : %08x\n" " scratch [6] : %08x\n" " scratch [7] : %08x\n" " scratch [8] : %08x\n" " scratch [9] : %08x\n" " scratch [10] : %08x\n" " scratch [11] : %08x\n" " scratch [12] : %08x\n" " scratch [13] : %08x\n" " scratch [14] : %08x\n" " scratch [15] : %08x\n" " pc : %08x\n" " unk_fault_addr : %08x\n" " inst_fault_addr : %08x\n" " data_fault_addr : %08x\n" " inbox1_rptr : %08x\n" " inbox1_wptr : %08x\n" " inbox1_size : %08x\n" " inbox0_rptr : %08x\n" " inbox0_wptr : %08x\n" " inbox0_size : %08x\n" " is_enabled : %d\n" " is_soft_reset : %d\n" " is_secure_reset : %d\n" " is_traceport_en : %d\n" " is_cw0_en : %d\n" " is_cw6_en : %d\n" , diag_data.dmcub_version, diag_data.scratch[0], diag_data.scratch [1], diag_data.scratch[2], diag_data.scratch[3], diag_data.scratch [4], diag_data.scratch[5], diag_data.scratch[6], diag_data.scratch [7], diag_data.scratch[8], diag_data.scratch[9], diag_data.scratch [10], diag_data.scratch[11], diag_data.scratch[12], diag_data .scratch[13], diag_data.scratch[14], diag_data.scratch[15], diag_data .pc, diag_data.undefined_address_fault_addr, diag_data.inst_fetch_fault_addr , diag_data.data_write_fault_addr, diag_data.inbox1_rptr, diag_data .inbox1_wptr, diag_data.inbox1_size, diag_data.inbox0_rptr, diag_data .inbox0_wptr, diag_data.inbox0_size, diag_data.is_dmcub_enabled , diag_data.is_dmcub_soft_reset, diag_data.is_dmcub_secure_reset , diag_data.is_traceport_en, diag_data.is_cw0_enabled, diag_data .is_cw6_enabled) | ||||||||||
839 | " inbox1_rptr : %08x\n"___drm_dbg(((void *)0), DRM_UT_KMS, "DMCUB STATE\n" " dmcub_version : %08x\n" " scratch [0] : %08x\n" " scratch [1] : %08x\n" " scratch [2] : %08x\n" " scratch [3] : %08x\n" " scratch [4] : %08x\n" " scratch [5] : %08x\n" " scratch [6] : %08x\n" " scratch [7] : %08x\n" " scratch [8] : %08x\n" " scratch [9] : %08x\n" " scratch [10] : %08x\n" " scratch [11] : %08x\n" " scratch [12] : %08x\n" " scratch [13] : %08x\n" " scratch [14] : %08x\n" " scratch [15] : %08x\n" " pc : %08x\n" " unk_fault_addr : %08x\n" " inst_fault_addr : %08x\n" " data_fault_addr : %08x\n" " inbox1_rptr : %08x\n" " inbox1_wptr : %08x\n" " inbox1_size : %08x\n" " inbox0_rptr : %08x\n" " inbox0_wptr : %08x\n" " inbox0_size : %08x\n" " is_enabled : %d\n" " is_soft_reset : %d\n" " is_secure_reset : %d\n" " is_traceport_en : %d\n" " is_cw0_en : %d\n" " is_cw6_en : %d\n" , diag_data.dmcub_version, diag_data.scratch[0], diag_data.scratch [1], diag_data.scratch[2], diag_data.scratch[3], diag_data.scratch [4], diag_data.scratch[5], diag_data.scratch[6], diag_data.scratch [7], diag_data.scratch[8], diag_data.scratch[9], diag_data.scratch [10], diag_data.scratch[11], diag_data.scratch[12], diag_data .scratch[13], diag_data.scratch[14], diag_data.scratch[15], diag_data .pc, diag_data.undefined_address_fault_addr, diag_data.inst_fetch_fault_addr , diag_data.data_write_fault_addr, diag_data.inbox1_rptr, diag_data .inbox1_wptr, diag_data.inbox1_size, diag_data.inbox0_rptr, diag_data .inbox0_wptr, diag_data.inbox0_size, diag_data.is_dmcub_enabled , diag_data.is_dmcub_soft_reset, diag_data.is_dmcub_secure_reset , diag_data.is_traceport_en, diag_data.is_cw0_enabled, diag_data .is_cw6_enabled) | ||||||||||
840 | " inbox1_wptr : %08x\n"___drm_dbg(((void *)0), DRM_UT_KMS, "DMCUB STATE\n" " dmcub_version : %08x\n" " scratch [0] : %08x\n" " scratch [1] : %08x\n" " scratch [2] : %08x\n" " scratch [3] : %08x\n" " scratch [4] : %08x\n" " scratch [5] : %08x\n" " scratch [6] : %08x\n" " scratch [7] : %08x\n" " scratch [8] : %08x\n" " scratch [9] : %08x\n" " scratch [10] : %08x\n" " scratch [11] : %08x\n" " scratch [12] : %08x\n" " scratch [13] : %08x\n" " scratch [14] : %08x\n" " scratch [15] : %08x\n" " pc : %08x\n" " unk_fault_addr : %08x\n" " inst_fault_addr : %08x\n" " data_fault_addr : %08x\n" " inbox1_rptr : %08x\n" " inbox1_wptr : %08x\n" " inbox1_size : %08x\n" " inbox0_rptr : %08x\n" " inbox0_wptr : %08x\n" " inbox0_size : %08x\n" " is_enabled : %d\n" " is_soft_reset : %d\n" " is_secure_reset : %d\n" " is_traceport_en : %d\n" " is_cw0_en : %d\n" " is_cw6_en : %d\n" , diag_data.dmcub_version, diag_data.scratch[0], diag_data.scratch [1], diag_data.scratch[2], diag_data.scratch[3], diag_data.scratch [4], diag_data.scratch[5], diag_data.scratch[6], diag_data.scratch [7], diag_data.scratch[8], diag_data.scratch[9], diag_data.scratch [10], diag_data.scratch[11], diag_data.scratch[12], diag_data .scratch[13], diag_data.scratch[14], diag_data.scratch[15], diag_data .pc, diag_data.undefined_address_fault_addr, diag_data.inst_fetch_fault_addr , diag_data.data_write_fault_addr, diag_data.inbox1_rptr, diag_data .inbox1_wptr, diag_data.inbox1_size, diag_data.inbox0_rptr, diag_data .inbox0_wptr, diag_data.inbox0_size, diag_data.is_dmcub_enabled , diag_data.is_dmcub_soft_reset, diag_data.is_dmcub_secure_reset , diag_data.is_traceport_en, diag_data.is_cw0_enabled, diag_data .is_cw6_enabled) | ||||||||||
841 | " inbox1_size : %08x\n"___drm_dbg(((void *)0), DRM_UT_KMS, "DMCUB STATE\n" " dmcub_version : %08x\n" " scratch [0] : %08x\n" " scratch [1] : %08x\n" " scratch [2] : %08x\n" " scratch [3] : %08x\n" " scratch [4] : %08x\n" " scratch [5] : %08x\n" " scratch [6] : %08x\n" " scratch [7] : %08x\n" " scratch [8] : %08x\n" " scratch [9] : %08x\n" " scratch [10] : %08x\n" " scratch [11] : %08x\n" " scratch [12] : %08x\n" " scratch [13] : %08x\n" " scratch [14] : %08x\n" " scratch [15] : %08x\n" " pc : %08x\n" " unk_fault_addr : %08x\n" " inst_fault_addr : %08x\n" " data_fault_addr : %08x\n" " inbox1_rptr : %08x\n" " inbox1_wptr : %08x\n" " inbox1_size : %08x\n" " inbox0_rptr : %08x\n" " inbox0_wptr : %08x\n" " inbox0_size : %08x\n" " is_enabled : %d\n" " is_soft_reset : %d\n" " is_secure_reset : %d\n" " is_traceport_en : %d\n" " is_cw0_en : %d\n" " is_cw6_en : %d\n" , diag_data.dmcub_version, diag_data.scratch[0], diag_data.scratch [1], diag_data.scratch[2], diag_data.scratch[3], diag_data.scratch [4], diag_data.scratch[5], diag_data.scratch[6], diag_data.scratch [7], diag_data.scratch[8], diag_data.scratch[9], diag_data.scratch [10], diag_data.scratch[11], diag_data.scratch[12], diag_data .scratch[13], diag_data.scratch[14], diag_data.scratch[15], diag_data .pc, diag_data.undefined_address_fault_addr, diag_data.inst_fetch_fault_addr , diag_data.data_write_fault_addr, diag_data.inbox1_rptr, diag_data .inbox1_wptr, diag_data.inbox1_size, diag_data.inbox0_rptr, diag_data .inbox0_wptr, diag_data.inbox0_size, diag_data.is_dmcub_enabled , diag_data.is_dmcub_soft_reset, diag_data.is_dmcub_secure_reset , diag_data.is_traceport_en, diag_data.is_cw0_enabled, diag_data .is_cw6_enabled) | ||||||||||
842 | " inbox0_rptr : %08x\n"___drm_dbg(((void *)0), DRM_UT_KMS, "DMCUB STATE\n" " dmcub_version : %08x\n" " scratch [0] : %08x\n" " scratch [1] : %08x\n" " scratch [2] : %08x\n" " scratch [3] : %08x\n" " scratch [4] : %08x\n" " scratch [5] : %08x\n" " scratch [6] : %08x\n" " scratch [7] : %08x\n" " scratch [8] : %08x\n" " scratch [9] : %08x\n" " scratch [10] : %08x\n" " scratch [11] : %08x\n" " scratch [12] : %08x\n" " scratch [13] : %08x\n" " scratch [14] : %08x\n" " scratch [15] : %08x\n" " pc : %08x\n" " unk_fault_addr : %08x\n" " inst_fault_addr : %08x\n" " data_fault_addr : %08x\n" " inbox1_rptr : %08x\n" " inbox1_wptr : %08x\n" " inbox1_size : %08x\n" " inbox0_rptr : %08x\n" " inbox0_wptr : %08x\n" " inbox0_size : %08x\n" " is_enabled : %d\n" " is_soft_reset : %d\n" " is_secure_reset : %d\n" " is_traceport_en : %d\n" " is_cw0_en : %d\n" " is_cw6_en : %d\n" , diag_data.dmcub_version, diag_data.scratch[0], diag_data.scratch [1], diag_data.scratch[2], diag_data.scratch[3], diag_data.scratch [4], diag_data.scratch[5], diag_data.scratch[6], diag_data.scratch [7], diag_data.scratch[8], diag_data.scratch[9], diag_data.scratch [10], diag_data.scratch[11], diag_data.scratch[12], diag_data .scratch[13], diag_data.scratch[14], diag_data.scratch[15], diag_data .pc, diag_data.undefined_address_fault_addr, diag_data.inst_fetch_fault_addr , diag_data.data_write_fault_addr, diag_data.inbox1_rptr, diag_data .inbox1_wptr, diag_data.inbox1_size, diag_data.inbox0_rptr, diag_data .inbox0_wptr, diag_data.inbox0_size, diag_data.is_dmcub_enabled , diag_data.is_dmcub_soft_reset, diag_data.is_dmcub_secure_reset , diag_data.is_traceport_en, diag_data.is_cw0_enabled, diag_data .is_cw6_enabled) | ||||||||||
843 | " inbox0_wptr : %08x\n"___drm_dbg(((void *)0), DRM_UT_KMS, "DMCUB STATE\n" " dmcub_version : %08x\n" " scratch [0] : %08x\n" " scratch [1] : %08x\n" " scratch [2] : %08x\n" " scratch [3] : %08x\n" " scratch [4] : %08x\n" " scratch [5] : %08x\n" " scratch [6] : %08x\n" " scratch [7] : %08x\n" " scratch [8] : %08x\n" " scratch [9] : %08x\n" " scratch [10] : %08x\n" " scratch [11] : %08x\n" " scratch [12] : %08x\n" " scratch [13] : %08x\n" " scratch [14] : %08x\n" " scratch [15] : %08x\n" " pc : %08x\n" " unk_fault_addr : %08x\n" " inst_fault_addr : %08x\n" " data_fault_addr : %08x\n" " inbox1_rptr : %08x\n" " inbox1_wptr : %08x\n" " inbox1_size : %08x\n" " inbox0_rptr : %08x\n" " inbox0_wptr : %08x\n" " inbox0_size : %08x\n" " is_enabled : %d\n" " is_soft_reset : %d\n" " is_secure_reset : %d\n" " is_traceport_en : %d\n" " is_cw0_en : %d\n" " is_cw6_en : %d\n" , diag_data.dmcub_version, diag_data.scratch[0], diag_data.scratch [1], diag_data.scratch[2], diag_data.scratch[3], diag_data.scratch [4], diag_data.scratch[5], diag_data.scratch[6], diag_data.scratch [7], diag_data.scratch[8], diag_data.scratch[9], diag_data.scratch [10], diag_data.scratch[11], diag_data.scratch[12], diag_data .scratch[13], diag_data.scratch[14], diag_data.scratch[15], diag_data .pc, diag_data.undefined_address_fault_addr, diag_data.inst_fetch_fault_addr , diag_data.data_write_fault_addr, diag_data.inbox1_rptr, diag_data .inbox1_wptr, diag_data.inbox1_size, diag_data.inbox0_rptr, diag_data .inbox0_wptr, diag_data.inbox0_size, diag_data.is_dmcub_enabled , diag_data.is_dmcub_soft_reset, diag_data.is_dmcub_secure_reset , diag_data.is_traceport_en, diag_data.is_cw0_enabled, diag_data .is_cw6_enabled) | ||||||||||
844 | " inbox0_size : %08x\n"___drm_dbg(((void *)0), DRM_UT_KMS, "DMCUB STATE\n" " dmcub_version : %08x\n" " scratch [0] : %08x\n" " scratch [1] : %08x\n" " scratch [2] : %08x\n" " scratch [3] : %08x\n" " scratch [4] : %08x\n" " scratch [5] : %08x\n" " scratch [6] : %08x\n" " scratch [7] : %08x\n" " scratch [8] : %08x\n" " scratch [9] : %08x\n" " scratch [10] : %08x\n" " scratch [11] : %08x\n" " scratch [12] : %08x\n" " scratch [13] : %08x\n" " scratch [14] : %08x\n" " scratch [15] : %08x\n" " pc : %08x\n" " unk_fault_addr : %08x\n" " inst_fault_addr : %08x\n" " data_fault_addr : %08x\n" " inbox1_rptr : %08x\n" " inbox1_wptr : %08x\n" " inbox1_size : %08x\n" " inbox0_rptr : %08x\n" " inbox0_wptr : %08x\n" " inbox0_size : %08x\n" " is_enabled : %d\n" " is_soft_reset : %d\n" " is_secure_reset : %d\n" " is_traceport_en : %d\n" " is_cw0_en : %d\n" " is_cw6_en : %d\n" , diag_data.dmcub_version, diag_data.scratch[0], diag_data.scratch [1], diag_data.scratch[2], diag_data.scratch[3], diag_data.scratch [4], diag_data.scratch[5], diag_data.scratch[6], diag_data.scratch [7], diag_data.scratch[8], diag_data.scratch[9], diag_data.scratch [10], diag_data.scratch[11], diag_data.scratch[12], diag_data .scratch[13], diag_data.scratch[14], diag_data.scratch[15], diag_data .pc, diag_data.undefined_address_fault_addr, diag_data.inst_fetch_fault_addr , diag_data.data_write_fault_addr, diag_data.inbox1_rptr, diag_data .inbox1_wptr, diag_data.inbox1_size, diag_data.inbox0_rptr, diag_data .inbox0_wptr, diag_data.inbox0_size, diag_data.is_dmcub_enabled , diag_data.is_dmcub_soft_reset, diag_data.is_dmcub_secure_reset , diag_data.is_traceport_en, diag_data.is_cw0_enabled, diag_data .is_cw6_enabled) | ||||||||||
845 | " is_enabled : %d\n"___drm_dbg(((void *)0), DRM_UT_KMS, "DMCUB STATE\n" " dmcub_version : %08x\n" " scratch [0] : %08x\n" " scratch [1] : %08x\n" " scratch [2] : %08x\n" " scratch [3] : %08x\n" " scratch [4] : %08x\n" " scratch [5] : %08x\n" " scratch [6] : %08x\n" " scratch [7] : %08x\n" " scratch [8] : %08x\n" " scratch [9] : %08x\n" " scratch [10] : %08x\n" " scratch [11] : %08x\n" " scratch [12] : %08x\n" " scratch [13] : %08x\n" " scratch [14] : %08x\n" " scratch [15] : %08x\n" " pc : %08x\n" " unk_fault_addr : %08x\n" " inst_fault_addr : %08x\n" " data_fault_addr : %08x\n" " inbox1_rptr : %08x\n" " inbox1_wptr : %08x\n" " inbox1_size : %08x\n" " inbox0_rptr : %08x\n" " inbox0_wptr : %08x\n" " inbox0_size : %08x\n" " is_enabled : %d\n" " is_soft_reset : %d\n" " is_secure_reset : %d\n" " is_traceport_en : %d\n" " is_cw0_en : %d\n" " is_cw6_en : %d\n" , diag_data.dmcub_version, diag_data.scratch[0], diag_data.scratch [1], diag_data.scratch[2], diag_data.scratch[3], diag_data.scratch [4], diag_data.scratch[5], diag_data.scratch[6], diag_data.scratch [7], diag_data.scratch[8], diag_data.scratch[9], diag_data.scratch [10], diag_data.scratch[11], diag_data.scratch[12], diag_data .scratch[13], diag_data.scratch[14], diag_data.scratch[15], diag_data .pc, diag_data.undefined_address_fault_addr, diag_data.inst_fetch_fault_addr , diag_data.data_write_fault_addr, diag_data.inbox1_rptr, diag_data .inbox1_wptr, diag_data.inbox1_size, diag_data.inbox0_rptr, diag_data .inbox0_wptr, diag_data.inbox0_size, diag_data.is_dmcub_enabled , diag_data.is_dmcub_soft_reset, diag_data.is_dmcub_secure_reset , diag_data.is_traceport_en, diag_data.is_cw0_enabled, diag_data .is_cw6_enabled) | ||||||||||
846 | " is_soft_reset : %d\n"___drm_dbg(((void *)0), DRM_UT_KMS, "DMCUB STATE\n" " dmcub_version : %08x\n" " scratch [0] : %08x\n" " scratch [1] : %08x\n" " scratch [2] : %08x\n" " scratch [3] : %08x\n" " scratch [4] : %08x\n" " scratch [5] : %08x\n" " scratch [6] : %08x\n" " scratch [7] : %08x\n" " scratch [8] : %08x\n" " scratch [9] : %08x\n" " scratch [10] : %08x\n" " scratch [11] : %08x\n" " scratch [12] : %08x\n" " scratch [13] : %08x\n" " scratch [14] : %08x\n" " scratch [15] : %08x\n" " pc : %08x\n" " unk_fault_addr : %08x\n" " inst_fault_addr : %08x\n" " data_fault_addr : %08x\n" " inbox1_rptr : %08x\n" " inbox1_wptr : %08x\n" " inbox1_size : %08x\n" " inbox0_rptr : %08x\n" " inbox0_wptr : %08x\n" " inbox0_size : %08x\n" " is_enabled : %d\n" " is_soft_reset : %d\n" " is_secure_reset : %d\n" " is_traceport_en : %d\n" " is_cw0_en : %d\n" " is_cw6_en : %d\n" , diag_data.dmcub_version, diag_data.scratch[0], diag_data.scratch [1], diag_data.scratch[2], diag_data.scratch[3], diag_data.scratch [4], diag_data.scratch[5], diag_data.scratch[6], diag_data.scratch [7], diag_data.scratch[8], diag_data.scratch[9], diag_data.scratch [10], diag_data.scratch[11], diag_data.scratch[12], diag_data .scratch[13], diag_data.scratch[14], diag_data.scratch[15], diag_data .pc, diag_data.undefined_address_fault_addr, diag_data.inst_fetch_fault_addr , diag_data.data_write_fault_addr, diag_data.inbox1_rptr, diag_data .inbox1_wptr, diag_data.inbox1_size, diag_data.inbox0_rptr, diag_data .inbox0_wptr, diag_data.inbox0_size, diag_data.is_dmcub_enabled , diag_data.is_dmcub_soft_reset, diag_data.is_dmcub_secure_reset , diag_data.is_traceport_en, diag_data.is_cw0_enabled, diag_data .is_cw6_enabled) | ||||||||||
847 | " is_secure_reset : %d\n"___drm_dbg(((void *)0), DRM_UT_KMS, "DMCUB STATE\n" " dmcub_version : %08x\n" " scratch [0] : %08x\n" " scratch [1] : %08x\n" " scratch [2] : %08x\n" " scratch [3] : %08x\n" " scratch [4] : %08x\n" " scratch [5] : %08x\n" " scratch [6] : %08x\n" " scratch [7] : %08x\n" " scratch [8] : %08x\n" " scratch [9] : %08x\n" " scratch [10] : %08x\n" " scratch [11] : %08x\n" " scratch [12] : %08x\n" " scratch [13] : %08x\n" " scratch [14] : %08x\n" " scratch [15] : %08x\n" " pc : %08x\n" " unk_fault_addr : %08x\n" " inst_fault_addr : %08x\n" " data_fault_addr : %08x\n" " inbox1_rptr : %08x\n" " inbox1_wptr : %08x\n" " inbox1_size : %08x\n" " inbox0_rptr : %08x\n" " inbox0_wptr : %08x\n" " inbox0_size : %08x\n" " is_enabled : %d\n" " is_soft_reset : %d\n" " is_secure_reset : %d\n" " is_traceport_en : %d\n" " is_cw0_en : %d\n" " is_cw6_en : %d\n" , diag_data.dmcub_version, diag_data.scratch[0], diag_data.scratch [1], diag_data.scratch[2], diag_data.scratch[3], diag_data.scratch [4], diag_data.scratch[5], diag_data.scratch[6], diag_data.scratch [7], diag_data.scratch[8], diag_data.scratch[9], diag_data.scratch [10], diag_data.scratch[11], diag_data.scratch[12], diag_data .scratch[13], diag_data.scratch[14], diag_data.scratch[15], diag_data .pc, diag_data.undefined_address_fault_addr, diag_data.inst_fetch_fault_addr , diag_data.data_write_fault_addr, diag_data.inbox1_rptr, diag_data .inbox1_wptr, diag_data.inbox1_size, diag_data.inbox0_rptr, diag_data .inbox0_wptr, diag_data.inbox0_size, diag_data.is_dmcub_enabled , diag_data.is_dmcub_soft_reset, diag_data.is_dmcub_secure_reset , diag_data.is_traceport_en, diag_data.is_cw0_enabled, diag_data .is_cw6_enabled) | ||||||||||
848 | " is_traceport_en : %d\n"___drm_dbg(((void *)0), DRM_UT_KMS, "DMCUB STATE\n" " dmcub_version : %08x\n" " scratch [0] : %08x\n" " scratch [1] : %08x\n" " scratch [2] : %08x\n" " scratch [3] : %08x\n" " scratch [4] : %08x\n" " scratch [5] : %08x\n" " scratch [6] : %08x\n" " scratch [7] : %08x\n" " scratch [8] : %08x\n" " scratch [9] : %08x\n" " scratch [10] : %08x\n" " scratch [11] : %08x\n" " scratch [12] : %08x\n" " scratch [13] : %08x\n" " scratch [14] : %08x\n" " scratch [15] : %08x\n" " pc : %08x\n" " unk_fault_addr : %08x\n" " inst_fault_addr : %08x\n" " data_fault_addr : %08x\n" " inbox1_rptr : %08x\n" " inbox1_wptr : %08x\n" " inbox1_size : %08x\n" " inbox0_rptr : %08x\n" " inbox0_wptr : %08x\n" " inbox0_size : %08x\n" " is_enabled : %d\n" " is_soft_reset : %d\n" " is_secure_reset : %d\n" " is_traceport_en : %d\n" " is_cw0_en : %d\n" " is_cw6_en : %d\n" , diag_data.dmcub_version, diag_data.scratch[0], diag_data.scratch [1], diag_data.scratch[2], diag_data.scratch[3], diag_data.scratch [4], diag_data.scratch[5], diag_data.scratch[6], diag_data.scratch [7], diag_data.scratch[8], diag_data.scratch[9], diag_data.scratch [10], diag_data.scratch[11], diag_data.scratch[12], diag_data .scratch[13], diag_data.scratch[14], diag_data.scratch[15], diag_data .pc, diag_data.undefined_address_fault_addr, diag_data.inst_fetch_fault_addr , diag_data.data_write_fault_addr, diag_data.inbox1_rptr, diag_data .inbox1_wptr, diag_data.inbox1_size, diag_data.inbox0_rptr, diag_data .inbox0_wptr, diag_data.inbox0_size, diag_data.is_dmcub_enabled , diag_data.is_dmcub_soft_reset, diag_data.is_dmcub_secure_reset , diag_data.is_traceport_en, diag_data.is_cw0_enabled, diag_data .is_cw6_enabled) | ||||||||||
849 | " is_cw0_en : %d\n"___drm_dbg(((void *)0), DRM_UT_KMS, "DMCUB STATE\n" " dmcub_version : %08x\n" " scratch [0] : %08x\n" " scratch [1] : %08x\n" " scratch [2] : %08x\n" " scratch [3] : %08x\n" " scratch [4] : %08x\n" " scratch [5] : %08x\n" " scratch [6] : %08x\n" " scratch [7] : %08x\n" " scratch [8] : %08x\n" " scratch [9] : %08x\n" " scratch [10] : %08x\n" " scratch [11] : %08x\n" " scratch [12] : %08x\n" " scratch [13] : %08x\n" " scratch [14] : %08x\n" " scratch [15] : %08x\n" " pc : %08x\n" " unk_fault_addr : %08x\n" " inst_fault_addr : %08x\n" " data_fault_addr : %08x\n" " inbox1_rptr : %08x\n" " inbox1_wptr : %08x\n" " inbox1_size : %08x\n" " inbox0_rptr : %08x\n" " inbox0_wptr : %08x\n" " inbox0_size : %08x\n" " is_enabled : %d\n" " is_soft_reset : %d\n" " is_secure_reset : %d\n" " is_traceport_en : %d\n" " is_cw0_en : %d\n" " is_cw6_en : %d\n" , diag_data.dmcub_version, diag_data.scratch[0], diag_data.scratch [1], diag_data.scratch[2], diag_data.scratch[3], diag_data.scratch [4], diag_data.scratch[5], diag_data.scratch[6], diag_data.scratch [7], diag_data.scratch[8], diag_data.scratch[9], diag_data.scratch [10], diag_data.scratch[11], diag_data.scratch[12], diag_data .scratch[13], diag_data.scratch[14], diag_data.scratch[15], diag_data .pc, diag_data.undefined_address_fault_addr, diag_data.inst_fetch_fault_addr , diag_data.data_write_fault_addr, diag_data.inbox1_rptr, diag_data .inbox1_wptr, diag_data.inbox1_size, diag_data.inbox0_rptr, diag_data .inbox0_wptr, diag_data.inbox0_size, diag_data.is_dmcub_enabled , diag_data.is_dmcub_soft_reset, diag_data.is_dmcub_secure_reset , diag_data.is_traceport_en, diag_data.is_cw0_enabled, diag_data .is_cw6_enabled) | ||||||||||
850 | " is_cw6_en : %d\n",___drm_dbg(((void *)0), DRM_UT_KMS, "DMCUB STATE\n" " dmcub_version : %08x\n" " scratch [0] : %08x\n" " scratch [1] : %08x\n" " scratch [2] : %08x\n" " scratch [3] : %08x\n" " scratch [4] : %08x\n" " scratch [5] : %08x\n" " scratch [6] : %08x\n" " scratch [7] : %08x\n" " scratch [8] : %08x\n" " scratch [9] : %08x\n" " scratch [10] : %08x\n" " scratch [11] : %08x\n" " scratch [12] : %08x\n" " scratch [13] : %08x\n" " scratch [14] : %08x\n" " scratch [15] : %08x\n" " pc : %08x\n" " unk_fault_addr : %08x\n" " inst_fault_addr : %08x\n" " data_fault_addr : %08x\n" " inbox1_rptr : %08x\n" " inbox1_wptr : %08x\n" " inbox1_size : %08x\n" " inbox0_rptr : %08x\n" " inbox0_wptr : %08x\n" " inbox0_size : %08x\n" " is_enabled : %d\n" " is_soft_reset : %d\n" " is_secure_reset : %d\n" " is_traceport_en : %d\n" " is_cw0_en : %d\n" " is_cw6_en : %d\n" , diag_data.dmcub_version, diag_data.scratch[0], diag_data.scratch [1], diag_data.scratch[2], diag_data.scratch[3], diag_data.scratch [4], diag_data.scratch[5], diag_data.scratch[6], diag_data.scratch [7], diag_data.scratch[8], diag_data.scratch[9], diag_data.scratch [10], diag_data.scratch[11], diag_data.scratch[12], diag_data .scratch[13], diag_data.scratch[14], diag_data.scratch[15], diag_data .pc, diag_data.undefined_address_fault_addr, diag_data.inst_fetch_fault_addr , diag_data.data_write_fault_addr, diag_data.inbox1_rptr, diag_data .inbox1_wptr, diag_data.inbox1_size, diag_data.inbox0_rptr, diag_data .inbox0_wptr, diag_data.inbox0_size, diag_data.is_dmcub_enabled , diag_data.is_dmcub_soft_reset, diag_data.is_dmcub_secure_reset , diag_data.is_traceport_en, diag_data.is_cw0_enabled, diag_data .is_cw6_enabled) | ||||||||||
851 | diag_data.dmcub_version,___drm_dbg(((void *)0), DRM_UT_KMS, "DMCUB STATE\n" " dmcub_version : %08x\n" " scratch [0] : %08x\n" " scratch [1] : %08x\n" " scratch [2] : %08x\n" " scratch [3] : %08x\n" " scratch [4] : %08x\n" " scratch [5] : %08x\n" " scratch [6] : %08x\n" " scratch [7] : %08x\n" " scratch [8] : %08x\n" " scratch [9] : %08x\n" " scratch [10] : %08x\n" " scratch [11] : %08x\n" " scratch [12] : %08x\n" " scratch [13] : %08x\n" " scratch [14] : %08x\n" " scratch [15] : %08x\n" " pc : %08x\n" " unk_fault_addr : %08x\n" " inst_fault_addr : %08x\n" " data_fault_addr : %08x\n" " inbox1_rptr : %08x\n" " inbox1_wptr : %08x\n" " inbox1_size : %08x\n" " inbox0_rptr : %08x\n" " inbox0_wptr : %08x\n" " inbox0_size : %08x\n" " is_enabled : %d\n" " is_soft_reset : %d\n" " is_secure_reset : %d\n" " is_traceport_en : %d\n" " is_cw0_en : %d\n" " is_cw6_en : %d\n" , diag_data.dmcub_version, diag_data.scratch[0], diag_data.scratch [1], diag_data.scratch[2], diag_data.scratch[3], diag_data.scratch [4], diag_data.scratch[5], diag_data.scratch[6], diag_data.scratch [7], diag_data.scratch[8], diag_data.scratch[9], diag_data.scratch [10], diag_data.scratch[11], diag_data.scratch[12], diag_data .scratch[13], diag_data.scratch[14], diag_data.scratch[15], diag_data .pc, diag_data.undefined_address_fault_addr, diag_data.inst_fetch_fault_addr , diag_data.data_write_fault_addr, diag_data.inbox1_rptr, diag_data .inbox1_wptr, diag_data.inbox1_size, diag_data.inbox0_rptr, diag_data .inbox0_wptr, diag_data.inbox0_size, diag_data.is_dmcub_enabled , diag_data.is_dmcub_soft_reset, diag_data.is_dmcub_secure_reset , diag_data.is_traceport_en, diag_data.is_cw0_enabled, diag_data .is_cw6_enabled) | ||||||||||
852 | diag_data.scratch[0],___drm_dbg(((void *)0), DRM_UT_KMS, "DMCUB STATE\n" " dmcub_version : %08x\n" " scratch [0] : %08x\n" " scratch [1] : %08x\n" " scratch [2] : %08x\n" " scratch [3] : %08x\n" " scratch [4] : %08x\n" " scratch [5] : %08x\n" " scratch [6] : %08x\n" " scratch [7] : %08x\n" " scratch [8] : %08x\n" " scratch [9] : %08x\n" " scratch [10] : %08x\n" " scratch [11] : %08x\n" " scratch [12] : %08x\n" " scratch [13] : %08x\n" " scratch [14] : %08x\n" " scratch [15] : %08x\n" " pc : %08x\n" " unk_fault_addr : %08x\n" " inst_fault_addr : %08x\n" " data_fault_addr : %08x\n" " inbox1_rptr : %08x\n" " inbox1_wptr : %08x\n" " inbox1_size : %08x\n" " inbox0_rptr : %08x\n" " inbox0_wptr : %08x\n" " inbox0_size : %08x\n" " is_enabled : %d\n" " is_soft_reset : %d\n" " is_secure_reset : %d\n" " is_traceport_en : %d\n" " is_cw0_en : %d\n" " is_cw6_en : %d\n" , diag_data.dmcub_version, diag_data.scratch[0], diag_data.scratch [1], diag_data.scratch[2], diag_data.scratch[3], diag_data.scratch [4], diag_data.scratch[5], diag_data.scratch[6], diag_data.scratch [7], diag_data.scratch[8], diag_data.scratch[9], diag_data.scratch [10], diag_data.scratch[11], diag_data.scratch[12], diag_data .scratch[13], diag_data.scratch[14], diag_data.scratch[15], diag_data .pc, diag_data.undefined_address_fault_addr, diag_data.inst_fetch_fault_addr , diag_data.data_write_fault_addr, diag_data.inbox1_rptr, diag_data .inbox1_wptr, diag_data.inbox1_size, diag_data.inbox0_rptr, diag_data .inbox0_wptr, diag_data.inbox0_size, diag_data.is_dmcub_enabled , diag_data.is_dmcub_soft_reset, diag_data.is_dmcub_secure_reset , diag_data.is_traceport_en, diag_data.is_cw0_enabled, diag_data .is_cw6_enabled) | ||||||||||
853 | diag_data.scratch[1],___drm_dbg(((void *)0), DRM_UT_KMS, "DMCUB STATE\n" " dmcub_version : %08x\n" " scratch [0] : %08x\n" " scratch [1] : %08x\n" " scratch [2] : %08x\n" " scratch [3] : %08x\n" " scratch [4] : %08x\n" " scratch [5] : %08x\n" " scratch [6] : %08x\n" " scratch [7] : %08x\n" " scratch [8] : %08x\n" " scratch [9] : %08x\n" " scratch [10] : %08x\n" " scratch [11] : %08x\n" " scratch [12] : %08x\n" " scratch [13] : %08x\n" " scratch [14] : %08x\n" " scratch [15] : %08x\n" " pc : %08x\n" " unk_fault_addr : %08x\n" " inst_fault_addr : %08x\n" " data_fault_addr : %08x\n" " inbox1_rptr : %08x\n" " inbox1_wptr : %08x\n" " inbox1_size : %08x\n" " inbox0_rptr : %08x\n" " inbox0_wptr : %08x\n" " inbox0_size : %08x\n" " is_enabled : %d\n" " is_soft_reset : %d\n" " is_secure_reset : %d\n" " is_traceport_en : %d\n" " is_cw0_en : %d\n" " is_cw6_en : %d\n" , diag_data.dmcub_version, diag_data.scratch[0], diag_data.scratch [1], diag_data.scratch[2], diag_data.scratch[3], diag_data.scratch [4], diag_data.scratch[5], diag_data.scratch[6], diag_data.scratch [7], diag_data.scratch[8], diag_data.scratch[9], diag_data.scratch [10], diag_data.scratch[11], diag_data.scratch[12], diag_data .scratch[13], diag_data.scratch[14], diag_data.scratch[15], diag_data .pc, diag_data.undefined_address_fault_addr, diag_data.inst_fetch_fault_addr , diag_data.data_write_fault_addr, diag_data.inbox1_rptr, diag_data .inbox1_wptr, diag_data.inbox1_size, diag_data.inbox0_rptr, diag_data .inbox0_wptr, diag_data.inbox0_size, diag_data.is_dmcub_enabled , diag_data.is_dmcub_soft_reset, diag_data.is_dmcub_secure_reset , diag_data.is_traceport_en, diag_data.is_cw0_enabled, diag_data .is_cw6_enabled) | ||||||||||
854 | diag_data.scratch[2],___drm_dbg(((void *)0), DRM_UT_KMS, "DMCUB STATE\n" " dmcub_version : %08x\n" " scratch [0] : %08x\n" " scratch [1] : %08x\n" " scratch [2] : %08x\n" " scratch [3] : %08x\n" " scratch [4] : %08x\n" " scratch [5] : %08x\n" " scratch [6] : %08x\n" " scratch [7] : %08x\n" " scratch [8] : %08x\n" " scratch [9] : %08x\n" " scratch [10] : %08x\n" " scratch [11] : %08x\n" " scratch [12] : %08x\n" " scratch [13] : %08x\n" " scratch [14] : %08x\n" " scratch [15] : %08x\n" " pc : %08x\n" " unk_fault_addr : %08x\n" " inst_fault_addr : %08x\n" " data_fault_addr : %08x\n" " inbox1_rptr : %08x\n" " inbox1_wptr : %08x\n" " inbox1_size : %08x\n" " inbox0_rptr : %08x\n" " inbox0_wptr : %08x\n" " inbox0_size : %08x\n" " is_enabled : %d\n" " is_soft_reset : %d\n" " is_secure_reset : %d\n" " is_traceport_en : %d\n" " is_cw0_en : %d\n" " is_cw6_en : %d\n" , diag_data.dmcub_version, diag_data.scratch[0], diag_data.scratch [1], diag_data.scratch[2], diag_data.scratch[3], diag_data.scratch [4], diag_data.scratch[5], diag_data.scratch[6], diag_data.scratch [7], diag_data.scratch[8], diag_data.scratch[9], diag_data.scratch [10], diag_data.scratch[11], diag_data.scratch[12], diag_data .scratch[13], diag_data.scratch[14], diag_data.scratch[15], diag_data .pc, diag_data.undefined_address_fault_addr, diag_data.inst_fetch_fault_addr , diag_data.data_write_fault_addr, diag_data.inbox1_rptr, diag_data .inbox1_wptr, diag_data.inbox1_size, diag_data.inbox0_rptr, diag_data .inbox0_wptr, diag_data.inbox0_size, diag_data.is_dmcub_enabled , diag_data.is_dmcub_soft_reset, diag_data.is_dmcub_secure_reset , diag_data.is_traceport_en, diag_data.is_cw0_enabled, diag_data .is_cw6_enabled) | ||||||||||
855 | diag_data.scratch[3],___drm_dbg(((void *)0), DRM_UT_KMS, "DMCUB STATE\n" " dmcub_version : %08x\n" " scratch [0] : %08x\n" " scratch [1] : %08x\n" " scratch [2] : %08x\n" " scratch [3] : %08x\n" " scratch [4] : %08x\n" " scratch [5] : %08x\n" " scratch [6] : %08x\n" " scratch [7] : %08x\n" " scratch [8] : %08x\n" " scratch [9] : %08x\n" " scratch [10] : %08x\n" " scratch [11] : %08x\n" " scratch [12] : %08x\n" " scratch [13] : %08x\n" " scratch [14] : %08x\n" " scratch [15] : %08x\n" " pc : %08x\n" " unk_fault_addr : %08x\n" " inst_fault_addr : %08x\n" " data_fault_addr : %08x\n" " inbox1_rptr : %08x\n" " inbox1_wptr : %08x\n" " inbox1_size : %08x\n" " inbox0_rptr : %08x\n" " inbox0_wptr : %08x\n" " inbox0_size : %08x\n" " is_enabled : %d\n" " is_soft_reset : %d\n" " is_secure_reset : %d\n" " is_traceport_en : %d\n" " is_cw0_en : %d\n" " is_cw6_en : %d\n" , diag_data.dmcub_version, diag_data.scratch[0], diag_data.scratch [1], diag_data.scratch[2], diag_data.scratch[3], diag_data.scratch [4], diag_data.scratch[5], diag_data.scratch[6], diag_data.scratch [7], diag_data.scratch[8], diag_data.scratch[9], diag_data.scratch [10], diag_data.scratch[11], diag_data.scratch[12], diag_data .scratch[13], diag_data.scratch[14], diag_data.scratch[15], diag_data .pc, diag_data.undefined_address_fault_addr, diag_data.inst_fetch_fault_addr , diag_data.data_write_fault_addr, diag_data.inbox1_rptr, diag_data .inbox1_wptr, diag_data.inbox1_size, diag_data.inbox0_rptr, diag_data .inbox0_wptr, diag_data.inbox0_size, diag_data.is_dmcub_enabled , diag_data.is_dmcub_soft_reset, diag_data.is_dmcub_secure_reset , diag_data.is_traceport_en, diag_data.is_cw0_enabled, diag_data .is_cw6_enabled) | ||||||||||
856 | diag_data.scratch[4],___drm_dbg(((void *)0), DRM_UT_KMS, "DMCUB STATE\n" " dmcub_version : %08x\n" " scratch [0] : %08x\n" " scratch [1] : %08x\n" " scratch [2] : %08x\n" " scratch [3] : %08x\n" " scratch [4] : %08x\n" " scratch [5] : %08x\n" " scratch [6] : %08x\n" " scratch [7] : %08x\n" " scratch [8] : %08x\n" " scratch [9] : %08x\n" " scratch [10] : %08x\n" " scratch [11] : %08x\n" " scratch [12] : %08x\n" " scratch [13] : %08x\n" " scratch [14] : %08x\n" " scratch [15] : %08x\n" " pc : %08x\n" " unk_fault_addr : %08x\n" " inst_fault_addr : %08x\n" " data_fault_addr : %08x\n" " inbox1_rptr : %08x\n" " inbox1_wptr : %08x\n" " inbox1_size : %08x\n" " inbox0_rptr : %08x\n" " inbox0_wptr : %08x\n" " inbox0_size : %08x\n" " is_enabled : %d\n" " is_soft_reset : %d\n" " is_secure_reset : %d\n" " is_traceport_en : %d\n" " is_cw0_en : %d\n" " is_cw6_en : %d\n" , diag_data.dmcub_version, diag_data.scratch[0], diag_data.scratch [1], diag_data.scratch[2], diag_data.scratch[3], diag_data.scratch [4], diag_data.scratch[5], diag_data.scratch[6], diag_data.scratch [7], diag_data.scratch[8], diag_data.scratch[9], diag_data.scratch [10], diag_data.scratch[11], diag_data.scratch[12], diag_data .scratch[13], diag_data.scratch[14], diag_data.scratch[15], diag_data .pc, diag_data.undefined_address_fault_addr, diag_data.inst_fetch_fault_addr , diag_data.data_write_fault_addr, diag_data.inbox1_rptr, diag_data .inbox1_wptr, diag_data.inbox1_size, diag_data.inbox0_rptr, diag_data .inbox0_wptr, diag_data.inbox0_size, diag_data.is_dmcub_enabled , diag_data.is_dmcub_soft_reset, diag_data.is_dmcub_secure_reset , diag_data.is_traceport_en, diag_data.is_cw0_enabled, diag_data .is_cw6_enabled) | ||||||||||
857 | diag_data.scratch[5],___drm_dbg(((void *)0), DRM_UT_KMS, "DMCUB STATE\n" " dmcub_version : %08x\n" " scratch [0] : %08x\n" " scratch [1] : %08x\n" " scratch [2] : %08x\n" " scratch [3] : %08x\n" " scratch [4] : %08x\n" " scratch [5] : %08x\n" " scratch [6] : %08x\n" " scratch [7] : %08x\n" " scratch [8] : %08x\n" " scratch [9] : %08x\n" " scratch [10] : %08x\n" " scratch [11] : %08x\n" " scratch [12] : %08x\n" " scratch [13] : %08x\n" " scratch [14] : %08x\n" " scratch [15] : %08x\n" " pc : %08x\n" " unk_fault_addr : %08x\n" " inst_fault_addr : %08x\n" " data_fault_addr : %08x\n" " inbox1_rptr : %08x\n" " inbox1_wptr : %08x\n" " inbox1_size : %08x\n" " inbox0_rptr : %08x\n" " inbox0_wptr : %08x\n" " inbox0_size : %08x\n" " is_enabled : %d\n" " is_soft_reset : %d\n" " is_secure_reset : %d\n" " is_traceport_en : %d\n" " is_cw0_en : %d\n" " is_cw6_en : %d\n" , diag_data.dmcub_version, diag_data.scratch[0], diag_data.scratch [1], diag_data.scratch[2], diag_data.scratch[3], diag_data.scratch [4], diag_data.scratch[5], diag_data.scratch[6], diag_data.scratch [7], diag_data.scratch[8], diag_data.scratch[9], diag_data.scratch [10], diag_data.scratch[11], diag_data.scratch[12], diag_data .scratch[13], diag_data.scratch[14], diag_data.scratch[15], diag_data .pc, diag_data.undefined_address_fault_addr, diag_data.inst_fetch_fault_addr , diag_data.data_write_fault_addr, diag_data.inbox1_rptr, diag_data .inbox1_wptr, diag_data.inbox1_size, diag_data.inbox0_rptr, diag_data .inbox0_wptr, diag_data.inbox0_size, diag_data.is_dmcub_enabled , diag_data.is_dmcub_soft_reset, diag_data.is_dmcub_secure_reset , diag_data.is_traceport_en, diag_data.is_cw0_enabled, diag_data .is_cw6_enabled) | ||||||||||
858 | diag_data.scratch[6],___drm_dbg(((void *)0), DRM_UT_KMS, "DMCUB STATE\n" " dmcub_version : %08x\n" " scratch [0] : %08x\n" " scratch [1] : %08x\n" " scratch [2] : %08x\n" " scratch [3] : %08x\n" " scratch [4] : %08x\n" " scratch [5] : %08x\n" " scratch [6] : %08x\n" " scratch [7] : %08x\n" " scratch [8] : %08x\n" " scratch [9] : %08x\n" " scratch [10] : %08x\n" " scratch [11] : %08x\n" " scratch [12] : %08x\n" " scratch [13] : %08x\n" " scratch [14] : %08x\n" " scratch [15] : %08x\n" " pc : %08x\n" " unk_fault_addr : %08x\n" " inst_fault_addr : %08x\n" " data_fault_addr : %08x\n" " inbox1_rptr : %08x\n" " inbox1_wptr : %08x\n" " inbox1_size : %08x\n" " inbox0_rptr : %08x\n" " inbox0_wptr : %08x\n" " inbox0_size : %08x\n" " is_enabled : %d\n" " is_soft_reset : %d\n" " is_secure_reset : %d\n" " is_traceport_en : %d\n" " is_cw0_en : %d\n" " is_cw6_en : %d\n" , diag_data.dmcub_version, diag_data.scratch[0], diag_data.scratch [1], diag_data.scratch[2], diag_data.scratch[3], diag_data.scratch [4], diag_data.scratch[5], diag_data.scratch[6], diag_data.scratch [7], diag_data.scratch[8], diag_data.scratch[9], diag_data.scratch [10], diag_data.scratch[11], diag_data.scratch[12], diag_data .scratch[13], diag_data.scratch[14], diag_data.scratch[15], diag_data .pc, diag_data.undefined_address_fault_addr, diag_data.inst_fetch_fault_addr , diag_data.data_write_fault_addr, diag_data.inbox1_rptr, diag_data .inbox1_wptr, diag_data.inbox1_size, diag_data.inbox0_rptr, diag_data .inbox0_wptr, diag_data.inbox0_size, diag_data.is_dmcub_enabled , diag_data.is_dmcub_soft_reset, diag_data.is_dmcub_secure_reset , diag_data.is_traceport_en, diag_data.is_cw0_enabled, diag_data .is_cw6_enabled) | ||||||||||
859 | diag_data.scratch[7],___drm_dbg(((void *)0), DRM_UT_KMS, "DMCUB STATE\n" " dmcub_version : %08x\n" " scratch [0] : %08x\n" " scratch [1] : %08x\n" " scratch [2] : %08x\n" " scratch [3] : %08x\n" " scratch [4] : %08x\n" " scratch [5] : %08x\n" " scratch [6] : %08x\n" " scratch [7] : %08x\n" " scratch [8] : %08x\n" " scratch [9] : %08x\n" " scratch [10] : %08x\n" " scratch [11] : %08x\n" " scratch [12] : %08x\n" " scratch [13] : %08x\n" " scratch [14] : %08x\n" " scratch [15] : %08x\n" " pc : %08x\n" " unk_fault_addr : %08x\n" " inst_fault_addr : %08x\n" " data_fault_addr : %08x\n" " inbox1_rptr : %08x\n" " inbox1_wptr : %08x\n" " inbox1_size : %08x\n" " inbox0_rptr : %08x\n" " inbox0_wptr : %08x\n" " inbox0_size : %08x\n" " is_enabled : %d\n" " is_soft_reset : %d\n" " is_secure_reset : %d\n" " is_traceport_en : %d\n" " is_cw0_en : %d\n" " is_cw6_en : %d\n" , diag_data.dmcub_version, diag_data.scratch[0], diag_data.scratch [1], diag_data.scratch[2], diag_data.scratch[3], diag_data.scratch [4], diag_data.scratch[5], diag_data.scratch[6], diag_data.scratch [7], diag_data.scratch[8], diag_data.scratch[9], diag_data.scratch [10], diag_data.scratch[11], diag_data.scratch[12], diag_data .scratch[13], diag_data.scratch[14], diag_data.scratch[15], diag_data .pc, diag_data.undefined_address_fault_addr, diag_data.inst_fetch_fault_addr , diag_data.data_write_fault_addr, diag_data.inbox1_rptr, diag_data .inbox1_wptr, diag_data.inbox1_size, diag_data.inbox0_rptr, diag_data .inbox0_wptr, diag_data.inbox0_size, diag_data.is_dmcub_enabled , diag_data.is_dmcub_soft_reset, diag_data.is_dmcub_secure_reset , diag_data.is_traceport_en, diag_data.is_cw0_enabled, diag_data .is_cw6_enabled) | ||||||||||
860 | diag_data.scratch[8],___drm_dbg(((void *)0), DRM_UT_KMS, "DMCUB STATE\n" " dmcub_version : %08x\n" " scratch [0] : %08x\n" " scratch [1] : %08x\n" " scratch [2] : %08x\n" " scratch [3] : %08x\n" " scratch [4] : %08x\n" " scratch [5] : %08x\n" " scratch [6] : %08x\n" " scratch [7] : %08x\n" " scratch [8] : %08x\n" " scratch [9] : %08x\n" " scratch [10] : %08x\n" " scratch [11] : %08x\n" " scratch [12] : %08x\n" " scratch [13] : %08x\n" " scratch [14] : %08x\n" " scratch [15] : %08x\n" " pc : %08x\n" " unk_fault_addr : %08x\n" " inst_fault_addr : %08x\n" " data_fault_addr : %08x\n" " inbox1_rptr : %08x\n" " inbox1_wptr : %08x\n" " inbox1_size : %08x\n" " inbox0_rptr : %08x\n" " inbox0_wptr : %08x\n" " inbox0_size : %08x\n" " is_enabled : %d\n" " is_soft_reset : %d\n" " is_secure_reset : %d\n" " is_traceport_en : %d\n" " is_cw0_en : %d\n" " is_cw6_en : %d\n" , diag_data.dmcub_version, diag_data.scratch[0], diag_data.scratch [1], diag_data.scratch[2], diag_data.scratch[3], diag_data.scratch [4], diag_data.scratch[5], diag_data.scratch[6], diag_data.scratch [7], diag_data.scratch[8], diag_data.scratch[9], diag_data.scratch [10], diag_data.scratch[11], diag_data.scratch[12], diag_data .scratch[13], diag_data.scratch[14], diag_data.scratch[15], diag_data .pc, diag_data.undefined_address_fault_addr, diag_data.inst_fetch_fault_addr , diag_data.data_write_fault_addr, diag_data.inbox1_rptr, diag_data .inbox1_wptr, diag_data.inbox1_size, diag_data.inbox0_rptr, diag_data .inbox0_wptr, diag_data.inbox0_size, diag_data.is_dmcub_enabled , diag_data.is_dmcub_soft_reset, diag_data.is_dmcub_secure_reset , diag_data.is_traceport_en, diag_data.is_cw0_enabled, diag_data .is_cw6_enabled) | ||||||||||
861 | diag_data.scratch[9],___drm_dbg(((void *)0), DRM_UT_KMS, "DMCUB STATE\n" " dmcub_version : %08x\n" " scratch [0] : %08x\n" " scratch [1] : %08x\n" " scratch [2] : %08x\n" " scratch [3] : %08x\n" " scratch [4] : %08x\n" " scratch [5] : %08x\n" " scratch [6] : %08x\n" " scratch [7] : %08x\n" " scratch [8] : %08x\n" " scratch [9] : %08x\n" " scratch [10] : %08x\n" " scratch [11] : %08x\n" " scratch [12] : %08x\n" " scratch [13] : %08x\n" " scratch [14] : %08x\n" " scratch [15] : %08x\n" " pc : %08x\n" " unk_fault_addr : %08x\n" " inst_fault_addr : %08x\n" " data_fault_addr : %08x\n" " inbox1_rptr : %08x\n" " inbox1_wptr : %08x\n" " inbox1_size : %08x\n" " inbox0_rptr : %08x\n" " inbox0_wptr : %08x\n" " inbox0_size : %08x\n" " is_enabled : %d\n" " is_soft_reset : %d\n" " is_secure_reset : %d\n" " is_traceport_en : %d\n" " is_cw0_en : %d\n" " is_cw6_en : %d\n" , diag_data.dmcub_version, diag_data.scratch[0], diag_data.scratch [1], diag_data.scratch[2], diag_data.scratch[3], diag_data.scratch [4], diag_data.scratch[5], diag_data.scratch[6], diag_data.scratch [7], diag_data.scratch[8], diag_data.scratch[9], diag_data.scratch [10], diag_data.scratch[11], diag_data.scratch[12], diag_data .scratch[13], diag_data.scratch[14], diag_data.scratch[15], diag_data .pc, diag_data.undefined_address_fault_addr, diag_data.inst_fetch_fault_addr , diag_data.data_write_fault_addr, diag_data.inbox1_rptr, diag_data .inbox1_wptr, diag_data.inbox1_size, diag_data.inbox0_rptr, diag_data .inbox0_wptr, diag_data.inbox0_size, diag_data.is_dmcub_enabled , diag_data.is_dmcub_soft_reset, diag_data.is_dmcub_secure_reset , diag_data.is_traceport_en, diag_data.is_cw0_enabled, diag_data .is_cw6_enabled) | ||||||||||
862 | diag_data.scratch[10],___drm_dbg(((void *)0), DRM_UT_KMS, "DMCUB STATE\n" " dmcub_version : %08x\n" " scratch [0] : %08x\n" " scratch [1] : %08x\n" " scratch [2] : %08x\n" " scratch [3] : %08x\n" " scratch [4] : %08x\n" " scratch [5] : %08x\n" " scratch [6] : %08x\n" " scratch [7] : %08x\n" " scratch [8] : %08x\n" " scratch [9] : %08x\n" " scratch [10] : %08x\n" " scratch [11] : %08x\n" " scratch [12] : %08x\n" " scratch [13] : %08x\n" " scratch [14] : %08x\n" " scratch [15] : %08x\n" " pc : %08x\n" " unk_fault_addr : %08x\n" " inst_fault_addr : %08x\n" " data_fault_addr : %08x\n" " inbox1_rptr : %08x\n" " inbox1_wptr : %08x\n" " inbox1_size : %08x\n" " inbox0_rptr : %08x\n" " inbox0_wptr : %08x\n" " inbox0_size : %08x\n" " is_enabled : %d\n" " is_soft_reset : %d\n" " is_secure_reset : %d\n" " is_traceport_en : %d\n" " is_cw0_en : %d\n" " is_cw6_en : %d\n" , diag_data.dmcub_version, diag_data.scratch[0], diag_data.scratch [1], diag_data.scratch[2], diag_data.scratch[3], diag_data.scratch [4], diag_data.scratch[5], diag_data.scratch[6], diag_data.scratch [7], diag_data.scratch[8], diag_data.scratch[9], diag_data.scratch [10], diag_data.scratch[11], diag_data.scratch[12], diag_data .scratch[13], diag_data.scratch[14], diag_data.scratch[15], diag_data .pc, diag_data.undefined_address_fault_addr, diag_data.inst_fetch_fault_addr , diag_data.data_write_fault_addr, diag_data.inbox1_rptr, diag_data .inbox1_wptr, diag_data.inbox1_size, diag_data.inbox0_rptr, diag_data .inbox0_wptr, diag_data.inbox0_size, diag_data.is_dmcub_enabled , diag_data.is_dmcub_soft_reset, diag_data.is_dmcub_secure_reset , diag_data.is_traceport_en, diag_data.is_cw0_enabled, diag_data .is_cw6_enabled) | ||||||||||
863 | diag_data.scratch[11],___drm_dbg(((void *)0), DRM_UT_KMS, "DMCUB STATE\n" " dmcub_version : %08x\n" " scratch [0] : %08x\n" " scratch [1] : %08x\n" " scratch [2] : %08x\n" " scratch [3] : %08x\n" " scratch [4] : %08x\n" " scratch [5] : %08x\n" " scratch [6] : %08x\n" " scratch [7] : %08x\n" " scratch [8] : %08x\n" " scratch [9] : %08x\n" " scratch [10] : %08x\n" " scratch [11] : %08x\n" " scratch [12] : %08x\n" " scratch [13] : %08x\n" " scratch [14] : %08x\n" " scratch [15] : %08x\n" " pc : %08x\n" " unk_fault_addr : %08x\n" " inst_fault_addr : %08x\n" " data_fault_addr : %08x\n" " inbox1_rptr : %08x\n" " inbox1_wptr : %08x\n" " inbox1_size : %08x\n" " inbox0_rptr : %08x\n" " inbox0_wptr : %08x\n" " inbox0_size : %08x\n" " is_enabled : %d\n" " is_soft_reset : %d\n" " is_secure_reset : %d\n" " is_traceport_en : %d\n" " is_cw0_en : %d\n" " is_cw6_en : %d\n" , diag_data.dmcub_version, diag_data.scratch[0], diag_data.scratch [1], diag_data.scratch[2], diag_data.scratch[3], diag_data.scratch [4], diag_data.scratch[5], diag_data.scratch[6], diag_data.scratch [7], diag_data.scratch[8], diag_data.scratch[9], diag_data.scratch [10], diag_data.scratch[11], diag_data.scratch[12], diag_data .scratch[13], diag_data.scratch[14], diag_data.scratch[15], diag_data .pc, diag_data.undefined_address_fault_addr, diag_data.inst_fetch_fault_addr , diag_data.data_write_fault_addr, diag_data.inbox1_rptr, diag_data .inbox1_wptr, diag_data.inbox1_size, diag_data.inbox0_rptr, diag_data .inbox0_wptr, diag_data.inbox0_size, diag_data.is_dmcub_enabled , diag_data.is_dmcub_soft_reset, diag_data.is_dmcub_secure_reset , diag_data.is_traceport_en, diag_data.is_cw0_enabled, diag_data .is_cw6_enabled) | ||||||||||
864 | diag_data.scratch[12],___drm_dbg(((void *)0), DRM_UT_KMS, "DMCUB STATE\n" " dmcub_version : %08x\n" " scratch [0] : %08x\n" " scratch [1] : %08x\n" " scratch [2] : %08x\n" " scratch [3] : %08x\n" " scratch [4] : %08x\n" " scratch [5] : %08x\n" " scratch [6] : %08x\n" " scratch [7] : %08x\n" " scratch [8] : %08x\n" " scratch [9] : %08x\n" " scratch [10] : %08x\n" " scratch [11] : %08x\n" " scratch [12] : %08x\n" " scratch [13] : %08x\n" " scratch [14] : %08x\n" " scratch [15] : %08x\n" " pc : %08x\n" " unk_fault_addr : %08x\n" " inst_fault_addr : %08x\n" " data_fault_addr : %08x\n" " inbox1_rptr : %08x\n" " inbox1_wptr : %08x\n" " inbox1_size : %08x\n" " inbox0_rptr : %08x\n" " inbox0_wptr : %08x\n" " inbox0_size : %08x\n" " is_enabled : %d\n" " is_soft_reset : %d\n" " is_secure_reset : %d\n" " is_traceport_en : %d\n" " is_cw0_en : %d\n" " is_cw6_en : %d\n" , diag_data.dmcub_version, diag_data.scratch[0], diag_data.scratch [1], diag_data.scratch[2], diag_data.scratch[3], diag_data.scratch [4], diag_data.scratch[5], diag_data.scratch[6], diag_data.scratch [7], diag_data.scratch[8], diag_data.scratch[9], diag_data.scratch [10], diag_data.scratch[11], diag_data.scratch[12], diag_data .scratch[13], diag_data.scratch[14], diag_data.scratch[15], diag_data .pc, diag_data.undefined_address_fault_addr, diag_data.inst_fetch_fault_addr , diag_data.data_write_fault_addr, diag_data.inbox1_rptr, diag_data .inbox1_wptr, diag_data.inbox1_size, diag_data.inbox0_rptr, diag_data .inbox0_wptr, diag_data.inbox0_size, diag_data.is_dmcub_enabled , diag_data.is_dmcub_soft_reset, diag_data.is_dmcub_secure_reset , diag_data.is_traceport_en, diag_data.is_cw0_enabled, diag_data .is_cw6_enabled) | ||||||||||
865 | diag_data.scratch[13],___drm_dbg(((void *)0), DRM_UT_KMS, "DMCUB STATE\n" " dmcub_version : %08x\n" " scratch [0] : %08x\n" " scratch [1] : %08x\n" " scratch [2] : %08x\n" " scratch [3] : %08x\n" " scratch [4] : %08x\n" " scratch [5] : %08x\n" " scratch [6] : %08x\n" " scratch [7] : %08x\n" " scratch [8] : %08x\n" " scratch [9] : %08x\n" " scratch [10] : %08x\n" " scratch [11] : %08x\n" " scratch [12] : %08x\n" " scratch [13] : %08x\n" " scratch [14] : %08x\n" " scratch [15] : %08x\n" " pc : %08x\n" " unk_fault_addr : %08x\n" " inst_fault_addr : %08x\n" " data_fault_addr : %08x\n" " inbox1_rptr : %08x\n" " inbox1_wptr : %08x\n" " inbox1_size : %08x\n" " inbox0_rptr : %08x\n" " inbox0_wptr : %08x\n" " inbox0_size : %08x\n" " is_enabled : %d\n" " is_soft_reset : %d\n" " is_secure_reset : %d\n" " is_traceport_en : %d\n" " is_cw0_en : %d\n" " is_cw6_en : %d\n" , diag_data.dmcub_version, diag_data.scratch[0], diag_data.scratch [1], diag_data.scratch[2], diag_data.scratch[3], diag_data.scratch [4], diag_data.scratch[5], diag_data.scratch[6], diag_data.scratch [7], diag_data.scratch[8], diag_data.scratch[9], diag_data.scratch [10], diag_data.scratch[11], diag_data.scratch[12], diag_data .scratch[13], diag_data.scratch[14], diag_data.scratch[15], diag_data .pc, diag_data.undefined_address_fault_addr, diag_data.inst_fetch_fault_addr , diag_data.data_write_fault_addr, diag_data.inbox1_rptr, diag_data .inbox1_wptr, diag_data.inbox1_size, diag_data.inbox0_rptr, diag_data .inbox0_wptr, diag_data.inbox0_size, diag_data.is_dmcub_enabled , diag_data.is_dmcub_soft_reset, diag_data.is_dmcub_secure_reset , diag_data.is_traceport_en, diag_data.is_cw0_enabled, diag_data .is_cw6_enabled) | ||||||||||
866 | diag_data.scratch[14],___drm_dbg(((void *)0), DRM_UT_KMS, "DMCUB STATE\n" " dmcub_version : %08x\n" " scratch [0] : %08x\n" " scratch [1] : %08x\n" " scratch [2] : %08x\n" " scratch [3] : %08x\n" " scratch [4] : %08x\n" " scratch [5] : %08x\n" " scratch [6] : %08x\n" " scratch [7] : %08x\n" " scratch [8] : %08x\n" " scratch [9] : %08x\n" " scratch [10] : %08x\n" " scratch [11] : %08x\n" " scratch [12] : %08x\n" " scratch [13] : %08x\n" " scratch [14] : %08x\n" " scratch [15] : %08x\n" " pc : %08x\n" " unk_fault_addr : %08x\n" " inst_fault_addr : %08x\n" " data_fault_addr : %08x\n" " inbox1_rptr : %08x\n" " inbox1_wptr : %08x\n" " inbox1_size : %08x\n" " inbox0_rptr : %08x\n" " inbox0_wptr : %08x\n" " inbox0_size : %08x\n" " is_enabled : %d\n" " is_soft_reset : %d\n" " is_secure_reset : %d\n" " is_traceport_en : %d\n" " is_cw0_en : %d\n" " is_cw6_en : %d\n" , diag_data.dmcub_version, diag_data.scratch[0], diag_data.scratch [1], diag_data.scratch[2], diag_data.scratch[3], diag_data.scratch [4], diag_data.scratch[5], diag_data.scratch[6], diag_data.scratch [7], diag_data.scratch[8], diag_data.scratch[9], diag_data.scratch [10], diag_data.scratch[11], diag_data.scratch[12], diag_data .scratch[13], diag_data.scratch[14], diag_data.scratch[15], diag_data .pc, diag_data.undefined_address_fault_addr, diag_data.inst_fetch_fault_addr , diag_data.data_write_fault_addr, diag_data.inbox1_rptr, diag_data .inbox1_wptr, diag_data.inbox1_size, diag_data.inbox0_rptr, diag_data .inbox0_wptr, diag_data.inbox0_size, diag_data.is_dmcub_enabled , diag_data.is_dmcub_soft_reset, diag_data.is_dmcub_secure_reset , diag_data.is_traceport_en, diag_data.is_cw0_enabled, diag_data .is_cw6_enabled) | ||||||||||
867 | diag_data.scratch[15],___drm_dbg(((void *)0), DRM_UT_KMS, "DMCUB STATE\n" " dmcub_version : %08x\n" " scratch [0] : %08x\n" " scratch [1] : %08x\n" " scratch [2] : %08x\n" " scratch [3] : %08x\n" " scratch [4] : %08x\n" " scratch [5] : %08x\n" " scratch [6] : %08x\n" " scratch [7] : %08x\n" " scratch [8] : %08x\n" " scratch [9] : %08x\n" " scratch [10] : %08x\n" " scratch [11] : %08x\n" " scratch [12] : %08x\n" " scratch [13] : %08x\n" " scratch [14] : %08x\n" " scratch [15] : %08x\n" " pc : %08x\n" " unk_fault_addr : %08x\n" " inst_fault_addr : %08x\n" " data_fault_addr : %08x\n" " inbox1_rptr : %08x\n" " inbox1_wptr : %08x\n" " inbox1_size : %08x\n" " inbox0_rptr : %08x\n" " inbox0_wptr : %08x\n" " inbox0_size : %08x\n" " is_enabled : %d\n" " is_soft_reset : %d\n" " is_secure_reset : %d\n" " is_traceport_en : %d\n" " is_cw0_en : %d\n" " is_cw6_en : %d\n" , diag_data.dmcub_version, diag_data.scratch[0], diag_data.scratch [1], diag_data.scratch[2], diag_data.scratch[3], diag_data.scratch [4], diag_data.scratch[5], diag_data.scratch[6], diag_data.scratch [7], diag_data.scratch[8], diag_data.scratch[9], diag_data.scratch [10], diag_data.scratch[11], diag_data.scratch[12], diag_data .scratch[13], diag_data.scratch[14], diag_data.scratch[15], diag_data .pc, diag_data.undefined_address_fault_addr, diag_data.inst_fetch_fault_addr , diag_data.data_write_fault_addr, diag_data.inbox1_rptr, diag_data .inbox1_wptr, diag_data.inbox1_size, diag_data.inbox0_rptr, diag_data .inbox0_wptr, diag_data.inbox0_size, diag_data.is_dmcub_enabled , diag_data.is_dmcub_soft_reset, diag_data.is_dmcub_secure_reset , diag_data.is_traceport_en, diag_data.is_cw0_enabled, diag_data .is_cw6_enabled) | ||||||||||
868 | diag_data.pc,___drm_dbg(((void *)0), DRM_UT_KMS, "DMCUB STATE\n" " dmcub_version : %08x\n" " scratch [0] : %08x\n" " scratch [1] : %08x\n" " scratch [2] : %08x\n" " scratch [3] : %08x\n" " scratch [4] : %08x\n" " scratch [5] : %08x\n" " scratch [6] : %08x\n" " scratch [7] : %08x\n" " scratch [8] : %08x\n" " scratch [9] : %08x\n" " scratch [10] : %08x\n" " scratch [11] : %08x\n" " scratch [12] : %08x\n" " scratch [13] : %08x\n" " scratch [14] : %08x\n" " scratch [15] : %08x\n" " pc : %08x\n" " unk_fault_addr : %08x\n" " inst_fault_addr : %08x\n" " data_fault_addr : %08x\n" " inbox1_rptr : %08x\n" " inbox1_wptr : %08x\n" " inbox1_size : %08x\n" " inbox0_rptr : %08x\n" " inbox0_wptr : %08x\n" " inbox0_size : %08x\n" " is_enabled : %d\n" " is_soft_reset : %d\n" " is_secure_reset : %d\n" " is_traceport_en : %d\n" " is_cw0_en : %d\n" " is_cw6_en : %d\n" , diag_data.dmcub_version, diag_data.scratch[0], diag_data.scratch [1], diag_data.scratch[2], diag_data.scratch[3], diag_data.scratch [4], diag_data.scratch[5], diag_data.scratch[6], diag_data.scratch [7], diag_data.scratch[8], diag_data.scratch[9], diag_data.scratch [10], diag_data.scratch[11], diag_data.scratch[12], diag_data .scratch[13], diag_data.scratch[14], diag_data.scratch[15], diag_data .pc, diag_data.undefined_address_fault_addr, diag_data.inst_fetch_fault_addr , diag_data.data_write_fault_addr, diag_data.inbox1_rptr, diag_data .inbox1_wptr, diag_data.inbox1_size, diag_data.inbox0_rptr, diag_data .inbox0_wptr, diag_data.inbox0_size, diag_data.is_dmcub_enabled , diag_data.is_dmcub_soft_reset, diag_data.is_dmcub_secure_reset , diag_data.is_traceport_en, diag_data.is_cw0_enabled, diag_data .is_cw6_enabled) | ||||||||||
869 | diag_data.undefined_address_fault_addr,___drm_dbg(((void *)0), DRM_UT_KMS, "DMCUB STATE\n" " dmcub_version : %08x\n" " scratch [0] : %08x\n" " scratch [1] : %08x\n" " scratch [2] : %08x\n" " scratch [3] : %08x\n" " scratch [4] : %08x\n" " scratch [5] : %08x\n" " scratch [6] : %08x\n" " scratch [7] : %08x\n" " scratch [8] : %08x\n" " scratch [9] : %08x\n" " scratch [10] : %08x\n" " scratch [11] : %08x\n" " scratch [12] : %08x\n" " scratch [13] : %08x\n" " scratch [14] : %08x\n" " scratch [15] : %08x\n" " pc : %08x\n" " unk_fault_addr : %08x\n" " inst_fault_addr : %08x\n" " data_fault_addr : %08x\n" " inbox1_rptr : %08x\n" " inbox1_wptr : %08x\n" " inbox1_size : %08x\n" " inbox0_rptr : %08x\n" " inbox0_wptr : %08x\n" " inbox0_size : %08x\n" " is_enabled : %d\n" " is_soft_reset : %d\n" " is_secure_reset : %d\n" " is_traceport_en : %d\n" " is_cw0_en : %d\n" " is_cw6_en : %d\n" , diag_data.dmcub_version, diag_data.scratch[0], diag_data.scratch [1], diag_data.scratch[2], diag_data.scratch[3], diag_data.scratch [4], diag_data.scratch[5], diag_data.scratch[6], diag_data.scratch [7], diag_data.scratch[8], diag_data.scratch[9], diag_data.scratch [10], diag_data.scratch[11], diag_data.scratch[12], diag_data .scratch[13], diag_data.scratch[14], diag_data.scratch[15], diag_data .pc, diag_data.undefined_address_fault_addr, diag_data.inst_fetch_fault_addr , diag_data.data_write_fault_addr, diag_data.inbox1_rptr, diag_data .inbox1_wptr, diag_data.inbox1_size, diag_data.inbox0_rptr, diag_data .inbox0_wptr, diag_data.inbox0_size, diag_data.is_dmcub_enabled , diag_data.is_dmcub_soft_reset, diag_data.is_dmcub_secure_reset , diag_data.is_traceport_en, diag_data.is_cw0_enabled, diag_data .is_cw6_enabled) | ||||||||||
870 | diag_data.inst_fetch_fault_addr,___drm_dbg(((void *)0), DRM_UT_KMS, "DMCUB STATE\n" " dmcub_version : %08x\n" " scratch [0] : %08x\n" " scratch [1] : %08x\n" " scratch [2] : %08x\n" " scratch [3] : %08x\n" " scratch [4] : %08x\n" " scratch [5] : %08x\n" " scratch [6] : %08x\n" " scratch [7] : %08x\n" " scratch [8] : %08x\n" " scratch [9] : %08x\n" " scratch [10] : %08x\n" " scratch [11] : %08x\n" " scratch [12] : %08x\n" " scratch [13] : %08x\n" " scratch [14] : %08x\n" " scratch [15] : %08x\n" " pc : %08x\n" " unk_fault_addr : %08x\n" " inst_fault_addr : %08x\n" " data_fault_addr : %08x\n" " inbox1_rptr : %08x\n" " inbox1_wptr : %08x\n" " inbox1_size : %08x\n" " inbox0_rptr : %08x\n" " inbox0_wptr : %08x\n" " inbox0_size : %08x\n" " is_enabled : %d\n" " is_soft_reset : %d\n" " is_secure_reset : %d\n" " is_traceport_en : %d\n" " is_cw0_en : %d\n" " is_cw6_en : %d\n" , diag_data.dmcub_version, diag_data.scratch[0], diag_data.scratch [1], diag_data.scratch[2], diag_data.scratch[3], diag_data.scratch [4], diag_data.scratch[5], diag_data.scratch[6], diag_data.scratch [7], diag_data.scratch[8], diag_data.scratch[9], diag_data.scratch [10], diag_data.scratch[11], diag_data.scratch[12], diag_data .scratch[13], diag_data.scratch[14], diag_data.scratch[15], diag_data .pc, diag_data.undefined_address_fault_addr, diag_data.inst_fetch_fault_addr , diag_data.data_write_fault_addr, diag_data.inbox1_rptr, diag_data .inbox1_wptr, diag_data.inbox1_size, diag_data.inbox0_rptr, diag_data .inbox0_wptr, diag_data.inbox0_size, diag_data.is_dmcub_enabled , diag_data.is_dmcub_soft_reset, diag_data.is_dmcub_secure_reset , diag_data.is_traceport_en, diag_data.is_cw0_enabled, diag_data .is_cw6_enabled) | ||||||||||
871 | diag_data.data_write_fault_addr,___drm_dbg(((void *)0), DRM_UT_KMS, "DMCUB STATE\n" " dmcub_version : %08x\n" " scratch [0] : %08x\n" " scratch [1] : %08x\n" " scratch [2] : %08x\n" " scratch [3] : %08x\n" " scratch [4] : %08x\n" " scratch [5] : %08x\n" " scratch [6] : %08x\n" " scratch [7] : %08x\n" " scratch [8] : %08x\n" " scratch [9] : %08x\n" " scratch [10] : %08x\n" " scratch [11] : %08x\n" " scratch [12] : %08x\n" " scratch [13] : %08x\n" " scratch [14] : %08x\n" " scratch [15] : %08x\n" " pc : %08x\n" " unk_fault_addr : %08x\n" " inst_fault_addr : %08x\n" " data_fault_addr : %08x\n" " inbox1_rptr : %08x\n" " inbox1_wptr : %08x\n" " inbox1_size : %08x\n" " inbox0_rptr : %08x\n" " inbox0_wptr : %08x\n" " inbox0_size : %08x\n" " is_enabled : %d\n" " is_soft_reset : %d\n" " is_secure_reset : %d\n" " is_traceport_en : %d\n" " is_cw0_en : %d\n" " is_cw6_en : %d\n" , diag_data.dmcub_version, diag_data.scratch[0], diag_data.scratch [1], diag_data.scratch[2], diag_data.scratch[3], diag_data.scratch [4], diag_data.scratch[5], diag_data.scratch[6], diag_data.scratch [7], diag_data.scratch[8], diag_data.scratch[9], diag_data.scratch [10], diag_data.scratch[11], diag_data.scratch[12], diag_data .scratch[13], diag_data.scratch[14], diag_data.scratch[15], diag_data .pc, diag_data.undefined_address_fault_addr, diag_data.inst_fetch_fault_addr , diag_data.data_write_fault_addr, diag_data.inbox1_rptr, diag_data .inbox1_wptr, diag_data.inbox1_size, diag_data.inbox0_rptr, diag_data .inbox0_wptr, diag_data.inbox0_size, diag_data.is_dmcub_enabled , diag_data.is_dmcub_soft_reset, diag_data.is_dmcub_secure_reset , diag_data.is_traceport_en, diag_data.is_cw0_enabled, diag_data .is_cw6_enabled) | ||||||||||
872 | diag_data.inbox1_rptr,___drm_dbg(((void *)0), DRM_UT_KMS, "DMCUB STATE\n" " dmcub_version : %08x\n" " scratch [0] : %08x\n" " scratch [1] : %08x\n" " scratch [2] : %08x\n" " scratch [3] : %08x\n" " scratch [4] : %08x\n" " scratch [5] : %08x\n" " scratch [6] : %08x\n" " scratch [7] : %08x\n" " scratch [8] : %08x\n" " scratch [9] : %08x\n" " scratch [10] : %08x\n" " scratch [11] : %08x\n" " scratch [12] : %08x\n" " scratch [13] : %08x\n" " scratch [14] : %08x\n" " scratch [15] : %08x\n" " pc : %08x\n" " unk_fault_addr : %08x\n" " inst_fault_addr : %08x\n" " data_fault_addr : %08x\n" " inbox1_rptr : %08x\n" " inbox1_wptr : %08x\n" " inbox1_size : %08x\n" " inbox0_rptr : %08x\n" " inbox0_wptr : %08x\n" " inbox0_size : %08x\n" " is_enabled : %d\n" " is_soft_reset : %d\n" " is_secure_reset : %d\n" " is_traceport_en : %d\n" " is_cw0_en : %d\n" " is_cw6_en : %d\n" , diag_data.dmcub_version, diag_data.scratch[0], diag_data.scratch [1], diag_data.scratch[2], diag_data.scratch[3], diag_data.scratch [4], diag_data.scratch[5], diag_data.scratch[6], diag_data.scratch [7], diag_data.scratch[8], diag_data.scratch[9], diag_data.scratch [10], diag_data.scratch[11], diag_data.scratch[12], diag_data .scratch[13], diag_data.scratch[14], diag_data.scratch[15], diag_data .pc, diag_data.undefined_address_fault_addr, diag_data.inst_fetch_fault_addr , diag_data.data_write_fault_addr, diag_data.inbox1_rptr, diag_data .inbox1_wptr, diag_data.inbox1_size, diag_data.inbox0_rptr, diag_data .inbox0_wptr, diag_data.inbox0_size, diag_data.is_dmcub_enabled , diag_data.is_dmcub_soft_reset, diag_data.is_dmcub_secure_reset , diag_data.is_traceport_en, diag_data.is_cw0_enabled, diag_data .is_cw6_enabled) | ||||||||||
873 | diag_data.inbox1_wptr,___drm_dbg(((void *)0), DRM_UT_KMS, "DMCUB STATE\n" " dmcub_version : %08x\n" " scratch [0] : %08x\n" " scratch [1] : %08x\n" " scratch [2] : %08x\n" " scratch [3] : %08x\n" " scratch [4] : %08x\n" " scratch [5] : %08x\n" " scratch [6] : %08x\n" " scratch [7] : %08x\n" " scratch [8] : %08x\n" " scratch [9] : %08x\n" " scratch [10] : %08x\n" " scratch [11] : %08x\n" " scratch [12] : %08x\n" " scratch [13] : %08x\n" " scratch [14] : %08x\n" " scratch [15] : %08x\n" " pc : %08x\n" " unk_fault_addr : %08x\n" " inst_fault_addr : %08x\n" " data_fault_addr : %08x\n" " inbox1_rptr : %08x\n" " inbox1_wptr : %08x\n" " inbox1_size : %08x\n" " inbox0_rptr : %08x\n" " inbox0_wptr : %08x\n" " inbox0_size : %08x\n" " is_enabled : %d\n" " is_soft_reset : %d\n" " is_secure_reset : %d\n" " is_traceport_en : %d\n" " is_cw0_en : %d\n" " is_cw6_en : %d\n" , diag_data.dmcub_version, diag_data.scratch[0], diag_data.scratch [1], diag_data.scratch[2], diag_data.scratch[3], diag_data.scratch [4], diag_data.scratch[5], diag_data.scratch[6], diag_data.scratch [7], diag_data.scratch[8], diag_data.scratch[9], diag_data.scratch [10], diag_data.scratch[11], diag_data.scratch[12], diag_data .scratch[13], diag_data.scratch[14], diag_data.scratch[15], diag_data .pc, diag_data.undefined_address_fault_addr, diag_data.inst_fetch_fault_addr , diag_data.data_write_fault_addr, diag_data.inbox1_rptr, diag_data .inbox1_wptr, diag_data.inbox1_size, diag_data.inbox0_rptr, diag_data .inbox0_wptr, diag_data.inbox0_size, diag_data.is_dmcub_enabled , diag_data.is_dmcub_soft_reset, diag_data.is_dmcub_secure_reset , diag_data.is_traceport_en, diag_data.is_cw0_enabled, diag_data .is_cw6_enabled) | ||||||||||
874 | diag_data.inbox1_size,___drm_dbg(((void *)0), DRM_UT_KMS, "DMCUB STATE\n" " dmcub_version : %08x\n" " scratch [0] : %08x\n" " scratch [1] : %08x\n" " scratch [2] : %08x\n" " scratch [3] : %08x\n" " scratch [4] : %08x\n" " scratch [5] : %08x\n" " scratch [6] : %08x\n" " scratch [7] : %08x\n" " scratch [8] : %08x\n" " scratch [9] : %08x\n" " scratch [10] : %08x\n" " scratch [11] : %08x\n" " scratch [12] : %08x\n" " scratch [13] : %08x\n" " scratch [14] : %08x\n" " scratch [15] : %08x\n" " pc : %08x\n" " unk_fault_addr : %08x\n" " inst_fault_addr : %08x\n" " data_fault_addr : %08x\n" " inbox1_rptr : %08x\n" " inbox1_wptr : %08x\n" " inbox1_size : %08x\n" " inbox0_rptr : %08x\n" " inbox0_wptr : %08x\n" " inbox0_size : %08x\n" " is_enabled : %d\n" " is_soft_reset : %d\n" " is_secure_reset : %d\n" " is_traceport_en : %d\n" " is_cw0_en : %d\n" " is_cw6_en : %d\n" , diag_data.dmcub_version, diag_data.scratch[0], diag_data.scratch [1], diag_data.scratch[2], diag_data.scratch[3], diag_data.scratch [4], diag_data.scratch[5], diag_data.scratch[6], diag_data.scratch [7], diag_data.scratch[8], diag_data.scratch[9], diag_data.scratch [10], diag_data.scratch[11], diag_data.scratch[12], diag_data .scratch[13], diag_data.scratch[14], diag_data.scratch[15], diag_data .pc, diag_data.undefined_address_fault_addr, diag_data.inst_fetch_fault_addr , diag_data.data_write_fault_addr, diag_data.inbox1_rptr, diag_data .inbox1_wptr, diag_data.inbox1_size, diag_data.inbox0_rptr, diag_data .inbox0_wptr, diag_data.inbox0_size, diag_data.is_dmcub_enabled , diag_data.is_dmcub_soft_reset, diag_data.is_dmcub_secure_reset , diag_data.is_traceport_en, diag_data.is_cw0_enabled, diag_data .is_cw6_enabled) | ||||||||||
875 | diag_data.inbox0_rptr,___drm_dbg(((void *)0), DRM_UT_KMS, "DMCUB STATE\n" " dmcub_version : %08x\n" " scratch [0] : %08x\n" " scratch [1] : %08x\n" " scratch [2] : %08x\n" " scratch [3] : %08x\n" " scratch [4] : %08x\n" " scratch [5] : %08x\n" " scratch [6] : %08x\n" " scratch [7] : %08x\n" " scratch [8] : %08x\n" " scratch [9] : %08x\n" " scratch [10] : %08x\n" " scratch [11] : %08x\n" " scratch [12] : %08x\n" " scratch [13] : %08x\n" " scratch [14] : %08x\n" " scratch [15] : %08x\n" " pc : %08x\n" " unk_fault_addr : %08x\n" " inst_fault_addr : %08x\n" " data_fault_addr : %08x\n" " inbox1_rptr : %08x\n" " inbox1_wptr : %08x\n" " inbox1_size : %08x\n" " inbox0_rptr : %08x\n" " inbox0_wptr : %08x\n" " inbox0_size : %08x\n" " is_enabled : %d\n" " is_soft_reset : %d\n" " is_secure_reset : %d\n" " is_traceport_en : %d\n" " is_cw0_en : %d\n" " is_cw6_en : %d\n" , diag_data.dmcub_version, diag_data.scratch[0], diag_data.scratch [1], diag_data.scratch[2], diag_data.scratch[3], diag_data.scratch [4], diag_data.scratch[5], diag_data.scratch[6], diag_data.scratch [7], diag_data.scratch[8], diag_data.scratch[9], diag_data.scratch [10], diag_data.scratch[11], diag_data.scratch[12], diag_data .scratch[13], diag_data.scratch[14], diag_data.scratch[15], diag_data .pc, diag_data.undefined_address_fault_addr, diag_data.inst_fetch_fault_addr , diag_data.data_write_fault_addr, diag_data.inbox1_rptr, diag_data .inbox1_wptr, diag_data.inbox1_size, diag_data.inbox0_rptr, diag_data .inbox0_wptr, diag_data.inbox0_size, diag_data.is_dmcub_enabled , diag_data.is_dmcub_soft_reset, diag_data.is_dmcub_secure_reset , diag_data.is_traceport_en, diag_data.is_cw0_enabled, diag_data .is_cw6_enabled) | ||||||||||
876 | diag_data.inbox0_wptr,___drm_dbg(((void *)0), DRM_UT_KMS, "DMCUB STATE\n" " dmcub_version : %08x\n" " scratch [0] : %08x\n" " scratch [1] : %08x\n" " scratch [2] : %08x\n" " scratch [3] : %08x\n" " scratch [4] : %08x\n" " scratch [5] : %08x\n" " scratch [6] : %08x\n" " scratch [7] : %08x\n" " scratch [8] : %08x\n" " scratch [9] : %08x\n" " scratch [10] : %08x\n" " scratch [11] : %08x\n" " scratch [12] : %08x\n" " scratch [13] : %08x\n" " scratch [14] : %08x\n" " scratch [15] : %08x\n" " pc : %08x\n" " unk_fault_addr : %08x\n" " inst_fault_addr : %08x\n" " data_fault_addr : %08x\n" " inbox1_rptr : %08x\n" " inbox1_wptr : %08x\n" " inbox1_size : %08x\n" " inbox0_rptr : %08x\n" " inbox0_wptr : %08x\n" " inbox0_size : %08x\n" " is_enabled : %d\n" " is_soft_reset : %d\n" " is_secure_reset : %d\n" " is_traceport_en : %d\n" " is_cw0_en : %d\n" " is_cw6_en : %d\n" , diag_data.dmcub_version, diag_data.scratch[0], diag_data.scratch [1], diag_data.scratch[2], diag_data.scratch[3], diag_data.scratch [4], diag_data.scratch[5], diag_data.scratch[6], diag_data.scratch [7], diag_data.scratch[8], diag_data.scratch[9], diag_data.scratch [10], diag_data.scratch[11], diag_data.scratch[12], diag_data .scratch[13], diag_data.scratch[14], diag_data.scratch[15], diag_data .pc, diag_data.undefined_address_fault_addr, diag_data.inst_fetch_fault_addr , diag_data.data_write_fault_addr, diag_data.inbox1_rptr, diag_data .inbox1_wptr, diag_data.inbox1_size, diag_data.inbox0_rptr, diag_data .inbox0_wptr, diag_data.inbox0_size, diag_data.is_dmcub_enabled , diag_data.is_dmcub_soft_reset, diag_data.is_dmcub_secure_reset , diag_data.is_traceport_en, diag_data.is_cw0_enabled, diag_data .is_cw6_enabled) | ||||||||||
877 | diag_data.inbox0_size,___drm_dbg(((void *)0), DRM_UT_KMS, "DMCUB STATE\n" " dmcub_version : %08x\n" " scratch [0] : %08x\n" " scratch [1] : %08x\n" " scratch [2] : %08x\n" " scratch [3] : %08x\n" " scratch [4] : %08x\n" " scratch [5] : %08x\n" " scratch [6] : %08x\n" " scratch [7] : %08x\n" " scratch [8] : %08x\n" " scratch [9] : %08x\n" " scratch [10] : %08x\n" " scratch [11] : %08x\n" " scratch [12] : %08x\n" " scratch [13] : %08x\n" " scratch [14] : %08x\n" " scratch [15] : %08x\n" " pc : %08x\n" " unk_fault_addr : %08x\n" " inst_fault_addr : %08x\n" " data_fault_addr : %08x\n" " inbox1_rptr : %08x\n" " inbox1_wptr : %08x\n" " inbox1_size : %08x\n" " inbox0_rptr : %08x\n" " inbox0_wptr : %08x\n" " inbox0_size : %08x\n" " is_enabled : %d\n" " is_soft_reset : %d\n" " is_secure_reset : %d\n" " is_traceport_en : %d\n" " is_cw0_en : %d\n" " is_cw6_en : %d\n" , diag_data.dmcub_version, diag_data.scratch[0], diag_data.scratch [1], diag_data.scratch[2], diag_data.scratch[3], diag_data.scratch [4], diag_data.scratch[5], diag_data.scratch[6], diag_data.scratch [7], diag_data.scratch[8], diag_data.scratch[9], diag_data.scratch [10], diag_data.scratch[11], diag_data.scratch[12], diag_data .scratch[13], diag_data.scratch[14], diag_data.scratch[15], diag_data .pc, diag_data.undefined_address_fault_addr, diag_data.inst_fetch_fault_addr , diag_data.data_write_fault_addr, diag_data.inbox1_rptr, diag_data .inbox1_wptr, diag_data.inbox1_size, diag_data.inbox0_rptr, diag_data .inbox0_wptr, diag_data.inbox0_size, diag_data.is_dmcub_enabled , diag_data.is_dmcub_soft_reset, diag_data.is_dmcub_secure_reset , diag_data.is_traceport_en, diag_data.is_cw0_enabled, diag_data .is_cw6_enabled) | ||||||||||
878 | diag_data.is_dmcub_enabled,___drm_dbg(((void *)0), DRM_UT_KMS, "DMCUB STATE\n" " dmcub_version : %08x\n" " scratch [0] : %08x\n" " scratch [1] : %08x\n" " scratch [2] : %08x\n" " scratch [3] : %08x\n" " scratch [4] : %08x\n" " scratch [5] : %08x\n" " scratch [6] : %08x\n" " scratch [7] : %08x\n" " scratch [8] : %08x\n" " scratch [9] : %08x\n" " scratch [10] : %08x\n" " scratch [11] : %08x\n" " scratch [12] : %08x\n" " scratch [13] : %08x\n" " scratch [14] : %08x\n" " scratch [15] : %08x\n" " pc : %08x\n" " unk_fault_addr : %08x\n" " inst_fault_addr : %08x\n" " data_fault_addr : %08x\n" " inbox1_rptr : %08x\n" " inbox1_wptr : %08x\n" " inbox1_size : %08x\n" " inbox0_rptr : %08x\n" " inbox0_wptr : %08x\n" " inbox0_size : %08x\n" " is_enabled : %d\n" " is_soft_reset : %d\n" " is_secure_reset : %d\n" " is_traceport_en : %d\n" " is_cw0_en : %d\n" " is_cw6_en : %d\n" , diag_data.dmcub_version, diag_data.scratch[0], diag_data.scratch [1], diag_data.scratch[2], diag_data.scratch[3], diag_data.scratch [4], diag_data.scratch[5], diag_data.scratch[6], diag_data.scratch [7], diag_data.scratch[8], diag_data.scratch[9], diag_data.scratch [10], diag_data.scratch[11], diag_data.scratch[12], diag_data .scratch[13], diag_data.scratch[14], diag_data.scratch[15], diag_data .pc, diag_data.undefined_address_fault_addr, diag_data.inst_fetch_fault_addr , diag_data.data_write_fault_addr, diag_data.inbox1_rptr, diag_data .inbox1_wptr, diag_data.inbox1_size, diag_data.inbox0_rptr, diag_data .inbox0_wptr, diag_data.inbox0_size, diag_data.is_dmcub_enabled , diag_data.is_dmcub_soft_reset, diag_data.is_dmcub_secure_reset , diag_data.is_traceport_en, diag_data.is_cw0_enabled, diag_data .is_cw6_enabled) | ||||||||||
879 | diag_data.is_dmcub_soft_reset,___drm_dbg(((void *)0), DRM_UT_KMS, "DMCUB STATE\n" " dmcub_version : %08x\n" " scratch [0] : %08x\n" " scratch [1] : %08x\n" " scratch [2] : %08x\n" " scratch [3] : %08x\n" " scratch [4] : %08x\n" " scratch [5] : %08x\n" " scratch [6] : %08x\n" " scratch [7] : %08x\n" " scratch [8] : %08x\n" " scratch [9] : %08x\n" " scratch [10] : %08x\n" " scratch [11] : %08x\n" " scratch [12] : %08x\n" " scratch [13] : %08x\n" " scratch [14] : %08x\n" " scratch [15] : %08x\n" " pc : %08x\n" " unk_fault_addr : %08x\n" " inst_fault_addr : %08x\n" " data_fault_addr : %08x\n" " inbox1_rptr : %08x\n" " inbox1_wptr : %08x\n" " inbox1_size : %08x\n" " inbox0_rptr : %08x\n" " inbox0_wptr : %08x\n" " inbox0_size : %08x\n" " is_enabled : %d\n" " is_soft_reset : %d\n" " is_secure_reset : %d\n" " is_traceport_en : %d\n" " is_cw0_en : %d\n" " is_cw6_en : %d\n" , diag_data.dmcub_version, diag_data.scratch[0], diag_data.scratch [1], diag_data.scratch[2], diag_data.scratch[3], diag_data.scratch [4], diag_data.scratch[5], diag_data.scratch[6], diag_data.scratch [7], diag_data.scratch[8], diag_data.scratch[9], diag_data.scratch [10], diag_data.scratch[11], diag_data.scratch[12], diag_data .scratch[13], diag_data.scratch[14], diag_data.scratch[15], diag_data .pc, diag_data.undefined_address_fault_addr, diag_data.inst_fetch_fault_addr , diag_data.data_write_fault_addr, diag_data.inbox1_rptr, diag_data .inbox1_wptr, diag_data.inbox1_size, diag_data.inbox0_rptr, diag_data .inbox0_wptr, diag_data.inbox0_size, diag_data.is_dmcub_enabled , diag_data.is_dmcub_soft_reset, diag_data.is_dmcub_secure_reset , diag_data.is_traceport_en, diag_data.is_cw0_enabled, diag_data .is_cw6_enabled) | ||||||||||
880 | diag_data.is_dmcub_secure_reset,___drm_dbg(((void *)0), DRM_UT_KMS, "DMCUB STATE\n" " dmcub_version : %08x\n" " scratch [0] : %08x\n" " scratch [1] : %08x\n" " scratch [2] : %08x\n" " scratch [3] : %08x\n" " scratch [4] : %08x\n" " scratch [5] : %08x\n" " scratch [6] : %08x\n" " scratch [7] : %08x\n" " scratch [8] : %08x\n" " scratch [9] : %08x\n" " scratch [10] : %08x\n" " scratch [11] : %08x\n" " scratch [12] : %08x\n" " scratch [13] : %08x\n" " scratch [14] : %08x\n" " scratch [15] : %08x\n" " pc : %08x\n" " unk_fault_addr : %08x\n" " inst_fault_addr : %08x\n" " data_fault_addr : %08x\n" " inbox1_rptr : %08x\n" " inbox1_wptr : %08x\n" " inbox1_size : %08x\n" " inbox0_rptr : %08x\n" " inbox0_wptr : %08x\n" " inbox0_size : %08x\n" " is_enabled : %d\n" " is_soft_reset : %d\n" " is_secure_reset : %d\n" " is_traceport_en : %d\n" " is_cw0_en : %d\n" " is_cw6_en : %d\n" , diag_data.dmcub_version, diag_data.scratch[0], diag_data.scratch [1], diag_data.scratch[2], diag_data.scratch[3], diag_data.scratch [4], diag_data.scratch[5], diag_data.scratch[6], diag_data.scratch [7], diag_data.scratch[8], diag_data.scratch[9], diag_data.scratch [10], diag_data.scratch[11], diag_data.scratch[12], diag_data .scratch[13], diag_data.scratch[14], diag_data.scratch[15], diag_data .pc, diag_data.undefined_address_fault_addr, diag_data.inst_fetch_fault_addr , diag_data.data_write_fault_addr, diag_data.inbox1_rptr, diag_data .inbox1_wptr, diag_data.inbox1_size, diag_data.inbox0_rptr, diag_data .inbox0_wptr, diag_data.inbox0_size, diag_data.is_dmcub_enabled , diag_data.is_dmcub_soft_reset, diag_data.is_dmcub_secure_reset , diag_data.is_traceport_en, diag_data.is_cw0_enabled, diag_data .is_cw6_enabled) | ||||||||||
881 | diag_data.is_traceport_en,___drm_dbg(((void *)0), DRM_UT_KMS, "DMCUB STATE\n" " dmcub_version : %08x\n" " scratch [0] : %08x\n" " scratch [1] : %08x\n" " scratch [2] : %08x\n" " scratch [3] : %08x\n" " scratch [4] : %08x\n" " scratch [5] : %08x\n" " scratch [6] : %08x\n" " scratch [7] : %08x\n" " scratch [8] : %08x\n" " scratch [9] : %08x\n" " scratch [10] : %08x\n" " scratch [11] : %08x\n" " scratch [12] : %08x\n" " scratch [13] : %08x\n" " scratch [14] : %08x\n" " scratch [15] : %08x\n" " pc : %08x\n" " unk_fault_addr : %08x\n" " inst_fault_addr : %08x\n" " data_fault_addr : %08x\n" " inbox1_rptr : %08x\n" " inbox1_wptr : %08x\n" " inbox1_size : %08x\n" " inbox0_rptr : %08x\n" " inbox0_wptr : %08x\n" " inbox0_size : %08x\n" " is_enabled : %d\n" " is_soft_reset : %d\n" " is_secure_reset : %d\n" " is_traceport_en : %d\n" " is_cw0_en : %d\n" " is_cw6_en : %d\n" , diag_data.dmcub_version, diag_data.scratch[0], diag_data.scratch [1], diag_data.scratch[2], diag_data.scratch[3], diag_data.scratch [4], diag_data.scratch[5], diag_data.scratch[6], diag_data.scratch [7], diag_data.scratch[8], diag_data.scratch[9], diag_data.scratch [10], diag_data.scratch[11], diag_data.scratch[12], diag_data .scratch[13], diag_data.scratch[14], diag_data.scratch[15], diag_data .pc, diag_data.undefined_address_fault_addr, diag_data.inst_fetch_fault_addr , diag_data.data_write_fault_addr, diag_data.inbox1_rptr, diag_data .inbox1_wptr, diag_data.inbox1_size, diag_data.inbox0_rptr, diag_data .inbox0_wptr, diag_data.inbox0_size, diag_data.is_dmcub_enabled , diag_data.is_dmcub_soft_reset, diag_data.is_dmcub_secure_reset , diag_data.is_traceport_en, diag_data.is_cw0_enabled, diag_data .is_cw6_enabled) | ||||||||||
882 | diag_data.is_cw0_enabled,___drm_dbg(((void *)0), DRM_UT_KMS, "DMCUB STATE\n" " dmcub_version : %08x\n" " scratch [0] : %08x\n" " scratch [1] : %08x\n" " scratch [2] : %08x\n" " scratch [3] : %08x\n" " scratch [4] : %08x\n" " scratch [5] : %08x\n" " scratch [6] : %08x\n" " scratch [7] : %08x\n" " scratch [8] : %08x\n" " scratch [9] : %08x\n" " scratch [10] : %08x\n" " scratch [11] : %08x\n" " scratch [12] : %08x\n" " scratch [13] : %08x\n" " scratch [14] : %08x\n" " scratch [15] : %08x\n" " pc : %08x\n" " unk_fault_addr : %08x\n" " inst_fault_addr : %08x\n" " data_fault_addr : %08x\n" " inbox1_rptr : %08x\n" " inbox1_wptr : %08x\n" " inbox1_size : %08x\n" " inbox0_rptr : %08x\n" " inbox0_wptr : %08x\n" " inbox0_size : %08x\n" " is_enabled : %d\n" " is_soft_reset : %d\n" " is_secure_reset : %d\n" " is_traceport_en : %d\n" " is_cw0_en : %d\n" " is_cw6_en : %d\n" , diag_data.dmcub_version, diag_data.scratch[0], diag_data.scratch [1], diag_data.scratch[2], diag_data.scratch[3], diag_data.scratch [4], diag_data.scratch[5], diag_data.scratch[6], diag_data.scratch [7], diag_data.scratch[8], diag_data.scratch[9], diag_data.scratch [10], diag_data.scratch[11], diag_data.scratch[12], diag_data .scratch[13], diag_data.scratch[14], diag_data.scratch[15], diag_data .pc, diag_data.undefined_address_fault_addr, diag_data.inst_fetch_fault_addr , diag_data.data_write_fault_addr, diag_data.inbox1_rptr, diag_data .inbox1_wptr, diag_data.inbox1_size, diag_data.inbox0_rptr, diag_data .inbox0_wptr, diag_data.inbox0_size, diag_data.is_dmcub_enabled , diag_data.is_dmcub_soft_reset, diag_data.is_dmcub_secure_reset , diag_data.is_traceport_en, diag_data.is_cw0_enabled, diag_data .is_cw6_enabled) | ||||||||||
883 | diag_data.is_cw6_enabled)___drm_dbg(((void *)0), DRM_UT_KMS, "DMCUB STATE\n" " dmcub_version : %08x\n" " scratch [0] : %08x\n" " scratch [1] : %08x\n" " scratch [2] : %08x\n" " scratch [3] : %08x\n" " scratch [4] : %08x\n" " scratch [5] : %08x\n" " scratch [6] : %08x\n" " scratch [7] : %08x\n" " scratch [8] : %08x\n" " scratch [9] : %08x\n" " scratch [10] : %08x\n" " scratch [11] : %08x\n" " scratch [12] : %08x\n" " scratch [13] : %08x\n" " scratch [14] : %08x\n" " scratch [15] : %08x\n" " pc : %08x\n" " unk_fault_addr : %08x\n" " inst_fault_addr : %08x\n" " data_fault_addr : %08x\n" " inbox1_rptr : %08x\n" " inbox1_wptr : %08x\n" " inbox1_size : %08x\n" " inbox0_rptr : %08x\n" " inbox0_wptr : %08x\n" " inbox0_size : %08x\n" " is_enabled : %d\n" " is_soft_reset : %d\n" " is_secure_reset : %d\n" " is_traceport_en : %d\n" " is_cw0_en : %d\n" " is_cw6_en : %d\n" , diag_data.dmcub_version, diag_data.scratch[0], diag_data.scratch [1], diag_data.scratch[2], diag_data.scratch[3], diag_data.scratch [4], diag_data.scratch[5], diag_data.scratch[6], diag_data.scratch [7], diag_data.scratch[8], diag_data.scratch[9], diag_data.scratch [10], diag_data.scratch[11], diag_data.scratch[12], diag_data .scratch[13], diag_data.scratch[14], diag_data.scratch[15], diag_data .pc, diag_data.undefined_address_fault_addr, diag_data.inst_fetch_fault_addr , diag_data.data_write_fault_addr, diag_data.inbox1_rptr, diag_data .inbox1_wptr, diag_data.inbox1_size, diag_data.inbox0_rptr, diag_data .inbox0_wptr, diag_data.inbox0_size, diag_data.is_dmcub_enabled , diag_data.is_dmcub_soft_reset, diag_data.is_dmcub_secure_reset , diag_data.is_traceport_en, diag_data.is_cw0_enabled, diag_data .is_cw6_enabled); | ||||||||||
884 | } | ||||||||||
885 | |||||||||||
886 | static bool_Bool dc_dmub_should_update_cursor_data(struct pipe_ctx *pipe_ctx) | ||||||||||
887 | { | ||||||||||
888 | if (pipe_ctx->plane_state != NULL((void *)0)) { | ||||||||||
889 | if (pipe_ctx->plane_state->address.type == PLN_ADDR_TYPE_VIDEO_PROGRESSIVE) | ||||||||||
890 | return false0; | ||||||||||
891 | } | ||||||||||
892 | |||||||||||
893 | if ((pipe_ctx->stream->link->psr_settings.psr_version == DC_PSR_VERSION_SU_1 || | ||||||||||
894 | pipe_ctx->stream->link->psr_settings.psr_version == DC_PSR_VERSION_1) && | ||||||||||
895 | pipe_ctx->stream->ctx->dce_version >= DCN_VERSION_3_1) | ||||||||||
896 | return true1; | ||||||||||
897 | |||||||||||
898 | return false0; | ||||||||||
899 | } | ||||||||||
900 | |||||||||||
901 | static void dc_build_cursor_update_payload0( | ||||||||||
902 | struct pipe_ctx *pipe_ctx, uint8_t p_idx, | ||||||||||
903 | struct dmub_cmd_update_cursor_payload0 *payload) | ||||||||||
904 | { | ||||||||||
905 | struct hubp *hubp = pipe_ctx->plane_res.hubp; | ||||||||||
906 | unsigned int panel_inst = 0; | ||||||||||
907 | |||||||||||
908 | if (!dc_get_edp_link_panel_inst(hubp->ctx->dc, | ||||||||||
909 | pipe_ctx->stream->link, &panel_inst)) | ||||||||||
910 | return; | ||||||||||
911 | |||||||||||
912 | /* Payload: Cursor Rect is built from position & attribute | ||||||||||
913 | * x & y are obtained from postion | ||||||||||
914 | */ | ||||||||||
915 | payload->cursor_rect.x = hubp->cur_rect.x; | ||||||||||
916 | payload->cursor_rect.y = hubp->cur_rect.y; | ||||||||||
917 | /* w & h are obtained from attribute */ | ||||||||||
918 | payload->cursor_rect.width = hubp->cur_rect.w; | ||||||||||
919 | payload->cursor_rect.height = hubp->cur_rect.h; | ||||||||||
920 | |||||||||||
921 | payload->enable = hubp->pos.cur_ctl.bits.cur_enable; | ||||||||||
922 | payload->pipe_idx = p_idx; | ||||||||||
923 | payload->cmd_version = DMUB_CMD_PSR_CONTROL_VERSION_10x1; | ||||||||||
924 | payload->panel_inst = panel_inst; | ||||||||||
925 | } | ||||||||||
926 | |||||||||||
927 | static void dc_send_cmd_to_dmu(struct dc_dmub_srv *dmub_srv, | ||||||||||
928 | union dmub_rb_cmd *cmd) | ||||||||||
929 | { | ||||||||||
930 | dc_dmub_srv_cmd_queue(dmub_srv, cmd); | ||||||||||
931 | dc_dmub_srv_cmd_execute(dmub_srv); | ||||||||||
932 | dc_dmub_srv_wait_idle(dmub_srv); | ||||||||||
933 | } | ||||||||||
934 | |||||||||||
935 | static void dc_build_cursor_position_update_payload0( | ||||||||||
936 | struct dmub_cmd_update_cursor_payload0 *pl, const uint8_t p_idx, | ||||||||||
937 | const struct hubp *hubp, const struct dpp *dpp) | ||||||||||
938 | { | ||||||||||
939 | /* Hubp */ | ||||||||||
940 | pl->position_cfg.pHubp.cur_ctl.raw = hubp->pos.cur_ctl.raw; | ||||||||||
941 | pl->position_cfg.pHubp.position.raw = hubp->pos.position.raw; | ||||||||||
942 | pl->position_cfg.pHubp.hot_spot.raw = hubp->pos.hot_spot.raw; | ||||||||||
943 | pl->position_cfg.pHubp.dst_offset.raw = hubp->pos.dst_offset.raw; | ||||||||||
944 | |||||||||||
945 | /* dpp */ | ||||||||||
946 | pl->position_cfg.pDpp.cur0_ctl.raw = dpp->pos.cur0_ctl.raw; | ||||||||||
947 | pl->position_cfg.pipe_idx = p_idx; | ||||||||||
948 | } | ||||||||||
949 | |||||||||||
950 | static void dc_build_cursor_attribute_update_payload1( | ||||||||||
951 | struct dmub_cursor_attributes_cfg *pl_A, const uint8_t p_idx, | ||||||||||
952 | const struct hubp *hubp, const struct dpp *dpp) | ||||||||||
953 | { | ||||||||||
954 | /* Hubp */ | ||||||||||
955 | pl_A->aHubp.SURFACE_ADDR_HIGH = hubp->att.SURFACE_ADDR_HIGH; | ||||||||||
956 | pl_A->aHubp.SURFACE_ADDR = hubp->att.SURFACE_ADDR; | ||||||||||
957 | pl_A->aHubp.cur_ctl.raw = hubp->att.cur_ctl.raw; | ||||||||||
958 | pl_A->aHubp.size.raw = hubp->att.size.raw; | ||||||||||
959 | pl_A->aHubp.settings.raw = hubp->att.settings.raw; | ||||||||||
960 | |||||||||||
961 | /* dpp */ | ||||||||||
962 | pl_A->aDpp.cur0_ctl.raw = dpp->att.cur0_ctl.raw; | ||||||||||
963 | } | ||||||||||
964 | |||||||||||
965 | /** | ||||||||||
966 | * *************************************************************************************** | ||||||||||
967 | * dc_send_update_cursor_info_to_dmu: Populate the DMCUB Cursor update info command | ||||||||||
968 | * | ||||||||||
969 | * This function would store the cursor related information and pass it into dmub | ||||||||||
970 | * | ||||||||||
971 | * @param [in] pCtx: pipe context | ||||||||||
972 | * @param [in] pipe_idx: pipe index | ||||||||||
973 | * | ||||||||||
974 | * @return: void | ||||||||||
975 | * | ||||||||||
976 | * *************************************************************************************** | ||||||||||
977 | */ | ||||||||||
978 | |||||||||||
979 | void dc_send_update_cursor_info_to_dmu( | ||||||||||
980 | struct pipe_ctx *pCtx, uint8_t pipe_idx) | ||||||||||
981 | { | ||||||||||
982 | union dmub_rb_cmd cmd = { 0 }; | ||||||||||
983 | union dmub_cmd_update_cursor_info_data *update_cursor_info = | ||||||||||
984 | &cmd.update_cursor_info.update_cursor_info_data; | ||||||||||
985 | |||||||||||
986 | if (!dc_dmub_should_update_cursor_data(pCtx)) | ||||||||||
987 | return; | ||||||||||
988 | /* | ||||||||||
989 | * Since we use multi_cmd_pending for dmub command, the 2nd command is | ||||||||||
990 | * only assigned to store cursor attributes info. | ||||||||||
991 | * 1st command can view as 2 parts, 1st is for PSR/Replay data, the other | ||||||||||
992 | * is to store cursor position info. | ||||||||||
993 | * | ||||||||||
994 | * Command heaer type must be the same type if using multi_cmd_pending. | ||||||||||
995 | * Besides, while process 2nd command in DMU, the sub type is useless. | ||||||||||
996 | * So it's meanless to pass the sub type header with different type. | ||||||||||
997 | */ | ||||||||||
998 | |||||||||||
999 | { | ||||||||||
1000 | /* Build Payload#0 Header */ | ||||||||||
1001 | cmd.update_cursor_info.header.type = DMUB_CMD__UPDATE_CURSOR_INFO; | ||||||||||
1002 | cmd.update_cursor_info.header.payload_bytes = | ||||||||||
1003 | sizeof(cmd.update_cursor_info.update_cursor_info_data); | ||||||||||
1004 | cmd.update_cursor_info.header.multi_cmd_pending = 1; /* To combine multi dmu cmd, 1st cmd */ | ||||||||||
1005 | |||||||||||
1006 | /* Prepare Payload */ | ||||||||||
1007 | dc_build_cursor_update_payload0(pCtx, pipe_idx, &update_cursor_info->payload0); | ||||||||||
1008 | |||||||||||
1009 | dc_build_cursor_position_update_payload0(&update_cursor_info->payload0, pipe_idx, | ||||||||||
1010 | pCtx->plane_res.hubp, pCtx->plane_res.dpp); | ||||||||||
1011 | /* Send update_curosr_info to queue */ | ||||||||||
1012 | dc_dmub_srv_cmd_queue(pCtx->stream->ctx->dmub_srv, &cmd); | ||||||||||
1013 | } | ||||||||||
1014 | { | ||||||||||
1015 | /* Build Payload#1 Header */ | ||||||||||
1016 | memset(update_cursor_info, 0, sizeof(union dmub_cmd_update_cursor_info_data))__builtin_memset((update_cursor_info), (0), (sizeof(union dmub_cmd_update_cursor_info_data ))); | ||||||||||
1017 | cmd.update_cursor_info.header.type = DMUB_CMD__UPDATE_CURSOR_INFO; | ||||||||||
1018 | cmd.update_cursor_info.header.payload_bytes = sizeof(struct cursor_attributes_cfg); | ||||||||||
1019 | cmd.update_cursor_info.header.multi_cmd_pending = 0; /* Indicate it's the last command. */ | ||||||||||
1020 | |||||||||||
1021 | dc_build_cursor_attribute_update_payload1( | ||||||||||
1022 | &cmd.update_cursor_info.update_cursor_info_data.payload1.attribute_cfg, | ||||||||||
1023 | pipe_idx, pCtx->plane_res.hubp, pCtx->plane_res.dpp); | ||||||||||
1024 | |||||||||||
1025 | /* Combine 2nd cmds update_curosr_info to DMU */ | ||||||||||
1026 | dc_send_cmd_to_dmu(pCtx->stream->ctx->dmub_srv, &cmd); | ||||||||||
1027 | } | ||||||||||
1028 | } | ||||||||||
1029 | |||||||||||
1030 | bool_Bool dc_dmub_check_min_version(struct dmub_srv *srv) | ||||||||||
1031 | { | ||||||||||
1032 | if (!srv->hw_funcs.is_psrsu_supported) | ||||||||||
1033 | return true1; | ||||||||||
1034 | return srv->hw_funcs.is_psrsu_supported(srv); | ||||||||||
1035 | } |