dpcd_defs.h 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742
  1. /*
  2. * Copyright 2012-15 Advanced Micro Devices, Inc.
  3. *
  4. * Permission is hereby granted, free of charge, to any person obtaining a
  5. * copy of this software and associated documentation files (the "Software"),
  6. * to deal in the Software without restriction, including without limitation
  7. * the rights to use, copy, modify, merge, publish, distribute, sublicense,
  8. * and/or sell copies of the Software, and to permit persons to whom the
  9. * Software is furnished to do so, subject to the following conditions:
  10. *
  11. * The above copyright notice and this permission notice shall be included in
  12. * all copies or substantial portions of the Software.
  13. *
  14. * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  15. * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  16. * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
  17. * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
  18. * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
  19. * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
  20. * OTHER DEALINGS IN THE SOFTWARE.
  21. *
  22. * Authors: AMD
  23. *
  24. */
  25. #ifndef __DAL_DPCD_DEFS_H__
  26. #define __DAL_DPCD_DEFS_H__
  27. enum dpcd_address {
  28. /* addresses marked with 1.2 are only defined since DP 1.2 spec */
  29. /* Reciever Capability Field */
  30. DPCD_ADDRESS_DPCD_REV = 0x00000,
  31. DPCD_ADDRESS_MAX_LINK_RATE = 0x00001,
  32. DPCD_ADDRESS_MAX_LANE_COUNT = 0x00002,
  33. DPCD_ADDRESS_MAX_DOWNSPREAD = 0x00003,
  34. DPCD_ADDRESS_NORP = 0x00004,
  35. DPCD_ADDRESS_DOWNSTREAM_PORT_PRESENT = 0x00005,
  36. DPCD_ADDRESS_MAIN_LINK_CHANNEL_CODING = 0x00006,
  37. DPCD_ADDRESS_DOWNSTREAM_PORT_COUNT = 0x00007,
  38. DPCD_ADDRESS_RECEIVE_PORT0_CAP0 = 0x00008,
  39. DPCD_ADDRESS_RECEIVE_PORT0_CAP1 = 0x00009,
  40. DPCD_ADDRESS_RECEIVE_PORT1_CAP0 = 0x0000A,
  41. DPCD_ADDRESS_RECEIVE_PORT1_CAP1 = 0x0000B,
  42. DPCD_ADDRESS_I2C_SPEED_CNTL_CAP = 0x0000C,/*1.2*/
  43. DPCD_ADDRESS_EDP_CONFIG_CAP = 0x0000D,/*1.2*/
  44. DPCD_ADDRESS_TRAINING_AUX_RD_INTERVAL = 0x000E,/*1.2*/
  45. DPCD_ADDRESS_MSTM_CAP = 0x00021,/*1.2*/
  46. /* Audio Video Sync Data Feild */
  47. DPCD_ADDRESS_AV_GRANULARITY = 0x0023,
  48. DPCD_ADDRESS_AUDIO_DECODE_LATENCY1 = 0x0024,
  49. DPCD_ADDRESS_AUDIO_DECODE_LATENCY2 = 0x0025,
  50. DPCD_ADDRESS_AUDIO_POSTPROCESSING_LATENCY1 = 0x0026,
  51. DPCD_ADDRESS_AUDIO_POSTPROCESSING_LATENCY2 = 0x0027,
  52. DPCD_ADDRESS_VIDEO_INTERLACED_LATENCY = 0x0028,
  53. DPCD_ADDRESS_VIDEO_PROGRESSIVE_LATENCY = 0x0029,
  54. DPCD_ADDRESS_AUDIO_DELAY_INSERT1 = 0x0002B,
  55. DPCD_ADDRESS_AUDIO_DELAY_INSERT2 = 0x0002C,
  56. DPCD_ADDRESS_AUDIO_DELAY_INSERT3 = 0x0002D,
  57. /* Audio capability */
  58. DPCD_ADDRESS_NUM_OF_AUDIO_ENDPOINTS = 0x00022,
  59. DPCD_ADDRESS_GUID_START = 0x00030,/*1.2*/
  60. DPCD_ADDRESS_GUID_END = 0x0003f,/*1.2*/
  61. DPCD_ADDRESS_PSR_SUPPORT_VER = 0x00070,
  62. DPCD_ADDRESS_PSR_CAPABILITY = 0x00071,
  63. DPCD_ADDRESS_DWN_STRM_PORT0_CAPS = 0x00080,/*1.2a*/
  64. /* Link Configuration Field */
  65. DPCD_ADDRESS_LINK_BW_SET = 0x00100,
  66. DPCD_ADDRESS_LANE_COUNT_SET = 0x00101,
  67. DPCD_ADDRESS_TRAINING_PATTERN_SET = 0x00102,
  68. DPCD_ADDRESS_LANE0_SET = 0x00103,
  69. DPCD_ADDRESS_LANE1_SET = 0x00104,
  70. DPCD_ADDRESS_LANE2_SET = 0x00105,
  71. DPCD_ADDRESS_LANE3_SET = 0x00106,
  72. DPCD_ADDRESS_DOWNSPREAD_CNTL = 0x00107,
  73. DPCD_ADDRESS_I2C_SPEED_CNTL = 0x00109,/*1.2*/
  74. DPCD_ADDRESS_EDP_CONFIG_SET = 0x0010A,
  75. DPCD_ADDRESS_LINK_QUAL_LANE0_SET = 0x0010B,
  76. DPCD_ADDRESS_LINK_QUAL_LANE1_SET = 0x0010C,
  77. DPCD_ADDRESS_LINK_QUAL_LANE2_SET = 0x0010D,
  78. DPCD_ADDRESS_LINK_QUAL_LANE3_SET = 0x0010E,
  79. DPCD_ADDRESS_LANE0_SET2 = 0x0010F,/*1.2*/
  80. DPCD_ADDRESS_LANE2_SET2 = 0x00110,/*1.2*/
  81. DPCD_ADDRESS_MSTM_CNTL = 0x00111,/*1.2*/
  82. DPCD_ADDRESS_PSR_ENABLE_CFG = 0x0170,
  83. /* Payload Table Configuration Field 1.2 */
  84. DPCD_ADDRESS_PAYLOAD_ALLOCATE_SET = 0x001C0,
  85. DPCD_ADDRESS_PAYLOAD_ALLOCATE_START_TIMESLOT = 0x001C1,
  86. DPCD_ADDRESS_PAYLOAD_ALLOCATE_TIMESLOT_COUNT = 0x001C2,
  87. DPCD_ADDRESS_SINK_COUNT = 0x0200,
  88. DPCD_ADDRESS_DEVICE_SERVICE_IRQ_VECTOR = 0x0201,
  89. /* Link / Sink Status Field */
  90. DPCD_ADDRESS_LANE_01_STATUS = 0x00202,
  91. DPCD_ADDRESS_LANE_23_STATUS = 0x00203,
  92. DPCD_ADDRESS_LANE_ALIGN_STATUS_UPDATED = 0x0204,
  93. DPCD_ADDRESS_SINK_STATUS = 0x0205,
  94. /* Adjust Request Field */
  95. DPCD_ADDRESS_ADJUST_REQUEST_LANE0_1 = 0x0206,
  96. DPCD_ADDRESS_ADJUST_REQUEST_LANE2_3 = 0x0207,
  97. DPCD_ADDRESS_ADJUST_REQUEST_POST_CURSOR2 = 0x020C,
  98. /* Test Request Field */
  99. DPCD_ADDRESS_TEST_REQUEST = 0x0218,
  100. DPCD_ADDRESS_TEST_LINK_RATE = 0x0219,
  101. DPCD_ADDRESS_TEST_LANE_COUNT = 0x0220,
  102. DPCD_ADDRESS_TEST_PATTERN = 0x0221,
  103. DPCD_ADDRESS_TEST_MISC1 = 0x0232,
  104. /* Phy Test Pattern Field */
  105. DPCD_ADDRESS_TEST_PHY_PATTERN = 0x0248,
  106. DPCD_ADDRESS_TEST_80BIT_CUSTOM_PATTERN_7_0 = 0x0250,
  107. DPCD_ADDRESS_TEST_80BIT_CUSTOM_PATTERN_15_8 = 0x0251,
  108. DPCD_ADDRESS_TEST_80BIT_CUSTOM_PATTERN_23_16 = 0x0252,
  109. DPCD_ADDRESS_TEST_80BIT_CUSTOM_PATTERN_31_24 = 0x0253,
  110. DPCD_ADDRESS_TEST_80BIT_CUSTOM_PATTERN_39_32 = 0x0254,
  111. DPCD_ADDRESS_TEST_80BIT_CUSTOM_PATTERN_47_40 = 0x0255,
  112. DPCD_ADDRESS_TEST_80BIT_CUSTOM_PATTERN_55_48 = 0x0256,
  113. DPCD_ADDRESS_TEST_80BIT_CUSTOM_PATTERN_63_56 = 0x0257,
  114. DPCD_ADDRESS_TEST_80BIT_CUSTOM_PATTERN_71_64 = 0x0258,
  115. DPCD_ADDRESS_TEST_80BIT_CUSTOM_PATTERN_79_72 = 0x0259,
  116. /* Test Response Field*/
  117. DPCD_ADDRESS_TEST_RESPONSE = 0x0260,
  118. /* Audio Test Pattern Field 1.2*/
  119. DPCD_ADDRESS_TEST_AUDIO_MODE = 0x0271,
  120. DPCD_ADDRESS_TEST_AUDIO_PATTERN_TYPE = 0x0272,
  121. DPCD_ADDRESS_TEST_AUDIO_PERIOD_CH_1 = 0x0273,
  122. DPCD_ADDRESS_TEST_AUDIO_PERIOD_CH_2 = 0x0274,
  123. DPCD_ADDRESS_TEST_AUDIO_PERIOD_CH_3 = 0x0275,
  124. DPCD_ADDRESS_TEST_AUDIO_PERIOD_CH_4 = 0x0276,
  125. DPCD_ADDRESS_TEST_AUDIO_PERIOD_CH_5 = 0x0277,
  126. DPCD_ADDRESS_TEST_AUDIO_PERIOD_CH_6 = 0x0278,
  127. DPCD_ADDRESS_TEST_AUDIO_PERIOD_CH_7 = 0x0279,
  128. DPCD_ADDRESS_TEST_AUDIO_PERIOD_CH_8 = 0x027A,
  129. /* Payload Table Status Field */
  130. DPCD_ADDRESS_PAYLOAD_TABLE_UPDATE_STATUS = 0x002C0,/*1.2*/
  131. DPCD_ADDRESS_VC_PAYLOAD_ID_SLOT1 = 0x002C1,/*1.2*/
  132. DPCD_ADDRESS_VC_PAYLOAD_ID_SLOT63 = 0x002FF,/*1.2*/
  133. /* Source Device Specific Field */
  134. DPCD_ADDRESS_SOURCE_DEVICE_ID_START = 0x0300,
  135. DPCD_ADDRESS_SOURCE_DEVICE_ID_END = 0x0301,
  136. DPCD_ADDRESS_AMD_INTERNAL_DEBUG_START = 0x030C,
  137. DPCD_ADDRESS_AMD_INTERNAL_DEBUG_END = 0x030F,
  138. DPCD_ADDRESS_SOURCE_SPECIFIC_TABLE_START = 0x0310,
  139. DPCD_ADDRESS_SOURCE_SPECIFIC_TABLE_END = 0x037F,
  140. DPCD_ADDRESS_SOURCE_RESERVED_START = 0x0380,
  141. DPCD_ADDRESS_SOURCE_RESERVED_END = 0x03FF,
  142. /* Sink Device Specific Field */
  143. DPCD_ADDRESS_SINK_DEVICE_ID_START = 0x0400,
  144. DPCD_ADDRESS_SINK_DEVICE_ID_END = 0x0402,
  145. DPCD_ADDRESS_SINK_DEVICE_STR_START = 0x0403,
  146. DPCD_ADDRESS_SINK_DEVICE_STR_END = 0x0408,
  147. DPCD_ADDRESS_SINK_REVISION_START = 0x409,
  148. DPCD_ADDRESS_SINK_REVISION_END = 0x40B,
  149. /* Branch Device Specific Field */
  150. DPCD_ADDRESS_BRANCH_DEVICE_ID_START = 0x0500,
  151. DPCD_ADDRESS_BRANCH_DEVICE_ID_END = 0x0502,
  152. DPCD_ADDRESS_BRANCH_DEVICE_STR_START = 0x0503,
  153. DPCD_ADDRESS_BRANCH_DEVICE_STR_END = 0x0508,
  154. DPCD_ADDRESS_BRANCH_REVISION_START = 0x0509,
  155. DPCD_ADDRESS_BRANCH_REVISION_END = 0x050B,
  156. DPCD_ADDRESS_POWER_STATE = 0x0600,
  157. /* EDP related */
  158. DPCD_ADDRESS_EDP_REV = 0x0700,
  159. DPCD_ADDRESS_EDP_CAPABILITY = 0x0701,
  160. DPCD_ADDRESS_EDP_BACKLIGHT_ADJUST_CAP = 0x0702,
  161. DPCD_ADDRESS_EDP_GENERAL_CAP2 = 0x0703,
  162. DPCD_ADDRESS_EDP_DISPLAY_CONTROL = 0x0720,
  163. DPCD_ADDRESS_SUPPORTED_LINK_RATES = 0x00010, /* edp 1.4 */
  164. DPCD_ADDRESS_EDP_BACKLIGHT_SET = 0x0721,
  165. DPCD_ADDRESS_EDP_BACKLIGHT_BRIGHTNESS_MSB = 0x0722,
  166. DPCD_ADDRESS_EDP_BACKLIGHT_BRIGHTNESS_LSB = 0x0723,
  167. DPCD_ADDRESS_EDP_PWMGEN_BIT_COUNT = 0x0724,
  168. DPCD_ADDRESS_EDP_PWMGEN_BIT_COUNT_CAP_MIN = 0x0725,
  169. DPCD_ADDRESS_EDP_PWMGEN_BIT_COUNT_CAP_MAX = 0x0726,
  170. DPCD_ADDRESS_EDP_BACKLIGHT_CONTROL_STATUS = 0x0727,
  171. DPCD_ADDRESS_EDP_BACKLIGHT_FREQ_SET = 0x0728,
  172. DPCD_ADDRESS_EDP_REVERVED = 0x0729,
  173. DPCD_ADDRESS_EDP_BACKLIGNT_FREQ_CAP_MIN_MSB = 0x072A,
  174. DPCD_ADDRESS_EDP_BACKLIGNT_FREQ_CAP_MIN_MID = 0x072B,
  175. DPCD_ADDRESS_EDP_BACKLIGNT_FREQ_CAP_MIN_LSB = 0x072C,
  176. DPCD_ADDRESS_EDP_BACKLIGNT_FREQ_CAP_MAX_MSB = 0x072D,
  177. DPCD_ADDRESS_EDP_BACKLIGNT_FREQ_CAP_MAX_MID = 0x072E,
  178. DPCD_ADDRESS_EDP_BACKLIGNT_FREQ_CAP_MAX_LSB = 0x072F,
  179. DPCD_ADDRESS_EDP_DBC_MINIMUM_BRIGHTNESS_SET = 0x0732,
  180. DPCD_ADDRESS_EDP_DBC_MAXIMUM_BRIGHTNESS_SET = 0x0733,
  181. /* Sideband MSG Buffers 1.2 */
  182. DPCD_ADDRESS_DOWN_REQ_START = 0x01000,
  183. DPCD_ADDRESS_DOWN_REQ_END = 0x011ff,
  184. DPCD_ADDRESS_UP_REP_START = 0x01200,
  185. DPCD_ADDRESS_UP_REP_END = 0x013ff,
  186. DPCD_ADDRESS_DOWN_REP_START = 0x01400,
  187. DPCD_ADDRESS_DOWN_REP_END = 0x015ff,
  188. DPCD_ADDRESS_UP_REQ_START = 0x01600,
  189. DPCD_ADDRESS_UP_REQ_END = 0x017ff,
  190. /* ESI (Event Status Indicator) Field 1.2 */
  191. DPCD_ADDRESS_SINK_COUNT_ESI = 0x02002,
  192. DPCD_ADDRESS_DEVICE_IRQ_ESI0 = 0x02003,
  193. DPCD_ADDRESS_DEVICE_IRQ_ESI1 = 0x02004,
  194. /*@todo move dpcd_address_Lane01Status back here*/
  195. DPCD_ADDRESS_PSR_ERROR_STATUS = 0x2006,
  196. DPCD_ADDRESS_PSR_EVENT_STATUS = 0x2007,
  197. DPCD_ADDRESS_PSR_SINK_STATUS = 0x2008,
  198. DPCD_ADDRESS_PSR_DBG_REGISTER0 = 0x2009,
  199. DPCD_ADDRESS_PSR_DBG_REGISTER1 = 0x200A,
  200. DPCD_ADDRESS_DP13_DPCD_REV = 0x2200,
  201. DPCD_ADDRESS_DP13_MAX_LINK_RATE = 0x2201,
  202. /* Travis specific addresses */
  203. DPCD_ADDRESS_TRAVIS_SINK_DEV_SEL = 0x5f0,
  204. DPCD_ADDRESS_TRAVIS_SINK_ACCESS_OFFSET = 0x5f1,
  205. DPCD_ADDRESS_TRAVIS_SINK_ACCESS_REG = 0x5f2,
  206. };
  207. enum dpcd_revision {
  208. DPCD_REV_10 = 0x10,
  209. DPCD_REV_11 = 0x11,
  210. DPCD_REV_12 = 0x12,
  211. DPCD_REV_13 = 0x13,
  212. DPCD_REV_14 = 0x14
  213. };
  214. enum dp_pwr_state {
  215. DP_PWR_STATE_D0 = 1,/* direct HW translation! */
  216. DP_PWR_STATE_D3
  217. };
  218. /* these are the types stored at DOWNSTREAMPORT_PRESENT */
  219. enum dpcd_downstream_port_type {
  220. DOWNSTREAM_DP = 0,
  221. DOWNSTREAM_VGA,
  222. DOWNSTREAM_DVI_HDMI,
  223. DOWNSTREAM_NONDDC /* has no EDID (TV,CV) */
  224. };
  225. enum dpcd_link_test_patterns {
  226. LINK_TEST_PATTERN_NONE = 0,
  227. LINK_TEST_PATTERN_COLOR_RAMP,
  228. LINK_TEST_PATTERN_VERTICAL_BARS,
  229. LINK_TEST_PATTERN_COLOR_SQUARES
  230. };
  231. enum dpcd_test_color_format {
  232. TEST_COLOR_FORMAT_RGB = 0,
  233. TEST_COLOR_FORMAT_YCBCR422,
  234. TEST_COLOR_FORMAT_YCBCR444
  235. };
  236. enum dpcd_test_bit_depth {
  237. TEST_BIT_DEPTH_6 = 0,
  238. TEST_BIT_DEPTH_8,
  239. TEST_BIT_DEPTH_10,
  240. TEST_BIT_DEPTH_12,
  241. TEST_BIT_DEPTH_16
  242. };
  243. /* PHY (encoder) test patterns
  244. The order of test patterns follows DPCD register PHY_TEST_PATTERN (0x248)
  245. */
  246. enum dpcd_phy_test_patterns {
  247. PHY_TEST_PATTERN_NONE = 0,
  248. PHY_TEST_PATTERN_D10_2,
  249. PHY_TEST_PATTERN_SYMBOL_ERROR,
  250. PHY_TEST_PATTERN_PRBS7,
  251. PHY_TEST_PATTERN_80BIT_CUSTOM,/* For DP1.2 only */
  252. PHY_TEST_PATTERN_HBR2_COMPLIANCE_EYE/* For DP1.2 only */
  253. };
  254. enum dpcd_test_dyn_range {
  255. TEST_DYN_RANGE_VESA = 0,
  256. TEST_DYN_RANGE_CEA
  257. };
  258. enum dpcd_audio_test_pattern {
  259. AUDIO_TEST_PATTERN_OPERATOR_DEFINED = 0,/* direct HW translation */
  260. AUDIO_TEST_PATTERN_SAWTOOTH
  261. };
  262. enum dpcd_audio_sampling_rate {
  263. AUDIO_SAMPLING_RATE_32KHZ = 0,/* direct HW translation */
  264. AUDIO_SAMPLING_RATE_44_1KHZ,
  265. AUDIO_SAMPLING_RATE_48KHZ,
  266. AUDIO_SAMPLING_RATE_88_2KHZ,
  267. AUDIO_SAMPLING_RATE_96KHZ,
  268. AUDIO_SAMPLING_RATE_176_4KHZ,
  269. AUDIO_SAMPLING_RATE_192KHZ
  270. };
  271. enum dpcd_audio_channels {
  272. AUDIO_CHANNELS_1 = 0,/* direct HW translation */
  273. AUDIO_CHANNELS_2,
  274. AUDIO_CHANNELS_3,
  275. AUDIO_CHANNELS_4,
  276. AUDIO_CHANNELS_5,
  277. AUDIO_CHANNELS_6,
  278. AUDIO_CHANNELS_7,
  279. AUDIO_CHANNELS_8,
  280. AUDIO_CHANNELS_COUNT
  281. };
  282. enum dpcd_audio_test_pattern_periods {
  283. DPCD_AUDIO_TEST_PATTERN_PERIOD_NOTUSED = 0,/* direct HW translation */
  284. DPCD_AUDIO_TEST_PATTERN_PERIOD_3,
  285. DPCD_AUDIO_TEST_PATTERN_PERIOD_6,
  286. DPCD_AUDIO_TEST_PATTERN_PERIOD_12,
  287. DPCD_AUDIO_TEST_PATTERN_PERIOD_24,
  288. DPCD_AUDIO_TEST_PATTERN_PERIOD_48,
  289. DPCD_AUDIO_TEST_PATTERN_PERIOD_96,
  290. DPCD_AUDIO_TEST_PATTERN_PERIOD_192,
  291. DPCD_AUDIO_TEST_PATTERN_PERIOD_384,
  292. DPCD_AUDIO_TEST_PATTERN_PERIOD_768,
  293. DPCD_AUDIO_TEST_PATTERN_PERIOD_1536
  294. };
  295. /* This enum is for programming DPCD TRAINING_PATTERN_SET */
  296. enum dpcd_training_patterns {
  297. DPCD_TRAINING_PATTERN_VIDEOIDLE = 0,/* direct HW translation! */
  298. DPCD_TRAINING_PATTERN_1,
  299. DPCD_TRAINING_PATTERN_2,
  300. DPCD_TRAINING_PATTERN_3,
  301. DPCD_TRAINING_PATTERN_4 = 7
  302. };
  303. /* This enum is for use with PsrSinkPsrStatus.bits.sinkSelfRefreshStatus
  304. It defines the possible PSR states. */
  305. enum dpcd_psr_sink_states {
  306. PSR_SINK_STATE_INACTIVE = 0,
  307. PSR_SINK_STATE_ACTIVE_CAPTURE_DISPLAY_ON_SOURCE_TIMING = 1,
  308. PSR_SINK_STATE_ACTIVE_DISPLAY_FROM_SINK_RFB = 2,
  309. PSR_SINK_STATE_ACTIVE_CAPTURE_DISPLAY_ON_SINK_TIMING = 3,
  310. PSR_SINK_STATE_ACTIVE_CAPTURE_TIMING_RESYNC = 4,
  311. PSR_SINK_STATE_SINK_INTERNAL_ERROR = 7,
  312. };
  313. /* This enum defines the Panel's eDP revision at DPCD 700h
  314. * 00h = eDP v1.1 or lower
  315. * 01h = eDP v1.2
  316. * 02h = eDP v1.3 (PSR support starts here)
  317. * 03h = eDP v1.4
  318. * If unknown revision, treat as eDP v1.1, meaning least functionality set.
  319. * This enum has values matched to eDP spec, thus values should not change.
  320. */
  321. enum dpcd_edp_revision {
  322. DPCD_EDP_REVISION_EDP_V1_1 = 0,
  323. DPCD_EDP_REVISION_EDP_V1_2 = 1,
  324. DPCD_EDP_REVISION_EDP_V1_3 = 2,
  325. DPCD_EDP_REVISION_EDP_V1_4 = 3,
  326. DPCD_EDP_REVISION_EDP_UNKNOWN = DPCD_EDP_REVISION_EDP_V1_1,
  327. };
  328. union dpcd_rev {
  329. struct {
  330. uint8_t MINOR:4;
  331. uint8_t MAJOR:4;
  332. } bits;
  333. uint8_t raw;
  334. };
  335. union max_lane_count {
  336. struct {
  337. uint8_t MAX_LANE_COUNT:5;
  338. uint8_t POST_LT_ADJ_REQ_SUPPORTED:1;
  339. uint8_t TPS3_SUPPORTED:1;
  340. uint8_t ENHANCED_FRAME_CAP:1;
  341. } bits;
  342. uint8_t raw;
  343. };
  344. union max_down_spread {
  345. struct {
  346. uint8_t MAX_DOWN_SPREAD:1;
  347. uint8_t RESERVED:5;
  348. uint8_t NO_AUX_HANDSHAKE_LINK_TRAINING:1;
  349. uint8_t TPS4_SUPPORTED:1;
  350. } bits;
  351. uint8_t raw;
  352. };
  353. union mstm_cap {
  354. struct {
  355. uint8_t MST_CAP:1;
  356. uint8_t RESERVED:7;
  357. } bits;
  358. uint8_t raw;
  359. };
  360. union lane_count_set {
  361. struct {
  362. uint8_t LANE_COUNT_SET:5;
  363. uint8_t POST_LT_ADJ_REQ_GRANTED:1;
  364. uint8_t RESERVED:1;
  365. uint8_t ENHANCED_FRAMING:1;
  366. } bits;
  367. uint8_t raw;
  368. };
  369. union lane_status {
  370. struct {
  371. uint8_t CR_DONE_0:1;
  372. uint8_t CHANNEL_EQ_DONE_0:1;
  373. uint8_t SYMBOL_LOCKED_0:1;
  374. uint8_t RESERVED0:1;
  375. uint8_t CR_DONE_1:1;
  376. uint8_t CHANNEL_EQ_DONE_1:1;
  377. uint8_t SYMBOL_LOCKED_1:1;
  378. uint8_t RESERVED_1:1;
  379. } bits;
  380. uint8_t raw;
  381. };
  382. union device_service_irq {
  383. struct {
  384. uint8_t REMOTE_CONTROL_CMD_PENDING:1;
  385. uint8_t AUTOMATED_TEST:1;
  386. uint8_t CP_IRQ:1;
  387. uint8_t MCCS_IRQ:1;
  388. uint8_t DOWN_REP_MSG_RDY:1;
  389. uint8_t UP_REQ_MSG_RDY:1;
  390. uint8_t SINK_SPECIFIC:1;
  391. uint8_t reserved:1;
  392. } bits;
  393. uint8_t raw;
  394. };
  395. union sink_count {
  396. struct {
  397. uint8_t SINK_COUNT:6;
  398. uint8_t CPREADY:1;
  399. uint8_t RESERVED:1;
  400. } bits;
  401. uint8_t raw;
  402. };
  403. union lane_align_status_updated {
  404. struct {
  405. uint8_t INTERLANE_ALIGN_DONE:1;
  406. uint8_t POST_LT_ADJ_REQ_IN_PROGRESS:1;
  407. uint8_t RESERVED:4;
  408. uint8_t DOWNSTREAM_PORT_STATUS_CHANGED:1;
  409. uint8_t LINK_STATUS_UPDATED:1;
  410. } bits;
  411. uint8_t raw;
  412. };
  413. union lane_adjust {
  414. struct {
  415. uint8_t VOLTAGE_SWING_LANE:2;
  416. uint8_t PRE_EMPHASIS_LANE:2;
  417. uint8_t RESERVED:4;
  418. } bits;
  419. uint8_t raw;
  420. };
  421. union dpcd_training_pattern {
  422. struct {
  423. uint8_t TRAINING_PATTERN_SET:4;
  424. uint8_t RECOVERED_CLOCK_OUT_EN:1;
  425. uint8_t SCRAMBLING_DISABLE:1;
  426. uint8_t SYMBOL_ERROR_COUNT_SEL:2;
  427. } v1_4;
  428. struct {
  429. uint8_t TRAINING_PATTERN_SET:2;
  430. uint8_t LINK_QUAL_PATTERN_SET:2;
  431. uint8_t RESERVED:4;
  432. } v1_3;
  433. uint8_t raw;
  434. };
  435. /* Training Lane is used to configure downstream DP device's voltage swing
  436. and pre-emphasis levels*/
  437. /* The DPCD addresses are from 0x103 to 0x106*/
  438. union dpcd_training_lane {
  439. struct {
  440. uint8_t VOLTAGE_SWING_SET:2;
  441. uint8_t MAX_SWING_REACHED:1;
  442. uint8_t PRE_EMPHASIS_SET:2;
  443. uint8_t MAX_PRE_EMPHASIS_REACHED:1;
  444. uint8_t RESERVED:2;
  445. } bits;
  446. uint8_t raw;
  447. };
  448. /* TMDS-converter related */
  449. union dwnstream_port_caps_byte0 {
  450. struct {
  451. uint8_t DWN_STRM_PORTX_TYPE:3;
  452. uint8_t DWN_STRM_PORTX_HPD:1;
  453. uint8_t RESERVERD:4;
  454. } bits;
  455. uint8_t raw;
  456. };
  457. /* these are the detailed types stored at DWN_STRM_PORTX_CAP (00080h)*/
  458. enum dpcd_downstream_port_detailed_type {
  459. DOWN_STREAM_DETAILED_DP = 0,
  460. DOWN_STREAM_DETAILED_VGA,
  461. DOWN_STREAM_DETAILED_DVI,
  462. DOWN_STREAM_DETAILED_HDMI,
  463. DOWN_STREAM_DETAILED_NONDDC,/* has no EDID (TV,CV)*/
  464. DOWN_STREAM_DETAILED_DP_PLUS_PLUS
  465. };
  466. union dwnstream_port_caps_byte2 {
  467. struct {
  468. uint8_t MAX_BITS_PER_COLOR_COMPONENT:2;
  469. uint8_t RESERVED:6;
  470. } bits;
  471. uint8_t raw;
  472. };
  473. union dp_downstream_port_present {
  474. uint8_t byte;
  475. struct {
  476. uint8_t PORT_PRESENT:1;
  477. uint8_t PORT_TYPE:2;
  478. uint8_t FMT_CONVERSION:1;
  479. uint8_t DETAILED_CAPS:1;
  480. uint8_t RESERVED:3;
  481. } fields;
  482. };
  483. union dwnstream_port_caps_byte3_dvi {
  484. struct {
  485. uint8_t RESERVED1:1;
  486. uint8_t DUAL_LINK:1;
  487. uint8_t HIGH_COLOR_DEPTH:1;
  488. uint8_t RESERVED2:5;
  489. } bits;
  490. uint8_t raw;
  491. };
  492. union dwnstream_port_caps_byte3_hdmi {
  493. struct {
  494. uint8_t FRAME_SEQ_TO_FRAME_PACK:1;
  495. uint8_t RESERVED:7;
  496. } bits;
  497. uint8_t raw;
  498. };
  499. /*4-byte structure for detailed capabilities of a down-stream port
  500. (DP-to-TMDS converter).*/
  501. union sink_status {
  502. struct {
  503. uint8_t RX_PORT0_STATUS:1;
  504. uint8_t RX_PORT1_STATUS:1;
  505. uint8_t RESERVED:6;
  506. } bits;
  507. uint8_t raw;
  508. };
  509. /*6-byte structure corresponding to 6 registers (200h-205h)
  510. read during handling of HPD-IRQ*/
  511. union hpd_irq_data {
  512. struct {
  513. union sink_count sink_cnt;/* 200h */
  514. union device_service_irq device_service_irq;/* 201h */
  515. union lane_status lane01_status;/* 202h */
  516. union lane_status lane23_status;/* 203h */
  517. union lane_align_status_updated lane_status_updated;/* 204h */
  518. union sink_status sink_status;
  519. } bytes;
  520. uint8_t raw[6];
  521. };
  522. union down_stream_port_count {
  523. struct {
  524. uint8_t DOWN_STR_PORT_COUNT:4;
  525. uint8_t RESERVED:2; /*Bits 5:4 = RESERVED. Read all 0s.*/
  526. /*Bit 6 = MSA_TIMING_PAR_IGNORED
  527. 0 = Sink device requires the MSA timing parameters
  528. 1 = Sink device is capable of rendering incoming video
  529. stream without MSA timing parameters*/
  530. uint8_t IGNORE_MSA_TIMING_PARAM:1;
  531. /*Bit 7 = OUI Support
  532. 0 = OUI not supported
  533. 1 = OUI supported
  534. (OUI and Device Identification mandatory for DP 1.2)*/
  535. uint8_t OUI_SUPPORT:1;
  536. } bits;
  537. uint8_t raw;
  538. };
  539. union down_spread_ctrl {
  540. struct {
  541. uint8_t RESERVED1:4;/* Bit 3:0 = RESERVED. Read all 0s*/
  542. /* Bits 4 = SPREAD_AMP. Spreading amplitude
  543. 0 = Main link signal is not downspread
  544. 1 = Main link signal is downspread <= 0.5%
  545. with frequency in the range of 30kHz ~ 33kHz*/
  546. uint8_t SPREAD_AMP:1;
  547. uint8_t RESERVED2:2;/*Bit 6:5 = RESERVED. Read all 0s*/
  548. /*Bit 7 = MSA_TIMING_PAR_IGNORE_EN
  549. 0 = Source device will send valid data for the MSA Timing Params
  550. 1 = Source device may send invalid data for these MSA Timing Params*/
  551. uint8_t IGNORE_MSA_TIMING_PARAM:1;
  552. } bits;
  553. uint8_t raw;
  554. };
  555. union dpcd_edp_config {
  556. struct {
  557. uint8_t PANEL_MODE_EDP:1;
  558. uint8_t FRAMING_CHANGE_ENABLE:1;
  559. uint8_t RESERVED:5;
  560. uint8_t PANEL_SELF_TEST_ENABLE:1;
  561. } bits;
  562. uint8_t raw;
  563. };
  564. struct dp_device_vendor_id {
  565. uint8_t ieee_oui[3];/*24-bit IEEE OUI*/
  566. uint8_t ieee_device_id[6];/*usually 6-byte ASCII name*/
  567. };
  568. struct dp_sink_hw_fw_revision {
  569. uint8_t ieee_hw_rev;
  570. uint8_t ieee_fw_rev[2];
  571. };
  572. /*DPCD register of DP receiver capability field bits-*/
  573. union edp_configuration_cap {
  574. struct {
  575. uint8_t ALT_SCRAMBLER_RESET:1;
  576. uint8_t FRAMING_CHANGE:1;
  577. uint8_t RESERVED:1;
  578. uint8_t DPCD_DISPLAY_CONTROL_CAPABLE:1;
  579. uint8_t RESERVED2:4;
  580. } bits;
  581. uint8_t raw;
  582. };
  583. union training_aux_rd_interval {
  584. struct {
  585. uint8_t TRAINIG_AUX_RD_INTERVAL:7;
  586. uint8_t EXT_RECIEVER_CAP_FIELD_PRESENT:1;
  587. } bits;
  588. uint8_t raw;
  589. };
  590. /* Automated test structures */
  591. union test_request {
  592. struct {
  593. uint8_t LINK_TRAINING :1;
  594. uint8_t LINK_TEST_PATTRN :1;
  595. uint8_t EDID_REAT :1;
  596. uint8_t PHY_TEST_PATTERN :1;
  597. uint8_t AUDIO_TEST_PATTERN :1;
  598. uint8_t RESERVED :1;
  599. uint8_t TEST_STEREO_3D :1;
  600. } bits;
  601. uint8_t raw;
  602. };
  603. union test_response {
  604. struct {
  605. uint8_t ACK :1;
  606. uint8_t NO_ACK :1;
  607. uint8_t RESERVED :6;
  608. } bits;
  609. uint8_t raw;
  610. };
  611. union phy_test_pattern {
  612. struct {
  613. /* DpcdPhyTestPatterns. This field is 2 bits for DP1.1
  614. * and 3 bits for DP1.2.
  615. */
  616. uint8_t PATTERN :3;
  617. /* BY speci, bit7:2 is 0 for DP1.1. */
  618. uint8_t RESERVED :5;
  619. } bits;
  620. uint8_t raw;
  621. };
  622. /* States of Compliance Test Specification (CTS DP1.2). */
  623. union compliance_test_state {
  624. struct {
  625. unsigned char STEREO_3D_RUNNING : 1;
  626. unsigned char SET_TEST_PATTERN_PENDING : 1;
  627. unsigned char RESERVED : 6;
  628. } bits;
  629. unsigned char raw;
  630. };
  631. union link_test_pattern {
  632. struct {
  633. /* dpcd_link_test_patterns */
  634. unsigned char PATTERN :2;
  635. unsigned char RESERVED:6;
  636. } bits;
  637. unsigned char raw;
  638. };
  639. union test_misc {
  640. struct dpcd_test_misc_bits {
  641. unsigned char SYNC_CLOCK :1;
  642. /* dpcd_test_color_format */
  643. unsigned char CLR_FORMAT :2;
  644. /* dpcd_test_dyn_range */
  645. unsigned char DYN_RANGE :1;
  646. unsigned char YCBCR :1;
  647. /* dpcd_test_bit_depth */
  648. unsigned char BPC :3;
  649. } bits;
  650. unsigned char raw;
  651. };
  652. #endif /* __DAL_DPCD_DEFS_H__ */