366N/A * Copyright (c) 2012, 2013, Intel Corporation. 366N/A * Copyright (c) 2012, 2015, Oracle and/or its affiliates. All rights reserved. 919N/A * Permission is hereby granted, free of charge, to any person obtaining a 919N/A * copy of this software and associated documentation files (the "Software"), 919N/A * to deal in the Software without restriction, including without limitation 919N/A * the rights to use, copy, modify, merge, publish, distribute, sublicense, 919N/A * and/or sell copies of the Software, and to permit persons to whom the 919N/A * Software is furnished to do so, subject to the following conditions: 919N/A * The above copyright notice and this permission notice (including the next 919N/A * paragraph) shall be included in all copies or substantial portions of the 919N/A * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 919N/A * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 919N/A * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 919N/A * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 919N/A * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 919N/A * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 366N/A * DEALINGS IN THE SOFTWARE. 366N/A * Initialize the proc_t walker by either using the given starting address, 366N/A * or reading the value of the kernel's practive pointer. We also allocate 366N/A * a proc_t for storage, and save this using the walk_data pointer. * At each step, read a proc_t into our private storage, and then invoke * the callback function. We terminate when we reach a NULL p_next pointer. * The walker's fini function is invoked at the end of each walk. Since we * dynamically allocated a proc_t in sp_walk_init, we must free it now. mdb_warn(
"Failed to read i915 private\n");
mdb_printf(
"Print device ID information of Intel graphics card.\n");
mdb_printf(
"Print graphics translation table (GTT) size\n");
mdb_printf(
"%p: %s%s %8zdKiB %02x %02x %d %d %d%s%s%s",
/* "size", "gtt_off", "kaddr", "pfn_array" */ mdb_printf(
"Print objects information for a given list pointer\n" " obj:\tpointer to drm_i915_gem_object structure\n" " gtt_off:\tobject offset in GTT (graphics address)\n" " kaddr:\tobject kernel virtual address\n" " pfn_array:\tArrary which contains object's PFN\n");
mdb_warn(
"failed to read object infor");
mdb_printf(
"%s %20s %14s %9s %23s\n",
"obj",
"size",
"gtt_off",
" obj:\tpointer to drm_i915_gem_object structure\n" " gtt_off:\tobject offset in GTT (graphics address)\n" " kaddr:\tobject kernel virtual address\n" " pfn_array:\tArrary which contains object's PFN\n" " -a flag:\tprint only active list with flag set\n" " -i flag:\tprint only inactive list with flag set\n" " -b flag:\tprint only bound list with flag set\n" " -u flag:\tprint only unbound list with flag set\n" "\nWithout the option, print information about all objects in " "Please make sure mdb_track is enabled in i915 driver by " "before dump all objects information.\n");
mdb_printf(
"don't need to set address 0x%lx, just ignore\n",
"-i dump inactive_list\n" "-u dump unbound_list\n");
mdb_printf(
"mdb_track is not enabled. Please enable " "it by set drm:mdb_track_enable=1");
/* dump whole gem objects list */ mdb_warn(
"failed to read whole gem list");
mdb_printf(
"Dump %s List\n",
"Whole gem objects");
mdb_printf(
"%s %20s %14s %9s %23s\n",
"obj",
"size",
"gtt_off",
"kaddr",
"pfn_array");
mdb_printf(
" %u [%u] active objects, 0x%lx [0x%lx] bytes\n",
mdb_printf(
" %u [%u] inactive objects, 0x%lx [0x%lx] bytes\n",
mdb_printf(
"%u [%u] objects, 0x%lx [0x%lx] bytes in gtt\n",
" mmio_base:\tMMIO base address\n" " obj:\tpointer to ring object's drm_i915_gem_object structure\n" " -l flag:\tprint only BLT ring information with flag set\n" " -r flag:\tprint only RENDER ring information with flag set\n" " -s flag:\tprint only BSD ring information with flag set\n" "Without the option given, print information about all rings.\n");
mdb_printf(
"don't need to set address 0x%lx, just ignore\n",
"-l blt ring information\n" "-r render ring information\n" "-s bsd ring information\n");
mdb_printf(
"Render ring mmio_base 0x%lx obj 0x%lx\n",
mdb_printf(
"BLT ring mmio_base 0x%lx obj 0x%lx\n",
mdb_printf(
"BSD ring mmio_base 0x%lx obj 0x%lx\n",
"\ngtt_dump is a snapshot of whole GTT table when GPU hang " "Please make sure gpu_dump is enabled in i915 driver before " "\nSee also: \"::help i915_error_reg_dump\"\n");
mdb_warn(
"Failed to read dev_priv->regs\n");
mdb_printf(
"Print register value for a given register offset\n");
" PGTBL_ER:\tPage Table Errors Register\n" " INSTPM:\tCommand Parser Mode Register\n" " EIR:\tError Identity Register\n" " EHR:\tError Header Register\n" " INSTDONE:\tInstruction Stream Interface Done Register\n" " INSTDONE1:\tInstruction Stream Interface Done 1\n" " INSTPS:\tInstruction Parser State Register\n" " ACTHD:\tActive Head Pointer Register\n" " DMA_FADD_P:\tPrimary DMA Engine Fetch Address Register\n" "\ngtt_dump is a snapshot of whole GTT table when GPU hang happened.\n" "\nSee also: \"::help i915_gtt_dump\"\n");
mdb_printf(
"Print object history information for a given " "drm_i915_gem_object pointer\n" " event:\tOperation name\n" " cur_seq:\tCurrent system SeqNO\n" " last_seq:\tLast SeqNO has been processed\n" " ring addr:\tPoint to intel_ring_buffer structure\n" "\nNOTE: Please make sure mdb_track is enabled in i915 driver " "by setting mdb_track_enable\n");
mdb_warn(
"failed to read gem object infor");
mdb_printf(
"mdb_track is not enabled. Please enable it " "by set drm:mdb_track_enable=1");
mdb_printf(
"%s %20s %10s %10s\n",
"event",
"cur_seq",
"last_seq",
mdb_warn(
"failed to read his_list node");
mdb_warn(
"failed to read history node");
"\nAll batchbuffers' information is printed one by one " "from the latest one to the oldest one.\n" "The information includes objects number, assigned SeqNO. " "\nNOTE: Please make sure mdb_track is enabled in i915 " "driver by setting mdb_track_enable\n");
mdb_warn(
"failed to read history node");
mdb_printf(
"mdb_track is not enabled. Please enable it by " "set drm:mdb_track_enable=1");
mdb_warn(
"failed to read his_list node");
mdb_printf(
"batch buffer includes %d objects, seqno 0x%x\n",
mdb_warn(
"failed to read batch object list");
static const char *
yesno(
int v)
return (v ?
"yes" :
"no");
mdb_printf(
"Print capability information for Intel graphics card\n" " is_mobile:\tMobile Platform\n" " is_i85x:\tIntel I85x series graphics card\n" " is_i915g:\tIntel I915g series graphics card\n" " is_i945gm:\tIntel I945gm series graphics card\n" " is_g33:\tIntel G33 series graphics card\n" " need_gfx_hws:\tNeed setup graphics hardware status page\n" " is_g4x:\tIntel G4x series graphics card\n" " is_pineview:\tIntel Pineview series graphics card\n" " is_broadwater:\tIntel Broadwater series graphics card\n" " is_crestline:\tIntel Crestline series graphics card\n" " is_ivybridge:\tIntel Ivybridge series graphics card\n" " is_valleyview:\tIntel Valleyview series graphics card\n" " has_force_wake:\tHas force awake\n" " is_haswell:\tIntel Haswell series graphics card\n" " has_fbc:\tHas Framebuffer compression\n" " has_pipe_cxsr:\tHas CxSR\n" " has_hotplug:\tHas output hotplug\n" " cursor_needs_physical:\tHas physical cursor object\n" " has_overlay:\tHas Overlay\n" " overlay_needs_physical:\tHas physical overlay object\n" " supports_tv:\tSupport TV output\n" " has_bsd_ring:\tHas BSD ring\n" " has_blt_ring:\tHas BLT ring\n" " has_llc:\tHas last level cache\n");
mdb_warn(
"failed to read i915 chip info");
mdb_printf(
"Print request list information for a given list pointer\n" "The information includes request, SeqNO. and timestamp.\n");
mdb_warn(
"failed to read request infor");
mdb_warn(
"failed to render ring request list");
mdb_warn(
"failed to walk request head_list");
mdb_printf(
"Print request list for each ring buffer\n" "\nSee also: \"::help i915_request_list_node\"\n");
mdb_printf(
"don't need to set address 0x%lx, just ignore\n",
mdb_warn(
"failed to read hardware status page");
for (i = 0; i <
4096 /
sizeof (
u32) /
4; i +=
4) {
mdb_printf(
"0x%08x: 0x%08x 0x%08x 0x%08x 0x%08x\n",
mdb_printf(
"Print current SeqNO. for each ring buffer\n");
mdb_printf(
"Print current Fence registers information\n" "The information includes object address, user pin flag, tiling mode,\n" "size, read domain, write domain, read SeqNO, write SeqNO, fence " "catch level, dirty info, object name, pin count, fence reg number,\n" "GTT offset, pin mappable and fault mappable.\n");
" IER:\tInterrupt Enable Register\n" " IIR:\tInterrupt Identity Register\n" " IMR:\tInterrupt Mask Register\n" " ISR:\tInterrupt Status Register\n");
mdb_warn(
"failed to read i915 chip info");
"North Display Interrupt enable: %08x\n",
"North Display Interrupt identity: %08x\n",
val);
"North Display Interrupt mask: %08x\n",
"South Display Interrupt enable: %08x\n",
"South Display Interrupt identity: %08x\n",
val);
"South Display Interrupt mask: %08x\n",
"Graphics Interrupt enable: %08x\n",
val);
"Graphics Interrupt identity: %08x\n",
"Graphics Interrupt mask: %08x\n",
val);
mdb_printf(
"Print hardware status page for each RING\n");
mdb_printf(
"Hardware status page for %s\n",
"RENDER");
mdb_printf(
"Hardware status page for %s\n",
"BSD");
mdb_printf(
"Hardware status page for %s\n",
"BLT");
mdb_printf(
"Print the status and reason for Framebuffer Compression " mdb_warn(
"failed to read i915 chip info");
mdb_printf(
"disabled per module param (default off)");
mdb_warn(
"failed to read i915 chip info");
val ?
"enabled" :
"disabled");
mdb_printf(
"Print console framebuffer information\n" "The information includes width, height, depth,\n" "bits_per_pixel and object structure address\n");
mdb_warn(
"failed to read intel_fbdev info");
mdb_warn(
"failed to read framebuffer info");
mdb_printf(
"fbcon size: %d x %d, depth %d, %d bpp, obj %p",
" TILECTL:\tTile Control\n" " ARB_MODE:\tArbiter Mode Control Register\n" " DISP_ARB_CTL:\tDisplay Arbiter Control\n");
mdb_warn(
"failed to read i915 chip info");
mdb_printf(
"Print Per-Process GTT (PPGTT) information\n" " GFX_MODE:\tGraphics Mode Register\n" " PP_DIR_BASE:\tPage Directory Base Register\n" " ECOCHK:\tMain Graphic Arbiter Misc Register\n");
mdb_warn(
"failed to read i915 chip info");
for (i = 0; i <
3; i ++) {
mdb_warn(
"failed to read aliasing_ppgtt info");
* MDB module linkage information: * We declare a list of structures describing our dcmds, a list of structures * describing our walkers, and a function named _mdb_init to return a pointer * to our module information. "i915 objects list information",
"i915 objects list node information",
"i915 ring buffer information",
"dump gtt_dump_add address",
"i915 error registers dump",
"i915 objects track information",
"i915 objects track information",
"i915 capabilities information",
"i915_request_list_node",
"i915 request list node information",
"i915 gem request information",
"ring seqno information",
"fence register information",
"framebuffer compression information",
"Print self-refresh status",
"Print framebuffer information",
"i915_gen6_forcewake_count",
"Print swizzle information",
"Print ppgtt information",