intel_extreme: add a command to dump pipe config

I look at this all the time and entering register offsets and converting
from hex was getting annoying.
This commit is contained in:
Adrien Destugues
2020-01-25 19:48:47 +01:00
parent 03ee42a8eb
commit 1fa0a12d75
@@ -96,6 +96,91 @@ getset_register(int argc, char** argv)
return 0;
}
static int
dump_pipe_info(int argc, char** argv)
{
int pipeOffset = 0;
if (argc > 2) {
kprintf("usage: %s [pipe index]\n", argv[0]);
return 0;
}
if (argc > 1) {
uint32 pipe = parse_expression(argv[1]);
if (pipe != 0)
pipeOffset = INTEL_DISPLAY_OFFSET; // Use pipe B if requested
}
intel_info &info = *gDeviceInfo[0];
uint32 value;
kprintf("intel_extreme pipe configuration:\n");
value = read32(info, INTEL_DISPLAY_A_HTOTAL + pipeOffset);
kprintf(" HTOTAL start %" B_PRIu32 " end %" B_PRIu32 "\n", value >> 16,
value & 0xFFFF);
value = read32(info, INTEL_DISPLAY_A_HBLANK + pipeOffset);
kprintf(" HBLANK start %" B_PRIu32 " end %" B_PRIu32 "\n", value >> 16,
value & 0xFFFF);
value = read32(info, INTEL_DISPLAY_A_HSYNC + pipeOffset);
kprintf(" HSYNC start %" B_PRIu32 " end %" B_PRIu32 "\n", value >> 16,
value & 0xFFFF);
value = read32(info, INTEL_DISPLAY_A_VTOTAL + pipeOffset);
kprintf(" VTOTAL start %" B_PRIu32 " end %" B_PRIu32 "\n", value >> 16,
value & 0xFFFF);
value = read32(info, INTEL_DISPLAY_A_VBLANK + pipeOffset);
kprintf(" VBLANK start %" B_PRIu32 " end %" B_PRIu32 "\n", value >> 16,
value & 0xFFFF);
value = read32(info, INTEL_DISPLAY_A_VSYNC + pipeOffset);
kprintf(" VSYNC start %" B_PRIu32 " end %" B_PRIu32 "\n", value >> 16,
value & 0xFFFF);
value = read32(info, INTEL_DISPLAY_A_PIPE_SIZE + pipeOffset);
kprintf(" SIZE %" B_PRIu32 "x%" B_PRIu32 "\n", value >> 16,
value & 0xFFFF);
if (info.pch_info != INTEL_PCH_NONE) {
kprintf("intel_extreme transcoder configuration:\n");
value = read32(info, INTEL_TRANSCODER_A_HTOTAL + pipeOffset);
kprintf(" HTOTAL start %" B_PRIu32 " end %" B_PRIu32 "\n", value >> 16,
value & 0xFFFF);
value = read32(info, INTEL_TRANSCODER_A_HBLANK + pipeOffset);
kprintf(" HBLANK start %" B_PRIu32 " end %" B_PRIu32 "\n", value >> 16,
value & 0xFFFF);
value = read32(info, INTEL_TRANSCODER_A_HSYNC + pipeOffset);
kprintf(" HSYNC start %" B_PRIu32 " end %" B_PRIu32 "\n", value >> 16,
value & 0xFFFF);
value = read32(info, INTEL_TRANSCODER_A_VTOTAL + pipeOffset);
kprintf(" VTOTAL start %" B_PRIu32 " end %" B_PRIu32 "\n", value >> 16,
value & 0xFFFF);
value = read32(info, INTEL_TRANSCODER_A_VBLANK + pipeOffset);
kprintf(" VBLANK start %" B_PRIu32 " end %" B_PRIu32 "\n", value >> 16,
value & 0xFFFF);
value = read32(info, INTEL_TRANSCODER_A_VSYNC + pipeOffset);
kprintf(" VSYNC start %" B_PRIu32 " end %" B_PRIu32 "\n", value >> 16,
value & 0xFFFF);
value = read32(info, INTEL_TRANSCODER_A_IMAGE_SIZE + pipeOffset);
kprintf(" SIZE %" B_PRIu32 "x%" B_PRIu32 "\n", value >> 16,
value & 0xFFFF);
}
kprintf("intel_extreme display plane configuration:\n");
value = read32(info, INTEL_DISPLAY_A_CONTROL + pipeOffset);
kprintf(" CONTROL: %" B_PRIx32 "\n", value);
value = read32(info, INTEL_DISPLAY_A_BASE + pipeOffset);
kprintf(" BASE: %" B_PRIx32 "\n", value);
value = read32(info, INTEL_DISPLAY_A_BYTES_PER_ROW + pipeOffset);
kprintf(" BYTES_PER_ROW: %" B_PRIx32 "\n", value);
value = read32(info, INTEL_DISPLAY_A_SURFACE + pipeOffset);
kprintf(" SURFACE: %" B_PRIx32 "\n", value);
return 0;
}
#endif // DEBUG_COMMANDS
@@ -133,6 +218,8 @@ device_open(const char* name, uint32 /*flags*/, void** _cookie)
#ifdef DEBUG_COMMANDS
add_debugger_command("ie_reg", getset_register,
"dumps or sets the specified intel_extreme register");
add_debugger_command("ie_pipe", dump_pipe_info,
"show pipe configuration information");
#endif
}
}
@@ -171,6 +258,7 @@ device_free(void* data)
#ifdef DEBUG_COMMANDS
remove_debugger_command("ie_reg", getset_register);
remove_debugger_command("ie_pipe", dump_pipe_info);
#endif
}