drm_printf
drm_printf(printer, "man size:%lu pages, gtt available:%lld pages, usage:%luMB\n",
drm_printf(printer, "man size:%lu pages, ram usage:%luMB, vis usage:%luMB\n",
drm_printf(p, "crtc[%u]: %s\n", crtc->base.id, crtc->name);
drm_printf(p, "\tenable=%d\n", state->enable);
drm_printf(p, "\tactive=%d\n", state->active);
drm_printf(p, "\tplanes_changed=%d\n", state->planes_changed);
drm_printf(p, "\tmode_changed=%d\n", state->mode_changed);
drm_printf(p, "\tactive_changed=%d\n", state->active_changed);
drm_printf(p, "\tconnectors_changed=%d\n", state->connectors_changed);
drm_printf(p, "\tcolor_mgmt_changed=%d\n", state->color_mgmt_changed);
drm_printf(p, "\tplane_mask=%x\n", state->plane_mask);
drm_printf(p, "\tconnector_mask=%x\n", state->connector_mask);
drm_printf(p, "\tencoder_mask=%x\n", state->encoder_mask);
drm_printf(p, "\tmode: " DRM_MODE_FMT "\n", DRM_MODE_ARG(&state->mode));
drm_printf(p, "plane[%u]: %s\n", plane->base.id, plane->name);
drm_printf(p, "\tcrtc=%s\n", state->crtc ? state->crtc->name : "(null)");
drm_printf(p, "\tfb=%u\n", state->fb ? state->fb->base.id : 0);
drm_printf(p, "\tcrtc-pos=" DRM_RECT_FMT "\n", DRM_RECT_ARG(&dest));
drm_printf(p, "\tsrc-pos=" DRM_RECT_FP_FMT "\n", DRM_RECT_FP_ARG(&src));
drm_printf(p, "\trotation=%x\n", state->rotation);
drm_printf(p, "\tnormalized-zpos=%x\n", state->normalized_zpos);
drm_printf(p, "\tcolor-encoding=%s\n",
drm_printf(p, "\tcolor-range=%s\n",
drm_printf(p, "connector[%u]: %s\n", connector->base.id, connector->name);
drm_printf(p, "\tcrtc=%s\n", state->crtc ? state->crtc->name : "(null)");
drm_printf(p, "\tfb=%d\n", state->writeback_job->fb->base.id);
drm_printf(&p, "framebuffer[%u]:\n", fb->base.id);
drm_printf(p, "%#018llx-%#018llx: %llu: free\n",
drm_printf(p, "%#018llx-%#018llx: %llu: used\n", entry->start,
drm_printf(p, "total: %llu, used %llu free %llu\n", total,
drm_printf(&p, "framebuffer[%u]:\n", fb->base.id);
drm_printf(p, "%s", str);
EXPORT_SYMBOL(drm_printf);
drm_printf(p, "i915.%s=%s\n", name, yesno(*(const bool *)x));
drm_printf(p, "i915.%s=%d\n", name, *(const int *)x);
drm_printf(p, "i915.%s=%u\n", name, *(const unsigned int *)x);
drm_printf(p, "i915.%s=%s\n", name, *(const char **)x);
drm_printf(p, "has EU power gating: %s\n", yesno(sseu->has_eu_pg));
drm_printf(p, "CS timestamp frequency: %u kHz\n",
drm_printf(p, "pciid=0x%04x rev=0x%02x platform=%s gen=%i\n",
drm_printf(p, "Unavailable\n");
drm_printf(p, "slice%d: %u subslice(s) (0x%hhx):\n",
drm_printf(p, "\tsubslice%d: %u EUs (0x%hx)\n",
#define PRINT_FLAG(name) drm_printf(p, "%s: %s\n", #name, yesno(info->name));
drm_printf(p, "slice total: %u, mask=%04x\n",
drm_printf(p, "Has logical contexts? %s\n",
drm_printf(p, "scheduler: %x\n", caps->scheduler);
drm_printf(p, "subslice total: %u\n", sseu_subslice_total(sseu));
drm_printf(p, "slice%d: %u subslices, mask=%04x\n",
drm_printf(p, "EU total: %u\n", sseu->eu_total);
drm_printf(p, "EU per subslice: %u\n", sseu->eu_per_subslice);
drm_printf(p, "has slice power gating: %s\n",
drm_printf(p, "has subslice power gating: %s\n",
drm_printf(m, "%s%x%s [%llx:%x]%s @ %ldms: %s\n",
drm_printf(m, "*\n");
drm_printf(m, "[%04zx] %s\n", pos, line);
drm_printf(m, "\tCCID: 0x%08x\n", I915_READ(CCID));
drm_printf(m, "\tRING_START: 0x%08x\n",
drm_printf(m, "\tRING_HEAD: 0x%08x\n",
drm_printf(m, "\tRING_TAIL: 0x%08x\n",
drm_printf(m, "\tRING_CTL: 0x%08x%s\n",
drm_printf(m, "\tRING_MODE: 0x%08x%s\n",
drm_printf(m, "\tRING_IMR: %08x\n", I915_READ_IMR(engine));
drm_printf(m, "\tSYNC_0: 0x%08x\n",
drm_printf(m, "\tSYNC_1: 0x%08x\n",
drm_printf(m, "\tSYNC_2: 0x%08x\n",
drm_printf(m, "\tACTHD: 0x%08x_%08x\n",
drm_printf(m, "\tBBADDR: 0x%08x_%08x\n",
drm_printf(m, "\tDMA_FADDR: 0x%08x_%08x\n",
drm_printf(m, "\tIPEIR: 0x%08x\n",
drm_printf(m, "\tIPEHR: 0x%08x\n",
drm_printf(m, "\tIPEIR: 0x%08x\n", I915_READ(IPEIR));
drm_printf(m, "\tIPEHR: 0x%08x\n", I915_READ(IPEHR));
drm_printf(m, "\tExeclist status: 0x%08x %08x\n",
drm_printf(m, "\tExeclist CSB read %d, write %d [mmio:%d], tasklet queued? %s (%s)\n",
drm_printf(m, "\tExeclist CSB[%d]: 0x%08x [mmio:0x%08x], context: %d [mmio:%d]\n",
drm_printf(m, "\t\tELSP[%d] idle\n", idx);
drm_printf(m, "\t\tHW active? 0x%x\n", execlists->active);
drm_printf(m, "\tPP_DIR_BASE: 0x%08x\n",
drm_printf(m, "\tPP_DIR_BASE_READ: 0x%08x\n",
drm_printf(m, "\tPP_DIR_DCLV: 0x%08x\n",
drm_printf(m,
drm_printf(m, "*** WEDGED ***\n");
drm_printf(m, "\tcurrent seqno %x, last %x, hangcheck %x [%ld ms]\n",
drm_printf(m, "\tReset count: %d (global %d)\n",
drm_printf(m, "\tRequests:\n");
drm_printf(m, "\t\tring->start: 0x%08x\n",
drm_printf(m, "\t\tring->head: 0x%08x\n",
drm_printf(m, "\t\tring->tail: 0x%08x\n",
drm_printf(m, "\t\tring->emit: 0x%08x\n",
drm_printf(m, "\t\tring->space: 0x%08x\n",
drm_printf(m, "\tDevice is asleep; skipping register dump\n");
drm_printf(m,
drm_printf(m, "\t\tQueue priority: %d\n", execlists->queue_priority);
drm_printf(m,
drm_printf(m, "\t%s [%d] waiting for %x\n",
drm_printf(m, "IRQ? 0x%lx (breadcrumbs? %s)\n",
drm_printf(m, "HWSP:\n");
drm_printf(m, "Idle? %s\n", yesno(intel_engine_is_idle(engine)));
drm_printf(p, "%s firmware: %s\n",
drm_printf(p, "\tstatus: fetch %s, load %s\n",
drm_printf(p, "\tversion: wanted %u.%u, found %u.%u\n",
drm_printf(p, "\theader: offset %u, size %u\n",
drm_printf(p, "\tuCode: offset %u, size %u\n",
drm_printf(p, "\tRSA: offset %u, size %u\n",
drm_printf((printer), "%.*s" fmt, (indent), "\t\t\t\t\tX", ##__VA_ARGS__)
void drm_printf(struct drm_printer *p, const char *f, ...);