本文将介绍dump OpRegion的方法以及OpRegion内容的含义。

1. Background

gpu display in uefi bios phase

2. How to dump OpRegion

在i915 driver的debugfs中,hexdump出OpRegion的具体内容。

1
2
3
4
5
6
root@junming:/sys/kernel/debug/dri/0# pwd
/sys/kernel/debug/dri/0
root@junming:/sys/kernel/debug/dri/0# hexdump -C i915_opregion
00000000 49 6e 74 65 6c 47 72 61 70 68 69 63 73 4d 65 6d |IntelGraphicsMem|
00000010 08 00 00 00 00 00 00 02 00 00 00 00 00 00 00 00 |................|
...

i915 driver中的源码如下:

1
2
3
4
5
6
7
8
9
static int i915_opregion(struct seq_file *m, void *unused)
{
struct intel_opregion *opregion = &node_to_i915(m->private)->opregion;

if (opregion->header)
seq_write(m, opregion->header, OPREGION_SIZE);

return 0;
}

3. How to analyze OpRegion content

spec: IGD OpRegion/Software SCI/_DSM for Skylake Processors

1
00000000  49 6e 74 65 6c 47 72 61  70 68 69 63 73 4d 65 6d  |IntelGraphicsMem|

由此可见,解析出来的内容与spec一致。

1
00000010  08 00 00 00 00 00 00 02  00 00 00 00 00 00 00 00  |................|

根据spec,从00 00 00 02可知,OpRegion的version是2.0。

人肉解析OpRegion的内容,OpRegion一般也就看关键几个位置,不用全部解析。


参考资料:

  1. how to use i915 debugfs interface
  2. IGD OpRegion/Software SCI/_DSM for Skylake Processors
  3. Linux kernel i915 driver