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