linux/drivers/gpu/drm/i915/i915_debugfs.c
<<
>>
Prefs
   1/*
   2 * Copyright © 2008 Intel Corporation
   3 *
   4 * Permission is hereby granted, free of charge, to any person obtaining a
   5 * copy of this software and associated documentation files (the "Software"),
   6 * to deal in the Software without restriction, including without limitation
   7 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
   8 * and/or sell copies of the Software, and to permit persons to whom the
   9 * Software is furnished to do so, subject to the following conditions:
  10 *
  11 * The above copyright notice and this permission notice (including the next
  12 * paragraph) shall be included in all copies or substantial portions of the
  13 * Software.
  14 *
  15 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  16 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  17 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
  18 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  19 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
  20 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  21 * IN THE SOFTWARE.
  22 *
  23 * Authors:
  24 *    Eric Anholt <eric@anholt.net>
  25 *    Keith Packard <keithp@keithp.com>
  26 *
  27 */
  28
  29#include <linux/sort.h>
  30#include <linux/sched/mm.h>
  31#include <drm/drm_debugfs.h>
  32#include <drm/drm_fourcc.h>
  33#include "intel_drv.h"
  34#include "intel_guc_submission.h"
  35
  36#include "i915_reset.h"
  37
  38static inline struct drm_i915_private *node_to_i915(struct drm_info_node *node)
  39{
  40        return to_i915(node->minor->dev);
  41}
  42
  43static int i915_capabilities(struct seq_file *m, void *data)
  44{
  45        struct drm_i915_private *dev_priv = node_to_i915(m->private);
  46        const struct intel_device_info *info = INTEL_INFO(dev_priv);
  47        struct drm_printer p = drm_seq_file_printer(m);
  48
  49        seq_printf(m, "gen: %d\n", INTEL_GEN(dev_priv));
  50        seq_printf(m, "platform: %s\n", intel_platform_name(info->platform));
  51        seq_printf(m, "pch: %d\n", INTEL_PCH_TYPE(dev_priv));
  52
  53        intel_device_info_dump_flags(info, &p);
  54        intel_device_info_dump_runtime(RUNTIME_INFO(dev_priv), &p);
  55        intel_driver_caps_print(&dev_priv->caps, &p);
  56
  57        kernel_param_lock(THIS_MODULE);
  58        i915_params_dump(&i915_modparams, &p);
  59        kernel_param_unlock(THIS_MODULE);
  60
  61        return 0;
  62}
  63
  64static char get_active_flag(struct drm_i915_gem_object *obj)
  65{
  66        return i915_gem_object_is_active(obj) ? '*' : ' ';
  67}
  68
  69static char get_pin_flag(struct drm_i915_gem_object *obj)
  70{
  71        return obj->pin_global ? 'p' : ' ';
  72}
  73
  74static char get_tiling_flag(struct drm_i915_gem_object *obj)
  75{
  76        switch (i915_gem_object_get_tiling(obj)) {
  77        default:
  78        case I915_TILING_NONE: return ' ';
  79        case I915_TILING_X: return 'X';
  80        case I915_TILING_Y: return 'Y';
  81        }
  82}
  83
  84static char get_global_flag(struct drm_i915_gem_object *obj)
  85{
  86        return obj->userfault_count ? 'g' : ' ';
  87}
  88
  89static char get_pin_mapped_flag(struct drm_i915_gem_object *obj)
  90{
  91        return obj->mm.mapping ? 'M' : ' ';
  92}
  93
  94static u64 i915_gem_obj_total_ggtt_size(struct drm_i915_gem_object *obj)
  95{
  96        u64 size = 0;
  97        struct i915_vma *vma;
  98
  99        for_each_ggtt_vma(vma, obj) {
 100                if (drm_mm_node_allocated(&vma->node))
 101                        size += vma->node.size;
 102        }
 103
 104        return size;
 105}
 106
 107static const char *
 108stringify_page_sizes(unsigned int page_sizes, char *buf, size_t len)
 109{
 110        size_t x = 0;
 111
 112        switch (page_sizes) {
 113        case 0:
 114                return "";
 115        case I915_GTT_PAGE_SIZE_4K:
 116                return "4K";
 117        case I915_GTT_PAGE_SIZE_64K:
 118                return "64K";
 119        case I915_GTT_PAGE_SIZE_2M:
 120                return "2M";
 121        default:
 122                if (!buf)
 123                        return "M";
 124
 125                if (page_sizes & I915_GTT_PAGE_SIZE_2M)
 126                        x += snprintf(buf + x, len - x, "2M, ");
 127                if (page_sizes & I915_GTT_PAGE_SIZE_64K)
 128                        x += snprintf(buf + x, len - x, "64K, ");
 129                if (page_sizes & I915_GTT_PAGE_SIZE_4K)
 130                        x += snprintf(buf + x, len - x, "4K, ");
 131                buf[x-2] = '\0';
 132
 133                return buf;
 134        }
 135}
 136
 137static void
 138describe_obj(struct seq_file *m, struct drm_i915_gem_object *obj)
 139{
 140        struct drm_i915_private *dev_priv = to_i915(obj->base.dev);
 141        struct intel_engine_cs *engine;
 142        struct i915_vma *vma;
 143        unsigned int frontbuffer_bits;
 144        int pin_count = 0;
 145
 146        lockdep_assert_held(&obj->base.dev->struct_mutex);
 147
 148        seq_printf(m, "%pK: %c%c%c%c%c %8zdKiB %02x %02x %s%s%s",
 149                   &obj->base,
 150                   get_active_flag(obj),
 151                   get_pin_flag(obj),
 152                   get_tiling_flag(obj),
 153                   get_global_flag(obj),
 154                   get_pin_mapped_flag(obj),
 155                   obj->base.size / 1024,
 156                   obj->read_domains,
 157                   obj->write_domain,
 158                   i915_cache_level_str(dev_priv, obj->cache_level),
 159                   obj->mm.dirty ? " dirty" : "",
 160                   obj->mm.madv == I915_MADV_DONTNEED ? " purgeable" : "");
 161        if (obj->base.name)
 162                seq_printf(m, " (name: %d)", obj->base.name);
 163        list_for_each_entry(vma, &obj->vma.list, obj_link) {
 164                if (i915_vma_is_pinned(vma))
 165                        pin_count++;
 166        }
 167        seq_printf(m, " (pinned x %d)", pin_count);
 168        if (obj->pin_global)
 169                seq_printf(m, " (global)");
 170        list_for_each_entry(vma, &obj->vma.list, obj_link) {
 171                if (!drm_mm_node_allocated(&vma->node))
 172                        continue;
 173
 174                seq_printf(m, " (%sgtt offset: %08llx, size: %08llx, pages: %s",
 175                           i915_vma_is_ggtt(vma) ? "g" : "pp",
 176                           vma->node.start, vma->node.size,
 177                           stringify_page_sizes(vma->page_sizes.gtt, NULL, 0));
 178                if (i915_vma_is_ggtt(vma)) {
 179                        switch (vma->ggtt_view.type) {
 180                        case I915_GGTT_VIEW_NORMAL:
 181                                seq_puts(m, ", normal");
 182                                break;
 183
 184                        case I915_GGTT_VIEW_PARTIAL:
 185                                seq_printf(m, ", partial [%08llx+%x]",
 186                                           vma->ggtt_view.partial.offset << PAGE_SHIFT,
 187                                           vma->ggtt_view.partial.size << PAGE_SHIFT);
 188                                break;
 189
 190                        case I915_GGTT_VIEW_ROTATED:
 191                                seq_printf(m, ", rotated [(%ux%u, stride=%u, offset=%u), (%ux%u, stride=%u, offset=%u)]",
 192                                           vma->ggtt_view.rotated.plane[0].width,
 193                                           vma->ggtt_view.rotated.plane[0].height,
 194                                           vma->ggtt_view.rotated.plane[0].stride,
 195                                           vma->ggtt_view.rotated.plane[0].offset,
 196                                           vma->ggtt_view.rotated.plane[1].width,
 197                                           vma->ggtt_view.rotated.plane[1].height,
 198                                           vma->ggtt_view.rotated.plane[1].stride,
 199                                           vma->ggtt_view.rotated.plane[1].offset);
 200                                break;
 201
 202                        default:
 203                                MISSING_CASE(vma->ggtt_view.type);
 204                                break;
 205                        }
 206                }
 207                if (vma->fence)
 208                        seq_printf(m, " , fence: %d%s",
 209                                   vma->fence->id,
 210                                   i915_active_request_isset(&vma->last_fence) ? "*" : "");
 211                seq_puts(m, ")");
 212        }
 213        if (obj->stolen)
 214                seq_printf(m, " (stolen: %08llx)", obj->stolen->start);
 215
 216        engine = i915_gem_object_last_write_engine(obj);
 217        if (engine)
 218                seq_printf(m, " (%s)", engine->name);
 219
 220        frontbuffer_bits = atomic_read(&obj->frontbuffer_bits);
 221        if (frontbuffer_bits)
 222                seq_printf(m, " (frontbuffer: 0x%03x)", frontbuffer_bits);
 223}
 224
 225static int obj_rank_by_stolen(const void *A, const void *B)
 226{
 227        const struct drm_i915_gem_object *a =
 228                *(const struct drm_i915_gem_object **)A;
 229        const struct drm_i915_gem_object *b =
 230                *(const struct drm_i915_gem_object **)B;
 231
 232        if (a->stolen->start < b->stolen->start)
 233                return -1;
 234        if (a->stolen->start > b->stolen->start)
 235                return 1;
 236        return 0;
 237}
 238
 239static int i915_gem_stolen_list_info(struct seq_file *m, void *data)
 240{
 241        struct drm_i915_private *dev_priv = node_to_i915(m->private);
 242        struct drm_device *dev = &dev_priv->drm;
 243        struct drm_i915_gem_object **objects;
 244        struct drm_i915_gem_object *obj;
 245        u64 total_obj_size, total_gtt_size;
 246        unsigned long total, count, n;
 247        int ret;
 248
 249        total = READ_ONCE(dev_priv->mm.object_count);
 250        objects = kvmalloc_array(total, sizeof(*objects), GFP_KERNEL);
 251        if (!objects)
 252                return -ENOMEM;
 253
 254        ret = mutex_lock_interruptible(&dev->struct_mutex);
 255        if (ret)
 256                goto out;
 257
 258        total_obj_size = total_gtt_size = count = 0;
 259
 260        spin_lock(&dev_priv->mm.obj_lock);
 261        list_for_each_entry(obj, &dev_priv->mm.bound_list, mm.link) {
 262                if (count == total)
 263                        break;
 264
 265                if (obj->stolen == NULL)
 266                        continue;
 267
 268                objects[count++] = obj;
 269                total_obj_size += obj->base.size;
 270                total_gtt_size += i915_gem_obj_total_ggtt_size(obj);
 271
 272        }
 273        list_for_each_entry(obj, &dev_priv->mm.unbound_list, mm.link) {
 274                if (count == total)
 275                        break;
 276
 277                if (obj->stolen == NULL)
 278                        continue;
 279
 280                objects[count++] = obj;
 281                total_obj_size += obj->base.size;
 282        }
 283        spin_unlock(&dev_priv->mm.obj_lock);
 284
 285        sort(objects, count, sizeof(*objects), obj_rank_by_stolen, NULL);
 286
 287        seq_puts(m, "Stolen:\n");
 288        for (n = 0; n < count; n++) {
 289                seq_puts(m, "   ");
 290                describe_obj(m, objects[n]);
 291                seq_putc(m, '\n');
 292        }
 293        seq_printf(m, "Total %lu objects, %llu bytes, %llu GTT size\n",
 294                   count, total_obj_size, total_gtt_size);
 295
 296        mutex_unlock(&dev->struct_mutex);
 297out:
 298        kvfree(objects);
 299        return ret;
 300}
 301
 302struct file_stats {
 303        struct i915_address_space *vm;
 304        unsigned long count;
 305        u64 total, unbound;
 306        u64 global, shared;
 307        u64 active, inactive;
 308        u64 closed;
 309};
 310
 311static int per_file_stats(int id, void *ptr, void *data)
 312{
 313        struct drm_i915_gem_object *obj = ptr;
 314        struct file_stats *stats = data;
 315        struct i915_vma *vma;
 316
 317        lockdep_assert_held(&obj->base.dev->struct_mutex);
 318
 319        stats->count++;
 320        stats->total += obj->base.size;
 321        if (!obj->bind_count)
 322                stats->unbound += obj->base.size;
 323        if (obj->base.name || obj->base.dma_buf)
 324                stats->shared += obj->base.size;
 325
 326        list_for_each_entry(vma, &obj->vma.list, obj_link) {
 327                if (!drm_mm_node_allocated(&vma->node))
 328                        continue;
 329
 330                if (i915_vma_is_ggtt(vma)) {
 331                        stats->global += vma->node.size;
 332                } else {
 333                        if (vma->vm != stats->vm)
 334                                continue;
 335                }
 336
 337                if (i915_vma_is_active(vma))
 338                        stats->active += vma->node.size;
 339                else
 340                        stats->inactive += vma->node.size;
 341
 342                if (i915_vma_is_closed(vma))
 343                        stats->closed += vma->node.size;
 344        }
 345
 346        return 0;
 347}
 348
 349#define print_file_stats(m, name, stats) do { \
 350        if (stats.count) \
 351                seq_printf(m, "%s: %lu objects, %llu bytes (%llu active, %llu inactive, %llu global, %llu shared, %llu unbound, %llu closed)\n", \
 352                           name, \
 353                           stats.count, \
 354                           stats.total, \
 355                           stats.active, \
 356                           stats.inactive, \
 357                           stats.global, \
 358                           stats.shared, \
 359                           stats.unbound, \
 360                           stats.closed); \
 361} while (0)
 362
 363static void print_batch_pool_stats(struct seq_file *m,
 364                                   struct drm_i915_private *dev_priv)
 365{
 366        struct drm_i915_gem_object *obj;
 367        struct intel_engine_cs *engine;
 368        struct file_stats stats = {};
 369        enum intel_engine_id id;
 370        int j;
 371
 372        for_each_engine(engine, dev_priv, id) {
 373                for (j = 0; j < ARRAY_SIZE(engine->batch_pool.cache_list); j++) {
 374                        list_for_each_entry(obj,
 375                                            &engine->batch_pool.cache_list[j],
 376                                            batch_pool_link)
 377                                per_file_stats(0, obj, &stats);
 378                }
 379        }
 380
 381        print_file_stats(m, "[k]batch pool", stats);
 382}
 383
 384static void print_context_stats(struct seq_file *m,
 385                                struct drm_i915_private *i915)
 386{
 387        struct file_stats kstats = {};
 388        struct i915_gem_context *ctx;
 389
 390        list_for_each_entry(ctx, &i915->contexts.list, link) {
 391                struct intel_engine_cs *engine;
 392                enum intel_engine_id id;
 393
 394                for_each_engine(engine, i915, id) {
 395                        struct intel_context *ce = to_intel_context(ctx, engine);
 396
 397                        if (ce->state)
 398                                per_file_stats(0, ce->state->obj, &kstats);
 399                        if (ce->ring)
 400                                per_file_stats(0, ce->ring->vma->obj, &kstats);
 401                }
 402
 403                if (!IS_ERR_OR_NULL(ctx->file_priv)) {
 404                        struct file_stats stats = { .vm = &ctx->ppgtt->vm, };
 405                        struct drm_file *file = ctx->file_priv->file;
 406                        struct task_struct *task;
 407                        char name[80];
 408
 409                        spin_lock(&file->table_lock);
 410                        idr_for_each(&file->object_idr, per_file_stats, &stats);
 411                        spin_unlock(&file->table_lock);
 412
 413                        rcu_read_lock();
 414                        task = pid_task(ctx->pid ?: file->pid, PIDTYPE_PID);
 415                        snprintf(name, sizeof(name), "%s/%d",
 416                                 task ? task->comm : "<unknown>",
 417                                 ctx->user_handle);
 418                        rcu_read_unlock();
 419
 420                        print_file_stats(m, name, stats);
 421                }
 422        }
 423
 424        print_file_stats(m, "[k]contexts", kstats);
 425}
 426
 427static int i915_gem_object_info(struct seq_file *m, void *data)
 428{
 429        struct drm_i915_private *dev_priv = node_to_i915(m->private);
 430        struct drm_device *dev = &dev_priv->drm;
 431        struct i915_ggtt *ggtt = &dev_priv->ggtt;
 432        u32 count, mapped_count, purgeable_count, dpy_count, huge_count;
 433        u64 size, mapped_size, purgeable_size, dpy_size, huge_size;
 434        struct drm_i915_gem_object *obj;
 435        unsigned int page_sizes = 0;
 436        char buf[80];
 437        int ret;
 438
 439        seq_printf(m, "%u objects, %llu bytes\n",
 440                   dev_priv->mm.object_count,
 441                   dev_priv->mm.object_memory);
 442
 443        size = count = 0;
 444        mapped_size = mapped_count = 0;
 445        purgeable_size = purgeable_count = 0;
 446        huge_size = huge_count = 0;
 447
 448        spin_lock(&dev_priv->mm.obj_lock);
 449        list_for_each_entry(obj, &dev_priv->mm.unbound_list, mm.link) {
 450                size += obj->base.size;
 451                ++count;
 452
 453                if (obj->mm.madv == I915_MADV_DONTNEED) {
 454                        purgeable_size += obj->base.size;
 455                        ++purgeable_count;
 456                }
 457
 458                if (obj->mm.mapping) {
 459                        mapped_count++;
 460                        mapped_size += obj->base.size;
 461                }
 462
 463                if (obj->mm.page_sizes.sg > I915_GTT_PAGE_SIZE) {
 464                        huge_count++;
 465                        huge_size += obj->base.size;
 466                        page_sizes |= obj->mm.page_sizes.sg;
 467                }
 468        }
 469        seq_printf(m, "%u unbound objects, %llu bytes\n", count, size);
 470
 471        size = count = dpy_size = dpy_count = 0;
 472        list_for_each_entry(obj, &dev_priv->mm.bound_list, mm.link) {
 473                size += obj->base.size;
 474                ++count;
 475
 476                if (obj->pin_global) {
 477                        dpy_size += obj->base.size;
 478                        ++dpy_count;
 479                }
 480
 481                if (obj->mm.madv == I915_MADV_DONTNEED) {
 482                        purgeable_size += obj->base.size;
 483                        ++purgeable_count;
 484                }
 485
 486                if (obj->mm.mapping) {
 487                        mapped_count++;
 488                        mapped_size += obj->base.size;
 489                }
 490
 491                if (obj->mm.page_sizes.sg > I915_GTT_PAGE_SIZE) {
 492                        huge_count++;
 493                        huge_size += obj->base.size;
 494                        page_sizes |= obj->mm.page_sizes.sg;
 495                }
 496        }
 497        spin_unlock(&dev_priv->mm.obj_lock);
 498
 499        seq_printf(m, "%u bound objects, %llu bytes\n",
 500                   count, size);
 501        seq_printf(m, "%u purgeable objects, %llu bytes\n",
 502                   purgeable_count, purgeable_size);
 503        seq_printf(m, "%u mapped objects, %llu bytes\n",
 504                   mapped_count, mapped_size);
 505        seq_printf(m, "%u huge-paged objects (%s) %llu bytes\n",
 506                   huge_count,
 507                   stringify_page_sizes(page_sizes, buf, sizeof(buf)),
 508                   huge_size);
 509        seq_printf(m, "%u display objects (globally pinned), %llu bytes\n",
 510                   dpy_count, dpy_size);
 511
 512        seq_printf(m, "%llu [%pa] gtt total\n",
 513                   ggtt->vm.total, &ggtt->mappable_end);
 514        seq_printf(m, "Supported page sizes: %s\n",
 515                   stringify_page_sizes(INTEL_INFO(dev_priv)->page_sizes,
 516                                        buf, sizeof(buf)));
 517
 518        seq_putc(m, '\n');
 519
 520        ret = mutex_lock_interruptible(&dev->struct_mutex);
 521        if (ret)
 522                return ret;
 523
 524        print_batch_pool_stats(m, dev_priv);
 525        print_context_stats(m, dev_priv);
 526        mutex_unlock(&dev->struct_mutex);
 527
 528        return 0;
 529}
 530
 531static int i915_gem_gtt_info(struct seq_file *m, void *data)
 532{
 533        struct drm_info_node *node = m->private;
 534        struct drm_i915_private *dev_priv = node_to_i915(node);
 535        struct drm_device *dev = &dev_priv->drm;
 536        struct drm_i915_gem_object **objects;
 537        struct drm_i915_gem_object *obj;
 538        u64 total_obj_size, total_gtt_size;
 539        unsigned long nobject, n;
 540        int count, ret;
 541
 542        nobject = READ_ONCE(dev_priv->mm.object_count);
 543        objects = kvmalloc_array(nobject, sizeof(*objects), GFP_KERNEL);
 544        if (!objects)
 545                return -ENOMEM;
 546
 547        ret = mutex_lock_interruptible(&dev->struct_mutex);
 548        if (ret)
 549                return ret;
 550
 551        count = 0;
 552        spin_lock(&dev_priv->mm.obj_lock);
 553        list_for_each_entry(obj, &dev_priv->mm.bound_list, mm.link) {
 554                objects[count++] = obj;
 555                if (count == nobject)
 556                        break;
 557        }
 558        spin_unlock(&dev_priv->mm.obj_lock);
 559
 560        total_obj_size = total_gtt_size = 0;
 561        for (n = 0;  n < count; n++) {
 562                obj = objects[n];
 563
 564                seq_puts(m, "   ");
 565                describe_obj(m, obj);
 566                seq_putc(m, '\n');
 567                total_obj_size += obj->base.size;
 568                total_gtt_size += i915_gem_obj_total_ggtt_size(obj);
 569        }
 570
 571        mutex_unlock(&dev->struct_mutex);
 572
 573        seq_printf(m, "Total %d objects, %llu bytes, %llu GTT size\n",
 574                   count, total_obj_size, total_gtt_size);
 575        kvfree(objects);
 576
 577        return 0;
 578}
 579
 580static int i915_gem_batch_pool_info(struct seq_file *m, void *data)
 581{
 582        struct drm_i915_private *dev_priv = node_to_i915(m->private);
 583        struct drm_device *dev = &dev_priv->drm;
 584        struct drm_i915_gem_object *obj;
 585        struct intel_engine_cs *engine;
 586        enum intel_engine_id id;
 587        int total = 0;
 588        int ret, j;
 589
 590        ret = mutex_lock_interruptible(&dev->struct_mutex);
 591        if (ret)
 592                return ret;
 593
 594        for_each_engine(engine, dev_priv, id) {
 595                for (j = 0; j < ARRAY_SIZE(engine->batch_pool.cache_list); j++) {
 596                        int count;
 597
 598                        count = 0;
 599                        list_for_each_entry(obj,
 600                                            &engine->batch_pool.cache_list[j],
 601                                            batch_pool_link)
 602                                count++;
 603                        seq_printf(m, "%s cache[%d]: %d objects\n",
 604                                   engine->name, j, count);
 605
 606                        list_for_each_entry(obj,
 607                                            &engine->batch_pool.cache_list[j],
 608                                            batch_pool_link) {
 609                                seq_puts(m, "   ");
 610                                describe_obj(m, obj);
 611                                seq_putc(m, '\n');
 612                        }
 613
 614                        total += count;
 615                }
 616        }
 617
 618        seq_printf(m, "total: %d\n", total);
 619
 620        mutex_unlock(&dev->struct_mutex);
 621
 622        return 0;
 623}
 624
 625static void gen8_display_interrupt_info(struct seq_file *m)
 626{
 627        struct drm_i915_private *dev_priv = node_to_i915(m->private);
 628        int pipe;
 629
 630        for_each_pipe(dev_priv, pipe) {
 631                enum intel_display_power_domain power_domain;
 632                intel_wakeref_t wakeref;
 633
 634                power_domain = POWER_DOMAIN_PIPE(pipe);
 635                wakeref = intel_display_power_get_if_enabled(dev_priv,
 636                                                             power_domain);
 637                if (!wakeref) {
 638                        seq_printf(m, "Pipe %c power disabled\n",
 639                                   pipe_name(pipe));
 640                        continue;
 641                }
 642                seq_printf(m, "Pipe %c IMR:\t%08x\n",
 643                           pipe_name(pipe),
 644                           I915_READ(GEN8_DE_PIPE_IMR(pipe)));
 645                seq_printf(m, "Pipe %c IIR:\t%08x\n",
 646                           pipe_name(pipe),
 647                           I915_READ(GEN8_DE_PIPE_IIR(pipe)));
 648                seq_printf(m, "Pipe %c IER:\t%08x\n",
 649                           pipe_name(pipe),
 650                           I915_READ(GEN8_DE_PIPE_IER(pipe)));
 651
 652                intel_display_power_put(dev_priv, power_domain, wakeref);
 653        }
 654
 655        seq_printf(m, "Display Engine port interrupt mask:\t%08x\n",
 656                   I915_READ(GEN8_DE_PORT_IMR));
 657        seq_printf(m, "Display Engine port interrupt identity:\t%08x\n",
 658                   I915_READ(GEN8_DE_PORT_IIR));
 659        seq_printf(m, "Display Engine port interrupt enable:\t%08x\n",
 660                   I915_READ(GEN8_DE_PORT_IER));
 661
 662        seq_printf(m, "Display Engine misc interrupt mask:\t%08x\n",
 663                   I915_READ(GEN8_DE_MISC_IMR));
 664        seq_printf(m, "Display Engine misc interrupt identity:\t%08x\n",
 665                   I915_READ(GEN8_DE_MISC_IIR));
 666        seq_printf(m, "Display Engine misc interrupt enable:\t%08x\n",
 667                   I915_READ(GEN8_DE_MISC_IER));
 668
 669        seq_printf(m, "PCU interrupt mask:\t%08x\n",
 670                   I915_READ(GEN8_PCU_IMR));
 671        seq_printf(m, "PCU interrupt identity:\t%08x\n",
 672                   I915_READ(GEN8_PCU_IIR));
 673        seq_printf(m, "PCU interrupt enable:\t%08x\n",
 674                   I915_READ(GEN8_PCU_IER));
 675}
 676
 677static int i915_interrupt_info(struct seq_file *m, void *data)
 678{
 679        struct drm_i915_private *dev_priv = node_to_i915(m->private);
 680        struct intel_engine_cs *engine;
 681        enum intel_engine_id id;
 682        intel_wakeref_t wakeref;
 683        int i, pipe;
 684
 685        wakeref = intel_runtime_pm_get(dev_priv);
 686
 687        if (IS_CHERRYVIEW(dev_priv)) {
 688                intel_wakeref_t pref;
 689
 690                seq_printf(m, "Master Interrupt Control:\t%08x\n",
 691                           I915_READ(GEN8_MASTER_IRQ));
 692
 693                seq_printf(m, "Display IER:\t%08x\n",
 694                           I915_READ(VLV_IER));
 695                seq_printf(m, "Display IIR:\t%08x\n",
 696                           I915_READ(VLV_IIR));
 697                seq_printf(m, "Display IIR_RW:\t%08x\n",
 698                           I915_READ(VLV_IIR_RW));
 699                seq_printf(m, "Display IMR:\t%08x\n",
 700                           I915_READ(VLV_IMR));
 701                for_each_pipe(dev_priv, pipe) {
 702                        enum intel_display_power_domain power_domain;
 703
 704                        power_domain = POWER_DOMAIN_PIPE(pipe);
 705                        pref = intel_display_power_get_if_enabled(dev_priv,
 706                                                                  power_domain);
 707                        if (!pref) {
 708                                seq_printf(m, "Pipe %c power disabled\n",
 709                                           pipe_name(pipe));
 710                                continue;
 711                        }
 712
 713                        seq_printf(m, "Pipe %c stat:\t%08x\n",
 714                                   pipe_name(pipe),
 715                                   I915_READ(PIPESTAT(pipe)));
 716
 717                        intel_display_power_put(dev_priv, power_domain, pref);
 718                }
 719
 720                pref = intel_display_power_get(dev_priv, POWER_DOMAIN_INIT);
 721                seq_printf(m, "Port hotplug:\t%08x\n",
 722                           I915_READ(PORT_HOTPLUG_EN));
 723                seq_printf(m, "DPFLIPSTAT:\t%08x\n",
 724                           I915_READ(VLV_DPFLIPSTAT));
 725                seq_printf(m, "DPINVGTT:\t%08x\n",
 726                           I915_READ(DPINVGTT));
 727                intel_display_power_put(dev_priv, POWER_DOMAIN_INIT, pref);
 728
 729                for (i = 0; i < 4; i++) {
 730                        seq_printf(m, "GT Interrupt IMR %d:\t%08x\n",
 731                                   i, I915_READ(GEN8_GT_IMR(i)));
 732                        seq_printf(m, "GT Interrupt IIR %d:\t%08x\n",
 733                                   i, I915_READ(GEN8_GT_IIR(i)));
 734                        seq_printf(m, "GT Interrupt IER %d:\t%08x\n",
 735                                   i, I915_READ(GEN8_GT_IER(i)));
 736                }
 737
 738                seq_printf(m, "PCU interrupt mask:\t%08x\n",
 739                           I915_READ(GEN8_PCU_IMR));
 740                seq_printf(m, "PCU interrupt identity:\t%08x\n",
 741                           I915_READ(GEN8_PCU_IIR));
 742                seq_printf(m, "PCU interrupt enable:\t%08x\n",
 743                           I915_READ(GEN8_PCU_IER));
 744        } else if (INTEL_GEN(dev_priv) >= 11) {
 745                seq_printf(m, "Master Interrupt Control:  %08x\n",
 746                           I915_READ(GEN11_GFX_MSTR_IRQ));
 747
 748                seq_printf(m, "Render/Copy Intr Enable:   %08x\n",
 749                           I915_READ(GEN11_RENDER_COPY_INTR_ENABLE));
 750                seq_printf(m, "VCS/VECS Intr Enable:      %08x\n",
 751                           I915_READ(GEN11_VCS_VECS_INTR_ENABLE));
 752                seq_printf(m, "GUC/SG Intr Enable:\t   %08x\n",
 753                           I915_READ(GEN11_GUC_SG_INTR_ENABLE));
 754                seq_printf(m, "GPM/WGBOXPERF Intr Enable: %08x\n",
 755                           I915_READ(GEN11_GPM_WGBOXPERF_INTR_ENABLE));
 756                seq_printf(m, "Crypto Intr Enable:\t   %08x\n",
 757                           I915_READ(GEN11_CRYPTO_RSVD_INTR_ENABLE));
 758                seq_printf(m, "GUnit/CSME Intr Enable:\t   %08x\n",
 759                           I915_READ(GEN11_GUNIT_CSME_INTR_ENABLE));
 760
 761                seq_printf(m, "Display Interrupt Control:\t%08x\n",
 762                           I915_READ(GEN11_DISPLAY_INT_CTL));
 763
 764                gen8_display_interrupt_info(m);
 765        } else if (INTEL_GEN(dev_priv) >= 8) {
 766                seq_printf(m, "Master Interrupt Control:\t%08x\n",
 767                           I915_READ(GEN8_MASTER_IRQ));
 768
 769                for (i = 0; i < 4; i++) {
 770                        seq_printf(m, "GT Interrupt IMR %d:\t%08x\n",
 771                                   i, I915_READ(GEN8_GT_IMR(i)));
 772                        seq_printf(m, "GT Interrupt IIR %d:\t%08x\n",
 773                                   i, I915_READ(GEN8_GT_IIR(i)));
 774                        seq_printf(m, "GT Interrupt IER %d:\t%08x\n",
 775                                   i, I915_READ(GEN8_GT_IER(i)));
 776                }
 777
 778                gen8_display_interrupt_info(m);
 779        } else if (IS_VALLEYVIEW(dev_priv)) {
 780                seq_printf(m, "Display IER:\t%08x\n",
 781                           I915_READ(VLV_IER));
 782                seq_printf(m, "Display IIR:\t%08x\n",
 783                           I915_READ(VLV_IIR));
 784                seq_printf(m, "Display IIR_RW:\t%08x\n",
 785                           I915_READ(VLV_IIR_RW));
 786                seq_printf(m, "Display IMR:\t%08x\n",
 787                           I915_READ(VLV_IMR));
 788                for_each_pipe(dev_priv, pipe) {
 789                        enum intel_display_power_domain power_domain;
 790                        intel_wakeref_t pref;
 791
 792                        power_domain = POWER_DOMAIN_PIPE(pipe);
 793                        pref = intel_display_power_get_if_enabled(dev_priv,
 794                                                                  power_domain);
 795                        if (!pref) {
 796                                seq_printf(m, "Pipe %c power disabled\n",
 797                                           pipe_name(pipe));
 798                                continue;
 799                        }
 800
 801                        seq_printf(m, "Pipe %c stat:\t%08x\n",
 802                                   pipe_name(pipe),
 803                                   I915_READ(PIPESTAT(pipe)));
 804                        intel_display_power_put(dev_priv, power_domain, pref);
 805                }
 806
 807                seq_printf(m, "Master IER:\t%08x\n",
 808                           I915_READ(VLV_MASTER_IER));
 809
 810                seq_printf(m, "Render IER:\t%08x\n",
 811                           I915_READ(GTIER));
 812                seq_printf(m, "Render IIR:\t%08x\n",
 813                           I915_READ(GTIIR));
 814                seq_printf(m, "Render IMR:\t%08x\n",
 815                           I915_READ(GTIMR));
 816
 817                seq_printf(m, "PM IER:\t\t%08x\n",
 818                           I915_READ(GEN6_PMIER));
 819                seq_printf(m, "PM IIR:\t\t%08x\n",
 820                           I915_READ(GEN6_PMIIR));
 821                seq_printf(m, "PM IMR:\t\t%08x\n",
 822                           I915_READ(GEN6_PMIMR));
 823
 824                seq_printf(m, "Port hotplug:\t%08x\n",
 825                           I915_READ(PORT_HOTPLUG_EN));
 826                seq_printf(m, "DPFLIPSTAT:\t%08x\n",
 827                           I915_READ(VLV_DPFLIPSTAT));
 828                seq_printf(m, "DPINVGTT:\t%08x\n",
 829                           I915_READ(DPINVGTT));
 830
 831        } else if (!HAS_PCH_SPLIT(dev_priv)) {
 832                seq_printf(m, "Interrupt enable:    %08x\n",
 833                           I915_READ(IER));
 834                seq_printf(m, "Interrupt identity:  %08x\n",
 835                           I915_READ(IIR));
 836                seq_printf(m, "Interrupt mask:      %08x\n",
 837                           I915_READ(IMR));
 838                for_each_pipe(dev_priv, pipe)
 839                        seq_printf(m, "Pipe %c stat:         %08x\n",
 840                                   pipe_name(pipe),
 841                                   I915_READ(PIPESTAT(pipe)));
 842        } else {
 843                seq_printf(m, "North Display Interrupt enable:          %08x\n",
 844                           I915_READ(DEIER));
 845                seq_printf(m, "North Display Interrupt identity:        %08x\n",
 846                           I915_READ(DEIIR));
 847                seq_printf(m, "North Display Interrupt mask:            %08x\n",
 848                           I915_READ(DEIMR));
 849                seq_printf(m, "South Display Interrupt enable:          %08x\n",
 850                           I915_READ(SDEIER));
 851                seq_printf(m, "South Display Interrupt identity:        %08x\n",
 852                           I915_READ(SDEIIR));
 853                seq_printf(m, "South Display Interrupt mask:            %08x\n",
 854                           I915_READ(SDEIMR));
 855                seq_printf(m, "Graphics Interrupt enable:               %08x\n",
 856                           I915_READ(GTIER));
 857                seq_printf(m, "Graphics Interrupt identity:             %08x\n",
 858                           I915_READ(GTIIR));
 859                seq_printf(m, "Graphics Interrupt mask:         %08x\n",
 860                           I915_READ(GTIMR));
 861        }
 862
 863        if (INTEL_GEN(dev_priv) >= 11) {
 864                seq_printf(m, "RCS Intr Mask:\t %08x\n",
 865                           I915_READ(GEN11_RCS0_RSVD_INTR_MASK));
 866                seq_printf(m, "BCS Intr Mask:\t %08x\n",
 867                           I915_READ(GEN11_BCS_RSVD_INTR_MASK));
 868                seq_printf(m, "VCS0/VCS1 Intr Mask:\t %08x\n",
 869                           I915_READ(GEN11_VCS0_VCS1_INTR_MASK));
 870                seq_printf(m, "VCS2/VCS3 Intr Mask:\t %08x\n",
 871                           I915_READ(GEN11_VCS2_VCS3_INTR_MASK));
 872                seq_printf(m, "VECS0/VECS1 Intr Mask:\t %08x\n",
 873                           I915_READ(GEN11_VECS0_VECS1_INTR_MASK));
 874                seq_printf(m, "GUC/SG Intr Mask:\t %08x\n",
 875                           I915_READ(GEN11_GUC_SG_INTR_MASK));
 876                seq_printf(m, "GPM/WGBOXPERF Intr Mask: %08x\n",
 877                           I915_READ(GEN11_GPM_WGBOXPERF_INTR_MASK));
 878                seq_printf(m, "Crypto Intr Mask:\t %08x\n",
 879                           I915_READ(GEN11_CRYPTO_RSVD_INTR_MASK));
 880                seq_printf(m, "Gunit/CSME Intr Mask:\t %08x\n",
 881                           I915_READ(GEN11_GUNIT_CSME_INTR_MASK));
 882
 883        } else if (INTEL_GEN(dev_priv) >= 6) {
 884                for_each_engine(engine, dev_priv, id) {
 885                        seq_printf(m,
 886                                   "Graphics Interrupt mask (%s):       %08x\n",
 887                                   engine->name, I915_READ_IMR(engine));
 888                }
 889        }
 890
 891        intel_runtime_pm_put(dev_priv, wakeref);
 892
 893        return 0;
 894}
 895
 896static int i915_gem_fence_regs_info(struct seq_file *m, void *data)
 897{
 898        struct drm_i915_private *dev_priv = node_to_i915(m->private);
 899        struct drm_device *dev = &dev_priv->drm;
 900        int i, ret;
 901
 902        ret = mutex_lock_interruptible(&dev->struct_mutex);
 903        if (ret)
 904                return ret;
 905
 906        seq_printf(m, "Total fences = %d\n", dev_priv->num_fence_regs);
 907        for (i = 0; i < dev_priv->num_fence_regs; i++) {
 908                struct i915_vma *vma = dev_priv->fence_regs[i].vma;
 909
 910                seq_printf(m, "Fence %d, pin count = %d, object = ",
 911                           i, dev_priv->fence_regs[i].pin_count);
 912                if (!vma)
 913                        seq_puts(m, "unused");
 914                else
 915                        describe_obj(m, vma->obj);
 916                seq_putc(m, '\n');
 917        }
 918
 919        mutex_unlock(&dev->struct_mutex);
 920        return 0;
 921}
 922
 923#if IS_ENABLED(CONFIG_DRM_I915_CAPTURE_ERROR)
 924static ssize_t gpu_state_read(struct file *file, char __user *ubuf,
 925                              size_t count, loff_t *pos)
 926{
 927        struct i915_gpu_state *error;
 928        ssize_t ret;
 929        void *buf;
 930
 931        error = file->private_data;
 932        if (!error)
 933                return 0;
 934
 935        /* Bounce buffer required because of kernfs __user API convenience. */
 936        buf = kmalloc(count, GFP_KERNEL);
 937        if (!buf)
 938                return -ENOMEM;
 939
 940        ret = i915_gpu_state_copy_to_buffer(error, buf, *pos, count);
 941        if (ret <= 0)
 942                goto out;
 943
 944        if (!copy_to_user(ubuf, buf, ret))
 945                *pos += ret;
 946        else
 947                ret = -EFAULT;
 948
 949out:
 950        kfree(buf);
 951        return ret;
 952}
 953
 954static int gpu_state_release(struct inode *inode, struct file *file)
 955{
 956        i915_gpu_state_put(file->private_data);
 957        return 0;
 958}
 959
 960static int i915_gpu_info_open(struct inode *inode, struct file *file)
 961{
 962        struct drm_i915_private *i915 = inode->i_private;
 963        struct i915_gpu_state *gpu;
 964        intel_wakeref_t wakeref;
 965
 966        gpu = NULL;
 967        with_intel_runtime_pm(i915, wakeref)
 968                gpu = i915_capture_gpu_state(i915);
 969        if (IS_ERR(gpu))
 970                return PTR_ERR(gpu);
 971
 972        file->private_data = gpu;
 973        return 0;
 974}
 975
 976static const struct file_operations i915_gpu_info_fops = {
 977        .owner = THIS_MODULE,
 978        .open = i915_gpu_info_open,
 979        .read = gpu_state_read,
 980        .llseek = default_llseek,
 981        .release = gpu_state_release,
 982};
 983
 984static ssize_t
 985i915_error_state_write(struct file *filp,
 986                       const char __user *ubuf,
 987                       size_t cnt,
 988                       loff_t *ppos)
 989{
 990        struct i915_gpu_state *error = filp->private_data;
 991
 992        if (!error)
 993                return 0;
 994
 995        DRM_DEBUG_DRIVER("Resetting error state\n");
 996        i915_reset_error_state(error->i915);
 997
 998        return cnt;
 999}
