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