[PATCH i-g-t 3/4] tools/displaytop: Add DPCD register read support
Adith Narein T
adith.narein.t at intel.com
Tue May 27 09:24:27 UTC 2025
This patch introduces DPCD (DisplayPort Configuration Data) register
read support to the DisplayTop tool. It allows users to inspect the
state of connected DisplayPort sinks via a terminal-based UI.
The implementation uses the DRM subsystem’s drm_dp.h header to provide
official DPCD register addresses and bitfield definitions. This ensures
accurate decoding and interpretation of register contents.
Features included in this patch:
- DPCD register dump per connected DisplayPort output
- Bitfield parsing and labeling using drm_dp.h macros
Signed-off-by: Adith Narein T <adith.narein.t at intel.com>
---
tools/displaytop/README.md | 1 +
tools/displaytop/data/dpcd.json | 4661 ++++++++++++++++++++++++
tools/displaytop/include/data.h | 14 +
tools/displaytop/include/display.h | 1 +
tools/displaytop/include/populate.h | 1 +
tools/displaytop/include/utils.h | 8 +-
tools/displaytop/meson.build | 5 +-
tools/displaytop/src/data.c | 15 +-
tools/displaytop/src/display_DPCD.c | 277 ++
tools/displaytop/src/populate.c | 1 +
tools/displaytop/src/populate_DPCD.c | 250 ++
tools/displaytop/src/utils.c | 66 +
tools/displaytop/src/utils_registers.c | 97 +
13 files changed, 5394 insertions(+), 3 deletions(-)
create mode 100644 tools/displaytop/data/dpcd.json
create mode 100644 tools/displaytop/src/display_DPCD.c
create mode 100644 tools/displaytop/src/populate_DPCD.c
create mode 100644 tools/displaytop/src/utils_registers.c
diff --git a/tools/displaytop/README.md b/tools/displaytop/README.md
index 2c9005302..cd3b004d6 100644
--- a/tools/displaytop/README.md
+++ b/tools/displaytop/README.md
@@ -8,6 +8,7 @@ A terminal-based tool for monitoring and debugging the display pipeline.
- Dump feature for all the menus
- Real-time display Configuration
- view Live Display Debugfs in a terminal ui
+- Read & view DPCD register value & bitfield information
---
diff --git a/tools/displaytop/data/dpcd.json b/tools/displaytop/data/dpcd.json
new file mode 100644
index 000000000..c5d23023a
--- /dev/null
+++ b/tools/displaytop/data/dpcd.json
@@ -0,0 +1,4661 @@
+{
+ "DP_DPCD": {
+ "DP_DPCD_REV": {
+ "address": "0x000",
+ "bitfields": [
+ {
+ "name": "DP_DPCD_REV_10",
+ "value": "0x10"
+ },
+ {
+ "name": "DP_DPCD_REV_11",
+ "value": "0x11"
+ },
+ {
+ "name": "DP_DPCD_REV_12",
+ "value": "0x12"
+ },
+ {
+ "name": "DP_DPCD_REV_13",
+ "value": "0x13"
+ },
+ {
+ "name": "DP_DPCD_REV_14",
+ "value": "0x14"
+ }
+ ]
+ },
+ "DP_DPCD_MAX_ADD": {
+ "address": "0xfffff"
+ }
+ },
+ "DP_MAX": {
+ "DP_MAX_LINK_RATE": {
+ "address": "0x001"
+ },
+ "DP_MAX_LANE_COUNT": {
+ "address": "0x002",
+ "bitfields": [
+ {
+ "name": "DP_MAX_LANE_COUNT_MASK",
+ "value": "0x1f"
+ },
+ {
+ "name": "DP_TPS3_SUPPORTED",
+ "value": "(1 << 6) /* 1.2 */"
+ },
+ {
+ "name": "DP_ENHANCED_FRAME_CAP",
+ "value": "(1 << 7)"
+ }
+ ]
+ },
+ "DP_MAX_DOWNSPREAD": {
+ "address": "0x003",
+ "bitfields": [
+ {
+ "name": "DP_MAX_DOWNSPREAD_0_5",
+ "value": "(1 << 0)"
+ },
+ {
+ "name": "DP_STREAM_REGENERATION_STATUS_CAP",
+ "value": "(1 << 1) /* 2.0 */"
+ },
+ {
+ "name": "DP_NO_AUX_HANDSHAKE_LINK_TRAINING",
+ "value": "(1 << 6)"
+ },
+ {
+ "name": "DP_TPS4_SUPPORTED",
+ "value": "(1 << 7)"
+ }
+ ]
+ },
+ "DP_MAX_DOWNSTREAM_PORTS": {
+ "address": "0x10"
+ },
+ "DP_MAX_LINK_RATE_PHY_REPEATER": {
+ "address": "0xf0001"
+ },
+ "DP_MAX_LANE_COUNT_PHY_REPEATER": {
+ "address": "0xf0004"
+ }
+ },
+ "DP_NORP": {
+ "address": "0x004"
+ },
+ "DP_DOWNSTREAMPORT_PRESENT": {
+ "address": "0x005",
+ "bitfields": [
+ {
+ "name": "DP_DWN_STRM_PORT_PRESENT",
+ "value": "(1 << 0)"
+ },
+ {
+ "name": "DP_DWN_STRM_PORT_TYPE_MASK",
+ "value": "0x06"
+ },
+ {
+ "name": "DP_DWN_STRM_PORT_TYPE_DP",
+ "value": "(0 << 1)"
+ },
+ {
+ "name": "DP_DWN_STRM_PORT_TYPE_ANALOG",
+ "value": "(1 << 1)"
+ },
+ {
+ "name": "DP_DWN_STRM_PORT_TYPE_TMDS",
+ "value": "(2 << 1)"
+ },
+ {
+ "name": "DP_DWN_STRM_PORT_TYPE_OTHER",
+ "value": "(3 << 1)"
+ },
+ {
+ "name": "DP_FORMAT_CONVERSION",
+ "value": "(1 << 3)"
+ },
+ {
+ "name": "DP_DETAILED_CAP_INFO_AVAILABLE",
+ "value": "(1 << 4) /* DPI */"
+ }
+ ]
+ },
+ "DP_MAIN": {
+ "DP_MAIN_LINK_CHANNEL_CODING": {
+ "address": "0x006",
+ "bitfields": [
+ {
+ "name": "DP_CAP_ANSI_8B10B",
+ "value": "(1 << 0)"
+ },
+ {
+ "name": "DP_CAP_ANSI_128B132B",
+ "value": "(1 << 1) /* 2.0 */"
+ }
+ ]
+ },
+ "DP_MAIN_LINK_CHANNEL_CODING_SET": {
+ "address": "0x108",
+ "bitfields": [
+ {
+ "name": "DP_SET_ANSI_8B10B",
+ "value": "(1 << 0)"
+ },
+ {
+ "name": "DP_SET_ANSI_128B132B",
+ "value": "(1 << 1)"
+ }
+ ]
+ },
+ "DP_MAIN_LINK_CHANNEL_CODING_PHY_REPEATER": {
+ "address": "0xf0006",
+ "bitfields": [
+ {
+ "name": "DP_PHY_REPEATER_128B132B_SUPPORTED",
+ "value": "(1 << 0)"
+ }
+ ]
+ }
+ },
+ "DP_DOWN_STREAM_PORT_COUNT": {
+ "address": "0x007",
+ "bitfields": [
+ {
+ "name": "DP_PORT_COUNT_MASK",
+ "value": "0x0f"
+ },
+ {
+ "name": "DP_MSA_TIMING_PAR_IGNORED",
+ "value": "(1 << 6) /* eDP */"
+ },
+ {
+ "name": "DP_OUI_SUPPORT",
+ "value": "(1 << 7)"
+ }
+ ]
+ },
+ "DP_RECEIVE": {
+ "DP_RECEIVE_PORT_0_CAP_0": {
+ "address": "0x008",
+ "bitfields": [
+ {
+ "name": "DP_LOCAL_EDID_PRESENT",
+ "value": "(1 << 1)"
+ },
+ {
+ "name": "DP_ASSOCIATED_TO_PRECEDING_PORT",
+ "value": "(1 << 2)"
+ },
+ {
+ "name": "DP_HBLANK_EXPANSION_CAPABLE",
+ "value": "(1 << 3)"
+ }
+ ]
+ },
+ "DP_RECEIVE_PORT_0_BUFFER_SIZE": {
+ "address": "0x009"
+ },
+ "DP_RECEIVE_PORT_1_CAP_0": {
+ "address": "0x00a"
+ },
+ "DP_RECEIVE_PORT_1_BUFFER_SIZE": {
+ "address": "0x00b"
+ }
+ },
+ "DP_I2C": {
+ "DP_I2C_SPEED_CAP": {
+ "address": "0x00c",
+ "bitfields": [
+ {
+ "name": "DP_I2C_SPEED_1K",
+ "value": "0x01"
+ },
+ {
+ "name": "DP_I2C_SPEED_5K",
+ "value": "0x02"
+ },
+ {
+ "name": "DP_I2C_SPEED_10K",
+ "value": "0x04"
+ },
+ {
+ "name": "DP_I2C_SPEED_100K",
+ "value": "0x08"
+ },
+ {
+ "name": "DP_I2C_SPEED_400K",
+ "value": "0x10"
+ },
+ {
+ "name": "DP_I2C_SPEED_1M",
+ "value": "0x20"
+ }
+ ]
+ },
+ "DP_I2C_SPEED_CONTROL_STATUS": {
+ "address": "0x109"
+ }
+ },
+ "DP_EDP": {
+ "DP_EDP_CONFIGURATION_CAP": {
+ "address": "0x00d",
+ "bitfields": [
+ {
+ "name": "DP_ALTERNATE_SCRAMBLER_RESET_CAP",
+ "value": "(1 << 0)"
+ },
+ {
+ "name": "DP_FRAMING_CHANGE_CAP",
+ "value": "(1 << 1)"
+ },
+ {
+ "name": "DP_DPCD_DISPLAY_CONTROL_CAPABLE",
+ "value": "(1 << 3) /* edp v1.2 or higher */"
+ }
+ ]
+ },
+ "DP_EDP_CONFIGURATION_SET": {
+ "address": "0x10a",
+ "bitfields": [
+ {
+ "name": "DP_ALTERNATE_SCRAMBLER_RESET_ENABLE",
+ "value": "(1 << 0)"
+ },
+ {
+ "name": "DP_FRAMING_CHANGE_ENABLE",
+ "value": "(1 << 1)"
+ },
+ {
+ "name": "DP_PANEL_SELF_TEST_ENABLE",
+ "value": "(1 << 7)"
+ }
+ ]
+ },
+ "DP_EDP_DPCD_REV": {
+ "address": "0x700",
+ "bitfields": [
+ {
+ "name": "DP_EDP_11",
+ "value": "0x00"
+ },
+ {
+ "name": "DP_EDP_12",
+ "value": "0x01"
+ },
+ {
+ "name": "DP_EDP_13",
+ "value": "0x02"
+ },
+ {
+ "name": "DP_EDP_14",
+ "value": "0x03"
+ },
+ {
+ "name": "DP_EDP_14a",
+ "value": "0x04 /* eDP 1.4a */"
+ },
+ {
+ "name": "DP_EDP_14b",
+ "value": "0x05 /* eDP 1.4b */"
+ },
+ {
+ "name": "DP_EDP_15",
+ "value": "0x06 /* eDP 1.5 */"
+ }
+ ]
+ },
+ "DP_EDP_GENERAL_CAP_1": {
+ "address": "0x701",
+ "bitfields": [
+ {
+ "name": "DP_EDP_TCON_BACKLIGHT_ADJUSTMENT_CAP",
+ "value": "(1 << 0)"
+ },
+ {
+ "name": "DP_EDP_BACKLIGHT_PIN_ENABLE_CAP",
+ "value": "(1 << 1)"
+ },
+ {
+ "name": "DP_EDP_BACKLIGHT_AUX_ENABLE_CAP",
+ "value": "(1 << 2)"
+ },
+ {
+ "name": "DP_EDP_PANEL_SELF_TEST_PIN_ENABLE_CAP",
+ "value": "(1 << 3)"
+ },
+ {
+ "name": "DP_EDP_PANEL_SELF_TEST_AUX_ENABLE_CAP",
+ "value": "(1 << 4)"
+ },
+ {
+ "name": "DP_EDP_FRC_ENABLE_CAP",
+ "value": "(1 << 5)"
+ },
+ {
+ "name": "DP_EDP_COLOR_ENGINE_CAP",
+ "value": "(1 << 6)"
+ },
+ {
+ "name": "DP_EDP_SET_POWER_CAP",
+ "value": "(1 << 7)"
+ }
+ ]
+ },
+ "DP_EDP_BACKLIGHT_ADJUSTMENT_CAP": {
+ "address": "0x702",
+ "bitfields": [
+ {
+ "name": "DP_EDP_BACKLIGHT_BRIGHTNESS_PWM_PIN_CAP",
+ "value": "(1 << 0)"
+ },
+ {
+ "name": "DP_EDP_BACKLIGHT_BRIGHTNESS_AUX_SET_CAP",
+ "value": "(1 << 1)"
+ },
+ {
+ "name": "DP_EDP_BACKLIGHT_BRIGHTNESS_BYTE_COUNT",
+ "value": "(1 << 2)"
+ },
+ {
+ "name": "DP_EDP_BACKLIGHT_AUX_PWM_PRODUCT_CAP",
+ "value": "(1 << 3)"
+ },
+ {
+ "name": "DP_EDP_BACKLIGHT_FREQ_PWM_PIN_PASSTHRU_CAP",
+ "value": "(1 << 4)"
+ },
+ {
+ "name": "DP_EDP_BACKLIGHT_FREQ_AUX_SET_CAP",
+ "value": "(1 << 5)"
+ },
+ {
+ "name": "DP_EDP_DYNAMIC_BACKLIGHT_CAP",
+ "value": "(1 << 6)"
+ },
+ {
+ "name": "DP_EDP_VBLANK_BACKLIGHT_UPDATE_CAP",
+ "value": "(1 << 7)"
+ }
+ ]
+ },
+ "DP_EDP_GENERAL_CAP_2": {
+ "address": "0x703",
+ "bitfields": [
+ {
+ "name": "DP_EDP_OVERDRIVE_ENGINE_ENABLED",
+ "value": "(1 << 0)"
+ },
+ {
+ "name": "DP_EDP_PANEL_LUMINANCE_CONTROL_CAPABLE",
+ "value": "(1 << 4)"
+ }
+ ]
+ },
+ "DP_EDP_GENERAL_CAP_3": {
+ "address": "0x704",
+ "bitfields": [
+ {
+ "name": "DP_EDP_X_REGION_CAP_MASK",
+ "value": "(0xf << 0)"
+ },
+ {
+ "name": "DP_EDP_X_REGION_CAP_SHIFT",
+ "value": "0"
+ },
+ {
+ "name": "DP_EDP_Y_REGION_CAP_MASK",
+ "value": "(0xf << 4)"
+ },
+ {
+ "name": "DP_EDP_Y_REGION_CAP_SHIFT",
+ "value": "4"
+ }
+ ]
+ },
+ "DP_EDP_DISPLAY_CONTROL_REGISTER": {
+ "address": "0x720",
+ "bitfields": [
+ {
+ "name": "DP_EDP_BACKLIGHT_ENABLE",
+ "value": "(1 << 0)"
+ },
+ {
+ "name": "DP_EDP_BLACK_VIDEO_ENABLE",
+ "value": "(1 << 1)"
+ },
+ {
+ "name": "DP_EDP_FRC_ENABLE",
+ "value": "(1 << 2)"
+ },
+ {
+ "name": "DP_EDP_COLOR_ENGINE_ENABLE",
+ "value": "(1 << 3)"
+ },
+ {
+ "name": "DP_EDP_VBLANK_BACKLIGHT_UPDATE_ENABLE",
+ "value": "(1 << 7)"
+ }
+ ]
+ },
+ "DP_EDP_BACKLIGHT_MODE_SET_REGISTER": {
+ "address": "0x721",
+ "bitfields": [
+ {
+ "name": "DP_EDP_BACKLIGHT_CONTROL_MODE_MASK",
+ "value": "(3 << 0)"
+ },
+ {
+ "name": "DP_EDP_BACKLIGHT_CONTROL_MODE_PWM",
+ "value": "(0 << 0)"
+ },
+ {
+ "name": "DP_EDP_BACKLIGHT_CONTROL_MODE_PRESET",
+ "value": "(1 << 0)"
+ },
+ {
+ "name": "DP_EDP_BACKLIGHT_CONTROL_MODE_DPCD",
+ "value": "(2 << 0)"
+ },
+ {
+ "name": "DP_EDP_BACKLIGHT_CONTROL_MODE_PRODUCT",
+ "value": "(3 << 0)"
+ },
+ {
+ "name": "DP_EDP_BACKLIGHT_FREQ_PWM_PIN_PASSTHRU_ENABLE",
+ "value": "(1 << 2)"
+ },
+ {
+ "name": "DP_EDP_BACKLIGHT_FREQ_AUX_SET_ENABLE",
+ "value": "(1 << 3)"
+ },
+ {
+ "name": "DP_EDP_DYNAMIC_BACKLIGHT_ENABLE",
+ "value": "(1 << 4)"
+ },
+ {
+ "name": "DP_EDP_REGIONAL_BACKLIGHT_ENABLE",
+ "value": "(1 << 5)"
+ },
+ {
+ "name": "DP_EDP_UPDATE_REGION_BRIGHTNESS",
+ "value": "(1 << 6) /* eDP 1.4 */"
+ },
+ {
+ "name": "DP_EDP_PANEL_LUMINANCE_CONTROL_ENABLE",
+ "value": "(1 << 7)"
+ }
+ ]
+ },
+ "DP_EDP_BACKLIGHT_BRIGHTNESS_MSB": {
+ "address": "0x722"
+ },
+ "DP_EDP_BACKLIGHT_BRIGHTNESS_LSB": {
+ "address": "0x723"
+ },
+ "DP_EDP_PWMGEN_BIT_COUNT": {
+ "address": "0x724"
+ },
+ "DP_EDP_PWMGEN_BIT_COUNT_CAP_MIN": {
+ "address": "0x725"
+ },
+ "DP_EDP_PWMGEN_BIT_COUNT_CAP_MAX": {
+ "address": "0x726",
+ "bitfields": [
+ {
+ "name": "DP_EDP_PWMGEN_BIT_COUNT_MASK",
+ "value": "(0x1f << 0)"
+ }
+ ]
+ },
+ "DP_EDP_BACKLIGHT_CONTROL_STATUS": {
+ "address": "0x727"
+ },
+ "DP_EDP_BACKLIGHT_FREQ_SET": {
+ "address": "0x728",
+ "bitfields": [
+ {
+ "name": "DP_EDP_BACKLIGHT_FREQ_BASE_KHZ",
+ "value": "27000"
+ }
+ ]
+ },
+ "DP_EDP_BACKLIGHT_FREQ_CAP_MIN_MSB": {
+ "address": "0x72a"
+ },
+ "DP_EDP_BACKLIGHT_FREQ_CAP_MIN_MID": {
+ "address": "0x72b"
+ },
+ "DP_EDP_BACKLIGHT_FREQ_CAP_MIN_LSB": {
+ "address": "0x72c"
+ },
+ "DP_EDP_BACKLIGHT_FREQ_CAP_MAX_MSB": {
+ "address": "0x72d"
+ },
+ "DP_EDP_BACKLIGHT_FREQ_CAP_MAX_MID": {
+ "address": "0x72e"
+ },
+ "DP_EDP_BACKLIGHT_FREQ_CAP_MAX_LSB": {
+ "address": "0x72f"
+ },
+ "DP_EDP_DBC_MINIMUM_BRIGHTNESS_SET": {
+ "address": "0x732"
+ },
+ "DP_EDP_DBC_MAXIMUM_BRIGHTNESS_SET": {
+ "address": "0x733"
+ },
+ "DP_EDP_PANEL_TARGET_LUMINANCE_VALUE": {
+ "address": "0x734"
+ },
+ "DP_EDP_REGIONAL_BACKLIGHT_BASE": {
+ "address": "0x740"
+ },
+ "DP_EDP_REGIONAL_BACKLIGHT_0": {
+ "address": "0x741"
+ },
+ "DP_EDP_MSO_LINK_CAPABILITIES": {
+ "address": "0x7a4",
+ "bitfields": [
+ {
+ "name": "DP_EDP_MSO_NUMBER_OF_LINKS_MASK",
+ "value": "(7 << 0)"
+ },
+ {
+ "name": "DP_EDP_MSO_NUMBER_OF_LINKS_SHIFT",
+ "value": "0"
+ },
+ {
+ "name": "DP_EDP_MSO_INDEPENDENT_LINK_BIT",
+ "value": "(1 << 3)"
+ }
+ ]
+ }
+ },
+ "DP_TRAINING": {
+ "DP_TRAINING_AUX_RD_INTERVAL": {
+ "address": "0x00e",
+ "bitfields": [
+ {
+ "name": "DP_TRAINING_AUX_RD_MASK",
+ "value": "0x7F /* DP 1.3 */"
+ },
+ {
+ "name": "DP_EXTENDED_RECEIVER_CAP_FIELD_PRESENT",
+ "value": "(1 << 7) /* DP 1.3 */"
+ }
+ ]
+ },
+ "DP_TRAINING_PATTERN_SET": {
+ "address": "0x102",
+ "bitfields": [
+ {
+ "name": "DP_TRAINING_PATTERN_DISABLE",
+ "value": "0"
+ },
+ {
+ "name": "DP_TRAINING_PATTERN_1",
+ "value": "1"
+ },
+ {
+ "name": "DP_TRAINING_PATTERN_2",
+ "value": "2"
+ },
+ {
+ "name": "DP_TRAINING_PATTERN_2_CDS",
+ "value": "3\t /* 2.0 E11 */"
+ },
+ {
+ "name": "DP_TRAINING_PATTERN_3",
+ "value": "3\t /* 1.2 */"
+ },
+ {
+ "name": "DP_TRAINING_PATTERN_4",
+ "value": "7 /* 1.4 */"
+ },
+ {
+ "name": "DP_TRAINING_PATTERN_MASK",
+ "value": "0x3"
+ },
+ {
+ "name": "DP_TRAINING_PATTERN_MASK_1_4",
+ "value": "0xf"
+ },
+ {
+ "name": "DP_LINK_QUAL_PATTERN_11_DISABLE",
+ "value": "(0 << 2)"
+ },
+ {
+ "name": "DP_LINK_QUAL_PATTERN_11_D10_2",
+ "value": "(1 << 2)"
+ },
+ {
+ "name": "DP_LINK_QUAL_PATTERN_11_ERROR_RATE",
+ "value": "(2 << 2)"
+ },
+ {
+ "name": "DP_LINK_QUAL_PATTERN_11_PRBS7",
+ "value": "(3 << 2)"
+ },
+ {
+ "name": "DP_LINK_QUAL_PATTERN_11_MASK",
+ "value": "(3 << 2)"
+ },
+ {
+ "name": "DP_RECOVERED_CLOCK_OUT_EN",
+ "value": "(1 << 4)"
+ },
+ {
+ "name": "DP_LINK_SCRAMBLING_DISABLE",
+ "value": "(1 << 5)"
+ },
+ {
+ "name": "DP_SYMBOL_ERROR_COUNT_BOTH",
+ "value": "(0 << 6)"
+ },
+ {
+ "name": "DP_SYMBOL_ERROR_COUNT_DISPARITY",
+ "value": "(1 << 6)"
+ },
+ {
+ "name": "DP_SYMBOL_ERROR_COUNT_SYMBOL",
+ "value": "(2 << 6)"
+ },
+ {
+ "name": "DP_SYMBOL_ERROR_COUNT_MASK",
+ "value": "(3 << 6)"
+ }
+ ]
+ },
+ "DP_TRAINING_LANE0_SET": {
+ "address": "0x103"
+ },
+ "DP_TRAINING_LANE1_SET": {
+ "address": "0x104"
+ },
+ "DP_TRAINING_LANE2_SET": {
+ "address": "0x105"
+ },
+ "DP_TRAINING_LANE3_SET": {
+ "address": "0x106",
+ "bitfields": [
+ {
+ "name": "DP_TRAIN_VOLTAGE_SWING_MASK",
+ "value": "0x3"
+ },
+ {
+ "name": "DP_TRAIN_VOLTAGE_SWING_SHIFT",
+ "value": "0"
+ },
+ {
+ "name": "DP_TRAIN_MAX_SWING_REACHED",
+ "value": "(1 << 2)"
+ },
+ {
+ "name": "DP_TRAIN_VOLTAGE_SWING_LEVEL_0",
+ "value": "(0 << 0)"
+ },
+ {
+ "name": "DP_TRAIN_VOLTAGE_SWING_LEVEL_1",
+ "value": "(1 << 0)"
+ },
+ {
+ "name": "DP_TRAIN_VOLTAGE_SWING_LEVEL_2",
+ "value": "(2 << 0)"
+ },
+ {
+ "name": "DP_TRAIN_VOLTAGE_SWING_LEVEL_3",
+ "value": "(3 << 0)"
+ },
+ {
+ "name": "DP_TRAIN_PRE_EMPHASIS_MASK",
+ "value": "(3 << 3)"
+ },
+ {
+ "name": "DP_TRAIN_PRE_EMPH_LEVEL_0",
+ "value": "(0 << 3)"
+ },
+ {
+ "name": "DP_TRAIN_PRE_EMPH_LEVEL_1",
+ "value": "(1 << 3)"
+ },
+ {
+ "name": "DP_TRAIN_PRE_EMPH_LEVEL_2",
+ "value": "(2 << 3)"
+ },
+ {
+ "name": "DP_TRAIN_PRE_EMPH_LEVEL_3",
+ "value": "(3 << 3)"
+ },
+ {
+ "name": "DP_TRAIN_PRE_EMPHASIS_SHIFT",
+ "value": "3"
+ },
+ {
+ "name": "DP_TRAIN_MAX_PRE_EMPHASIS_REACHED",
+ "value": "(1 << 5)"
+ },
+ {
+ "name": "DP_TX_FFE_PRESET_VALUE_MASK",
+ "value": "(0xf << 0) /* 2.0 128b/132b Link Layer */"
+ }
+ ]
+ },
+ "DP_TRAINING_LANE0_1_SET2": {
+ "address": "0x10f"
+ },
+ "DP_TRAINING_LANE2_3_SET2": {
+ "address": "0x110",
+ "bitfields": [
+ {
+ "name": "DP_LANE02_POST_CURSOR2_SET_MASK",
+ "value": "(3 << 0)"
+ },
+ {
+ "name": "DP_LANE02_MAX_POST_CURSOR2_REACHED",
+ "value": "(1 << 2)"
+ },
+ {
+ "name": "DP_LANE13_POST_CURSOR2_SET_MASK",
+ "value": "(3 << 4)"
+ },
+ {
+ "name": "DP_LANE13_MAX_POST_CURSOR2_REACHED",
+ "value": "(1 << 6)"
+ }
+ ]
+ },
+ "DP_TRAINING_PATTERN_SET_PHY_REPEATER1": {
+ "address": "0xf0010"
+ },
+ "DP_TRAINING_LANE0_SET_PHY_REPEATER1": {
+ "address": "0xf0011"
+ },
+ "DP_TRAINING_LANE1_SET_PHY_REPEATER1": {
+ "address": "0xf0012"
+ },
+ "DP_TRAINING_LANE2_SET_PHY_REPEATER1": {
+ "address": "0xf0013"
+ },
+ "DP_TRAINING_LANE3_SET_PHY_REPEATER1": {
+ "address": "0xf0014"
+ },
+ "DP_TRAINING_AUX_RD_INTERVAL_PHY_REPEATER1": {
+ "address": "0xf0020"
+ }
+ },
+ "DP_ADAPTER": {
+ "DP_ADAPTER_CAP": {
+ "address": "0x00f",
+ "bitfields": [
+ {
+ "name": "DP_FORCE_LOAD_SENSE_CAP",
+ "value": "(1 << 0)"
+ },
+ {
+ "name": "DP_ALTERNATE_I2C_PATTERN_CAP",
+ "value": "(1 << 1)"
+ }
+ ]
+ },
+ "DP_ADAPTER_CTRL": {
+ "address": "0x1a0",
+ "bitfields": [
+ {
+ "name": "DP_ADAPTER_CTRL_FORCE_LOAD_SENSE",
+ "value": "(1 << 0)"
+ }
+ ]
+ }
+ },
+ "DP_SUPPORTED_LINK_RATES": {
+ "address": "0x010",
+ "bitfields": [
+ {
+ "name": "DP_MAX_SUPPORTED_RATES",
+ "value": "8\t /* 16-bit little-endian */"
+ }
+ ]
+ },
+ "DP_FAUX_CAP": {
+ "address": "0x020",
+ "bitfields": [
+ {
+ "name": "DP_FAUX_CAP_1",
+ "value": "(1 << 0)"
+ }
+ ]
+ },
+ "DP_SINK": {
+ "DP_SINK_VIDEO_FALLBACK_FORMATS": {
+ "address": "0x020",
+ "bitfields": [
+ {
+ "name": "DP_FALLBACK_1024x768_60HZ_24BPP",
+ "value": "(1 << 0)"
+ },
+ {
+ "name": "DP_FALLBACK_1280x720_60HZ_24BPP",
+ "value": "(1 << 1)"
+ },
+ {
+ "name": "DP_FALLBACK_1920x1080_60HZ_24BPP",
+ "value": "(1 << 2)"
+ }
+ ]
+ },
+ "DP_SINK_DEVICE_AUX_FRAME_SYNC_CAP": {
+ "address": "0x02f",
+ "bitfields": [
+ {
+ "name": "DP_AUX_FRAME_SYNC_CAP",
+ "value": "(1 << 0)"
+ }
+ ]
+ },
+ "DP_SINK_DEVICE_AUX_FRAME_SYNC_CONF": {
+ "address": "0x117",
+ "bitfields": [
+ {
+ "name": "DP_AUX_FRAME_SYNC_ENABLE",
+ "value": "(1 << 0)"
+ },
+ {
+ "name": "DP_IRQ_HPD_ENABLE",
+ "value": "(1 << 1)"
+ }
+ ]
+ },
+ "DP_SINK_COUNT": {
+ "address": "0x200",
+ "bitfields": [
+ {
+ "name": "DP_SINK_CP_READY",
+ "value": "(1 << 6)"
+ }
+ ]
+ },
+ "DP_SINK_STATUS": {
+ "address": "0x205",
+ "bitfields": [
+ {
+ "name": "DP_RECEIVE_PORT_0_STATUS",
+ "value": "(1 << 0)"
+ },
+ {
+ "name": "DP_RECEIVE_PORT_1_STATUS",
+ "value": "(1 << 1)"
+ },
+ {
+ "name": "DP_STREAM_REGENERATION_STATUS",
+ "value": "(1 << 2) /* 2.0 */"
+ },
+ {
+ "name": "DP_INTRA_HOP_AUX_REPLY_INDICATION",
+ "value": "(1 << 3) /* 2.0 */"
+ }
+ ]
+ },
+ "DP_SINK_OUI": {
+ "address": "0x400"
+ },
+ "DP_SINK_COUNT_ESI": {
+ "address": "0x2002"
+ },
+ "DP_SINK_STATUS_ESI": {
+ "address": "0x200f"
+ },
+ "DP_SINK_DEVICE_PR_AND_FRAME_LOCK_STATUS": {
+ "address": "0x2022",
+ "bitfields": [
+ {
+ "name": "DP_SINK_DEVICE_PANEL_REPLAY_STATUS_MASK",
+ "value": "(7 << 0)"
+ },
+ {
+ "name": "DP_SINK_FRAME_LOCKED_SHIFT",
+ "value": "3"
+ },
+ {
+ "name": "DP_SINK_FRAME_LOCKED_MASK",
+ "value": "(3 << 3)"
+ },
+ {
+ "name": "DP_SINK_FRAME_LOCKED_STATUS_VALID_SHIFT",
+ "value": "5"
+ },
+ {
+ "name": "DP_SINK_FRAME_LOCKED_STATUS_VALID_MASK",
+ "value": "(1 << 5)"
+ }
+ ]
+ },
+ "DP_SINK_EVENT_NOTIFY": {
+ "address": "0x30"
+ }
+ },
+ "DP_MSTM": {
+ "DP_MSTM_CAP": {
+ "address": "0x021",
+ "bitfields": [
+ {
+ "name": "DP_MST_CAP",
+ "value": "(1 << 0)"
+ },
+ {
+ "name": "DP_SINGLE_STREAM_SIDEBAND_MSG",
+ "value": "(1 << 1) /* 2.0 */"
+ }
+ ]
+ },
+ "DP_MSTM_CTRL": {
+ "address": "0x111",
+ "bitfields": [
+ {
+ "name": "DP_MST_EN",
+ "value": "(1 << 0)"
+ },
+ {
+ "name": "DP_UP_REQ_EN",
+ "value": "(1 << 1)"
+ },
+ {
+ "name": "DP_UPSTREAM_IS_SRC",
+ "value": "(1 << 2)"
+ }
+ ]
+ }
+ },
+ "DP_NUMBER_OF_AUDIO_ENDPOINTS": {
+ "address": "0x022"
+ },
+ "DP_AV_GRANULARITY": {
+ "address": "0x023",
+ "bitfields": [
+ {
+ "name": "DP_AG_FACTOR_MASK",
+ "value": "(0xf << 0)"
+ },
+ {
+ "name": "DP_AG_FACTOR_3MS",
+ "value": "(0 << 0)"
+ },
+ {
+ "name": "DP_AG_FACTOR_2MS",
+ "value": "(1 << 0)"
+ },
+ {
+ "name": "DP_AG_FACTOR_1MS",
+ "value": "(2 << 0)"
+ },
+ {
+ "name": "DP_AG_FACTOR_500US",
+ "value": "(3 << 0)"
+ },
+ {
+ "name": "DP_AG_FACTOR_200US",
+ "value": "(4 << 0)"
+ },
+ {
+ "name": "DP_AG_FACTOR_100US",
+ "value": "(5 << 0)"
+ },
+ {
+ "name": "DP_AG_FACTOR_10US",
+ "value": "(6 << 0)"
+ },
+ {
+ "name": "DP_AG_FACTOR_1US",
+ "value": "(7 << 0)"
+ },
+ {
+ "name": "DP_VG_FACTOR_MASK",
+ "value": "(0xf << 4)"
+ },
+ {
+ "name": "DP_VG_FACTOR_3MS",
+ "value": "(0 << 4)"
+ },
+ {
+ "name": "DP_VG_FACTOR_2MS",
+ "value": "(1 << 4)"
+ },
+ {
+ "name": "DP_VG_FACTOR_1MS",
+ "value": "(2 << 4)"
+ },
+ {
+ "name": "DP_VG_FACTOR_500US",
+ "value": "(3 << 4)"
+ },
+ {
+ "name": "DP_VG_FACTOR_200US",
+ "value": "(4 << 4)"
+ },
+ {
+ "name": "DP_VG_FACTOR_100US",
+ "value": "(5 << 4)"
+ }
+ ]
+ },
+ "DP_AUD": {
+ "DP_AUD_DEC_LAT0": {
+ "address": "0x024"
+ },
+ "DP_AUD_DEC_LAT1": {
+ "address": "0x025"
+ },
+ "DP_AUD_PP_LAT0": {
+ "address": "0x026"
+ },
+ "DP_AUD_PP_LAT1": {
+ "address": "0x027"
+ },
+ "DP_AUD_DEL_INS0": {
+ "address": "0x02b"
+ },
+ "DP_AUD_DEL_INS1": {
+ "address": "0x02c"
+ },
+ "DP_AUD_DEL_INS2": {
+ "address": "0x02d"
+ }
+ },
+ "DP_VID": {
+ "DP_VID_INTER_LAT": {
+ "address": "0x028"
+ },
+ "DP_VID_PROG_LAT": {
+ "address": "0x029"
+ }
+ },
+ "DP_REP_LAT": {
+ "address": "0x02a"
+ },
+ "DP_RECEIVER": {
+ "DP_RECEIVER_ALPM_CAP": {
+ "address": "0x02e",
+ "bitfields": [
+ {
+ "name": "DP_ALPM_CAP",
+ "value": "(1 << 0)"
+ },
+ {
+ "name": "DP_ALPM_PM_STATE_2A_SUPPORT",
+ "value": "(1 << 1) /* eDP 1.5 */"
+ },
+ {
+ "name": "DP_ALPM_AUX_LESS_CAP",
+ "value": "(1 << 2) /* eDP 1.5 */"
+ }
+ ]
+ },
+ "DP_RECEIVER_ALPM_CONFIG": {
+ "address": "0x116",
+ "bitfields": [
+ {
+ "name": "DP_ALPM_ENABLE",
+ "value": "(1 << 0)"
+ },
+ {
+ "name": "DP_ALPM_LOCK_ERROR_IRQ_HPD_ENABLE",
+ "value": "(1 << 1) /* eDP 1.5 */"
+ },
+ {
+ "name": "DP_ALPM_MODE_AUX_LESS",
+ "value": "(1 << 2) /* eDP 1.5 */"
+ }
+ ]
+ },
+ "DP_RECEIVER_ALPM_STATUS": {
+ "address": "0x200b",
+ "bitfields": [
+ {
+ "name": "DP_ALPM_LOCK_TIMEOUT_ERROR",
+ "value": "(1 << 0)"
+ }
+ ]
+ },
+ "DP_RECEIVER_CAP_SIZE": {
+ "address": "0xf"
+ }
+ },
+ "DP_GUID": {
+ "address": "0x030"
+ },
+ "DP_DSC": {
+ "DP_DSC_SUPPORT": {
+ "address": "0x060",
+ "bitfields": [
+ {
+ "name": "DP_DSC_DECOMPRESSION_IS_SUPPORTED",
+ "value": "(1 << 0)"
+ },
+ {
+ "name": "DP_DSC_PASSTHROUGH_IS_SUPPORTED",
+ "value": "(1 << 1)"
+ },
+ {
+ "name": "DP_DSC_DYNAMIC_PPS_UPDATE_SUPPORT_COMP_TO_COMP",
+ "value": "(1 << 2)"
+ },
+ {
+ "name": "DP_DSC_DYNAMIC_PPS_UPDATE_SUPPORT_UNCOMP_TO_COMP",
+ "value": "(1 << 3)"
+ }
+ ]
+ },
+ "DP_DSC_REV": {
+ "address": "0x061",
+ "bitfields": [
+ {
+ "name": "DP_DSC_MAJOR_MASK",
+ "value": "(0xf << 0)"
+ },
+ {
+ "name": "DP_DSC_MINOR_MASK",
+ "value": "(0xf << 4)"
+ },
+ {
+ "name": "DP_DSC_MAJOR_SHIFT",
+ "value": "0"
+ },
+ {
+ "name": "DP_DSC_MINOR_SHIFT",
+ "value": "4"
+ }
+ ]
+ },
+ "DP_DSC_RC_BUF_BLK_SIZE": {
+ "address": "0x062",
+ "bitfields": [
+ {
+ "name": "DP_DSC_RC_BUF_BLK_SIZE_1",
+ "value": "0x0"
+ },
+ {
+ "name": "DP_DSC_RC_BUF_BLK_SIZE_4",
+ "value": "0x1"
+ },
+ {
+ "name": "DP_DSC_RC_BUF_BLK_SIZE_16",
+ "value": "0x2"
+ },
+ {
+ "name": "DP_DSC_RC_BUF_BLK_SIZE_64",
+ "value": "0x3"
+ }
+ ]
+ },
+ "DP_DSC_RC_BUF_SIZE": {
+ "address": "0x063"
+ },
+ "DP_DSC_SLICE_CAP_1": {
+ "address": "0x064",
+ "bitfields": [
+ {
+ "name": "DP_DSC_1_PER_DP_DSC_SINK",
+ "value": "(1 << 0)"
+ },
+ {
+ "name": "DP_DSC_2_PER_DP_DSC_SINK",
+ "value": "(1 << 1)"
+ },
+ {
+ "name": "DP_DSC_4_PER_DP_DSC_SINK",
+ "value": "(1 << 3)"
+ },
+ {
+ "name": "DP_DSC_6_PER_DP_DSC_SINK",
+ "value": "(1 << 4)"
+ },
+ {
+ "name": "DP_DSC_8_PER_DP_DSC_SINK",
+ "value": "(1 << 5)"
+ },
+ {
+ "name": "DP_DSC_10_PER_DP_DSC_SINK",
+ "value": "(1 << 6)"
+ },
+ {
+ "name": "DP_DSC_12_PER_DP_DSC_SINK",
+ "value": "(1 << 7)"
+ }
+ ]
+ },
+ "DP_DSC_LINE_BUF_BIT_DEPTH": {
+ "address": "0x065",
+ "bitfields": [
+ {
+ "name": "DP_DSC_LINE_BUF_BIT_DEPTH_MASK",
+ "value": "(0xf << 0)"
+ },
+ {
+ "name": "DP_DSC_LINE_BUF_BIT_DEPTH_9",
+ "value": "0x0"
+ },
+ {
+ "name": "DP_DSC_LINE_BUF_BIT_DEPTH_10",
+ "value": "0x1"
+ },
+ {
+ "name": "DP_DSC_LINE_BUF_BIT_DEPTH_11",
+ "value": "0x2"
+ },
+ {
+ "name": "DP_DSC_LINE_BUF_BIT_DEPTH_12",
+ "value": "0x3"
+ },
+ {
+ "name": "DP_DSC_LINE_BUF_BIT_DEPTH_13",
+ "value": "0x4"
+ },
+ {
+ "name": "DP_DSC_LINE_BUF_BIT_DEPTH_14",
+ "value": "0x5"
+ },
+ {
+ "name": "DP_DSC_LINE_BUF_BIT_DEPTH_15",
+ "value": "0x6"
+ },
+ {
+ "name": "DP_DSC_LINE_BUF_BIT_DEPTH_16",
+ "value": "0x7"
+ },
+ {
+ "name": "DP_DSC_LINE_BUF_BIT_DEPTH_8",
+ "value": "0x8"
+ }
+ ]
+ },
+ "DP_DSC_BLK_PREDICTION_SUPPORT": {
+ "address": "0x066",
+ "bitfields": [
+ {
+ "name": "DP_DSC_BLK_PREDICTION_IS_SUPPORTED",
+ "value": "(1 << 0)"
+ },
+ {
+ "name": "DP_DSC_RGB_COLOR_CONV_BYPASS_SUPPORT",
+ "value": "(1 << 1)"
+ }
+ ]
+ },
+ "DP_DSC_MAX_BITS_PER_PIXEL_LOW": {
+ "address": "0x067"
+ },
+ "DP_DSC_MAX_BITS_PER_PIXEL_HI": {
+ "address": "0x068",
+ "bitfields": [
+ {
+ "name": "DP_DSC_MAX_BITS_PER_PIXEL_HI_MASK",
+ "value": "(0x3 << 0)"
+ },
+ {
+ "name": "DP_DSC_MAX_BPP_DELTA_VERSION_MASK",
+ "value": "(0x3 << 5)\t/* eDP 1.5 & DP 2.0 */"
+ },
+ {
+ "name": "DP_DSC_MAX_BPP_DELTA_AVAILABILITY",
+ "value": "(1 << 7)\t/* eDP 1.5 & DP 2.0 */"
+ }
+ ]
+ },
+ "DP_DSC_DEC_COLOR_FORMAT_CAP": {
+ "address": "0x069",
+ "bitfields": [
+ {
+ "name": "DP_DSC_RGB",
+ "value": "(1 << 0)"
+ },
+ {
+ "name": "DP_DSC_YCbCr444",
+ "value": "(1 << 1)"
+ },
+ {
+ "name": "DP_DSC_YCbCr422_Simple",
+ "value": "(1 << 2)"
+ },
+ {
+ "name": "DP_DSC_YCbCr422_Native",
+ "value": "(1 << 3)"
+ },
+ {
+ "name": "DP_DSC_YCbCr420_Native",
+ "value": "(1 << 4)"
+ }
+ ]
+ },
+ "DP_DSC_DEC_COLOR_DEPTH_CAP": {
+ "address": "0x06A",
+ "bitfields": [
+ {
+ "name": "DP_DSC_8_BPC",
+ "value": "(1 << 1)"
+ },
+ {
+ "name": "DP_DSC_10_BPC",
+ "value": "(1 << 2)"
+ },
+ {
+ "name": "DP_DSC_12_BPC",
+ "value": "(1 << 3)"
+ }
+ ]
+ },
+ "DP_DSC_PEAK_THROUGHPUT": {
+ "address": "0x06B",
+ "bitfields": [
+ {
+ "name": "DP_DSC_THROUGHPUT_MODE_0_MASK",
+ "value": "(0xf << 0)"
+ },
+ {
+ "name": "DP_DSC_THROUGHPUT_MODE_0_SHIFT",
+ "value": "0"
+ },
+ {
+ "name": "DP_DSC_THROUGHPUT_MODE_0_UNSUPPORTED",
+ "value": "0"
+ },
+ {
+ "name": "DP_DSC_THROUGHPUT_MODE_0_340",
+ "value": "(1 << 0)"
+ },
+ {
+ "name": "DP_DSC_THROUGHPUT_MODE_0_400",
+ "value": "(2 << 0)"
+ },
+ {
+ "name": "DP_DSC_THROUGHPUT_MODE_0_450",
+ "value": "(3 << 0)"
+ },
+ {
+ "name": "DP_DSC_THROUGHPUT_MODE_0_500",
+ "value": "(4 << 0)"
+ },
+ {
+ "name": "DP_DSC_THROUGHPUT_MODE_0_550",
+ "value": "(5 << 0)"
+ },
+ {
+ "name": "DP_DSC_THROUGHPUT_MODE_0_600",
+ "value": "(6 << 0)"
+ },
+ {
+ "name": "DP_DSC_THROUGHPUT_MODE_0_650",
+ "value": "(7 << 0)"
+ },
+ {
+ "name": "DP_DSC_THROUGHPUT_MODE_0_700",
+ "value": "(8 << 0)"
+ },
+ {
+ "name": "DP_DSC_THROUGHPUT_MODE_0_750",
+ "value": "(9 << 0)"
+ },
+ {
+ "name": "DP_DSC_THROUGHPUT_MODE_0_800",
+ "value": "(10 << 0)"
+ },
+ {
+ "name": "DP_DSC_THROUGHPUT_MODE_0_850",
+ "value": "(11 << 0)"
+ },
+ {
+ "name": "DP_DSC_THROUGHPUT_MODE_0_900",
+ "value": "(12 << 0)"
+ },
+ {
+ "name": "DP_DSC_THROUGHPUT_MODE_0_950",
+ "value": "(13 << 0)"
+ },
+ {
+ "name": "DP_DSC_THROUGHPUT_MODE_0_1000",
+ "value": "(14 << 0)"
+ },
+ {
+ "name": "DP_DSC_THROUGHPUT_MODE_0_170",
+ "value": "(15 << 0) /* 1.4a */"
+ },
+ {
+ "name": "DP_DSC_THROUGHPUT_MODE_1_MASK",
+ "value": "(0xf << 4)"
+ },
+ {
+ "name": "DP_DSC_THROUGHPUT_MODE_1_SHIFT",
+ "value": "4"
+ },
+ {
+ "name": "DP_DSC_THROUGHPUT_MODE_1_UNSUPPORTED",
+ "value": "0"
+ },
+ {
+ "name": "DP_DSC_THROUGHPUT_MODE_1_340",
+ "value": "(1 << 4)"
+ },
+ {
+ "name": "DP_DSC_THROUGHPUT_MODE_1_400",
+ "value": "(2 << 4)"
+ },
+ {
+ "name": "DP_DSC_THROUGHPUT_MODE_1_450",
+ "value": "(3 << 4)"
+ },
+ {
+ "name": "DP_DSC_THROUGHPUT_MODE_1_500",
+ "value": "(4 << 4)"
+ },
+ {
+ "name": "DP_DSC_THROUGHPUT_MODE_1_550",
+ "value": "(5 << 4)"
+ },
+ {
+ "name": "DP_DSC_THROUGHPUT_MODE_1_600",
+ "value": "(6 << 4)"
+ },
+ {
+ "name": "DP_DSC_THROUGHPUT_MODE_1_650",
+ "value": "(7 << 4)"
+ },
+ {
+ "name": "DP_DSC_THROUGHPUT_MODE_1_700",
+ "value": "(8 << 4)"
+ },
+ {
+ "name": "DP_DSC_THROUGHPUT_MODE_1_750",
+ "value": "(9 << 4)"
+ },
+ {
+ "name": "DP_DSC_THROUGHPUT_MODE_1_800",
+ "value": "(10 << 4)"
+ },
+ {
+ "name": "DP_DSC_THROUGHPUT_MODE_1_850",
+ "value": "(11 << 4)"
+ },
+ {
+ "name": "DP_DSC_THROUGHPUT_MODE_1_900",
+ "value": "(12 << 4)"
+ },
+ {
+ "name": "DP_DSC_THROUGHPUT_MODE_1_950",
+ "value": "(13 << 4)"
+ },
+ {
+ "name": "DP_DSC_THROUGHPUT_MODE_1_1000",
+ "value": "(14 << 4)"
+ },
+ {
+ "name": "DP_DSC_THROUGHPUT_MODE_1_170",
+ "value": "(15 << 4)"
+ }
+ ]
+ },
+ "DP_DSC_MAX_SLICE_WIDTH": {
+ "address": "0x06C",
+ "bitfields": [
+ {
+ "name": "DP_DSC_MIN_SLICE_WIDTH_VALUE",
+ "value": "2560"
+ },
+ {
+ "name": "DP_DSC_SLICE_WIDTH_MULTIPLIER",
+ "value": "320"
+ }
+ ]
+ },
+ "DP_DSC_SLICE_CAP_2": {
+ "address": "0x06D",
+ "bitfields": [
+ {
+ "name": "DP_DSC_16_PER_DP_DSC_SINK",
+ "value": "(1 << 0)"
+ },
+ {
+ "name": "DP_DSC_20_PER_DP_DSC_SINK",
+ "value": "(1 << 1)"
+ },
+ {
+ "name": "DP_DSC_24_PER_DP_DSC_SINK",
+ "value": "(1 << 2)"
+ }
+ ]
+ },
+ "DP_DSC_BITS_PER_PIXEL_INC": {
+ "address": "0x06F",
+ "bitfields": [
+ {
+ "name": "DP_DSC_RGB_YCbCr444_MAX_BPP_DELTA_MASK",
+ "value": "0x1f"
+ },
+ {
+ "name": "DP_DSC_RGB_YCbCr420_MAX_BPP_DELTA_MASK",
+ "value": "0xe0"
+ },
+ {
+ "name": "DP_DSC_BITS_PER_PIXEL_1_16",
+ "value": "0x0"
+ },
+ {
+ "name": "DP_DSC_BITS_PER_PIXEL_1_8",
+ "value": "0x1"
+ },
+ {
+ "name": "DP_DSC_BITS_PER_PIXEL_1_4",
+ "value": "0x2"
+ },
+ {
+ "name": "DP_DSC_BITS_PER_PIXEL_1_2",
+ "value": "0x3"
+ },
+ {
+ "name": "DP_DSC_BITS_PER_PIXEL_1_1",
+ "value": "0x4"
+ }
+ ]
+ },
+ "DP_DSC_BRANCH_OVERALL_THROUGHPUT_0": {
+ "address": "0x0a0"
+ },
+ "DP_DSC_BRANCH_OVERALL_THROUGHPUT_1": {
+ "address": "0x0a1"
+ },
+ "DP_DSC_BRANCH_MAX_LINE_WIDTH": {
+ "address": "0x0a2"
+ },
+ "DP_DSC_ENABLE": {
+ "address": "0x160",
+ "bitfields": [
+ {
+ "name": "DP_DECOMPRESSION_EN",
+ "value": "(1 << 0)"
+ },
+ {
+ "name": "DP_DSC_PASSTHROUGH_EN",
+ "value": "(1 << 1)"
+ }
+ ]
+ },
+ "DP_DSC_CONFIGURATION": {
+ "address": "0x161"
+ },
+ "DP_DSC_SUPPORT_AND_DSC_DECODER_COUNT": {
+ "address": "0x2260",
+ "bitfields": [
+ {
+ "name": "DP_DSC_DECODER_COUNT_MASK",
+ "value": "(0b111 << 5)"
+ },
+ {
+ "name": "DP_DSC_DECODER_COUNT_SHIFT",
+ "value": "5"
+ }
+ ]
+ },
+ "DP_DSC_MAX_SLICE_COUNT_AND_AGGREGATION_0": {
+ "address": "0x2270",
+ "bitfields": [
+ {
+ "name": "DP_DSC_DECODER_0_MAXIMUM_SLICE_COUNT_MASK",
+ "value": "(1 << 0)"
+ },
+ {
+ "name": "DP_DSC_DECODER_0_AGGREGATION_SUPPORT_MASK",
+ "value": "(0b111 << 1)"
+ },
+ {
+ "name": "DP_DSC_DECODER_0_AGGREGATION_SUPPORT_SHIFT",
+ "value": "1"
+ }
+ ]
+ },
+ "DP_DSC_RECEIVER_CAP_SIZE": {
+ "address": "0x10",
+ "bitfields": [
+ {
+ "name": "EDP_PSR_RECEIVER_CAP_SIZE",
+ "value": "2"
+ },
+ {
+ "name": "EDP_DISPLAY_CTL_CAP_SIZE",
+ "value": "5"
+ },
+ {
+ "name": "DP_LTTPR_COMMON_CAP_SIZE",
+ "value": "8"
+ },
+ {
+ "name": "DP_LTTPR_PHY_CAP_SIZE",
+ "value": "3"
+ }
+ ]
+ }
+ },
+ "DP_PSR": {
+ "DP_PSR_SUPPORT": {
+ "address": "0x070",
+ "bitfields": [
+ {
+ "name": "DP_PSR_IS_SUPPORTED",
+ "value": "1"
+ },
+ {
+ "name": "DP_PSR2_IS_SUPPORTED",
+ "value": "2\t /* eDP 1.4 */"
+ },
+ {
+ "name": "DP_PSR2_WITH_Y_COORD_IS_SUPPORTED",
+ "value": "3\t /* eDP 1.4a */"
+ },
+ {
+ "name": "DP_PSR2_WITH_Y_COORD_ET_SUPPORTED",
+ "value": "4\t /* eDP 1.5, adopted eDP 1.4b SCR */"
+ }
+ ]
+ },
+ "DP_PSR_CAPS": {
+ "address": "0x071",
+ "bitfields": [
+ {
+ "name": "DP_PSR_NO_TRAIN_ON_EXIT",
+ "value": "1"
+ },
+ {
+ "name": "DP_PSR_SETUP_TIME_330",
+ "value": "(0 << 1)"
+ },
+ {
+ "name": "DP_PSR_SETUP_TIME_275",
+ "value": "(1 << 1)"
+ },
+ {
+ "name": "DP_PSR_SETUP_TIME_220",
+ "value": "(2 << 1)"
+ },
+ {
+ "name": "DP_PSR_SETUP_TIME_165",
+ "value": "(3 << 1)"
+ },
+ {
+ "name": "DP_PSR_SETUP_TIME_110",
+ "value": "(4 << 1)"
+ },
+ {
+ "name": "DP_PSR_SETUP_TIME_55",
+ "value": "(5 << 1)"
+ },
+ {
+ "name": "DP_PSR_SETUP_TIME_0",
+ "value": "(6 << 1)"
+ },
+ {
+ "name": "DP_PSR_SETUP_TIME_MASK",
+ "value": "(7 << 1)"
+ },
+ {
+ "name": "DP_PSR_SETUP_TIME_SHIFT",
+ "value": "1"
+ },
+ {
+ "name": "DP_PSR2_SU_Y_COORDINATE_REQUIRED",
+ "value": "(1 << 4) /* eDP 1.4a */"
+ },
+ {
+ "name": "DP_PSR2_SU_GRANULARITY_REQUIRED",
+ "value": "(1 << 5) /* eDP 1.4b */"
+ },
+ {
+ "name": "DP_PSR2_SU_AUX_FRAME_SYNC_NOT_NEEDED",
+ "value": "(1 << 6)/* eDP 1.5, adopted eDP 1.4b SCR */"
+ }
+ ]
+ },
+ "DP_PSR_EN_CFG": {
+ "address": "0x170",
+ "bitfields": [
+ {
+ "name": "DP_PSR_ENABLE",
+ "value": "BIT(0)"
+ },
+ {
+ "name": "DP_PSR_MAIN_LINK_ACTIVE",
+ "value": "BIT(1)"
+ },
+ {
+ "name": "DP_PSR_CRC_VERIFICATION",
+ "value": "BIT(2)"
+ },
+ {
+ "name": "DP_PSR_FRAME_CAPTURE",
+ "value": "BIT(3)"
+ },
+ {
+ "name": "DP_PSR_SU_REGION_SCANLINE_CAPTURE",
+ "value": "BIT(4) /* eDP 1.4a */"
+ },
+ {
+ "name": "DP_PSR_IRQ_HPD_WITH_CRC_ERRORS",
+ "value": "BIT(5) /* eDP 1.4a */"
+ },
+ {
+ "name": "DP_PSR_ENABLE_PSR2",
+ "value": "BIT(6) /* eDP 1.4a */"
+ },
+ {
+ "name": "DP_PSR_ENABLE_SU_REGION_ET",
+ "value": "BIT(7) /* eDP 1.5 */"
+ }
+ ]
+ },
+ "DP_PSR_ERROR_STATUS": {
+ "address": "0x2006",
+ "bitfields": [
+ {
+ "name": "DP_PSR_LINK_CRC_ERROR",
+ "value": "(1 << 0)"
+ },
+ {
+ "name": "DP_PSR_RFB_STORAGE_ERROR",
+ "value": "(1 << 1)"
+ },
+ {
+ "name": "DP_PSR_VSC_SDP_UNCORRECTABLE_ERROR",
+ "value": "(1 << 2) /* eDP 1.4 */"
+ }
+ ]
+ },
+ "DP_PSR_ESI": {
+ "address": "0x2007",
+ "bitfields": [
+ {
+ "name": "DP_PSR_CAPS_CHANGE",
+ "value": "(1 << 0)"
+ }
+ ]
+ },
+ "DP_PSR_STATUS": {
+ "address": "0x2008",
+ "bitfields": [
+ {
+ "name": "DP_PSR_SINK_INACTIVE",
+ "value": "0"
+ },
+ {
+ "name": "DP_PSR_SINK_ACTIVE_SRC_SYNCED",
+ "value": "1"
+ },
+ {
+ "name": "DP_PSR_SINK_ACTIVE_RFB",
+ "value": "2"
+ },
+ {
+ "name": "DP_PSR_SINK_ACTIVE_SINK_SYNCED",
+ "value": "3"
+ },
+ {
+ "name": "DP_PSR_SINK_ACTIVE_RESYNC",
+ "value": "4"
+ },
+ {
+ "name": "DP_PSR_SINK_INTERNAL_ERROR",
+ "value": "7"
+ },
+ {
+ "name": "DP_PSR_SINK_STATE_MASK",
+ "value": "0x07"
+ }
+ ]
+ }
+ },
+ "DP_PSR2": {
+ "DP_PSR2_SU_X_GRANULARITY": {
+ "address": "0x072"
+ },
+ "DP_PSR2_SU_Y_GRANULARITY": {
+ "address": "0x074"
+ }
+ },
+ "DP_DOWNSTREAM_PORT_0": {
+ "address": "0x80",
+ "bitfields": [
+ {
+ "name": "DP_DS_PORT_TYPE_MASK",
+ "value": "(7 << 0)"
+ },
+ {
+ "name": "DP_DS_PORT_TYPE_DP",
+ "value": "0"
+ },
+ {
+ "name": "DP_DS_PORT_TYPE_VGA",
+ "value": "1"
+ },
+ {
+ "name": "DP_DS_PORT_TYPE_DVI",
+ "value": "2"
+ },
+ {
+ "name": "DP_DS_PORT_TYPE_HDMI",
+ "value": "3"
+ },
+ {
+ "name": "DP_DS_PORT_TYPE_NON_EDID",
+ "value": "4"
+ },
+ {
+ "name": "DP_DS_PORT_TYPE_DP_DUALMODE",
+ "value": "5"
+ },
+ {
+ "name": "DP_DS_PORT_TYPE_WIRELESS",
+ "value": "6"
+ },
+ {
+ "name": "DP_DS_PORT_HPD",
+ "value": "(1 << 3)"
+ },
+ {
+ "name": "DP_DS_NON_EDID_MASK",
+ "value": "(0xf << 4)"
+ },
+ {
+ "name": "DP_DS_NON_EDID_720x480i_60",
+ "value": "(1 << 4)"
+ },
+ {
+ "name": "DP_DS_NON_EDID_720x480i_50",
+ "value": "(2 << 4)"
+ },
+ {
+ "name": "DP_DS_NON_EDID_1920x1080i_60",
+ "value": "(3 << 4)"
+ },
+ {
+ "name": "DP_DS_NON_EDID_1920x1080i_50",
+ "value": "(4 << 4)"
+ },
+ {
+ "name": "DP_DS_NON_EDID_1280x720_60",
+ "value": "(5 << 4)"
+ },
+ {
+ "name": "DP_DS_NON_EDID_1280x720_50",
+ "value": "(7 << 4)"
+ },
+ {
+ "name": "DP_DS_MAX_BPC_MASK",
+ "value": "(3 << 0)"
+ },
+ {
+ "name": "DP_DS_8BPC",
+ "value": "0"
+ },
+ {
+ "name": "DP_DS_10BPC",
+ "value": "1"
+ },
+ {
+ "name": "DP_DS_12BPC",
+ "value": "2"
+ },
+ {
+ "name": "DP_DS_16BPC",
+ "value": "3"
+ },
+ {
+ "name": "DP_PCON_MAX_FRL_BW",
+ "value": "(7 << 2)"
+ },
+ {
+ "name": "DP_PCON_MAX_0GBPS",
+ "value": "(0 << 2)"
+ },
+ {
+ "name": "DP_PCON_MAX_9GBPS",
+ "value": "(1 << 2)"
+ },
+ {
+ "name": "DP_PCON_MAX_18GBPS",
+ "value": "(2 << 2)"
+ },
+ {
+ "name": "DP_PCON_MAX_24GBPS",
+ "value": "(3 << 2)"
+ },
+ {
+ "name": "DP_PCON_MAX_32GBPS",
+ "value": "(4 << 2)"
+ },
+ {
+ "name": "DP_PCON_MAX_40GBPS",
+ "value": "(5 << 2)"
+ },
+ {
+ "name": "DP_PCON_MAX_48GBPS",
+ "value": "(6 << 2)"
+ },
+ {
+ "name": "DP_PCON_SOURCE_CTL_MODE",
+ "value": "(1 << 5)"
+ },
+ {
+ "name": "DP_DS_DVI_DUAL_LINK",
+ "value": "(1 << 1)"
+ },
+ {
+ "name": "DP_DS_DVI_HIGH_COLOR_DEPTH",
+ "value": "(1 << 2)"
+ },
+ {
+ "name": "DP_DS_HDMI_FRAME_SEQ_TO_FRAME_PACK",
+ "value": "(1 << 0)"
+ },
+ {
+ "name": "DP_DS_HDMI_YCBCR422_PASS_THROUGH",
+ "value": "(1 << 1)"
+ },
+ {
+ "name": "DP_DS_HDMI_YCBCR420_PASS_THROUGH",
+ "value": "(1 << 2)"
+ },
+ {
+ "name": "DP_DS_HDMI_YCBCR444_TO_422_CONV",
+ "value": "(1 << 3)"
+ },
+ {
+ "name": "DP_DS_HDMI_YCBCR444_TO_420_CONV",
+ "value": "(1 << 4)"
+ },
+ {
+ "name": "DP_DS_HDMI_BT601_RGB_YCBCR_CONV",
+ "value": "(1 << 5)"
+ },
+ {
+ "name": "DP_DS_HDMI_BT709_RGB_YCBCR_CONV",
+ "value": "(1 << 6)"
+ },
+ {
+ "name": "DP_DS_HDMI_BT2020_RGB_YCBCR_CONV",
+ "value": "(1 << 7)"
+ }
+ ]
+ },
+ "DP_FEC": {
+ "DP_FEC_CAPABILITY": {
+ "address": "0x090",
+ "bitfields": [
+ {
+ "name": "DP_FEC_CAPABLE",
+ "value": "(1 << 0)"
+ },
+ {
+ "name": "DP_FEC_UNCORR_BLK_ERROR_COUNT_CAP",
+ "value": "(1 << 1)"
+ },
+ {
+ "name": "DP_FEC_CORR_BLK_ERROR_COUNT_CAP",
+ "value": "(1 << 2)"
+ },
+ {
+ "name": "DP_FEC_BIT_ERROR_COUNT_CAP",
+ "value": "(1 << 3)"
+ }
+ ]
+ },
+ "DP_FEC_CAPABILITY_1": {
+ "address": "0x091"
+ },
+ "DP_FEC_CONFIGURATION": {
+ "address": "0x120",
+ "bitfields": [
+ {
+ "name": "DP_FEC_READY",
+ "value": "(1 << 0)"
+ },
+ {
+ "name": "DP_FEC_ERR_COUNT_SEL_MASK",
+ "value": "(7 << 1)"
+ },
+ {
+ "name": "DP_FEC_ERR_COUNT_DIS",
+ "value": "(0 << 1)"
+ },
+ {
+ "name": "DP_FEC_UNCORR_BLK_ERROR_COUNT",
+ "value": "(1 << 1)"
+ },
+ {
+ "name": "DP_FEC_CORR_BLK_ERROR_COUNT",
+ "value": "(2 << 1)"
+ },
+ {
+ "name": "DP_FEC_BIT_ERROR_COUNT",
+ "value": "(3 << 1)"
+ },
+ {
+ "name": "DP_FEC_LANE_SELECT_MASK",
+ "value": "(3 << 4)"
+ },
+ {
+ "name": "DP_FEC_LANE_0_SELECT",
+ "value": "(0 << 4)"
+ },
+ {
+ "name": "DP_FEC_LANE_1_SELECT",
+ "value": "(1 << 4)"
+ },
+ {
+ "name": "DP_FEC_LANE_2_SELECT",
+ "value": "(2 << 4)"
+ },
+ {
+ "name": "DP_FEC_LANE_3_SELECT",
+ "value": "(3 << 4)"
+ }
+ ]
+ },
+ "DP_FEC_STATUS": {
+ "address": "0x280",
+ "bitfields": [
+ {
+ "name": "DP_FEC_DECODE_EN_DETECTED",
+ "value": "(1 << 0)"
+ },
+ {
+ "name": "DP_FEC_DECODE_DIS_DETECTED",
+ "value": "(1 << 1)"
+ }
+ ]
+ },
+ "DP_FEC_ERROR_COUNT_LSB": {
+ "address": "0x0281"
+ },
+ "DP_FEC_ERROR_COUNT_MSB": {
+ "address": "0x0282",
+ "bitfields": [
+ {
+ "name": "DP_FEC_ERROR_COUNT_MASK",
+ "value": "0x7F"
+ },
+ {
+ "name": "DP_FEC_ERR_COUNT_VALID",
+ "value": "(1 << 7)"
+ }
+ ]
+ },
+ "DP_FEC_STATUS_PHY_REPEATER1": {
+ "address": "0xf0290"
+ },
+ "DP_FEC_ERROR_COUNT_PHY_REPEATER1": {
+ "address": "0xf0291"
+ },
+ "DP_FEC_CAPABILITY_PHY_REPEATER1": {
+ "address": "0xf0294"
+ }
+ },
+ "DP_PCON": {
+ "DP_PCON_DSC_ENCODER_CAP_SIZE": {
+ "address": "0xD"
+ },
+ "DP_PCON_DSC_ENCODER": {
+ "address": "0x092",
+ "bitfields": [
+ {
+ "name": "DP_PCON_DSC_ENCODER_SUPPORTED",
+ "value": "(1 << 0)"
+ },
+ {
+ "name": "DP_PCON_DSC_PPS_ENC_OVERRIDE",
+ "value": "(1 << 1)"
+ }
+ ]
+ },
+ "DP_PCON_DSC_VERSION": {
+ "address": "0x093",
+ "bitfields": [
+ {
+ "name": "DP_PCON_DSC_MAJOR_MASK",
+ "value": "(0xF << 0)"
+ },
+ {
+ "name": "DP_PCON_DSC_MINOR_MASK",
+ "value": "(0xF << 4)"
+ },
+ {
+ "name": "DP_PCON_DSC_MAJOR_SHIFT",
+ "value": "0"
+ },
+ {
+ "name": "DP_PCON_DSC_MINOR_SHIFT",
+ "value": "4"
+ }
+ ]
+ },
+ "DP_PCON_DSC_RC_BUF_BLK_INFO": {
+ "address": "0x094",
+ "bitfields": [
+ {
+ "name": "DP_PCON_DSC_RC_BUF_BLK_SIZE",
+ "value": "(0x3 << 0)"
+ },
+ {
+ "name": "DP_PCON_DSC_RC_BUF_BLK_1KB",
+ "value": "0"
+ },
+ {
+ "name": "DP_PCON_DSC_RC_BUF_BLK_4KB",
+ "value": "1"
+ },
+ {
+ "name": "DP_PCON_DSC_RC_BUF_BLK_16KB",
+ "value": "2"
+ },
+ {
+ "name": "DP_PCON_DSC_RC_BUF_BLK_64KB",
+ "value": "3"
+ }
+ ]
+ },
+ "DP_PCON_DSC_RC_BUF_SIZE": {
+ "address": "0x095"
+ },
+ "DP_PCON_DSC_SLICE_CAP_1": {
+ "address": "0x096",
+ "bitfields": [
+ {
+ "name": "DP_PCON_DSC_1_PER_DSC_ENC",
+ "value": "(0x1 << 0)"
+ },
+ {
+ "name": "DP_PCON_DSC_2_PER_DSC_ENC",
+ "value": "(0x1 << 1)"
+ },
+ {
+ "name": "DP_PCON_DSC_4_PER_DSC_ENC",
+ "value": "(0x1 << 3)"
+ },
+ {
+ "name": "DP_PCON_DSC_6_PER_DSC_ENC",
+ "value": "(0x1 << 4)"
+ },
+ {
+ "name": "DP_PCON_DSC_8_PER_DSC_ENC",
+ "value": "(0x1 << 5)"
+ },
+ {
+ "name": "DP_PCON_DSC_10_PER_DSC_ENC",
+ "value": "(0x1 << 6)"
+ },
+ {
+ "name": "DP_PCON_DSC_12_PER_DSC_ENC",
+ "value": "(0x1 << 7)"
+ }
+ ]
+ },
+ "DP_PCON_DSC_BUF_BIT_DEPTH": {
+ "address": "0x097",
+ "bitfields": [
+ {
+ "name": "DP_PCON_DSC_BIT_DEPTH_MASK",
+ "value": "(0xF << 0)"
+ },
+ {
+ "name": "DP_PCON_DSC_DEPTH_9_BITS",
+ "value": "0"
+ },
+ {
+ "name": "DP_PCON_DSC_DEPTH_10_BITS",
+ "value": "1"
+ },
+ {
+ "name": "DP_PCON_DSC_DEPTH_11_BITS",
+ "value": "2"
+ },
+ {
+ "name": "DP_PCON_DSC_DEPTH_12_BITS",
+ "value": "3"
+ },
+ {
+ "name": "DP_PCON_DSC_DEPTH_13_BITS",
+ "value": "4"
+ },
+ {
+ "name": "DP_PCON_DSC_DEPTH_14_BITS",
+ "value": "5"
+ },
+ {
+ "name": "DP_PCON_DSC_DEPTH_15_BITS",
+ "value": "6"
+ },
+ {
+ "name": "DP_PCON_DSC_DEPTH_16_BITS",
+ "value": "7"
+ },
+ {
+ "name": "DP_PCON_DSC_DEPTH_8_BITS",
+ "value": "8"
+ }
+ ]
+ },
+ "DP_PCON_DSC_BLOCK_PREDICTION": {
+ "address": "0x098",
+ "bitfields": [
+ {
+ "name": "DP_PCON_DSC_BLOCK_PRED_SUPPORT",
+ "value": "(0x1 << 0)"
+ }
+ ]
+ },
+ "DP_PCON_DSC_ENC_COLOR_FMT_CAP": {
+ "address": "0x099",
+ "bitfields": [
+ {
+ "name": "DP_PCON_DSC_ENC_RGB",
+ "value": "(0x1 << 0)"
+ },
+ {
+ "name": "DP_PCON_DSC_ENC_YUV444",
+ "value": "(0x1 << 1)"
+ },
+ {
+ "name": "DP_PCON_DSC_ENC_YUV422_S",
+ "value": "(0x1 << 2)"
+ },
+ {
+ "name": "DP_PCON_DSC_ENC_YUV422_N",
+ "value": "(0x1 << 3)"
+ },
+ {
+ "name": "DP_PCON_DSC_ENC_YUV420_N",
+ "value": "(0x1 << 4)"
+ }
+ ]
+ },
+ "DP_PCON_DSC_ENC_COLOR_DEPTH_CAP": {
+ "address": "0x09A",
+ "bitfields": [
+ {
+ "name": "DP_PCON_DSC_ENC_8BPC",
+ "value": "(0x1 << 1)"
+ },
+ {
+ "name": "DP_PCON_DSC_ENC_10BPC",
+ "value": "(0x1 << 2)"
+ },
+ {
+ "name": "DP_PCON_DSC_ENC_12BPC",
+ "value": "(0x1 << 3)"
+ }
+ ]
+ },
+ "DP_PCON_DSC_MAX_SLICE_WIDTH": {
+ "address": "0x09B"
+ },
+ "DP_PCON_DSC_SLICE_CAP_2": {
+ "address": "0x09C",
+ "bitfields": [
+ {
+ "name": "DP_PCON_DSC_16_PER_DSC_ENC",
+ "value": "(0x1 << 0)"
+ },
+ {
+ "name": "DP_PCON_DSC_20_PER_DSC_ENC",
+ "value": "(0x1 << 1)"
+ },
+ {
+ "name": "DP_PCON_DSC_24_PER_DSC_ENC",
+ "value": "(0x1 << 2)"
+ }
+ ]
+ },
+ "DP_PCON_DSC_BPP_INCR": {
+ "address": "0x09E",
+ "bitfields": [
+ {
+ "name": "DP_PCON_DSC_BPP_INCR_MASK",
+ "value": "(0x7 << 0)"
+ },
+ {
+ "name": "DP_PCON_DSC_ONE_16TH_BPP",
+ "value": "0"
+ },
+ {
+ "name": "DP_PCON_DSC_ONE_8TH_BPP",
+ "value": "1"
+ },
+ {
+ "name": "DP_PCON_DSC_ONE_4TH_BPP",
+ "value": "2"
+ },
+ {
+ "name": "DP_PCON_DSC_ONE_HALF_BPP",
+ "value": "3"
+ },
+ {
+ "name": "DP_PCON_DSC_ONE_BPP",
+ "value": "4"
+ }
+ ]
+ },
+ "DP_PCON_HDMI_LINK_CONFIG_1": {
+ "address": "0x305A",
+ "bitfields": [
+ {
+ "name": "DP_PCON_ENABLE_MAX_FRL_BW",
+ "value": "(7 << 0)"
+ },
+ {
+ "name": "DP_PCON_ENABLE_MAX_BW_0GBPS",
+ "value": "0"
+ },
+ {
+ "name": "DP_PCON_ENABLE_MAX_BW_9GBPS",
+ "value": "1"
+ },
+ {
+ "name": "DP_PCON_ENABLE_MAX_BW_18GBPS",
+ "value": "2"
+ },
+ {
+ "name": "DP_PCON_ENABLE_MAX_BW_24GBPS",
+ "value": "3"
+ },
+ {
+ "name": "DP_PCON_ENABLE_MAX_BW_32GBPS",
+ "value": "4"
+ },
+ {
+ "name": "DP_PCON_ENABLE_MAX_BW_40GBPS",
+ "value": "5"
+ },
+ {
+ "name": "DP_PCON_ENABLE_MAX_BW_48GBPS",
+ "value": "6"
+ },
+ {
+ "name": "DP_PCON_ENABLE_SOURCE_CTL_MODE",
+ "value": "(1 << 3)"
+ },
+ {
+ "name": "DP_PCON_ENABLE_CONCURRENT_LINK",
+ "value": "(1 << 4)"
+ },
+ {
+ "name": "DP_PCON_ENABLE_SEQUENTIAL_LINK",
+ "value": "(0 << 4)"
+ },
+ {
+ "name": "DP_PCON_ENABLE_LINK_FRL_MODE",
+ "value": "(1 << 5)"
+ },
+ {
+ "name": "DP_PCON_ENABLE_HPD_READY",
+ "value": "(1 << 6)"
+ },
+ {
+ "name": "DP_PCON_ENABLE_HDMI_LINK",
+ "value": "(1 << 7)"
+ }
+ ]
+ },
+ "DP_PCON_HDMI_LINK_CONFIG_2": {
+ "address": "0x305B",
+ "bitfields": [
+ {
+ "name": "DP_PCON_MAX_LINK_BW_MASK",
+ "value": "(0x3F << 0)"
+ },
+ {
+ "name": "DP_PCON_FRL_BW_MASK_9GBPS",
+ "value": "(1 << 0)"
+ },
+ {
+ "name": "DP_PCON_FRL_BW_MASK_18GBPS",
+ "value": "(1 << 1)"
+ },
+ {
+ "name": "DP_PCON_FRL_BW_MASK_24GBPS",
+ "value": "(1 << 2)"
+ },
+ {
+ "name": "DP_PCON_FRL_BW_MASK_32GBPS",
+ "value": "(1 << 3)"
+ },
+ {
+ "name": "DP_PCON_FRL_BW_MASK_40GBPS",
+ "value": "(1 << 4)"
+ },
+ {
+ "name": "DP_PCON_FRL_BW_MASK_48GBPS",
+ "value": "(1 << 5)"
+ },
+ {
+ "name": "DP_PCON_FRL_LINK_TRAIN_EXTENDED",
+ "value": "(1 << 6)"
+ },
+ {
+ "name": "DP_PCON_FRL_LINK_TRAIN_NORMAL",
+ "value": "(0 << 6)"
+ }
+ ]
+ },
+ "DP_PCON_HDMI_TX_LINK_STATUS": {
+ "address": "0x303B",
+ "bitfields": [
+ {
+ "name": "DP_PCON_HDMI_TX_LINK_ACTIVE",
+ "value": "(1 << 0)"
+ },
+ {
+ "name": "DP_PCON_FRL_READY",
+ "value": "(1 << 1)"
+ }
+ ]
+ },
+ "DP_PCON_HDMI_POST_FRL_STATUS": {
+ "address": "0x3036",
+ "bitfields": [
+ {
+ "name": "DP_PCON_HDMI_LINK_MODE",
+ "value": "(1 << 0)"
+ },
+ {
+ "name": "DP_PCON_HDMI_MODE_TMDS",
+ "value": "0"
+ },
+ {
+ "name": "DP_PCON_HDMI_MODE_FRL",
+ "value": "1"
+ },
+ {
+ "name": "DP_PCON_HDMI_FRL_TRAINED_BW",
+ "value": "(0x3F << 1)"
+ },
+ {
+ "name": "DP_PCON_FRL_TRAINED_BW_9GBPS",
+ "value": "(1 << 1)"
+ },
+ {
+ "name": "DP_PCON_FRL_TRAINED_BW_18GBPS",
+ "value": "(1 << 2)"
+ },
+ {
+ "name": "DP_PCON_FRL_TRAINED_BW_24GBPS",
+ "value": "(1 << 3)"
+ },
+ {
+ "name": "DP_PCON_FRL_TRAINED_BW_32GBPS",
+ "value": "(1 << 4)"
+ },
+ {
+ "name": "DP_PCON_FRL_TRAINED_BW_40GBPS",
+ "value": "(1 << 5)"
+ },
+ {
+ "name": "DP_PCON_FRL_TRAINED_BW_48GBPS",
+ "value": "(1 << 6)"
+ }
+ ]
+ },
+ "DP_PCON_HDMI_ERROR_STATUS_LN0": {
+ "address": "0x3037"
+ },
+ "DP_PCON_HDMI_ERROR_STATUS_LN1": {
+ "address": "0x3038"
+ },
+ "DP_PCON_HDMI_ERROR_STATUS_LN2": {
+ "address": "0x3039"
+ },
+ "DP_PCON_HDMI_ERROR_STATUS_LN3": {
+ "address": "0x303A",
+ "bitfields": [
+ {
+ "name": "DP_PCON_HDMI_ERROR_COUNT_MASK",
+ "value": "(0x7 << 0)"
+ },
+ {
+ "name": "DP_PCON_HDMI_ERROR_COUNT_THREE_PLUS",
+ "value": "(1 << 0)"
+ },
+ {
+ "name": "DP_PCON_HDMI_ERROR_COUNT_TEN_PLUS",
+ "value": "(1 << 1)"
+ },
+ {
+ "name": "DP_PCON_HDMI_ERROR_COUNT_HUNDRED_PLUS",
+ "value": "(1 << 2)"
+ }
+ ]
+ },
+ "DP_PCON_HDMI_PPS_OVERRIDE_BASE": {
+ "address": "0x3100"
+ },
+ "DP_PCON_HDMI_PPS_OVRD_SLICE_HEIGHT": {
+ "address": "0x3180"
+ },
+ "DP_PCON_HDMI_PPS_OVRD_SLICE_WIDTH": {
+ "address": "0x3182"
+ },
+ "DP_PCON_HDMI_PPS_OVRD_BPP": {
+ "address": "0x3184"
+ }
+ },
+ "DP_DFP_CAPABILITY_EXTENSION_SUPPORT": {
+ "address": "0x0a3"
+ },
+ "DP_PANEL": {
+ "DP_PANEL_REPLAY_CAP": {
+ "address": "0x0b0",
+ "bitfields": [
+ {
+ "name": "DP_PANEL_REPLAY_SUPPORT",
+ "value": "(1 << 0)"
+ },
+ {
+ "name": "DP_PANEL_REPLAY_SU_SUPPORT",
+ "value": "(1 << 1)"
+ },
+ {
+ "name": "DP_PANEL_REPLAY_EARLY_TRANSPORT_SUPPORT",
+ "value": "(1 << 2) /* eDP 1.5 */"
+ }
+ ]
+ },
+ "DP_PANEL_PANEL_REPLAY_CAPABILITY": {
+ "address": "0xb1",
+ "bitfields": [
+ {
+ "name": "DP_PANEL_PANEL_REPLAY_SU_GRANULARITY_REQUIRED",
+ "value": "(1 << 5)"
+ }
+ ]
+ },
+ "DP_PANEL_PANEL_REPLAY_X_GRANULARITY": {
+ "address": "0xb2"
+ },
+ "DP_PANEL_PANEL_REPLAY_Y_GRANULARITY": {
+ "address": "0xb4"
+ },
+ "DP_PANEL_REPLAY_ERROR_STATUS": {
+ "address": "0x2020",
+ "bitfields": [
+ {
+ "name": "DP_PANEL_REPLAY_LINK_CRC_ERROR",
+ "value": "(1 << 0)"
+ },
+ {
+ "name": "DP_PANEL_REPLAY_RFB_STORAGE_ERROR",
+ "value": "(1 << 1)"
+ },
+ {
+ "name": "DP_PANEL_REPLAY_VSC_SDP_UNCORRECTABLE_ERROR",
+ "value": "(1 << 2)"
+ }
+ ]
+ }
+ },
+ "DP_LINK": {
+ "DP_LINK_BW_SET": {
+ "address": "0x100",
+ "bitfields": [
+ {
+ "name": "DP_LINK_RATE_TABLE",
+ "value": "0x00 /* eDP 1.4 */"
+ },
+ {
+ "name": "DP_LINK_BW_1_62",
+ "value": "0x06"
+ },
+ {
+ "name": "DP_LINK_BW_2_7",
+ "value": "0x0a"
+ },
+ {
+ "name": "DP_LINK_BW_5_4",
+ "value": "0x14 /* 1.2 */"
+ },
+ {
+ "name": "DP_LINK_BW_8_1",
+ "value": "0x1e /* 1.4 */"
+ },
+ {
+ "name": "DP_LINK_BW_10",
+ "value": "0x01 /* 2.0 128b/132b Link Layer */"
+ },
+ {
+ "name": "DP_LINK_BW_13_5",
+ "value": "0x04 /* 2.0 128b/132b Link Layer */"
+ },
+ {
+ "name": "DP_LINK_BW_20",
+ "value": "0x02 /* 2.0 128b/132b Link Layer */"
+ }
+ ]
+ },
+ "DP_LINK_QUAL_LANE0_SET": {
+ "address": "0x10b"
+ },
+ "DP_LINK_QUAL_LANE1_SET": {
+ "address": "0x10c"
+ },
+ "DP_LINK_QUAL_LANE2_SET": {
+ "address": "0x10d"
+ },
+ "DP_LINK_QUAL_LANE3_SET": {
+ "address": "0x10e",
+ "bitfields": [
+ {
+ "name": "DP_LINK_QUAL_PATTERN_DISABLE",
+ "value": "0"
+ },
+ {
+ "name": "DP_LINK_QUAL_PATTERN_D10_2",
+ "value": "1"
+ },
+ {
+ "name": "DP_LINK_QUAL_PATTERN_ERROR_RATE",
+ "value": "2"
+ },
+ {
+ "name": "DP_LINK_QUAL_PATTERN_PRBS7",
+ "value": "3"
+ },
+ {
+ "name": "DP_LINK_QUAL_PATTERN_80BIT_CUSTOM",
+ "value": "4"
+ },
+ {
+ "name": "DP_LINK_QUAL_PATTERN_CP2520_PAT_1",
+ "value": "5"
+ },
+ {
+ "name": "DP_LINK_QUAL_PATTERN_CP2520_PAT_2",
+ "value": "6"
+ },
+ {
+ "name": "DP_LINK_QUAL_PATTERN_CP2520_PAT_3",
+ "value": "7"
+ },
+ {
+ "name": "DP_LINK_QUAL_PATTERN_128B132B_TPS1",
+ "value": "0x08"
+ },
+ {
+ "name": "DP_LINK_QUAL_PATTERN_128B132B_TPS2",
+ "value": "0x10"
+ },
+ {
+ "name": "DP_LINK_QUAL_PATTERN_PRSBS9",
+ "value": "0x18"
+ },
+ {
+ "name": "DP_LINK_QUAL_PATTERN_PRSBS11",
+ "value": "0x20"
+ },
+ {
+ "name": "DP_LINK_QUAL_PATTERN_PRSBS15",
+ "value": "0x28"
+ },
+ {
+ "name": "DP_LINK_QUAL_PATTERN_PRSBS23",
+ "value": "0x30"
+ },
+ {
+ "name": "DP_LINK_QUAL_PATTERN_PRSBS31",
+ "value": "0x38"
+ },
+ {
+ "name": "DP_LINK_QUAL_PATTERN_CUSTOM",
+ "value": "0x40"
+ },
+ {
+ "name": "DP_LINK_QUAL_PATTERN_SQUARE",
+ "value": "0x48"
+ },
+ {
+ "name": "DP_LINK_QUAL_PATTERN_SQUARE_PRESHOOT_DISABLED",
+ "value": "0x49"
+ },
+ {
+ "name": "DP_LINK_QUAL_PATTERN_SQUARE_DEEMPHASIS_DISABLED",
+ "value": "0x4a"
+ },
+ {
+ "name": "DP_LINK_QUAL_PATTERN_SQUARE_PRESHOOT_DEEMPHASIS_DISABLED",
+ "value": "0x4b"
+ }
+ ]
+ },
+ "DP_LINK_RATE_SET": {
+ "address": "0x115",
+ "bitfields": [
+ {
+ "name": "DP_LINK_RATE_SET_SHIFT",
+ "value": "0"
+ },
+ {
+ "name": "DP_LINK_RATE_SET_MASK",
+ "value": "(7 << 0)"
+ }
+ ]
+ },
+ "DP_LINK_SERVICE_IRQ_VECTOR_ESI0": {
+ "address": "0x2005",
+ "bitfields": [
+ {
+ "name": "RX_CAP_CHANGED",
+ "value": "(1 << 0)"
+ },
+ {
+ "name": "LINK_STATUS_CHANGED",
+ "value": "(1 << 1)"
+ },
+ {
+ "name": "STREAM_STATUS_CHANGED",
+ "value": "(1 << 2)"
+ },
+ {
+ "name": "HDMI_LINK_STATUS_CHANGED",
+ "value": "(1 << 3)"
+ },
+ {
+ "name": "CONNECTED_OFF_ENTRY_REQUESTED",
+ "value": "(1 << 4)"
+ },
+ {
+ "name": "DP_TUNNELING_IRQ",
+ "value": "(1 << 5)"
+ }
+ ]
+ },
+ "DP_LINK_ADDRESS": {
+ "address": "0x01"
+ },
+ "DP_LINK_CONSTANT_N_VALUE": {
+ "address": "0x8000",
+ "bitfields": [
+ {
+ "name": "DP_LINK_STATUS_SIZE",
+ "value": "6"
+ }
+ ]
+ }
+ },
+ "DP_LANE": {
+ "DP_LANE_COUNT_SET": {
+ "address": "0x101",
+ "bitfields": [
+ {
+ "name": "DP_LANE_COUNT_MASK",
+ "value": "0x0f"
+ },
+ {
+ "name": "DP_LANE_COUNT_ENHANCED_FRAME_EN",
+ "value": "(1 << 7)"
+ }
+ ]
+ },
+ "DP_LANE_ALIGN_STATUS_UPDATED": {
+ "address": "0x204",
+ "bitfields": [
+ {
+ "name": "DP_INTERLANE_ALIGN_DONE",
+ "value": "(1 << 0)"
+ },
+ {
+ "name": "DP_128B132B_DPRX_EQ_INTERLANE_ALIGN_DONE",
+ "value": "(1 << 2) /* 2.0 E11 */"
+ },
+ {
+ "name": "DP_128B132B_DPRX_CDS_INTERLANE_ALIGN_DONE",
+ "value": "(1 << 3) /* 2.0 E11 */"
+ },
+ {
+ "name": "DP_128B132B_LT_FAILED",
+ "value": "(1 << 4) /* 2.0 E11 */"
+ },
+ {
+ "name": "DP_DOWNSTREAM_PORT_STATUS_CHANGED",
+ "value": "(1 << 6)"
+ },
+ {
+ "name": "DP_LINK_STATUS_UPDATED",
+ "value": "(1 << 7)"
+ }
+ ]
+ },
+ "DP_LANE_ALIGN_STATUS_UPDATED_ESI": {
+ "address": "0x200e"
+ },
+ "DP_LANE_ALIGN_STATUS_UPDATED_PHY_REPEATER1": {
+ "address": "0xf0032"
+ }
+ },
+ "DP_DOWNSPREAD_CTRL": {
+ "address": "0x107",
+ "bitfields": [
+ {
+ "name": "DP_SPREAD_AMP_0_5",
+ "value": "(1 << 4)"
+ },
+ {
+ "name": "DP_FIXED_VTOTAL_AS_SDP_EN_IN_PR_ACTIVE",
+ "value": "(1 << 6)"
+ },
+ {
+ "name": "DP_MSA_TIMING_PAR_IGNORE_EN",
+ "value": "(1 << 7) /* eDP */"
+ }
+ ]
+ },
+ "DP_AUDIO": {
+ "DP_AUDIO_DELAY0": {
+ "address": "0x112"
+ },
+ "DP_AUDIO_DELAY1": {
+ "address": "0x113"
+ },
+ "DP_AUDIO_DELAY2": {
+ "address": "0x114"
+ }
+ },
+ "DP_UPSTREAM_DEVICE_DP_PWR_NEED": {
+ "address": "0x118",
+ "bitfields": [
+ {
+ "name": "DP_PWR_NOT_NEEDED",
+ "value": "(1 << 0)"
+ }
+ ]
+ },
+ "DP_EXTENDED": {
+ "DP_EXTENDED_DPRX_SLEEP_WAKE_TIMEOUT_GRANT": {
+ "address": "0x119",
+ "bitfields": [
+ {
+ "name": "DP_DPRX_SLEEP_WAKE_TIMEOUT_PERIOD_GRANTED",
+ "value": "(1 << 0)"
+ }
+ ]
+ },
+ "DP_EXTENDED_DPRX_SLEEP_WAKE_TIMEOUT_REQUEST": {
+ "address": "0x2211",
+ "bitfields": [
+ {
+ "name": "DP_DPRX_SLEEP_WAKE_TIMEOUT_PERIOD_MASK",
+ "value": "0xff"
+ },
+ {
+ "name": "DP_DPRX_SLEEP_WAKE_TIMEOUT_PERIOD_1_MS",
+ "value": "0x00"
+ },
+ {
+ "name": "DP_DPRX_SLEEP_WAKE_TIMEOUT_PERIOD_20_MS",
+ "value": "0x01"
+ },
+ {
+ "name": "DP_DPRX_SLEEP_WAKE_TIMEOUT_PERIOD_40_MS",
+ "value": "0x02"
+ },
+ {
+ "name": "DP_DPRX_SLEEP_WAKE_TIMEOUT_PERIOD_60_MS",
+ "value": "0x03"
+ },
+ {
+ "name": "DP_DPRX_SLEEP_WAKE_TIMEOUT_PERIOD_80_MS",
+ "value": "0x04"
+ },
+ {
+ "name": "DP_DPRX_SLEEP_WAKE_TIMEOUT_PERIOD_100_MS",
+ "value": "0x05"
+ }
+ ]
+ }
+ },
+ "DP_SDP": {
+ "DP_SDP_ERROR_DETECTION_CONFIGURATION": {
+ "address": "0x121",
+ "bitfields": [
+ {
+ "name": "DP_SDP_CRC16_128B132B_EN",
+ "value": "BIT(0)"
+ }
+ ]
+ },
+ "DP_SDP_AUDIO_TIMESTAMP": {
+ "address": "0x01"
+ },
+ "DP_SDP_AUDIO_STREAM": {
+ "address": "0x02"
+ },
+ "DP_SDP_EXTENSION": {
+ "address": "0x04"
+ },
+ "DP_SDP_AUDIO_COPYMANAGEMENT": {
+ "address": "0x05"
+ },
+ "DP_SDP_ISRC": {
+ "address": "0x06"
+ },
+ "DP_SDP_VSC": {
+ "address": "0x07"
+ },
+ "DP_SDP_ADAPTIVE_SYNC": {
+ "address": "0x22"
+ },
+ "DP_SDP_PPS": {
+ "address": "0x10"
+ },
+ "DP_SDP_VSC_EXT_VESA": {
+ "address": "0x20"
+ },
+ "DP_SDP_VSC_EXT_CEA": {
+ "address": "0x21"
+ },
+ "DP_SDP_AUDIO_INFOFRAME_HB2": {
+ "address": "0x1b"
+ },
+ "DP_SDP_PPS_HEADER_PAYLOAD_BYTES_MINUS_1": {
+ "address": "0x7F",
+ "bitfields": [
+ {
+ "name": "EDP_VSC_PSR_STATE_ACTIVE",
+ "value": "(1<<0)"
+ },
+ {
+ "name": "EDP_VSC_PSR_UPDATE_RFB",
+ "value": "(1<<1)"
+ },
+ {
+ "name": "EDP_VSC_PSR_CRC_VALUES_VALID",
+ "value": "(1<<2)"
+ }
+ ]
+ }
+ },
+ "DP_BRANCH": {
+ "DP_BRANCH_DEVICE_CTRL": {
+ "address": "0x1a1",
+ "bitfields": [
+ {
+ "name": "DP_BRANCH_DEVICE_IRQ_HPD",
+ "value": "(1 << 0)"
+ }
+ ]
+ },
+ "DP_BRANCH_OUI": {
+ "address": "0x500"
+ },
+ "DP_BRANCH_ID": {
+ "address": "0x503"
+ },
+ "DP_BRANCH_REVISION_START": {
+ "address": "0x509"
+ },
+ "DP_BRANCH_HW_REV": {
+ "address": "0x509"
+ },
+ "DP_BRANCH_SW_REV": {
+ "address": "0x50A"
+ },
+ "DP_BRANCH_OUI_HEADER_SIZE": {
+ "address": "0xc"
+ }
+ },
+ "PANEL_REPLAY": {
+ "PANEL_REPLAY_CONFIG": {
+ "address": "0x1b0",
+ "bitfields": [
+ {
+ "name": "DP_PANEL_REPLAY_ENABLE",
+ "value": "(1 << 0)"
+ },
+ {
+ "name": "DP_PANEL_REPLAY_VSC_SDP_CRC_EN",
+ "value": "(1 << 1) /* eDP 1.5 */"
+ },
+ {
+ "name": "DP_PANEL_REPLAY_UNRECOVERABLE_ERROR_EN",
+ "value": "(1 << 3)"
+ },
+ {
+ "name": "DP_PANEL_REPLAY_RFB_STORAGE_ERROR_EN",
+ "value": "(1 << 4)"
+ },
+ {
+ "name": "DP_PANEL_REPLAY_ACTIVE_FRAME_CRC_ERROR_EN",
+ "value": "(1 << 5)"
+ },
+ {
+ "name": "DP_PANEL_REPLAY_SU_ENABLE",
+ "value": "(1 << 6)"
+ },
+ {
+ "name": "DP_PANEL_REPLAY_ENABLE_SU_REGION_ET",
+ "value": "(1 << 7) /* DP 2.1 */"
+ }
+ ]
+ },
+ "PANEL_REPLAY_CONFIG2": {
+ "address": "0x1b1",
+ "bitfields": [
+ {
+ "name": "DP_PANEL_REPLAY_SINK_REFRESH_RATE_UNLOCK_GRANTED",
+ "value": "(1 << 0)"
+ },
+ {
+ "name": "DP_PANEL_REPLAY_CRC_VERIFICATION",
+ "value": "(1 << 1)"
+ },
+ {
+ "name": "DP_PANEL_REPLAY_SU_Y_GRANULARITY_EXTENDED_EN",
+ "value": "(1 << 2)"
+ },
+ {
+ "name": "DP_PANEL_REPLAY_SU_Y_GRANULARITY_EXTENDED_VAL_SEL_SHIFT",
+ "value": "3"
+ },
+ {
+ "name": "DP_PANEL_REPLAY_SU_Y_GRANULARITY_EXTENDED_VAL_SEL_MASK",
+ "value": "(0xf << 3)"
+ },
+ {
+ "name": "DP_PANEL_REPLAY_SU_REGION_SCANLINE_CAPTURE",
+ "value": "(1 << 7)"
+ }
+ ]
+ }
+ },
+ "DP_PAYLOAD": {
+ "DP_PAYLOAD_ALLOCATE_SET": {
+ "address": "0x1c0"
+ },
+ "DP_PAYLOAD_ALLOCATE_START_TIME_SLOT": {
+ "address": "0x1c1"
+ },
+ "DP_PAYLOAD_ALLOCATE_TIME_SLOT_COUNT": {
+ "address": "0x1c2"
+ },
+ "DP_PAYLOAD_TABLE_UPDATE_STATUS": {
+ "address": "0x2c0",
+ "bitfields": [
+ {
+ "name": "DP_PAYLOAD_TABLE_UPDATED",
+ "value": "(1 << 0)"
+ },
+ {
+ "name": "DP_PAYLOAD_ACT_HANDLED",
+ "value": "(1 << 1)"
+ }
+ ]
+ }
+ },
+ "DP_DEVICE": {
+ "DP_DEVICE_SERVICE_IRQ_VECTOR": {
+ "address": "0x201",
+ "bitfields": [
+ {
+ "name": "DP_REMOTE_CONTROL_COMMAND_PENDING",
+ "value": "(1 << 0)"
+ },
+ {
+ "name": "DP_AUTOMATED_TEST_REQUEST",
+ "value": "(1 << 1)"
+ },
+ {
+ "name": "DP_CP_IRQ",
+ "value": "(1 << 2)"
+ },
+ {
+ "name": "DP_MCCS_IRQ",
+ "value": "(1 << 3)"
+ },
+ {
+ "name": "DP_DOWN_REP_MSG_RDY",
+ "value": "(1 << 4) /* 1.2 MST */"
+ },
+ {
+ "name": "DP_UP_REQ_MSG_RDY",
+ "value": "(1 << 5) /* 1.2 MST */"
+ },
+ {
+ "name": "DP_SINK_SPECIFIC_IRQ",
+ "value": "(1 << 6)"
+ }
+ ]
+ },
+ "DP_DEVICE_SERVICE_IRQ_VECTOR_ESI0": {
+ "address": "0x2003"
+ },
+ "DP_DEVICE_SERVICE_IRQ_VECTOR_ESI1": {
+ "address": "0x2004",
+ "bitfields": [
+ {
+ "name": "DP_RX_GTC_MSTR_REQ_STATUS_CHANGE",
+ "value": "(1 << 0)"
+ },
+ {
+ "name": "DP_LOCK_ACQUISITION_REQUEST",
+ "value": "(1 << 1)"
+ },
+ {
+ "name": "DP_CEC_IRQ",
+ "value": "(1 << 2)"
+ }
+ ]
+ }
+ },
+ "DP_LANE0": {
+ "DP_LANE0_1_STATUS": {
+ "address": "0x202"
+ },
+ "DP_LANE0_1_STATUS_ESI": {
+ "address": "0x200c"
+ },
+ "DP_LANE0_1_STATUS_PHY_REPEATER1": {
+ "address": "0xf0030"
+ }
+ },
+ "DP_LANE2": {
+ "DP_LANE2_3_STATUS": {
+ "address": "0x203",
+ "bitfields": [
+ {
+ "name": "DP_LANE_CR_DONE",
+ "value": "(1 << 0)"
+ },
+ {
+ "name": "DP_LANE_CHANNEL_EQ_DONE",
+ "value": "(1 << 1)"
+ },
+ {
+ "name": "DP_LANE_SYMBOL_LOCKED",
+ "value": "(1 << 2)"
+ },
+ {
+ "name": "DP_CHANNEL_EQ_BITS",
+ "value": "(DP_LANE_CR_DONE |\t\t\\"
+ }
+ ]
+ },
+ "DP_LANE2_3_STATUS_ESI": {
+ "address": "0x200d"
+ },
+ "DP_LANE2_3_STATUS_PHY_REPEATER1": {
+ "address": "0xf0031"
+ }
+ },
+ "DP_ADJUST": {
+ "DP_ADJUST_REQUEST_LANE0_1": {
+ "address": "0x206"
+ },
+ "DP_ADJUST_REQUEST_LANE2_3": {
+ "address": "0x207",
+ "bitfields": [
+ {
+ "name": "DP_ADJUST_VOLTAGE_SWING_LANE0_MASK",
+ "value": "0x03"
+ },
+ {
+ "name": "DP_ADJUST_VOLTAGE_SWING_LANE0_SHIFT",
+ "value": "0"
+ },
+ {
+ "name": "DP_ADJUST_PRE_EMPHASIS_LANE0_MASK",
+ "value": "0x0c"
+ },
+ {
+ "name": "DP_ADJUST_PRE_EMPHASIS_LANE0_SHIFT",
+ "value": "2"
+ },
+ {
+ "name": "DP_ADJUST_VOLTAGE_SWING_LANE1_MASK",
+ "value": "0x30"
+ },
+ {
+ "name": "DP_ADJUST_VOLTAGE_SWING_LANE1_SHIFT",
+ "value": "4"
+ },
+ {
+ "name": "DP_ADJUST_PRE_EMPHASIS_LANE1_MASK",
+ "value": "0xc0"
+ },
+ {
+ "name": "DP_ADJUST_PRE_EMPHASIS_LANE1_SHIFT",
+ "value": "6"
+ },
+ {
+ "name": "DP_ADJUST_TX_FFE_PRESET_LANE0_MASK",
+ "value": "(0xf << 0)"
+ },
+ {
+ "name": "DP_ADJUST_TX_FFE_PRESET_LANE0_SHIFT",
+ "value": "0"
+ },
+ {
+ "name": "DP_ADJUST_TX_FFE_PRESET_LANE1_MASK",
+ "value": "(0xf << 4)"
+ },
+ {
+ "name": "DP_ADJUST_TX_FFE_PRESET_LANE1_SHIFT",
+ "value": "4"
+ }
+ ]
+ },
+ "DP_ADJUST_REQUEST_POST_CURSOR2": {
+ "address": "0x20c",
+ "bitfields": [
+ {
+ "name": "DP_ADJUST_POST_CURSOR2_LANE0_MASK",
+ "value": "0x03"
+ },
+ {
+ "name": "DP_ADJUST_POST_CURSOR2_LANE0_SHIFT",
+ "value": "0"
+ },
+ {
+ "name": "DP_ADJUST_POST_CURSOR2_LANE1_MASK",
+ "value": "0x0c"
+ },
+ {
+ "name": "DP_ADJUST_POST_CURSOR2_LANE1_SHIFT",
+ "value": "2"
+ },
+ {
+ "name": "DP_ADJUST_POST_CURSOR2_LANE2_MASK",
+ "value": "0x30"
+ },
+ {
+ "name": "DP_ADJUST_POST_CURSOR2_LANE2_SHIFT",
+ "value": "4"
+ },
+ {
+ "name": "DP_ADJUST_POST_CURSOR2_LANE3_MASK",
+ "value": "0xc0"
+ },
+ {
+ "name": "DP_ADJUST_POST_CURSOR2_LANE3_SHIFT",
+ "value": "6"
+ }
+ ]
+ },
+ "DP_ADJUST_REQUEST_LANE0_1_PHY_REPEATER1": {
+ "address": "0xf0033"
+ },
+ "DP_ADJUST_REQUEST_LANE2_3_PHY_REPEATER1": {
+ "address": "0xf0034"
+ }
+ },
+ "DP_TEST": {
+ "DP_TEST_REQUEST": {
+ "address": "0x218",
+ "bitfields": [
+ {
+ "name": "DP_TEST_LINK_TRAINING",
+ "value": "(1 << 0)"
+ },
+ {
+ "name": "DP_TEST_LINK_VIDEO_PATTERN",
+ "value": "(1 << 1)"
+ },
+ {
+ "name": "DP_TEST_LINK_EDID_READ",
+ "value": "(1 << 2)"
+ },
+ {
+ "name": "DP_TEST_LINK_PHY_TEST_PATTERN",
+ "value": "(1 << 3) /* DPCD >= 1.1 */"
+ },
+ {
+ "name": "DP_TEST_LINK_FAUX_PATTERN",
+ "value": "(1 << 4) /* DPCD >= 1.2 */"
+ },
+ {
+ "name": "DP_TEST_LINK_AUDIO_PATTERN",
+ "value": "(1 << 5) /* DPCD >= 1.2 */"
+ },
+ {
+ "name": "DP_TEST_LINK_AUDIO_DISABLED_VIDEO",
+ "value": "(1 << 6) /* DPCD >= 1.2 */"
+ }
+ ]
+ },
+ "DP_TEST_LINK_RATE": {
+ "address": "0x219",
+ "bitfields": [
+ {
+ "name": "DP_LINK_RATE_162",
+ "value": "(0x6)"
+ },
+ {
+ "name": "DP_LINK_RATE_27",
+ "value": "(0xa)"
+ }
+ ]
+ },
+ "DP_TEST_LANE_COUNT": {
+ "address": "0x220"
+ },
+ "DP_TEST_PATTERN": {
+ "address": "0x221",
+ "bitfields": [
+ {
+ "name": "DP_NO_TEST_PATTERN",
+ "value": "0x0"
+ },
+ {
+ "name": "DP_COLOR_RAMP",
+ "value": "0x1"
+ },
+ {
+ "name": "DP_BLACK_AND_WHITE_VERTICAL_LINES",
+ "value": "0x2"
+ },
+ {
+ "name": "DP_COLOR_SQUARE",
+ "value": "0x3"
+ }
+ ]
+ },
+ "DP_TEST_H_TOTAL_HI": {
+ "address": "0x222"
+ },
+ "DP_TEST_H_TOTAL_LO": {
+ "address": "0x223"
+ },
+ "DP_TEST_V_TOTAL_HI": {
+ "address": "0x224"
+ },
+ "DP_TEST_V_TOTAL_LO": {
+ "address": "0x225"
+ },
+ "DP_TEST_H_START_HI": {
+ "address": "0x226"
+ },
+ "DP_TEST_H_START_LO": {
+ "address": "0x227"
+ },
+ "DP_TEST_V_START_HI": {
+ "address": "0x228"
+ },
+ "DP_TEST_V_START_LO": {
+ "address": "0x229"
+ },
+ "DP_TEST_HSYNC_HI": {
+ "address": "0x22A",
+ "bitfields": [
+ {
+ "name": "DP_TEST_HSYNC_POLARITY",
+ "value": "(1 << 7)"
+ },
+ {
+ "name": "DP_TEST_HSYNC_WIDTH_HI_MASK",
+ "value": "(127 << 0)"
+ }
+ ]
+ },
+ "DP_TEST_HSYNC_WIDTH_LO": {
+ "address": "0x22B"
+ },
+ "DP_TEST_VSYNC_HI": {
+ "address": "0x22C",
+ "bitfields": [
+ {
+ "name": "DP_TEST_VSYNC_POLARITY",
+ "value": "(1 << 7)"
+ },
+ {
+ "name": "DP_TEST_VSYNC_WIDTH_HI_MASK",
+ "value": "(127 << 0)"
+ }
+ ]
+ },
+ "DP_TEST_VSYNC_WIDTH_LO": {
+ "address": "0x22D"
+ },
+ "DP_TEST_H_WIDTH_HI": {
+ "address": "0x22E"
+ },
+ "DP_TEST_H_WIDTH_LO": {
+ "address": "0x22F"
+ },
+ "DP_TEST_V_HEIGHT_HI": {
+ "address": "0x230"
+ },
+ "DP_TEST_V_HEIGHT_LO": {
+ "address": "0x231"
+ },
+ "DP_TEST_MISC0": {
+ "address": "0x232"
+ },
+ "DP_TEST_MISC1": {
+ "address": "0x233",
+ "bitfields": [
+ {
+ "name": "DP_TEST_REFRESH_DENOMINATOR",
+ "value": "(1 << 0)"
+ },
+ {
+ "name": "DP_TEST_INTERLACED",
+ "value": "(1 << 1)"
+ }
+ ]
+ },
+ "DP_TEST_REFRESH_RATE_NUMERATOR": {
+ "address": "0x234"
+ },
+ "DP_TEST_CRC_R_CR": {
+ "address": "0x240"
+ },
+ "DP_TEST_CRC_G_Y": {
+ "address": "0x242"
+ },
+ "DP_TEST_CRC_B_CB": {
+ "address": "0x244"
+ },
+ "DP_TEST_SINK_MISC": {
+ "address": "0x246",
+ "bitfields": [
+ {
+ "name": "DP_TEST_CRC_SUPPORTED",
+ "value": "(1 << 5)"
+ },
+ {
+ "name": "DP_TEST_COUNT_MASK",
+ "value": "0xf"
+ }
+ ]
+ },
+ "DP_TEST_HBR2_SCRAMBLER_RESET": {
+ "address": "0x24A"
+ },
+ "DP_TEST_80BIT_CUSTOM_PATTERN_7_0": {
+ "address": "0x250"
+ },
+ "DP_TEST_80BIT_CUSTOM_PATTERN_15_8": {
+ "address": "0x251"
+ },
+ "DP_TEST_80BIT_CUSTOM_PATTERN_23_16": {
+ "address": "0x252"
+ },
+ "DP_TEST_80BIT_CUSTOM_PATTERN_31_24": {
+ "address": "0x253"
+ },
+ "DP_TEST_80BIT_CUSTOM_PATTERN_39_32": {
+ "address": "0x254"
+ },
+ "DP_TEST_80BIT_CUSTOM_PATTERN_47_40": {
+ "address": "0x255"
+ },
+ "DP_TEST_80BIT_CUSTOM_PATTERN_55_48": {
+ "address": "0x256"
+ },
+ "DP_TEST_80BIT_CUSTOM_PATTERN_63_56": {
+ "address": "0x257"
+ },
+ "DP_TEST_80BIT_CUSTOM_PATTERN_71_64": {
+ "address": "0x258"
+ },
+ "DP_TEST_80BIT_CUSTOM_PATTERN_79_72": {
+ "address": "0x259"
+ },
+ "DP_TEST_RESPONSE": {
+ "address": "0x260",
+ "bitfields": [
+ {
+ "name": "DP_TEST_ACK",
+ "value": "(1 << 0)"
+ },
+ {
+ "name": "DP_TEST_NAK",
+ "value": "(1 << 1)"
+ },
+ {
+ "name": "DP_TEST_EDID_CHECKSUM_WRITE",
+ "value": "(1 << 2)"
+ }
+ ]
+ },
+ "DP_TEST_EDID_CHECKSUM": {
+ "address": "0x261"
+ },
+ "DP_TEST_SINK": {
+ "address": "0x270",
+ "bitfields": [
+ {
+ "name": "DP_TEST_SINK_START",
+ "value": "(1 << 0)"
+ }
+ ]
+ },
+ "DP_TEST_AUDIO_MODE": {
+ "address": "0x271"
+ },
+ "DP_TEST_AUDIO_PATTERN_TYPE": {
+ "address": "0x272"
+ },
+ "DP_TEST_AUDIO_PERIOD_CH1": {
+ "address": "0x273"
+ },
+ "DP_TEST_AUDIO_PERIOD_CH2": {
+ "address": "0x274"
+ },
+ "DP_TEST_AUDIO_PERIOD_CH3": {
+ "address": "0x275"
+ },
+ "DP_TEST_AUDIO_PERIOD_CH4": {
+ "address": "0x276"
+ },
+ "DP_TEST_AUDIO_PERIOD_CH5": {
+ "address": "0x277"
+ },
+ "DP_TEST_AUDIO_PERIOD_CH6": {
+ "address": "0x278"
+ },
+ "DP_TEST_AUDIO_PERIOD_CH7": {
+ "address": "0x279"
+ },
+ "DP_TEST_AUDIO_PERIOD_CH8": {
+ "address": "0x27A"
+ },
+ "DP_TEST_264BIT_CUSTOM_PATTERN_7_0": {
+ "address": "0x2230"
+ },
+ "DP_TEST_264BIT_CUSTOM_PATTERN_263_256": {
+ "address": "0x2250"
+ }
+ },
+ "DP_PHY": {
+ "DP_PHY_TEST_PATTERN": {
+ "address": "0x248",
+ "bitfields": [
+ {
+ "name": "DP_PHY_TEST_PATTERN_SEL_MASK",
+ "value": "0x7"
+ },
+ {
+ "name": "DP_PHY_TEST_PATTERN_NONE",
+ "value": "0x0"
+ },
+ {
+ "name": "DP_PHY_TEST_PATTERN_D10_2",
+ "value": "0x1"
+ },
+ {
+ "name": "DP_PHY_TEST_PATTERN_ERROR_COUNT",
+ "value": "0x2"
+ },
+ {
+ "name": "DP_PHY_TEST_PATTERN_PRBS7",
+ "value": "0x3"
+ },
+ {
+ "name": "DP_PHY_TEST_PATTERN_80BIT_CUSTOM",
+ "value": "0x4"
+ },
+ {
+ "name": "DP_PHY_TEST_PATTERN_CP2520",
+ "value": "0x5"
+ }
+ ]
+ },
+ "DP_PHY_SQUARE_PATTERN": {
+ "address": "0x249"
+ },
+ "DP_PHY_REPEATER_CNT": {
+ "address": "0xf0002"
+ },
+ "DP_PHY_REPEATER_MODE": {
+ "address": "0xf0003"
+ },
+ "DP_PHY_REPEATER_EXTENDED_WAIT_TIMEOUT": {
+ "address": "0xf0005",
+ "bitfields": [
+ {
+ "name": "DP_EXTENDED_WAKE_TIMEOUT_REQUEST_MASK",
+ "value": "0x7f"
+ },
+ {
+ "name": "DP_EXTENDED_WAKE_TIMEOUT_GRANT",
+ "value": "(1 << 7)"
+ }
+ ]
+ },
+ "DP_PHY_REPEATER_128B132B_RATES": {
+ "address": "0xf0007"
+ },
+ "DP_PHY_REPEATER_EQ_DONE": {
+ "address": "0xf0008"
+ },
+ "DP_PHY_REPEATER_MODE_TRANSPARENT": {
+ "address": "0x55"
+ },
+ "DP_PHY_REPEATER_MODE_NON_TRANSPARENT": {
+ "address": "0xaa",
+ "bitfields": [
+ {
+ "name": "DP_HDCP_2_2_AKE_INIT_OFFSET",
+ "value": "DP_HDCP_2_2_REG_RTX_OFFSET"
+ },
+ {
+ "name": "DP_HDCP_2_2_AKE_SEND_CERT_OFFSET",
+ "value": "DP_HDCP_2_2_REG_CERT_RX_OFFSET"
+ },
+ {
+ "name": "DP_HDCP_2_2_AKE_NO_STORED_KM_OFFSET",
+ "value": "DP_HDCP_2_2_REG_EKPUB_KM_OFFSET"
+ },
+ {
+ "name": "DP_HDCP_2_2_AKE_STORED_KM_OFFSET",
+ "value": "DP_HDCP_2_2_REG_EKH_KM_WR_OFFSET"
+ },
+ {
+ "name": "DP_HDCP_2_2_AKE_SEND_HPRIME_OFFSET",
+ "value": "DP_HDCP_2_2_REG_HPRIME_OFFSET"
+ },
+ {
+ "name": "DP_HDCP_2_2_AKE_SEND_PAIRING_INFO_OFFSET",
+ "value": "\\"
+ },
+ {
+ "name": "DP_HDCP_2_2_LC_INIT_OFFSET",
+ "value": "DP_HDCP_2_2_REG_RN_OFFSET"
+ },
+ {
+ "name": "DP_HDCP_2_2_LC_SEND_LPRIME_OFFSET",
+ "value": "DP_HDCP_2_2_REG_LPRIME_OFFSET"
+ },
+ {
+ "name": "DP_HDCP_2_2_SKE_SEND_EKS_OFFSET",
+ "value": "DP_HDCP_2_2_REG_EDKEY_KS_OFFSET"
+ },
+ {
+ "name": "DP_HDCP_2_2_REP_SEND_RECVID_LIST_OFFSET",
+ "value": "DP_HDCP_2_2_REG_RXINFO_OFFSET"
+ },
+ {
+ "name": "DP_HDCP_2_2_REP_SEND_ACK_OFFSET",
+ "value": "DP_HDCP_2_2_REG_V_OFFSET"
+ },
+ {
+ "name": "DP_HDCP_2_2_REP_STREAM_MANAGE_OFFSET",
+ "value": "DP_HDCP_2_2_REG_SEQ_NUM_M_OFFSET"
+ },
+ {
+ "name": "DP_HDCP_2_2_REP_STREAM_READY_OFFSET",
+ "value": "DP_HDCP_2_2_REG_MPRIME_OFFSET"
+ },
+ {
+ "name": "HDCP_2_2_DP_RXSTATUS_LEN",
+ "value": "1"
+ }
+ ]
+ }
+ },
+ "DP_VC_PAYLOAD_ID_SLOT_1": {
+ "address": "0x2c1"
+ },
+ "DP_SOURCE_OUI": {
+ "address": "0x300"
+ },
+ "DP_SET_POWER": {
+ "address": "0x600",
+ "bitfields": [
+ {
+ "name": "DP_SET_POWER_D0",
+ "value": "0x1"
+ },
+ {
+ "name": "DP_SET_POWER_D3",
+ "value": "0x2"
+ },
+ {
+ "name": "DP_SET_POWER_MASK",
+ "value": "0x3"
+ },
+ {
+ "name": "DP_SET_POWER_D3_AUX_ON",
+ "value": "0x5"
+ }
+ ]
+ },
+ "DP_SIDEBAND": {
+ "DP_SIDEBAND_MSG_DOWN_REQ_BASE": {
+ "address": "0x1000"
+ },
+ "DP_SIDEBAND_MSG_UP_REP_BASE": {
+ "address": "0x1200"
+ },
+ "DP_SIDEBAND_MSG_DOWN_REP_BASE": {
+ "address": "0x1400"
+ },
+ "DP_SIDEBAND_MSG_UP_REQ_BASE": {
+ "address": "0x1600"
+ },
+ "DP_SIDEBAND_REPLY_ACK": {
+ "address": "0x00"
+ },
+ "DP_SIDEBAND_REPLY_NAK": {
+ "address": "0x01"
+ }
+ },
+ "DP_SYNCHRONIZATION_LATENCY_IN_SINK": {
+ "address": "0x2009",
+ "bitfields": [
+ {
+ "name": "DP_MAX_RESYNC_FRAME_COUNT_MASK",
+ "value": "(0xf << 0)"
+ },
+ {
+ "name": "DP_MAX_RESYNC_FRAME_COUNT_SHIFT",
+ "value": "0"
+ },
+ {
+ "name": "DP_LAST_ACTUAL_SYNCHRONIZATION_LATENCY_MASK",
+ "value": "(0xf << 4)"
+ },
+ {
+ "name": "DP_LAST_ACTUAL_SYNCHRONIZATION_LATENCY_SHIFT",
+ "value": "4"
+ }
+ ]
+ },
+ "DP_LAST_RECEIVED_PSR_SDP": {
+ "address": "0x200a",
+ "bitfields": [
+ {
+ "name": "DP_PSR_STATE_BIT",
+ "value": "(1 << 0) /* eDP 1.2 */"
+ },
+ {
+ "name": "DP_UPDATE_RFB_BIT",
+ "value": "(1 << 1) /* eDP 1.2 */"
+ },
+ {
+ "name": "DP_CRC_VALID_BIT",
+ "value": "(1 << 2) /* eDP 1.2 */"
+ },
+ {
+ "name": "DP_SU_VALID",
+ "value": "(1 << 3) /* eDP 1.4 */"
+ },
+ {
+ "name": "DP_FIRST_SCAN_LINE_SU_REGION",
+ "value": "(1 << 4) /* eDP 1.4 */"
+ },
+ {
+ "name": "DP_LAST_SCAN_LINE_SU_REGION",
+ "value": "(1 << 5) /* eDP 1.4 */"
+ },
+ {
+ "name": "DP_Y_COORDINATE_VALID",
+ "value": "(1 << 6) /* eDP 1.4a */"
+ }
+ ]
+ },
+ "DP_DP13_DPCD_REV": {
+ "address": "0x2200"
+ },
+ "DP_DPRX": {
+ "DP_DPRX_FEATURE_ENUMERATION_LIST": {
+ "address": "0x2210",
+ "bitfields": [
+ {
+ "name": "DP_GTC_CAP",
+ "value": "(1 << 0) /* DP 1.3 */"
+ },
+ {
+ "name": "DP_SST_SPLIT_SDP_CAP",
+ "value": "(1 << 1) /* DP 1.4 */"
+ },
+ {
+ "name": "DP_AV_SYNC_CAP",
+ "value": "(1 << 2) /* DP 1.3 */"
+ },
+ {
+ "name": "DP_VSC_SDP_EXT_FOR_COLORIMETRY_SUPPORTED",
+ "value": "(1 << 3) /* DP 1.3 */"
+ },
+ {
+ "name": "DP_VSC_EXT_VESA_SDP_SUPPORTED",
+ "value": "(1 << 4) /* DP 1.4 */"
+ },
+ {
+ "name": "DP_VSC_EXT_VESA_SDP_CHAINING_SUPPORTED",
+ "value": "(1 << 5) /* DP 1.4 */"
+ },
+ {
+ "name": "DP_VSC_EXT_CEA_SDP_SUPPORTED",
+ "value": "(1 << 6) /* DP 1.4 */"
+ },
+ {
+ "name": "DP_VSC_EXT_CEA_SDP_CHAINING_SUPPORTED",
+ "value": "(1 << 7) /* DP 1.4 */"
+ }
+ ]
+ },
+ "DP_DPRX_FEATURE_ENUMERATION_LIST_CONT_1": {
+ "address": "0x2214",
+ "bitfields": [
+ {
+ "name": "DP_ADAPTIVE_SYNC_SDP_SUPPORTED",
+ "value": "(1 << 0)"
+ },
+ {
+ "name": "DP_ADAPTIVE_SYNC_SDP_OPERATION_MODE",
+ "value": "GENMASK(1, 0)"
+ },
+ {
+ "name": "DP_ADAPTIVE_SYNC_SDP_LENGTH",
+ "value": "GENMASK(5, 0)"
+ },
+ {
+ "name": "DP_AS_SDP_FIRST_HALF_LINE_OR_3840_PIXEL_CYCLE_WINDOW_NOT_SUPPORTED",
+ "value": "(1 << 1)"
+ },
+ {
+ "name": "DP_VSC_EXT_SDP_FRAMEWORK_VERSION_1_SUPPORTED",
+ "value": "(1 << 4)"
+ }
+ ]
+ }
+ },
+ "DP_128B132B": {
+ "DP_128B132B_SUPPORTED_LINK_RATES": {
+ "address": "0x2215",
+ "bitfields": [
+ {
+ "name": "DP_UHBR10",
+ "value": "(1 << 0)"
+ },
+ {
+ "name": "DP_UHBR20",
+ "value": "(1 << 1)"
+ },
+ {
+ "name": "DP_UHBR13_5",
+ "value": "(1 << 2)"
+ }
+ ]
+ },
+ "DP_128B132B_TRAINING_AUX_RD_INTERVAL": {
+ "address": "0x2216",
+ "bitfields": [
+ {
+ "name": "DP_128B132B_TRAINING_AUX_RD_INTERVAL_1MS_UNIT",
+ "value": "(1 << 7)"
+ },
+ {
+ "name": "DP_128B132B_TRAINING_AUX_RD_INTERVAL_MASK",
+ "value": "0x7f"
+ },
+ {
+ "name": "DP_128B132B_TRAINING_AUX_RD_INTERVAL_400_US",
+ "value": "0x00"
+ },
+ {
+ "name": "DP_128B132B_TRAINING_AUX_RD_INTERVAL_4_MS",
+ "value": "0x01"
+ },
+ {
+ "name": "DP_128B132B_TRAINING_AUX_RD_INTERVAL_8_MS",
+ "value": "0x02"
+ },
+ {
+ "name": "DP_128B132B_TRAINING_AUX_RD_INTERVAL_12_MS",
+ "value": "0x03"
+ },
+ {
+ "name": "DP_128B132B_TRAINING_AUX_RD_INTERVAL_16_MS",
+ "value": "0x04"
+ },
+ {
+ "name": "DP_128B132B_TRAINING_AUX_RD_INTERVAL_32_MS",
+ "value": "0x05"
+ },
+ {
+ "name": "DP_128B132B_TRAINING_AUX_RD_INTERVAL_64_MS",
+ "value": "0x06"
+ }
+ ]
+ },
+ "DP_128B132B_TRAINING_AUX_RD_INTERVAL_PHY_REPEATER1": {
+ "address": "0xf0022"
+ }
+ },
+ "DP_CEC": {
+ "DP_CEC_TUNNELING_CAPABILITY": {
+ "address": "0x3000",
+ "bitfields": [
+ {
+ "name": "DP_CEC_TUNNELING_CAPABLE",
+ "value": "(1 << 0)"
+ },
+ {
+ "name": "DP_CEC_SNOOPING_CAPABLE",
+ "value": "(1 << 1)"
+ },
+ {
+ "name": "DP_CEC_MULTIPLE_LA_CAPABLE",
+ "value": "(1 << 2)"
+ }
+ ]
+ },
+ "DP_CEC_TUNNELING_CONTROL": {
+ "address": "0x3001",
+ "bitfields": [
+ {
+ "name": "DP_CEC_TUNNELING_ENABLE",
+ "value": "(1 << 0)"
+ },
+ {
+ "name": "DP_CEC_SNOOPING_ENABLE",
+ "value": "(1 << 1)"
+ }
+ ]
+ },
+ "DP_CEC_RX_MESSAGE_INFO": {
+ "address": "0x3002",
+ "bitfields": [
+ {
+ "name": "DP_CEC_RX_MESSAGE_LEN_MASK",
+ "value": "(0xf << 0)"
+ },
+ {
+ "name": "DP_CEC_RX_MESSAGE_LEN_SHIFT",
+ "value": "0"
+ },
+ {
+ "name": "DP_CEC_RX_MESSAGE_HPD_STATE",
+ "value": "(1 << 4)"
+ },
+ {
+ "name": "DP_CEC_RX_MESSAGE_HPD_LOST",
+ "value": "(1 << 5)"
+ },
+ {
+ "name": "DP_CEC_RX_MESSAGE_ACKED",
+ "value": "(1 << 6)"
+ },
+ {
+ "name": "DP_CEC_RX_MESSAGE_ENDED",
+ "value": "(1 << 7)"
+ }
+ ]
+ },
+ "DP_CEC_TX_MESSAGE_INFO": {
+ "address": "0x3003",
+ "bitfields": [
+ {
+ "name": "DP_CEC_TX_MESSAGE_LEN_MASK",
+ "value": "(0xf << 0)"
+ },
+ {
+ "name": "DP_CEC_TX_MESSAGE_LEN_SHIFT",
+ "value": "0"
+ },
+ {
+ "name": "DP_CEC_TX_RETRY_COUNT_MASK",
+ "value": "(0x7 << 4)"
+ },
+ {
+ "name": "DP_CEC_TX_RETRY_COUNT_SHIFT",
+ "value": "4"
+ },
+ {
+ "name": "DP_CEC_TX_MESSAGE_SEND",
+ "value": "(1 << 7)"
+ }
+ ]
+ },
+ "DP_CEC_TUNNELING_IRQ_FLAGS": {
+ "address": "0x3004",
+ "bitfields": [
+ {
+ "name": "DP_CEC_RX_MESSAGE_INFO_VALID",
+ "value": "(1 << 0)"
+ },
+ {
+ "name": "DP_CEC_RX_MESSAGE_OVERFLOW",
+ "value": "(1 << 1)"
+ },
+ {
+ "name": "DP_CEC_TX_MESSAGE_SENT",
+ "value": "(1 << 4)"
+ },
+ {
+ "name": "DP_CEC_TX_LINE_ERROR",
+ "value": "(1 << 5)"
+ },
+ {
+ "name": "DP_CEC_TX_ADDRESS_NACK_ERROR",
+ "value": "(1 << 6)"
+ },
+ {
+ "name": "DP_CEC_TX_DATA_NACK_ERROR",
+ "value": "(1 << 7)"
+ }
+ ]
+ },
+ "DP_CEC_LOGICAL_ADDRESS_MASK": {
+ "address": "0x300E",
+ "bitfields": [
+ {
+ "name": "DP_CEC_LOGICAL_ADDRESS_0",
+ "value": "(1 << 0)"
+ },
+ {
+ "name": "DP_CEC_LOGICAL_ADDRESS_1",
+ "value": "(1 << 1)"
+ },
+ {
+ "name": "DP_CEC_LOGICAL_ADDRESS_2",
+ "value": "(1 << 2)"
+ },
+ {
+ "name": "DP_CEC_LOGICAL_ADDRESS_3",
+ "value": "(1 << 3)"
+ },
+ {
+ "name": "DP_CEC_LOGICAL_ADDRESS_4",
+ "value": "(1 << 4)"
+ },
+ {
+ "name": "DP_CEC_LOGICAL_ADDRESS_5",
+ "value": "(1 << 5)"
+ },
+ {
+ "name": "DP_CEC_LOGICAL_ADDRESS_6",
+ "value": "(1 << 6)"
+ },
+ {
+ "name": "DP_CEC_LOGICAL_ADDRESS_7",
+ "value": "(1 << 7)"
+ }
+ ]
+ },
+ "DP_CEC_LOGICAL_ADDRESS_MASK_2": {
+ "address": "0x300F",
+ "bitfields": [
+ {
+ "name": "DP_CEC_LOGICAL_ADDRESS_8",
+ "value": "(1 << 0)"
+ },
+ {
+ "name": "DP_CEC_LOGICAL_ADDRESS_9",
+ "value": "(1 << 1)"
+ },
+ {
+ "name": "DP_CEC_LOGICAL_ADDRESS_10",
+ "value": "(1 << 2)"
+ },
+ {
+ "name": "DP_CEC_LOGICAL_ADDRESS_11",
+ "value": "(1 << 3)"
+ },
+ {
+ "name": "DP_CEC_LOGICAL_ADDRESS_12",
+ "value": "(1 << 4)"
+ },
+ {
+ "name": "DP_CEC_LOGICAL_ADDRESS_13",
+ "value": "(1 << 5)"
+ },
+ {
+ "name": "DP_CEC_LOGICAL_ADDRESS_14",
+ "value": "(1 << 6)"
+ },
+ {
+ "name": "DP_CEC_LOGICAL_ADDRESS_15",
+ "value": "(1 << 7)"
+ }
+ ]
+ },
+ "DP_CEC_RX_MESSAGE_BUFFER": {
+ "address": "0x3010"
+ },
+ "DP_CEC_TX_MESSAGE_BUFFER": {
+ "address": "0x3020"
+ },
+ "DP_CEC_MESSAGE_BUFFER_LENGTH": {
+ "address": "0x10"
+ }
+ },
+ "DP_PROTOCOL": {
+ "DP_PROTOCOL_CONVERTER_CONTROL_0": {
+ "address": "0x3050",
+ "bitfields": [
+ {
+ "name": "DP_HDMI_DVI_OUTPUT_CONFIG",
+ "value": "(1 << 0) /* DP 1.3 */"
+ }
+ ]
+ },
+ "DP_PROTOCOL_CONVERTER_CONTROL_1": {
+ "address": "0x3051",
+ "bitfields": [
+ {
+ "name": "DP_CONVERSION_TO_YCBCR420_ENABLE",
+ "value": "(1 << 0) /* DP 1.3 */"
+ },
+ {
+ "name": "DP_HDMI_EDID_PROCESSING_DISABLE",
+ "value": "(1 << 1) /* DP 1.4 */"
+ },
+ {
+ "name": "DP_HDMI_AUTONOMOUS_SCRAMBLING_DISABLE",
+ "value": "(1 << 2) /* DP 1.4 */"
+ },
+ {
+ "name": "DP_HDMI_FORCE_SCRAMBLING",
+ "value": "(1 << 3) /* DP 1.4 */"
+ }
+ ]
+ },
+ "DP_PROTOCOL_CONVERTER_CONTROL_2": {
+ "address": "0x3052",
+ "bitfields": [
+ {
+ "name": "DP_CONVERSION_TO_YCBCR422_ENABLE",
+ "value": "(1 << 0) /* DP 1.3 */"
+ },
+ {
+ "name": "DP_PCON_ENABLE_DSC_ENCODER",
+ "value": "(1 << 1)"
+ },
+ {
+ "name": "DP_PCON_ENCODER_PPS_OVERRIDE_MASK",
+ "value": "(0x3 << 2)"
+ },
+ {
+ "name": "DP_PCON_ENC_PPS_OVERRIDE_DISABLED",
+ "value": "0"
+ },
+ {
+ "name": "DP_PCON_ENC_PPS_OVERRIDE_EN_PARAMS",
+ "value": "1"
+ },
+ {
+ "name": "DP_PCON_ENC_PPS_OVERRIDE_EN_BUFFER",
+ "value": "2"
+ },
+ {
+ "name": "DP_CONVERSION_RGB_YCBCR_MASK",
+ "value": "(7 << 4)"
+ },
+ {
+ "name": "DP_CONVERSION_BT601_RGB_YCBCR_ENABLE",
+ "value": "(1 << 4)"
+ },
+ {
+ "name": "DP_CONVERSION_BT709_RGB_YCBCR_ENABLE",
+ "value": "(1 << 5)"
+ },
+ {
+ "name": "DP_CONVERSION_BT2020_RGB_YCBCR_ENABLE",
+ "value": "(1 << 6)"
+ }
+ ]
+ }
+ },
+ "DP_HDCP": {
+ "DP_HDCP_2_2_REG_RTX_OFFSET": {
+ "address": "0x69000"
+ },
+ "DP_HDCP_2_2_REG_TXCAPS_OFFSET": {
+ "address": "0x69008"
+ },
+ "DP_HDCP_2_2_REG_CERT_RX_OFFSET": {
+ "address": "0x6900B"
+ },
+ "DP_HDCP_2_2_REG_RRX_OFFSET": {
+ "address": "0x69215"
+ },
+ "DP_HDCP_2_2_REG_RX_CAPS_OFFSET": {
+ "address": "0x6921D"
+ },
+ "DP_HDCP_2_2_REG_EKPUB_KM_OFFSET": {
+ "address": "0x69220"
+ },
+ "DP_HDCP_2_2_REG_EKH_KM_WR_OFFSET": {
+ "address": "0x692A0"
+ },
+ "DP_HDCP_2_2_REG_M_OFFSET": {
+ "address": "0x692B0"
+ },
+ "DP_HDCP_2_2_REG_HPRIME_OFFSET": {
+ "address": "0x692C0"
+ },
+ "DP_HDCP_2_2_REG_EKH_KM_RD_OFFSET": {
+ "address": "0x692E0"
+ },
+ "DP_HDCP_2_2_REG_RN_OFFSET": {
+ "address": "0x692F0"
+ },
+ "DP_HDCP_2_2_REG_LPRIME_OFFSET": {
+ "address": "0x692F8"
+ },
+ "DP_HDCP_2_2_REG_EDKEY_KS_OFFSET": {
+ "address": "0x69318"
+ },
+ "DP_HDCP_2_2_REG_RIV_OFFSET": {
+ "address": "0x69328"
+ },
+ "DP_HDCP_2_2_REG_RXINFO_OFFSET": {
+ "address": "0x69330"
+ },
+ "DP_HDCP_2_2_REG_SEQ_NUM_V_OFFSET": {
+ "address": "0x69332"
+ },
+ "DP_HDCP_2_2_REG_VPRIME_OFFSET": {
+ "address": "0x69335"
+ },
+ "DP_HDCP_2_2_REG_RECV_ID_LIST_OFFSET": {
+ "address": "0x69345"
+ },
+ "DP_HDCP_2_2_REG_V_OFFSET": {
+ "address": "0x693E0"
+ },
+ "DP_HDCP_2_2_REG_SEQ_NUM_M_OFFSET": {
+ "address": "0x693F0"
+ },
+ "DP_HDCP_2_2_REG_K_OFFSET": {
+ "address": "0x693F3"
+ },
+ "DP_HDCP_2_2_REG_STREAM_ID_TYPE_OFFSET": {
+ "address": "0x693F5"
+ },
+ "DP_HDCP_2_2_REG_MPRIME_OFFSET": {
+ "address": "0x69473"
+ },
+ "DP_HDCP_2_2_REG_RXSTATUS_OFFSET": {
+ "address": "0x69493"
+ },
+ "DP_HDCP_2_2_REG_STREAM_TYPE_OFFSET": {
+ "address": "0x69494"
+ },
+ "DP_HDCP_2_2_REG_DBG_OFFSET": {
+ "address": "0x69518"
+ }
+ },
+ "DP_TUNNELING": {
+ "DP_TUNNELING_OUI": {
+ "address": "0xe0000",
+ "bitfields": [
+ {
+ "name": "DP_TUNNELING_OUI_BYTES",
+ "value": "3"
+ }
+ ]
+ },
+ "DP_TUNNELING_DEV_ID": {
+ "address": "0xe0003",
+ "bitfields": [
+ {
+ "name": "DP_TUNNELING_DEV_ID_BYTES",
+ "value": "6"
+ }
+ ]
+ },
+ "DP_TUNNELING_HW_REV": {
+ "address": "0xe0009",
+ "bitfields": [
+ {
+ "name": "DP_TUNNELING_HW_REV_MAJOR_SHIFT",
+ "value": "4"
+ },
+ {
+ "name": "DP_TUNNELING_HW_REV_MAJOR_MASK",
+ "value": "(0xf << DP_TUNNELING_HW_REV_MAJOR_SHIFT)"
+ },
+ {
+ "name": "DP_TUNNELING_HW_REV_MINOR_SHIFT",
+ "value": "0"
+ },
+ {
+ "name": "DP_TUNNELING_HW_REV_MINOR_MASK",
+ "value": "(0xf << DP_TUNNELING_HW_REV_MINOR_SHIFT)"
+ }
+ ]
+ },
+ "DP_TUNNELING_SW_REV_MAJOR": {
+ "address": "0xe000a"
+ },
+ "DP_TUNNELING_SW_REV_MINOR": {
+ "address": "0xe000b"
+ },
+ "DP_TUNNELING_CAPABILITIES": {
+ "address": "0xe000d",
+ "bitfields": [
+ {
+ "name": "DP_IN_BW_ALLOCATION_MODE_SUPPORT",
+ "value": "(1 << 7)"
+ },
+ {
+ "name": "DP_PANEL_REPLAY_OPTIMIZATION_SUPPORT",
+ "value": "(1 << 6)"
+ },
+ {
+ "name": "DP_TUNNELING_SUPPORT",
+ "value": "(1 << 0)"
+ }
+ ]
+ },
+ "DP_TUNNELING_STATUS": {
+ "address": "0xe0025",
+ "bitfields": [
+ {
+ "name": "DP_BW_ALLOCATION_CAPABILITY_CHANGED",
+ "value": "(1 << 3)"
+ },
+ {
+ "name": "DP_ESTIMATED_BW_CHANGED",
+ "value": "(1 << 2)"
+ },
+ {
+ "name": "DP_BW_REQUEST_SUCCEEDED",
+ "value": "(1 << 1)"
+ },
+ {
+ "name": "DP_BW_REQUEST_FAILED",
+ "value": "(1 << 0)"
+ }
+ ]
+ },
+ "DP_TUNNELING_MAX_LINK_RATE": {
+ "address": "0xe0028"
+ },
+ "DP_TUNNELING_MAX_LANE_COUNT": {
+ "address": "0xe0029"
+ },
+ "DP_TUNNELING_MAX_LANE_COUNT_MASK": {
+ "address": "0x1f"
+ }
+ },
+ "DP_IN": {
+ "DP_IN_ADAPTER_INFO": {
+ "address": "0xe000e",
+ "bitfields": [
+ {
+ "name": "DP_IN_ADAPTER_NUMBER_BITS",
+ "value": "7"
+ },
+ {
+ "name": "DP_IN_ADAPTER_NUMBER_MASK",
+ "value": "((1 << DP_IN_ADAPTER_NUMBER_BITS) - 1)"
+ }
+ ]
+ },
+ "DP_IN_ADAPTER_TUNNEL_INFORMATION": {
+ "address": "0xe0021",
+ "bitfields": [
+ {
+ "name": "DP_GROUP_ID_BITS",
+ "value": "3"
+ },
+ {
+ "name": "DP_GROUP_ID_MASK",
+ "value": "((1 << DP_GROUP_ID_BITS) - 1)"
+ }
+ ]
+ }
+ },
+ "DP_USB4": {
+ "DP_USB4_DRIVER_ID": {
+ "address": "0xe000f",
+ "bitfields": [
+ {
+ "name": "DP_USB4_DRIVER_ID_BITS",
+ "value": "4"
+ },
+ {
+ "name": "DP_USB4_DRIVER_ID_MASK",
+ "value": "((1 << DP_USB4_DRIVER_ID_BITS) - 1)"
+ }
+ ]
+ },
+ "DP_USB4_DRIVER_BW_CAPABILITY": {
+ "address": "0xe0020",
+ "bitfields": [
+ {
+ "name": "DP_USB4_DRIVER_BW_ALLOCATION_MODE_SUPPORT",
+ "value": "(1 << 7)"
+ }
+ ]
+ }
+ },
+ "DP_BW": {
+ "DP_BW_GRANULARITY": {
+ "address": "0xe0022"
+ },
+ "DP_BW_GRANULARITY_MASK": {
+ "address": "0x3"
+ }
+ },
+ "DP_ESTIMATED_BW": {
+ "address": "0xe0023"
+ },
+ "DP_ALLOCATED_BW": {
+ "address": "0xe0024"
+ },
+ "DP_DPTX_BW_ALLOCATION_MODE_CONTROL": {
+ "address": "0xe0030",
+ "bitfields": [
+ {
+ "name": "DP_DISPLAY_DRIVER_BW_ALLOCATION_MODE_ENABLE",
+ "value": "(1 << 7)"
+ },
+ {
+ "name": "DP_UNMASK_BW_ALLOCATION_IRQ",
+ "value": "(1 << 6)"
+ }
+ ]
+ },
+ "DP_REQUEST_BW": {
+ "address": "0xe0031",
+ "bitfields": [
+ {
+ "name": "MAX_DP_REQUEST_BW",
+ "value": "255"
+ }
+ ]
+ },
+ "DP_LT_TUNABLE_PHY_REPEATER_FIELD_DATA_STRUCTURE_REV": {
+ "address": "0xf0000"
+ },
+ "DP_Repeater_FEC_CAPABILITY": {
+ "address": "0xf0004"
+ },
+ "_": {
+ "__DP_LTTPR1_BASE": {
+ "address": "0xf0010"
+ },
+ "__DP_LTTPR2_BASE": {
+ "address": "0xf0060"
+ },
+ "__DP_FEC1_BASE": {
+ "address": "0xf0290"
+ },
+ "__DP_FEC2_BASE": {
+ "address": "0xf0298"
+ }
+ },
+ "DP_TRANSMITTER_CAPABILITY_PHY_REPEATER1": {
+ "address": "0xf0021",
+ "bitfields": [
+ {
+ "name": "DP_VOLTAGE_SWING_LEVEL_3_SUPPORTED",
+ "value": "BIT(0)"
+ },
+ {
+ "name": "DP_PRE_EMPHASIS_LEVEL_3_SUPPORTED",
+ "value": "BIT(1)"
+ }
+ ]
+ },
+ "DP_SYMBOL": {
+ "DP_SYMBOL_ERROR_COUNT_LANE0_PHY_REPEATER1": {
+ "address": "0xf0035"
+ },
+ "DP_SYMBOL_ERROR_COUNT_LANE1_PHY_REPEATER1": {
+ "address": "0xf0037"
+ },
+ "DP_SYMBOL_ERROR_COUNT_LANE2_PHY_REPEATER1": {
+ "address": "0xf0039"
+ },
+ "DP_SYMBOL_ERROR_COUNT_LANE3_PHY_REPEATER1": {
+ "address": "0xf003b"
+ }
+ },
+ "DP_OUI_PHY_REPEATER1": {
+ "address": "0xf003d"
+ },
+ "DP_LTTPR_MAX_ADD": {
+ "address": "0xf02ff"
+ },
+ "DP_PEER": {
+ "DP_PEER_DEVICE_NONE": {
+ "address": "0x0"
+ },
+ "DP_PEER_DEVICE_SOURCE_OR_SST": {
+ "address": "0x1"
+ },
+ "DP_PEER_DEVICE_MST_BRANCHING": {
+ "address": "0x2"
+ },
+ "DP_PEER_DEVICE_SST_SINK": {
+ "address": "0x3"
+ },
+ "DP_PEER_DEVICE_DP_LEGACY_CONV": {
+ "address": "0x4"
+ }
+ },
+ "DP_GET_MSG_TRANSACTION_VERSION": {
+ "address": "0x00"
+ },
+ "DP_CONNECTION_STATUS_NOTIFY": {
+ "address": "0x02"
+ },
+ "DP_ENUM_PATH_RESOURCES": {
+ "address": "0x10"
+ },
+ "DP_ALLOCATE_PAYLOAD": {
+ "address": "0x11"
+ },
+ "DP_QUERY": {
+ "DP_QUERY_PAYLOAD": {
+ "address": "0x12"
+ },
+ "DP_QUERY_STREAM_ENC_STATUS": {
+ "address": "0x38",
+ "bitfields": [
+ {
+ "name": "DP_QUERY_STREAM_ENC_STATUS_STATE_NO_EXIST",
+ "value": "0"
+ },
+ {
+ "name": "DP_QUERY_STREAM_ENC_STATUS_STATE_INACTIVE",
+ "value": "1"
+ },
+ {
+ "name": "DP_QUERY_STREAM_ENC_STATUS_STATE_ACTIVE",
+ "value": "2"
+ }
+ ]
+ }
+ },
+ "DP_RESOURCE_STATUS_NOTIFY": {
+ "address": "0x13"
+ },
+ "DP_CLEAR_PAYLOAD_ID_TABLE": {
+ "address": "0x14"
+ },
+ "DP_REMOTE": {
+ "DP_REMOTE_DPCD_READ": {
+ "address": "0x20"
+ },
+ "DP_REMOTE_DPCD_WRITE": {
+ "address": "0x21"
+ },
+ "DP_REMOTE_I2C_READ": {
+ "address": "0x22"
+ },
+ "DP_REMOTE_I2C_WRITE": {
+ "address": "0x23"
+ }
+ },
+ "DP_POWER": {
+ "DP_POWER_UP_PHY": {
+ "address": "0x24"
+ },
+ "DP_POWER_DOWN_PHY": {
+ "address": "0x25"
+ }
+ },
+ "DP_NAK": {
+ "DP_NAK_WRITE_FAILURE": {
+ "address": "0x01"
+ },
+ "DP_NAK_INVALID_READ": {
+ "address": "0x02"
+ },
+ "DP_NAK_CRC_FAILURE": {
+ "address": "0x03"
+ },
+ "DP_NAK_BAD_PARAM": {
+ "address": "0x04"
+ },
+ "DP_NAK_DEFER": {
+ "address": "0x05"
+ },
+ "DP_NAK_LINK_FAILURE": {
+ "address": "0x06"
+ },
+ "DP_NAK_NO_RESOURCES": {
+ "address": "0x07"
+ },
+ "DP_NAK_DPCD_FAIL": {
+ "address": "0x08"
+ },
+ "DP_NAK_I2C_NAK": {
+ "address": "0x09"
+ },
+ "DP_NAK_ALLOCATE_FAIL": {
+ "address": "0x0a",
+ "bitfields": [
+ {
+ "name": "MODE_I2C_START",
+ "value": "1"
+ },
+ {
+ "name": "MODE_I2C_WRITE",
+ "value": "2"
+ },
+ {
+ "name": "MODE_I2C_READ",
+ "value": "4"
+ },
+ {
+ "name": "MODE_I2C_STOP",
+ "value": "8"
+ },
+ {
+ "name": "DP_MST_PHYSICAL_PORT_0",
+ "value": "0"
+ },
+ {
+ "name": "DP_MST_LOGICAL_PORT_0",
+ "value": "8"
+ }
+ ]
+ }
+ },
+ "EDP_SDP": {
+ "EDP_SDP_HEADER_REVISION_MASK": {
+ "address": "0x1F"
+ },
+ "EDP_SDP_HEADER_VALID_PAYLOAD_BYTES": {
+ "address": "0x1F"
+ }
+ }
+}
\ No newline at end of file
diff --git a/tools/displaytop/include/data.h b/tools/displaytop/include/data.h
index 8666a1de0..ff2728b37 100644
--- a/tools/displaytop/include/data.h
+++ b/tools/displaytop/include/data.h
@@ -34,4 +34,18 @@ extern Node *root; /* shared thorugh out the program */
#define DRM_PRIMARY_PREFIX "card"
#define DRM_RENDER_PREFIX "renderD"
+#define DPCD_SIZE 1
+#define DPCD_PATH "/dev"
+#define DPCD_JSON_FILE "dpcd.json"
+#define DATA_SUBDIR "/tools/displaytop/data/"
+
+typedef struct
+{
+ char *card_name;
+ char *dp_name;
+} DP_mapping;
+
+DP_mapping **get_dp_mapping_storage(void);
+int *get_dp_mapping_count_ptr(void);
+
#endif
\ No newline at end of file
diff --git a/tools/displaytop/include/display.h b/tools/displaytop/include/display.h
index dc9e9b4d2..b8f997c69 100644
--- a/tools/displaytop/include/display.h
+++ b/tools/displaytop/include/display.h
@@ -44,5 +44,6 @@ void display_framebuffer(WINDOW *pad, Node *node, int *content_line);
void display_summary(WINDOW *pad, Node *node, int *content_line);
void display_debugfs_file(WINDOW *pad, Node *node, int *content_line);
+void display_dpcd(WINDOW *pad, Node *node, int *content_line);
#endif
\ No newline at end of file
diff --git a/tools/displaytop/include/populate.h b/tools/displaytop/include/populate.h
index fee62bbb1..b164f2f78 100644
--- a/tools/displaytop/include/populate.h
+++ b/tools/displaytop/include/populate.h
@@ -34,5 +34,6 @@ void populate_data(void);
void initialize_display_config(void);
void initialize_display_debugfs(void);
+void initialize_DPCD(void);
#endif
\ No newline at end of file
diff --git a/tools/displaytop/include/utils.h b/tools/displaytop/include/utils.h
index eef5df5f3..cb3e90f33 100644
--- a/tools/displaytop/include/utils.h
+++ b/tools/displaytop/include/utils.h
@@ -57,6 +57,8 @@
#include <drm/i915_drm.h>
#include <drm/drm_fourcc.h>
+#include <cjson/cJSON.h>
+
#include "log.h"
#include "node.h"
#include "data.h"
@@ -99,7 +101,7 @@ void ensure_dump_directory(void);
void strip_whitespace(char *str);
char *read_file(const char *filename);
-char *get_file_path(const char *filename);
+char *get_data_file_path(const char *filename);
/* utils_drm.c */
char *find_drm_device(bool primary);
@@ -112,4 +114,8 @@ const char *get_basic_modifier_str(uint64_t modifier);
const char *get_connector_type_name(uint32_t connector_type);
const char *get_encoder_type_name(uint32_t encoder_type);
+int read_dpcd_registers(const char *aux_path, unsigned char *buffer, size_t size, uint64_t offset);
+
+uint64_t parse_hex_address(const char *hex_str);
+
#endif
\ No newline at end of file
diff --git a/tools/displaytop/meson.build b/tools/displaytop/meson.build
index 09f14063d..083929f26 100644
--- a/tools/displaytop/meson.build
+++ b/tools/displaytop/meson.build
@@ -61,6 +61,9 @@ if have_displaytop
'src/utils_search.c',
'src/populate_display_debugfs.c',
'src/display_debugfs.c',
+ 'src/display_DPCD.c',
+ 'src/populate_DPCD.c',
+ 'src/utils_registers.c',
)
if meson.is_subproject()
@@ -100,4 +103,4 @@ if have_displaytop
else
message('Skipping displaytop: missing required optional dependencies.')
-endif
\ No newline at end of file
+endif
diff --git a/tools/displaytop/src/data.c b/tools/displaytop/src/data.c
index 3aed6292b..62e9994fc 100644
--- a/tools/displaytop/src/data.c
+++ b/tools/displaytop/src/data.c
@@ -26,4 +26,17 @@
/* This file holds all the global variables that are being used in the tool */
-Node *root;
\ No newline at end of file
+Node *root;
+
+static DP_mapping *dp_mappings = NULL;
+static int dp_mapping_count = 0;
+
+DP_mapping **get_dp_mapping_storage(void)
+{
+ return &dp_mappings;
+}
+
+int *get_dp_mapping_count_ptr(void)
+{
+ return &dp_mapping_count;
+}
\ No newline at end of file
diff --git a/tools/displaytop/src/display_DPCD.c b/tools/displaytop/src/display_DPCD.c
new file mode 100644
index 000000000..39d6a8c8d
--- /dev/null
+++ b/tools/displaytop/src/display_DPCD.c
@@ -0,0 +1,277 @@
+/*
+ * Copyright © 2025 Intel Corporation
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ */
+
+#include "display.h"
+#include "utils.h"
+#include "data.h"
+
+/**
+ * @brief Reads DPCD (DisplayPort Configuration Data) registers.
+ *
+ * This function reads a specified number of bytes from the DPCD registers
+ * starting at a given offset and stores the data in the provided buffer.
+ *
+ * @param aux_path The path to the AUX device file.
+ * @param buffer A pointer to the buffer where the read data will be stored.
+ * @param size The number of bytes to read from the DPCD registers.
+ * @param offset The starting offset in the DPCD registers from which to begin reading.
+ * @return An integer indicating the success or failure of the read operation.
+ * Typically, 0 indicates success, while a negative value indicates an error.
+ */
+int read_dpcd_registers(const char *aux_path, unsigned char *buffer, size_t size, uint64_t offset)
+{
+ FILE *fp = NULL;
+ size_t bytes_read = 0;
+
+ fp = fopen(aux_path, "rb");
+ if (!fp)
+ {
+ log_message(LOG_ERROR, "Failed to open DPCD AUX path: %s", aux_path);
+ return -1;
+ }
+
+ if (fseek(fp, offset, SEEK_SET) != 0)
+ {
+ log_message(LOG_ERROR, "Failed to seek to offset %ld in %s", offset, aux_path);
+ fclose(fp);
+ return -1;
+ }
+
+ bytes_read = fread(buffer, 1, size, fp);
+ fclose(fp);
+
+ if (bytes_read != size)
+ {
+ log_message(LOG_WARNING, "Expected %zu bytes but read %zu bytes", size, bytes_read);
+ }
+
+ return (int)bytes_read;
+}
+
+/**
+ * @brief Displays DPCD (DisplayPort Configuration Data) information on a given pad window.
+ *
+ * This function takes a pad window, a JSON object representing the DPCD register data,
+ * and a pointer to an integer representing the current line number. It displays the
+ * DPCD data on the pad window, starting from the specified line.
+ *
+ * @param pad A pointer to the pad window where the DPCD data will be displayed.
+ * @param reg A cJSON object containing the DPCD register data.
+ * @param line A pointer to an integer representing the current line number. This will be
+ * updated as the function writes data to the pad window.
+ */
+static void display_dpcd_data(WINDOW *pad, cJSON *reg, int *line)
+{
+ int width, col_widths[2], bitFieldCount = 0;
+ cJSON *bitField, *bitFieldItem, *name, *value;
+ char *name_buffer, *value_buffer;
+
+ if (!cJSON_IsObject(reg))
+ {
+ print_red_text(pad, (*line)++, 1, "Invalid JSON object");
+ return;
+ }
+
+ bitField = cJSON_GetObjectItem(reg, "bitfields");
+ if (!bitField)
+ {
+ print_red_text(pad, (*line)++, 1, "Bitfields not found in Register");
+ return;
+ }
+
+ print_bold_text(pad, (*line)++, 1, "Bitfield Information: ");
+ (*line)++;
+
+ width = getmaxx(pad);
+ width -= 2;
+ width -= 3;
+
+ col_widths[0] = (int)(width * 0.30f) - 2;
+ col_widths[1] = (int)(width * 0.70f) - 2;
+
+ if (cJSON_IsArray(bitField))
+ bitFieldCount = cJSON_GetArraySize(bitField);
+ else
+ bitFieldCount = 1;
+
+ wattron(pad, A_BOLD);
+ mvwprintw(pad, (*line)++, 1, "| %-*s | %-*s |", col_widths[0], "BitField", col_widths[1], "Value & Description");
+ wattroff(pad, A_BOLD);
+
+ for (int i = 0; i < bitFieldCount; i++)
+ {
+ if (cJSON_IsArray(bitField))
+ bitFieldItem = cJSON_GetArrayItem(bitField, i);
+ else
+ bitFieldItem = bitField;
+
+ name = cJSON_GetObjectItem(bitFieldItem, "name");
+ value = cJSON_GetObjectItem(bitFieldItem, "value");
+
+ name_buffer = name && cJSON_IsString(name) ? strdup(name->valuestring) : strdup("NA");
+ value_buffer = value && cJSON_IsString(value) ? strdup(value->valuestring) : strdup("NA");
+
+ mvwprintw(pad, (*line)++, 1, "| %-*s | %-*s |", col_widths[0], name_buffer, col_widths[1], value_buffer);
+
+ free(value_buffer);
+ free(name_buffer);
+ }
+}
+
+/**
+ * @brief Displays the DPCD (DisplayPort Configuration Data) information for a given node.
+ *
+ * This function finds the parent node with "DP" in its name, retrieves the corresponding
+ * DPCD AUX path, reads the DPCD JSON file to get the register offset, and then reads
+ * and displays the DPCD register data.
+ *
+ * @param pad The window pad where the information will be displayed.
+ * @param node The node for which the DPCD information is to be displayed.
+ * @param content_line Pointer to an integer that will be updated with the current line number.
+ *
+ * The function performs the following steps:
+ * 1. Finds the parent node with "DP" in its name.
+ * 2. Retrieves the corresponding DPCD AUX path from the DP mappings.
+ * 3. Reads the DPCD JSON file to get the register offset for the node.
+ * 4. Reads the DPCD register data from the DPCD AUX path.
+ * 5. Displays the DPCD register data and additional information on the pad.
+ *
+ * If any step fails, an appropriate error message is displayed on the pad.
+ */
+void display_dpcd(WINDOW *pad, Node *node, int *content_line)
+{
+ int line = 0;
+ Node *parent = node;
+ DP_mapping *mappings = *get_dp_mapping_storage();
+ int count = *get_dp_mapping_count_ptr();
+ char dpcd_aux_path[256] = "";
+ char *json_data = NULL;
+ cJSON *json = NULL, *node_item = NULL, *Address = NULL;
+ uint64_t offset = 0;
+ unsigned char dpcd_buffer[DPCD_SIZE] = {0};
+
+ while (parent != NULL && strstr(parent->name, "DP ") == NULL)
+ {
+ parent = parent->parent;
+ }
+
+ if (parent == NULL)
+ {
+ print_red_text(pad, line++, 1, "No parent with 'DP' found");
+ *content_line = line;
+ return;
+ }
+
+ for (int i = 0; i < count; i++)
+ {
+ if (strcmp(mappings[i].card_name, parent->name) == 0)
+ {
+ snprintf(dpcd_aux_path, sizeof(dpcd_aux_path), "/dev/%s", mappings[i].dp_name);
+ break;
+ }
+ }
+
+ print_bold_text(pad, line++, 1, "DPCD AUX Path: %s\n", dpcd_aux_path);
+
+ json_data = read_file(get_data_file_path(DPCD_JSON_FILE));
+ if (!json_data)
+ {
+ print_red_text(pad, line++, 1, "Failed to read DPCD JSON file");
+ *content_line = line;
+ return;
+ }
+
+ json = cJSON_Parse(json_data);
+ if (!json)
+ {
+ print_red_text(pad, line++, 1, "Failed to parse DPCD JSON content");
+ free(json_data);
+ *content_line = line;
+ return;
+ }
+
+ node_item = cJSON_GetObjectItemCaseSensitive(json, node->name);
+ if (!node_item)
+ {
+ cJSON *child = NULL;
+ cJSON_ArrayForEach(child, json)
+ {
+ node_item = cJSON_GetObjectItemCaseSensitive(child, node->name);
+ if (node_item)
+ {
+ break;
+ }
+ }
+ }
+
+ if (!node_item)
+ {
+ print_red_text(pad, line++, 1, "Node item '%s' not found in JSON", node->name);
+ cJSON_Delete(json);
+ free(json_data);
+ *content_line = line;
+ return;
+ }
+
+ Address = cJSON_GetObjectItem(node_item, "address");
+ if (Address)
+ {
+ offset = parse_hex_address(Address->valuestring);
+ }
+ else
+ {
+ print_red_text(pad, line++, 1, "Address not found in Register");
+ return;
+ }
+
+ line++;
+ print_bold_text(pad, line++, 1, "DPCD Register: %s", node->name);
+ print_green_text(pad, line++, 1, "DPCD Register Offset: 0x%lx", offset);
+ line++;
+
+ if (read_dpcd_registers(dpcd_aux_path, dpcd_buffer, DPCD_SIZE, offset) > 0)
+ {
+ print_bold_text(pad, line++, 1, "DPCD Data:");
+ print_bold_text(pad, line++, 1, "-------------------------------------------------");
+ for (int i = 0; i < DPCD_SIZE; i++)
+ {
+ mvwprintw(pad, line++, 1, "0x%02x (", dpcd_buffer[i]);
+ for (int bit = 7; bit >= 0; bit--)
+ {
+ wprintw(pad, "%d", (dpcd_buffer[i] >> bit) & 1);
+ }
+ wprintw(pad, ")");
+ }
+ print_bold_text(pad, line++, 1, "-------------------------------------------------");
+ }
+ else
+ {
+ print_red_text(pad, line++, 1, "Failed to read DPCD registers");
+ }
+
+ line++;
+ display_dpcd_data(pad, node_item, &line);
+
+ *content_line = line;
+ return;
+}
diff --git a/tools/displaytop/src/populate.c b/tools/displaytop/src/populate.c
index fd7fca48f..947e9dbc3 100644
--- a/tools/displaytop/src/populate.c
+++ b/tools/displaytop/src/populate.c
@@ -32,4 +32,5 @@ void populate_data(void)
initialize_display_config();
initialize_display_debugfs();
+ initialize_DPCD();
}
diff --git a/tools/displaytop/src/populate_DPCD.c b/tools/displaytop/src/populate_DPCD.c
new file mode 100644
index 000000000..25c3faedb
--- /dev/null
+++ b/tools/displaytop/src/populate_DPCD.c
@@ -0,0 +1,250 @@
+/*
+ * Copyright © 2025 Intel Corporation
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ */
+
+#include "data.h"
+#include "populate.h"
+
+#define DRM_PATH "/sys/class/drm"
+
+static char *find_dp_card(const char *dp_aux)
+{
+ struct dirent *entry;
+ DIR *dp;
+ DP_mapping **dp_mappings;
+ int *dp_mapping_count;
+ char *result;
+ char aux_path[512];
+ char *dp_name;
+ char *formatted_name;
+ char *p;
+
+ dp = opendir(DRM_PATH);
+ if (!dp)
+ {
+ log_message(LOG_ERROR, "Failed to open DRM path");
+ return NULL;
+ }
+
+ dp_mappings = get_dp_mapping_storage();
+ dp_mapping_count = get_dp_mapping_count_ptr();
+ result = NULL;
+
+ while ((entry = readdir(dp)) != NULL)
+ {
+ if (strstr(entry->d_name, "card") && strstr(entry->d_name, "-DP"))
+ {
+ snprintf(aux_path, sizeof(aux_path), "%s/%s/%s", DRM_PATH, entry->d_name, dp_aux);
+
+ if (access(aux_path, F_OK) == 0)
+ {
+ *dp_mappings = realloc(*dp_mappings, (*dp_mapping_count + 1) * sizeof(DP_mapping));
+ if (!*dp_mappings)
+ {
+ log_message(LOG_ERROR, "Failed to allocate memory for DP mappings");
+ closedir(dp);
+ return NULL;
+ }
+
+ dp_name = strstr(entry->d_name, "-DP") + 1;
+ formatted_name = strdup(dp_name);
+ if (!formatted_name)
+ {
+ log_message(LOG_ERROR, "Failed to allocate memory for formatted name");
+ closedir(dp);
+ return NULL;
+ }
+
+ for (p = formatted_name; *p; p++)
+ {
+ if (*p == '-')
+ {
+ *p = ' ';
+ }
+ }
+
+ (*dp_mappings)[*dp_mapping_count].card_name = strdup(formatted_name);
+ (*dp_mappings)[*dp_mapping_count].dp_name = strdup(dp_aux);
+ if (!(*dp_mappings)[*dp_mapping_count].card_name || !(*dp_mappings)[*dp_mapping_count].dp_name)
+ {
+ log_message(LOG_ERROR, "Failed to allocate memory for DP mapping names");
+ free(formatted_name);
+ closedir(dp);
+ return NULL;
+ }
+ (*dp_mapping_count)++;
+
+ result = strdup(formatted_name);
+ free(formatted_name);
+ break;
+ }
+ }
+ }
+ closedir(dp);
+ return result;
+}
+
+static void process_DPCD_json_Helper(cJSON *json, Node *parentNode)
+{
+ cJSON *reg = NULL;
+ const char *name;
+ Node *currentNode;
+ cJSON *address;
+
+ cJSON_ArrayForEach(reg, json)
+ {
+ name = reg->string;
+ if (name)
+ {
+ currentNode = create_node(name, display_dpcd, parentNode);
+
+ address = cJSON_GetObjectItem(reg, "address");
+ if (!address)
+ {
+ currentNode->display_function = NULL;
+ }
+
+ if (cJSON_IsObject(reg) && !address)
+ {
+ process_DPCD_json_Helper(reg, currentNode);
+ }
+ add_child(parentNode, currentNode);
+ }
+ }
+}
+
+static void process_DPCD_json(Node *parentNode)
+{
+ FILE *file;
+ long fileSize;
+ char *jsonContent;
+ cJSON *json;
+
+ log_message(LOG_INFO, "Opening DPCD json file");
+ file = fopen(get_data_file_path(DPCD_JSON_FILE), "r");
+ if (!file)
+ {
+ log_message(LOG_ERROR, "Failed to open DPCD json file");
+ return;
+ }
+
+ log_message(LOG_INFO, "Reading DPCD json file");
+ fseek(file, 0, SEEK_END);
+ fileSize = ftell(file);
+ fseek(file, 0, SEEK_SET);
+
+ jsonContent = malloc(fileSize + 1);
+ if (!jsonContent)
+ {
+ log_message(LOG_ERROR, "Failed to allocate memory for json content");
+ fclose(file);
+ return;
+ }
+
+ fread(jsonContent, 1, fileSize, file);
+ jsonContent[fileSize] = '\0';
+ fclose(file);
+
+ log_message(LOG_INFO, "Parsing DPCD json content");
+ json = cJSON_Parse(jsonContent);
+ if (!json)
+ {
+ log_message(LOG_ERROR, "Failed to parse DPCD json");
+ free(jsonContent);
+ return;
+ }
+
+ process_DPCD_json_Helper(json, parentNode);
+
+ log_message(LOG_INFO, "Cleaning up");
+ cJSON_Delete(json);
+ free(jsonContent);
+}
+
+void initialize_DPCD(void)
+{
+ DIR *dir;
+ struct dirent *entry;
+ static char dpcd_path[256];
+ Node *DPCD;
+ char *dp_aux;
+
+ if (access(get_data_file_path(DPCD_JSON_FILE), F_OK) != 0)
+ {
+ log_message(LOG_ERROR, "DPCD json file does not exist");
+ return;
+ }
+
+ DPCD = create_node("DPCD Registers", NULL, root);
+ if (!DPCD)
+ {
+ log_message(LOG_ERROR, "Failed to create DPCD node");
+ log_message(LOG_ERROR, "malloc");
+ return;
+ }
+
+ dir = opendir(DPCD_PATH);
+ if (!dir)
+ {
+ log_message(LOG_ERROR, "Failed to open debugfs dri directory (Run as root?)");
+ return;
+ }
+
+ while ((entry = readdir(dir)) != NULL)
+ {
+ if (strstr(entry->d_name, "drm_dp") != NULL)
+ {
+ Node *dpcdNode;
+
+ if (snprintf(dpcd_path, sizeof(dpcd_path), "%s/%s", DPCD_PATH, entry->d_name) >= (int)sizeof(dpcd_path))
+ {
+ log_message(LOG_ERROR, "DPCD AUX path truncated: %s/%s", DPCD_PATH, entry->d_name);
+ continue;
+ }
+
+ log_message(LOG_INFO, "Found DPCD AUX path: %s", dpcd_path);
+
+ dp_aux = find_dp_card(entry->d_name);
+ if (!dp_aux)
+ {
+ log_message(LOG_ERROR, "Failed to find DP card for %s", entry->d_name);
+ continue;
+ }
+
+ dpcdNode = create_node(dp_aux, NULL, DPCD);
+ if (!dpcdNode)
+ {
+ log_message(LOG_ERROR, "Failed to create node for %s", dp_aux);
+ free(dp_aux);
+ closedir(dir);
+ return;
+ }
+
+ process_DPCD_json(dpcdNode);
+ add_child(DPCD, dpcdNode);
+ free(dp_aux);
+ }
+ }
+
+ closedir(dir);
+ add_child(root, DPCD);
+}
\ No newline at end of file
diff --git a/tools/displaytop/src/utils.c b/tools/displaytop/src/utils.c
index ec8c8a649..6d1b305b4 100644
--- a/tools/displaytop/src/utils.c
+++ b/tools/displaytop/src/utils.c
@@ -23,6 +23,72 @@
#include "utils.h"
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include <limits.h>
+
+char *get_data_file_path(const char *filename) {
+ static char final_path[PATH_MAX];
+ char exe_path[PATH_MAX];
+ char base_path[PATH_MAX];
+ int written =0;
+ ssize_t len;
+ char *match;
+ char *cursor;
+ char *after;
+ size_t base_len;
+ size_t required_len;
+
+ len = readlink("/proc/self/exe", exe_path, sizeof(exe_path) - 1);
+ if (len == -1) {
+ log_message(LOG_ERROR, "readlink failed: %s\n", strerror(errno));
+ return NULL;
+ }
+ exe_path[len] = '\0';
+
+ match = NULL;
+ cursor = exe_path;
+ while ((cursor = strstr(cursor, "igt-gpu-tools"))) {
+ char next_char = cursor[strlen("igt-gpu-tools")];
+ if (next_char == '/' || next_char == '-' || next_char == '\0') {
+ match = cursor;
+ }
+ cursor += strlen("igt-gpu-tools");
+ }
+
+ if (!match) {
+ log_message(LOG_ERROR, "Could not find igt-gpu-tools directory in path: %s\n", exe_path);
+ return NULL;
+ }
+
+ after = strchr(match, '/');
+ base_len = after ? (size_t)(after - exe_path) : strlen(exe_path);
+
+ if (base_len >= sizeof(base_path)) {
+ log_message(LOG_ERROR, "Base path too long.\n");
+ return NULL;
+ }
+
+ memcpy(base_path, exe_path, base_len);
+ base_path[base_len] = '\0';
+
+ required_len = base_len + strlen(DATA_SUBDIR) + strlen(filename) + 1;
+ if (required_len >= sizeof(final_path)) {
+ log_message(LOG_ERROR, "Data file path too long. Buffer would overflow.\n");
+ return NULL;
+ }
+
+ written = snprintf(final_path, sizeof(final_path), "%s%s%s", base_path, DATA_SUBDIR, filename);
+ if (written < 0 || (size_t)written >= sizeof(final_path)) {
+ log_message(LOG_ERROR, "snprintf failed or truncated.\n");
+ return NULL;
+ }
+
+ return final_path;
+}
+
char *read_file(const char *filename)
{
FILE *file;
diff --git a/tools/displaytop/src/utils_registers.c b/tools/displaytop/src/utils_registers.c
new file mode 100644
index 000000000..75b3d31e4
--- /dev/null
+++ b/tools/displaytop/src/utils_registers.c
@@ -0,0 +1,97 @@
+/*
+ * Copyright © 2025 Intel Corporation
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ */
+
+#include "utils.h"
+
+/**
+ * @brief Parses a hexadecimal address string and converts it to a 64-bit unsigned integer.
+ *
+ * This function takes a hexadecimal string representation of an address, optionally
+ * cleans it by removing a trailing 'h' or 'H', and converts it to a uint64_t value.
+ * It also handles strings prefixed with "0x" or "0X".
+ *
+ * @param hex_str A pointer to the hexadecimal string to be parsed. The string can
+ * optionally end with 'h' or 'H' and may start with "0x" or "0X".
+ * Passing NULL or an empty string will result in an error.
+ *
+ * @return The parsed 64-bit unsigned integer address. If the input string is invalid
+ * or the conversion fails, the function logs an error and returns 0.
+ *
+ * @note The function logs errors using the `log_message` function with the `LOG_ERROR` level
+ * in the following cases:
+ * - The input string is NULL or empty.
+ * - Memory allocation fails while cleaning the input string.
+ * - The input string cannot be converted to a valid hexadecimal number.
+ *
+ * @note The caller is responsible for ensuring that the input string is properly null-terminated.
+ */
+uint64_t parse_hex_address(const char *hex_str)
+{
+ size_t len;
+ char *cleaned = NULL;
+ char *start = NULL;
+ char *endptr;
+ uint64_t address = 0;
+
+ if (!hex_str || *hex_str == '\0')
+ {
+ log_message(LOG_ERROR, "Invalid hex string: NULL or empty");
+ return 0;
+ }
+
+ len = strlen(hex_str);
+
+ if (hex_str[len - 1] == 'h' || hex_str[len - 1] == 'H')
+ {
+ cleaned = strndup(hex_str, len - 1);
+ }
+ else
+ {
+ cleaned = strdup(hex_str);
+ }
+
+ if (!cleaned)
+ {
+ log_message(LOG_ERROR, "Memory allocation failed while cleaning hex string");
+ return 0;
+ }
+
+ start = cleaned;
+ if (cleaned[0] == '0' && (cleaned[1] == 'x' || cleaned[1] == 'X'))
+ {
+ start += 2;
+ }
+
+ errno = 0;
+ address = strtoull(start, &endptr, 16);
+
+ if (errno != 0 || *endptr != '\0')
+ {
+ log_message(LOG_ERROR, "Invalid hex string: conversion failed");
+ free(cleaned);
+ return 0;
+ }
+
+ free(cleaned);
+ return address;
+}
--
2.43.0
More information about the Intel-gfx-trybot
mailing list