1000
1001static int i915_error_state_open(struct inode *inode, struct file *file)
1002{
1003        struct i915_gpu_state *error;
1004
1005        error = i915_first_error_state(inode->i_private);
1006        if (IS_ERR(error))
1007                return PTR_ERR(error);
1008
1009        file->private_data  = error;
1010        return 0;
1011}
1012
1013static const struct file_operations i915_error_state_fops = {
1014        .owner = THIS_MODULE,
1015        .open = i915_error_state_open,
1016        .read = gpu_state_read,
1017        .write = i915_error_state_write,
1018        .llseek = default_llseek,
1019        .release = gpu_state_release,
1020};
1021#endif
1022
1023static int i915_frequency_info(struct seq_file *m, void *unused)
1024{
1025        struct drm_i915_private *dev_priv = node_to_i915(m->private);
1026        struct intel_rps *rps = &dev_priv->gt_pm.rps;
1027        intel_wakeref_t wakeref;
1028        int ret = 0;
1029
1030        wakeref = intel_runtime_pm_get(dev_priv);
1031
1032        if (IS_GEN(dev_priv, 5)) {
1033                u16 rgvswctl = I915_READ16(MEMSWCTL);
1034                u16 rgvstat = I915_READ16(MEMSTAT_ILK);
1035
1036                seq_printf(m, "Requested P-state: %d\n", (rgvswctl >> 8) & 0xf);
1037                seq_printf(m, "Requested VID: %d\n", rgvswctl & 0x3f);
1038                seq_printf(m, "Current VID: %d\n", (rgvstat & MEMSTAT_VID_MASK) >>
1039                           MEMSTAT_VID_SHIFT);
1040                seq_printf(m, "Current P-state: %d\n",
1041                           (rgvstat & MEMSTAT_PSTATE_MASK) >> MEMSTAT_PSTATE_SHIFT);
1042        } else if (IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv)) {
1043                u32 rpmodectl, freq_sts;
1044
1045                mutex_lock(&dev_priv->pcu_lock);
1046
1047                rpmodectl = I915_READ(GEN6_RP_CONTROL);
1048                seq_printf(m, "Video Turbo Mode: %s\n",
1049                           yesno(rpmodectl & GEN6_RP_MEDIA_TURBO));
1050                seq_printf(m, "HW control enabled: %s\n",
1051                           yesno(rpmodectl & GEN6_RP_ENABLE));
1052                seq_printf(m, "SW control enabled: %s\n",
1053                           yesno((rpmodectl & GEN6_RP_MEDIA_MODE_MASK) ==
1054                                  GEN6_RP_MEDIA_SW_MODE));
1055
1056                freq_sts = vlv_punit_read(dev_priv, PUNIT_REG_GPU_FREQ_STS);
1057                seq_printf(m, "PUNIT_REG_GPU_FREQ_STS: 0x%08x\n", freq_sts);
1058                seq_printf(m, "DDR freq: %d MHz\n", dev_priv->mem_freq);
1059
1060                seq_printf(m, "actual GPU freq: %d MHz\n",
1061                           intel_gpu_freq(dev_priv, (freq_sts >> 8) & 0xff));
1062
1063                seq_printf(m, "current GPU freq: %d MHz\n",
1064                           intel_gpu_freq(dev_priv, rps->cur_freq));
1065
1066                seq_printf(m, "max GPU freq: %d MHz\n",
1067                           intel_gpu_freq(dev_priv, rps->max_freq));
1068
1069                seq_printf(m, "min GPU freq: %d MHz\n",
1070                           intel_gpu_freq(dev_priv, rps->min_freq));
1071
1072                seq_printf(m, "idle GPU freq: %d MHz\n",
1073                           intel_gpu_freq(dev_priv, rps->idle_freq));
1074
1075                seq_printf(m,
1076                           "efficient (RPe) frequency: %d MHz\n",
1077                           intel_gpu_freq(dev_priv, rps->efficient_freq));
1078                mutex_unlock(&dev_priv->pcu_lock);
1079        } else if (INTEL_GEN(dev_priv) >= 6) {
1080                u32 rp_state_limits;
1081                u32 gt_perf_status;
1082                u32 rp_state_cap;
1083                u32 rpmodectl, rpinclimit, rpdeclimit;
1084                u32 rpstat, cagf, reqf;
1085                u32 rpupei, rpcurup, rpprevup;
1086                u32 rpdownei, rpcurdown, rpprevdown;
1087                u32 pm_ier, pm_imr, pm_isr, pm_iir, pm_mask;
1088                int max_freq;
1089
1090                rp_state_limits = I915_READ(GEN6_RP_STATE_LIMITS);
1091                if (IS_GEN9_LP(dev_priv)) {
1092                        rp_state_cap = I915_READ(BXT_RP_STATE_CAP);
1093                        gt_perf_status = I915_READ(BXT_GT_PERF_STATUS);
1094                } else {
1095                        rp_state_cap = I915_READ(GEN6_RP_STATE_CAP);
1096                        gt_perf_status = I915_READ(GEN6_GT_PERF_STATUS);
1097                }
1098
1099                /* RPSTAT1 is in the GT power well */
1100                intel_uncore_forcewake_get(dev_priv, FORCEWAKE_ALL);
1101
1102                reqf = I915_READ(GEN6_RPNSWREQ);
1103                if (INTEL_GEN(dev_priv) >= 9)
1104                        reqf >>= 23;
1105                else {
1106                        reqf &= ~GEN6_TURBO_DISABLE;
1107                        if (IS_HASWELL(dev_priv) || IS_BROADWELL(dev_priv))
1108                                reqf >>= 24;
1109                        else
1110                                reqf >>= 25;
1111                }
1112                reqf = intel_gpu_freq(dev_priv, reqf);
1113
1114                rpmodectl = I915_READ(GEN6_RP_CONTROL);
1115                rpinclimit = I915_READ(GEN6_RP_UP_THRESHOLD);
1116                rpdeclimit = I915_READ(GEN6_RP_DOWN_THRESHOLD);
1117
1118                rpstat = I915_READ(GEN6_RPSTAT1);
1119                rpupei = I915_READ(GEN6_RP_CUR_UP_EI) & GEN6_CURICONT_MASK;
1120                rpcurup = I915_READ(GEN6_RP_CUR_UP) & GEN6_CURBSYTAVG_MASK;
1121                rpprevup = I915_READ(GEN6_RP_PREV_UP) & GEN6_CURBSYTAVG_MASK;
1122                rpdownei = I915_READ(GEN6_RP_CUR_DOWN_EI) & GEN6_CURIAVG_MASK;
1123                rpcurdown = I915_READ(GEN6_RP_CUR_DOWN) & GEN6_CURBSYTAVG_MASK;
1124                rpprevdown = I915_READ(GEN6_RP_PREV_DOWN) & GEN6_CURBSYTAVG_MASK;
1125                cagf = intel_gpu_freq(dev_priv,
1126                                      intel_get_cagf(dev_priv, rpstat));
1127
1128                intel_uncore_forcewake_put(dev_priv, FORCEWAKE_ALL);
1129
1130                if (INTEL_GEN(dev_priv) >= 11) {
1131                        pm_ier = I915_READ(GEN11_GPM_WGBOXPERF_INTR_ENABLE);
1132                        pm_imr = I915_READ(GEN11_GPM_WGBOXPERF_INTR_MASK);
1133                        /*
1134                         * The equivalent to the PM ISR & IIR cannot be read
1135                         * without affecting the current state of the system
1136                         */
1137                        pm_isr = 0;
1138                        pm_iir = 0;
1139                } else if (INTEL_GEN(dev_priv) >= 8) {
1140                        pm_ier = I915_READ(GEN8_GT_IER(2));
1141                        pm_imr = I915_READ(GEN8_GT_IMR(2));
1142                        pm_isr = I915_READ(GEN8_GT_ISR(2));
1143                        pm_iir = I915_READ(GEN8_GT_IIR(2));
1144                } else {
1145                        pm_ier = I915_READ(GEN6_PMIER);
1146                        pm_imr = I915_READ(GEN6_PMIMR);
1147                        pm_isr = I915_READ(GEN6_PMISR);
1148                        pm_iir = I915_READ(GEN6_PMIIR);
1149                }
1150                pm_mask = I915_READ(GEN6_PMINTRMSK);
1151
1152                seq_printf(m, "Video Turbo Mode: %s\n",
1153                           yesno(rpmodectl & GEN6_RP_MEDIA_TURBO));
1154                seq_printf(m, "HW control enabled: %s\n",
1155                           yesno(rpmodectl & GEN6_RP_ENABLE));
1156                seq_printf(m, "SW control enabled: %s\n",
1157                           yesno((rpmodectl & GEN6_RP_MEDIA_MODE_MASK) ==
1158                                  GEN6_RP_MEDIA_SW_MODE));
1159
1160                seq_printf(m, "PM IER=0x%08x IMR=0x%08x, MASK=0x%08x\n",
1161                           pm_ier, pm_imr, pm_mask);
1162                if (INTEL_GEN(dev_priv) <= 10)
1163                        seq_printf(m, "PM ISR=0x%08x IIR=0x%08x\n",
1164                                   pm_isr, pm_iir);
1165                seq_printf(m, "pm_intrmsk_mbz: 0x%08x\n",
1166                           rps->pm_intrmsk_mbz);
1167                seq_printf(m, "GT_PERF_STATUS: 0x%08x\n", gt_perf_status);
1168                seq_printf(m, "Render p-state ratio: %d\n",
1169                           (gt_perf_status & (INTEL_GEN(dev_priv) >= 9 ? 0x1ff00 : 0xff00)) >> 8);
1170                seq_printf(m, "Render p-state VID: %d\n",
1171                           gt_perf_status & 0xff);
1172                seq_printf(m, "Render p-state limit: %d\n",
1173                           rp_state_limits & 0xff);
1174                seq_printf(m, "RPSTAT1: 0x%08x\n", rpstat);
1175                seq_printf(m, "RPMODECTL: 0x%08x\n", rpmodectl);
1176                seq_printf(m, "RPINCLIMIT: 0x%08x\n", rpinclimit);
1177                seq_printf(m, "RPDECLIMIT: 0x%08x\n", rpdeclimit);
1178                seq_printf(m, "RPNSWREQ: %dMHz\n", reqf);
1179                seq_printf(m, "CAGF: %dMHz\n", cagf);
1180                seq_printf(m, "RP CUR UP EI: %d (%dus)\n",
1181                           rpupei, GT_PM_INTERVAL_TO_US(dev_priv, rpupei));
1182                seq_printf(m, "RP CUR UP: %d (%dus)\n",
1183                           rpcurup, GT_PM_INTERVAL_TO_US(dev_priv, rpcurup));
1184                seq_printf(m, "RP PREV UP: %d (%dus)\n",
1185                           rpprevup, GT_PM_INTERVAL_TO_US(dev_priv, rpprevup));
1186                seq_printf(m, "Up threshold: %d%%\n",
1187                           rps->power.up_threshold);
1188
1189                seq_printf(m, "RP CUR DOWN EI: %d (%dus)\n",
1190                           rpdownei, GT_PM_INTERVAL_TO_US(dev_priv, rpdownei));
1191                seq_printf(m, "RP CUR DOWN: %d (%dus)\n",
1192                           rpcurdown, GT_PM_INTERVAL_TO_US(dev_priv, rpcurdown));
1193                seq_printf(m, "RP PREV DOWN: %d (%dus)\n",
1194                           rpprevdown, GT_PM_INTERVAL_TO_US(dev_priv, rpprevdown));
1195                seq_printf(m, "Down threshold: %d%%\n",
1196                           rps->power.down_threshold);
1197
1198                max_freq = (IS_GEN9_LP(dev_priv) ? rp_state_cap >> 0 :
1199                            rp_state_cap >> 16) & 0xff;
1200                max_freq *= (IS_GEN9_BC(dev_priv) ||
1201                             INTEL_GEN(dev_priv) >= 10 ? GEN9_FREQ_SCALER : 1);
1202                seq_printf(m, "Lowest (RPN) frequency: %dMHz\n",
1203                           intel_gpu_freq(dev_priv, max_freq));
1204
1205                max_freq = (rp_state_cap & 0xff00) >> 8;
1206                max_freq *= (IS_GEN9_BC(dev_priv) ||
1207                             INTEL_GEN(dev_priv) >= 10 ? GEN9_FREQ_SCALER : 1);
1208                seq_printf(m, "Nominal (RP1) frequency: %dMHz\n",
1209                           intel_gpu_freq(dev_priv, max_freq));
1210
1211                max_freq = (IS_GEN9_LP(dev_priv) ? rp_state_cap >> 16 :
1212                            rp_state_cap >> 0) & 0xff;
1213                max_freq *= (IS_GEN9_BC(dev_priv) ||
1214                             INTEL_GEN(dev_priv) >= 10 ? GEN9_FREQ_SCALER : 1);
1215                seq_printf(m, "Max non-overclocked (RP0) frequency: %dMHz\n",
1216                           intel_gpu_freq(dev_priv, max_freq));
1217                seq_printf(m, "Max overclocked frequency: %dMHz\n",
1218                           intel_gpu_freq(dev_priv, rps->max_freq));
1219
1220                seq_printf(m, "Current freq: %d MHz\n",
1221                           intel_gpu_freq(dev_priv, rps->cur_freq));
1222                seq_printf(m, "Actual freq: %d MHz\n", cagf);
1223                seq_printf(m, "Idle freq: %d MHz\n",
1224                           intel_gpu_freq(dev_priv, rps->idle_freq));
1225                seq_printf(m, "Min freq: %d MHz\n",
1226                           intel_gpu_freq(dev_priv, rps->min_freq));
1227                seq_printf(m, "Boost freq: %d MHz\n",
1228                           intel_gpu_freq(dev_priv, rps->boost_freq));
1229                seq_printf(m, "Max freq: %d MHz\n",
1230                           intel_gpu_freq(dev_priv, rps->max_freq));
1231                seq_printf(m,
1232                           "efficient (RPe) frequency: %d MHz\n",
1233                           intel_gpu_freq(dev_priv, rps->efficient_freq));
1234        } else {
1235                seq_puts(m, "no P-state info available\n");
1236        }
1237
1238        seq_printf(m, "Current CD clock frequency: %d kHz\n", dev_priv->cdclk.hw.cdclk);
1239        seq_printf(m, "Max CD clock frequency: %d kHz\n", dev_priv->max_cdclk_freq);
1240        seq_printf(m, "Max pixel clock frequency: %d kHz\n", dev_priv->max_dotclk_freq);
1241
1242        intel_runtime_pm_put(dev_priv, wakeref);
1243        return ret;
1244}
1245
1246static void i915_instdone_info(struct drm_i915_private *dev_priv,
1247                               struct seq_file *m,
1248                               struct intel_instdone *instdone)
1249{
1250        int slice;
1251        int subslice;
1252
1253        seq_printf(m, "\t\tINSTDONE: 0x%08x\n",
1254                   instdone->instdone);
1255
1256        if (INTEL_GEN(dev_priv) <= 3)
1257                return;
1258
1259        seq_printf(m, "\t\tSC_INSTDONE: 0x%08x\n",
1260                   instdone->slice_common);
1261
1262        if (INTEL_GEN(dev_priv) <= 6)
1263                return;
1264
1265        for_each_instdone_slice_subslice(dev_priv, slice, subslice)
1266                seq_printf(m, "\t\tSAMPLER_INSTDONE[%d][%d]: 0x%08x\n",
1267                           slice, subslice, instdone->sampler[slice][subslice]);
1268
1269        for_each_instdone_slice_subslice(dev_priv, slice, subslice)
1270                seq_printf(m, "\t\tROW_INSTDONE[%d][%d]: 0x%08x\n",
1271                           slice, subslice, instdone->row[slice][subslice]);
1272}
1273
1274static int i915_hangcheck_info(struct seq_file *m, void *unused)
1275{
1276        struct drm_i915_private *dev_priv = node_to_i915(m->private);
1277        struct intel_engine_cs *engine;
1278        u64 acthd[I915_NUM_ENGINES];
1279        u32 seqno[I915_NUM_ENGINES];
1280        struct intel_instdone instdone;
1281        intel_wakeref_t wakeref;
1282        enum intel_engine_id id;
1283
1284        if (test_bit(I915_WEDGED, &dev_priv->gpu_error.flags))
1285                seq_puts(m, "Wedged\n");
1286        if (test_bit(I915_RESET_BACKOFF, &dev_priv->gpu_error.flags))
1287                seq_puts(m, "Reset in progress: struct_mutex backoff\n");
1288        if (waitqueue_active(&dev_priv->gpu_error.wait_queue))
1289                seq_puts(m, "Waiter holding struct mutex\n");
1290        if (waitqueue_active(&dev_priv->gpu_error.reset_queue))
1291                seq_puts(m, "struct_mutex blocked for reset\n");
1292
1293        if (!i915_modparams.enable_hangcheck) {
1294                seq_puts(m, "Hangcheck disabled\n");
1295                return 0;
1296        }
1297
1298        with_intel_runtime_pm(dev_priv, wakeref) {
1299                for_each_engine(engine, dev_priv, id) {
1300                        acthd[id] = intel_engine_get_active_head(engine);
1301                        seqno[id] = intel_engine_get_seqno(engine);
1302                }
1303
1304                intel_engine_get_instdone(dev_priv->engine[RCS], &instdone);
1305        }
1306
1307        if (timer_pending(&dev_priv->gpu_error.hangcheck_work.timer))
1308                seq_printf(m, "Hangcheck active, timer fires in %dms\n",
1309                           jiffies_to_msecs(dev_priv->gpu_error.hangcheck_work.timer.expires -
1310                                            jiffies));
1311        else if (delayed_work_pending(&dev_priv->gpu_error.hangcheck_work))
1312                seq_puts(m, "Hangcheck active, work pending\n");
1313        else
1314                seq_puts(m, "Hangcheck inactive\n");
1315
1316        seq_printf(m, "GT active? %s\n", yesno(dev_priv->gt.awake));
1317
1318        for_each_engine(engine, dev_priv, id) {
1319                seq_printf(m, "%s:\n", engine->name);
1320                seq_printf(m, "\tseqno = %x [current %x, last %x], %dms ago\n",
1321                           engine->hangcheck.seqno, seqno[id],
1322                           intel_engine_last_submit(engine),
1323                           jiffies_to_msecs(jiffies -
1324                                            engine->hangcheck.action_timestamp));
1325
1326                seq_printf(m, "\tACTHD = 0x%08llx [current 0x%08llx]\n",
1327                           (long long)engine->hangcheck.acthd,
1328                           (long long)acthd[id]);
1329
1330                if (engine->id == RCS) {
1331                        seq_puts(m, "\tinstdone read =\n");
1332
1333                        i915_instdone_info(dev_priv, m, &instdone);
1334
1335                        seq_puts(m, "\tinstdone accu =\n");
1336
1337                        i915_instdone_info(dev_priv, m,
1338                                           &engine->hangcheck.instdone);
1339                }
1340        }
1341
1342        return 0;
1343}
1344
1345static int i915_reset_info(struct seq_file *m, void *unused)
1346{
1347        struct drm_i915_private *dev_priv = node_to_i915(m->private);
1348        struct i915_gpu_error *error = &dev_priv->gpu_error;
1349        struct intel_engine_cs *engine;
1350        enum intel_engine_id id;
1351
1352        seq_printf(m, "full gpu reset = %u\n", i915_reset_count(error));
1353
1354        for_each_engine(engine, dev_priv, id) {
1355                seq_printf(m, "%s = %u\n", engine->name,
1356                           i915_reset_engine_count(error, engine));
1357        }
1358
1359        return 0;
1360}
1361
1362static int ironlake_drpc_info(struct seq_file *m)
1363{
1364        struct drm_i915_private *dev_priv = node_to_i915(m->private);
1365        u32 rgvmodectl, rstdbyctl;
1366        u16 crstandvid;
1367
1368        rgvmodectl = I915_READ(MEMMODECTL);
1369        rstdbyctl = I915_READ(RSTDBYCTL);
1370        crstandvid = I915_READ16(CRSTANDVID);
1371
1372        seq_printf(m, "HD boost: %s\n", yesno(rgvmodectl & MEMMODE_BOOST_EN));
1373        seq_printf(m, "Boost freq: %d\n",
1374                   (rgvmodectl & MEMMODE_BOOST_FREQ_MASK) >>
1375                   MEMMODE_BOOST_FREQ_SHIFT);
1376        seq_printf(m, "HW control enabled: %s\n",
1377                   yesno(rgvmodectl & MEMMODE_HWIDLE_EN));
1378        seq_printf(m, "SW control enabled: %s\n",
1379                   yesno(rgvmodectl & MEMMODE_SWMODE_EN));
1380        seq_printf(m, "Gated voltage change: %s\n",
1381                   yesno(rgvmodectl & MEMMODE_RCLK_GATE));
1382        seq_printf(m, "Starting frequency: P%d\n",
1383                   (rgvmodectl & MEMMODE_FSTART_MASK) >> MEMMODE_FSTART_SHIFT);
1384        seq_printf(m, "Max P-state: P%d\n",
1385                   (rgvmodectl & MEMMODE_FMAX_MASK) >> MEMMODE_FMAX_SHIFT);
1386        seq_printf(m, "Min P-state: P%d\n", (rgvmodectl & MEMMODE_FMIN_MASK));
1387        seq_printf(m, "RS1 VID: %d\n", (crstandvid & 0x3f));
1388        seq_printf(m, "RS2 VID: %d\n", ((crstandvid >> 8) & 0x3f));
1389        seq_printf(m, "Render standby enabled: %s\n",
1390                   yesno(!(rstdbyctl & RCX_SW_EXIT)));
1391        seq_puts(m, "Current RS state: ");
1392        switch (rstdbyctl & RSX_STATUS_MASK) {
1393        case RSX_STATUS_ON:
1394                seq_puts(m, "on\n");
1395                break;
1396        case RSX_STATUS_RC1:
1397                seq_puts(m, "RC1\n");
1398                break;
1399        case RSX_STATUS_RC1E:
1400                seq_puts(m, "RC1E\n");
1401                break;
1402        case RSX_STATUS_RS1:
1403                seq_puts(m, "RS1\n");
1404                break;
1405        case RSX_STATUS_RS2:
1406                seq_puts(m, "RS2 (RC6)\n");
1407                break;
1408        case RSX_STATUS_RS3:
1409                seq_puts(m, "RC3 (RC6+)\n");
1410                break;
1411        default:
1412                seq_puts(m, "unknown\n");
1413                break;
1414        }
1415
1416        return 0;
1417}
1418
1419static int i915_forcewake_domains(struct seq_file *m, void *data)
1420{
1421        struct drm_i915_private *i915 = node_to_i915(m->private);
1422        struct intel_uncore_forcewake_domain *fw_domain;
1423        unsigned int tmp;
1424
1425        seq_printf(m, "user.bypass_count = %u\n",
1426                   i915->uncore.user_forcewake.count);
1427
1428        for_each_fw_domain(fw_domain, i915, tmp)
1429                seq_printf(m, "%s.wake_count = %u\n",
1430                           intel_uncore_forcewake_domain_to_str(fw_domain->id),
1431                           READ_ONCE(fw_domain->wake_count));
1432
1433        return 0;
1434}
1435
1436static void print_rc6_res(struct seq_file *m,
1437                          const char *title,
1438                          const i915_reg_t reg)
1439{
1440        struct drm_i915_private *dev_priv = node_to_i915(m->private);
1441
1442        seq_printf(m, "%s %u (%llu us)\n",
1443                   title, I915_READ(reg),
1444                   intel_rc6_residency_us(dev_priv, reg));
1445}
1446
1447static int vlv_drpc_info(struct seq_file *m)
1448{
1449        struct drm_i915_private *dev_priv = node_to_i915(m->private);
1450        u32 rcctl1, pw_status;
1451
1452        pw_status = I915_READ(VLV_GTLC_PW_STATUS);
1453        rcctl1 = I915_READ(GEN6_RC_CONTROL);
1454
1455        seq_printf(m, "RC6 Enabled: %s\n",
1456                   yesno(rcctl1 & (GEN7_RC_CTL_TO_MODE |
1457                                        GEN6_RC_CTL_EI_MODE(1))));
1458        seq_printf(m, "Render Power Well: %s\n",
1459                   (pw_status & VLV_GTLC_PW_RENDER_STATUS_MASK) ? "Up" : "Down");
1460        seq_printf(m, "Media Power Well: %s\n",
1461                   (pw_status & VLV_GTLC_PW_MEDIA_STATUS_MASK) ? "Up" : "Down");
1462
1463        print_rc6_res(m, "Render RC6 residency since boot:", VLV_GT_RENDER_RC6);
1464        print_rc6_res(m, "Media RC6 residency since boot:", VLV_GT_MEDIA_RC6);
1465
1466        return i915_forcewake_domains(m, NULL);
1467}
1468
1469static int gen6_drpc_info(struct seq_file *m)
1470{
1471        struct drm_i915_private *dev_priv = node_to_i915(m->private);
1472        u32 gt_core_status, rcctl1, rc6vids = 0;
1473        u32 gen9_powergate_enable = 0, gen9_powergate_status = 0;
1474
1475        gt_core_status = I915_READ_FW(GEN6_GT_CORE_STATUS);
1476        trace_i915_reg_rw(false, GEN6_GT_CORE_STATUS, gt_core_status, 4, true);
1477
1478        rcctl1 = I915_READ(GEN6_RC_CONTROL);
1479        if (INTEL_GEN(dev_priv) >= 9) {
1480                gen9_powergate_enable = I915_READ(GEN9_PG_ENABLE);
1481                gen9_powergate_status = I915_READ(GEN9_PWRGT_DOMAIN_STATUS);
1482        }
1483
1484        if (INTEL_GEN(dev_priv) <= 7) {
1485                mutex_lock(&dev_priv->pcu_lock);
1486                sandybridge_pcode_read(dev_priv, GEN6_PCODE_READ_RC6VIDS,
1487                                       &rc6vids);
1488                mutex_unlock(&dev_priv->pcu_lock);
1489        }
1490
1491        seq_printf(m, "RC1e Enabled: %s\n",
1492                   yesno(rcctl1 & GEN6_RC_CTL_RC1e_ENABLE));
1493        seq_printf(m, "RC6 Enabled: %s\n",
1494                   yesno(rcctl1 & GEN6_RC_CTL_RC6_ENABLE));
1495        if (INTEL_GEN(dev_priv) >= 9) {
1496                seq_printf(m, "Render Well Gating Enabled: %s\n",
1497                        yesno(gen9_powergate_enable & GEN9_RENDER_PG_ENABLE));
1498                seq_printf(m, "Media Well Gating Enabled: %s\n",
1499                        yesno(gen9_powergate_enable & GEN9_MEDIA_PG_ENABLE));
1500        }
1501        seq_printf(m, "Deep RC6 Enabled: %s\n",
1502                   yesno(rcctl1 & GEN6_RC_CTL_RC6p_ENABLE));
1503        seq_printf(m, "Deepest RC6 Enabled: %s\n",
1504                   yesno(rcctl1 & GEN6_RC_CTL_RC6pp_ENABLE));
1505        seq_puts(m, "Current RC state: ");
1506        switch (gt_core_status & GEN6_RCn_MASK) {
1507        case GEN6_RC0:
1508                if (gt_core_status & GEN6_CORE_CPD_STATE_MASK)
1509                        seq_puts(m, "Core Power Down\n");
1510                else
1511                        seq_puts(m, "on\n");
1512                break;
1513        case GEN6_RC3:
1514                seq_puts(m, "RC3\n");
1515                break;
1516        case GEN6_RC6:
1517                seq_puts(m, "RC6\n");
1518                break;
1519        case GEN6_RC7:
1520                seq_puts(m, "RC7\n");
1521                break;
1522        default:
1523                seq_puts(m, "Unknown\n");
1524                break;
1525        }
1526
1527        seq_printf(m, "Core Power Down: %s\n",
1528                   yesno(gt_core_status & GEN6_CORE_CPD_STATE_MASK));
1529        if (INTEL_GEN(dev_priv) >= 9) {
1530                seq_printf(m, "Render Power Well: %s\n",
1531                        (gen9_powergate_status &
1532                         GEN9_PWRGT_RENDER_STATUS_MASK) ? "Up" : "Down");
1533                seq_printf(m, "Media Power Well: %s\n",
1534                        (gen9_powergate_status &
1535                         GEN9_PWRGT_MEDIA_STATUS_MASK) ? "Up" : "Down");
1536        }
1537
1538        /* Not exactly sure what this is */
1539        print_rc6_res(m, "RC6 \"Locked to RPn\" residency since boot:",
1540                      GEN6_GT_GFX_RC6_LOCKED);
1541        print_rc6_res(m, "RC6 residency since boot:", GEN6_GT_GFX_RC6);
1542        print_rc6_res(m, "RC6+ residency since boot:", GEN6_GT_GFX_RC6p);
1543        print_rc6_res(m, "RC6++ residency since boot:", GEN6_GT_GFX_RC6pp);
1544
1545        if (INTEL_GEN(dev_priv) <= 7) {
1546                seq_printf(m, "RC6   voltage: %dmV\n",
1547                           GEN6_DECODE_RC6_VID(((rc6vids >> 0) & 0xff)));
1548                seq_printf(m, "RC6+  voltage: %dmV\n",
1549                           GEN6_DECODE_RC6_VID(((rc6vids >> 8) & 0xff)));
1550                seq_printf(m, "RC6++ voltage: %dmV\n",
1551                           GEN6_DECODE_RC6_VID(((rc6vids >> 16) & 0xff)));
1552        }
1553
1554        return i915_forcewake_domains(m, NULL);
1555}
1556
1557static int i915_drpc_info(struct seq_file *m, void *unused)
1558{
1559        struct drm_i915_private *dev_priv = node_to_i915(m->private);
1560        intel_wakeref_t wakeref;
1561        int err = -ENODEV;
1562
1563        with_intel_runtime_pm(dev_priv, wakeref) {
1564                if (IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv))
1565                        err = vlv_drpc_info(m);
1566                else if (INTEL_GEN(dev_priv) >= 6)
1567                        err = gen6_drpc_info(m);
1568                else
1569                        err = ironlake_drpc_info(m);
1570        }
1571
1572        return err;
1573}
1574
1575static int i915_frontbuffer_tracking(struct seq_file *m, void *unused)
1576{
1577        struct drm_i915_private *dev_priv = node_to_i915(m->private);
1578
1579        seq_printf(m, "FB tracking busy bits: 0x%08x\n",
1580                   dev_priv->fb_tracking.busy_bits);
1581
1582        seq_printf(m, "FB tracking flip bits: 0x%08x\n",
1583                   dev_priv->fb_tracking.flip_bits);
1584
1585        return 0;
1586}
1587
1588static int i915_fbc_status(struct seq_file *m, void *unused)
1589{
1590        struct drm_i915_private *dev_priv = node_to_i915(m->private);
1591        struct intel_fbc *fbc = &dev_priv->fbc;
1592        intel_wakeref_t wakeref;
1593
1594        if (!HAS_FBC(dev_priv))
1595                return -ENODEV;
1596
1597        wakeref = intel_runtime_pm_get(dev_priv);
1598        mutex_lock(&fbc->lock);
1599
1600        if (intel_fbc_is_active(dev_priv))
1601                seq_puts(m, "FBC enabled\n");
1602        else
1603                seq_printf(m, "FBC disabled: %s\n", fbc->no_fbc_reason);
1604
1605        if (intel_fbc_is_active(dev_priv)) {
1606                u32 mask;
1607
1608                if (INTEL_GEN(dev_priv) >= 8)
1609                        mask = I915_READ(IVB_FBC_STATUS2) & BDW_FBC_COMP_SEG_MASK;
1610                else if (INTEL_GEN(dev_priv) >= 7)
1611                        mask = I915_READ(IVB_FBC_STATUS2) & IVB_FBC_COMP_SEG_MASK;
1612                else if (INTEL_GEN(dev_priv) >= 5)
1613                        mask = I915_READ(ILK_DPFC_STATUS) & ILK_DPFC_COMP_SEG_MASK;
1614                else if (IS_G4X(dev_priv))
1615                        mask = I915_READ(DPFC_STATUS) & DPFC_COMP_SEG_MASK;
1616                else
1617                        mask = I915_READ(FBC_STATUS) & (FBC_STAT_COMPRESSING |
1618                                                        FBC_STAT_COMPRESSED);
1619
1620                seq_printf(m, "Compressing: %s\n", yesno(mask));
1621        }
1622
1623        mutex_unlock(&fbc->lock);
1624        intel_runtime_pm_put(dev_priv, wakeref);
1625
1626        return 0;
1627}
1628
1629static int i915_fbc_false_color_get(void *data, u64 *val)
1630{
1631        struct drm_i915_private *dev_priv = data;
1632
1633        if (INTEL_GEN(dev_priv) < 7 || !HAS_FBC(dev_priv))
1634                return -ENODEV;
1635
1636        *val = dev_priv->fbc.false_color;
1637
1638        return 0;
1639}
1640
1641static int i915_fbc_false_color_set(void *data, u64 val)
1642{
1643        struct drm_i915_private *dev_priv = data;
1644        u32 reg;
1645
1646        if (INTEL_GEN(dev_priv) < 7 || !HAS_FBC(dev_priv))
1647                return -ENODEV;
1648
1649        mutex_lock(&dev_priv->fbc.lock);
1650
1651        reg = I915_READ(ILK_DPFC_CONTROL);
1652        dev_priv->fbc.false_color = val;
1653
1654        I915_WRITE(ILK_DPFC_CONTROL, val ?
1655                   (reg | FBC_CTL_FALSE_COLOR) :
1656                   (reg & ~FBC_CTL_FALSE_COLOR));
1657
1658        mutex_unlock(&dev_priv->fbc.lock);
1659        return 0;
1660}
1661
1662DEFINE_SIMPLE_ATTRIBUTE(i915_fbc_false_color_fops,
1663                        i915_fbc_false_color_get, i915_fbc_false_color_set,
1664                        "%llu\n");
1665
1666static int i915_ips_status(struct seq_file *m, void *unused)
1667{
1668        struct drm_i915_private *dev_priv = node_to_i915(m->private);
1669        intel_wakeref_t wakeref;
1670
1671        if (!HAS_IPS(dev_priv))
1672                return -ENODEV;
1673
1674        wakeref = intel_runtime_pm_get(dev_priv);
1675
1676        seq_printf(m, "Enabled by kernel parameter: %s\n",
1677                   yesno(i915_modparams.enable_ips));
1678
1679        if (INTEL_GEN(dev_priv) >= 8) {
1680                seq_puts(m, "Currently: unknown\n");
1681        } else {
1682                if (I915_READ(IPS_CTL) & IPS_ENABLE)
1683                        seq_puts(m, "Currently: enabled\n");
1684                else
1685                        seq_puts(m, "Currently: disabled\n");
1686        }
1687
1688        intel_runtime_pm_put(dev_priv, wakeref);
1689
1690        return 0;
1691}
1692
1693static int i915_sr_status(struct seq_file *m, void *unused)
1694{
1695        struct drm_i915_private *dev_priv = node_to_i915(m->private);
1696        intel_wakeref_t wakeref;
1697        bool sr_enabled = false;
1698
1699        wakeref = intel_display_power_get(dev_priv, POWER_DOMAIN_INIT);
1700
1701        if (INTEL_GEN(dev_priv) >= 9)
1702                /* no global SR status; inspect per-plane WM */;
1703        else if (HAS_PCH_SPLIT(dev_priv))
1704                sr_enabled = I915_READ(WM1_LP_ILK) & WM1_LP_SR_EN;
1705        else if (IS_I965GM(dev_priv) || IS_G4X(dev_priv) ||
1706                 IS_I945G(dev_priv) || IS_I945GM(dev_priv))
1707                sr_enabled = I915_READ(FW_BLC_SELF) & FW_BLC_SELF_EN;
1708        else if (IS_I915GM(dev_priv))
1709                sr_enabled = I915_READ(INSTPM) & INSTPM_SELF_EN;
1710        else if (IS_PINEVIEW(dev_priv))
1711                sr_enabled = I915_READ(DSPFW3) & PINEVIEW_SELF_REFRESH_EN;
1712        else if (IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv))
1713                sr_enabled = I915_READ(FW_BLC_SELF_VLV) & FW_CSPWRDWNEN;
1714
1715        intel_display_power_put(dev_priv, POWER_DOMAIN_INIT, wakeref);
1716
1717        seq_printf(m, "self-refresh: %s\n", enableddisabled(sr_enabled));
1718
1719        return 0;
1720}
1721
1722static int i915_emon_status(struct seq_file *m, void *unused)
1723{
1724        struct drm_i915_private *i915 = node_to_i915(m->private);
1725        intel_wakeref_t wakeref;
1726
1727        if (!IS_GEN(i915, 5))
1728                return -ENODEV;
1729
1730        with_intel_runtime_pm(i915, wakeref) {
1731                unsigned long temp, chipset, gfx;
1732
1733                temp = i915_mch_val(i915);
1734                chipset = i915_chipset_val(i915);
1735                gfx = i915_gfx_val(i915);
1736
1737                seq_printf(m, "GMCH temp: %ld\n", temp);
1738                seq_printf(m, "Chipset power: %ld\n", chipset);
1739                seq_printf(m, "GFX power: %ld\n", gfx);
1740                seq_printf(m, "Total power: %ld\n", chipset + gfx);
1741        }
1742
1743        return 0;
1744}
1745
1746static int i915_ring_freq_table(struct seq_file *m, void *unused)
1747{
1748        struct drm_i915_private *dev_priv = node_to_i915(m->private);
1749        struct intel_rps *rps = &dev_priv->gt_pm.rps;
1750        unsigned int max_gpu_freq, min_gpu_freq;
1751        intel_wakeref_t wakeref;
1752        int gpu_freq, ia_freq;
1753        int ret;
1754
1755        if (!HAS_LLC(dev_priv))
1756                return -ENODEV;
1757
1758        wakeref = intel_runtime_pm_get(dev_priv);
1759
1760        ret = mutex_lock_interruptible(&dev_priv->pcu_lock);
1761        if (ret)
1762                goto out;
1763
1764        min_gpu_freq = rps->min_freq;
1765        max_gpu_freq = rps->max_freq;
1766        if (IS_GEN9_BC(dev_priv) || INTEL_GEN(dev_priv) >= 10) {
1767                /* Convert GT frequency to 50 HZ units */
1768                min_gpu_freq /= GEN9_FREQ_SCALER;
1769                max_gpu_freq /= GEN9_FREQ_SCALER;
1770        }
1771
1772        seq_puts(m, "GPU freq (MHz)\tEffective CPU freq (MHz)\tEffective Ring freq (MHz)\n");
1773
1774        for (gpu_freq = min_gpu_freq; gpu_freq <= max_gpu_freq; gpu_freq++) {
1775                ia_freq = gpu_freq;
1776                sandybridge_pcode_read(dev_priv,
1777                                       GEN6_PCODE_READ_MIN_FREQ_TABLE,
1778                                       &ia_freq);
1779                seq_printf(m, "%d\t\t%d\t\t\t\t%d\n",
1780                           intel_gpu_freq(dev_priv, (gpu_freq *
1781                                                     (IS_GEN9_BC(dev_priv) ||
1782                                                      INTEL_GEN(dev_priv) >= 10 ?
1783                                                      GEN9_FREQ_SCALER : 1))),
1784                           ((ia_freq >> 0) & 0xff) * 100,
1785                           ((ia_freq >> 8) & 0xff) * 100);
1786        }
1787
1788        mutex_unlock(&dev_priv->pcu_lock);
1789
1790out:
1791        intel_runtime_pm_put(dev_priv, wakeref);
1792        return ret;
1793}
1794
1795static int i915_opregion(struct seq_file *m, void *unused)
1796{
1797        struct drm_i915_private *dev_priv = node_to_i915(m->private);
1798        struct drm_device *dev = &dev_priv->drm;
1799        struct intel_opregion *opregion = &dev_priv->opregion;
1800        int ret;
1801
1802        ret = mutex_lock_interruptible(&dev->struct_mutex);
1803        if (ret)
1804                goto out;
1805
1806        if (opregion->header)
1807                seq_write(m, opregion->header, OPREGION_SIZE);
1808
1809        mutex_unlock(&dev->struct_mutex);
1810
1811out:
1812        return 0;
1813}
1814
1815static int i915_vbt(struct seq_file *m, void *unused)
1816{
1817        struct intel_opregion *opregion = &node_to_i915(m->private)->opregion;
1818
1819        if (opregion->vbt)
1820                seq_write(m, opregion->vbt, opregion->vbt_size);
1821
1822        return 0;
1823}
1824
1825static int i915_gem_framebuffer_info(struct seq_file *m, void *data)
1826{
1827        struct drm_i915_private *dev_priv = node_to_i915(m->private);
1828        struct drm_device *dev = &dev_priv->drm;
1829        struct intel_framebuffer *fbdev_fb = NULL;
1830        struct drm_framebuffer *drm_fb;
1831        int ret;
1832
1833        ret = mutex_lock_interruptible(&dev->struct_mutex);
1834        if (ret)
1835                return ret;
1836
1837#ifdef CONFIG_DRM_FBDEV_EMULATION
1838        if (dev_priv->fbdev && dev_priv->fbdev->helper.fb) {
1839                fbdev_fb = to_intel_framebuffer(dev_priv->fbdev->helper.fb);
1840
1841                seq_printf(m, "fbcon size: %d x %d, depth %d, %d bpp, modifier 0x%llx, refcount %d, obj ",
1842                           fbdev_fb->base.width,
1843                           fbdev_fb->base.height,
1844                           fbdev_fb->base.format->depth,
1845                           fbdev_fb->base.format->cpp[0] * 8,
1846                           fbdev_fb->base.modifier,
1847                           drm_framebuffer_read_refcount(&fbdev_fb->base));
1848                describe_obj(m, intel_fb_obj(&fbdev_fb->base));
1849                seq_putc(m, '\n');
1850        }
1851#endif
1852
1853        mutex_lock(&dev->mode_config.fb_lock);
1854        drm_for_each_fb(drm_fb, dev) {
1855                struct intel_framebuffer *fb = to_intel_framebuffer(drm_fb);
1856                if (fb == fbdev_fb)
1857                        continue;
1858
1859                seq_printf(m, "user size: %d x %d, depth %d, %d bpp, modifier 0x%llx, refcount %d, obj ",
1860                           fb->base.width,
1861                           fb->base.height,
1862                           fb->base.format->depth,
1863                           fb->base.format->cpp[0] * 8,
1864                           fb->base.modifier,
1865                           drm_framebuffer_read_refcount(&fb->base));
1866                describe_obj(m, intel_fb_obj(&fb->base));
1867                seq_putc(m, '\n');
1868        }
1869        mutex_unlock(&dev->mode_config.fb_lock);
1870        mutex_unlock(&dev->struct_mutex);
1871
1872        return 0;
1873}
1874
1875static void describe_ctx_ring(struct seq_file *m, struct intel_ring *ring)
1876{
1877        seq_printf(m, " (ringbuffer, space: %d, head: %u, tail: %u, emit: %u)",
1878                   ring->space, ring->head, ring->tail, ring->emit);
1879}
1880
1881static int i915_context_status(struct seq_file *m, void *unused)
1882{
1883        struct drm_i915_private *dev_priv = node_to_i915(m->private);
1884        struct drm_device *dev = &dev_priv->drm;
1885        struct intel_engine_cs *engine;
1886        struct i915_gem_context *ctx;
1887        enum intel_engine_id id;
1888        int ret;
1889
1890        ret = mutex_lock_interruptible(&dev->struct_mutex);
1891        if (ret)
1892                return ret;
1893
1894        list_for_each_entry(ctx, &dev_priv->contexts.list, link) {
1895                seq_puts(m, "HW context ");
1896                if (!list_empty(&ctx->hw_id_link))
1897                        seq_printf(m, "%x [pin %u]", ctx->hw_id,
1898                                   atomic_read(&ctx->hw_id_pin_count));
1899                if (ctx->pid) {
1900                        struct task_struct *task;
1901
1902                        task = get_pid_task(ctx->pid, PIDTYPE_PID);
1903                        if (task) {
1904                                seq_printf(m, "(%s [%d]) ",
1905                                           task->comm, task->pid);
1906                                put_task_struct(task);
1907                        }
1908                } else if (IS_ERR(ctx->file_priv)) {
1909                        seq_puts(m, "(deleted) ");
1910                } else {
1911                        seq_puts(m, "(kernel) ");
1912                }
1913
1914                seq_putc(m, ctx->remap_slice ? 'R' : 'r');
1915                seq_putc(m, '\n');
1916
1917                for_each_engine(engine, dev_priv, id) {
1918                        struct intel_context *ce =
1919                                to_intel_context(ctx, engine);
1920
1921                        seq_printf(m, "%s: ", engine->name);
1922                        if (ce->state)
1923                                describe_obj(m, ce->state->obj);
1924                        if (ce->ring)
1925                                describe_ctx_ring(m, ce->ring);
1926                        seq_putc(m, '\n');
1927                }
1928
1929                seq_putc(m, '\n');
1930        }
1931
1932        mutex_unlock(&dev->struct_mutex);
1933
1934        return 0;
1935}
1936
1937static const char *swizzle_string(unsigned swizzle)
1938{
1939        switch (swizzle) {
1940        case I915_BIT_6_SWIZZLE_NONE:
1941                return "none";
1942        case I915_BIT_6_SWIZZLE_9:
1943                return "bit9";
1944        case I915_BIT_6_SWIZZLE_9_10:
1945                return "bit9/bit10";
1946        case I915_BIT_6_SWIZZLE_9_11:
1947                return "bit9/bit11";
1948        case I915_BIT_6_SWIZZLE_9_10_11:
1949                return "bit9/bit10/bit11";
1950        case I915_BIT_6_SWIZZLE_9_17:
1951                return "bit9/bit17";
1952        case I915_BIT_6_SWIZZLE_9_10_17:
1953                return "bit9/bit10/bit17";
1954        case I915_BIT_6_SWIZZLE_UNKNOWN:
1955                return "unknown";
1956        }
1957
1958        return "bug";
1959}
1960
1961static int i915_swizzle_info(struct seq_file *m, void *data)
1962{
1963        struct drm_i915_private *dev_priv = node_to_i915(m->private);
1964        intel_wakeref_t wakeref;
1965
1966        wakeref = intel_runtime_pm_get(dev_priv);
1967
1968        seq_printf(m, "bit6 swizzle for X-tiling = %s\n",
1969                   swizzle_string(dev_priv->mm.bit_6_swizzle_x));
1970        seq_printf(m, "bit6 swizzle for Y-tiling = %s\n",
1971                   swizzle_string(dev_priv->mm.bit_6_swizzle_y));
1972
1973        if (IS_GEN_RANGE(dev_priv, 3, 4)) {
1974                seq_printf(m, "DDC = 0x%08x\n",
1975                           I915_READ(DCC));
1976                seq_printf(m, "DDC2 = 0x%08x\n",
1977                           I915_READ(DCC2));
1978                seq_printf(m, "C0DRB3 = 0x%04x\n",
1979                           I915_READ16(C0DRB3));
1980                seq_printf(m, "C1DRB3 = 0x%04x\n",
1981                           I915_READ16(C1DRB3));
1982        } else if (INTEL_GEN(dev_priv) >= 6) {
1983                seq_printf(m, "MAD_DIMM_C0 = 0x%08x\n",
1984                           I915_READ(MAD_DIMM_C0));
1985                seq_printf(m, "MAD_DIMM_C1 = 0x%08x\n",
1986                           I915_READ(MAD_DIMM_C1));
1987                seq_printf(m, "MAD_DIMM_C2 = 0x%08x\n",
1988                           I915_READ(MAD_DIMM_C2));
1989                seq_printf(m, "TILECTL = 0x%08x\n",
1990                           I915_READ(TILECTL));
1991                if (INTEL_GEN(dev_priv) >= 8)
1992                        seq_printf(m, "GAMTARBMODE = 0x%08x\n",
1993                                   I915_READ(GAMTARBMODE));
1994                else
1995                        seq_printf(m, "ARB_MODE = 0x%08x\n",
1996                                   I915_READ(ARB_MODE));
1997                seq_printf(m, "DISP_ARB_CTL = 0x%08x\n",
1998                           I915_READ(DISP_ARB_CTL));
1999        }
2000
2001        if (dev_priv->quirks & QUIRK_PIN_SWIZZLED_PAGES)
2002                seq_puts(m, "L-shaped memory detected\n");
2003
2004        intel_runtime_pm_put(dev_priv, wakeref);
2005
2006        return 0;
2007}
2008
2009static const char *rps_power_to_str(unsigned int power)
2010{
2011        static const char * const strings[] = {
2012                [LOW_POWER] = "low power",
2013                [BETWEEN] = "mixed",
2014                [HIGH_POWER] = "high power",
2015        };
2016
2017        if (power >= ARRAY_SIZE(strings) || !strings[power])
2018                return "unknown";
2019
2020        return strings[power];
2021}
2022
2023static int i915_rps_boost_info(struct seq_file *m, void *data)
2024{
2025        struct drm_i915_private *dev_priv = node_to_i915(m->private);
2026        struct drm_device *dev = &dev_priv->drm;
2027        struct intel_rps *rps = &dev_priv->gt_pm.rps;
2028        u32 act_freq = rps->cur_freq;
2029        intel_wakeref_t wakeref;
2030        struct drm_file *file;
2031
2032        with_intel_runtime_pm_if_in_use(dev_priv, wakeref) {
2033                if (IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv)) {
2034                        mutex_lock(&dev_priv->pcu_lock);
2035                        act_freq = vlv_punit_read(dev_priv,
2036                                                  PUNIT_REG_GPU_FREQ_STS);
2037                        act_freq = (act_freq >> 8) & 0xff;
2038                        mutex_unlock(&dev_priv->pcu_lock);
2039                } else {
2040                        act_freq = intel_get_cagf(dev_priv,
2041                                                  I915_READ(GEN6_RPSTAT1));
2042                }
2043        }
2044
2045        seq_printf(m, "RPS enabled? %d\n", rps->enabled);
2046        seq_printf(m, "GPU busy? %s [%d requests]\n",
2047                   yesno(dev_priv->gt.awake), dev_priv->gt.active_requests);
2048        seq_printf(m, "Boosts outstanding? %d\n",
2049                   atomic_read(&rps->num_waiters));
2050        seq_printf(m, "Interactive? %d\n", READ_ONCE(rps->power.interactive));
2051        seq_printf(m, "Frequency requested %d, actual %d\n",
2052                   intel_gpu_freq(dev_priv, rps->cur_freq),
2053                   intel_gpu_freq(dev_priv, act_freq));
2054        seq_printf(m, "  min hard:%d, soft:%d; max soft:%d, hard:%d\n",
2055                   intel_gpu_freq(dev_priv, rps->min_freq),
2056                   intel_gpu_freq(dev_priv, rps->min_freq_softlimit),
2057                   intel_gpu_freq(dev_priv, rps->max_freq_softlimit),
2058                   intel_gpu_freq(dev_priv, rps->max_freq));
2059        seq_printf(m, "  idle:%d, efficient:%d, boost:%d\n",
2060                   intel_gpu_freq(dev_priv, rps->idle_freq),
2061                   intel_gpu_freq(dev_priv, rps->efficient_freq),
2062                   intel_gpu_freq(dev_priv, rps->boost_freq));
2063
2064        mutex_lock(&dev->filelist_mutex);
2065        list_for_each_entry_reverse(file, &dev->filelist, lhead) {
2066                struct drm_i915_file_private *file_priv = file->driver_priv;
2067                struct task_struct *task;
2068
2069                rcu_read_lock();
2070                task = pid_task(file->pid, PIDTYPE_PID);
2071                seq_printf(m, "%s [%d]: %d boosts\n",
2072                           task ? task->comm : "<unknown>",
2073                           task ? task->pid : -1,
2074                           atomic_read(&file_priv->rps_client.boosts));
2075                rcu_read_unlock();
2076        }
2077        seq_printf(m, "Kernel (anonymous) boosts: %d\n",
2078                   atomic_read(&rps->boosts));
2079        mutex_unlock(&dev->filelist_mutex);
2080
2081        if (INTEL_GEN(dev_priv) >= 6 &&
2082            rps->enabled &&
2083            dev_priv->gt.active_requests) {
2084                u32 rpup, rpupei;
2085                u32 rpdown, rpdownei;
2086
2087                intel_uncore_forcewake_get(dev_priv, FORCEWAKE_ALL);
2088                rpup = I915_READ_FW(GEN6_RP_CUR_UP) & GEN6_RP_EI_MASK;
2089                rpupei = I915_READ_FW(GEN6_RP_CUR_UP_EI) & GEN6_RP_EI_MASK;
2090                rpdown = I915_READ_FW(GEN6_RP_CUR_DOWN) & GEN6_RP_EI_MASK;
2091                rpdownei = I915_READ_FW(GEN6_RP_CUR_DOWN_EI) & GEN6_RP_EI_MASK;
2092                intel_uncore_forcewake_put(dev_priv, FORCEWAKE_ALL);
2093
2094                seq_printf(m, "\nRPS Autotuning (current \"%s\" window):\n",
2095                           rps_power_to_str(rps->power.mode));
2096                seq_printf(m, "  Avg. up: %d%% [above threshold? %d%%]\n",
2097                           rpup && rpupei ? 100 * rpup / rpupei : 0,
2098                           rps->power.up_threshold);
2099                seq_printf(m, "  Avg. down: %d%% [below threshold? %d%%]\n",
2100                           rpdown && rpdownei ? 100 * rpdown / rpdownei : 0,
2101                           rps->power.down_threshold);
2102        } else {
2103                seq_puts(m, "\nRPS Autotuning inactive\n");
2104        }
2105
2106        return 0;
2107}
2108
2109static int i915_llc(struct seq_file *m, void *data)
2110{
2111        struct drm_i915_private *dev_priv = node_to_i915(m->private);
2112        const bool edram = INTEL_GEN(dev_priv) > 8;
2113
2114        seq_printf(m, "LLC: %s\n", yesno(HAS_LLC(dev_priv)));
2115        seq_printf(m, "%s: %lluMB\n", edram ? "eDRAM" : "eLLC",
2116                   intel_uncore_edram_size(dev_priv)/1024/1024);
2117
2118        return 0;
2119}
2120
2121static int i915_huc_load_status_info(struct seq_file *m, void *data)
2122{
2123        struct drm_i915_private *dev_priv = node_to_i915(m->private);
2124        intel_wakeref_t wakeref;
2125        struct drm_printer p;
2126
2127        if (!HAS_HUC(dev_priv))
2128                return -ENODEV;
2129
2130        p = drm_seq_file_printer(m);
2131        intel_uc_fw_dump(&dev_priv->huc.fw, &p);
2132
2133        with_intel_runtime_pm(dev_priv, wakeref)
2134                seq_printf(m, "\nHuC status 0x%08x:\n", I915_READ(HUC_STATUS2));
2135
2136        return 0;
2137}
2138
2139static int i915_guc_load_status_info(struct seq_file *m, void *data)
2140{
2141        struct drm_i915_private *dev_priv = node_to_i915(m->private);
2142        intel_wakeref_t wakeref;
2143        struct drm_printer p;
2144
2145        if (!HAS_GUC(dev_priv))
2146                return -ENODEV;
2147
2148        p = drm_seq_file_printer(m);
2149        intel_uc_fw_dump(&dev_priv->guc.fw, &p);
2150
2151        with_intel_runtime_pm(dev_priv, wakeref) {
2152                u32 tmp = I915_READ(GUC_STATUS);
2153                u32 i;
2154
2155                seq_printf(m, "\nGuC status 0x%08x:\n", tmp);
2156                seq_printf(m, "\tBootrom status = 0x%x\n",
2157                           (tmp & GS_BOOTROM_MASK) >> GS_BOOTROM_SHIFT);
2158                seq_printf(m, "\tuKernel status = 0x%x\n",
2159                           (tmp & GS_UKERNEL_MASK) >> GS_UKERNEL_SHIFT);
2160                seq_printf(m, "\tMIA Core status = 0x%x\n",
2161                           (tmp & GS_MIA_MASK) >> GS_MIA_SHIFT);
2162                seq_puts(m, "\nScratch registers:\n");
2163                for (i = 0; i < 16; i++) {
2164                        seq_printf(m, "\t%2d: \t0x%x\n",
2165                                   i, I915_READ(SOFT_SCRATCH(i)));
2166                }
2167        }
2168
2169        return 0;
2170}
2171
2172static const char *
2173stringify_guc_log_type(enum guc_log_buffer_type type)
2174{
2175        switch (type) {
2176        case GUC_ISR_LOG_BUFFER:
2177                return "ISR";
2178        case GUC_DPC_LOG_BUFFER:
2179                return "DPC";
2180        case GUC_CRASH_DUMP_LOG_BUFFER:
2181                return "CRASH";
2182        default:
2183                MISSING_CASE(type);
2184        }
2185
2186        return "";
2187}
2188
2189static void i915_guc_log_info(struct seq_file *m,
2190                              struct drm_i915_private *dev_priv)
2191{
2192        struct intel_guc_log *log = &dev_priv->guc.log;
2193        enum guc_log_buffer_type type;
2194
2195        if (!intel_guc_log_relay_enabled(log)) {
2196                seq_puts(m, "GuC log relay disabled\n");
2197                return;
2198        }
2199
2200        seq_puts(m, "GuC logging stats:\n");
2201
2202        seq_printf(m, "\tRelay full count: %u\n",
2203                   log->relay.full_count);
2204
2205        for (type = GUC_ISR_LOG_BUFFER; type < GUC_MAX_LOG_BUFFER; type++) {
2206                seq_printf(m, "\t%s:\tflush count %10u, overflow count %10u\n",
2207                           stringify_guc_log_type(type),
2208                           log->stats[type].flush,
2209                           log->stats[type].sampled_overflow);
2210        }
2211}
2212
2213static void i915_guc_client_info(struct seq_file *m,
2214                                 struct drm_i915_private *dev_priv,
2215                                 struct intel_guc_client *client)
2216{
2217        struct intel_engine_cs *engine;
2218        enum intel_engine_id id;
2219        u64 tot = 0;
2220
2221        seq_printf(m, "\tPriority %d, GuC stage index: %u, PD offset 0x%x\n",
2222                client->priority, client->stage_id, client->proc_desc_offset);
2223        seq_printf(m, "\tDoorbell id %d, offset: 0x%lx\n",
2224                client->doorbell_id, client->doorbell_offset);
2225
2226        for_each_engine(engine, dev_priv, id) {
2227                u64 submissions = client->submissions[id];
2228                tot += submissions;
2229                seq_printf(m, "\tSubmissions: %llu %s\n",
2230                                submissions, engine->name);
2231        }
2232        seq_printf(m, "\tTotal: %llu\n", tot);
2233}
2234
2235static int i915_guc_info(struct seq_file *m, void *data)
2236{
2237        struct drm_i915_private *dev_priv = node_to_i915(m->private);
2238        const struct intel_guc *guc = &dev_priv->guc;
2239
2240        if (!USES_GUC(dev_priv))
2241                return -ENODEV;
2242
2243        i915_guc_log_info(m, dev_priv);
2244
2245        if (!USES_GUC_SUBMISSION(dev_priv))
2246                return 0;
2247
2248        GEM_BUG_ON(!guc->execbuf_client);
2249
2250        seq_printf(m, "\nDoorbell map:\n");
2251        seq_printf(m, "\t%*pb\n", GUC_NUM_DOORBELLS, guc->doorbell_bitmap);
2252        seq_printf(m, "Doorbell next cacheline: 0x%x\n", guc->db_cacheline);
2253
2254        seq_printf(m, "\nGuC execbuf client @ %p:\n", guc->execbuf_client);
2255        i915_guc_client_info(m, dev_priv, guc->execbuf_client);
2256        if (guc->preempt_client) {
2257                seq_printf(m, "\nGuC preempt client @ %p:\n",
2258                           guc->preempt_client);
2259                i915_guc_client_info(m, dev_priv, guc->preempt_client);
2260        }
2261
2262        /* Add more as required ... */
2263
2264        return 0;
2265}
2266
2267static int i915_guc_stage_pool(struct seq_file *m, void *data)
2268{
2269        struct drm_i915_private *dev_priv = node_to_i915(m->private);
2270        const struct intel_guc *guc = &dev_priv->guc;
2271        struct guc_stage_desc *desc = guc->stage_desc_pool_vaddr;
2272        struct intel_guc_client *client = guc->execbuf_client;
2273        unsigned int tmp;
2274        int index;
2275
2276        if (!USES_GUC_SUBMISSION(dev_priv))
2277                return -ENODEV;
2278
2279        for (index = 0; index < GUC_MAX_STAGE_DESCRIPTORS; index++, desc++) {
2280                struct intel_engine_cs *engine;
2281
2282                if (!(desc->attribute & GUC_STAGE_DESC_ATTR_ACTIVE))
2283                        continue;
2284
2285                seq_printf(m, "GuC stage descriptor %u:\n", index);
2286                seq_printf(m, "\tIndex: %u\n", desc->stage_id);
2287                seq_printf(m, "\tAttribute: 0x%x\n", desc->attribute);
2288                seq_printf(m, "\tPriority: %d\n", desc->priority);
2289                seq_printf(m, "\tDoorbell id: %d\n", desc->db_id);
2290                seq_printf(m, "\tEngines used: 0x%x\n",
2291                           desc->engines_used);
2292                seq_printf(m, "\tDoorbell trigger phy: 0x%llx, cpu: 0x%llx, uK: 0x%x\n",
2293                           desc->db_trigger_phy,
2294                           desc->db_trigger_cpu,
2295                           desc->db_trigger_uk);
2296                seq_printf(m, "\tProcess descriptor: 0x%x\n",
2297                           desc->process_desc);
2298                seq_printf(m, "\tWorkqueue address: 0x%x, size: 0x%x\n",
2299                           desc->wq_addr, desc->wq_size);
2300                seq_putc(m, '\n');
2301
2302                for_each_engine_masked(engine, dev_priv, client->engines, tmp) {
2303                        u32 guc_engine_id = engine->guc_id;
2304                        struct guc_execlist_context *lrc =
2305                                                &desc->lrc[guc_engine_id];
2306
2307                        seq_printf(m, "\t%s LRC:\n", engine->name);
2308                        seq_printf(m, "\t\tContext desc: 0x%x\n",
2309                                   lrc->context_desc);
2310                        seq_printf(m, "\t\tContext id: 0x%x\n", lrc->context_id);
2311                        seq_printf(m, "\t\tLRCA: 0x%x\n", lrc->ring_lrca);
2312                        seq_printf(m, "\t\tRing begin: 0x%x\n", lrc->ring_begin);
2313                        seq_printf(m, "\t\tRing end: 0x%x\n", lrc->ring_end);
2314                        seq_putc(m, '\n');
2315                }
2316        }
2317
2318        return 0;
2319}
2320
2321static int i915_guc_log_dump(struct seq_file *m, void *data)
2322{
2323        struct drm_info_node *node = m->private;
2324        struct drm_i915_private *dev_priv = node_to_i915(node);
2325        bool dump_load_err = !!node->info_ent->data;
2326        struct drm_i915_gem_object *obj = NULL;
2327        u32 *log;
2328        int i = 0;
2329
2330        if (!HAS_GUC(dev_priv))
2331                return -ENODEV;
2332
2333        if (dump_load_err)
2334                obj = dev_priv->guc.load_err_log;
2335        else if (dev_priv->guc.log.vma)
2336                obj = dev_priv->guc.log.vma->obj;
2337
2338        if (!obj)
2339                return 0;
2340
2341        log = i915_gem_object_pin_map(obj, I915_MAP_WC);
2342        if (IS_ERR(log)) {
2343                DRM_DEBUG("Failed to pin object\n");
2344                seq_puts(m, "(log data unaccessible)\n");
2345                return PTR_ERR(log);
2346        }
2347
2348        for (i = 0; i < obj->base.size / sizeof(u32); i += 4)
2349                seq_printf(m, "0x%08x 0x%08x 0x%08x 0x%08x\n",
2350                           *(log + i), *(log + i + 1),
2351                           *(log + i + 2), *(log + i + 3));
2352
2353        seq_putc(m, '\n');
2354
2355        i915_gem_object_unpin_map(obj);
2356
2357        return 0;
2358}
2359
2360static int i915_guc_log_level_get(void *data, u64 *val)
2361{
2362        struct drm_i915_private *dev_priv = data;
2363
2364        if (!USES_GUC(dev_priv))
2365                return -ENODEV;
2366
2367        *val = intel_guc_log_get_level(&dev_priv->guc.log);
2368
2369        return 0;
2370}
2371
2372static int i915_guc_log_level_set(void *data, u64 val)
2373{
2374        struct drm_i915_private *dev_priv = data;
2375
2376        if (!USES_GUC(dev_priv))
2377                return -ENODEV;
2378
2379        return intel_guc_log_set_level(&dev_priv->guc.log, val);
2380}
2381
2382DEFINE_SIMPLE_ATTRIBUTE(i915_guc_log_level_fops,
2383                        i915_guc_log_level_get, i915_guc_log_level_set,
2384                        "%lld\n");
2385
2386static int i915_guc_log_relay_open(struct inode *inode, struct file *file)
2387{
2388        struct drm_i915_private *dev_priv = inode->i_private;
2389
2390        if (!USES_GUC(dev_priv))
2391                return -ENODEV;
2392
2393        file->private_data = &dev_priv->guc.log;
2394
2395        return intel_guc_log_relay_open(&dev_priv->guc.log);
2396}
2397
2398static ssize_t
2399i915_guc_log_relay_write(struct file *filp,
2400                         const char __user *ubuf,
2401                         size_t cnt,
2402                         loff_t *ppos)
2403{
2404        struct intel_guc_log *log = filp->private_data;
2405
2406        intel_guc_log_relay_flush(log);
2407
2408        return cnt;
2409}
2410
2411static int i915_guc_log_relay_release(struct inode *inode, struct file *file)
2412{
2413        struct drm_i915_private *dev_priv = inode->i_private;
2414
2415        intel_guc_log_relay_close(&dev_priv->guc.log);
2416
2417        return 0;
2418}
2419
2420static const struct file_operations i915_guc_log_relay_fops = {
2421        .owner = THIS_MODULE,
2422        .open = i915_guc_log_relay_open,
2423        .write = i915_guc_log_relay_write,
2424        .release = i915_guc_log_relay_release,
2425};
2426
2427static int i915_psr_sink_status_show(struct seq_file *m, void *data)
2428{
2429        u8 val;
2430        static const char * const sink_status[] = {
2431                "inactive",
2432                "transition to active, capture and display",
2433                "active, display from RFB",
2434                "active, capture and display on sink device timings",
2435                "transition to inactive, capture and display, timing re-sync",
2436                "reserved",
2437                "reserved",
2438                "sink internal error",
2439        };
2440        struct drm_connector *connector = m->private;
2441        struct drm_i915_private *dev_priv = to_i915(connector->dev);
2442        struct intel_dp *intel_dp =
2443                enc_to_intel_dp(&intel_attached_encoder(connector)->base);
2444        int ret;
2445
2446        if (!CAN_PSR(dev_priv)) {
2447                seq_puts(m, "PSR Unsupported\n");
2448                return -ENODEV;
2449        }
2450
2451        if (connector->status != connector_status_connected)
2452                return -ENODEV;
2453
2454        ret = drm_dp_dpcd_readb(&intel_dp->aux, DP_PSR_STATUS, &val);
2455
2456        if (ret == 1) {
2457                const char *str = "unknown";
2458
2459                val &= DP_PSR_SINK_STATE_MASK;
2460                if (val < ARRAY_SIZE(sink_status))
2461                        str = sink_status[val];
2462                seq_printf(m, "Sink PSR status: 0x%x [%s]\n", val, str);
2463        } else {
2464                return ret;
2465        }
2466
2467        return 0;
2468}
2469DEFINE_SHOW_ATTRIBUTE(i915_psr_sink_status);
2470
2471static void
2472psr_source_status(struct drm_i915_private *dev_priv, struct seq_file *m)
2473{
2474        u32 val, status_val;
2475        const char *status = "unknown";
2476
2477        if (dev_priv->psr.psr2_enabled) {
2478                static const char * const live_status[] = {
2479                        "IDLE",
2480                        "CAPTURE",
2481                        "CAPTURE_FS",
2482                        "SLEEP",
2483                        "BUFON_FW",
2484                        "ML_UP",
2485                        "SU_STANDBY",
2486                        "FAST_SLEEP",
2487                        "DEEP_SLEEP",
2488                        "BUF_ON",
2489                        "TG_ON"
2490                };
2491                val = I915_READ(EDP_PSR2_STATUS);
2492                status_val = (val & EDP_PSR2_STATUS_STATE_MASK) >>
2493                              EDP_PSR2_STATUS_STATE_SHIFT;
2494                if (status_val < ARRAY_SIZE(live_status))
2495                        status = live_status[status_val];
2496        } else {
2497                static const char * const live_status[] = {
2498                        "IDLE",
2499                        "SRDONACK",
2500                        "SRDENT",
2501                        "BUFOFF",
2502                        "BUFON",
2503                        "AUXACK",
2504                        "SRDOFFACK",
2505                        "SRDENT_ON",
2506                };
2507                val = I915_READ(EDP_PSR_STATUS);
2508                status_val = (val & EDP_PSR_STATUS_STATE_MASK) >>
2509                              EDP_PSR_STATUS_STATE_SHIFT;
2510                if (status_val < ARRAY_SIZE(live_status))
2511                        status = live_status[status_val];
2512        }
2513
2514        seq_printf(m, "Source PSR status: %s [0x%08x]\n", status, val);
2515}
2516
2517static int i915_edp_psr_status(struct seq_file *m, void *data)
2518{
2519        struct drm_i915_private *dev_priv = node_to_i915(m->private);
2520        struct i915_psr *psr = &dev_priv->psr;
2521        intel_wakeref_t wakeref;
2522        const char *status;
2523        bool enabled;
2524        u32 val;
2525
2526        if (!HAS_PSR(dev_priv))
2527                return -ENODEV;
2528
2529        seq_printf(m, "Sink support: %s", yesno(psr->sink_support));
2530        if (psr->dp)
2531                seq_printf(m, " [0x%02x]", psr->dp->psr_dpcd[0]);
2532        seq_puts(m, "\n");
2533
2534        if (!psr->sink_support)
2535                return 0;
2536
2537        wakeref = intel_runtime_pm_get(dev_priv);
2538        mutex_lock(&psr->lock);
2539
2540        if (psr->enabled)
2541                status = psr->psr2_enabled ? "PSR2 enabled" : "PSR1 enabled";
2542        else
2543                status = "disabled";
2544        seq_printf(m, "PSR mode: %s\n", status);
2545
2546        if (!psr->enabled)
2547                goto unlock;
2548
2549        if (psr->psr2_enabled) {
2550                val = I915_READ(EDP_PSR2_CTL);
2551                enabled = val & EDP_PSR2_ENABLE;
2552        } else {
2553                val = I915_READ(EDP_PSR_CTL);
2554                enabled = val & EDP_PSR_ENABLE;
2555        }
2556        seq_printf(m, "Source PSR ctl: %s [0x%08x]\n",
2557                   enableddisabled(enabled), val);
2558        psr_source_status(dev_priv, m);
2559        seq_printf(m, "Busy frontbuffer bits: 0x%08x\n",
2560                   psr->busy_frontbuffer_bits);
2561
2562        /*
2563         * SKL+ Perf counter is reset to 0 everytime DC state is entered
2564         */
2565        if (IS_HASWELL(dev_priv) || IS_BROADWELL(dev_priv)) {
2566                val = I915_READ(EDP_PSR_PERF_CNT) & EDP_PSR_PERF_CNT_MASK;
2567                seq_printf(m, "Performance counter: %u\n", val);
2568        }
2569
2570        if (psr->debug & I915_PSR_DEBUG_IRQ) {
2571                seq_printf(m, "Last attempted entry at: %lld\n",
2572                           psr->last_entry_attempt);
2573                seq_printf(m, "Last exit at: %lld\n", psr->last_exit);
2574        }
2575
2576        if (psr->psr2_enabled) {
2577                u32 su_frames_val[3];
2578                int frame;
2579
2580                /*
2581                 * Reading all 3 registers before hand to minimize crossing a
2582                 * frame boundary between register reads
2583                 */
2584                for (frame = 0; frame < PSR2_SU_STATUS_FRAMES; frame += 3)
2585                        su_frames_val[frame / 3] = I915_READ(PSR2_SU_STATUS(frame));
2586
2587                seq_puts(m, "Frame:\tPSR2 SU blocks:\n");
2588
2589                for (frame = 0; frame < PSR2_SU_STATUS_FRAMES; frame++) {
2590                        u32 su_blocks;
2591
2592                        su_blocks = su_frames_val[frame / 3] &
2593                                    PSR2_SU_STATUS_MASK(frame);
2594                        su_blocks = su_blocks >> PSR2_SU_STATUS_SHIFT(frame);
2595                        seq_printf(m, "%d\t%d\n", frame, su_blocks);
2596                }
2597        }
2598
2599unlock:
2600        mutex_unlock(&psr->lock);
2601        intel_runtime_pm_put(dev_priv, wakeref);
2602
2603        return 0;
2604}
2605
2606static int
2607i915_edp_psr_debug_set(void *data, u64 val)
2608{
2609        struct drm_i915_private *dev_priv = data;
2610        struct drm_modeset_acquire_ctx ctx;
2611        intel_wakeref_t wakeref;
2612        int ret;
2613
2614        if (!CAN_PSR(dev_priv))
2615                return -ENODEV;
2616
2617        DRM_DEBUG_KMS("Setting PSR debug to %llx\n", val);
2618
2619        wakeref = intel_runtime_pm_get(dev_priv);
2620
2621        drm_modeset_acquire_init(&ctx, DRM_MODESET_ACQUIRE_INTERRUPTIBLE);
2622
2623retry:
2624        ret = intel_psr_set_debugfs_mode(dev_priv, &ctx, val);
2625        if (ret == -EDEADLK) {
2626                ret = drm_modeset_backoff(&ctx);
2627                if (!ret)
2628                        goto retry;
2629        }
2630
2631        drm_modeset_drop_locks(&ctx);
2632        drm_modeset_acquire_fini(&ctx);
2633
2634        intel_runtime_pm_put(dev_priv, wakeref);
2635
2636        return ret;
2637}
2638
2639static int
2640i915_edp_psr_debug_get(void *data, u64 *val)
2641{
2642        struct drm_i915_private *dev_priv = data;
2643
2644        if (!CAN_PSR(dev_priv))
2645                return -ENODEV;
2646
2647        *val = READ_ONCE(dev_priv->psr.debug);
2648        return 0;
2649}
2650
2651DEFINE_SIMPLE_ATTRIBUTE(i915_edp_psr_debug_fops,
2652                        i915_edp_psr_debug_get, i915_edp_psr_debug_set,
2653                        "%llu\n");
2654
2655static int i915_energy_uJ(struct seq_file *m, void *data)
2656{
2657        struct drm_i915_private *dev_priv = node_to_i915(m->private);
2658        unsigned long long power;
2659        intel_wakeref_t wakeref;
2660        u32 units;
2661
2662        if (INTEL_GEN(dev_priv) < 6)
2663                return -ENODEV;
2664
2665        if (rdmsrl_safe(MSR_RAPL_POWER_UNIT, &power))
2666                return -ENODEV;
2667
2668        units = (power & 0x1f00) >> 8;
2669        with_intel_runtime_pm(dev_priv, wakeref)
2670                power = I915_READ(MCH_SECP_NRG_STTS);
2671
2672        power = (1000000 * power) >> units; /* convert to uJ */
2673        seq_printf(m, "%llu", power);
2674
2675        return 0;
2676}
2677
2678static int i915_runtime_pm_status(struct seq_file *m, void *unused)
2679{
2680        struct drm_i915_private *dev_priv = node_to_i915(m->private);
2681        struct pci_dev *pdev = dev_priv->drm.pdev;
2682
2683        if (!HAS_RUNTIME_PM(dev_priv))
2684                seq_puts(m, "Runtime power management not supported\n");
2685
2686        seq_printf(m, "Runtime power status: %s\n",
2687                   enableddisabled(!dev_priv->power_domains.wakeref));
2688
2689        seq_printf(m, "GPU idle: %s (epoch %u)\n",
2690                   yesno(!dev_priv->gt.awake), dev_priv->gt.epoch);
2691        seq_printf(m, "IRQs disabled: %s\n",
2692                   yesno(!intel_irqs_enabled(dev_priv)));
2693#ifdef CONFIG_PM
2694        seq_printf(m, "Usage count: %d\n",
2695                   atomic_read(&dev_priv->drm.dev->power.usage_count));
2696#else
2697        seq_printf(m, "Device Power Management (CONFIG_PM) disabled\n");
2698#endif
2699        seq_printf(m, "PCI device power state: %s [%d]\n",
2700                   pci_power_name(pdev->current_state),
2701                   pdev->current_state);
2702
2703        if (IS_ENABLED(CONFIG_DRM_I915_DEBUG_RUNTIME_PM)) {
2704                struct drm_printer p = drm_seq_file_printer(m);
2705
2706                print_intel_runtime_pm_wakeref(dev_priv, &p);
2707        }
2708
2709        return 0;
2710}
2711
2712static int i915_power_domain_info(struct seq_file *m, void *unused)
2713{
2714        struct drm_i915_private *dev_priv = node_to_i915(m->private);
2715        struct i915_power_domains *power_domains = &dev_priv->power_domains;
2716        int i;
2717
2718        mutex_lock(&power_domains->lock);
2719
2720        seq_printf(m, "%-25s %s\n", "Power well/domain", "Use count");
2721        for (i = 0; i < power_domains->power_well_count; i++) {
2722                struct i915_power_well *power_well;
2723                enum intel_display_power_domain power_domain;
2724
2725                power_well = &power_domains->power_wells[i];
2726                seq_printf(m, "%-25s %d\n", power_well->desc->name,
2727                           power_well->count);
2728
2729                for_each_power_domain(power_domain, power_well->desc->domains)
2730                        seq_printf(m, "  %-23s %d\n",
2731                                 intel_display_power_domain_str(power_domain),
2732                                 power_domains->domain_use_count[power_domain]);
2733        }
2734
2735        mutex_unlock(&power_domains->lock);
2736
2737        return 0;
2738}
2739
2740static int i915_dmc_info(struct seq_file *m, void *unused)
2741{
2742        struct drm_i915_private *dev_priv = node_to_i915(m->private);
2743        intel_wakeref_t wakeref;
2744        struct intel_csr *csr;
2745
2746        if (!HAS_CSR(dev_priv))
2747                return -ENODEV;
2748
2749        csr = &dev_priv->csr;
2750
2751        wakeref = intel_runtime_pm_get(dev_priv);
2752
2753        seq_printf(m, "fw loaded: %s\n", yesno(csr->dmc_payload != NULL));
2754        seq_printf(m, "path: %s\n", csr->fw_path);
2755
2756        if (!csr->dmc_payload)
2757                goto out;
2758
2759        seq_printf(m, "version: %d.%d\n", CSR_VERSION_MAJOR(csr->version),
2760                   CSR_VERSION_MINOR(csr->version));
2761
2762        if (WARN_ON(INTEL_GEN(dev_priv) > 11))
2763                goto out;
2764
2765        seq_printf(m, "DC3 -> DC5 count: %d\n",
2766                   I915_READ(IS_BROXTON(dev_priv) ? BXT_CSR_DC3_DC5_COUNT :
2767                                                    SKL_CSR_DC3_DC5_COUNT));
2768        if (!IS_GEN9_LP(dev_priv))
2769                seq_printf(m, "DC5 -> DC6 count: %d\n",
2770                           I915_READ(SKL_CSR_DC5_DC6_COUNT));
2771
2772out:
2773        seq_printf(m, "program base: 0x%08x\n", I915_READ(CSR_PROGRAM(0)));
2774        seq_printf(m, "ssp base: 0x%08x\n", I915_READ(CSR_SSP_BASE));
2775        seq_printf(m, "htp: 0x%08x\n", I915_READ(CSR_HTP_SKL));
2776
2777        intel_runtime_pm_put(dev_priv, wakeref);
2778
2779        return 0;
2780}
2781
2782static void intel_seq_print_mode(struct seq_file *m, int tabs,
2783                                 struct drm_display_mode *mode)
2784{
2785        int i;
2786
2787        for (i = 0; i < tabs; i++)
2788                seq_putc(m, '\t');
2789
2790        seq_printf(m, DRM_MODE_FMT "\n", DRM_MODE_ARG(mode));
2791}
2792
2793static void intel_encoder_info(struct seq_file *m,
2794                               struct intel_crtc *intel_crtc,
2795                               struct intel_encoder *intel_encoder)
2796{
2797        struct drm_i915_private *dev_priv = node_to_i915(m->private);
2798        struct drm_device *dev = &dev_priv->drm;
2799        struct drm_crtc *crtc = &intel_crtc->base;
2800        struct intel_connector *intel_connector;
2801        struct drm_encoder *encoder;
2802
2803        encoder = &intel_encoder->base;
2804        seq_printf(m, "\tencoder %d: type: %s, connectors:\n",
2805                   encoder->base.id, encoder->name);
2806        for_each_connector_on_encoder(dev, encoder, intel_connector) {
2807                struct drm_connector *connector = &intel_connector->base;
2808                seq_printf(m, "\t\tconnector %d: type: %s, status: %s",
2809                           connector->base.id,
2810                           connector->name,
2811                           drm_get_connector_status_name(connector->status));
2812                if (connector->status == connector_status_connected) {
2813                        struct drm_display_mode *mode = &crtc->mode;
2814                        seq_printf(m, ", mode:\n");
2815                        intel_seq_print_mode(m, 2, mode);
2816                } else {
2817                        seq_putc(m, '\n');
2818                }
2819        }
2820}
2821
2822static void intel_crtc_info(struct seq_file *m, struct intel_crtc *intel_crtc)
2823{
2824        struct drm_i915_private *dev_priv = node_to_i915(m->private);
2825        struct drm_device *dev = &dev_priv->drm;
2826        struct drm_crtc *crtc = &intel_crtc->base;
2827        struct intel_encoder *intel_encoder;
2828        struct drm_plane_state *plane_state = crtc->primary->state;
2829        struct drm_framebuffer *fb = plane_state->fb;
2830
2831        if (fb)
2832                seq_printf(m, "\tfb: %d, pos: %dx%d, size: %dx%d\n",
2833                           fb->base.id, plane_state->src_x >> 16,
2834                           plane_state->src_y >> 16, fb->width, fb->height);
2835        else
2836                seq_puts(m, "\tprimary plane disabled\n");
2837        for_each_encoder_on_crtc(dev, crtc, intel_encoder)
2838                intel_encoder_info(m, intel_crtc, intel_encoder);
2839}
2840
2841static void intel_panel_info(struct seq_file *m, struct intel_panel *panel)
2842{
2843        struct drm_display_mode *mode = panel->fixed_mode;
2844
2845        seq_printf(m, "\tfixed mode:\n");
2846        intel_seq_print_mode(m, 2, mode);
2847}
2848
2849static void intel_dp_info(struct seq_file *m,
2850                          struct intel_connector *intel_connector)
2851{
2852        struct intel_encoder *intel_encoder = intel_connector->encoder;
2853        struct intel_dp *intel_dp = enc_to_intel_dp(&intel_encoder->base);
2854
2855        seq_printf(m, "\tDPCD rev: %x\n", intel_dp->dpcd[DP_DPCD_REV]);
2856        seq_printf(m, "\taudio support: %s\n", yesno(intel_dp->has_audio));
2857        if (intel_connector->base.connector_type == DRM_MODE_CONNECTOR_eDP)
2858                intel_panel_info(m, &intel_connector->panel);
2859
2860        drm_dp_downstream_debug(m, intel_dp->dpcd, intel_dp->downstream_ports,
2861                                &intel_dp->aux);
2862}
2863
2864static void intel_dp_mst_info(struct seq_file *m,
2865                          struct intel_connector *intel_connector)
2866{
2867        struct intel_encoder *intel_encoder = intel_connector->encoder;
2868        struct intel_dp_mst_encoder *intel_mst =
2869                enc_to_mst(&intel_encoder->base);
2870        struct intel_digital_port *intel_dig_port = intel_mst->primary;
2871        struct intel_dp *intel_dp = &intel_dig_port->dp;
2872        bool has_audio = drm_dp_mst_port_has_audio(&intel_dp->mst_mgr,
2873                                        intel_connector->port);
2874
2875        seq_printf(m, "\taudio support: %s\n", yesno(has_audio));
2876}
2877
2878static void intel_hdmi_info(struct seq_file *m,
2879                            struct intel_connector *intel_connector)
2880{
2881        struct intel_encoder *intel_encoder = intel_connector->encoder;
2882        struct intel_hdmi *intel_hdmi = enc_to_intel_hdmi(&intel_encoder->base);
2883
2884        seq_printf(m, "\taudio support: %s\n", yesno(intel_hdmi->has_audio));
2885}
2886
2887static void intel_lvds_info(struct seq_file *m,
2888                            struct intel_connector *intel_connector)
2889{
2890        intel_panel_info(m, &intel_connector->panel);
2891}
2892
2893static void intel_connector_info(struct seq_file *m,
2894                                 struct drm_connector *connector)
2895{
2896        struct intel_connector *intel_connector = to_intel_connector(connector);
2897        struct intel_encoder *intel_encoder = intel_connector->encoder;
2898        struct drm_display_mode *mode;
2899
2900        seq_printf(m, "connector %d: type %s, status: %s\n",
2901                   connector->base.id, connector->name,
2902                   drm_get_connector_status_name(connector->status));
2903
2904        if (connector->status == connector_status_disconnected)
2905                return;
2906
2907        seq_printf(m, "\tname: %s\n", connector->display_info.name);
2908        seq_printf(m, "\tphysical dimensions: %dx%dmm\n",
2909                   connector->display_info.width_mm,
2910                   connector->display_info.height_mm);
2911        seq_printf(m, "\tsubpixel order: %s\n",
2912                   drm_get_subpixel_order_name(connector->display_info.subpixel_order));
2913        seq_printf(m, "\tCEA rev: %d\n", connector->display_info.cea_rev);
2914
2915        if (!intel_encoder)
2916                return;
2917
2918        switch (connector->connector_type) {
2919        case DRM_MODE_CONNECTOR_DisplayPort:
2920        case DRM_MODE_CONNECTOR_eDP:
2921                if (intel_encoder->type == INTEL_OUTPUT_DP_MST)
2922                        intel_dp_mst_info(m, intel_connector);
2923                else
2924                        intel_dp_info(m, intel_connector);
2925                break;
2926        case DRM_MODE_CONNECTOR_LVDS:
2927                if (intel_encoder->type == INTEL_OUTPUT_LVDS)
2928                        intel_lvds_info(m, intel_connector);
2929                break;
2930        case DRM_MODE_CONNECTOR_HDMIA:
2931                if (intel_encoder->type == INTEL_OUTPUT_HDMI ||
2932                    intel_encoder->type == INTEL_OUTPUT_DDI)
2933                        intel_hdmi_info(m, intel_connector);
2934                break;
2935        default:
2936                break;
2937        }
2938
2939        seq_printf(m, "\tmodes:\n");
2940        list_for_each_entry(mode, &connector->modes, head)
2941                intel_seq_print_mode(m, 2, mode);
2942}
2943
2944static const char *plane_type(enum drm_plane_type type)
2945{
2946        switch (type) {
2947        case DRM_PLANE_TYPE_OVERLAY:
2948                return "OVL";
2949        case DRM_PLANE_TYPE_PRIMARY:
2950                return "PRI";
2951        case DRM_PLANE_TYPE_CURSOR:
2952                return "CUR";
2953        /*
2954         * Deliberately omitting default: to generate compiler warnings
2955         * when a new drm_plane_type gets added.
2956         */
2957        }
2958
2959        return "unknown";
2960}
2961
2962static void plane_rotation(char *buf, size_t bufsize, unsigned int rotation)
2963{
2964        /*
2965         * According to doc only one DRM_MODE_ROTATE_ is allowed but this
2966         * will print them all to visualize if the values are misused
2967         */
2968        snprintf(buf, bufsize,
2969                 "%s%s%s%s%s%s(0x%08x)",
2970                 (rotation & DRM_MODE_ROTATE_0) ? "0 " : "",
2971                 (rotation & DRM_MODE_ROTATE_90) ? "90 " : "",
2972                 (rotation & DRM_MODE_ROTATE_180) ? "180 " : "",
2973                 (rotation & DRM_MODE_ROTATE_270) ? "270 " : "",
2974                 (rotation & DRM_MODE_REFLECT_X) ? "FLIPX " : "",
2975                 (rotation & DRM_MODE_REFLECT_Y) ? "FLIPY " : "",
2976                 rotation);
2977}
2978
2979static void intel_plane_info(struct seq_file *m, struct intel_crtc *intel_crtc)
2980{
2981        struct drm_i915_private *dev_priv = node_to_i915(m->private);
2982        struct drm_device *dev = &dev_priv->drm;
2983        struct intel_plane *intel_plane;
2984
2985        for_each_intel_plane_on_crtc(dev, intel_crtc, intel_plane) {
2986                struct drm_plane_state *state;
2987                struct drm_plane *plane = &intel_plane->base;
2988                struct drm_format_name_buf format_name;
2989                char rot_str[48];
2990
2991                if (!plane->state) {
2992                        seq_puts(m, "plane->state is NULL!\n");
2993                        continue;
2994                }
2995
2996                state = plane->state;
2997
2998                if (state->fb) {
2999                        drm_get_format_name(state->fb->format->format,
3000                                            &format_name);
3001                } else {
3002                        sprintf(format_name.str, "N/A");
3003                }
3004
3005                plane_rotation(rot_str, sizeof(rot_str), state->rotation);
3006
3007                seq_printf(m, "\t--Plane id %d: type=%s, crtc_pos=%4dx%4d, crtc_size=%4dx%4d, src_pos=%d.%04ux%d.%04u, src_size=%d.%04ux%d.%04u, format=%s, rotation=%s\n",
3008                           plane->base.id,
3009                           plane_type(intel_plane->base.type),
3010                           state->crtc_x, state->crtc_y,
3011                           state->crtc_w, state->crtc_h,
3012                           (state->src_x >> 16),
3013                           ((state->src_x & 0xffff) * 15625) >> 10,
3014                           (state->src_y >> 16),
3015                           ((state->src_y & 0xffff) * 15625) >> 10,
3016                           (state->src_w >> 16),
3017                           ((state->src_w & 0xffff) * 15625) >> 10,
3018                           (state->src_h >> 16),
3019                           ((state->src_h & 0xffff) * 15625) >> 10,
3020                           format_name.str,
3021                           rot_str);
3022        }
3023}
3024
3025static void intel_scaler_info(struct seq_file *m, struct intel_crtc *intel_crtc)
3026{
3027        struct intel_crtc_state *pipe_config;
3028        int num_scalers = intel_crtc->num_scalers;
3029        int i;
3030
3031        pipe_config = to_intel_crtc_state(intel_crtc->base.state);
3032
3033        /* Not all platformas have a scaler */
3034        if (num_scalers) {
3035                seq_printf(m, "\tnum_scalers=%d, scaler_users=%x scaler_id=%d",
3036                           num_scalers,
3037                           pipe_config->scaler_state.scaler_users,
3038                           pipe_config->scaler_state.scaler_id);
3039
3040                for (i = 0; i < num_scalers; i++) {
3041                        struct intel_scaler *sc =
3042                                        &pipe_config->scaler_state.scalers[i];
3043
3044                        seq_printf(m, ", scalers[%d]: use=%s, mode=%x",
3045                                   i, yesno(sc->in_use), sc->mode);
3046                }
3047                seq_puts(m, "\n");
3048        } else {
3049                seq_puts(m, "\tNo scalers available on this platform\n");
3050        }
3051}
3052
3053static int i915_display_info(struct seq_file *m, void *unused)
3054{
3055        struct drm_i915_private *dev_priv = node_to_i915(m->private);
3056        struct drm_device *dev = &dev_priv->drm;
3057        struct intel_crtc *crtc;
3058        struct drm_connector *connector;
3059        struct drm_connector_list_iter conn_iter;
3060        intel_wakeref_t wakeref;
3061
3062        wakeref = intel_runtime_pm_get(dev_priv);
3063
3064        seq_printf(m, "CRTC info\n");
3065        seq_printf(m, "---------\n");
3066        for_each_intel_crtc(dev, crtc) {
3067                struct intel_crtc_state *pipe_config;
3068
3069                drm_modeset_lock(&crtc->base.mutex, NULL);
3070                pipe_config = to_intel_crtc_state(crtc->base.state);
3071
3072                seq_printf(m, "CRTC %d: pipe: %c, active=%s, (size=%dx%d), dither=%s, bpp=%d\n",
3073                           crtc->base.base.id, pipe_name(crtc->pipe),
3074                           yesno(pipe_config->base.active),
3075                           pipe_config->pipe_src_w, pipe_config->pipe_src_h,
3076                           yesno(pipe_config->dither), pipe_config->pipe_bpp);
3077
3078                if (pipe_config->base.active) {
3079                        struct intel_plane *cursor =
3080                                to_intel_plane(crtc->base.cursor);
3081
3082                        intel_crtc_info(m, crtc);
3083
3084                        seq_printf(m, "\tcursor visible? %s, position (%d, %d), size %dx%d, addr 0x%08x\n",
3085                                   yesno(cursor->base.state->visible),
3086                                   cursor->base.state->crtc_x,
3087                                   cursor->base.state->crtc_y,
3088                                   cursor->base.state->crtc_w,
3089                                   cursor->base.state->crtc_h,
3090                                   cursor->cursor.base);
3091                        intel_scaler_info(m, crtc);
3092                        intel_plane_info(m, crtc);
3093                }
3094
3095                seq_printf(m, "\tunderrun reporting: cpu=%s pch=%s \n",
3096                           yesno(!crtc->cpu_fifo_underrun_disabled),
3097                           yesno(!crtc->pch_fifo_underrun_disabled));
3098                drm_modeset_unlock(&crtc->base.mutex);
3099        }
3100
3101        seq_printf(m, "\n");
3102        seq_printf(m, "Connector info\n");
3103        seq_printf(m, "--------------\n");
3104        mutex_lock(&dev->mode_config.mutex);
3105        drm_connector_list_iter_begin(dev, &conn_iter);
3106        drm_for_each_connector_iter(connector, &conn_iter)
3107                intel_connector_info(m, connector);
3108        drm_connector_list_iter_end(&conn_iter);
3109        mutex_unlock(&dev->mode_config.mutex);
3110
3111        intel_runtime_pm_put(dev_priv, wakeref);
3112
3113        return 0;
3114}
3115
3116static int i915_engine_info(struct seq_file *m, void *unused)
3117{
3118        struct drm_i915_private *dev_priv = node_to_i915(m->private);
3119        struct intel_engine_cs *engine;
3120        intel_wakeref_t wakeref;
3121        enum intel_engine_id id;
3122        struct drm_printer p;
3123
3124        wakeref = intel_runtime_pm_get(dev_priv);
3125
3126        seq_printf(m, "GT awake? %s (epoch %u)\n",
3127                   yesno(dev_priv->gt.awake), dev_priv->gt.epoch);
3128        seq_printf(m, "Global active requests: %d\n",
3129                   dev_priv->gt.active_requests);
3130        seq_printf(m, "CS timestamp frequency: %u kHz\n",
3131                   RUNTIME_INFO(dev_priv)->cs_timestamp_frequency_khz);
3132
3133        p = drm_seq_file_printer(m);
3134        for_each_engine(engine, dev_priv, id)
3135                intel_engine_dump(engine, &p, "%s\n", engine->name);
3136
3137        intel_runtime_pm_put(dev_priv, wakeref);
3138
3139        return 0;
3140}
3141
3142static int i915_rcs_topology(struct seq_file *m, void *unused)
3143{
3144        struct drm_i915_private *dev_priv = node_to_i915(m->private);
3145        struct drm_printer p = drm_seq_file_printer(m);
3146
3147        intel_device_info_dump_topology(&RUNTIME_INFO(dev_priv)->sseu, &p);
3148
3149        return 0;
3150}
3151
3152static int i915_shrinker_info(struct seq_file *m, void *unused)
3153{
3154        struct drm_i915_private *i915 = node_to_i915(m->private);
3155
3156        seq_printf(m, "seeks = %d\n", i915->mm.shrinker.seeks);
3157        seq_printf(m, "batch = %lu\n", i915->mm.shrinker.batch);
3158
3159        return 0;
3160}
3161
3162static int i915_shared_dplls_info(struct seq_file *m, void *unused)
3163{
3164        struct drm_i915_private *dev_priv = node_to_i915(m->private);
3165        struct drm_device *dev = &dev_priv->drm;
3166        int i;
3167
3168        drm_modeset_lock_all(dev);
3169        for (i = 0; i < dev_priv->num_shared_dpll; i++) {
3170                struct intel_shared_dpll *pll = &dev_priv->shared_dplls[i];
3171
3172                seq_printf(m, "DPLL%i: %s, id: %i\n", i, pll->info->name,
3173                           pll->info->id);
3174                seq_printf(m, " crtc_mask: 0x%08x, active: 0x%x, on: %s\n",
3175                           pll->state.crtc_mask, pll->active_mask, yesno(pll->on));
3176                seq_printf(m, " tracked hardware state:\n");
3177                seq_printf(m, " dpll:    0x%08x\n", pll->state.hw_state.dpll);
3178                seq_printf(m, " dpll_md: 0x%08x\n",
3179                           pll->state.hw_state.dpll_md);
3180                seq_printf(m, " fp0:     0x%08x\n", pll->state.hw_state.fp0);
3181                seq_printf(m, " fp1:     0x%08x\n", pll->state.hw_state.fp1);
3182                seq_printf(m, " wrpll:   0x%08x\n", pll->state.hw_state.wrpll);
3183                seq_printf(m, " cfgcr0:  0x%08x\n", pll->state.hw_state.cfgcr0);
3184                seq_printf(m, " cfgcr1:  0x%08x\n", pll->state.hw_state.cfgcr1);
3185                seq_printf(m, " mg_refclkin_ctl:        0x%08x\n",
3186                           pll->state.hw_state.mg_refclkin_ctl);
3187                seq_printf(m, " mg_clktop2_coreclkctl1: 0x%08x\n",
3188                           pll->state.hw_state.mg_clktop2_coreclkctl1);
3189                seq_printf(m, " mg_clktop2_hsclkctl:    0x%08x\n",
3190                           pll->state.hw_state.mg_clktop2_hsclkctl);
3191                seq_printf(m, " mg_pll_div0:  0x%08x\n",
3192                           pll->state.hw_state.mg_pll_div0);
3193                seq_printf(m, " mg_pll_div1:  0x%08x\n",
3194                           pll->state.hw_state.mg_pll_div1);
3195                seq_printf(m, " mg_pll_lf:    0x%08x\n",
3196                           pll->state.hw_state.mg_pll_lf);
3197                seq_printf(m, " mg_pll_frac_lock: 0x%08x\n",
3198                           pll->state.hw_state.mg_pll_frac_lock);
3199                seq_printf(m, " mg_pll_ssc:   0x%08x\n",
3200                           pll->state.hw_state.mg_pll_ssc);
3201                seq_printf(m, " mg_pll_bias:  0x%08x\n",
3202                           pll->state.hw_state.mg_pll_bias);
3203                seq_printf(m, " mg_pll_tdc_coldst_bias: 0x%08x\n",
3204                           pll->state.hw_state.mg_pll_tdc_coldst_bias);
3205        }
3206        drm_modeset_unlock_all(dev);
3207
3208        return 0;
3209}
3210
3211static int i915_wa_registers(struct seq_file *m, void *unused)
3212{
3213        struct drm_i915_private *i915 = node_to_i915(m->private);
3214        const struct i915_wa_list *wal = &i915->engine[RCS]->ctx_wa_list;
3215        struct i915_wa *wa;
3216        unsigned int i;
3217
3218        seq_printf(m, "Workarounds applied: %u\n", wal->count);
3219        for (i = 0, wa = wal->list; i < wal->count; i++, wa++)
3220                seq_printf(m, "0x%X: 0x%08X, mask: 0x%08X\n",
3221                           i915_mmio_reg_offset(wa->reg), wa->val, wa->mask);
3222
3223        return 0;
3224}
3225
3226static int i915_ipc_status_show(struct seq_file *m, void *data)
3227{
3228        struct drm_i915_private *dev_priv = m->private;
3229
3230        seq_printf(m, "Isochronous Priority Control: %s\n",
3231                        yesno(dev_priv->ipc_enabled));
3232        return 0;
3233}
3234
3235static int i915_ipc_status_open(struct inode *inode, struct file *file)
3236{
3237        struct drm_i915_private *dev_priv = inode->i_private;
3238
3239        if (!HAS_IPC(dev_priv))
3240                return -ENODEV;
3241
3242        return single_open(file, i915_ipc_status_show, dev_priv);
3243}
3244
3245static ssize_t i915_ipc_status_write(struct file *file, const char __user *ubuf,
3246                                     size_t len, loff_t *offp)
3247{
3248        struct seq_file *m = file->private_data;
3249        struct drm_i915_private *dev_priv = m->private;
3250        intel_wakeref_t wakeref;
3251        bool enable;
3252        int ret;
3253
3254        ret = kstrtobool_from_user(ubuf, len, &enable);
3255        if (ret < 0)
3256                return ret;
3257
3258        with_intel_runtime_pm(dev_priv, wakeref) {
3259                if (!dev_priv->ipc_enabled && enable)
3260                        DRM_INFO("Enabling IPC: WM will be proper only after next commit\n");
3261                dev_priv->wm.distrust_bios_wm = true;
3262                dev_priv->ipc_enabled = enable;
3263                intel_enable_ipc(dev_priv);
3264        }
3265
3266        return len;
3267}
3268
3269static const struct file_operations i915_ipc_status_fops = {
3270        .owner = THIS_MODULE,
3271        .open = i915_ipc_status_open,
3272        .read = seq_read,
3273        .llseek = seq_lseek,
3274        .release = single_release,
3275        .write = i915_ipc_status_write
3276};
3277
3278static int i915_ddb_info(struct seq_file *m, void *unused)
3279{
3280        struct drm_i915_private *dev_priv = node_to_i915(m->private);
3281        struct drm_device *dev = &dev_priv->drm;
3282        struct skl_ddb_entry *entry;
3283        struct intel_crtc *crtc;
3284
3285        if (INTEL_GEN(dev_priv) < 9)
3286                return -ENODEV;
3287
3288        drm_modeset_lock_all(dev);
3289
3290        seq_printf(m, "%-15s%8s%8s%8s\n", "", "Start", "End", "Size");
3291
3292        for_each_intel_crtc(&dev_priv->drm, crtc) {
3293                struct intel_crtc_state *crtc_state =
3294                        to_intel_crtc_state(crtc->base.state);
3295                enum pipe pipe = crtc->pipe;
3296                enum plane_id plane_id;
3297
3298                seq_printf(m, "Pipe %c\n", pipe_name(pipe));
3299
3300                for_each_plane_id_on_crtc(crtc, plane_id) {
3301                        entry = &crtc_state->wm.skl.plane_ddb_y[plane_id];
3302                        seq_printf(m, "  Plane%-8d%8u%8u%8u\n", plane_id + 1,
3303                                   entry->start, entry->end,
3304                                   skl_ddb_entry_size(entry));
3305                }
3306
3307                entry = &crtc_state->wm.skl.plane_ddb_y[PLANE_CURSOR];
3308                seq_printf(m, "  %-13s%8u%8u%8u\n", "Cursor", entry->start,
3309                           entry->end, skl_ddb_entry_size(entry));
3310        }
3311
3312        drm_modeset_unlock_all(dev);
3313
3314        return 0;
3315}
3316
3317static void drrs_status_per_crtc(struct seq_file *m,
3318                                 struct drm_device *dev,
3319                                 struct intel_crtc *intel_crtc)
3320{
3321        struct drm_i915_private *dev_priv = to_i915(dev);
3322        struct i915_drrs *drrs = &dev_priv->drrs;
3323        int vrefresh = 0;
3324        struct drm_connector *connector;
3325        struct drm_connector_list_iter conn_iter;
3326
3327        drm_connector_list_iter_begin(dev, &conn_iter);
3328        drm_for_each_connector_iter(connector, &conn_iter) {
3329                if (connector->state->crtc != &intel_crtc->base)
3330                        continue;
3331
3332                seq_printf(m, "%s:\n", connector->name);
3333        }
3334        drm_connector_list_iter_end(&conn_iter);
3335
3336        if (dev_priv->vbt.drrs_type == STATIC_DRRS_SUPPORT)
3337                seq_puts(m, "\tVBT: DRRS_type: Static");
3338        else if (dev_priv->vbt.drrs_type == SEAMLESS_DRRS_SUPPORT)
3339                seq_puts(m, "\tVBT: DRRS_type: Seamless");
3340        else if (dev_priv->vbt.drrs_type == DRRS_NOT_SUPPORTED)
3341                seq_puts(m, "\tVBT: DRRS_type: None");
3342        else
3343                seq_puts(m, "\tVBT: DRRS_type: FIXME: Unrecognized Value");
3344
3345        seq_puts(m, "\n\n");
3346
3347        if (to_intel_crtc_state(intel_crtc->base.state)->has_drrs) {
3348                struct intel_panel *panel;
3349
3350                mutex_lock(&drrs->mutex);
3351                /* DRRS Supported */
3352                seq_puts(m, "\tDRRS Supported: Yes\n");
3353
3354                /* disable_drrs() will make drrs->dp NULL */
3355                if (!drrs->dp) {
3356                        seq_puts(m, "Idleness DRRS: Disabled\n");
3357                        if (dev_priv->psr.enabled)
3358                                seq_puts(m,
3359                                "\tAs PSR is enabled, DRRS is not enabled\n");
3360                        mutex_unlock(&drrs->mutex);
3361                        return;
3362                }
3363
3364                panel = &drrs->dp->attached_connector->panel;
3365                seq_printf(m, "\t\tBusy_frontbuffer_bits: 0x%X",
3366                                        drrs->busy_frontbuffer_bits);
3367
3368                seq_puts(m, "\n\t\t");
3369                if (drrs->refresh_rate_type == DRRS_HIGH_RR) {
3370                        seq_puts(m, "DRRS_State: DRRS_HIGH_RR\n");
3371                        vrefresh = panel->fixed_mode->vrefresh;
3372                } else if (drrs->refresh_rate_type == DRRS_LOW_RR) {
3373                        seq_puts(m, "DRRS_State: DRRS_LOW_RR\n");
3374                        vrefresh = panel->downclock_mode->vrefresh;
3375                } else {
3376                        seq_printf(m, "DRRS_State: Unknown(%d)\n",
3377                                                drrs->refresh_rate_type);
3378                        mutex_unlock(&drrs->mutex);
3379                        return;
3380                }
3381                seq_printf(m, "\t\tVrefresh: %d", vrefresh);
3382
3383                seq_puts(m, "\n\t\t");
3384                mutex_unlock(&drrs->mutex);
3385        } else {
3386                /* DRRS not supported. Print the VBT parameter*/
3387                seq_puts(m, "\tDRRS Supported : No");
3388        }
3389        seq_puts(m, "\n");
3390}
3391
3392static int i915_drrs_status(struct seq_file *m, void *unused)
3393{
3394        struct drm_i915_private *dev_priv = node_to_i915(m->private);
3395        struct drm_device *dev = &dev_priv->drm;
3396        struct intel_crtc *intel_crtc;
3397        int active_crtc_cnt = 0;
3398
3399        drm_modeset_lock_all(dev);
3400        for_each_intel_crtc(dev, intel_crtc) {
3401                if (intel_crtc->base.state->active) {
3402                        active_crtc_cnt++;
3403                        seq_printf(m, "\nCRTC %d:  ", active_crtc_cnt);
3404
3405                        drrs_status_per_crtc(m, dev, intel_crtc);
3406                }
3407        }
3408        drm_modeset_unlock_all(dev);
3409
3410        if (!active_crtc_cnt)
3411                seq_puts(m, "No active crtc found\n");
3412
3413        return 0;
3414}
3415
3416static int i915_dp_mst_info(struct seq_file *m, void *unused)
3417{
3418        struct drm_i915_private *dev_priv = node_to_i915(m->private);
3419        struct drm_device *dev = &dev_priv->drm;
3420        struct intel_encoder *intel_encoder;
3421        struct intel_digital_port *intel_dig_port;
3422        struct drm_connector *connector;
3423        struct drm_connector_list_iter conn_iter;
3424
3425        drm_connector_list_iter_begin(dev, &conn_iter);
3426        drm_for_each_connector_iter(connector, &conn_iter) {
3427                if (connector->connector_type != DRM_MODE_CONNECTOR_DisplayPort)
3428                        continue;
3429
3430                intel_encoder = intel_attached_encoder(connector);
3431                if (!intel_encoder || intel_encoder->type == INTEL_OUTPUT_DP_MST)
3432                        continue;
3433
3434                intel_dig_port = enc_to_dig_port(&intel_encoder->base);
3435                if (!intel_dig_port->dp.can_mst)
3436                        continue;
3437
3438                seq_printf(m, "MST Source Port %c\n",
3439                           port_name(intel_dig_port->base.port));
3440                drm_dp_mst_dump_topology(m, &intel_dig_port->dp.mst_mgr);
3441        }
3442        drm_connector_list_iter_end(&conn_iter);
3443
3444        return 0;
3445}
3446
3447static ssize_t i915_displayport_test_active_write(struct file *file,
3448                                                  const char __user *ubuf,
3449                                                  size_t len, loff_t *offp)
3450{
3451        char *input_buffer;
3452        int status = 0;
3453        struct drm_device *dev;
3454        struct drm_connector *connector;
3455        struct drm_connector_list_iter conn_iter;
3456        struct intel_dp *intel_dp;
3457        int val = 0;
3458
3459        dev = ((struct seq_file *)file->private_data)->private;
3460
3461        if (len == 0)
3462                return 0;
3463
3464        input_buffer = memdup_user_nul(ubuf, len);
3465        if (IS_ERR(input_buffer))
3466                return PTR_ERR(input_buffer);
3467
3468        DRM_DEBUG_DRIVER("Copied %d bytes from user\n", (unsigned int)len);
3469
3470        drm_connector_list_iter_begin(dev, &conn_iter);
3471        drm_for_each_connector_iter(connector, &conn_iter) {
3472                struct intel_encoder *encoder;
3473
3474                if (connector->connector_type !=
3475                    DRM_MODE_CONNECTOR_DisplayPort)
3476                        continue;
3477
3478                encoder = to_intel_encoder(connector->encoder);
3479                if (encoder && encoder->type == INTEL_OUTPUT_DP_MST)
3480                        continue;
3481
3482                if (encoder && connector->status == connector_status_connected) {
3483                        intel_dp = enc_to_intel_dp(&encoder->base);
3484                        status = kstrtoint(input_buffer, 10, &val);
3485                        if (status < 0)
3486                                break;
3487                        DRM_DEBUG_DRIVER("Got %d for test active\n", val);
3488                        /* To prevent erroneous activation of the compliance
3489                         * testing code, only accept an actual value of 1 here
3490                         */
3491                        if (val == 1)
3492                                intel_dp->compliance.test_active = 1;
3493                        else
3494                                intel_dp->compliance.test_active = 0;
3495                }
3496        }
3497        drm_connector_list_iter_end(&conn_iter);
3498        kfree(input_buffer);
3499        if (status < 0)
3500                return status;
3501
3502        *offp += len;
3503        return len;
3504}
3505
3506static int i915_displayport_test_active_show(struct seq_file *m, void *data)
3507{
3508        struct drm_i915_private *dev_priv = m->private;
3509        struct drm_device *dev = &dev_priv->drm;
3510        struct drm_connector *connector;
3511        struct drm_connector_list_iter conn_iter;
3512        struct intel_dp *intel_dp;
3513
3514        drm_connector_list_iter_begin(dev, &conn_iter);
3515        drm_for_each_connector_iter(connector, &conn_iter) {
3516                struct intel_encoder *encoder;
3517
3518                if (connector->connector_type !=
3519                    DRM_MODE_CONNECTOR_DisplayPort)
3520                        continue;
3521
3522                encoder = to_intel_encoder(connector->encoder);
3523                if (encoder && encoder->type == INTEL_OUTPUT_DP_MST)
3524                        continue;
3525
3526                if (encoder && connector->status == connector_status_connected) {
3527                        intel_dp = enc_to_intel_dp(&encoder->base);
3528                        if (intel_dp->compliance.test_active)
3529                                seq_puts(m, "1");
3530                        else
3531                                seq_puts(m, "0");
3532                } else
3533                        seq_puts(m, "0");
3534        }
3535        drm_connector_list_iter_end(&conn_iter);
3536
3537        return 0;
3538}
3539
3540static int i915_displayport_test_active_open(struct inode *inode,
3541                                             struct file *file)
3542{
3543        return single_open(file, i915_displayport_test_active_show,
3544                           inode->i_private);
3545}
3546
3547static const struct file_operations i915_displayport_test_active_fops = {
3548        .owner = THIS_MODULE,
3549        .open = i915_displayport_test_active_open,
3550        .read = seq_read,
3551        .llseek = seq_lseek,
3552        .release = single_release,
3553        .write = i915_displayport_test_active_write
3554};
3555
3556static int i915_displayport_test_data_show(struct seq_file *m, void *data)
3557{
3558        struct drm_i915_private *dev_priv = m->private;
3559        struct drm_device *dev = &dev_priv->drm;
3560        struct drm_connector *connector;
3561        struct drm_connector_list_iter conn_iter;
3562        struct intel_dp *intel_dp;
3563
3564        drm_connector_list_iter_begin(dev, &conn_iter);
3565        drm_for_each_connector_iter(connector, &conn_iter) {
3566                struct intel_encoder *encoder;
3567
3568                if (connector->connector_type !=
3569                    DRM_MODE_CONNECTOR_DisplayPort)
3570                        continue;
3571
3572                encoder = to_intel_encoder(connector->encoder);
3573                if (encoder && encoder->type == INTEL_OUTPUT_DP_MST)
3574                        continue;
3575
3576                if (encoder && connector->status == connector_status_connected) {
3577                        intel_dp = enc_to_intel_dp(&encoder->base);
3578                        if (intel_dp->compliance.test_type ==
3579                            DP_TEST_LINK_EDID_READ)
3580                                seq_printf(m, "%lx",
3581                                           intel_dp->compliance.test_data.edid);
3582                        else if (intel_dp->compliance.test_type ==
3583                                 DP_TEST_LINK_VIDEO_PATTERN) {
3584                                seq_printf(m, "hdisplay: %d\n",
3585                                           intel_dp->compliance.test_data.hdisplay);
3586                                seq_printf(m, "vdisplay: %d\n",
3587                                           intel_dp->compliance.test_data.vdisplay);
3588                                seq_printf(m, "bpc: %u\n",
3589                                           intel_dp->compliance.test_data.bpc);
3590                        }
3591                } else
3592                        seq_puts(m, "0");
3593        }
3594        drm_connector_list_iter_end(&conn_iter);
3595
3596        return 0;
3597}
3598DEFINE_SHOW_ATTRIBUTE(i915_displayport_test_data);
3599
3600static int i915_displayport_test_type_show(struct seq_file *m, void *data)
3601{
3602        struct drm_i915_private *dev_priv = m->private;
3603        struct drm_device *dev = &dev_priv->drm;
3604        struct drm_connector *connector;
3605        struct drm_connector_list_iter conn_iter;
3606        struct intel_dp *intel_dp;
3607
3608        drm_connector_list_iter_begin(dev, &conn_iter);
3609        drm_for_each_connector_iter(connector, &conn_iter) {
3610                struct intel_encoder *encoder;
3611
3612                if (connector->connector_type !=
3613                    DRM_MODE_CONNECTOR_DisplayPort)
3614                        continue;
3615
3616                encoder = to_intel_encoder(connector->encoder);
3617                if (encoder && encoder->type == INTEL_OUTPUT_DP_MST)
3618                        continue;
3619
3620                if (encoder && connector->status == connector_status_connected) {
3621                        intel_dp = enc_to_intel_dp(&encoder->base);
3622                        seq_printf(m, "%02lx", intel_dp->compliance.test_type);
3623                } else
3624                        seq_puts(m, "0");
3625        }
3626        drm_connector_list_iter_end(&conn_iter);
3627
3628        return 0;
3629}
3630DEFINE_SHOW_ATTRIBUTE(i915_displayport_test_type);
3631
3632static void wm_latency_show(struct seq_file *m, const u16 wm[8])
3633{
3634        struct drm_i915_private *dev_priv = m->private;
3635        struct drm_device *dev = &dev_priv->drm;
3636        int level;
3637        int num_levels;
3638
3639        if (IS_CHERRYVIEW(dev_priv))
3640                num_levels = 3;
3641        else if (IS_VALLEYVIEW(dev_priv))
3642                num_levels = 1;
3643        else if (IS_G4X(dev_priv))
3644                num_levels = 3;
3645        else
3646                num_levels = ilk_wm_max_level(dev_priv) + 1;
3647
3648        drm_modeset_lock_all(dev);
3649
3650        for (level = 0; level < num_levels; level++) {
3651                unsigned int latency = wm[level];
3652
3653                /*
3654                 * - WM1+ latency values in 0.5us units
3655                 * - latencies are in us on gen9/vlv/chv
3656                 */
3657                if (INTEL_GEN(dev_priv) >= 9 ||
3658                    IS_VALLEYVIEW(dev_priv) ||
3659                    IS_CHERRYVIEW(dev_priv) ||
3660                    IS_G4X(dev_priv))
3661                        latency *= 10;
3662                else if (level > 0)
3663                        latency *= 5;
3664
3665                seq_printf(m, "WM%d %u (%u.%u usec)\n",
3666                           level, wm[level], latency / 10, latency % 10);
3667        }
3668
3669        drm_modeset_unlock_all(dev);
3670}
3671
3672static int pri_wm_latency_show(struct seq_file *m, void *data)
3673{
3674        struct drm_i915_private *dev_priv = m->private;
3675        const u16 *latencies;
3676
3677        if (INTEL_GEN(dev_priv) >= 9)
3678                latencies = dev_priv->wm.skl_latency;
3679        else
3680                latencies = dev_priv->wm.pri_latency;
3681
3682        wm_latency_show(m, latencies);
3683
3684        return 0;
3685}
3686
3687static int spr_wm_latency_show(struct seq_file *m, void *data)
3688{
3689        struct drm_i915_private *dev_priv = m->private;
3690        const u16 *latencies;
3691
3692        if (INTEL_GEN(dev_priv) >= 9)
3693                latencies = dev_priv->wm.skl_latency;
3694        else
3695                latencies = dev_priv->wm.spr_latency;
3696
3697        wm_latency_show(m, latencies);
3698
3699        return 0;
3700}
3701
3702static int cur_wm_latency_show(struct seq_file *m, void *data)
3703{
3704        struct drm_i915_private *dev_priv = m->private;
3705        const u16 *latencies;
3706
3707        if (INTEL_GEN(dev_priv) >= 9)
3708                latencies = dev_priv->wm.skl_latency;
3709        else
3710                latencies = dev_priv->wm.cur_latency;
3711
3712        wm_latency_show(m, latencies);
3713
3714        return 0;
3715}
3716
3717static int pri_wm_latency_open(struct inode *inode, struct file *file)
3718{
3719        struct drm_i915_private *dev_priv = inode->i_private;
3720
3721        if (INTEL_GEN(dev_priv) < 5 && !IS_G4X(dev_priv))
3722                return -ENODEV;
3723
3724        return single_open(file, pri_wm_latency_show, dev_priv);
3725}
3726
3727static int spr_wm_latency_open(struct inode *inode, struct file *file)
3728{
3729        struct drm_i915_private *dev_priv = inode->i_private;
3730
3731        if (HAS_GMCH(dev_priv))
3732                return -ENODEV;
3733
3734        return single_open(file, spr_wm_latency_show, dev_priv);
3735}
3736
3737static int cur_wm_latency_open(struct inode *inode, struct file *file)
3738{
3739        struct drm_i915_private *dev_priv = inode->i_private;
3740
3741        if (HAS_GMCH(dev_priv))
3742                return -ENODEV;
3743
3744        return single_open(file, cur_wm_latency_show, dev_priv);
3745}
3746
3747static ssize_t wm_latency_write(struct file *file, const char __user *ubuf,
3748                                size_t len, loff_t *offp, u16 wm[8])
3749{
3750        struct seq_file *m = file->private_data;
3751        struct drm_i915_private *dev_priv = m->private;
3752        struct drm_device *dev = &dev_priv->drm;
3753        u16 new[8] = { 0 };
3754        int num_levels;
3755        int level;
3756        int ret;
3757        char tmp[32];
3758
3759        if (IS_CHERRYVIEW(dev_priv))
3760                num_levels = 3;
3761        else if (IS_VALLEYVIEW(dev_priv))
3762                num_levels = 1;
3763        else if (IS_G4X(dev_priv))
3764                num_levels = 3;
3765        else
3766                num_levels = ilk_wm_max_level(dev_priv) + 1;
3767
3768        if (len >= sizeof(tmp))
3769                return -EINVAL;
3770
3771        if (copy_from_user(tmp, ubuf, len))
3772                return -EFAULT;
3773
3774        tmp[len] = '\0';
3775
3776        ret = sscanf(tmp, "%hu %hu %hu %hu %hu %hu %hu %hu",
3777                     &new[0], &new[1], &new[2], &new[3],
3778                     &new[4], &new[5], &new[6], &new[7]);
3779        if (ret != num_levels)
3780                return -EINVAL;
3781
3782        drm_modeset_lock_all(dev);
3783
3784        for (level = 0; level < num_levels; level++)
3785                wm[level] = new[level];
3786
3787        drm_modeset_unlock_all(dev);
3788
3789        return len;
3790}
3791
3792
3793static ssize_t pri_wm_latency_write(struct file *file, const char __user *ubuf,
3794                                    size_t len, loff_t *offp)
3795{
3796        struct seq_file *m = file->private_data;
3797        struct drm_i915_private *dev_priv = m->private;
3798        u16 *latencies;
3799
3800        if (INTEL_GEN(dev_priv) >= 9)
3801                latencies = dev_priv->wm.skl_latency;
3802        else
3803                latencies = dev_priv->wm.pri_latency;
3804
3805        return wm_latency_write(file, ubuf, len, offp, latencies);
3806}
3807
3808static ssize_t spr_wm_latency_write(struct file *file, const char __user *ubuf,
3809                                    size_t len, loff_t *offp)
3810{
3811        struct seq_file *m = file->private_data;
3812        struct drm_i915_private *dev_priv = m->private;
3813        u16 *latencies;
3814
3815        if (INTEL_GEN(dev_priv) >= 9)
3816                latencies = dev_priv->wm.skl_latency;
3817        else
3818                latencies = dev_priv->wm.spr_latency;
3819
3820        return wm_latency_write(file, ubuf, len, offp, latencies);
3821}
3822
3823static ssize_t cur_wm_latency_write(struct file *file, const char __user *ubuf,
3824                                    size_t len, loff_t *offp)
3825{
3826        struct seq_file *m = file->private_data;
3827        struct drm_i915_private *dev_priv = m->private;
3828        u16 *latencies;
3829
3830        if (INTEL_GEN(dev_priv) >= 9)
3831                latencies = dev_priv->wm.skl_latency;
3832        else
3833                latencies = dev_priv->wm.cur_latency;
3834
3835        return wm_latency_write(file, ubuf, len, offp, latencies);
3836}
3837
3838static const struct file_operations i915_pri_wm_latency_fops = {
3839        .owner = THIS_MODULE,
3840        .open = pri_wm_latency_open,
3841        .read = seq_read,
3842        .llseek = seq_lseek,
3843        .release = single_release,
3844        .write = pri_wm_latency_write
3845};
3846
3847static const struct file_operations i915_spr_wm_latency_fops = {
3848        .owner = THIS_MODULE,
3849        .open = spr_wm_latency_open,
3850        .read = seq_read,
3851        .llseek = seq_lseek,
3852        .release = single_release,
3853        .write = spr_wm_latency_write
3854};
3855
3856static const struct file_operations i915_cur_wm_latency_fops = {
3857        .owner = THIS_MODULE,
3858        .open = cur_wm_latency_open,
3859        .read = seq_read,
3860        .llseek = seq_lseek,
3861        .release = single_release,
3862        .write = cur_wm_latency_write
3863};
3864
3865static int
3866i915_wedged_get(void *data, u64 *val)
3867{
3868        struct drm_i915_private *dev_priv = data;
3869
3870        *val = i915_terminally_wedged(&dev_priv->gpu_error);
3871
3872        return 0;
3873}
3874
3875static int
3876i915_wedged_set(void *data, u64 val)
3877{
3878        struct drm_i915_private *i915 = data;
3879
3880        /*
3881         * There is no safeguard against this debugfs entry colliding
3882         * with the hangcheck calling same i915_handle_error() in
3883         * parallel, causing an explosion. For now we assume that the
3884         * test harness is responsible enough not to inject gpu hangs
3885         * while it is writing to 'i915_wedged'
3886         */
3887
3888        if (i915_reset_backoff(&i915->gpu_error))
3889                return -EAGAIN;
3890
3891        i915_handle_error(i915, val, I915_ERROR_CAPTURE,
3892                          "Manually set wedged engine mask = %llx", val);
3893        return 0;
3894}
3895
3896DEFINE_SIMPLE_ATTRIBUTE(i915_wedged_fops,
3897                        i915_wedged_get, i915_wedged_set,
3898                        "%llu\n");
3899
3900#define DROP_UNBOUND    BIT(0)
3901#define DROP_BOUND      BIT(1)
3902#define DROP_RETIRE     BIT(2)
3903#define DROP_ACTIVE     BIT(3)
3904#define DROP_FREED      BIT(4)
3905#define DROP_SHRINK_ALL BIT(5)
3906#define DROP_IDLE       BIT(6)
3907#define DROP_RESET_ACTIVE       BIT(7)
3908#define DROP_RESET_SEQNO        BIT(8)
3909#define DROP_ALL (DROP_UNBOUND  | \
3910                  DROP_BOUND    | \
3911                  DROP_RETIRE   | \
3912                  DROP_ACTIVE   | \
3913                  DROP_FREED    | \
3914                  DROP_SHRINK_ALL |\
3915                  DROP_IDLE     | \
3916                  DROP_RESET_ACTIVE | \
3917                  DROP_RESET_SEQNO)
3918static int
3919i915_drop_caches_get(void *data, u64 *val)
3920{
3921        *val = DROP_ALL;
3922
3923        return 0;
3924}
3925
3926static int
3927i915_drop_caches_set(void *data, u64 val)
3928{
3929        struct drm_i915_private *i915 = data;
3930        intel_wakeref_t wakeref;
3931        int ret = 0;
3932
3933        DRM_DEBUG("Dropping caches: 0x%08llx [0x%08llx]\n",
3934                  val, val & DROP_ALL);
3935        wakeref = intel_runtime_pm_get(i915);
3936
3937        if (val & DROP_RESET_ACTIVE &&
3938            wait_for(intel_engines_are_idle(i915), I915_IDLE_ENGINES_TIMEOUT))
3939                i915_gem_set_wedged(i915);
3940
3941        /* No need to check and wait for gpu resets, only libdrm auto-restarts
3942         * on ioctls on -EAGAIN. */
3943        if (val & (DROP_ACTIVE | DROP_RETIRE | DROP_RESET_SEQNO)) {
3944                ret = mutex_lock_interruptible(&i915->drm.struct_mutex);
3945                if (ret)
3946                        goto out;
3947
3948                if (val & DROP_ACTIVE)
3949                        ret = i915_gem_wait_for_idle(i915,
3950                                                     I915_WAIT_INTERRUPTIBLE |
3951                                                     I915_WAIT_LOCKED,
3952                                                     MAX_SCHEDULE_TIMEOUT);
3953
3954                if (val & DROP_RETIRE)
3955                        i915_retire_requests(i915);
3956
3957                mutex_unlock(&i915->drm.struct_mutex);
3958        }
3959
3960        if (val & DROP_RESET_ACTIVE && i915_terminally_wedged(&i915->gpu_error))
3961                i915_handle_error(i915, ALL_ENGINES, 0, NULL);
3962
3963        fs_reclaim_acquire(GFP_KERNEL);
3964        if (val & DROP_BOUND)
3965                i915_gem_shrink(i915, LONG_MAX, NULL, I915_SHRINK_BOUND);
3966
3967        if (val & DROP_UNBOUND)
3968                i915_gem_shrink(i915, LONG_MAX, NULL, I915_SHRINK_UNBOUND);
3969
3970        if (val & DROP_SHRINK_ALL)
3971                i915_gem_shrink_all(i915);
3972        fs_reclaim_release(GFP_KERNEL);
3973
3974        if (val & DROP_IDLE) {
3975                do {
3976                        if (READ_ONCE(i915->gt.active_requests))
3977                                flush_delayed_work(&i915->gt.retire_work);
3978                        drain_delayed_work(&i915->gt.idle_work);
3979                } while (READ_ONCE(i915->gt.awake));
3980        }
3981
3982        if (val & DROP_FREED)
3983                i915_gem_drain_freed_objects(i915);
3984
3985out:
3986        intel_runtime_pm_put(i915, wakeref);
3987
3988        return ret;
3989}
3990
3991DEFINE_SIMPLE_ATTRIBUTE(i915_drop_caches_fops,
3992                        i915_drop_caches_get, i915_drop_caches_set,
3993                        "0x%08llx\n");
3994
3995static int
3996i915_cache_sharing_get(void *data, u64 *val)
3997{
3998        struct drm_i915_private *dev_priv = data;
3999        intel_wakeref_t wakeref;
4000        u32 snpcr = 0;
4001
4002        if (!(IS_GEN_RANGE(dev_priv, 6, 7)))
4003                return -ENODEV;
4004
4005        with_intel_runtime_pm(dev_priv, wakeref)
4006                snpcr = I915_READ(GEN6_MBCUNIT_SNPCR);
4007
4008        *val = (snpcr & GEN6_MBC_SNPCR_MASK) >> GEN6_MBC_SNPCR_SHIFT;
4009
4010        return 0;
4011}
4012
4013static int
4014i915_cache_sharing_set(void *data, u64 val)
4015{
4016        struct drm_i915_private *dev_priv = data;
4017        intel_wakeref_t wakeref;
4018
4019        if (!(IS_GEN_RANGE(dev_priv, 6, 7)))
4020                return -ENODEV;
4021
4022        if (val > 3)
4023                return -EINVAL;
4024
4025        DRM_DEBUG_DRIVER("Manually setting uncore sharing to %llu\n", val);
4026        with_intel_runtime_pm(dev_priv, wakeref) {
4027                u32 snpcr;
4028
4029                /* Update the cache sharing policy here as well */
4030                snpcr = I915_READ(GEN6_MBCUNIT_SNPCR);
4031                snpcr &= ~GEN6_MBC_SNPCR_MASK;
4032                snpcr |= val << GEN6_MBC_SNPCR_SHIFT;
4033                I915_WRITE(GEN6_MBCUNIT_SNPCR, snpcr);
4034        }
4035
4036        return 0;
4037}
4038
4039DEFINE_SIMPLE_ATTRIBUTE(i915_cache_sharing_fops,
4040                        i915_cache_sharing_get, i915_cache_sharing_set,
4041                        "%llu\n");
4042
4043static void cherryview_sseu_device_status(struct drm_i915_private *dev_priv,
4044                                          struct sseu_dev_info *sseu)
4045{
4046#define SS_MAX 2
4047        const int ss_max = SS_MAX;
4048        u32 sig1[SS_MAX], sig2[SS_MAX];
4049        int ss;
4050
4051        sig1[0] = I915_READ(CHV_POWER_SS0_SIG1);
4052        sig1[1] = I915_READ(CHV_POWER_SS1_SIG1);
4053        sig2[0] = I915_READ(CHV_POWER_SS0_SIG2);
4054        sig2[1] = I915_READ(CHV_POWER_SS1_SIG2);
4055
4056        for (ss = 0; ss < ss_max; ss++) {
4057                unsigned int eu_cnt;
4058
4059                if (sig1[ss] & CHV_SS_PG_ENABLE)
4060                        /* skip disabled subslice */
4061                        continue;
4062
4063                sseu->slice_mask = BIT(0);
4064                sseu->subslice_mask[0] |= BIT(ss);
4065                eu_cnt = ((sig1[ss] & CHV_EU08_PG_ENABLE) ? 0 : 2) +
4066                         ((sig1[ss] & CHV_EU19_PG_ENABLE) ? 0 : 2) +
4067                         ((sig1[ss] & CHV_EU210_PG_ENABLE) ? 0 : 2) +
4068                         ((sig2[ss] & CHV_EU311_PG_ENABLE) ? 0 : 2);
4069                sseu->eu_total += eu_cnt;
4070                sseu->eu_per_subslice = max_t(unsigned int,
4071                                              sseu->eu_per_subslice, eu_cnt);
4072        }
4073#undef SS_MAX
4074}
4075
4076static void gen10_sseu_device_status(struct drm_i915_private *dev_priv,
4077                                     struct sseu_dev_info *sseu)
4078{
4079#define SS_MAX 6
4080        const struct intel_runtime_info *info = RUNTIME_INFO(dev_priv);
4081        u32 s_reg[SS_MAX], eu_reg[2 * SS_MAX], eu_mask[2];
4082        int s, ss;
4083
4084        for (s = 0; s < info->sseu.max_slices; s++) {
4085                /*
4086                 * FIXME: Valid SS Mask respects the spec and read
4087                 * only valid bits for those registers, excluding reserved
4088                 * although this seems wrong because it would leave many
4089                 * subslices without ACK.
4090                 */
4091                s_reg[s] = I915_READ(GEN10_SLICE_PGCTL_ACK(s)) &
4092                        GEN10_PGCTL_VALID_SS_MASK(s);
4093                eu_reg[2 * s] = I915_READ(GEN10_SS01_EU_PGCTL_ACK(s));
4094                eu_reg[2 * s + 1] = I915_READ(GEN10_SS23_EU_PGCTL_ACK(s));
4095        }
4096
4097        eu_mask[0] = GEN9_PGCTL_SSA_EU08_ACK |
4098                     GEN9_PGCTL_SSA_EU19_ACK |
4099                     GEN9_PGCTL_SSA_EU210_ACK |
4100                     GEN9_PGCTL_SSA_EU311_ACK;
4101        eu_mask[1] = GEN9_PGCTL_SSB_EU08_ACK |
4102                     GEN9_PGCTL_SSB_EU19_ACK |
4103                     GEN9_PGCTL_SSB_EU210_ACK |
4104                     GEN9_PGCTL_SSB_EU311_ACK;
4105
4106        for (s = 0; s < info->sseu.max_slices; s++) {
4107                if ((s_reg[s] & GEN9_PGCTL_SLICE_ACK) == 0)
4108                        /* skip disabled slice */
4109                        continue;
4110
4111                sseu->slice_mask |= BIT(s);
4112                sseu->subslice_mask[s] = info->sseu.subslice_mask[s];
4113
4114                for (ss = 0; ss < info->sseu.max_subslices; ss++) {
4115                        unsigned int eu_cnt;
4116
4117                        if (!(s_reg[s] & (GEN9_PGCTL_SS_ACK(ss))))
4118                                /* skip disabled subslice */
4119                                continue;
4120
4121                        eu_cnt = 2 * hweight32(eu_reg[2 * s + ss / 2] &
4122                                               eu_mask[ss % 2]);
4123                        sseu->eu_total += eu_cnt;
4124                        sseu->eu_per_subslice = max_t(unsigned int,
4125                                                      sseu->eu_per_subslice,
4126                                                      eu_cnt);
4127                }
4128        }
4129#undef SS_MAX
4130}
4131
4132static void gen9_sseu_device_status(struct drm_i915_private *dev_priv,
4133                                    struct sseu_dev_info *sseu)
4134{
4135#define SS_MAX 3
4136        const struct intel_runtime_info *info = RUNTIME_INFO(dev_priv);
4137        u32 s_reg[SS_MAX], eu_reg[2 * SS_MAX], eu_mask[2];
4138        int s, ss;
4139
4140        for (s = 0; s < info->sseu.max_slices; s++) {
4141                s_reg[s] = I915_READ(GEN9_SLICE_PGCTL_ACK(s));
4142                eu_reg[2*s] = I915_READ(GEN9_SS01_EU_PGCTL_ACK(s));
4143                eu_reg[2*s + 1] = I915_READ(GEN9_SS23_EU_PGCTL_ACK(s));
4144        }
4145
4146        eu_mask[0] = GEN9_PGCTL_SSA_EU08_ACK |
4147                     GEN9_PGCTL_SSA_EU19_ACK |
4148                     GEN9_PGCTL_SSA_EU210_ACK |
4149                     GEN9_PGCTL_SSA_EU311_ACK;
4150        eu_mask[1] = GEN9_PGCTL_SSB_EU08_ACK |
4151                     GEN9_PGCTL_SSB_EU19_ACK |
4152                     GEN9_PGCTL_SSB_EU210_ACK |
4153                     GEN9_PGCTL_SSB_EU311_ACK;
4154
4155        for (s = 0; s < info->sseu.max_slices; s++) {
4156                if ((s_reg[s] & GEN9_PGCTL_SLICE_ACK) == 0)
4157                        /* skip disabled slice */
4158                        continue;
4159
4160                sseu->slice_mask |= BIT(s);
4161
4162                if (IS_GEN9_BC(dev_priv))
4163                        sseu->subslice_mask[s] =
4164                                RUNTIME_INFO(dev_priv)->sseu.subslice_mask[s];
4165
4166                for (ss = 0; ss < info->sseu.max_subslices; ss++) {
4167                        unsigned int eu_cnt;
4168
4169                        if (IS_GEN9_LP(dev_priv)) {
4170                                if (!(s_reg[s] & (GEN9_PGCTL_SS_ACK(ss))))
4171                                        /* skip disabled subslice */
4172                                        continue;
4173
4174                                sseu->subslice_mask[s] |= BIT(ss);
4175                        }
4176
4177                        eu_cnt = 2 * hweight32(eu_reg[2*s + ss/2] &
4178                                               eu_mask[ss%2]);
4179                        sseu->eu_total += eu_cnt;
4180                        sseu->eu_per_subslice = max_t(unsigned int,
4181                                                      sseu->eu_per_subslice,
4182                                                      eu_cnt);
4183                }
4184        }
4185#undef SS_MAX
4186}
4187
4188static void broadwell_sseu_device_status(struct drm_i915_private *dev_priv,
4189                                         struct sseu_dev_info *sseu)
4190{
4191        u32 slice_info = I915_READ(GEN8_GT_SLICE_INFO);
4192        int s;
4193
4194        sseu->slice_mask = slice_info & GEN8_LSLICESTAT_MASK;
4195
4196        if (sseu->slice_mask) {
4197                sseu->eu_per_subslice =
4198                        RUNTIME_INFO(dev_priv)->sseu.eu_per_subslice;
4199                for (s = 0; s < fls(sseu->slice_mask); s++) {
4200                        sseu->subslice_mask[s] =
4201                                RUNTIME_INFO(dev_priv)->sseu.subslice_mask[s];
4202                }
4203                sseu->eu_total = sseu->eu_per_subslice *
4204                                 sseu_subslice_total(sseu);
4205
4206                /* subtract fused off EU(s) from enabled slice(s) */
4207                for (s = 0; s < fls(sseu->slice_mask); s++) {
4208                        u8 subslice_7eu =
4209                                RUNTIME_INFO(dev_priv)->sseu.subslice_7eu[s];
4210
4211                        sseu->eu_total -= hweight8(subslice_7eu);
4212                }
4213        }
4214}
4215
4216static void i915_print_sseu_info(struct seq_file *m, bool is_available_info,
4217                                 const struct sseu_dev_info *sseu)
4218{
4219        struct drm_i915_private *dev_priv = node_to_i915(m->private);
4220        const char *type = is_available_info ? "Available" : "Enabled";
4221        int s;
4222
4223        seq_printf(m, "  %s Slice Mask: %04x\n", type,
4224                   sseu->slice_mask);
4225        seq_printf(m, "  %s Slice Total: %u\n", type,
4226                   hweight8(sseu->slice_mask));
4227        seq_printf(m, "  %s Subslice Total: %u\n", type,
4228                   sseu_subslice_total(sseu));
4229        for (s = 0; s < fls(sseu->slice_mask); s++) {
4230                seq_printf(m, "  %s Slice%i subslices: %u\n", type,
4231                           s, hweight8(sseu->subslice_mask[s]));
4232        }
4233        seq_printf(m, "  %s EU Total: %u\n", type,
4234                   sseu->eu_total);
4235        seq_printf(m, "  %s EU Per Subslice: %u\n", type,
4236                   sseu->eu_per_subslice);
4237
4238        if (!is_available_info)
4239                return;
4240
4241        seq_printf(m, "  Has Pooled EU: %s\n", yesno(HAS_POOLED_EU(dev_priv)));
4242        if (HAS_POOLED_EU(dev_priv))
4243                seq_printf(m, "  Min EU in pool: %u\n", sseu->min_eu_in_pool);
4244
4245        seq_printf(m, "  Has Slice Power Gating: %s\n",
4246                   yesno(sseu->has_slice_pg));
4247        seq_printf(m, "  Has Subslice Power Gating: %s\n",
4248                   yesno(sseu->has_subslice_pg));
4249        seq_printf(m, "  Has EU Power Gating: %s\n",
4250                   yesno(sseu->has_eu_pg));
4251}
4252
4253static int i915_sseu_status(struct seq_file *m, void *unused)
4254{
4255        struct drm_i915_private *dev_priv = node_to_i915(m->private);
4256        struct sseu_dev_info sseu;
4257        intel_wakeref_t wakeref;
4258
4259        if (INTEL_GEN(dev_priv) < 8)
4260                return -ENODEV;
4261
4262        seq_puts(m, "SSEU Device Info\n");
4263        i915_print_sseu_info(m, true, &RUNTIME_INFO(dev_priv)->sseu);
4264
4265        seq_puts(m, "SSEU Device Status\n");
4266        memset(&sseu, 0, sizeof(sseu));
4267        sseu.max_slices = RUNTIME_INFO(dev_priv)->sseu.max_slices;
4268        sseu.max_subslices = RUNTIME_INFO(dev_priv)->sseu.max_subslices;
4269        sseu.max_eus_per_subslice =
4270                RUNTIME_INFO(dev_priv)->sseu.max_eus_per_subslice;
4271
4272        with_intel_runtime_pm(dev_priv, wakeref) {
4273                if (IS_CHERRYVIEW(dev_priv))
4274                        cherryview_sseu_device_status(dev_priv, &sseu);
4275                else if (IS_BROADWELL(dev_priv))
4276                        broadwell_sseu_device_status(dev_priv, &sseu);
4277                else if (IS_GEN(dev_priv, 9))
4278                        gen9_sseu_device_status(dev_priv, &sseu);
4279                else if (INTEL_GEN(dev_priv) >= 10)
4280                        gen10_sseu_device_status(dev_priv, &sseu);
4281        }
4282
4283        i915_print_sseu_info(m, false, &sseu);
4284
4285        return 0;
4286}
4287
4288static int i915_forcewake_open(struct inode *inode, struct file *file)
4289{
4290        struct drm_i915_private *i915 = inode->i_private;
4291
4292        if (INTEL_GEN(i915) < 6)
4293                return 0;
4294
4295        file->private_data = (void *)(uintptr_t)intel_runtime_pm_get(i915);
4296        intel_uncore_forcewake_user_get(i915);
4297
4298        return 0;
4299}
4300
4301static int i915_forcewake_release(struct inode *inode, struct file *file)
4302{
4303        struct drm_i915_private *i915 = inode->i_private;
4304
4305        if (INTEL_GEN(i915) < 6)
4306                return 0;
4307
4308        intel_uncore_forcewake_user_put(i915);
4309        intel_runtime_pm_put(i915,
4310                             (intel_wakeref_t)(uintptr_t)file->private_data);
4311
4312        return 0;
4313}
4314
4315static const struct file_operations i915_forcewake_fops = {
4316        .owner = THIS_MODULE,
4317        .open = i915_forcewake_open,
4318        .release = i915_forcewake_release,
4319};
4320
4321static int i915_hpd_storm_ctl_show(struct seq_file *m, void *data)
4322{
4323        struct drm_i915_private *dev_priv = m->private;
4324        struct i915_hotplug *hotplug = &dev_priv->hotplug;
4325
4326        /* Synchronize with everything first in case there's been an HPD
4327         * storm, but we haven't finished handling it in the kernel yet
4328         */
4329        synchronize_irq(dev_priv->drm.irq);
4330        flush_work(&dev_priv->hotplug.dig_port_work);
4331        flush_work(&dev_priv->hotplug.hotplug_work);
4332
4333        seq_printf(m, "Threshold: %d\n", hotplug->hpd_storm_threshold);
4334        seq_printf(m, "Detected: %s\n",
4335                   yesno(delayed_work_pending(&hotplug->reenable_work)));
4336
4337        return 0;
4338}
4339
4340static ssize_t i915_hpd_storm_ctl_write(struct file *file,
4341                                        const char __user *ubuf, size_t len,
4342                                        loff_t *offp)
4343{
4344        struct seq_file *m = file->private_data;
4345        struct drm_i915_private *dev_priv = m->private;
4346        struct i915_hotplug *hotplug = &dev_priv->hotplug;
4347        unsigned int new_threshold;
4348        int i;
4349        char *newline;
4350        char tmp[16];
4351
4352        if (len >= sizeof(tmp))
4353                return -EINVAL;
4354
4355        if (copy_from_user(tmp, ubuf, len))
4356                return -EFAULT;
4357
4358        tmp[len] = '\0';
4359
4360        /* Strip newline, if any */
4361        newline = strchr(tmp, '\n');
4362        if (newline)
4363                *newline = '\0';
4364
4365        if (strcmp(tmp, "reset") == 0)
4366                new_threshold = HPD_STORM_DEFAULT_THRESHOLD;
4367        else if (kstrtouint(tmp, 10, &new_threshold) != 0)
4368                return -EINVAL;
4369
4370        if (new_threshold > 0)
4371                DRM_DEBUG_KMS("Setting HPD storm detection threshold to %d\n",
4372                              new_threshold);
4373        else
4374                DRM_DEBUG_KMS("Disabling HPD storm detection\n");
4375
4376        spin_lock_irq(&dev_priv->irq_lock);
4377        hotplug->hpd_storm_threshold = new_threshold;
4378        /* Reset the HPD storm stats so we don't accidentally trigger a storm */
4379        for_each_hpd_pin(i)
4380                hotplug->stats[i].count = 0;
4381        spin_unlock_irq(&dev_priv->irq_lock);
4382
4383        /* Re-enable hpd immediately if we were in an irq storm */
4384        flush_delayed_work(&dev_priv->hotplug.reenable_work);
4385
4386        return len;
4387}
4388
4389static int i915_hpd_storm_ctl_open(struct inode *inode, struct file *file)
4390{
4391        return single_open(file, i915_hpd_storm_ctl_show, inode->i_private);
4392}
4393
4394static const struct file_operations i915_hpd_storm_ctl_fops = {
4395        .owner = THIS_MODULE,
4396        .open = i915_hpd_storm_ctl_open,
4397        .read = seq_read,
4398        .llseek = seq_lseek,
4399        .release = single_release,
4400        .write = i915_hpd_storm_ctl_write
4401};
4402
4403static int i915_hpd_short_storm_ctl_show(struct seq_file *m, void *data)
4404{
4405        struct drm_i915_private *dev_priv = m->private;
4406
4407        seq_printf(m, "Enabled: %s\n",
4408                   yesno(dev_priv->hotplug.hpd_short_storm_enabled));
4409
4410        return 0;
4411}
4412
4413static int
4414i915_hpd_short_storm_ctl_open(struct inode *inode, struct file *file)
4415{
4416        return single_open(file, i915_hpd_short_storm_ctl_show,
4417                           inode->i_private);
4418}
4419
4420static ssize_t i915_hpd_short_storm_ctl_write(struct file *file,
4421                                              const char __user *ubuf,
4422                                              size_t len, loff_t *offp)
4423{
4424        struct seq_file *m = file->private_data;
4425        struct drm_i915_private *dev_priv = m->private;
4426        struct i915_hotplug *hotplug = &dev_priv->hotplug;
4427        char *newline;
4428        char tmp[16];
4429        int i;
4430        bool new_state;
4431
4432        if (len >= sizeof(tmp))
4433                return -EINVAL;
4434
4435        if (copy_from_user(tmp, ubuf, len))
4436                return -EFAULT;
4437
4438        tmp[len] = '\0';
4439
4440        /* Strip newline, if any */
4441        newline = strchr(tmp, '\n');
4442        if (newline)
4443                *newline = '\0';
4444
4445        /* Reset to the "default" state for this system */
4446        if (strcmp(tmp, "reset") == 0)
4447                new_state = !HAS_DP_MST(dev_priv);
4448        else if (kstrtobool(tmp, &new_state) != 0)
4449                return -EINVAL;
4450
4451        DRM_DEBUG_KMS("%sabling HPD short storm detection\n",
4452                      new_state ? "En" : "Dis");
4453
4454        spin_lock_irq(&dev_priv->irq_lock);
4455        hotplug->hpd_short_storm_enabled = new_state;
4456        /* Reset the HPD storm stats so we don't accidentally trigger a storm */
4457        for_each_hpd_pin(i)
4458                hotplug->stats[i].count = 0;
4459        spin_unlock_irq(&dev_priv->irq_lock);
4460
4461        /* Re-enable hpd immediately if we were in an irq storm */
4462        flush_delayed_work(&dev_priv->hotplug.reenable_work);
4463
4464        return len;
4465}
4466
4467static const struct file_operations i915_hpd_short_storm_ctl_fops = {
4468        .owner = THIS_MODULE,
4469        .open = i915_hpd_short_storm_ctl_open,
4470        .read = seq_read,
4471        .llseek = seq_lseek,
4472        .release = single_release,
4473        .write = i915_hpd_short_storm_ctl_write,
4474};
4475
4476static int i915_drrs_ctl_set(void *data, u64 val)
4477{
4478        struct drm_i915_private *dev_priv = data;
4479        struct drm_device *dev = &dev_priv->drm;
4480        struct intel_crtc *crtc;
4481
4482        if (INTEL_GEN(dev_priv) < 7)
4483                return -ENODEV;
4484
4485        for_each_intel_crtc(dev, crtc) {
4486                struct drm_connector_list_iter conn_iter;
4487                struct intel_crtc_state *crtc_state;
4488                struct drm_connector *connector;
4489                struct drm_crtc_commit *commit;
4490                int ret;
4491
4492                ret = drm_modeset_lock_single_interruptible(&crtc->base.mutex);
4493                if (ret)
4494                        return ret;
4495
4496                crtc_state = to_intel_crtc_state(crtc->base.state);
4497
4498                if (!crtc_state->base.active ||
4499                    !crtc_state->has_drrs)
4500                        goto out;
4501
4502                commit = crtc_state->base.commit;
4503                if (commit) {
4504                        ret = wait_for_completion_interruptible(&commit->hw_done);
4505                        if (ret)
4506                                goto out;
4507                }
4508
4509                drm_connector_list_iter_begin(dev, &conn_iter);
4510                drm_for_each_connector_iter(connector, &conn_iter) {
4511                        struct intel_encoder *encoder;
4512                        struct intel_dp *intel_dp;
4513
4514                        if (!(crtc_state->base.connector_mask &
4515                              drm_connector_mask(connector)))
4516                                continue;
4517
4518                        encoder = intel_attached_encoder(connector);
4519                        if (encoder->type != INTEL_OUTPUT_EDP)
4520                                continue;
4521
4522                        DRM_DEBUG_DRIVER("Manually %sabling DRRS. %llu\n",
4523                                                val ? "en" : "dis", val);
4524
4525                        intel_dp = enc_to_intel_dp(&encoder->base);
4526                        if (val)
4527                                intel_edp_drrs_enable(intel_dp,
4528                                                      crtc_state);
4529                        else
4530                                intel_edp_drrs_disable(intel_dp,
4531                                                       crtc_state);
4532                }
4533                drm_connector_list_iter_end(&conn_iter);
4534
4535out:
4536                drm_modeset_unlock(&crtc->base.mutex);
4537                if (ret)
4538                        return ret;
4539        }
4540
4541        return 0;
4542}
4543
4544DEFINE_SIMPLE_ATTRIBUTE(i915_drrs_ctl_fops, NULL, i915_drrs_ctl_set, "%llu\n");
4545
4546static ssize_t
4547i915_fifo_underrun_reset_write(struct file *filp,
4548                               const char __user *ubuf,
4549                               size_t cnt, loff_t *ppos)
4550{
4551        struct drm_i915_private *dev_priv = filp->private_data;
4552        struct intel_crtc *intel_crtc;
4553        struct drm_device *dev = &dev_priv->drm;
4554        int ret;
4555        bool reset;
4556
4557        ret = kstrtobool_from_user(ubuf, cnt, &reset);
4558        if (ret)
4559                return ret;
4560
4561        if (!reset)
4562                return cnt;
4563
4564        for_each_intel_crtc(dev, intel_crtc) {
4565                struct drm_crtc_commit *commit;
4566                struct intel_crtc_state *crtc_state;
4567
4568                ret = drm_modeset_lock_single_interruptible(&intel_crtc->base.mutex);
4569                if (ret)
4570                        return ret;
4571
4572                crtc_state = to_intel_crtc_state(intel_crtc->base.state);
4573                commit = crtc_state->base.commit;
4574                if (commit) {
4575                        ret = wait_for_completion_interruptible(&commit->hw_done);
4576                        if (!ret)
4577                                ret = wait_for_completion_interruptible(&commit->flip_done);
4578                }
4579
4580                if (!ret && crtc_state->base.active) {
4581                        DRM_DEBUG_KMS("Re-arming FIFO underruns on pipe %c\n",
4582                                      pipe_name(intel_crtc->pipe));
4583
4584                        intel_crtc_arm_fifo_underrun(intel_crtc, crtc_state);
4585                }
4586
4587                drm_modeset_unlock(&intel_crtc->base.mutex);
4588
4589                if (ret)
4590                        return ret;
4591        }
4592
4593        ret = intel_fbc_reset_underrun(dev_priv);
4594        if (ret)
4595                return ret;
4596
4597        return cnt;
4598}
4599
4600static const struct file_operations i915_fifo_underrun_reset_ops = {
4601        .owner = THIS_MODULE,
4602        .open = simple_open,
4603        .write = i915_fifo_underrun_reset_write,
4604        .llseek = default_llseek,
4605};
4606
4607static const struct drm_info_list i915_debugfs_list[] = {
4608        {"i915_capabilities", i915_capabilities, 0},
4609        {"i915_gem_objects", i915_gem_object_info, 0},
4610        {"i915_gem_gtt", i915_gem_gtt_info, 0},
4611        {"i915_gem_stolen", i915_gem_stolen_list_info },
4612        {"i915_gem_fence_regs", i915_gem_fence_regs_info, 0},
4613        {"i915_gem_interrupt", i915_interrupt_info, 0},
4614        {"i915_gem_batch_pool", i915_gem_batch_pool_info, 0},
4615        {"i915_guc_info", i915_guc_info, 0},
4616        {"i915_guc_load_status", i915_guc_load_status_info, 0},
4617        {"i915_guc_log_dump", i915_guc_log_dump, 0},
4618        {"i915_guc_load_err_log_dump", i915_guc_log_dump, 0, (void *)1},
4619        {"i915_guc_stage_pool", i915_guc_stage_pool, 0},
4620        {"i915_huc_load_status", i915_huc_load_status_info, 0},
4621        {"i915_frequency_info", i915_frequency_info, 0},
4622        {"i915_hangcheck_info", i915_hangcheck_info, 0},
4623        {"i915_reset_info", i915_reset_info, 0},
4624        {"i915_drpc_info", i915_drpc_info, 0},
4625        {"i915_emon_status", i915_emon_status, 0},
4626        {"i915_ring_freq_table", i915_ring_freq_table, 0},
4627        {"i915_frontbuffer_tracking", i915_frontbuffer_tracking, 0},
4628        {"i915_fbc_status", i915_fbc_status, 0},
4629        {"i915_ips_status", i915_ips_status, 0},
4630        {"i915_sr_status", i915_sr_status, 0},
4631        {"i915_opregion", i915_opregion, 0},
4632        {"i915_vbt", i915_vbt, 0},
4633        {"i915_gem_framebuffer", i915_gem_framebuffer_info, 0},
4634        {"i915_context_status", i915_context_status, 0},
4635        {"i915_forcewake_domains", i915_forcewake_domains, 0},
4636        {"i915_swizzle_info", i915_swizzle_info, 0},
4637        {"i915_llc", i915_llc, 0},
4638        {"i915_edp_psr_status", i915_edp_psr_status, 0},
4639        {"i915_energy_uJ", i915_energy_uJ, 0},
4640        {"i915_runtime_pm_status", i915_runtime_pm_status, 0},
4641        {"i915_power_domain_info", i915_power_domain_info, 0},
4642        {"i915_dmc_info", i915_dmc_info, 0},
4643        {"i915_display_info", i915_display_info, 0},
4644        {"i915_engine_info", i915_engine_info, 0},
4645        {"i915_rcs_topology", i915_rcs_topology, 0},
4646        {"i915_shrinker_info", i915_shrinker_info, 0},
4647        {"i915_shared_dplls_info", i915_shared_dplls_info, 0},
4648        {"i915_dp_mst_info", i915_dp_mst_info, 0},
4649        {"i915_wa_registers", i915_wa_registers, 0},
4650        {"i915_ddb_info", i915_ddb_info, 0},
4651        {"i915_sseu_status", i915_sseu_status, 0},
4652        {"i915_drrs_status", i915_drrs_status, 0},
4653        {"i915_rps_boost_info", i915_rps_boost_info, 0},
4654};
4655#define I915_DEBUGFS_ENTRIES ARRAY_SIZE(i915_debugfs_list)
4656
4657static const struct i915_debugfs_files {
4658        const char *name;
4659        const struct file_operations *fops;
4660} i915_debugfs_files[] = {
4661        {"i915_wedged", &i915_wedged_fops},
4662        {"i915_cache_sharing", &i915_cache_sharing_fops},
4663        {"i915_gem_drop_caches", &i915_drop_caches_fops},
4664#if IS_ENABLED(CONFIG_DRM_I915_CAPTURE_ERROR)
4665        {"i915_error_state", &i915_error_state_fops},
4666        {"i915_gpu_info", &i915_gpu_info_fops},
4667#endif
4668        {"i915_fifo_underrun_reset", &i915_fifo_underrun_reset_ops},
4669        {"i915_pri_wm_latency", &i915_pri_wm_latency_fops},
4670        {"i915_spr_wm_latency", &i915_spr_wm_latency_fops},
4671        {"i915_cur_wm_latency", &i915_cur_wm_latency_fops},
4672        {"i915_fbc_false_color", &i915_fbc_false_color_fops},
4673        {"i915_dp_test_data", &i915_displayport_test_data_fops},
4674        {"i915_dp_test_type", &i915_displayport_test_type_fops},
4675        {"i915_dp_test_active", &i915_displayport_test_active_fops},
4676        {"i915_guc_log_level", &i915_guc_log_level_fops},
4677        {"i915_guc_log_relay", &i915_guc_log_relay_fops},
4678        {"i915_hpd_storm_ctl", &i915_hpd_storm_ctl_fops},
4679        {"i915_hpd_short_storm_ctl", &i915_hpd_short_storm_ctl_fops},
4680        {"i915_ipc_status", &i915_ipc_status_fops},
4681        {"i915_drrs_ctl", &i915_drrs_ctl_fops},
4682        {"i915_edp_psr_debug", &i915_edp_psr_debug_fops}
4683};
4684
4685int i915_debugfs_register(struct drm_i915_private *dev_priv)
4686{
4687        struct drm_minor *minor = dev_priv->drm.primary;
4688        struct dentry *ent;
4689        int i;
4690
4691        ent = debugfs_create_file("i915_forcewake_user", S_IRUSR,
4692                                  minor->debugfs_root, to_i915(minor->dev),
4693                                  &i915_forcewake_fops);
4694        if (!ent)
4695                return -ENOMEM;
4696
4697        for (i = 0; i < ARRAY_SIZE(i915_debugfs_files); i++) {
4698                ent = debugfs_create_file(i915_debugfs_files[i].name,
4699                                          S_IRUGO | S_IWUSR,
4700                                          minor->debugfs_root,
4701                                          to_i915(minor->dev),
4702                                          i915_debugfs_files[i].fops);
4703                if (!ent)
4704                        return -ENOMEM;
4705        }
4706
4707        return drm_debugfs_create_files(i915_debugfs_list,
4708                                        I915_DEBUGFS_ENTRIES,
4709                                        minor->debugfs_root, minor);
4710}
4711
4712struct dpcd_block {
4713        /* DPCD dump start address. */
4714        unsigned int offset;
4715        /* DPCD dump end address, inclusive. If unset, .size will be used. */
4716        unsigned int end;
4717        /* DPCD dump size. Used if .end is unset. If unset, defaults to 1. */
4718        size_t size;
4719        /* Only valid for eDP. */
4720        bool edp;
4721};
4722
4723static const struct dpcd_block i915_dpcd_debug[] = {
4724        { .offset = DP_DPCD_REV, .size = DP_RECEIVER_CAP_SIZE },
4725        { .offset = DP_PSR_SUPPORT, .end = DP_PSR_CAPS },
4726        { .offset = DP_DOWNSTREAM_PORT_0, .size = 16 },
4727        { .offset = DP_LINK_BW_SET, .end = DP_EDP_CONFIGURATION_SET },
4728        { .offset = DP_SINK_COUNT, .end = DP_ADJUST_REQUEST_LANE2_3 },
4729        { .offset = DP_SET_POWER },
4730        { .offset = DP_EDP_DPCD_REV },
4731        { .offset = DP_EDP_GENERAL_CAP_1, .end = DP_EDP_GENERAL_CAP_3 },
4732        { .offset = DP_EDP_DISPLAY_CONTROL_REGISTER, .end = DP_EDP_BACKLIGHT_FREQ_CAP_MAX_LSB },
4733        { .offset = DP_EDP_DBC_MINIMUM_BRIGHTNESS_SET, .end = DP_EDP_DBC_MAXIMUM_BRIGHTNESS_SET },
4734};
4735
4736static int i915_dpcd_show(struct seq_file *m, void *data)
4737{
4738        struct drm_connector *connector = m->private;
4739        struct intel_dp *intel_dp =
4740                enc_to_intel_dp(&intel_attached_encoder(connector)->base);
4741        u8 buf[16];
4742        ssize_t err;
4743        int i;
4744
4745        if (connector->status != connector_status_connected)
4746                return -ENODEV;
4747
4748        for (i = 0; i < ARRAY_SIZE(i915_dpcd_debug); i++) {
4749                const struct dpcd_block *b = &i915_dpcd_debug[i];
4750                size_t size = b->end ? b->end - b->offset + 1 : (b->size ?: 1);
4751
4752                if (b->edp &&
4753                    connector->connector_type != DRM_MODE_CONNECTOR_eDP)
4754                        continue;
4755
4756                /* low tech for now */
4757                if (WARN_ON(size > sizeof(buf)))
4758                        continue;
4759
4760                err = drm_dp_dpcd_read(&intel_dp->aux, b->offset, buf, size);
4761                if (err < 0)
4762                        seq_printf(m, "%04x: ERROR %d\n", b->offset, (int)err);
4763                else
4764                        seq_printf(m, "%04x: %*ph\n", b->offset, (int)err, buf);
4765        }
4766
4767        return 0;
4768}
4769DEFINE_SHOW_ATTRIBUTE(i915_dpcd);
4770
4771static int i915_panel_show(struct seq_file *m, void *data)
4772{
4773        struct drm_connector *connector = m->private;
4774        struct intel_dp *intel_dp =
4775                enc_to_intel_dp(&intel_attached_encoder(connector)->base);
4776
4777        if (connector->status != connector_status_connected)
4778                return -ENODEV;
4779
4780        seq_printf(m, "Panel power up delay: %d\n",
4781                   intel_dp->panel_power_up_delay);
4782        seq_printf(m, "Panel power down delay: %d\n",
4783                   intel_dp->panel_power_down_delay);
4784        seq_printf(m, "Backlight on delay: %d\n",
4785                   intel_dp->backlight_on_delay);
4786        seq_printf(m, "Backlight off delay: %d\n",
4787                   intel_dp->backlight_off_delay);
4788
4789        return 0;
4790}
4791DEFINE_SHOW_ATTRIBUTE(i915_panel);
4792
4793static int i915_hdcp_sink_capability_show(struct seq_file *m, void *data)
4794{
4795        struct drm_connector *connector = m->private;
4796        struct intel_connector *intel_connector = to_intel_connector(connector);
4797
4798        if (connector->status != connector_status_connected)
4799                return -ENODEV;
4800
4801        /* HDCP is supported by connector */
4802        if (!intel_connector->hdcp.shim)
4803                return -EINVAL;
4804
4805        seq_printf(m, "%s:%d HDCP version: ", connector->name,
4806                   connector->base.id);
4807        seq_printf(m, "%s ", !intel_hdcp_capable(intel_connector) ?
4808                   "None" : "HDCP1.4");
4809        seq_puts(m, "\n");
4810
4811        return 0;
4812}
4813DEFINE_SHOW_ATTRIBUTE(i915_hdcp_sink_capability);
4814
4815static int i915_dsc_fec_support_show(struct seq_file *m, void *data)
4816{
4817        struct drm_connector *connector = m->private;
4818        struct drm_device *dev = connector->dev;
4819        struct drm_crtc *crtc;
4820        struct intel_dp *intel_dp;
4821        struct drm_modeset_acquire_ctx ctx;
4822        struct intel_crtc_state *crtc_state = NULL;
4823        int ret = 0;
4824        bool try_again = false;
4825
4826        drm_modeset_acquire_init(&ctx, DRM_MODESET_ACQUIRE_INTERRUPTIBLE);
4827
4828        do {
4829                try_again = false;
4830                ret = drm_modeset_lock(&dev->mode_config.connection_mutex,
4831                                       &ctx);
4832                if (ret) {
4833                        if (ret == -EDEADLK && !drm_modeset_backoff(&ctx)) {
4834                                try_again = true;
4835                                continue;
4836                        }
4837                        break;
4838                }
4839                crtc = connector->state->crtc;
4840                if (connector->status != connector_status_connected || !crtc) {
4841                        ret = -ENODEV;
4842                        break;
4843                }
4844                ret = drm_modeset_lock(&crtc->mutex, &ctx);
4845                if (ret == -EDEADLK) {
4846                        ret = drm_modeset_backoff(&ctx);
4847                        if (!ret) {
4848                                try_again = true;
4849                                continue;
4850                        }
4851                        break;
4852                } else if (ret) {
4853                        break;
4854                }
4855                intel_dp = enc_to_intel_dp(&intel_attached_encoder(connector)->base);
4856                crtc_state = to_intel_crtc_state(crtc->state);
4857                seq_printf(m, "DSC_Enabled: %s\n",
4858                           yesno(crtc_state->dsc_params.compression_enable));
4859                seq_printf(m, "DSC_Sink_Support: %s\n",
4860                           yesno(drm_dp_sink_supports_dsc(intel_dp->dsc_dpcd)));
4861                if (!intel_dp_is_edp(intel_dp))
4862                        seq_printf(m, "FEC_Sink_Support: %s\n",
4863                                   yesno(drm_dp_sink_supports_fec(intel_dp->fec_capable)));
4864        } while (try_again);
4865
4866        drm_modeset_drop_locks(&ctx);
4867        drm_modeset_acquire_fini(&ctx);
4868
4869        return ret;
4870}
4871
4872static ssize_t i915_dsc_fec_support_write(struct file *file,
4873                                          const char __user *ubuf,
4874                                          size_t len, loff_t *offp)
4875{
4876        bool dsc_enable = false;
4877        int ret;
4878        struct drm_connector *connector =
4879                ((struct seq_file *)file->private_data)->private;
4880        struct intel_encoder *encoder = intel_attached_encoder(connector);
4881        struct intel_dp *intel_dp = enc_to_intel_dp(&encoder->base);
4882
4883        if (len == 0)
4884                return 0;
4885
4886        DRM_DEBUG_DRIVER("Copied %zu bytes from user to force DSC\n",
4887                         len);
4888
4889        ret = kstrtobool_from_user(ubuf, len, &dsc_enable);
4890        if (ret < 0)
4891                return ret;
4892
4893        DRM_DEBUG_DRIVER("Got %s for DSC Enable\n",
4894                         (dsc_enable) ? "true" : "false");
4895        intel_dp->force_dsc_en = dsc_enable;
4896
4897        *offp += len;
4898        return len;
4899}
4900
4901static int i915_dsc_fec_support_open(struct inode *inode,
4902                                     struct file *file)
4903{
4904        return single_open(file, i915_dsc_fec_support_show,
4905                           inode->i_private);
4906}
4907
4908static const struct file_operations i915_dsc_fec_support_fops = {
4909        .owner = THIS_MODULE,
4910        .open = i915_dsc_fec_support_open,
4911        .read = seq_read,
4912        .llseek = seq_lseek,
4913        .release = single_release,
4914        .write = i915_dsc_fec_support_write
4915};
4916
4917/**
4918 * i915_debugfs_connector_add - add i915 specific connector debugfs files
4919 * @connector: pointer to a registered drm_connector
4920 *
4921 * Cleanup will be done by drm_connector_unregister() through a call to
4922 * drm_debugfs_connector_remove().
4923 *
4924 * Returns 0 on success, negative error codes on error.
4925 */
4926int i915_debugfs_connector_add(struct drm_connector *connector)
4927{
4928        struct dentry *root = connector->debugfs_entry;
4929        struct drm_i915_private *dev_priv = to_i915(connector->dev);
4930
4931        /* The connector must have been registered beforehands. */
4932        if (!root)
4933                return -ENODEV;
4934
4935        if (connector->connector_type == DRM_MODE_CONNECTOR_DisplayPort ||
4936            connector->connector_type == DRM_MODE_CONNECTOR_eDP)
4937                debugfs_create_file("i915_dpcd", S_IRUGO, root,
4938                                    connector, &i915_dpcd_fops);
4939
4940        if (connector->connector_type == DRM_MODE_CONNECTOR_eDP) {
4941                debugfs_create_file("i915_panel_timings", S_IRUGO, root,
4942                                    connector, &i915_panel_fops);
4943                debugfs_create_file("i915_psr_sink_status", S_IRUGO, root,
4944                                    connector, &i915_psr_sink_status_fops);
4945        }
4946
4947        if (connector->connector_type == DRM_MODE_CONNECTOR_DisplayPort ||
4948            connector->connector_type == DRM_MODE_CONNECTOR_HDMIA ||
4949            connector->connector_type == DRM_MODE_CONNECTOR_HDMIB) {
4950                debugfs_create_file("i915_hdcp_sink_capability", S_IRUGO, root,
4951                                    connector, &i915_hdcp_sink_capability_fops);
4952        }
4953
4954        if (INTEL_GEN(dev_priv) >= 10 &&
4955            (connector->connector_type == DRM_MODE_CONNECTOR_DisplayPort ||
4956             connector->connector_type == DRM_MODE_CONNECTOR_eDP))
4957                debugfs_create_file("i915_dsc_fec_support", S_IRUGO, root,
4958                                    connector, &i915_dsc_fec_support_fops);
4959
4960        return 0;
4961}
4962