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