/* * Copyright © 2014 Intel Corporation * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice (including the next * paragraph) shall be included in all copies or substantial portions of the * Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * DEALINGS IN THE SOFTWARE. */ #include #include #include #include #include #include #include #include #include #include "main.h" #include "i915_reg.h" int process_onscreen(char *cmdhdr) { unsigned int adpa, dspcntr, dsp_off, gtt_off; int info_dumped = 0; /* onscreen information is dumped */ adpa=INREG_DISP(linear_mmio,0x61100); #define PRINT_DSPINFO \ info_dumped = 1; \ gtt_off=dsp_off/4096 * 8; \ printf("DSPCNTR:value=0x%08x(%s, format 0x%01x(e:RGBX,f:RGBA))\n", \ dspcntr, (dspcntr&(1<<10))?"X-tiled(512x8)":"linear", (dspcntr>>26)&0xf); \ print_bin_fmt(dspcntr,9); \ printf("Offset of current display:0x%x(%dM+%dK), GTT offset at %d\n", \ dsp_off,dsp_off>>20,(dsp_off>>10)&0x3ff, gtt_off); if (adpa & (1<<31)) { if (adpa & (1<<30)) { /* pipe B selected */ printf("Pipe B is selected\n"); dsp_off=INREG_DISP(linear_mmio,0x7019C); /* plane B is the default */ dspcntr = INREG_DISP(linear_mmio,0x71180); } else { /* pipe A selected */ printf("Pipe A is selected\n"); dsp_off=INREG_DISP(linear_mmio,0x7019C); /* plane A is the default */ dspcntr = INREG_DISP(linear_mmio,0x70180); } PRINT_DSPINFO; return 0; } dspcntr = INREG_DISP(linear_mmio,0x70180); if (dspcntr & (1<<31)) { printf("Plane A is enabled\n"); dsp_off=INREG_DISP(linear_mmio,0x7019C); /* plane A is the default */ PRINT_DSPINFO; } dspcntr = INREG_DISP(linear_mmio,0x71180); if (dspcntr & (1<<31)) { printf("Plane B is enabled\n"); dsp_off=INREG_DISP(linear_mmio,0x7119C); /* plane A is the default */ PRINT_DSPINFO; } if (info_dumped == 0) { printf("It looks no plane is enabled. Check bellow file?\n"); printf(" /sys/kernel/debug/dri/0/i915_gem_framebuffer\n"); } return 0; } int process_pipe(char *cmdhdr) { unsigned int value; printf("DSPARB:reg=0x%x,value=0x%08x\n",0x70030,(value=INREG_DISP(linear_mmio,0x70030))); print_bin_fmt(value,9); printf("PIPE A Information...\n"); value=INREG_DISP(linear_mmio,0x70008); printf("PIPEACONF:reg=0x%x,value=0x%08x (%s,%s)\n",0x70008, value,value&(1<<31)?"enabled":"disabled",value&(1<<30)?"single wide mode":"double wide mode"); print_bin_fmt(value,9); printf("PIPEASTAT:reg=0x70024,value=0x%08x\n",(value=INREG_DISP(linear_mmio,0x70024))); print_bin_fmt(value,9); value=INREG_DISP(linear_mmio,0x70008); printf("PIPEACONF:reg=0x%x,value=0x%08x (%s,%s)\n",0x70008, value,value&(1<<31)?"enabled":"disabled",value&(1<<30)?"single wide mode":"double wide mode"); print_bin_fmt(value,9); #if 0 printf("DPLL_A:reg=0x6014,value=0x%08x\n",(value=INREG_DISP(linear_mmio,0x6014))); print_bin_fmt(value,9); printf("FPA0:reg=0x6040,value=0x%08x\n",(value=INREG_DISP(linear_mmio,0x6040))); print_bin_fmt(value,9); #endif value=INREG_DISP(linear_mmio,0x60000); printf("HTOTAL_A:reg=0x60000,value=0x%08x(horizontal active display pixel %d)\n", value,value&0xfff); print_bin_fmt(value,9); printf("HBLANK_A:reg=0x60004,value=0x%08x\n",(value=INREG_DISP(linear_mmio,0x60004))); print_bin_fmt(value,9); printf("HSYNC_A:reg=0x60008,value=0x%08x\n",(value=INREG_DISP(linear_mmio,0x60008))); print_bin_fmt(value,9); value=INREG_DISP(linear_mmio,0x6000c); printf("VTOTAL_A:reg=0x6000c,value=0x%08x(vertical active display lines %d)\n", value,value&0xfff); print_bin_fmt(value,9); printf("VBLANK_A:reg=0x60010,value=0x%08x\n",(value=INREG_DISP(linear_mmio,0x60010))); print_bin_fmt(value,9); printf("VSYNC_A:reg=0x60014,value=0x%08x\n",(value=INREG_DISP(linear_mmio,0x60014))); print_bin_fmt(value,9); printf("PIPEASRC:reg=0x6001c,value=0x%08x\n",(value=INREG_DISP(linear_mmio,0x6001c))); print_bin_fmt(value,9); printf("BCLPPAT_A:reg=0x60020,value=0x%08x\n",(value=INREG_DISP(linear_mmio,0x60020))); print_bin_fmt(value,9); printf("VYNCSHIFT_A:reg=0x60028,value=0x%08x\n",(value=INREG_DISP(linear_mmio,0x60028))); print_bin_fmt(value,9); printf("CRCCtrlColorA_G:reg=0x60054,value=0x%08x\n",(value=INREG_DISP(linear_mmio,0x60054))); print_bin_fmt(value,9); printf("CRCCtrlColorA_B:reg=0x60058,value=0x%08x\n",(value=INREG_DISP(linear_mmio,0x60058))); print_bin_fmt(value,9); printf("CRCCtrlColorA_Residual:reg=0x6005C,value=0x%08x\n",(value=INREG_DISP(linear_mmio,0x6005c))); print_bin_fmt(value,9); printf("PIPEA_DSL:reg=0x%x,value=0x%08x\n",0x70000,(value=INREG_DISP(linear_mmio,0x70000))); print_bin_fmt(value,9); printf("PIPEA_SLC:reg=0x%x,value=0x%08x\n",0x70004,(value=INREG_DISP(linear_mmio,0x70004))); print_bin_fmt(value,9); printf("PIPEASTAT:reg=0x%x,value=0x%08x\n",0x70024,(value=INREG_DISP(linear_mmio,0x70024))); print_bin_fmt(value,9); #if 0 /* readonly, requires that this pipe's PLL is running */ printf("PIPEAFRAMEH:reg=0x%x,value=0x%08x\n",0x70040,(value=INREG_DISP(linear_mmio,0x70040))); print_bin_fmt(value,9); printf("PIPEAFRAMEPIX:reg=0x%x,value=0x%08x\n",0x70044,(value=INREG_DISP(linear_mmio,0x70044))); print_bin_fmt(value,9); #endif #if 0 printf("\nPIPE B Information...\n"); printf("DPLL_B:reg=0x6018,value=0x%08x\n",(value=INREG_DISP(linear_mmio,0x6018))); print_bin_fmt(value,9); printf("FPB0:reg=0x6048,value=0x%08x\n",(value=INREG_DISP(linear_mmio,0x6048))); print_bin_fmt(value,9); value=INREG_DISP(linear_mmio,0x61000); printf("HTOTAL_B:reg=0x61000,value=0x%08x(horizontal active display pixel %d)\n", value,value&0xfff); print_bin_fmt(value,9); printf("HBLANK_B:reg=0x61004,value=0x%08x\n",(value=INREG_DISP(linear_mmio,0x61004))); print_bin_fmt(value,9); printf("HSYNC_B:reg=0x61008,value=0x%08x\n",(value=INREG_DISP(linear_mmio,0x61008))); print_bin_fmt(value,9); value=INREG_DISP(linear_mmio,0x6100c); printf("VTOTAL_B:reg=0x6100c,value=0x%08x(vertical active display lines %d)\n", value,value&0xfff); print_bin_fmt(value,9); printf("VBLANK_B:reg=0x61010,value=0x%08x\n",(value=INREG_DISP(linear_mmio,0x61010))); print_bin_fmt(value,9); printf("VSYNC_B:reg=0x61014,value=0x%08x\n",(value=INREG_DISP(linear_mmio,0x61014))); print_bin_fmt(value,9); printf("PIPEBSRC:reg=0x6101c,value=0x%08x\n",(value=INREG_DISP(linear_mmio,0x6101c))); print_bin_fmt(value,9); value=INREG_DISP(linear_mmio,0x71008); printf("PIPEBCONF:reg=0x%x,value=0x%08x (%s,%s)\n",0x71008, value,value&(1<<31)?"enabled":"disabled",value&(1<<30)?"single wide mode":"double wide mode"); print_bin_fmt(value,9); #if 0 printf("BCLRPAT_B:reg=0x61020,value=0x%08x\n",(value=INREG_DISP(linear_mmio,0x61020))); print_bin_fmt(value,9); printf("CRCCtrlColorB:reg=0x61050,value=0x%08x\n",(value=INREG_DISP(linear_mmio,0x61050))); print_bin_fmt(value,9); printf("CRCCtrlColorB:reg=0x61054,value=0x%08x\n",(value=INREG_DISP(linear_mmio,0x61054))); print_bin_fmt(value,9); printf("CRCResColorB:reg=0x61060,value=0x%08x\n",(value=INREG_DISP(linear_mmio,0x61060))); print_bin_fmt(value,9); #endif printf("PIPEB_DSL:reg=0x%x,value=0x%08x\n",0x71000,(value=INREG_DISP(linear_mmio,0x71000))); print_bin_fmt(value,9); printf("PIPEB_SLC:reg=0x%x,value=0x%08x\n",0x71004,(value=INREG_DISP(linear_mmio,0x71004))); print_bin_fmt(value,9); printf("PIPEBSTAT:reg=0x%x,value=0x%08x\n",0x71024,(value=INREG_DISP(linear_mmio,0x71024))); print_bin_fmt(value,9); #if 0 /* readonly, requires that this pipe's PLL is running */ printf("PIPEBFRAMEH:reg=0x%x,value=0x%08x\n",0x71040,(value=INREG_DISP(linear_mmio,0x71040))); print_bin_fmt(value,9); printf("PIPEBFRAMEPIX:reg=0x%x,value=0x%08x\n",0x71044,(value=INREG_DISP(linear_mmio,0x71044))); print_bin_fmt(value,9); #endif #endif printf("\n"); return 0; } int process_plane(char *cmdhdr) { unsigned int value; unsigned int reg; int i; printf("DSPARB:reg=0x%x,value=0x%08x\n",0x70030,(value=INREG_DISP(linear_mmio,0x70030))); print_bin_fmt(value,9); printf("PLANE A Information...\n"); printf("DSPASTRIDE:reg=0x%x,value=0x%08x\n",0x70188,(value=INREG_DISP(linear_mmio,0x70188))); print_bin_fmt(value,9); printf("DSPASIZE:reg=0x%x,value=0x%08x\n",0x70190,(value=INREG_DISP(linear_mmio,0x70190))); print_bin_fmt(value,9); printf("DSPAKEYVAL:reg=0x%x,value=0x%08x\n",0x70194,(value=INREG_DISP(linear_mmio,0x70194))); print_bin_fmt(value,9); printf("DSPAKEYMASK:reg=0x%x,value=0x%08x\n",0x70198,(value=INREG_DISP(linear_mmio,0x70198))); print_bin_fmt(value,9); printf("DSPASURF:reg=0x%x,value=0x%08x\n",0x7019C,(value=INREG_DISP(linear_mmio,0x7019c))); print_bin_fmt(value,9); printf("DSPATILEOFF:reg=0x%x,value=0x%08x\n",0x701a4,(value=INREG_DISP(linear_mmio,0x701a4))); print_bin_fmt(value,9); printf("DSPAPOS:reg=0x%x,value=0x%08x\n",0x7018C,(value=INREG_DISP(linear_mmio,0x7018C))); print_bin_fmt(value,9); printf("DSPAADDR:reg=0x%x,value=0x%08x\n",0x70184,(value=INREG_DISP(linear_mmio,0x70184))); print_bin_fmt(value,9); value = INREG_DISP(linear_mmio,0x70180); printf("DSPACNTR:reg=0x%x,value=0x%08x(%s,pipe %c selected)\n", 0x70180,value,(value&(1<<31))?"Enabled":"Disabled",(value&(3<<24))?'B':'A'); print_bin_fmt(value,9); printf("\nPLANE B Information...\n"); printf("DSPBSTRIDE:reg=0x%x,value=0x%08x\n",0x71188,(value=INREG_DISP(linear_mmio,0x71188))); print_bin_fmt(value,9); printf("DSPBSIZE:reg=0x%x,value=0x%08x\n",0x71190,(value=INREG_DISP(linear_mmio,0x71190))); print_bin_fmt(value,9); printf("DSPBKEYVAL:reg=0x%x,value=0x%08x\n",0x71194,(value=INREG_DISP(linear_mmio,0x71194))); print_bin_fmt(value,9); printf("DSPBKEYMASK:reg=0x%x,value=0x%08x\n",0x71198,(value=INREG_DISP(linear_mmio,0x71198))); print_bin_fmt(value,9); printf("DSPBSURF:reg=0x%x,value=0x%08x\n",0x7119C,(value=INREG_DISP(linear_mmio,0x7119c))); print_bin_fmt(value,9); printf("DSPBTILEOFF:reg=0x%x,value=0x%08x\n",0x711a4,(value=INREG_DISP(linear_mmio,0x711a4))); print_bin_fmt(value,9); printf("DSPBPOS:reg=0x%x,value=0x%08x\n",0x7118C,(value=INREG_DISP(linear_mmio,0x7118C))); print_bin_fmt(value,9); printf("DSPBADDR:reg=0x%x,value=0x%08x\n",0x71184,(value=INREG_DISP(linear_mmio,0x71184))); print_bin_fmt(value,9); value=INREG_DISP(linear_mmio,0x71180); printf("DSPBCNTR:reg=0x%x,value=0x%08x(%s,pipe %c selected)\n", 0x71180,value, (value&(1<<31))?"Enabled":"Disabled",(value&(3<<24))?'B':'A'); print_bin_fmt(value,9); printf("\nPLANE C Information...\n"); printf("DSPCSTRIDE:reg=0x%x,value=0x%08x\n",0x72188,(value=INREG_DISP(linear_mmio,0x72188))); print_bin_fmt(value,9); printf("DSPCSIZE:reg=0x%x,value=0x%08x\n",0x72190,(value=INREG_DISP(linear_mmio,0x72190))); print_bin_fmt(value,9); printf("DSPCKEYMINVAL:reg=0x%x,value=0x%08x\n",0x72194,(value=INREG_DISP(linear_mmio,0x72194))); print_bin_fmt(value,9); printf("DSPCKEYMAXVAL:reg=0x%x,value=0x%08x\n",0x721A0,(value=INREG_DISP(linear_mmio,0x721A0))); print_bin_fmt(value,9); printf("DSPCKEYMASK:reg=0x%x,value=0x%08x\n",0x72198,(value=INREG_DISP(linear_mmio,0x72198))); print_bin_fmt(value,9); printf("DSPCSURF:reg=0x%x,value=0x%08x\n",0x7219C,(value=INREG_DISP(linear_mmio,0x7219c))); print_bin_fmt(value,9); printf("DSPCTILEOFF:reg=0x%x,value=0x%08x\n",0x721a4,(value=INREG_DISP(linear_mmio,0x721a4))); print_bin_fmt(value,9); printf("DSPCContAlpha:reg=0x%x,value=0x%08x\n",0x721a8,(value=INREG_DISP(linear_mmio,0x721a8))); print_bin_fmt(value,9); printf("DSPCPOS:reg=0x%x,value=0x%08x\n",0x7218C,(value=INREG_DISP(linear_mmio,0x7218C))); print_bin_fmt(value,9); printf("DSPCLINOFF:reg=0x%x,value=0x%08x\n",0x72184,(value=INREG_DISP(linear_mmio,0x72184))); print_bin_fmt(value,9); printf("DCLRC0:reg=0x%x,value=0x%08x\n",0x721d0,(value=INREG_DISP(linear_mmio,0x721d0))); print_bin_fmt(value,9); printf("DCLRC1:reg=0x%x,value=0x%08x\n",0x721d4,(value=INREG_DISP(linear_mmio,0x721d4))); print_bin_fmt(value,9); reg = 0x721e0; for (i=5; i>=0; i--) { printf("GAMC%d:reg=0x%x,value=0x%08x\n",i, reg,(value=INREG_DISP(linear_mmio,reg))); print_bin_fmt(value,9); reg = reg + 4; } value=INREG_DISP(linear_mmio,0x72180); printf("DSPCCNTR:reg=0x%x,value=0x%08x(%s,pipe %c selected)\n", 0x72180,value, (value&(1<<31))?"Enabled":"Disabled",(value&(3<<24))?'B':'A'); print_bin_fmt(value,9); printf("\n"); return 0; } int process_port(char *cmdhdr) { unsigned int value; printf("PORT Information...\n"); value=INREG_DISP(linear_mmio,0x61100); printf("ADPA:reg=0x%x,value=0x%08x (pipe %c selected)\n", 0x61100,(value),(value&(1<<30))?'B':'A'); print_bin_fmt(value,9); printf("\n"); return 0; } int process_fifo(char *cmdhdr) { unsigned int value; unsigned int reg; printf("DSPARB:reg=0x%x,value=0x%08x\n",0x70030,(value=INREG_DISP(linear_mmio,0x70030))); print_bin_fmt(value,9); printf("FW1:reg=0x%x,value=0x%08x\n",0x70034,(value=INREG_DISP(linear_mmio,0x70034))); print_bin_fmt(value,9); reg = 0x70038; printf("FW2:reg=0x%x,value=0x%08x\n",reg,(value=INREG_DISP(linear_mmio,reg))); print_bin_fmt(value,9); reg = 0x7003c; printf("FW3:reg=0x%x,value=0x%08x\n",reg,(value=INREG_DISP(linear_mmio,reg))); print_bin_fmt(value,9); reg = 0x7003c; printf("FW3:reg=0x%x,value=0x%08x\n",reg,(value=INREG_DISP(linear_mmio,reg))); print_bin_fmt(value,9); printf("\n"); return 0; } int process_overlay(char *cmdhdr) { unsigned int value; unsigned int reg; int i; reg = 0x30000; printf("OVADD:reg=0x%x,value=0x%08x\n",reg,(value=INREG_DISP(linear_mmio,reg))); print_bin_fmt(value,9); reg = 0x30004; printf("OTEST:reg=0x%x,value=0x%08x\n",reg,(value=INREG_DISP(linear_mmio,reg))); print_bin_fmt(value,9); reg = 0x30008; printf("DVOSTA:reg=0x%x,value=0x%08x\n",reg,(value=INREG_DISP(linear_mmio,reg))); print_bin_fmt(value,9); reg = 0x3000C; printf("DVOSTAX:reg=0x%x,value=0x%08x\n",reg,(value=INREG_DISP(linear_mmio,reg))); print_bin_fmt(value,9); for (i=0; i<=5;i++) { reg = 0x30010 + 4*i; printf("GAMMA-%d:reg=0x%x,value=0x%08x\n",i, reg,(value=INREG_DISP(linear_mmio,reg))); print_bin_fmt(value,9); } for (i=0; i<=3;i++) { reg = 0x30058 + 4*i; printf("SYNCHPH-%d:reg=0x%x,value=0x%08x\n",i, reg,(value=INREG_DISP(linear_mmio,reg))); print_bin_fmt(value,9); } reg = 0x30100; printf("OBUF_0Y:reg=0x%x,value=0x%08x\n",reg,(value=INREG_DISP(linear_mmio,reg))); print_bin_fmt(value,9); reg = 0x30104; printf("OBUF_1Y:reg=0x%x,value=0x%08x\n",reg,(value=INREG_DISP(linear_mmio,reg))); print_bin_fmt(value,9); reg = 0x30108; printf("OBUF_0U:reg=0x%x,value=0x%08x\n",reg,(value=INREG_DISP(linear_mmio,reg))); print_bin_fmt(value,9); reg = 0x3010C; printf("OBUF_0V:reg=0x%x,value=0x%08x\n",reg,(value=INREG_DISP(linear_mmio,reg))); print_bin_fmt(value,9); reg = 0x30110; printf("OBUF_1U:reg=0x%x,value=0x%08x\n",reg,(value=INREG_DISP(linear_mmio,reg))); print_bin_fmt(value,9); reg = 0x30114; printf("OBUF_1V:reg=0x%x,value=0x%08x\n",reg,(value=INREG_DISP(linear_mmio,reg))); print_bin_fmt(value,9); reg = 0x30118; printf("OSTRIDE:reg=0x%x,value=0x%08x\n",reg,(value=INREG_DISP(linear_mmio,reg))); print_bin_fmt(value,9); reg = 0x3011C; printf("YRGB_VPH:reg=0x%x,value=0x%08x\n",reg,(value=INREG_DISP(linear_mmio,reg))); print_bin_fmt(value,9); reg = 0x30120; printf("UV_VPH:reg=0x%x,value=0x%08x\n",reg,(value=INREG_DISP(linear_mmio,reg))); print_bin_fmt(value,9); reg = 0x30124; printf("HORZ_PH:reg=0x%x,value=0x%08x\n",reg,(value=INREG_DISP(linear_mmio,reg))); print_bin_fmt(value,9); reg = 0x30128; printf("INIT_PHS:reg=0x%x,value=0x%08x\n",reg,(value=INREG_DISP(linear_mmio,reg))); print_bin_fmt(value,9); reg = 0x3012C; printf("DWINPOS:reg=0x%x,value=0x%08x\n",reg,(value=INREG_DISP(linear_mmio,reg))); print_bin_fmt(value,9); reg = 0x30130; printf("DWINSZ:reg=0x%x,value=0x%08x\n",reg,(value=INREG_DISP(linear_mmio,reg))); print_bin_fmt(value,9); reg = 0x30134; printf("DWINSZ:reg=0x%x,value=0x%08x\n",reg,(value=INREG_DISP(linear_mmio,reg))); print_bin_fmt(value,9); reg = 0x30138; printf("SWIDTHSW:reg=0x%x,value=0x%08x\n",reg,(value=INREG_DISP(linear_mmio,reg))); print_bin_fmt(value,9); reg = 0x3013C; printf("SHEIGHT:reg=0x%x,value=0x%08x\n",reg,(value=INREG_DISP(linear_mmio,reg))); print_bin_fmt(value,9); reg = 0x30168; printf("OCMD:reg=0x%x,value=0x%08x\n",reg,(value=INREG_DISP(linear_mmio,reg))); print_bin_fmt(value,9); reg = 0x30170; printf("OSTART_0Y:reg=0x%x,value=0x%08x\n",reg,(value=INREG_DISP(linear_mmio,reg))); print_bin_fmt(value,9); reg = 0x30174; printf("OSTART_1Y:reg=0x%x,value=0x%08x\n",reg,(value=INREG_DISP(linear_mmio,reg))); print_bin_fmt(value,9); reg = 0x30178; printf("OSTART_0U:reg=0x%x,value=0x%08x\n",reg,(value=INREG_DISP(linear_mmio,reg))); print_bin_fmt(value,9); reg = 0x3017C; printf("OSTART_0V:reg=0x%x,value=0x%08x\n",reg,(value=INREG_DISP(linear_mmio,reg))); print_bin_fmt(value,9); reg = 0x30180; printf("OSTART_1U:reg=0x%x,value=0x%08x\n",reg,(value=INREG_DISP(linear_mmio,reg))); print_bin_fmt(value,9); reg = 0x30184; printf("OSTART_1V:reg=0x%x,value=0x%08x\n",reg,(value=INREG_DISP(linear_mmio,reg))); print_bin_fmt(value,9); printf("\n"); return 0; }