summaryrefslogtreecommitdiff
path: root/tools
diff options
context:
space:
mode:
authorVille Syrjälä <ville.syrjala@linux.intel.com>2016-09-12 13:34:53 +0300
committerVille Syrjälä <ville.syrjala@linux.intel.com>2016-09-26 12:26:24 +0300
commit8e4ce75542a958ed62dcc5f1f80d92767e0187c8 (patch)
tree411a2af0e962ecb82218fc4e8915003e75cd2836 /tools
parent94ca170e9e6943931261398b9987a7101565125f (diff)
tools/intel_bios_reader: Dump PSR block from VBT
Decode the PSR block (9) from VBT. Looks like the same block ID may have been used for something else in the past, so a version check is also needed. The wakeup times part is still up in the air due to the spec not knowing what it's saying, but let's do something that makes at least some sense given the VBTs currently out there in the wild. v2: Actually dump out tp2/3 wakeup time Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Diffstat (limited to 'tools')
-rw-r--r--tools/intel_bios.h15
-rw-r--r--tools/intel_bios_reader.c54
2 files changed, 69 insertions, 0 deletions
diff --git a/tools/intel_bios.h b/tools/intel_bios.h
index 925bb06c..324ef4a7 100644
--- a/tools/intel_bios.h
+++ b/tools/intel_bios.h
@@ -63,6 +63,7 @@ struct bdb_header {
#define BDB_SWF_IO 7
#define BDB_SWF_MMIO 8
#define BDB_DOT_CLOCK_TABLE 9
+#define BDB_PSR 9
#define BDB_MODE_REMOVAL_TABLE 10
#define BDB_CHILD_DEVICE_TABLE 11
#define BDB_DRIVER_FEATURES 12
@@ -691,6 +692,20 @@ struct bdb_edp { /* 155 */
struct edp_full_link_params full_link_params[16]; /* 199 */
} __attribute__ ((packed));
+struct psr_params {
+ uint8_t full_link:1;
+ uint8_t require_aux_to_wakeup:1;
+ uint8_t rsvd1:6;
+ uint8_t idle_frames:4;
+ uint8_t lines_to_wait:3;
+ uint8_t rsvd2:1;
+ uint16_t tp1_wakeup_time;
+ uint16_t tp2_tp3_wakeup_time;
+} __attribute__ ((packed));
+
+struct bdb_psr {
+ struct psr_params psr[16];
+} __attribute__ ((packed));
/* Block 52 contains MiPi Panel info
* 6 such enteries will there. Index into correct
diff --git a/tools/intel_bios_reader.c b/tools/intel_bios_reader.c
index e3daa742..8aea7b02 100644
--- a/tools/intel_bios_reader.c
+++ b/tools/intel_bios_reader.c
@@ -907,6 +907,55 @@ static void dump_edp(struct context *context,
}
}
+static void dump_psr(struct context *context,
+ const struct bdb_block *block)
+{
+ const struct bdb_psr *psr = block->data;
+ int i;
+
+ /* The same block ID was used for something else before? */
+ if (context->bdb->version < 165)
+ return;
+
+ for (i = 0; i < 16; i++) {
+ if (i != context->panel_type && !context->dump_all_panel_types)
+ continue;
+
+ printf("\tPanel %d%s\n", i, context->panel_type == i ? " *" : "");
+
+ printf("\t\tFull link: %s\n", YESNO(psr->psr[i].full_link));
+ printf("\t\tRequire AUX to wakeup: %s\n", YESNO(psr->psr[i].require_aux_to_wakeup));
+
+ switch (psr->psr[i].lines_to_wait) {
+ case 0:
+ case 1:
+ printf("\t\tLines to wait before link standby: %d\n",
+ psr->psr[i].lines_to_wait);
+ break;
+ case 2:
+ case 3:
+ printf("\t\tLines to wait before link standby: %d\n",
+ 1 << psr->psr[i].lines_to_wait);
+ break;
+ default:
+ printf("\t\tLines to wait before link standby: (unknown) (0x%x)\n",
+ psr->psr[i].lines_to_wait);
+ break;
+ }
+
+ printf("\t\tIdle frames to for PSR enable: %d\n",
+ psr->psr[i].idle_frames);
+
+ printf("\t\tTP1 wakeup time: %d usec (0x%x)\n",
+ psr->psr[i].tp1_wakeup_time * 100,
+ psr->psr[i].tp1_wakeup_time);
+
+ printf("\t\tTP2/TP3 wakeup time: %d usec (0x%x)\n",
+ psr->psr[i].tp2_tp3_wakeup_time * 100,
+ psr->psr[i].tp2_tp3_wakeup_time);
+ }
+}
+
static void
print_detail_timing_data(const struct lvds_dvo_timing2 *dvo_timing)
{
@@ -1519,6 +1568,11 @@ struct dumper dumpers[] = {
.dump = dump_edp,
},
{
+ .id = BDB_PSR,
+ .name = "PSR block",
+ .dump = dump_psr,
+ },
+ {
.id = BDB_MIPI_CONFIG,
.name = "MIPI configuration block",
.dump = dump_mipi_config,