summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVille Syrjälä <ville.syrjala@linux.intel.com>2021-02-10 18:42:23 +0200
committerVille Syrjälä <ville.syrjala@linux.intel.com>2022-06-22 15:37:50 +0300
commit96972440c4f8c67759675b9ccf24a5dc3fd5b15a (patch)
tree3babc3018dc0738e5b53bacb9e3e6597f288b00b
parentbe57da217deab276be5a716aa6c5cdc3695829be (diff)
tools/intel_vbt_decode: Decode DP max link rate
Decode the child device DP max link rate stuff. Reviewed-by: Jani Nikula <jani.nikula@intel.com> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
-rw-r--r--tools/intel_vbt_decode.c50
1 files changed, 49 insertions, 1 deletions
diff --git a/tools/intel_vbt_decode.c b/tools/intel_vbt_decode.c
index a91273d8..77de7506 100644
--- a/tools/intel_vbt_decode.c
+++ b/tools/intel_vbt_decode.c
@@ -441,6 +441,51 @@ static void dump_hmdi_max_data_rate(uint8_t hdmi_max_data_rate)
hdmi_max_data_rate);
}
+static int parse_dp_max_link_rate_216(uint8_t dp_max_link_rate)
+{
+ static const uint16_t max_link_rate[] = {
+ [BDB_216_VBT_DP_MAX_LINK_RATE_HBR3] = 810,
+ [BDB_216_VBT_DP_MAX_LINK_RATE_HBR2] = 540,
+ [BDB_216_VBT_DP_MAX_LINK_RATE_HBR] = 270,
+ [BDB_216_VBT_DP_MAX_LINK_RATE_LBR] = 162,
+ };
+
+ return max_link_rate[dp_max_link_rate & 0x3];
+}
+
+static int parse_dp_max_link_rate_230(uint8_t dp_max_link_rate)
+{
+ static const uint16_t max_link_rate[] = {
+ [BDB_230_VBT_DP_MAX_LINK_RATE_DEF] = 0,
+ [BDB_230_VBT_DP_MAX_LINK_RATE_LBR] = 162,
+ [BDB_230_VBT_DP_MAX_LINK_RATE_HBR] = 270,
+ [BDB_230_VBT_DP_MAX_LINK_RATE_HBR2] = 540,
+ [BDB_230_VBT_DP_MAX_LINK_RATE_HBR3] = 810,
+ [BDB_230_VBT_DP_MAX_LINK_RATE_UHBR10] = 1000,
+ [BDB_230_VBT_DP_MAX_LINK_RATE_UHBR13P5] = 1350,
+ [BDB_230_VBT_DP_MAX_LINK_RATE_UHBR20] = 2000,
+ };
+
+ return max_link_rate[dp_max_link_rate];
+}
+
+static void dump_dp_max_link_rate(uint16_t version, uint8_t dp_max_link_rate)
+{
+ int link_rate;
+
+ if (version >= 230)
+ link_rate = parse_dp_max_link_rate_230(dp_max_link_rate);
+ else
+ link_rate = parse_dp_max_link_rate_216(dp_max_link_rate);
+
+ if (link_rate == 0)
+ printf("\t\tDP max link rate: <platform max> (0x%02x)\n",
+ dp_max_link_rate);
+ else
+ printf("\t\tDP max link rate: %g Gbps (0x%02x)\n",
+ link_rate / 100.0f, dp_max_link_rate);
+}
+
static void dump_child_device(struct context *context,
const struct child_device_config *child)
{
@@ -524,8 +569,11 @@ static void dump_child_device(struct context *context,
printf("\t\tIBoost level for HDMI: 0x%02x\n", child->hdmi_iboost_level);
printf("\t\tIBoost level for DP/eDP: 0x%02x\n", child->dp_iboost_level);
}
-}
+ if (context->bdb->version >= 216)
+ dump_dp_max_link_rate(context->bdb->version,
+ child->dp_max_link_rate);
+}
static void dump_child_devices(struct context *context, const uint8_t *devices,
uint8_t child_dev_num, uint8_t child_dev_size)