xref: /openbmc/linux/drivers/gpu/drm/i915/display/intel_display_debugfs.c (revision 25ebbc57ca56df3cf9149e9da6b1d3169c8487db)
1 // SPDX-License-Identifier: MIT
2 /*
3  * Copyright © 2020 Intel Corporation
4  */
5 
6 #include <linux/string_helpers.h>
7 
8 #include <drm/drm_debugfs.h>
9 #include <drm/drm_fourcc.h>
10 
11 #include "i915_debugfs.h"
12 #include "i915_irq.h"
13 #include "i915_reg.h"
14 #include "intel_de.h"
15 #include "intel_display_debugfs.h"
16 #include "intel_display_power.h"
17 #include "intel_display_power_well.h"
18 #include "intel_display_types.h"
19 #include "intel_dmc.h"
20 #include "intel_dp.h"
21 #include "intel_dp_mst.h"
22 #include "intel_drrs.h"
23 #include "intel_fbc.h"
24 #include "intel_fbdev.h"
25 #include "intel_hdcp.h"
26 #include "intel_hdmi.h"
27 #include "intel_hotplug.h"
28 #include "intel_panel.h"
29 #include "intel_psr.h"
30 #include "intel_sprite.h"
31 #include "intel_wm.h"
32 
33 static inline struct drm_i915_private *node_to_i915(struct drm_info_node *node)
34 {
35 	return to_i915(node->minor->dev);
36 }
37 
38 static int i915_frontbuffer_tracking(struct seq_file *m, void *unused)
39 {
40 	struct drm_i915_private *dev_priv = node_to_i915(m->private);
41 
42 	seq_printf(m, "FB tracking busy bits: 0x%08x\n",
43 		   dev_priv->display.fb_tracking.busy_bits);
44 
45 	seq_printf(m, "FB tracking flip bits: 0x%08x\n",
46 		   dev_priv->display.fb_tracking.flip_bits);
47 
48 	return 0;
49 }
50 
51 static int i915_ips_status(struct seq_file *m, void *unused)
52 {
53 	struct drm_i915_private *dev_priv = node_to_i915(m->private);
54 	intel_wakeref_t wakeref;
55 
56 	if (!HAS_IPS(dev_priv))
57 		return -ENODEV;
58 
59 	wakeref = intel_runtime_pm_get(&dev_priv->runtime_pm);
60 
61 	seq_printf(m, "Enabled by kernel parameter: %s\n",
62 		   str_yes_no(dev_priv->params.enable_ips));
63 
64 	if (DISPLAY_VER(dev_priv) >= 8) {
65 		seq_puts(m, "Currently: unknown\n");
66 	} else {
67 		if (intel_de_read(dev_priv, IPS_CTL) & IPS_ENABLE)
68 			seq_puts(m, "Currently: enabled\n");
69 		else
70 			seq_puts(m, "Currently: disabled\n");
71 	}
72 
73 	intel_runtime_pm_put(&dev_priv->runtime_pm, wakeref);
74 
75 	return 0;
76 }
77 
78 static int i915_sr_status(struct seq_file *m, void *unused)
79 {
80 	struct drm_i915_private *dev_priv = node_to_i915(m->private);
81 	intel_wakeref_t wakeref;
82 	bool sr_enabled = false;
83 
84 	wakeref = intel_display_power_get(dev_priv, POWER_DOMAIN_INIT);
85 
86 	if (DISPLAY_VER(dev_priv) >= 9)
87 		/* no global SR status; inspect per-plane WM */;
88 	else if (HAS_PCH_SPLIT(dev_priv))
89 		sr_enabled = intel_de_read(dev_priv, WM1_LP_ILK) & WM_LP_ENABLE;
90 	else if (IS_I965GM(dev_priv) || IS_G4X(dev_priv) ||
91 		 IS_I945G(dev_priv) || IS_I945GM(dev_priv))
92 		sr_enabled = intel_de_read(dev_priv, FW_BLC_SELF) & FW_BLC_SELF_EN;
93 	else if (IS_I915GM(dev_priv))
94 		sr_enabled = intel_de_read(dev_priv, INSTPM) & INSTPM_SELF_EN;
95 	else if (IS_PINEVIEW(dev_priv))
96 		sr_enabled = intel_de_read(dev_priv, DSPFW3) & PINEVIEW_SELF_REFRESH_EN;
97 	else if (IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv))
98 		sr_enabled = intel_de_read(dev_priv, FW_BLC_SELF_VLV) & FW_CSPWRDWNEN;
99 
100 	intel_display_power_put(dev_priv, POWER_DOMAIN_INIT, wakeref);
101 
102 	seq_printf(m, "self-refresh: %s\n", str_enabled_disabled(sr_enabled));
103 
104 	return 0;
105 }
106 
107 static int i915_opregion(struct seq_file *m, void *unused)
108 {
109 	struct drm_i915_private *i915 = node_to_i915(m->private);
110 	struct intel_opregion *opregion = &i915->display.opregion;
111 
112 	if (opregion->header)
113 		seq_write(m, opregion->header, OPREGION_SIZE);
114 
115 	return 0;
116 }
117 
118 static int i915_vbt(struct seq_file *m, void *unused)
119 {
120 	struct drm_i915_private *i915 = node_to_i915(m->private);
121 	struct intel_opregion *opregion = &i915->display.opregion;
122 
123 	if (opregion->vbt)
124 		seq_write(m, opregion->vbt, opregion->vbt_size);
125 
126 	return 0;
127 }
128 
129 static int i915_gem_framebuffer_info(struct seq_file *m, void *data)
130 {
131 	struct drm_i915_private *dev_priv = node_to_i915(m->private);
132 	struct intel_framebuffer *fbdev_fb = NULL;
133 	struct drm_framebuffer *drm_fb;
134 
135 #ifdef CONFIG_DRM_FBDEV_EMULATION
136 	fbdev_fb = intel_fbdev_framebuffer(dev_priv->display.fbdev.fbdev);
137 	if (fbdev_fb) {
138 		seq_printf(m, "fbcon size: %d x %d, depth %d, %d bpp, modifier 0x%llx, refcount %d, obj ",
139 			   fbdev_fb->base.width,
140 			   fbdev_fb->base.height,
141 			   fbdev_fb->base.format->depth,
142 			   fbdev_fb->base.format->cpp[0] * 8,
143 			   fbdev_fb->base.modifier,
144 			   drm_framebuffer_read_refcount(&fbdev_fb->base));
145 		i915_debugfs_describe_obj(m, intel_fb_obj(&fbdev_fb->base));
146 		seq_putc(m, '\n');
147 	}
148 #endif
149 
150 	mutex_lock(&dev_priv->drm.mode_config.fb_lock);
151 	drm_for_each_fb(drm_fb, &dev_priv->drm) {
152 		struct intel_framebuffer *fb = to_intel_framebuffer(drm_fb);
153 		if (fb == fbdev_fb)
154 			continue;
155 
156 		seq_printf(m, "user size: %d x %d, depth %d, %d bpp, modifier 0x%llx, refcount %d, obj ",
157 			   fb->base.width,
158 			   fb->base.height,
159 			   fb->base.format->depth,
160 			   fb->base.format->cpp[0] * 8,
161 			   fb->base.modifier,
162 			   drm_framebuffer_read_refcount(&fb->base));
163 		i915_debugfs_describe_obj(m, intel_fb_obj(&fb->base));
164 		seq_putc(m, '\n');
165 	}
166 	mutex_unlock(&dev_priv->drm.mode_config.fb_lock);
167 
168 	return 0;
169 }
170 
171 static int i915_psr_sink_status_show(struct seq_file *m, void *data)
172 {
173 	u8 val;
174 	static const char * const sink_status[] = {
175 		"inactive",
176 		"transition to active, capture and display",
177 		"active, display from RFB",
178 		"active, capture and display on sink device timings",
179 		"transition to inactive, capture and display, timing re-sync",
180 		"reserved",
181 		"reserved",
182 		"sink internal error",
183 	};
184 	struct drm_connector *connector = m->private;
185 	struct intel_dp *intel_dp =
186 		intel_attached_dp(to_intel_connector(connector));
187 	int ret;
188 
189 	if (!CAN_PSR(intel_dp)) {
190 		seq_puts(m, "PSR Unsupported\n");
191 		return -ENODEV;
192 	}
193 
194 	if (connector->status != connector_status_connected)
195 		return -ENODEV;
196 
197 	ret = drm_dp_dpcd_readb(&intel_dp->aux, DP_PSR_STATUS, &val);
198 
199 	if (ret == 1) {
200 		const char *str = "unknown";
201 
202 		val &= DP_PSR_SINK_STATE_MASK;
203 		if (val < ARRAY_SIZE(sink_status))
204 			str = sink_status[val];
205 		seq_printf(m, "Sink PSR status: 0x%x [%s]\n", val, str);
206 	} else {
207 		return ret;
208 	}
209 
210 	return 0;
211 }
212 DEFINE_SHOW_ATTRIBUTE(i915_psr_sink_status);
213 
214 static void
215 psr_source_status(struct intel_dp *intel_dp, struct seq_file *m)
216 {
217 	struct drm_i915_private *dev_priv = dp_to_i915(intel_dp);
218 	const char *status = "unknown";
219 	u32 val, status_val;
220 
221 	if (intel_dp->psr.psr2_enabled) {
222 		static const char * const live_status[] = {
223 			"IDLE",
224 			"CAPTURE",
225 			"CAPTURE_FS",
226 			"SLEEP",
227 			"BUFON_FW",
228 			"ML_UP",
229 			"SU_STANDBY",
230 			"FAST_SLEEP",
231 			"DEEP_SLEEP",
232 			"BUF_ON",
233 			"TG_ON"
234 		};
235 		val = intel_de_read(dev_priv,
236 				    EDP_PSR2_STATUS(intel_dp->psr.transcoder));
237 		status_val = REG_FIELD_GET(EDP_PSR2_STATUS_STATE_MASK, val);
238 		if (status_val < ARRAY_SIZE(live_status))
239 			status = live_status[status_val];
240 	} else {
241 		static const char * const live_status[] = {
242 			"IDLE",
243 			"SRDONACK",
244 			"SRDENT",
245 			"BUFOFF",
246 			"BUFON",
247 			"AUXACK",
248 			"SRDOFFACK",
249 			"SRDENT_ON",
250 		};
251 		val = intel_de_read(dev_priv,
252 				    EDP_PSR_STATUS(intel_dp->psr.transcoder));
253 		status_val = (val & EDP_PSR_STATUS_STATE_MASK) >>
254 			      EDP_PSR_STATUS_STATE_SHIFT;
255 		if (status_val < ARRAY_SIZE(live_status))
256 			status = live_status[status_val];
257 	}
258 
259 	seq_printf(m, "Source PSR status: %s [0x%08x]\n", status, val);
260 }
261 
262 static int intel_psr_status(struct seq_file *m, struct intel_dp *intel_dp)
263 {
264 	struct drm_i915_private *dev_priv = dp_to_i915(intel_dp);
265 	struct intel_psr *psr = &intel_dp->psr;
266 	intel_wakeref_t wakeref;
267 	const char *status;
268 	bool enabled;
269 	u32 val;
270 
271 	seq_printf(m, "Sink support: %s", str_yes_no(psr->sink_support));
272 	if (psr->sink_support)
273 		seq_printf(m, " [0x%02x]", intel_dp->psr_dpcd[0]);
274 	seq_puts(m, "\n");
275 
276 	if (!psr->sink_support)
277 		return 0;
278 
279 	wakeref = intel_runtime_pm_get(&dev_priv->runtime_pm);
280 	mutex_lock(&psr->lock);
281 
282 	if (psr->enabled)
283 		status = psr->psr2_enabled ? "PSR2 enabled" : "PSR1 enabled";
284 	else
285 		status = "disabled";
286 	seq_printf(m, "PSR mode: %s\n", status);
287 
288 	if (!psr->enabled) {
289 		seq_printf(m, "PSR sink not reliable: %s\n",
290 			   str_yes_no(psr->sink_not_reliable));
291 
292 		goto unlock;
293 	}
294 
295 	if (psr->psr2_enabled) {
296 		val = intel_de_read(dev_priv,
297 				    EDP_PSR2_CTL(intel_dp->psr.transcoder));
298 		enabled = val & EDP_PSR2_ENABLE;
299 	} else {
300 		val = intel_de_read(dev_priv,
301 				    EDP_PSR_CTL(intel_dp->psr.transcoder));
302 		enabled = val & EDP_PSR_ENABLE;
303 	}
304 	seq_printf(m, "Source PSR ctl: %s [0x%08x]\n",
305 		   str_enabled_disabled(enabled), val);
306 	psr_source_status(intel_dp, m);
307 	seq_printf(m, "Busy frontbuffer bits: 0x%08x\n",
308 		   psr->busy_frontbuffer_bits);
309 
310 	/*
311 	 * SKL+ Perf counter is reset to 0 everytime DC state is entered
312 	 */
313 	if (IS_HASWELL(dev_priv) || IS_BROADWELL(dev_priv)) {
314 		val = intel_de_read(dev_priv,
315 				    EDP_PSR_PERF_CNT(intel_dp->psr.transcoder));
316 		val &= EDP_PSR_PERF_CNT_MASK;
317 		seq_printf(m, "Performance counter: %u\n", val);
318 	}
319 
320 	if (psr->debug & I915_PSR_DEBUG_IRQ) {
321 		seq_printf(m, "Last attempted entry at: %lld\n",
322 			   psr->last_entry_attempt);
323 		seq_printf(m, "Last exit at: %lld\n", psr->last_exit);
324 	}
325 
326 	if (psr->psr2_enabled) {
327 		u32 su_frames_val[3];
328 		int frame;
329 
330 		/*
331 		 * Reading all 3 registers before hand to minimize crossing a
332 		 * frame boundary between register reads
333 		 */
334 		for (frame = 0; frame < PSR2_SU_STATUS_FRAMES; frame += 3) {
335 			val = intel_de_read(dev_priv,
336 					    PSR2_SU_STATUS(intel_dp->psr.transcoder, frame));
337 			su_frames_val[frame / 3] = val;
338 		}
339 
340 		seq_puts(m, "Frame:\tPSR2 SU blocks:\n");
341 
342 		for (frame = 0; frame < PSR2_SU_STATUS_FRAMES; frame++) {
343 			u32 su_blocks;
344 
345 			su_blocks = su_frames_val[frame / 3] &
346 				    PSR2_SU_STATUS_MASK(frame);
347 			su_blocks = su_blocks >> PSR2_SU_STATUS_SHIFT(frame);
348 			seq_printf(m, "%d\t%d\n", frame, su_blocks);
349 		}
350 
351 		seq_printf(m, "PSR2 selective fetch: %s\n",
352 			   str_enabled_disabled(psr->psr2_sel_fetch_enabled));
353 	}
354 
355 unlock:
356 	mutex_unlock(&psr->lock);
357 	intel_runtime_pm_put(&dev_priv->runtime_pm, wakeref);
358 
359 	return 0;
360 }
361 
362 static int i915_edp_psr_status(struct seq_file *m, void *data)
363 {
364 	struct drm_i915_private *dev_priv = node_to_i915(m->private);
365 	struct intel_dp *intel_dp = NULL;
366 	struct intel_encoder *encoder;
367 
368 	if (!HAS_PSR(dev_priv))
369 		return -ENODEV;
370 
371 	/* Find the first EDP which supports PSR */
372 	for_each_intel_encoder_with_psr(&dev_priv->drm, encoder) {
373 		intel_dp = enc_to_intel_dp(encoder);
374 		break;
375 	}
376 
377 	if (!intel_dp)
378 		return -ENODEV;
379 
380 	return intel_psr_status(m, intel_dp);
381 }
382 
383 static int
384 i915_edp_psr_debug_set(void *data, u64 val)
385 {
386 	struct drm_i915_private *dev_priv = data;
387 	struct intel_encoder *encoder;
388 	intel_wakeref_t wakeref;
389 	int ret = -ENODEV;
390 
391 	if (!HAS_PSR(dev_priv))
392 		return ret;
393 
394 	for_each_intel_encoder_with_psr(&dev_priv->drm, encoder) {
395 		struct intel_dp *intel_dp = enc_to_intel_dp(encoder);
396 
397 		drm_dbg_kms(&dev_priv->drm, "Setting PSR debug to %llx\n", val);
398 
399 		wakeref = intel_runtime_pm_get(&dev_priv->runtime_pm);
400 
401 		// TODO: split to each transcoder's PSR debug state
402 		ret = intel_psr_debug_set(intel_dp, val);
403 
404 		intel_runtime_pm_put(&dev_priv->runtime_pm, wakeref);
405 	}
406 
407 	return ret;
408 }
409 
410 static int
411 i915_edp_psr_debug_get(void *data, u64 *val)
412 {
413 	struct drm_i915_private *dev_priv = data;
414 	struct intel_encoder *encoder;
415 
416 	if (!HAS_PSR(dev_priv))
417 		return -ENODEV;
418 
419 	for_each_intel_encoder_with_psr(&dev_priv->drm, encoder) {
420 		struct intel_dp *intel_dp = enc_to_intel_dp(encoder);
421 
422 		// TODO: split to each transcoder's PSR debug state
423 		*val = READ_ONCE(intel_dp->psr.debug);
424 		return 0;
425 	}
426 
427 	return -ENODEV;
428 }
429 
430 DEFINE_SIMPLE_ATTRIBUTE(i915_edp_psr_debug_fops,
431 			i915_edp_psr_debug_get, i915_edp_psr_debug_set,
432 			"%llu\n");
433 
434 static int i915_power_domain_info(struct seq_file *m, void *unused)
435 {
436 	struct drm_i915_private *i915 = node_to_i915(m->private);
437 
438 	intel_display_power_debug(i915, m);
439 
440 	return 0;
441 }
442 
443 static void intel_seq_print_mode(struct seq_file *m, int tabs,
444 				 const struct drm_display_mode *mode)
445 {
446 	int i;
447 
448 	for (i = 0; i < tabs; i++)
449 		seq_putc(m, '\t');
450 
451 	seq_printf(m, DRM_MODE_FMT "\n", DRM_MODE_ARG(mode));
452 }
453 
454 static void intel_encoder_info(struct seq_file *m,
455 			       struct intel_crtc *crtc,
456 			       struct intel_encoder *encoder)
457 {
458 	struct drm_i915_private *dev_priv = node_to_i915(m->private);
459 	struct drm_connector_list_iter conn_iter;
460 	struct drm_connector *connector;
461 
462 	seq_printf(m, "\t[ENCODER:%d:%s]: connectors:\n",
463 		   encoder->base.base.id, encoder->base.name);
464 
465 	drm_connector_list_iter_begin(&dev_priv->drm, &conn_iter);
466 	drm_for_each_connector_iter(connector, &conn_iter) {
467 		const struct drm_connector_state *conn_state =
468 			connector->state;
469 
470 		if (conn_state->best_encoder != &encoder->base)
471 			continue;
472 
473 		seq_printf(m, "\t\t[CONNECTOR:%d:%s]\n",
474 			   connector->base.id, connector->name);
475 	}
476 	drm_connector_list_iter_end(&conn_iter);
477 }
478 
479 static void intel_panel_info(struct seq_file *m,
480 			     struct intel_connector *connector)
481 {
482 	const struct drm_display_mode *fixed_mode;
483 
484 	if (list_empty(&connector->panel.fixed_modes))
485 		return;
486 
487 	seq_puts(m, "\tfixed modes:\n");
488 
489 	list_for_each_entry(fixed_mode, &connector->panel.fixed_modes, head)
490 		intel_seq_print_mode(m, 2, fixed_mode);
491 }
492 
493 static void intel_hdcp_info(struct seq_file *m,
494 			    struct intel_connector *intel_connector)
495 {
496 	bool hdcp_cap, hdcp2_cap;
497 
498 	if (!intel_connector->hdcp.shim) {
499 		seq_puts(m, "No Connector Support");
500 		goto out;
501 	}
502 
503 	hdcp_cap = intel_hdcp_capable(intel_connector);
504 	hdcp2_cap = intel_hdcp2_capable(intel_connector);
505 
506 	if (hdcp_cap)
507 		seq_puts(m, "HDCP1.4 ");
508 	if (hdcp2_cap)
509 		seq_puts(m, "HDCP2.2 ");
510 
511 	if (!hdcp_cap && !hdcp2_cap)
512 		seq_puts(m, "None");
513 
514 out:
515 	seq_puts(m, "\n");
516 }
517 
518 static void intel_dp_info(struct seq_file *m,
519 			  struct intel_connector *intel_connector)
520 {
521 	struct intel_encoder *intel_encoder = intel_attached_encoder(intel_connector);
522 	struct intel_dp *intel_dp = enc_to_intel_dp(intel_encoder);
523 	const struct drm_property_blob *edid = intel_connector->base.edid_blob_ptr;
524 
525 	seq_printf(m, "\tDPCD rev: %x\n", intel_dp->dpcd[DP_DPCD_REV]);
526 	seq_printf(m, "\taudio support: %s\n",
527 		   str_yes_no(intel_dp->has_audio));
528 
529 	drm_dp_downstream_debug(m, intel_dp->dpcd, intel_dp->downstream_ports,
530 				edid ? edid->data : NULL, &intel_dp->aux);
531 }
532 
533 static void intel_dp_mst_info(struct seq_file *m,
534 			      struct intel_connector *intel_connector)
535 {
536 	bool has_audio = intel_connector->port->has_audio;
537 
538 	seq_printf(m, "\taudio support: %s\n", str_yes_no(has_audio));
539 }
540 
541 static void intel_hdmi_info(struct seq_file *m,
542 			    struct intel_connector *intel_connector)
543 {
544 	struct intel_encoder *intel_encoder = intel_attached_encoder(intel_connector);
545 	struct intel_hdmi *intel_hdmi = enc_to_intel_hdmi(intel_encoder);
546 
547 	seq_printf(m, "\taudio support: %s\n",
548 		   str_yes_no(intel_hdmi->has_audio));
549 }
550 
551 static void intel_connector_info(struct seq_file *m,
552 				 struct drm_connector *connector)
553 {
554 	struct intel_connector *intel_connector = to_intel_connector(connector);
555 	const struct drm_connector_state *conn_state = connector->state;
556 	struct intel_encoder *encoder =
557 		to_intel_encoder(conn_state->best_encoder);
558 	const struct drm_display_mode *mode;
559 
560 	seq_printf(m, "[CONNECTOR:%d:%s]: status: %s\n",
561 		   connector->base.id, connector->name,
562 		   drm_get_connector_status_name(connector->status));
563 
564 	if (connector->status == connector_status_disconnected)
565 		return;
566 
567 	seq_printf(m, "\tphysical dimensions: %dx%dmm\n",
568 		   connector->display_info.width_mm,
569 		   connector->display_info.height_mm);
570 	seq_printf(m, "\tsubpixel order: %s\n",
571 		   drm_get_subpixel_order_name(connector->display_info.subpixel_order));
572 	seq_printf(m, "\tCEA rev: %d\n", connector->display_info.cea_rev);
573 
574 	if (!encoder)
575 		return;
576 
577 	switch (connector->connector_type) {
578 	case DRM_MODE_CONNECTOR_DisplayPort:
579 	case DRM_MODE_CONNECTOR_eDP:
580 		if (encoder->type == INTEL_OUTPUT_DP_MST)
581 			intel_dp_mst_info(m, intel_connector);
582 		else
583 			intel_dp_info(m, intel_connector);
584 		break;
585 	case DRM_MODE_CONNECTOR_HDMIA:
586 		if (encoder->type == INTEL_OUTPUT_HDMI ||
587 		    encoder->type == INTEL_OUTPUT_DDI)
588 			intel_hdmi_info(m, intel_connector);
589 		break;
590 	default:
591 		break;
592 	}
593 
594 	seq_puts(m, "\tHDCP version: ");
595 	intel_hdcp_info(m, intel_connector);
596 
597 	seq_printf(m, "\tmax bpc: %u\n", connector->display_info.bpc);
598 
599 	intel_panel_info(m, intel_connector);
600 
601 	seq_printf(m, "\tmodes:\n");
602 	list_for_each_entry(mode, &connector->modes, head)
603 		intel_seq_print_mode(m, 2, mode);
604 }
605 
606 static const char *plane_type(enum drm_plane_type type)
607 {
608 	switch (type) {
609 	case DRM_PLANE_TYPE_OVERLAY:
610 		return "OVL";
611 	case DRM_PLANE_TYPE_PRIMARY:
612 		return "PRI";
613 	case DRM_PLANE_TYPE_CURSOR:
614 		return "CUR";
615 	/*
616 	 * Deliberately omitting default: to generate compiler warnings
617 	 * when a new drm_plane_type gets added.
618 	 */
619 	}
620 
621 	return "unknown";
622 }
623 
624 static void plane_rotation(char *buf, size_t bufsize, unsigned int rotation)
625 {
626 	/*
627 	 * According to doc only one DRM_MODE_ROTATE_ is allowed but this
628 	 * will print them all to visualize if the values are misused
629 	 */
630 	snprintf(buf, bufsize,
631 		 "%s%s%s%s%s%s(0x%08x)",
632 		 (rotation & DRM_MODE_ROTATE_0) ? "0 " : "",
633 		 (rotation & DRM_MODE_ROTATE_90) ? "90 " : "",
634 		 (rotation & DRM_MODE_ROTATE_180) ? "180 " : "",
635 		 (rotation & DRM_MODE_ROTATE_270) ? "270 " : "",
636 		 (rotation & DRM_MODE_REFLECT_X) ? "FLIPX " : "",
637 		 (rotation & DRM_MODE_REFLECT_Y) ? "FLIPY " : "",
638 		 rotation);
639 }
640 
641 static const char *plane_visibility(const struct intel_plane_state *plane_state)
642 {
643 	if (plane_state->uapi.visible)
644 		return "visible";
645 
646 	if (plane_state->planar_slave)
647 		return "planar-slave";
648 
649 	return "hidden";
650 }
651 
652 static void intel_plane_uapi_info(struct seq_file *m, struct intel_plane *plane)
653 {
654 	const struct intel_plane_state *plane_state =
655 		to_intel_plane_state(plane->base.state);
656 	const struct drm_framebuffer *fb = plane_state->uapi.fb;
657 	struct drm_rect src, dst;
658 	char rot_str[48];
659 
660 	src = drm_plane_state_src(&plane_state->uapi);
661 	dst = drm_plane_state_dest(&plane_state->uapi);
662 
663 	plane_rotation(rot_str, sizeof(rot_str),
664 		       plane_state->uapi.rotation);
665 
666 	seq_puts(m, "\t\tuapi: [FB:");
667 	if (fb)
668 		seq_printf(m, "%d] %p4cc,0x%llx,%dx%d", fb->base.id,
669 			   &fb->format->format, fb->modifier, fb->width,
670 			   fb->height);
671 	else
672 		seq_puts(m, "0] n/a,0x0,0x0,");
673 	seq_printf(m, ", visible=%s, src=" DRM_RECT_FP_FMT ", dst=" DRM_RECT_FMT
674 		   ", rotation=%s\n", plane_visibility(plane_state),
675 		   DRM_RECT_FP_ARG(&src), DRM_RECT_ARG(&dst), rot_str);
676 
677 	if (plane_state->planar_linked_plane)
678 		seq_printf(m, "\t\tplanar: Linked to [PLANE:%d:%s] as a %s\n",
679 			   plane_state->planar_linked_plane->base.base.id, plane_state->planar_linked_plane->base.name,
680 			   plane_state->planar_slave ? "slave" : "master");
681 }
682 
683 static void intel_plane_hw_info(struct seq_file *m, struct intel_plane *plane)
684 {
685 	const struct intel_plane_state *plane_state =
686 		to_intel_plane_state(plane->base.state);
687 	const struct drm_framebuffer *fb = plane_state->hw.fb;
688 	char rot_str[48];
689 
690 	if (!fb)
691 		return;
692 
693 	plane_rotation(rot_str, sizeof(rot_str),
694 		       plane_state->hw.rotation);
695 
696 	seq_printf(m, "\t\thw: [FB:%d] %p4cc,0x%llx,%dx%d, visible=%s, src="
697 		   DRM_RECT_FP_FMT ", dst=" DRM_RECT_FMT ", rotation=%s\n",
698 		   fb->base.id, &fb->format->format,
699 		   fb->modifier, fb->width, fb->height,
700 		   str_yes_no(plane_state->uapi.visible),
701 		   DRM_RECT_FP_ARG(&plane_state->uapi.src),
702 		   DRM_RECT_ARG(&plane_state->uapi.dst),
703 		   rot_str);
704 }
705 
706 static void intel_plane_info(struct seq_file *m, struct intel_crtc *crtc)
707 {
708 	struct drm_i915_private *dev_priv = node_to_i915(m->private);
709 	struct intel_plane *plane;
710 
711 	for_each_intel_plane_on_crtc(&dev_priv->drm, crtc, plane) {
712 		seq_printf(m, "\t[PLANE:%d:%s]: type=%s\n",
713 			   plane->base.base.id, plane->base.name,
714 			   plane_type(plane->base.type));
715 		intel_plane_uapi_info(m, plane);
716 		intel_plane_hw_info(m, plane);
717 	}
718 }
719 
720 static void intel_scaler_info(struct seq_file *m, struct intel_crtc *crtc)
721 {
722 	const struct intel_crtc_state *crtc_state =
723 		to_intel_crtc_state(crtc->base.state);
724 	int num_scalers = crtc->num_scalers;
725 	int i;
726 
727 	/* Not all platformas have a scaler */
728 	if (num_scalers) {
729 		seq_printf(m, "\tnum_scalers=%d, scaler_users=%x scaler_id=%d scaling_filter=%d",
730 			   num_scalers,
731 			   crtc_state->scaler_state.scaler_users,
732 			   crtc_state->scaler_state.scaler_id,
733 			   crtc_state->hw.scaling_filter);
734 
735 		for (i = 0; i < num_scalers; i++) {
736 			const struct intel_scaler *sc =
737 				&crtc_state->scaler_state.scalers[i];
738 
739 			seq_printf(m, ", scalers[%d]: use=%s, mode=%x",
740 				   i, str_yes_no(sc->in_use), sc->mode);
741 		}
742 		seq_puts(m, "\n");
743 	} else {
744 		seq_puts(m, "\tNo scalers available on this platform\n");
745 	}
746 }
747 
748 #if IS_ENABLED(CONFIG_DRM_I915_DEBUG_VBLANK_EVADE)
749 static void crtc_updates_info(struct seq_file *m,
750 			      struct intel_crtc *crtc,
751 			      const char *hdr)
752 {
753 	u64 count;
754 	int row;
755 
756 	count = 0;
757 	for (row = 0; row < ARRAY_SIZE(crtc->debug.vbl.times); row++)
758 		count += crtc->debug.vbl.times[row];
759 	seq_printf(m, "%sUpdates: %llu\n", hdr, count);
760 	if (!count)
761 		return;
762 
763 	for (row = 0; row < ARRAY_SIZE(crtc->debug.vbl.times); row++) {
764 		char columns[80] = "       |";
765 		unsigned int x;
766 
767 		if (row & 1) {
768 			const char *units;
769 
770 			if (row > 10) {
771 				x = 1000000;
772 				units = "ms";
773 			} else {
774 				x = 1000;
775 				units = "us";
776 			}
777 
778 			snprintf(columns, sizeof(columns), "%4ld%s |",
779 				 DIV_ROUND_CLOSEST(BIT(row + 9), x), units);
780 		}
781 
782 		if (crtc->debug.vbl.times[row]) {
783 			x = ilog2(crtc->debug.vbl.times[row]);
784 			memset(columns + 8, '*', x);
785 			columns[8 + x] = '\0';
786 		}
787 
788 		seq_printf(m, "%s%s\n", hdr, columns);
789 	}
790 
791 	seq_printf(m, "%sMin update: %lluns\n",
792 		   hdr, crtc->debug.vbl.min);
793 	seq_printf(m, "%sMax update: %lluns\n",
794 		   hdr, crtc->debug.vbl.max);
795 	seq_printf(m, "%sAverage update: %lluns\n",
796 		   hdr, div64_u64(crtc->debug.vbl.sum,  count));
797 	seq_printf(m, "%sOverruns > %uus: %u\n",
798 		   hdr, VBLANK_EVASION_TIME_US, crtc->debug.vbl.over);
799 }
800 
801 static int crtc_updates_show(struct seq_file *m, void *data)
802 {
803 	crtc_updates_info(m, m->private, "");
804 	return 0;
805 }
806 
807 static int crtc_updates_open(struct inode *inode, struct file *file)
808 {
809 	return single_open(file, crtc_updates_show, inode->i_private);
810 }
811 
812 static ssize_t crtc_updates_write(struct file *file,
813 				  const char __user *ubuf,
814 				  size_t len, loff_t *offp)
815 {
816 	struct seq_file *m = file->private_data;
817 	struct intel_crtc *crtc = m->private;
818 
819 	/* May race with an update. Meh. */
820 	memset(&crtc->debug.vbl, 0, sizeof(crtc->debug.vbl));
821 
822 	return len;
823 }
824 
825 static const struct file_operations crtc_updates_fops = {
826 	.owner = THIS_MODULE,
827 	.open = crtc_updates_open,
828 	.read = seq_read,
829 	.llseek = seq_lseek,
830 	.release = single_release,
831 	.write = crtc_updates_write
832 };
833 
834 static void crtc_updates_add(struct drm_crtc *crtc)
835 {
836 	debugfs_create_file("i915_update_info", 0644, crtc->debugfs_entry,
837 			    to_intel_crtc(crtc), &crtc_updates_fops);
838 }
839 
840 #else
841 static void crtc_updates_info(struct seq_file *m,
842 			      struct intel_crtc *crtc,
843 			      const char *hdr)
844 {
845 }
846 
847 static void crtc_updates_add(struct drm_crtc *crtc)
848 {
849 }
850 #endif
851 
852 static void intel_crtc_info(struct seq_file *m, struct intel_crtc *crtc)
853 {
854 	struct drm_i915_private *dev_priv = node_to_i915(m->private);
855 	const struct intel_crtc_state *crtc_state =
856 		to_intel_crtc_state(crtc->base.state);
857 	struct intel_encoder *encoder;
858 
859 	seq_printf(m, "[CRTC:%d:%s]:\n",
860 		   crtc->base.base.id, crtc->base.name);
861 
862 	seq_printf(m, "\tuapi: enable=%s, active=%s, mode=" DRM_MODE_FMT "\n",
863 		   str_yes_no(crtc_state->uapi.enable),
864 		   str_yes_no(crtc_state->uapi.active),
865 		   DRM_MODE_ARG(&crtc_state->uapi.mode));
866 
867 	seq_printf(m, "\thw: enable=%s, active=%s\n",
868 		   str_yes_no(crtc_state->hw.enable), str_yes_no(crtc_state->hw.active));
869 	seq_printf(m, "\tadjusted_mode=" DRM_MODE_FMT "\n",
870 		   DRM_MODE_ARG(&crtc_state->hw.adjusted_mode));
871 	seq_printf(m, "\tpipe__mode=" DRM_MODE_FMT "\n",
872 		   DRM_MODE_ARG(&crtc_state->hw.pipe_mode));
873 
874 	seq_printf(m, "\tpipe src=" DRM_RECT_FMT ", dither=%s, bpp=%d\n",
875 		   DRM_RECT_ARG(&crtc_state->pipe_src),
876 		   str_yes_no(crtc_state->dither), crtc_state->pipe_bpp);
877 
878 	intel_scaler_info(m, crtc);
879 
880 	if (crtc_state->bigjoiner_pipes)
881 		seq_printf(m, "\tLinked to 0x%x pipes as a %s\n",
882 			   crtc_state->bigjoiner_pipes,
883 			   intel_crtc_is_bigjoiner_slave(crtc_state) ? "slave" : "master");
884 
885 	for_each_intel_encoder_mask(&dev_priv->drm, encoder,
886 				    crtc_state->uapi.encoder_mask)
887 		intel_encoder_info(m, crtc, encoder);
888 
889 	intel_plane_info(m, crtc);
890 
891 	seq_printf(m, "\tunderrun reporting: cpu=%s pch=%s\n",
892 		   str_yes_no(!crtc->cpu_fifo_underrun_disabled),
893 		   str_yes_no(!crtc->pch_fifo_underrun_disabled));
894 
895 	crtc_updates_info(m, crtc, "\t");
896 }
897 
898 static int i915_display_info(struct seq_file *m, void *unused)
899 {
900 	struct drm_i915_private *dev_priv = node_to_i915(m->private);
901 	struct intel_crtc *crtc;
902 	struct drm_connector *connector;
903 	struct drm_connector_list_iter conn_iter;
904 	intel_wakeref_t wakeref;
905 
906 	wakeref = intel_runtime_pm_get(&dev_priv->runtime_pm);
907 
908 	drm_modeset_lock_all(&dev_priv->drm);
909 
910 	seq_printf(m, "CRTC info\n");
911 	seq_printf(m, "---------\n");
912 	for_each_intel_crtc(&dev_priv->drm, crtc)
913 		intel_crtc_info(m, crtc);
914 
915 	seq_printf(m, "\n");
916 	seq_printf(m, "Connector info\n");
917 	seq_printf(m, "--------------\n");
918 	drm_connector_list_iter_begin(&dev_priv->drm, &conn_iter);
919 	drm_for_each_connector_iter(connector, &conn_iter)
920 		intel_connector_info(m, connector);
921 	drm_connector_list_iter_end(&conn_iter);
922 
923 	drm_modeset_unlock_all(&dev_priv->drm);
924 
925 	intel_runtime_pm_put(&dev_priv->runtime_pm, wakeref);
926 
927 	return 0;
928 }
929 
930 static int i915_shared_dplls_info(struct seq_file *m, void *unused)
931 {
932 	struct drm_i915_private *dev_priv = node_to_i915(m->private);
933 	int i;
934 
935 	drm_modeset_lock_all(&dev_priv->drm);
936 
937 	seq_printf(m, "PLL refclks: non-SSC: %d kHz, SSC: %d kHz\n",
938 		   dev_priv->display.dpll.ref_clks.nssc,
939 		   dev_priv->display.dpll.ref_clks.ssc);
940 
941 	for (i = 0; i < dev_priv->display.dpll.num_shared_dpll; i++) {
942 		struct intel_shared_dpll *pll = &dev_priv->display.dpll.shared_dplls[i];
943 
944 		seq_printf(m, "DPLL%i: %s, id: %i\n", i, pll->info->name,
945 			   pll->info->id);
946 		seq_printf(m, " pipe_mask: 0x%x, active: 0x%x, on: %s\n",
947 			   pll->state.pipe_mask, pll->active_mask,
948 			   str_yes_no(pll->on));
949 		seq_printf(m, " tracked hardware state:\n");
950 		seq_printf(m, " dpll:    0x%08x\n", pll->state.hw_state.dpll);
951 		seq_printf(m, " dpll_md: 0x%08x\n",
952 			   pll->state.hw_state.dpll_md);
953 		seq_printf(m, " fp0:     0x%08x\n", pll->state.hw_state.fp0);
954 		seq_printf(m, " fp1:     0x%08x\n", pll->state.hw_state.fp1);
955 		seq_printf(m, " wrpll:   0x%08x\n", pll->state.hw_state.wrpll);
956 		seq_printf(m, " cfgcr0:  0x%08x\n", pll->state.hw_state.cfgcr0);
957 		seq_printf(m, " cfgcr1:  0x%08x\n", pll->state.hw_state.cfgcr1);
958 		seq_printf(m, " div0:    0x%08x\n", pll->state.hw_state.div0);
959 		seq_printf(m, " mg_refclkin_ctl:        0x%08x\n",
960 			   pll->state.hw_state.mg_refclkin_ctl);
961 		seq_printf(m, " mg_clktop2_coreclkctl1: 0x%08x\n",
962 			   pll->state.hw_state.mg_clktop2_coreclkctl1);
963 		seq_printf(m, " mg_clktop2_hsclkctl:    0x%08x\n",
964 			   pll->state.hw_state.mg_clktop2_hsclkctl);
965 		seq_printf(m, " mg_pll_div0:  0x%08x\n",
966 			   pll->state.hw_state.mg_pll_div0);
967 		seq_printf(m, " mg_pll_div1:  0x%08x\n",
968 			   pll->state.hw_state.mg_pll_div1);
969 		seq_printf(m, " mg_pll_lf:    0x%08x\n",
970 			   pll->state.hw_state.mg_pll_lf);
971 		seq_printf(m, " mg_pll_frac_lock: 0x%08x\n",
972 			   pll->state.hw_state.mg_pll_frac_lock);
973 		seq_printf(m, " mg_pll_ssc:   0x%08x\n",
974 			   pll->state.hw_state.mg_pll_ssc);
975 		seq_printf(m, " mg_pll_bias:  0x%08x\n",
976 			   pll->state.hw_state.mg_pll_bias);
977 		seq_printf(m, " mg_pll_tdc_coldst_bias: 0x%08x\n",
978 			   pll->state.hw_state.mg_pll_tdc_coldst_bias);
979 	}
980 	drm_modeset_unlock_all(&dev_priv->drm);
981 
982 	return 0;
983 }
984 
985 static int i915_ddb_info(struct seq_file *m, void *unused)
986 {
987 	struct drm_i915_private *dev_priv = node_to_i915(m->private);
988 	struct skl_ddb_entry *entry;
989 	struct intel_crtc *crtc;
990 
991 	if (DISPLAY_VER(dev_priv) < 9)
992 		return -ENODEV;
993 
994 	drm_modeset_lock_all(&dev_priv->drm);
995 
996 	seq_printf(m, "%-15s%8s%8s%8s\n", "", "Start", "End", "Size");
997 
998 	for_each_intel_crtc(&dev_priv->drm, crtc) {
999 		struct intel_crtc_state *crtc_state =
1000 			to_intel_crtc_state(crtc->base.state);
1001 		enum pipe pipe = crtc->pipe;
1002 		enum plane_id plane_id;
1003 
1004 		seq_printf(m, "Pipe %c\n", pipe_name(pipe));
1005 
1006 		for_each_plane_id_on_crtc(crtc, plane_id) {
1007 			entry = &crtc_state->wm.skl.plane_ddb[plane_id];
1008 			seq_printf(m, "  Plane%-8d%8u%8u%8u\n", plane_id + 1,
1009 				   entry->start, entry->end,
1010 				   skl_ddb_entry_size(entry));
1011 		}
1012 
1013 		entry = &crtc_state->wm.skl.plane_ddb[PLANE_CURSOR];
1014 		seq_printf(m, "  %-13s%8u%8u%8u\n", "Cursor", entry->start,
1015 			   entry->end, skl_ddb_entry_size(entry));
1016 	}
1017 
1018 	drm_modeset_unlock_all(&dev_priv->drm);
1019 
1020 	return 0;
1021 }
1022 
1023 static bool
1024 intel_lpsp_power_well_enabled(struct drm_i915_private *i915,
1025 			      enum i915_power_well_id power_well_id)
1026 {
1027 	intel_wakeref_t wakeref;
1028 	bool is_enabled;
1029 
1030 	wakeref = intel_runtime_pm_get(&i915->runtime_pm);
1031 	is_enabled = intel_display_power_well_is_enabled(i915,
1032 							 power_well_id);
1033 	intel_runtime_pm_put(&i915->runtime_pm, wakeref);
1034 
1035 	return is_enabled;
1036 }
1037 
1038 static int i915_lpsp_status(struct seq_file *m, void *unused)
1039 {
1040 	struct drm_i915_private *i915 = node_to_i915(m->private);
1041 	bool lpsp_enabled = false;
1042 
1043 	if (DISPLAY_VER(i915) >= 13 || IS_DISPLAY_VER(i915, 9, 10)) {
1044 		lpsp_enabled = !intel_lpsp_power_well_enabled(i915, SKL_DISP_PW_2);
1045 	} else if (IS_DISPLAY_VER(i915, 11, 12)) {
1046 		lpsp_enabled = !intel_lpsp_power_well_enabled(i915, ICL_DISP_PW_3);
1047 	} else if (IS_HASWELL(i915) || IS_BROADWELL(i915)) {
1048 		lpsp_enabled = !intel_lpsp_power_well_enabled(i915, HSW_DISP_PW_GLOBAL);
1049 	} else {
1050 		seq_puts(m, "LPSP: not supported\n");
1051 		return 0;
1052 	}
1053 
1054 	seq_printf(m, "LPSP: %s\n", str_enabled_disabled(lpsp_enabled));
1055 
1056 	return 0;
1057 }
1058 
1059 static int i915_dp_mst_info(struct seq_file *m, void *unused)
1060 {
1061 	struct drm_i915_private *dev_priv = node_to_i915(m->private);
1062 	struct intel_encoder *intel_encoder;
1063 	struct intel_digital_port *dig_port;
1064 	struct drm_connector *connector;
1065 	struct drm_connector_list_iter conn_iter;
1066 
1067 	drm_connector_list_iter_begin(&dev_priv->drm, &conn_iter);
1068 	drm_for_each_connector_iter(connector, &conn_iter) {
1069 		if (connector->connector_type != DRM_MODE_CONNECTOR_DisplayPort)
1070 			continue;
1071 
1072 		intel_encoder = intel_attached_encoder(to_intel_connector(connector));
1073 		if (!intel_encoder || intel_encoder->type == INTEL_OUTPUT_DP_MST)
1074 			continue;
1075 
1076 		dig_port = enc_to_dig_port(intel_encoder);
1077 		if (!intel_dp_mst_source_support(&dig_port->dp))
1078 			continue;
1079 
1080 		seq_printf(m, "MST Source Port [ENCODER:%d:%s]\n",
1081 			   dig_port->base.base.base.id,
1082 			   dig_port->base.base.name);
1083 		drm_dp_mst_dump_topology(m, &dig_port->dp.mst_mgr);
1084 	}
1085 	drm_connector_list_iter_end(&conn_iter);
1086 
1087 	return 0;
1088 }
1089 
1090 static ssize_t i915_displayport_test_active_write(struct file *file,
1091 						  const char __user *ubuf,
1092 						  size_t len, loff_t *offp)
1093 {
1094 	char *input_buffer;
1095 	int status = 0;
1096 	struct drm_device *dev;
1097 	struct drm_connector *connector;
1098 	struct drm_connector_list_iter conn_iter;
1099 	struct intel_dp *intel_dp;
1100 	int val = 0;
1101 
1102 	dev = ((struct seq_file *)file->private_data)->private;
1103 
1104 	if (len == 0)
1105 		return 0;
1106 
1107 	input_buffer = memdup_user_nul(ubuf, len);
1108 	if (IS_ERR(input_buffer))
1109 		return PTR_ERR(input_buffer);
1110 
1111 	drm_dbg(&to_i915(dev)->drm,
1112 		"Copied %d bytes from user\n", (unsigned int)len);
1113 
1114 	drm_connector_list_iter_begin(dev, &conn_iter);
1115 	drm_for_each_connector_iter(connector, &conn_iter) {
1116 		struct intel_encoder *encoder;
1117 
1118 		if (connector->connector_type !=
1119 		    DRM_MODE_CONNECTOR_DisplayPort)
1120 			continue;
1121 
1122 		encoder = to_intel_encoder(connector->encoder);
1123 		if (encoder && encoder->type == INTEL_OUTPUT_DP_MST)
1124 			continue;
1125 
1126 		if (encoder && connector->status == connector_status_connected) {
1127 			intel_dp = enc_to_intel_dp(encoder);
1128 			status = kstrtoint(input_buffer, 10, &val);
1129 			if (status < 0)
1130 				break;
1131 			drm_dbg(&to_i915(dev)->drm,
1132 				"Got %d for test active\n", val);
1133 			/* To prevent erroneous activation of the compliance
1134 			 * testing code, only accept an actual value of 1 here
1135 			 */
1136 			if (val == 1)
1137 				intel_dp->compliance.test_active = true;
1138 			else
1139 				intel_dp->compliance.test_active = false;
1140 		}
1141 	}
1142 	drm_connector_list_iter_end(&conn_iter);
1143 	kfree(input_buffer);
1144 	if (status < 0)
1145 		return status;
1146 
1147 	*offp += len;
1148 	return len;
1149 }
1150 
1151 static int i915_displayport_test_active_show(struct seq_file *m, void *data)
1152 {
1153 	struct drm_i915_private *dev_priv = m->private;
1154 	struct drm_connector *connector;
1155 	struct drm_connector_list_iter conn_iter;
1156 	struct intel_dp *intel_dp;
1157 
1158 	drm_connector_list_iter_begin(&dev_priv->drm, &conn_iter);
1159 	drm_for_each_connector_iter(connector, &conn_iter) {
1160 		struct intel_encoder *encoder;
1161 
1162 		if (connector->connector_type !=
1163 		    DRM_MODE_CONNECTOR_DisplayPort)
1164 			continue;
1165 
1166 		encoder = to_intel_encoder(connector->encoder);
1167 		if (encoder && encoder->type == INTEL_OUTPUT_DP_MST)
1168 			continue;
1169 
1170 		if (encoder && connector->status == connector_status_connected) {
1171 			intel_dp = enc_to_intel_dp(encoder);
1172 			if (intel_dp->compliance.test_active)
1173 				seq_puts(m, "1");
1174 			else
1175 				seq_puts(m, "0");
1176 		} else
1177 			seq_puts(m, "0");
1178 	}
1179 	drm_connector_list_iter_end(&conn_iter);
1180 
1181 	return 0;
1182 }
1183 
1184 static int i915_displayport_test_active_open(struct inode *inode,
1185 					     struct file *file)
1186 {
1187 	return single_open(file, i915_displayport_test_active_show,
1188 			   inode->i_private);
1189 }
1190 
1191 static const struct file_operations i915_displayport_test_active_fops = {
1192 	.owner = THIS_MODULE,
1193 	.open = i915_displayport_test_active_open,
1194 	.read = seq_read,
1195 	.llseek = seq_lseek,
1196 	.release = single_release,
1197 	.write = i915_displayport_test_active_write
1198 };
1199 
1200 static int i915_displayport_test_data_show(struct seq_file *m, void *data)
1201 {
1202 	struct drm_i915_private *dev_priv = m->private;
1203 	struct drm_connector *connector;
1204 	struct drm_connector_list_iter conn_iter;
1205 	struct intel_dp *intel_dp;
1206 
1207 	drm_connector_list_iter_begin(&dev_priv->drm, &conn_iter);
1208 	drm_for_each_connector_iter(connector, &conn_iter) {
1209 		struct intel_encoder *encoder;
1210 
1211 		if (connector->connector_type !=
1212 		    DRM_MODE_CONNECTOR_DisplayPort)
1213 			continue;
1214 
1215 		encoder = to_intel_encoder(connector->encoder);
1216 		if (encoder && encoder->type == INTEL_OUTPUT_DP_MST)
1217 			continue;
1218 
1219 		if (encoder && connector->status == connector_status_connected) {
1220 			intel_dp = enc_to_intel_dp(encoder);
1221 			if (intel_dp->compliance.test_type ==
1222 			    DP_TEST_LINK_EDID_READ)
1223 				seq_printf(m, "%lx",
1224 					   intel_dp->compliance.test_data.edid);
1225 			else if (intel_dp->compliance.test_type ==
1226 				 DP_TEST_LINK_VIDEO_PATTERN) {
1227 				seq_printf(m, "hdisplay: %d\n",
1228 					   intel_dp->compliance.test_data.hdisplay);
1229 				seq_printf(m, "vdisplay: %d\n",
1230 					   intel_dp->compliance.test_data.vdisplay);
1231 				seq_printf(m, "bpc: %u\n",
1232 					   intel_dp->compliance.test_data.bpc);
1233 			} else if (intel_dp->compliance.test_type ==
1234 				   DP_TEST_LINK_PHY_TEST_PATTERN) {
1235 				seq_printf(m, "pattern: %d\n",
1236 					   intel_dp->compliance.test_data.phytest.phy_pattern);
1237 				seq_printf(m, "Number of lanes: %d\n",
1238 					   intel_dp->compliance.test_data.phytest.num_lanes);
1239 				seq_printf(m, "Link Rate: %d\n",
1240 					   intel_dp->compliance.test_data.phytest.link_rate);
1241 				seq_printf(m, "level: %02x\n",
1242 					   intel_dp->train_set[0]);
1243 			}
1244 		} else
1245 			seq_puts(m, "0");
1246 	}
1247 	drm_connector_list_iter_end(&conn_iter);
1248 
1249 	return 0;
1250 }
1251 DEFINE_SHOW_ATTRIBUTE(i915_displayport_test_data);
1252 
1253 static int i915_displayport_test_type_show(struct seq_file *m, void *data)
1254 {
1255 	struct drm_i915_private *dev_priv = m->private;
1256 	struct drm_connector *connector;
1257 	struct drm_connector_list_iter conn_iter;
1258 	struct intel_dp *intel_dp;
1259 
1260 	drm_connector_list_iter_begin(&dev_priv->drm, &conn_iter);
1261 	drm_for_each_connector_iter(connector, &conn_iter) {
1262 		struct intel_encoder *encoder;
1263 
1264 		if (connector->connector_type !=
1265 		    DRM_MODE_CONNECTOR_DisplayPort)
1266 			continue;
1267 
1268 		encoder = to_intel_encoder(connector->encoder);
1269 		if (encoder && encoder->type == INTEL_OUTPUT_DP_MST)
1270 			continue;
1271 
1272 		if (encoder && connector->status == connector_status_connected) {
1273 			intel_dp = enc_to_intel_dp(encoder);
1274 			seq_printf(m, "%02lx\n", intel_dp->compliance.test_type);
1275 		} else
1276 			seq_puts(m, "0");
1277 	}
1278 	drm_connector_list_iter_end(&conn_iter);
1279 
1280 	return 0;
1281 }
1282 DEFINE_SHOW_ATTRIBUTE(i915_displayport_test_type);
1283 
1284 static ssize_t
1285 i915_fifo_underrun_reset_write(struct file *filp,
1286 			       const char __user *ubuf,
1287 			       size_t cnt, loff_t *ppos)
1288 {
1289 	struct drm_i915_private *dev_priv = filp->private_data;
1290 	struct intel_crtc *crtc;
1291 	int ret;
1292 	bool reset;
1293 
1294 	ret = kstrtobool_from_user(ubuf, cnt, &reset);
1295 	if (ret)
1296 		return ret;
1297 
1298 	if (!reset)
1299 		return cnt;
1300 
1301 	for_each_intel_crtc(&dev_priv->drm, crtc) {
1302 		struct drm_crtc_commit *commit;
1303 		struct intel_crtc_state *crtc_state;
1304 
1305 		ret = drm_modeset_lock_single_interruptible(&crtc->base.mutex);
1306 		if (ret)
1307 			return ret;
1308 
1309 		crtc_state = to_intel_crtc_state(crtc->base.state);
1310 		commit = crtc_state->uapi.commit;
1311 		if (commit) {
1312 			ret = wait_for_completion_interruptible(&commit->hw_done);
1313 			if (!ret)
1314 				ret = wait_for_completion_interruptible(&commit->flip_done);
1315 		}
1316 
1317 		if (!ret && crtc_state->hw.active) {
1318 			drm_dbg_kms(&dev_priv->drm,
1319 				    "Re-arming FIFO underruns on pipe %c\n",
1320 				    pipe_name(crtc->pipe));
1321 
1322 			intel_crtc_arm_fifo_underrun(crtc, crtc_state);
1323 		}
1324 
1325 		drm_modeset_unlock(&crtc->base.mutex);
1326 
1327 		if (ret)
1328 			return ret;
1329 	}
1330 
1331 	intel_fbc_reset_underrun(dev_priv);
1332 
1333 	return cnt;
1334 }
1335 
1336 static const struct file_operations i915_fifo_underrun_reset_ops = {
1337 	.owner = THIS_MODULE,
1338 	.open = simple_open,
1339 	.write = i915_fifo_underrun_reset_write,
1340 	.llseek = default_llseek,
1341 };
1342 
1343 static const struct drm_info_list intel_display_debugfs_list[] = {
1344 	{"i915_frontbuffer_tracking", i915_frontbuffer_tracking, 0},
1345 	{"i915_ips_status", i915_ips_status, 0},
1346 	{"i915_sr_status", i915_sr_status, 0},
1347 	{"i915_opregion", i915_opregion, 0},
1348 	{"i915_vbt", i915_vbt, 0},
1349 	{"i915_gem_framebuffer", i915_gem_framebuffer_info, 0},
1350 	{"i915_edp_psr_status", i915_edp_psr_status, 0},
1351 	{"i915_power_domain_info", i915_power_domain_info, 0},
1352 	{"i915_display_info", i915_display_info, 0},
1353 	{"i915_shared_dplls_info", i915_shared_dplls_info, 0},
1354 	{"i915_dp_mst_info", i915_dp_mst_info, 0},
1355 	{"i915_ddb_info", i915_ddb_info, 0},
1356 	{"i915_lpsp_status", i915_lpsp_status, 0},
1357 };
1358 
1359 static const struct {
1360 	const char *name;
1361 	const struct file_operations *fops;
1362 } intel_display_debugfs_files[] = {
1363 	{"i915_fifo_underrun_reset", &i915_fifo_underrun_reset_ops},
1364 	{"i915_dp_test_data", &i915_displayport_test_data_fops},
1365 	{"i915_dp_test_type", &i915_displayport_test_type_fops},
1366 	{"i915_dp_test_active", &i915_displayport_test_active_fops},
1367 	{"i915_edp_psr_debug", &i915_edp_psr_debug_fops},
1368 };
1369 
1370 void intel_display_debugfs_register(struct drm_i915_private *i915)
1371 {
1372 	struct drm_minor *minor = i915->drm.primary;
1373 	int i;
1374 
1375 	for (i = 0; i < ARRAY_SIZE(intel_display_debugfs_files); i++) {
1376 		debugfs_create_file(intel_display_debugfs_files[i].name,
1377 				    S_IRUGO | S_IWUSR,
1378 				    minor->debugfs_root,
1379 				    to_i915(minor->dev),
1380 				    intel_display_debugfs_files[i].fops);
1381 	}
1382 
1383 	drm_debugfs_create_files(intel_display_debugfs_list,
1384 				 ARRAY_SIZE(intel_display_debugfs_list),
1385 				 minor->debugfs_root, minor);
1386 
1387 	intel_dmc_debugfs_register(i915);
1388 	intel_fbc_debugfs_register(i915);
1389 	intel_hpd_debugfs_register(i915);
1390 	intel_wm_debugfs_register(i915);
1391 }
1392 
1393 static int i915_panel_show(struct seq_file *m, void *data)
1394 {
1395 	struct drm_connector *connector = m->private;
1396 	struct intel_dp *intel_dp =
1397 		intel_attached_dp(to_intel_connector(connector));
1398 
1399 	if (connector->status != connector_status_connected)
1400 		return -ENODEV;
1401 
1402 	seq_printf(m, "Panel power up delay: %d\n",
1403 		   intel_dp->pps.panel_power_up_delay);
1404 	seq_printf(m, "Panel power down delay: %d\n",
1405 		   intel_dp->pps.panel_power_down_delay);
1406 	seq_printf(m, "Backlight on delay: %d\n",
1407 		   intel_dp->pps.backlight_on_delay);
1408 	seq_printf(m, "Backlight off delay: %d\n",
1409 		   intel_dp->pps.backlight_off_delay);
1410 
1411 	return 0;
1412 }
1413 DEFINE_SHOW_ATTRIBUTE(i915_panel);
1414 
1415 static int i915_hdcp_sink_capability_show(struct seq_file *m, void *data)
1416 {
1417 	struct drm_connector *connector = m->private;
1418 	struct drm_i915_private *i915 = to_i915(connector->dev);
1419 	struct intel_connector *intel_connector = to_intel_connector(connector);
1420 	int ret;
1421 
1422 	ret = drm_modeset_lock_single_interruptible(&i915->drm.mode_config.connection_mutex);
1423 	if (ret)
1424 		return ret;
1425 
1426 	if (!connector->encoder || connector->status != connector_status_connected) {
1427 		ret = -ENODEV;
1428 		goto out;
1429 	}
1430 
1431 	seq_printf(m, "%s:%d HDCP version: ", connector->name,
1432 		   connector->base.id);
1433 	intel_hdcp_info(m, intel_connector);
1434 
1435 out:
1436 	drm_modeset_unlock(&i915->drm.mode_config.connection_mutex);
1437 
1438 	return ret;
1439 }
1440 DEFINE_SHOW_ATTRIBUTE(i915_hdcp_sink_capability);
1441 
1442 static int i915_psr_status_show(struct seq_file *m, void *data)
1443 {
1444 	struct drm_connector *connector = m->private;
1445 	struct intel_dp *intel_dp =
1446 		intel_attached_dp(to_intel_connector(connector));
1447 
1448 	return intel_psr_status(m, intel_dp);
1449 }
1450 DEFINE_SHOW_ATTRIBUTE(i915_psr_status);
1451 
1452 static int i915_lpsp_capability_show(struct seq_file *m, void *data)
1453 {
1454 	struct drm_connector *connector = m->private;
1455 	struct drm_i915_private *i915 = to_i915(connector->dev);
1456 	struct intel_encoder *encoder;
1457 	bool lpsp_capable = false;
1458 
1459 	encoder = intel_attached_encoder(to_intel_connector(connector));
1460 	if (!encoder)
1461 		return -ENODEV;
1462 
1463 	if (connector->status != connector_status_connected)
1464 		return -ENODEV;
1465 
1466 	if (DISPLAY_VER(i915) >= 13)
1467 		lpsp_capable = encoder->port <= PORT_B;
1468 	else if (DISPLAY_VER(i915) >= 12)
1469 		/*
1470 		 * Actually TGL can drive LPSP on port till DDI_C
1471 		 * but there is no physical connected DDI_C on TGL sku's,
1472 		 * even driver is not initilizing DDI_C port for gen12.
1473 		 */
1474 		lpsp_capable = encoder->port <= PORT_B;
1475 	else if (DISPLAY_VER(i915) == 11)
1476 		lpsp_capable = (connector->connector_type == DRM_MODE_CONNECTOR_DSI ||
1477 				connector->connector_type == DRM_MODE_CONNECTOR_eDP);
1478 	else if (IS_DISPLAY_VER(i915, 9, 10))
1479 		lpsp_capable = (encoder->port == PORT_A &&
1480 				(connector->connector_type == DRM_MODE_CONNECTOR_DSI ||
1481 				 connector->connector_type == DRM_MODE_CONNECTOR_eDP ||
1482 				 connector->connector_type == DRM_MODE_CONNECTOR_DisplayPort));
1483 	else if (IS_HASWELL(i915) || IS_BROADWELL(i915))
1484 		lpsp_capable = connector->connector_type == DRM_MODE_CONNECTOR_eDP;
1485 
1486 	seq_printf(m, "LPSP: %s\n", lpsp_capable ? "capable" : "incapable");
1487 
1488 	return 0;
1489 }
1490 DEFINE_SHOW_ATTRIBUTE(i915_lpsp_capability);
1491 
1492 static int i915_dsc_fec_support_show(struct seq_file *m, void *data)
1493 {
1494 	struct drm_connector *connector = m->private;
1495 	struct drm_device *dev = connector->dev;
1496 	struct drm_crtc *crtc;
1497 	struct intel_dp *intel_dp;
1498 	struct drm_modeset_acquire_ctx ctx;
1499 	struct intel_crtc_state *crtc_state = NULL;
1500 	int ret = 0;
1501 	bool try_again = false;
1502 
1503 	drm_modeset_acquire_init(&ctx, DRM_MODESET_ACQUIRE_INTERRUPTIBLE);
1504 
1505 	do {
1506 		try_again = false;
1507 		ret = drm_modeset_lock(&dev->mode_config.connection_mutex,
1508 				       &ctx);
1509 		if (ret) {
1510 			if (ret == -EDEADLK && !drm_modeset_backoff(&ctx)) {
1511 				try_again = true;
1512 				continue;
1513 			}
1514 			break;
1515 		}
1516 		crtc = connector->state->crtc;
1517 		if (connector->status != connector_status_connected || !crtc) {
1518 			ret = -ENODEV;
1519 			break;
1520 		}
1521 		ret = drm_modeset_lock(&crtc->mutex, &ctx);
1522 		if (ret == -EDEADLK) {
1523 			ret = drm_modeset_backoff(&ctx);
1524 			if (!ret) {
1525 				try_again = true;
1526 				continue;
1527 			}
1528 			break;
1529 		} else if (ret) {
1530 			break;
1531 		}
1532 		intel_dp = intel_attached_dp(to_intel_connector(connector));
1533 		crtc_state = to_intel_crtc_state(crtc->state);
1534 		seq_printf(m, "DSC_Enabled: %s\n",
1535 			   str_yes_no(crtc_state->dsc.compression_enable));
1536 		seq_printf(m, "DSC_Sink_Support: %s\n",
1537 			   str_yes_no(drm_dp_sink_supports_dsc(intel_dp->dsc_dpcd)));
1538 		seq_printf(m, "Force_DSC_Enable: %s\n",
1539 			   str_yes_no(intel_dp->force_dsc_en));
1540 		if (!intel_dp_is_edp(intel_dp))
1541 			seq_printf(m, "FEC_Sink_Support: %s\n",
1542 				   str_yes_no(drm_dp_sink_supports_fec(intel_dp->fec_capable)));
1543 	} while (try_again);
1544 
1545 	drm_modeset_drop_locks(&ctx);
1546 	drm_modeset_acquire_fini(&ctx);
1547 
1548 	return ret;
1549 }
1550 
1551 static ssize_t i915_dsc_fec_support_write(struct file *file,
1552 					  const char __user *ubuf,
1553 					  size_t len, loff_t *offp)
1554 {
1555 	bool dsc_enable = false;
1556 	int ret;
1557 	struct drm_connector *connector =
1558 		((struct seq_file *)file->private_data)->private;
1559 	struct intel_encoder *encoder = intel_attached_encoder(to_intel_connector(connector));
1560 	struct drm_i915_private *i915 = to_i915(encoder->base.dev);
1561 	struct intel_dp *intel_dp = enc_to_intel_dp(encoder);
1562 
1563 	if (len == 0)
1564 		return 0;
1565 
1566 	drm_dbg(&i915->drm,
1567 		"Copied %zu bytes from user to force DSC\n", len);
1568 
1569 	ret = kstrtobool_from_user(ubuf, len, &dsc_enable);
1570 	if (ret < 0)
1571 		return ret;
1572 
1573 	drm_dbg(&i915->drm, "Got %s for DSC Enable\n",
1574 		(dsc_enable) ? "true" : "false");
1575 	intel_dp->force_dsc_en = dsc_enable;
1576 
1577 	*offp += len;
1578 	return len;
1579 }
1580 
1581 static int i915_dsc_fec_support_open(struct inode *inode,
1582 				     struct file *file)
1583 {
1584 	return single_open(file, i915_dsc_fec_support_show,
1585 			   inode->i_private);
1586 }
1587 
1588 static const struct file_operations i915_dsc_fec_support_fops = {
1589 	.owner = THIS_MODULE,
1590 	.open = i915_dsc_fec_support_open,
1591 	.read = seq_read,
1592 	.llseek = seq_lseek,
1593 	.release = single_release,
1594 	.write = i915_dsc_fec_support_write
1595 };
1596 
1597 static int i915_dsc_bpc_show(struct seq_file *m, void *data)
1598 {
1599 	struct drm_connector *connector = m->private;
1600 	struct drm_device *dev = connector->dev;
1601 	struct drm_crtc *crtc;
1602 	struct intel_crtc_state *crtc_state;
1603 	struct intel_encoder *encoder = intel_attached_encoder(to_intel_connector(connector));
1604 	int ret;
1605 
1606 	if (!encoder)
1607 		return -ENODEV;
1608 
1609 	ret = drm_modeset_lock_single_interruptible(&dev->mode_config.connection_mutex);
1610 	if (ret)
1611 		return ret;
1612 
1613 	crtc = connector->state->crtc;
1614 	if (connector->status != connector_status_connected || !crtc) {
1615 		ret = -ENODEV;
1616 		goto out;
1617 	}
1618 
1619 	crtc_state = to_intel_crtc_state(crtc->state);
1620 	seq_printf(m, "Input_BPC: %d\n", crtc_state->dsc.config.bits_per_component);
1621 
1622 out:	drm_modeset_unlock(&dev->mode_config.connection_mutex);
1623 
1624 	return ret;
1625 }
1626 
1627 static ssize_t i915_dsc_bpc_write(struct file *file,
1628 				  const char __user *ubuf,
1629 				  size_t len, loff_t *offp)
1630 {
1631 	struct drm_connector *connector =
1632 		((struct seq_file *)file->private_data)->private;
1633 	struct intel_encoder *encoder = intel_attached_encoder(to_intel_connector(connector));
1634 	struct intel_dp *intel_dp = enc_to_intel_dp(encoder);
1635 	int dsc_bpc = 0;
1636 	int ret;
1637 
1638 	ret = kstrtoint_from_user(ubuf, len, 0, &dsc_bpc);
1639 	if (ret < 0)
1640 		return ret;
1641 
1642 	intel_dp->force_dsc_bpc = dsc_bpc;
1643 	*offp += len;
1644 
1645 	return len;
1646 }
1647 
1648 static int i915_dsc_bpc_open(struct inode *inode,
1649 			     struct file *file)
1650 {
1651 	return single_open(file, i915_dsc_bpc_show, inode->i_private);
1652 }
1653 
1654 static const struct file_operations i915_dsc_bpc_fops = {
1655 	.owner = THIS_MODULE,
1656 	.open = i915_dsc_bpc_open,
1657 	.read = seq_read,
1658 	.llseek = seq_lseek,
1659 	.release = single_release,
1660 	.write = i915_dsc_bpc_write
1661 };
1662 
1663 /*
1664  * Returns the Current CRTC's bpc.
1665  * Example usage: cat /sys/kernel/debug/dri/0/crtc-0/i915_current_bpc
1666  */
1667 static int i915_current_bpc_show(struct seq_file *m, void *data)
1668 {
1669 	struct intel_crtc *crtc = to_intel_crtc(m->private);
1670 	struct intel_crtc_state *crtc_state;
1671 	int ret;
1672 
1673 	ret = drm_modeset_lock_single_interruptible(&crtc->base.mutex);
1674 	if (ret)
1675 		return ret;
1676 
1677 	crtc_state = to_intel_crtc_state(crtc->base.state);
1678 	seq_printf(m, "Current: %u\n", crtc_state->pipe_bpp / 3);
1679 
1680 	drm_modeset_unlock(&crtc->base.mutex);
1681 
1682 	return ret;
1683 }
1684 DEFINE_SHOW_ATTRIBUTE(i915_current_bpc);
1685 
1686 /**
1687  * intel_connector_debugfs_add - add i915 specific connector debugfs files
1688  * @connector: pointer to a registered drm_connector
1689  *
1690  * Cleanup will be done by drm_connector_unregister() through a call to
1691  * drm_debugfs_connector_remove().
1692  */
1693 void intel_connector_debugfs_add(struct intel_connector *intel_connector)
1694 {
1695 	struct drm_connector *connector = &intel_connector->base;
1696 	struct dentry *root = connector->debugfs_entry;
1697 	struct drm_i915_private *dev_priv = to_i915(connector->dev);
1698 
1699 	/* The connector must have been registered beforehands. */
1700 	if (!root)
1701 		return;
1702 
1703 	intel_drrs_connector_debugfs_add(intel_connector);
1704 
1705 	if (connector->connector_type == DRM_MODE_CONNECTOR_eDP) {
1706 		debugfs_create_file("i915_panel_timings", S_IRUGO, root,
1707 				    connector, &i915_panel_fops);
1708 		debugfs_create_file("i915_psr_sink_status", S_IRUGO, root,
1709 				    connector, &i915_psr_sink_status_fops);
1710 	}
1711 
1712 	if (HAS_PSR(dev_priv) &&
1713 	    connector->connector_type == DRM_MODE_CONNECTOR_eDP) {
1714 		debugfs_create_file("i915_psr_status", 0444, root,
1715 				    connector, &i915_psr_status_fops);
1716 	}
1717 
1718 	if (connector->connector_type == DRM_MODE_CONNECTOR_DisplayPort ||
1719 	    connector->connector_type == DRM_MODE_CONNECTOR_HDMIA ||
1720 	    connector->connector_type == DRM_MODE_CONNECTOR_HDMIB) {
1721 		debugfs_create_file("i915_hdcp_sink_capability", S_IRUGO, root,
1722 				    connector, &i915_hdcp_sink_capability_fops);
1723 	}
1724 
1725 	if (DISPLAY_VER(dev_priv) >= 11 &&
1726 	    ((connector->connector_type == DRM_MODE_CONNECTOR_DisplayPort &&
1727 	    !to_intel_connector(connector)->mst_port) ||
1728 	    connector->connector_type == DRM_MODE_CONNECTOR_eDP)) {
1729 		debugfs_create_file("i915_dsc_fec_support", 0644, root,
1730 				    connector, &i915_dsc_fec_support_fops);
1731 
1732 		debugfs_create_file("i915_dsc_bpc", 0644, root,
1733 				    connector, &i915_dsc_bpc_fops);
1734 	}
1735 
1736 	if (connector->connector_type == DRM_MODE_CONNECTOR_DSI ||
1737 	    connector->connector_type == DRM_MODE_CONNECTOR_eDP ||
1738 	    connector->connector_type == DRM_MODE_CONNECTOR_DisplayPort ||
1739 	    connector->connector_type == DRM_MODE_CONNECTOR_HDMIA ||
1740 	    connector->connector_type == DRM_MODE_CONNECTOR_HDMIB)
1741 		debugfs_create_file("i915_lpsp_capability", 0444, root,
1742 				    connector, &i915_lpsp_capability_fops);
1743 }
1744 
1745 /**
1746  * intel_crtc_debugfs_add - add i915 specific crtc debugfs files
1747  * @crtc: pointer to a drm_crtc
1748  *
1749  * Failure to add debugfs entries should generally be ignored.
1750  */
1751 void intel_crtc_debugfs_add(struct drm_crtc *crtc)
1752 {
1753 	if (!crtc->debugfs_entry)
1754 		return;
1755 
1756 	crtc_updates_add(crtc);
1757 	intel_drrs_crtc_debugfs_add(to_intel_crtc(crtc));
1758 	intel_fbc_crtc_debugfs_add(to_intel_crtc(crtc));
1759 
1760 	debugfs_create_file("i915_current_bpc", 0444, crtc->debugfs_entry, crtc,
1761 			    &i915_current_bpc_fops);
1762 }
1763