[PATCH i-g-t 07/27] tools/intel_vbt_decode: Decode blocks 6, 7, 8 (register tables)
Ville Syrjala
ville.syrjala at linux.intel.com
Fri Jun 7 13:57:38 UTC 2024
From: Ville Syrjälä <ville.syrjala at linux.intel.com>
Decode VBT blocks 6,7,8:
- Block 6 (Extended MMIO Register Table)
- Block 7 (IO Software Flag Table)
- Block 8 (MMIO SWF Register Table)
These just contain either 8bit or 32bit register/value pairs.
Example output from ALM:
BDB block 6 (333 bytes, min 3 bytes) - Extended MMIO registers:
0000: 06 4d 01 fc ff 02 00 60 00 00 07 12 02 00 04 60
0010: 00 00 06 14 03 00 10 60 00 00 8b 88 00 00 40 60
0020: 00 00 07 12 02 00 44 60 00 00 07 12 02 00 14 60
0030: 00 00 00 00 8b 80 48 60 00 00 07 12 02 00 4c 60
0040: 00 00 07 12 02 00 18 60 00 00 00 00 8b 80 80 00
0050: 07 00 00 00 00 00 80 01 07 00 00 00 00 00 80 11
0060: 07 00 00 00 00 01 80 12 07 00 00 00 00 00 00 14
0070: 07 00 00 00 00 80 00 00 06 00 7f 02 1f 03 04 00
0080: 06 00 87 02 17 03 08 00 06 00 8f 02 ef 02 0c 00
0090: 06 00 df 01 0c 02 10 00 06 00 e7 01 04 02 14 00
00a0: 06 00 e9 01 eb 01 1c 00 06 00 df 01 7f 02 00 10
00b0: 06 00 7f 02 1f 03 04 10 06 00 87 02 17 03 08 10
00c0: 06 00 8f 02 ef 02 0c 10 06 00 df 01 0c 02 10 10
00d0: 06 00 e7 01 04 02 14 10 06 00 e9 01 eb 01 1c 10
00e0: 06 00 df 01 7f 02 d8 20 00 00 08 01 08 01 dc 20
00f0: 00 00 08 01 00 00 cc 20 00 00 0c 00 0c 00 30 00
0100: 07 00 5f 7e 01 00 08 00 07 00 00 00 00 80 08 10
0110: 07 00 00 00 00 80 00 14 07 00 8e 00 20 00 00 11
0120: 06 00 18 80 00 80 00 00 00 00 00 00 00 00 00 00
0130: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0140: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ff ff
Table Id: 0xfffc
Data access size: 0x02
0x00006000: 0x00021207
0x00006004: 0x00031406
0x00006010: 0x0000888b
...
0x00000000: 0x00000000
0x00000000: 0x00000000
0x00000000: 0x00000000
Table end marker: 0xffff
BDB block 7 (7 bytes, min 3 bytes) - IO software flag:
0000: 07 07 00 fe ff ce 18 00 ff ff
Table Id: 0xfffe
Data access size: 0xce
0x18: 0x00
Table end marker: 0xffff
BDB block 8 (61 bytes, min 3 bytes) - MMIO SWF register table:
0000: 08 3d 00 fc ff 02 10 14 07 00 01 00 00 00 14 14
0010: 07 00 01 00 00 00 18 14 07 00 55 01 00 00 1c 14
0020: 07 00 00 00 03 03 20 14 07 00 00 00 00 00 24 14
0030: 07 00 01 00 00 00 28 14 07 00 00 00 00 00 ff ff
Table Id: 0xfffc
Data access size: 0x02
0x00071410: 0x00000001
0x00071414: 0x00000001
0x00071418: 0x00000155
0x0007141c: 0x03030000
0x00071420: 0x00000000
0x00071424: 0x00000001
0x00071428: 0x00000000
Table end marker: 0xffff
Signed-off-by: Ville Syrjälä <ville.syrjala at linux.intel.com>
---
tools/intel_vbt_decode.c | 53 ++++++++++++++++++++++++++++++++++++++++
1 file changed, 53 insertions(+)
diff --git a/tools/intel_vbt_decode.c b/tools/intel_vbt_decode.c
index 829d4c560916..3997c548d041 100644
--- a/tools/intel_vbt_decode.c
+++ b/tools/intel_vbt_decode.c
@@ -323,6 +323,10 @@ static size_t block_min_size(const struct context *context, int section_id)
case BDB_GENERIC_MODE_TABLE:
return max(sizeof(struct bdb_generic_mode_table_alm),
sizeof(struct bdb_generic_mode_table_mgm));
+ case BDB_EXT_MMIO_REGS:
+ case BDB_SWF_IO:
+ case BDB_SWF_MMIO:
+ return sizeof(struct bdb_reg_table);
case BDB_PSR:
return sizeof(struct bdb_psr);
case BDB_CHILD_DEVICE_TABLE:
@@ -1361,6 +1365,40 @@ static void dump_generic_mode_table(struct context *context,
dump_generic_mode_table_alm(block);
}
+static void dump_reg_table(struct context *context,
+ const struct bdb_block *block)
+{
+ const struct bdb_reg_table *t = block_data(block);
+ const void *data = (const void *)t + sizeof(*t);
+ const void *end = (const void *)t + block->size - 2;
+
+ printf("\tTable Id: 0x%0x\n", t->table_id);
+ printf("\tData access size: 0x%02x\n", t->data_access_size);
+
+ switch (t->data_access_size) {
+ case 0xce:
+ for (; data < end; data += 2 * 1) {
+ const uint8_t *entry = data;
+
+ printf("\t\t0x%02x: 0x%02x\n", entry[0], entry[1]);
+ }
+ break;
+ case 0x02:
+ for (; data < end; data += 2 * 4) {
+ const uint32_t *entry = data;
+
+ printf("\t\t0x%08x: 0x%08x\n", entry[0], entry[1]);
+ }
+ break;
+ default:
+ printf("\t\tUnknown data access size\n");
+ return;
+ }
+
+ printf("\tTable end marker: 0x%04x\n",
+ *(const uint16_t *)end);
+}
+
static void dump_legacy_child_devices(struct context *context,
const struct bdb_block *block)
{
@@ -2854,6 +2892,21 @@ struct dumper dumpers[] = {
.name = "Generic mode table",
.dump = dump_generic_mode_table,
},
+ {
+ .id = BDB_EXT_MMIO_REGS,
+ .name = "Extended MMIO registers",
+ .dump = dump_reg_table,
+ },
+ {
+ .id = BDB_SWF_IO,
+ .name = "IO software flag",
+ .dump = dump_reg_table,
+ },
+ {
+ .id = BDB_SWF_MMIO,
+ .name = "MMIO SWF register table",
+ .dump = dump_reg_table,
+ },
{
.id = BDB_PSR,
.min_bdb_version = 165,
--
2.44.2
More information about the igt-dev
mailing list