summaryrefslogtreecommitdiff
path: root/drivers/gpu/drm/amd/display/include/dpcd_defs.h
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/drm/amd/display/include/dpcd_defs.h')
-rw-r--r--drivers/gpu/drm/amd/display/include/dpcd_defs.h742
1 files changed, 742 insertions, 0 deletions
diff --git a/drivers/gpu/drm/amd/display/include/dpcd_defs.h b/drivers/gpu/drm/amd/display/include/dpcd_defs.h
new file mode 100644
index 000000000000..fbb2729148df
--- /dev/null
+++ b/drivers/gpu/drm/amd/display/include/dpcd_defs.h
@@ -0,0 +1,742 @@
+/*
+ * Copyright 2012-15 Advanced Micro Devices, Inc.
+ *
+ * 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 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 COPYRIGHT HOLDER(S) OR AUTHOR(S) 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.
+ *
+ * Authors: AMD
+ *
+ */
+
+#ifndef __DAL_DPCD_DEFS_H__
+#define __DAL_DPCD_DEFS_H__
+
+enum dpcd_address {
+/* addresses marked with 1.2 are only defined since DP 1.2 spec */
+
+ /* Reciever Capability Field */
+ DPCD_ADDRESS_DPCD_REV = 0x00000,
+ DPCD_ADDRESS_MAX_LINK_RATE = 0x00001,
+ DPCD_ADDRESS_MAX_LANE_COUNT = 0x00002,
+ DPCD_ADDRESS_MAX_DOWNSPREAD = 0x00003,
+ DPCD_ADDRESS_NORP = 0x00004,
+ DPCD_ADDRESS_DOWNSTREAM_PORT_PRESENT = 0x00005,
+ DPCD_ADDRESS_MAIN_LINK_CHANNEL_CODING = 0x00006,
+ DPCD_ADDRESS_DOWNSTREAM_PORT_COUNT = 0x00007,
+ DPCD_ADDRESS_RECEIVE_PORT0_CAP0 = 0x00008,
+ DPCD_ADDRESS_RECEIVE_PORT0_CAP1 = 0x00009,
+ DPCD_ADDRESS_RECEIVE_PORT1_CAP0 = 0x0000A,
+ DPCD_ADDRESS_RECEIVE_PORT1_CAP1 = 0x0000B,
+
+ DPCD_ADDRESS_I2C_SPEED_CNTL_CAP = 0x0000C,/*1.2*/
+ DPCD_ADDRESS_EDP_CONFIG_CAP = 0x0000D,/*1.2*/
+ DPCD_ADDRESS_TRAINING_AUX_RD_INTERVAL = 0x000E,/*1.2*/
+
+ DPCD_ADDRESS_MSTM_CAP = 0x00021,/*1.2*/
+
+ /* Audio Video Sync Data Feild */
+ DPCD_ADDRESS_AV_GRANULARITY = 0x0023,
+ DPCD_ADDRESS_AUDIO_DECODE_LATENCY1 = 0x0024,
+ DPCD_ADDRESS_AUDIO_DECODE_LATENCY2 = 0x0025,
+ DPCD_ADDRESS_AUDIO_POSTPROCESSING_LATENCY1 = 0x0026,
+ DPCD_ADDRESS_AUDIO_POSTPROCESSING_LATENCY2 = 0x0027,
+ DPCD_ADDRESS_VIDEO_INTERLACED_LATENCY = 0x0028,
+ DPCD_ADDRESS_VIDEO_PROGRESSIVE_LATENCY = 0x0029,
+ DPCD_ADDRESS_AUDIO_DELAY_INSERT1 = 0x0002B,
+ DPCD_ADDRESS_AUDIO_DELAY_INSERT2 = 0x0002C,
+ DPCD_ADDRESS_AUDIO_DELAY_INSERT3 = 0x0002D,
+
+ /* Audio capability */
+ DPCD_ADDRESS_NUM_OF_AUDIO_ENDPOINTS = 0x00022,
+
+ DPCD_ADDRESS_GUID_START = 0x00030,/*1.2*/
+ DPCD_ADDRESS_GUID_END = 0x0003f,/*1.2*/
+
+ DPCD_ADDRESS_PSR_SUPPORT_VER = 0x00070,
+ DPCD_ADDRESS_PSR_CAPABILITY = 0x00071,
+
+ DPCD_ADDRESS_DWN_STRM_PORT0_CAPS = 0x00080,/*1.2a*/
+
+ /* Link Configuration Field */
+ DPCD_ADDRESS_LINK_BW_SET = 0x00100,
+ DPCD_ADDRESS_LANE_COUNT_SET = 0x00101,
+ DPCD_ADDRESS_TRAINING_PATTERN_SET = 0x00102,
+ DPCD_ADDRESS_LANE0_SET = 0x00103,
+ DPCD_ADDRESS_LANE1_SET = 0x00104,
+ DPCD_ADDRESS_LANE2_SET = 0x00105,
+ DPCD_ADDRESS_LANE3_SET = 0x00106,
+ DPCD_ADDRESS_DOWNSPREAD_CNTL = 0x00107,
+ DPCD_ADDRESS_I2C_SPEED_CNTL = 0x00109,/*1.2*/
+
+ DPCD_ADDRESS_EDP_CONFIG_SET = 0x0010A,
+ DPCD_ADDRESS_LINK_QUAL_LANE0_SET = 0x0010B,
+ DPCD_ADDRESS_LINK_QUAL_LANE1_SET = 0x0010C,
+ DPCD_ADDRESS_LINK_QUAL_LANE2_SET = 0x0010D,
+ DPCD_ADDRESS_LINK_QUAL_LANE3_SET = 0x0010E,
+
+ DPCD_ADDRESS_LANE0_SET2 = 0x0010F,/*1.2*/
+ DPCD_ADDRESS_LANE2_SET2 = 0x00110,/*1.2*/
+
+ DPCD_ADDRESS_MSTM_CNTL = 0x00111,/*1.2*/
+
+ DPCD_ADDRESS_PSR_ENABLE_CFG = 0x0170,
+
+ /* Payload Table Configuration Field 1.2 */
+ DPCD_ADDRESS_PAYLOAD_ALLOCATE_SET = 0x001C0,
+ DPCD_ADDRESS_PAYLOAD_ALLOCATE_START_TIMESLOT = 0x001C1,
+ DPCD_ADDRESS_PAYLOAD_ALLOCATE_TIMESLOT_COUNT = 0x001C2,
+
+ DPCD_ADDRESS_SINK_COUNT = 0x0200,
+ DPCD_ADDRESS_DEVICE_SERVICE_IRQ_VECTOR = 0x0201,
+
+ /* Link / Sink Status Field */
+ DPCD_ADDRESS_LANE_01_STATUS = 0x00202,
+ DPCD_ADDRESS_LANE_23_STATUS = 0x00203,
+ DPCD_ADDRESS_LANE_ALIGN_STATUS_UPDATED = 0x0204,
+ DPCD_ADDRESS_SINK_STATUS = 0x0205,
+
+ /* Adjust Request Field */
+ DPCD_ADDRESS_ADJUST_REQUEST_LANE0_1 = 0x0206,
+ DPCD_ADDRESS_ADJUST_REQUEST_LANE2_3 = 0x0207,
+ DPCD_ADDRESS_ADJUST_REQUEST_POST_CURSOR2 = 0x020C,
+
+ /* Test Request Field */
+ DPCD_ADDRESS_TEST_REQUEST = 0x0218,
+ DPCD_ADDRESS_TEST_LINK_RATE = 0x0219,
+ DPCD_ADDRESS_TEST_LANE_COUNT = 0x0220,
+ DPCD_ADDRESS_TEST_PATTERN = 0x0221,
+ DPCD_ADDRESS_TEST_MISC1 = 0x0232,
+
+ /* Phy Test Pattern Field */
+ DPCD_ADDRESS_TEST_PHY_PATTERN = 0x0248,
+ DPCD_ADDRESS_TEST_80BIT_CUSTOM_PATTERN_7_0 = 0x0250,
+ DPCD_ADDRESS_TEST_80BIT_CUSTOM_PATTERN_15_8 = 0x0251,
+ DPCD_ADDRESS_TEST_80BIT_CUSTOM_PATTERN_23_16 = 0x0252,
+ DPCD_ADDRESS_TEST_80BIT_CUSTOM_PATTERN_31_24 = 0x0253,
+ DPCD_ADDRESS_TEST_80BIT_CUSTOM_PATTERN_39_32 = 0x0254,
+ DPCD_ADDRESS_TEST_80BIT_CUSTOM_PATTERN_47_40 = 0x0255,
+ DPCD_ADDRESS_TEST_80BIT_CUSTOM_PATTERN_55_48 = 0x0256,
+ DPCD_ADDRESS_TEST_80BIT_CUSTOM_PATTERN_63_56 = 0x0257,
+ DPCD_ADDRESS_TEST_80BIT_CUSTOM_PATTERN_71_64 = 0x0258,
+ DPCD_ADDRESS_TEST_80BIT_CUSTOM_PATTERN_79_72 = 0x0259,
+
+ /* Test Response Field*/
+ DPCD_ADDRESS_TEST_RESPONSE = 0x0260,
+
+ /* Audio Test Pattern Field 1.2*/
+ DPCD_ADDRESS_TEST_AUDIO_MODE = 0x0271,
+ DPCD_ADDRESS_TEST_AUDIO_PATTERN_TYPE = 0x0272,
+ DPCD_ADDRESS_TEST_AUDIO_PERIOD_CH_1 = 0x0273,
+ DPCD_ADDRESS_TEST_AUDIO_PERIOD_CH_2 = 0x0274,
+ DPCD_ADDRESS_TEST_AUDIO_PERIOD_CH_3 = 0x0275,
+ DPCD_ADDRESS_TEST_AUDIO_PERIOD_CH_4 = 0x0276,
+ DPCD_ADDRESS_TEST_AUDIO_PERIOD_CH_5 = 0x0277,
+ DPCD_ADDRESS_TEST_AUDIO_PERIOD_CH_6 = 0x0278,
+ DPCD_ADDRESS_TEST_AUDIO_PERIOD_CH_7 = 0x0279,
+ DPCD_ADDRESS_TEST_AUDIO_PERIOD_CH_8 = 0x027A,
+
+ /* Payload Table Status Field */
+ DPCD_ADDRESS_PAYLOAD_TABLE_UPDATE_STATUS = 0x002C0,/*1.2*/
+ DPCD_ADDRESS_VC_PAYLOAD_ID_SLOT1 = 0x002C1,/*1.2*/
+ DPCD_ADDRESS_VC_PAYLOAD_ID_SLOT63 = 0x002FF,/*1.2*/
+
+ /* Source Device Specific Field */
+ DPCD_ADDRESS_SOURCE_DEVICE_ID_START = 0x0300,
+ DPCD_ADDRESS_SOURCE_DEVICE_ID_END = 0x0301,
+ DPCD_ADDRESS_AMD_INTERNAL_DEBUG_START = 0x030C,
+ DPCD_ADDRESS_AMD_INTERNAL_DEBUG_END = 0x030F,
+ DPCD_ADDRESS_SOURCE_SPECIFIC_TABLE_START = 0x0310,
+ DPCD_ADDRESS_SOURCE_SPECIFIC_TABLE_END = 0x037F,
+ DPCD_ADDRESS_SOURCE_RESERVED_START = 0x0380,
+ DPCD_ADDRESS_SOURCE_RESERVED_END = 0x03FF,
+
+ /* Sink Device Specific Field */
+ DPCD_ADDRESS_SINK_DEVICE_ID_START = 0x0400,
+ DPCD_ADDRESS_SINK_DEVICE_ID_END = 0x0402,
+ DPCD_ADDRESS_SINK_DEVICE_STR_START = 0x0403,
+ DPCD_ADDRESS_SINK_DEVICE_STR_END = 0x0408,
+ DPCD_ADDRESS_SINK_REVISION_START = 0x409,
+ DPCD_ADDRESS_SINK_REVISION_END = 0x40B,
+
+ /* Branch Device Specific Field */
+ DPCD_ADDRESS_BRANCH_DEVICE_ID_START = 0x0500,
+ DPCD_ADDRESS_BRANCH_DEVICE_ID_END = 0x0502,
+ DPCD_ADDRESS_BRANCH_DEVICE_STR_START = 0x0503,
+ DPCD_ADDRESS_BRANCH_DEVICE_STR_END = 0x0508,
+ DPCD_ADDRESS_BRANCH_REVISION_START = 0x0509,
+ DPCD_ADDRESS_BRANCH_REVISION_END = 0x050B,
+
+ DPCD_ADDRESS_POWER_STATE = 0x0600,
+
+ /* EDP related */
+ DPCD_ADDRESS_EDP_REV = 0x0700,
+ DPCD_ADDRESS_EDP_CAPABILITY = 0x0701,
+ DPCD_ADDRESS_EDP_BACKLIGHT_ADJUST_CAP = 0x0702,
+ DPCD_ADDRESS_EDP_GENERAL_CAP2 = 0x0703,
+
+ DPCD_ADDRESS_EDP_DISPLAY_CONTROL = 0x0720,
+ DPCD_ADDRESS_SUPPORTED_LINK_RATES = 0x00010, /* edp 1.4 */
+ DPCD_ADDRESS_EDP_BACKLIGHT_SET = 0x0721,
+ DPCD_ADDRESS_EDP_BACKLIGHT_BRIGHTNESS_MSB = 0x0722,
+ DPCD_ADDRESS_EDP_BACKLIGHT_BRIGHTNESS_LSB = 0x0723,
+ DPCD_ADDRESS_EDP_PWMGEN_BIT_COUNT = 0x0724,
+ DPCD_ADDRESS_EDP_PWMGEN_BIT_COUNT_CAP_MIN = 0x0725,
+ DPCD_ADDRESS_EDP_PWMGEN_BIT_COUNT_CAP_MAX = 0x0726,
+ DPCD_ADDRESS_EDP_BACKLIGHT_CONTROL_STATUS = 0x0727,
+ DPCD_ADDRESS_EDP_BACKLIGHT_FREQ_SET = 0x0728,
+ DPCD_ADDRESS_EDP_REVERVED = 0x0729,
+ DPCD_ADDRESS_EDP_BACKLIGNT_FREQ_CAP_MIN_MSB = 0x072A,
+ DPCD_ADDRESS_EDP_BACKLIGNT_FREQ_CAP_MIN_MID = 0x072B,
+ DPCD_ADDRESS_EDP_BACKLIGNT_FREQ_CAP_MIN_LSB = 0x072C,
+ DPCD_ADDRESS_EDP_BACKLIGNT_FREQ_CAP_MAX_MSB = 0x072D,
+ DPCD_ADDRESS_EDP_BACKLIGNT_FREQ_CAP_MAX_MID = 0x072E,
+ DPCD_ADDRESS_EDP_BACKLIGNT_FREQ_CAP_MAX_LSB = 0x072F,
+
+ DPCD_ADDRESS_EDP_DBC_MINIMUM_BRIGHTNESS_SET = 0x0732,
+ DPCD_ADDRESS_EDP_DBC_MAXIMUM_BRIGHTNESS_SET = 0x0733,
+
+ /* Sideband MSG Buffers 1.2 */
+ DPCD_ADDRESS_DOWN_REQ_START = 0x01000,
+ DPCD_ADDRESS_DOWN_REQ_END = 0x011ff,
+
+ DPCD_ADDRESS_UP_REP_START = 0x01200,
+ DPCD_ADDRESS_UP_REP_END = 0x013ff,
+
+ DPCD_ADDRESS_DOWN_REP_START = 0x01400,
+ DPCD_ADDRESS_DOWN_REP_END = 0x015ff,
+
+ DPCD_ADDRESS_UP_REQ_START = 0x01600,
+ DPCD_ADDRESS_UP_REQ_END = 0x017ff,
+
+ /* ESI (Event Status Indicator) Field 1.2 */
+ DPCD_ADDRESS_SINK_COUNT_ESI = 0x02002,
+ DPCD_ADDRESS_DEVICE_IRQ_ESI0 = 0x02003,
+ DPCD_ADDRESS_DEVICE_IRQ_ESI1 = 0x02004,
+ /*@todo move dpcd_address_Lane01Status back here*/
+
+ DPCD_ADDRESS_PSR_ERROR_STATUS = 0x2006,
+ DPCD_ADDRESS_PSR_EVENT_STATUS = 0x2007,
+ DPCD_ADDRESS_PSR_SINK_STATUS = 0x2008,
+ DPCD_ADDRESS_PSR_DBG_REGISTER0 = 0x2009,
+ DPCD_ADDRESS_PSR_DBG_REGISTER1 = 0x200A,
+
+ DPCD_ADDRESS_DP13_DPCD_REV = 0x2200,
+ DPCD_ADDRESS_DP13_MAX_LINK_RATE = 0x2201,
+
+ /* Travis specific addresses */
+ DPCD_ADDRESS_TRAVIS_SINK_DEV_SEL = 0x5f0,
+ DPCD_ADDRESS_TRAVIS_SINK_ACCESS_OFFSET = 0x5f1,
+ DPCD_ADDRESS_TRAVIS_SINK_ACCESS_REG = 0x5f2,
+};
+
+enum dpcd_revision {
+ DPCD_REV_10 = 0x10,
+ DPCD_REV_11 = 0x11,
+ DPCD_REV_12 = 0x12,
+ DPCD_REV_13 = 0x13,
+ DPCD_REV_14 = 0x14
+};
+
+enum dp_pwr_state {
+ DP_PWR_STATE_D0 = 1,/* direct HW translation! */
+ DP_PWR_STATE_D3
+};
+
+/* these are the types stored at DOWNSTREAMPORT_PRESENT */
+enum dpcd_downstream_port_type {
+ DOWNSTREAM_DP = 0,
+ DOWNSTREAM_VGA,
+ DOWNSTREAM_DVI_HDMI,
+ DOWNSTREAM_NONDDC /* has no EDID (TV,CV) */
+};
+
+enum dpcd_link_test_patterns {
+ LINK_TEST_PATTERN_NONE = 0,
+ LINK_TEST_PATTERN_COLOR_RAMP,
+ LINK_TEST_PATTERN_VERTICAL_BARS,
+ LINK_TEST_PATTERN_COLOR_SQUARES
+};
+
+enum dpcd_test_color_format {
+ TEST_COLOR_FORMAT_RGB = 0,
+ TEST_COLOR_FORMAT_YCBCR422,
+ TEST_COLOR_FORMAT_YCBCR444
+};
+
+enum dpcd_test_bit_depth {
+ TEST_BIT_DEPTH_6 = 0,
+ TEST_BIT_DEPTH_8,
+ TEST_BIT_DEPTH_10,
+ TEST_BIT_DEPTH_12,
+ TEST_BIT_DEPTH_16
+};
+
+/* PHY (encoder) test patterns
+The order of test patterns follows DPCD register PHY_TEST_PATTERN (0x248)
+*/
+enum dpcd_phy_test_patterns {
+ PHY_TEST_PATTERN_NONE = 0,
+ PHY_TEST_PATTERN_D10_2,
+ PHY_TEST_PATTERN_SYMBOL_ERROR,
+ PHY_TEST_PATTERN_PRBS7,
+ PHY_TEST_PATTERN_80BIT_CUSTOM,/* For DP1.2 only */
+ PHY_TEST_PATTERN_HBR2_COMPLIANCE_EYE/* For DP1.2 only */
+};
+
+enum dpcd_test_dyn_range {
+ TEST_DYN_RANGE_VESA = 0,
+ TEST_DYN_RANGE_CEA
+};
+
+enum dpcd_audio_test_pattern {
+ AUDIO_TEST_PATTERN_OPERATOR_DEFINED = 0,/* direct HW translation */
+ AUDIO_TEST_PATTERN_SAWTOOTH
+};
+
+enum dpcd_audio_sampling_rate {
+ AUDIO_SAMPLING_RATE_32KHZ = 0,/* direct HW translation */
+ AUDIO_SAMPLING_RATE_44_1KHZ,
+ AUDIO_SAMPLING_RATE_48KHZ,
+ AUDIO_SAMPLING_RATE_88_2KHZ,
+ AUDIO_SAMPLING_RATE_96KHZ,
+ AUDIO_SAMPLING_RATE_176_4KHZ,
+ AUDIO_SAMPLING_RATE_192KHZ
+};
+
+enum dpcd_audio_channels {
+ AUDIO_CHANNELS_1 = 0,/* direct HW translation */
+ AUDIO_CHANNELS_2,
+ AUDIO_CHANNELS_3,
+ AUDIO_CHANNELS_4,
+ AUDIO_CHANNELS_5,
+ AUDIO_CHANNELS_6,
+ AUDIO_CHANNELS_7,
+ AUDIO_CHANNELS_8,
+
+ AUDIO_CHANNELS_COUNT
+};
+
+enum dpcd_audio_test_pattern_periods {
+ DPCD_AUDIO_TEST_PATTERN_PERIOD_NOTUSED = 0,/* direct HW translation */
+ DPCD_AUDIO_TEST_PATTERN_PERIOD_3,
+ DPCD_AUDIO_TEST_PATTERN_PERIOD_6,
+ DPCD_AUDIO_TEST_PATTERN_PERIOD_12,
+ DPCD_AUDIO_TEST_PATTERN_PERIOD_24,
+ DPCD_AUDIO_TEST_PATTERN_PERIOD_48,
+ DPCD_AUDIO_TEST_PATTERN_PERIOD_96,
+ DPCD_AUDIO_TEST_PATTERN_PERIOD_192,
+ DPCD_AUDIO_TEST_PATTERN_PERIOD_384,
+ DPCD_AUDIO_TEST_PATTERN_PERIOD_768,
+ DPCD_AUDIO_TEST_PATTERN_PERIOD_1536
+};
+
+/* This enum is for programming DPCD TRAINING_PATTERN_SET */
+enum dpcd_training_patterns {
+ DPCD_TRAINING_PATTERN_VIDEOIDLE = 0,/* direct HW translation! */
+ DPCD_TRAINING_PATTERN_1,
+ DPCD_TRAINING_PATTERN_2,
+ DPCD_TRAINING_PATTERN_3,
+ DPCD_TRAINING_PATTERN_4 = 7
+};
+
+/* This enum is for use with PsrSinkPsrStatus.bits.sinkSelfRefreshStatus
+It defines the possible PSR states. */
+enum dpcd_psr_sink_states {
+ PSR_SINK_STATE_INACTIVE = 0,
+ PSR_SINK_STATE_ACTIVE_CAPTURE_DISPLAY_ON_SOURCE_TIMING = 1,
+ PSR_SINK_STATE_ACTIVE_DISPLAY_FROM_SINK_RFB = 2,
+ PSR_SINK_STATE_ACTIVE_CAPTURE_DISPLAY_ON_SINK_TIMING = 3,
+ PSR_SINK_STATE_ACTIVE_CAPTURE_TIMING_RESYNC = 4,
+ PSR_SINK_STATE_SINK_INTERNAL_ERROR = 7,
+};
+
+/* This enum defines the Panel's eDP revision at DPCD 700h
+ * 00h = eDP v1.1 or lower
+ * 01h = eDP v1.2
+ * 02h = eDP v1.3 (PSR support starts here)
+ * 03h = eDP v1.4
+ * If unknown revision, treat as eDP v1.1, meaning least functionality set.
+ * This enum has values matched to eDP spec, thus values should not change.
+ */
+enum dpcd_edp_revision {
+ DPCD_EDP_REVISION_EDP_V1_1 = 0,
+ DPCD_EDP_REVISION_EDP_V1_2 = 1,
+ DPCD_EDP_REVISION_EDP_V1_3 = 2,
+ DPCD_EDP_REVISION_EDP_V1_4 = 3,
+ DPCD_EDP_REVISION_EDP_UNKNOWN = DPCD_EDP_REVISION_EDP_V1_1,
+};
+
+union dpcd_rev {
+ struct {
+ uint8_t MINOR:4;
+ uint8_t MAJOR:4;
+ } bits;
+ uint8_t raw;
+};
+
+union max_lane_count {
+ struct {
+ uint8_t MAX_LANE_COUNT:5;
+ uint8_t POST_LT_ADJ_REQ_SUPPORTED:1;
+ uint8_t TPS3_SUPPORTED:1;
+ uint8_t ENHANCED_FRAME_CAP:1;
+ } bits;
+ uint8_t raw;
+};
+
+union max_down_spread {
+ struct {
+ uint8_t MAX_DOWN_SPREAD:1;
+ uint8_t RESERVED:5;
+ uint8_t NO_AUX_HANDSHAKE_LINK_TRAINING:1;
+ uint8_t TPS4_SUPPORTED:1;
+ } bits;
+ uint8_t raw;
+};
+
+union mstm_cap {
+ struct {
+ uint8_t MST_CAP:1;
+ uint8_t RESERVED:7;
+ } bits;
+ uint8_t raw;
+};
+
+union lane_count_set {
+ struct {
+ uint8_t LANE_COUNT_SET:5;
+ uint8_t POST_LT_ADJ_REQ_GRANTED:1;
+ uint8_t RESERVED:1;
+ uint8_t ENHANCED_FRAMING:1;
+ } bits;
+ uint8_t raw;
+};
+
+union lane_status {
+ struct {
+ uint8_t CR_DONE_0:1;
+ uint8_t CHANNEL_EQ_DONE_0:1;
+ uint8_t SYMBOL_LOCKED_0:1;
+ uint8_t RESERVED0:1;
+ uint8_t CR_DONE_1:1;
+ uint8_t CHANNEL_EQ_DONE_1:1;
+ uint8_t SYMBOL_LOCKED_1:1;
+ uint8_t RESERVED_1:1;
+ } bits;
+ uint8_t raw;
+};
+
+union device_service_irq {
+ struct {
+ uint8_t REMOTE_CONTROL_CMD_PENDING:1;
+ uint8_t AUTOMATED_TEST:1;
+ uint8_t CP_IRQ:1;
+ uint8_t MCCS_IRQ:1;
+ uint8_t DOWN_REP_MSG_RDY:1;
+ uint8_t UP_REQ_MSG_RDY:1;
+ uint8_t SINK_SPECIFIC:1;
+ uint8_t reserved:1;
+ } bits;
+ uint8_t raw;
+};
+
+union sink_count {
+ struct {
+ uint8_t SINK_COUNT:6;
+ uint8_t CPREADY:1;
+ uint8_t RESERVED:1;
+ } bits;
+ uint8_t raw;
+};
+
+union lane_align_status_updated {
+ struct {
+ uint8_t INTERLANE_ALIGN_DONE:1;
+ uint8_t POST_LT_ADJ_REQ_IN_PROGRESS:1;
+ uint8_t RESERVED:4;
+ uint8_t DOWNSTREAM_PORT_STATUS_CHANGED:1;
+ uint8_t LINK_STATUS_UPDATED:1;
+ } bits;
+ uint8_t raw;
+};
+
+union lane_adjust {
+ struct {
+ uint8_t VOLTAGE_SWING_LANE:2;
+ uint8_t PRE_EMPHASIS_LANE:2;
+ uint8_t RESERVED:4;
+ } bits;
+ uint8_t raw;
+};
+
+union dpcd_training_pattern {
+ struct {
+ uint8_t TRAINING_PATTERN_SET:4;
+ uint8_t RECOVERED_CLOCK_OUT_EN:1;
+ uint8_t SCRAMBLING_DISABLE:1;
+ uint8_t SYMBOL_ERROR_COUNT_SEL:2;
+ } v1_4;
+ struct {
+ uint8_t TRAINING_PATTERN_SET:2;
+ uint8_t LINK_QUAL_PATTERN_SET:2;
+ uint8_t RESERVED:4;
+ } v1_3;
+ uint8_t raw;
+};
+
+/* Training Lane is used to configure downstream DP device's voltage swing
+and pre-emphasis levels*/
+/* The DPCD addresses are from 0x103 to 0x106*/
+union dpcd_training_lane {
+ struct {
+ uint8_t VOLTAGE_SWING_SET:2;
+ uint8_t MAX_SWING_REACHED:1;
+ uint8_t PRE_EMPHASIS_SET:2;
+ uint8_t MAX_PRE_EMPHASIS_REACHED:1;
+ uint8_t RESERVED:2;
+ } bits;
+ uint8_t raw;
+};
+
+/* TMDS-converter related */
+union dwnstream_port_caps_byte0 {
+ struct {
+ uint8_t DWN_STRM_PORTX_TYPE:3;
+ uint8_t DWN_STRM_PORTX_HPD:1;
+ uint8_t RESERVERD:4;
+ } bits;
+ uint8_t raw;
+};
+
+/* these are the detailed types stored at DWN_STRM_PORTX_CAP (00080h)*/
+enum dpcd_downstream_port_detailed_type {
+ DOWN_STREAM_DETAILED_DP = 0,
+ DOWN_STREAM_DETAILED_VGA,
+ DOWN_STREAM_DETAILED_DVI,
+ DOWN_STREAM_DETAILED_HDMI,
+ DOWN_STREAM_DETAILED_NONDDC,/* has no EDID (TV,CV)*/
+ DOWN_STREAM_DETAILED_DP_PLUS_PLUS
+};
+
+union dwnstream_port_caps_byte2 {
+ struct {
+ uint8_t MAX_BITS_PER_COLOR_COMPONENT:2;
+ uint8_t RESERVED:6;
+ } bits;
+ uint8_t raw;
+};
+
+union dp_downstream_port_present {
+ uint8_t byte;
+ struct {
+ uint8_t PORT_PRESENT:1;
+ uint8_t PORT_TYPE:2;
+ uint8_t FMT_CONVERSION:1;
+ uint8_t DETAILED_CAPS:1;
+ uint8_t RESERVED:3;
+ } fields;
+};
+
+union dwnstream_port_caps_byte3_dvi {
+ struct {
+ uint8_t RESERVED1:1;
+ uint8_t DUAL_LINK:1;
+ uint8_t HIGH_COLOR_DEPTH:1;
+ uint8_t RESERVED2:5;
+ } bits;
+ uint8_t raw;
+};
+
+union dwnstream_port_caps_byte3_hdmi {
+ struct {
+ uint8_t FRAME_SEQ_TO_FRAME_PACK:1;
+ uint8_t RESERVED:7;
+ } bits;
+ uint8_t raw;
+};
+
+/*4-byte structure for detailed capabilities of a down-stream port
+(DP-to-TMDS converter).*/
+
+union sink_status {
+ struct {
+ uint8_t RX_PORT0_STATUS:1;
+ uint8_t RX_PORT1_STATUS:1;
+ uint8_t RESERVED:6;
+ } bits;
+ uint8_t raw;
+};
+
+/*6-byte structure corresponding to 6 registers (200h-205h)
+read during handling of HPD-IRQ*/
+union hpd_irq_data {
+ struct {
+ union sink_count sink_cnt;/* 200h */
+ union device_service_irq device_service_irq;/* 201h */
+ union lane_status lane01_status;/* 202h */
+ union lane_status lane23_status;/* 203h */
+ union lane_align_status_updated lane_status_updated;/* 204h */
+ union sink_status sink_status;
+ } bytes;
+ uint8_t raw[6];
+};
+
+union down_stream_port_count {
+ struct {
+ uint8_t DOWN_STR_PORT_COUNT:4;
+ uint8_t RESERVED:2; /*Bits 5:4 = RESERVED. Read all 0s.*/
+ /*Bit 6 = MSA_TIMING_PAR_IGNORED
+ 0 = Sink device requires the MSA timing parameters
+ 1 = Sink device is capable of rendering incoming video
+ stream without MSA timing parameters*/
+ uint8_t IGNORE_MSA_TIMING_PARAM:1;
+ /*Bit 7 = OUI Support
+ 0 = OUI not supported
+ 1 = OUI supported
+ (OUI and Device Identification mandatory for DP 1.2)*/
+ uint8_t OUI_SUPPORT:1;
+ } bits;
+ uint8_t raw;
+};
+
+union down_spread_ctrl {
+ struct {
+ uint8_t RESERVED1:4;/* Bit 3:0 = RESERVED. Read all 0s*/
+ /* Bits 4 = SPREAD_AMP. Spreading amplitude
+ 0 = Main link signal is not downspread
+ 1 = Main link signal is downspread <= 0.5%
+ with frequency in the range of 30kHz ~ 33kHz*/
+ uint8_t SPREAD_AMP:1;
+ uint8_t RESERVED2:2;/*Bit 6:5 = RESERVED. Read all 0s*/
+ /*Bit 7 = MSA_TIMING_PAR_IGNORE_EN
+ 0 = Source device will send valid data for the MSA Timing Params
+ 1 = Source device may send invalid data for these MSA Timing Params*/
+ uint8_t IGNORE_MSA_TIMING_PARAM:1;
+ } bits;
+ uint8_t raw;
+};
+
+union dpcd_edp_config {
+ struct {
+ uint8_t PANEL_MODE_EDP:1;
+ uint8_t FRAMING_CHANGE_ENABLE:1;
+ uint8_t RESERVED:5;
+ uint8_t PANEL_SELF_TEST_ENABLE:1;
+ } bits;
+ uint8_t raw;
+};
+
+struct dp_device_vendor_id {
+ uint8_t ieee_oui[3];/*24-bit IEEE OUI*/
+ uint8_t ieee_device_id[6];/*usually 6-byte ASCII name*/
+};
+
+struct dp_sink_hw_fw_revision {
+ uint8_t ieee_hw_rev;
+ uint8_t ieee_fw_rev[2];
+};
+
+/*DPCD register of DP receiver capability field bits-*/
+union edp_configuration_cap {
+ struct {
+ uint8_t ALT_SCRAMBLER_RESET:1;
+ uint8_t FRAMING_CHANGE:1;
+ uint8_t RESERVED:1;
+ uint8_t DPCD_DISPLAY_CONTROL_CAPABLE:1;
+ uint8_t RESERVED2:4;
+ } bits;
+ uint8_t raw;
+};
+
+union training_aux_rd_interval {
+ struct {
+ uint8_t TRAINIG_AUX_RD_INTERVAL:7;
+ uint8_t EXT_RECIEVER_CAP_FIELD_PRESENT:1;
+ } bits;
+ uint8_t raw;
+};
+
+/* Automated test structures */
+union test_request {
+ struct {
+ uint8_t LINK_TRAINING :1;
+ uint8_t LINK_TEST_PATTRN :1;
+ uint8_t EDID_REAT :1;
+ uint8_t PHY_TEST_PATTERN :1;
+ uint8_t AUDIO_TEST_PATTERN :1;
+ uint8_t RESERVED :1;
+ uint8_t TEST_STEREO_3D :1;
+ } bits;
+ uint8_t raw;
+};
+
+union test_response {
+ struct {
+ uint8_t ACK :1;
+ uint8_t NO_ACK :1;
+ uint8_t RESERVED :6;
+ } bits;
+ uint8_t raw;
+};
+
+union phy_test_pattern {
+ struct {
+ /* DpcdPhyTestPatterns. This field is 2 bits for DP1.1
+ * and 3 bits for DP1.2.
+ */
+ uint8_t PATTERN :3;
+ /* BY speci, bit7:2 is 0 for DP1.1. */
+ uint8_t RESERVED :5;
+ } bits;
+ uint8_t raw;
+};
+
+/* States of Compliance Test Specification (CTS DP1.2). */
+union compliance_test_state {
+ struct {
+ unsigned char STEREO_3D_RUNNING : 1;
+ unsigned char SET_TEST_PATTERN_PENDING : 1;
+ unsigned char RESERVED : 6;
+ } bits;
+ unsigned char raw;
+};
+
+union link_test_pattern {
+ struct {
+ /* dpcd_link_test_patterns */
+ unsigned char PATTERN :2;
+ unsigned char RESERVED:6;
+ } bits;
+ unsigned char raw;
+};
+
+union test_misc {
+ struct dpcd_test_misc_bits {
+ unsigned char SYNC_CLOCK :1;
+ /* dpcd_test_color_format */
+ unsigned char CLR_FORMAT :2;
+ /* dpcd_test_dyn_range */
+ unsigned char DYN_RANGE :1;
+ unsigned char YCBCR :1;
+ /* dpcd_test_bit_depth */
+ unsigned char BPC :3;
+ } bits;
+ unsigned char raw;
+};
+
+#endif /* __DAL_DPCD_DEFS_H__ */