diff options
author | Dave Airlie <airlied@redhat.com> | 2014-03-26 00:00:53 -0400 |
---|---|---|
committer | Dave Airlie <airlied@redhat.com> | 2014-03-26 00:00:53 -0400 |
commit | 23c73b24a0f582fa0e8d4419f896e9b684dc8761 (patch) | |
tree | 65d3a519d0b8ea32867f0be26cf8d6969d032113 | |
parent | 63ac07cdee6e1f2bf748ac3f28662e3c01a72496 (diff) | |
parent | 020ff5467603483a97042625d12696c9b39922cf (diff) |
Merge branch 'drm-next-3.15' of git://people.freedesktop.org/~deathsimple/linux into drm-next
this is the third pull request for 3.15 radeon changes. Highlights this time:
- More DP work from Alex, especially making use of the new DP aux helpers
- Marek's 1D and linear tiling fixes for CIK
* 'drm-next-3.15' of git://people.freedesktop.org/~deathsimple/linux:
drm/radeon: set PIPE_CONFIG for 1D and linear tiling modes on CIK
drm/radeon: use drm_dp_dpcd_read_link_status()
drm/radeon: use the new drm helpers for dp aux
drm/dp: make aux retries less chatty
drm/radeon: clarify special handling in i2c over aux
drm/radeon/atom: rework encoder enable/disable sequence
drm/radeon/dp: move sink power control to a separate function
drm/radeon/dp: use i2c_get_adapdata rather than casting
-rw-r--r-- | drivers/gpu/drm/drm_dp_helper.c | 4 | ||||
-rw-r--r-- | drivers/gpu/drm/radeon/atombios_dp.c | 268 | ||||
-rw-r--r-- | drivers/gpu/drm/radeon/atombios_encoders.c | 82 | ||||
-rw-r--r-- | drivers/gpu/drm/radeon/cik.c | 27 | ||||
-rw-r--r-- | drivers/gpu/drm/radeon/radeon_connectors.c | 17 | ||||
-rw-r--r-- | drivers/gpu/drm/radeon/radeon_drv.c | 3 | ||||
-rw-r--r-- | drivers/gpu/drm/radeon/radeon_mode.h | 4 |
7 files changed, 202 insertions, 203 deletions
diff --git a/drivers/gpu/drm/drm_dp_helper.c b/drivers/gpu/drm/drm_dp_helper.c index 35251af3b14e..74724aacb8ae 100644 --- a/drivers/gpu/drm/drm_dp_helper.c +++ b/drivers/gpu/drm/drm_dp_helper.c | |||
@@ -402,7 +402,7 @@ static int drm_dp_dpcd_access(struct drm_dp_aux *aux, u8 request, | |||
402 | } | 402 | } |
403 | } | 403 | } |
404 | 404 | ||
405 | DRM_ERROR("too many retries, giving up\n"); | 405 | DRM_DEBUG_KMS("too many retries, giving up\n"); |
406 | return -EIO; | 406 | return -EIO; |
407 | } | 407 | } |
408 | 408 | ||
@@ -656,7 +656,7 @@ static int drm_dp_i2c_do_msg(struct drm_dp_aux *aux, struct drm_dp_aux_msg *msg) | |||
656 | } | 656 | } |
657 | } | 657 | } |
658 | 658 | ||
659 | DRM_ERROR("too many retries, giving up\n"); | 659 | DRM_DEBUG_KMS("too many retries, giving up\n"); |
660 | return -EREMOTEIO; | 660 | return -EREMOTEIO; |
661 | } | 661 | } |
662 | 662 | ||
diff --git a/drivers/gpu/drm/radeon/atombios_dp.c b/drivers/gpu/drm/radeon/atombios_dp.c index 4ad7643fce5f..8b0ab170cef9 100644 --- a/drivers/gpu/drm/radeon/atombios_dp.c +++ b/drivers/gpu/drm/radeon/atombios_dp.c | |||
@@ -142,101 +142,69 @@ static int radeon_process_aux_ch(struct radeon_i2c_chan *chan, | |||
142 | return recv_bytes; | 142 | return recv_bytes; |
143 | } | 143 | } |
144 | 144 | ||
145 | static int radeon_dp_aux_native_write(struct radeon_connector *radeon_connector, | 145 | #define HEADER_SIZE 4 |
146 | u16 address, u8 *send, u8 send_bytes, u8 delay) | ||
147 | { | ||
148 | struct radeon_connector_atom_dig *dig_connector = radeon_connector->con_priv; | ||
149 | int ret; | ||
150 | u8 msg[20]; | ||
151 | int msg_bytes = send_bytes + 4; | ||
152 | u8 ack; | ||
153 | unsigned retry; | ||
154 | |||
155 | if (send_bytes > 16) | ||
156 | return -1; | ||
157 | 146 | ||
158 | msg[0] = address; | 147 | static ssize_t |
159 | msg[1] = address >> 8; | 148 | radeon_dp_aux_transfer(struct drm_dp_aux *aux, struct drm_dp_aux_msg *msg) |
160 | msg[2] = DP_AUX_NATIVE_WRITE << 4; | ||
161 | msg[3] = (msg_bytes << 4) | (send_bytes - 1); | ||
162 | memcpy(&msg[4], send, send_bytes); | ||
163 | |||
164 | for (retry = 0; retry < 7; retry++) { | ||
165 | ret = radeon_process_aux_ch(dig_connector->dp_i2c_bus, | ||
166 | msg, msg_bytes, NULL, 0, delay, &ack); | ||
167 | if (ret == -EBUSY) | ||
168 | continue; | ||
169 | else if (ret < 0) | ||
170 | return ret; | ||
171 | ack >>= 4; | ||
172 | if ((ack & DP_AUX_NATIVE_REPLY_MASK) == DP_AUX_NATIVE_REPLY_ACK) | ||
173 | return send_bytes; | ||
174 | else if ((ack & DP_AUX_NATIVE_REPLY_MASK) == DP_AUX_NATIVE_REPLY_DEFER) | ||
175 | usleep_range(400, 500); | ||
176 | else | ||
177 | return -EIO; | ||
178 | } | ||
179 | |||
180 | return -EIO; | ||
181 | } | ||
182 | |||
183 | static int radeon_dp_aux_native_read(struct radeon_connector *radeon_connector, | ||
184 | u16 address, u8 *recv, int recv_bytes, u8 delay) | ||
185 | { | 149 | { |
186 | struct radeon_connector_atom_dig *dig_connector = radeon_connector->con_priv; | 150 | struct radeon_i2c_chan *chan = |
187 | u8 msg[4]; | 151 | container_of(aux, struct radeon_i2c_chan, aux); |
188 | int msg_bytes = 4; | ||
189 | u8 ack; | ||
190 | int ret; | 152 | int ret; |
191 | unsigned retry; | 153 | u8 tx_buf[20]; |
192 | 154 | size_t tx_size; | |
193 | msg[0] = address; | 155 | u8 ack, delay = 0; |
194 | msg[1] = address >> 8; | 156 | |
195 | msg[2] = DP_AUX_NATIVE_READ << 4; | 157 | if (WARN_ON(msg->size > 16)) |
196 | msg[3] = (msg_bytes << 4) | (recv_bytes - 1); | 158 | return -E2BIG; |
197 | 159 | ||
198 | for (retry = 0; retry < 7; retry++) { | 160 | tx_buf[0] = msg->address & 0xff; |
199 | ret = radeon_process_aux_ch(dig_connector->dp_i2c_bus, | 161 | tx_buf[1] = msg->address >> 8; |
200 | msg, msg_bytes, recv, recv_bytes, delay, &ack); | 162 | tx_buf[2] = msg->request << 4; |
201 | if (ret == -EBUSY) | 163 | tx_buf[3] = msg->size - 1; |
202 | continue; | 164 | |
203 | else if (ret < 0) | 165 | switch (msg->request & ~DP_AUX_I2C_MOT) { |
204 | return ret; | 166 | case DP_AUX_NATIVE_WRITE: |
205 | ack >>= 4; | 167 | case DP_AUX_I2C_WRITE: |
206 | if ((ack & DP_AUX_NATIVE_REPLY_MASK) == DP_AUX_NATIVE_REPLY_ACK) | 168 | tx_size = HEADER_SIZE + msg->size; |
207 | return ret; | 169 | tx_buf[3] |= tx_size << 4; |
208 | else if ((ack & DP_AUX_NATIVE_REPLY_MASK) == DP_AUX_NATIVE_REPLY_DEFER) | 170 | memcpy(tx_buf + HEADER_SIZE, msg->buffer, msg->size); |
209 | usleep_range(400, 500); | 171 | ret = radeon_process_aux_ch(chan, |
210 | else if (ret == 0) | 172 | tx_buf, tx_size, NULL, 0, delay, &ack); |
211 | return -EPROTO; | 173 | if (ret >= 0) |
212 | else | 174 | /* Return payload size. */ |
213 | return -EIO; | 175 | ret = msg->size; |
176 | break; | ||
177 | case DP_AUX_NATIVE_READ: | ||
178 | case DP_AUX_I2C_READ: | ||
179 | tx_size = HEADER_SIZE; | ||
180 | tx_buf[3] |= tx_size << 4; | ||
181 | ret = radeon_process_aux_ch(chan, | ||
182 | tx_buf, tx_size, msg->buffer, msg->size, delay, &ack); | ||
183 | break; | ||
184 | default: | ||
185 | ret = -EINVAL; | ||
186 | break; | ||
214 | } | 187 | } |
215 | 188 | ||
216 | return -EIO; | 189 | if (ret > 0) |
217 | } | 190 | msg->reply = ack >> 4; |
218 | 191 | ||
219 | static void radeon_write_dpcd_reg(struct radeon_connector *radeon_connector, | 192 | return ret; |
220 | u16 reg, u8 val) | ||
221 | { | ||
222 | radeon_dp_aux_native_write(radeon_connector, reg, &val, 1, 0); | ||
223 | } | 193 | } |
224 | 194 | ||
225 | static u8 radeon_read_dpcd_reg(struct radeon_connector *radeon_connector, | 195 | void radeon_dp_aux_init(struct radeon_connector *radeon_connector) |
226 | u16 reg) | ||
227 | { | 196 | { |
228 | u8 val = 0; | 197 | struct radeon_connector_atom_dig *dig_connector = radeon_connector->con_priv; |
229 | |||
230 | radeon_dp_aux_native_read(radeon_connector, reg, &val, 1, 0); | ||
231 | 198 | ||
232 | return val; | 199 | dig_connector->dp_i2c_bus->aux.dev = radeon_connector->base.kdev; |
200 | dig_connector->dp_i2c_bus->aux.transfer = radeon_dp_aux_transfer; | ||
233 | } | 201 | } |
234 | 202 | ||
235 | int radeon_dp_i2c_aux_ch(struct i2c_adapter *adapter, int mode, | 203 | int radeon_dp_i2c_aux_ch(struct i2c_adapter *adapter, int mode, |
236 | u8 write_byte, u8 *read_byte) | 204 | u8 write_byte, u8 *read_byte) |
237 | { | 205 | { |
238 | struct i2c_algo_dp_aux_data *algo_data = adapter->algo_data; | 206 | struct i2c_algo_dp_aux_data *algo_data = adapter->algo_data; |
239 | struct radeon_i2c_chan *auxch = (struct radeon_i2c_chan *)adapter; | 207 | struct radeon_i2c_chan *auxch = i2c_get_adapdata(adapter); |
240 | u16 address = algo_data->address; | 208 | u16 address = algo_data->address; |
241 | u8 msg[5]; | 209 | u8 msg[5]; |
242 | u8 reply[2]; | 210 | u8 reply[2]; |
@@ -246,34 +214,30 @@ int radeon_dp_i2c_aux_ch(struct i2c_adapter *adapter, int mode, | |||
246 | int ret; | 214 | int ret; |
247 | u8 ack; | 215 | u8 ack; |
248 | 216 | ||
249 | /* Set up the command byte */ | 217 | /* Set up the address */ |
250 | if (mode & MODE_I2C_READ) | ||
251 | msg[2] = DP_AUX_I2C_READ << 4; | ||
252 | else | ||
253 | msg[2] = DP_AUX_I2C_WRITE << 4; | ||
254 | |||
255 | if (!(mode & MODE_I2C_STOP)) | ||
256 | msg[2] |= DP_AUX_I2C_MOT << 4; | ||
257 | |||
258 | msg[0] = address; | 218 | msg[0] = address; |
259 | msg[1] = address >> 8; | 219 | msg[1] = address >> 8; |
260 | 220 | ||
261 | switch (mode) { | 221 | /* Set up the command byte */ |
262 | case MODE_I2C_WRITE: | 222 | if (mode & MODE_I2C_READ) { |
223 | msg[2] = DP_AUX_I2C_READ << 4; | ||
224 | msg_bytes = 4; | ||
225 | msg[3] = msg_bytes << 4; | ||
226 | } else { | ||
227 | msg[2] = DP_AUX_I2C_WRITE << 4; | ||
263 | msg_bytes = 5; | 228 | msg_bytes = 5; |
264 | msg[3] = msg_bytes << 4; | 229 | msg[3] = msg_bytes << 4; |
265 | msg[4] = write_byte; | 230 | msg[4] = write_byte; |
266 | break; | ||
267 | case MODE_I2C_READ: | ||
268 | msg_bytes = 4; | ||
269 | msg[3] = msg_bytes << 4; | ||
270 | break; | ||
271 | default: | ||
272 | msg_bytes = 4; | ||
273 | msg[3] = 3 << 4; | ||
274 | break; | ||
275 | } | 231 | } |
276 | 232 | ||
233 | /* special handling for start/stop */ | ||
234 | if (mode & (MODE_I2C_START | MODE_I2C_STOP)) | ||
235 | msg[3] = 3 << 4; | ||
236 | |||
237 | /* Set MOT bit for all but stop */ | ||
238 | if ((mode & MODE_I2C_STOP) == 0) | ||
239 | msg[2] |= DP_AUX_I2C_MOT << 4; | ||
240 | |||
277 | for (retry = 0; retry < 7; retry++) { | 241 | for (retry = 0; retry < 7; retry++) { |
278 | ret = radeon_process_aux_ch(auxch, | 242 | ret = radeon_process_aux_ch(auxch, |
279 | msg, msg_bytes, reply, reply_bytes, 0, &ack); | 243 | msg, msg_bytes, reply, reply_bytes, 0, &ack); |
@@ -472,11 +436,11 @@ static void radeon_dp_probe_oui(struct radeon_connector *radeon_connector) | |||
472 | if (!(dig_connector->dpcd[DP_DOWN_STREAM_PORT_COUNT] & DP_OUI_SUPPORT)) | 436 | if (!(dig_connector->dpcd[DP_DOWN_STREAM_PORT_COUNT] & DP_OUI_SUPPORT)) |
473 | return; | 437 | return; |
474 | 438 | ||
475 | if (radeon_dp_aux_native_read(radeon_connector, DP_SINK_OUI, buf, 3, 0)) | 439 | if (drm_dp_dpcd_read(&dig_connector->dp_i2c_bus->aux, DP_SINK_OUI, buf, 3)) |
476 | DRM_DEBUG_KMS("Sink OUI: %02hx%02hx%02hx\n", | 440 | DRM_DEBUG_KMS("Sink OUI: %02hx%02hx%02hx\n", |
477 | buf[0], buf[1], buf[2]); | 441 | buf[0], buf[1], buf[2]); |
478 | 442 | ||
479 | if (radeon_dp_aux_native_read(radeon_connector, DP_BRANCH_OUI, buf, 3, 0)) | 443 | if (drm_dp_dpcd_read(&dig_connector->dp_i2c_bus->aux, DP_BRANCH_OUI, buf, 3)) |
480 | DRM_DEBUG_KMS("Branch OUI: %02hx%02hx%02hx\n", | 444 | DRM_DEBUG_KMS("Branch OUI: %02hx%02hx%02hx\n", |
481 | buf[0], buf[1], buf[2]); | 445 | buf[0], buf[1], buf[2]); |
482 | } | 446 | } |
@@ -487,8 +451,8 @@ bool radeon_dp_getdpcd(struct radeon_connector *radeon_connector) | |||
487 | u8 msg[DP_DPCD_SIZE]; | 451 | u8 msg[DP_DPCD_SIZE]; |
488 | int ret, i; | 452 | int ret, i; |
489 | 453 | ||
490 | ret = radeon_dp_aux_native_read(radeon_connector, DP_DPCD_REV, msg, | 454 | ret = drm_dp_dpcd_read(&dig_connector->dp_i2c_bus->aux, DP_DPCD_REV, msg, |
491 | DP_DPCD_SIZE, 0); | 455 | DP_DPCD_SIZE); |
492 | if (ret > 0) { | 456 | if (ret > 0) { |
493 | memcpy(dig_connector->dpcd, msg, DP_DPCD_SIZE); | 457 | memcpy(dig_connector->dpcd, msg, DP_DPCD_SIZE); |
494 | DRM_DEBUG_KMS("DPCD: "); | 458 | DRM_DEBUG_KMS("DPCD: "); |
@@ -510,6 +474,7 @@ int radeon_dp_get_panel_mode(struct drm_encoder *encoder, | |||
510 | struct drm_device *dev = encoder->dev; | 474 | struct drm_device *dev = encoder->dev; |
511 | struct radeon_device *rdev = dev->dev_private; | 475 | struct radeon_device *rdev = dev->dev_private; |
512 | struct radeon_connector *radeon_connector = to_radeon_connector(connector); | 476 | struct radeon_connector *radeon_connector = to_radeon_connector(connector); |
477 | struct radeon_connector_atom_dig *dig_connector; | ||
513 | int panel_mode = DP_PANEL_MODE_EXTERNAL_DP_MODE; | 478 | int panel_mode = DP_PANEL_MODE_EXTERNAL_DP_MODE; |
514 | u16 dp_bridge = radeon_connector_encoder_get_dp_bridge_encoder_id(connector); | 479 | u16 dp_bridge = radeon_connector_encoder_get_dp_bridge_encoder_id(connector); |
515 | u8 tmp; | 480 | u8 tmp; |
@@ -517,9 +482,15 @@ int radeon_dp_get_panel_mode(struct drm_encoder *encoder, | |||
517 | if (!ASIC_IS_DCE4(rdev)) | 482 | if (!ASIC_IS_DCE4(rdev)) |
518 | return panel_mode; | 483 | return panel_mode; |
519 | 484 | ||
485 | if (!radeon_connector->con_priv) | ||
486 | return panel_mode; | ||
487 | |||
488 | dig_connector = radeon_connector->con_priv; | ||
489 | |||
520 | if (dp_bridge != ENCODER_OBJECT_ID_NONE) { | 490 | if (dp_bridge != ENCODER_OBJECT_ID_NONE) { |
521 | /* DP bridge chips */ | 491 | /* DP bridge chips */ |
522 | tmp = radeon_read_dpcd_reg(radeon_connector, DP_EDP_CONFIGURATION_CAP); | 492 | drm_dp_dpcd_readb(&dig_connector->dp_i2c_bus->aux, |
493 | DP_EDP_CONFIGURATION_CAP, &tmp); | ||
523 | if (tmp & 1) | 494 | if (tmp & 1) |
524 | panel_mode = DP_PANEL_MODE_INTERNAL_DP2_MODE; | 495 | panel_mode = DP_PANEL_MODE_INTERNAL_DP2_MODE; |
525 | else if ((dp_bridge == ENCODER_OBJECT_ID_NUTMEG) || | 496 | else if ((dp_bridge == ENCODER_OBJECT_ID_NUTMEG) || |
@@ -529,7 +500,8 @@ int radeon_dp_get_panel_mode(struct drm_encoder *encoder, | |||
529 | panel_mode = DP_PANEL_MODE_EXTERNAL_DP_MODE; | 500 | panel_mode = DP_PANEL_MODE_EXTERNAL_DP_MODE; |
530 | } else if (connector->connector_type == DRM_MODE_CONNECTOR_eDP) { | 501 | } else if (connector->connector_type == DRM_MODE_CONNECTOR_eDP) { |
531 | /* eDP */ | 502 | /* eDP */ |
532 | tmp = radeon_read_dpcd_reg(radeon_connector, DP_EDP_CONFIGURATION_CAP); | 503 | drm_dp_dpcd_readb(&dig_connector->dp_i2c_bus->aux, |
504 | DP_EDP_CONFIGURATION_CAP, &tmp); | ||
533 | if (tmp & 1) | 505 | if (tmp & 1) |
534 | panel_mode = DP_PANEL_MODE_INTERNAL_DP2_MODE; | 506 | panel_mode = DP_PANEL_MODE_INTERNAL_DP2_MODE; |
535 | } | 507 | } |
@@ -577,37 +549,42 @@ int radeon_dp_mode_valid_helper(struct drm_connector *connector, | |||
577 | return MODE_OK; | 549 | return MODE_OK; |
578 | } | 550 | } |
579 | 551 | ||
580 | static bool radeon_dp_get_link_status(struct radeon_connector *radeon_connector, | ||
581 | u8 link_status[DP_LINK_STATUS_SIZE]) | ||
582 | { | ||
583 | int ret; | ||
584 | ret = radeon_dp_aux_native_read(radeon_connector, DP_LANE0_1_STATUS, | ||
585 | link_status, DP_LINK_STATUS_SIZE, 100); | ||
586 | if (ret <= 0) { | ||
587 | return false; | ||
588 | } | ||
589 | |||
590 | DRM_DEBUG_KMS("link status %6ph\n", link_status); | ||
591 | return true; | ||
592 | } | ||
593 | |||
594 | bool radeon_dp_needs_link_train(struct radeon_connector *radeon_connector) | 552 | bool radeon_dp_needs_link_train(struct radeon_connector *radeon_connector) |
595 | { | 553 | { |
596 | u8 link_status[DP_LINK_STATUS_SIZE]; | 554 | u8 link_status[DP_LINK_STATUS_SIZE]; |
597 | struct radeon_connector_atom_dig *dig = radeon_connector->con_priv; | 555 | struct radeon_connector_atom_dig *dig = radeon_connector->con_priv; |
598 | 556 | ||
599 | if (!radeon_dp_get_link_status(radeon_connector, link_status)) | 557 | if (drm_dp_dpcd_read_link_status(&dig->dp_i2c_bus->aux, link_status) <= 0) |
600 | return false; | 558 | return false; |
601 | if (drm_dp_channel_eq_ok(link_status, dig->dp_lane_count)) | 559 | if (drm_dp_channel_eq_ok(link_status, dig->dp_lane_count)) |
602 | return false; | 560 | return false; |
603 | return true; | 561 | return true; |
604 | } | 562 | } |
605 | 563 | ||
564 | void radeon_dp_set_rx_power_state(struct drm_connector *connector, | ||
565 | u8 power_state) | ||
566 | { | ||
567 | struct radeon_connector *radeon_connector = to_radeon_connector(connector); | ||
568 | struct radeon_connector_atom_dig *dig_connector; | ||
569 | |||
570 | if (!radeon_connector->con_priv) | ||
571 | return; | ||
572 | |||
573 | dig_connector = radeon_connector->con_priv; | ||
574 | |||
575 | /* power up/down the sink */ | ||
576 | if (dig_connector->dpcd[0] >= 0x11) { | ||
577 | drm_dp_dpcd_writeb(&dig_connector->dp_i2c_bus->aux, | ||
578 | DP_SET_POWER, power_state); | ||
579 | usleep_range(1000, 2000); | ||
580 | } | ||
581 | } | ||
582 | |||
583 | |||
606 | struct radeon_dp_link_train_info { | 584 | struct radeon_dp_link_train_info { |
607 | struct radeon_device *rdev; | 585 | struct radeon_device *rdev; |
608 | struct drm_encoder *encoder; | 586 | struct drm_encoder *encoder; |
609 | struct drm_connector *connector; | 587 | struct drm_connector *connector; |
610 | struct radeon_connector *radeon_connector; | ||
611 | int enc_id; | 588 | int enc_id; |
612 | int dp_clock; | 589 | int dp_clock; |
613 | int dp_lane_count; | 590 | int dp_lane_count; |
@@ -617,6 +594,7 @@ struct radeon_dp_link_train_info { | |||
617 | u8 link_status[DP_LINK_STATUS_SIZE]; | 594 | u8 link_status[DP_LINK_STATUS_SIZE]; |
618 | u8 tries; | 595 | u8 tries; |
619 | bool use_dpencoder; | 596 | bool use_dpencoder; |
597 | struct drm_dp_aux *aux; | ||
620 | }; | 598 | }; |
621 | 599 | ||
622 | static void radeon_dp_update_vs_emph(struct radeon_dp_link_train_info *dp_info) | 600 | static void radeon_dp_update_vs_emph(struct radeon_dp_link_train_info *dp_info) |
@@ -627,8 +605,8 @@ static void radeon_dp_update_vs_emph(struct radeon_dp_link_train_info *dp_info) | |||
627 | 0, dp_info->train_set[0]); /* sets all lanes at once */ | 605 | 0, dp_info->train_set[0]); /* sets all lanes at once */ |
628 | 606 | ||
629 | /* set the vs/emph on the sink */ | 607 | /* set the vs/emph on the sink */ |
630 | radeon_dp_aux_native_write(dp_info->radeon_connector, DP_TRAINING_LANE0_SET, | 608 | drm_dp_dpcd_write(dp_info->aux, DP_TRAINING_LANE0_SET, |
631 | dp_info->train_set, dp_info->dp_lane_count, 0); | 609 | dp_info->train_set, dp_info->dp_lane_count); |
632 | } | 610 | } |
633 | 611 | ||
634 | static void radeon_dp_set_tp(struct radeon_dp_link_train_info *dp_info, int tp) | 612 | static void radeon_dp_set_tp(struct radeon_dp_link_train_info *dp_info, int tp) |
@@ -663,7 +641,7 @@ static void radeon_dp_set_tp(struct radeon_dp_link_train_info *dp_info, int tp) | |||
663 | } | 641 | } |
664 | 642 | ||
665 | /* enable training pattern on the sink */ | 643 | /* enable training pattern on the sink */ |
666 | radeon_write_dpcd_reg(dp_info->radeon_connector, DP_TRAINING_PATTERN_SET, tp); | 644 | drm_dp_dpcd_writeb(dp_info->aux, DP_TRAINING_PATTERN_SET, tp); |
667 | } | 645 | } |
668 | 646 | ||
669 | static int radeon_dp_link_train_init(struct radeon_dp_link_train_info *dp_info) | 647 | static int radeon_dp_link_train_init(struct radeon_dp_link_train_info *dp_info) |
@@ -673,34 +651,30 @@ static int radeon_dp_link_train_init(struct radeon_dp_link_train_info *dp_info) | |||
673 | u8 tmp; | 651 | u8 tmp; |
674 | 652 | ||
675 | /* power up the sink */ | 653 | /* power up the sink */ |
676 | if (dp_info->dpcd[0] >= 0x11) { | 654 | radeon_dp_set_rx_power_state(dp_info->connector, DP_SET_POWER_D0); |
677 | radeon_write_dpcd_reg(dp_info->radeon_connector, | ||
678 | DP_SET_POWER, DP_SET_POWER_D0); | ||
679 | usleep_range(1000, 2000); | ||
680 | } | ||
681 | 655 | ||
682 | /* possibly enable downspread on the sink */ | 656 | /* possibly enable downspread on the sink */ |
683 | if (dp_info->dpcd[3] & 0x1) | 657 | if (dp_info->dpcd[3] & 0x1) |
684 | radeon_write_dpcd_reg(dp_info->radeon_connector, | 658 | drm_dp_dpcd_writeb(dp_info->aux, |
685 | DP_DOWNSPREAD_CTRL, DP_SPREAD_AMP_0_5); | 659 | DP_DOWNSPREAD_CTRL, DP_SPREAD_AMP_0_5); |
686 | else | 660 | else |
687 | radeon_write_dpcd_reg(dp_info->radeon_connector, | 661 | drm_dp_dpcd_writeb(dp_info->aux, |
688 | DP_DOWNSPREAD_CTRL, 0); | 662 | DP_DOWNSPREAD_CTRL, 0); |
689 | 663 | ||
690 | if ((dp_info->connector->connector_type == DRM_MODE_CONNECTOR_eDP) && | 664 | if ((dp_info->connector->connector_type == DRM_MODE_CONNECTOR_eDP) && |
691 | (dig->panel_mode == DP_PANEL_MODE_INTERNAL_DP2_MODE)) { | 665 | (dig->panel_mode == DP_PANEL_MODE_INTERNAL_DP2_MODE)) { |
692 | radeon_write_dpcd_reg(dp_info->radeon_connector, DP_EDP_CONFIGURATION_SET, 1); | 666 | drm_dp_dpcd_writeb(dp_info->aux, DP_EDP_CONFIGURATION_SET, 1); |
693 | } | 667 | } |
694 | 668 | ||
695 | /* set the lane count on the sink */ | 669 | /* set the lane count on the sink */ |
696 | tmp = dp_info->dp_lane_count; | 670 | tmp = dp_info->dp_lane_count; |
697 | if (drm_dp_enhanced_frame_cap(dp_info->dpcd)) | 671 | if (drm_dp_enhanced_frame_cap(dp_info->dpcd)) |
698 | tmp |= DP_LANE_COUNT_ENHANCED_FRAME_EN; | 672 | tmp |= DP_LANE_COUNT_ENHANCED_FRAME_EN; |
699 | radeon_write_dpcd_reg(dp_info->radeon_connector, DP_LANE_COUNT_SET, tmp); | 673 | drm_dp_dpcd_writeb(dp_info->aux, DP_LANE_COUNT_SET, tmp); |
700 | 674 | ||
701 | /* set the link rate on the sink */ | 675 | /* set the link rate on the sink */ |
702 | tmp = drm_dp_link_rate_to_bw_code(dp_info->dp_clock); | 676 | tmp = drm_dp_link_rate_to_bw_code(dp_info->dp_clock); |
703 | radeon_write_dpcd_reg(dp_info->radeon_connector, DP_LINK_BW_SET, tmp); | 677 | drm_dp_dpcd_writeb(dp_info->aux, DP_LINK_BW_SET, tmp); |
704 | 678 | ||
705 | /* start training on the source */ | 679 | /* start training on the source */ |
706 | if (ASIC_IS_DCE4(dp_info->rdev) || !dp_info->use_dpencoder) | 680 | if (ASIC_IS_DCE4(dp_info->rdev) || !dp_info->use_dpencoder) |
@@ -711,9 +685,9 @@ static int radeon_dp_link_train_init(struct radeon_dp_link_train_info *dp_info) | |||
711 | dp_info->dp_clock, dp_info->enc_id, 0); | 685 | dp_info->dp_clock, dp_info->enc_id, 0); |
712 | 686 | ||
713 | /* disable the training pattern on the sink */ | 687 | /* disable the training pattern on the sink */ |
714 | radeon_write_dpcd_reg(dp_info->radeon_connector, | 688 | drm_dp_dpcd_writeb(dp_info->aux, |
715 | DP_TRAINING_PATTERN_SET, | 689 | DP_TRAINING_PATTERN_SET, |
716 | DP_TRAINING_PATTERN_DISABLE); | 690 | DP_TRAINING_PATTERN_DISABLE); |
717 | 691 | ||
718 | return 0; | 692 | return 0; |
719 | } | 693 | } |
@@ -723,9 +697,9 @@ static int radeon_dp_link_train_finish(struct radeon_dp_link_train_info *dp_info | |||
723 | udelay(400); | 697 | udelay(400); |
724 | 698 | ||
725 | /* disable the training pattern on the sink */ | 699 | /* disable the training pattern on the sink */ |
726 | radeon_write_dpcd_reg(dp_info->radeon_connector, | 700 | drm_dp_dpcd_writeb(dp_info->aux, |
727 | DP_TRAINING_PATTERN_SET, | 701 | DP_TRAINING_PATTERN_SET, |
728 | DP_TRAINING_PATTERN_DISABLE); | 702 | DP_TRAINING_PATTERN_DISABLE); |
729 | 703 | ||
730 | /* disable the training pattern on the source */ | 704 | /* disable the training pattern on the source */ |
731 | if (ASIC_IS_DCE4(dp_info->rdev) || !dp_info->use_dpencoder) | 705 | if (ASIC_IS_DCE4(dp_info->rdev) || !dp_info->use_dpencoder) |
@@ -757,7 +731,8 @@ static int radeon_dp_link_train_cr(struct radeon_dp_link_train_info *dp_info) | |||
757 | while (1) { | 731 | while (1) { |
758 | drm_dp_link_train_clock_recovery_delay(dp_info->dpcd); | 732 | drm_dp_link_train_clock_recovery_delay(dp_info->dpcd); |
759 | 733 | ||
760 | if (!radeon_dp_get_link_status(dp_info->radeon_connector, dp_info->link_status)) { | 734 | if (drm_dp_dpcd_read_link_status(dp_info->aux, |
735 | dp_info->link_status) <= 0) { | ||
761 | DRM_ERROR("displayport link status failed\n"); | 736 | DRM_ERROR("displayport link status failed\n"); |
762 | break; | 737 | break; |
763 | } | 738 | } |
@@ -819,7 +794,8 @@ static int radeon_dp_link_train_ce(struct radeon_dp_link_train_info *dp_info) | |||
819 | while (1) { | 794 | while (1) { |
820 | drm_dp_link_train_channel_eq_delay(dp_info->dpcd); | 795 | drm_dp_link_train_channel_eq_delay(dp_info->dpcd); |
821 | 796 | ||
822 | if (!radeon_dp_get_link_status(dp_info->radeon_connector, dp_info->link_status)) { | 797 | if (drm_dp_dpcd_read_link_status(dp_info->aux, |
798 | dp_info->link_status) <= 0) { | ||
823 | DRM_ERROR("displayport link status failed\n"); | 799 | DRM_ERROR("displayport link status failed\n"); |
824 | break; | 800 | break; |
825 | } | 801 | } |
@@ -902,7 +878,7 @@ void radeon_dp_link_train(struct drm_encoder *encoder, | |||
902 | else | 878 | else |
903 | dp_info.enc_id |= ATOM_DP_CONFIG_LINK_A; | 879 | dp_info.enc_id |= ATOM_DP_CONFIG_LINK_A; |
904 | 880 | ||
905 | tmp = radeon_read_dpcd_reg(radeon_connector, DP_MAX_LANE_COUNT); | 881 | drm_dp_dpcd_readb(&dig_connector->dp_i2c_bus->aux, DP_MAX_LANE_COUNT, &tmp); |
906 | if (ASIC_IS_DCE5(rdev) && (tmp & DP_TPS3_SUPPORTED)) | 882 | if (ASIC_IS_DCE5(rdev) && (tmp & DP_TPS3_SUPPORTED)) |
907 | dp_info.tp3_supported = true; | 883 | dp_info.tp3_supported = true; |
908 | else | 884 | else |
@@ -912,9 +888,9 @@ void radeon_dp_link_train(struct drm_encoder *encoder, | |||
912 | dp_info.rdev = rdev; | 888 | dp_info.rdev = rdev; |
913 | dp_info.encoder = encoder; | 889 | dp_info.encoder = encoder; |
914 | dp_info.connector = connector; | 890 | dp_info.connector = connector; |
915 | dp_info.radeon_connector = radeon_connector; | ||
916 | dp_info.dp_lane_count = dig_connector->dp_lane_count; | 891 | dp_info.dp_lane_count = dig_connector->dp_lane_count; |
917 | dp_info.dp_clock = dig_connector->dp_clock; | 892 | dp_info.dp_clock = dig_connector->dp_clock; |
893 | dp_info.aux = &dig_connector->dp_i2c_bus->aux; | ||
918 | 894 | ||
919 | if (radeon_dp_link_train_init(&dp_info)) | 895 | if (radeon_dp_link_train_init(&dp_info)) |
920 | goto done; | 896 | goto done; |
diff --git a/drivers/gpu/drm/radeon/atombios_encoders.c b/drivers/gpu/drm/radeon/atombios_encoders.c index 607dc14d195e..e6eb5097597f 100644 --- a/drivers/gpu/drm/radeon/atombios_encoders.c +++ b/drivers/gpu/drm/radeon/atombios_encoders.c | |||
@@ -1633,10 +1633,16 @@ radeon_atom_encoder_dpms_dig(struct drm_encoder *encoder, int mode) | |||
1633 | struct drm_connector *connector = radeon_get_connector_for_encoder(encoder); | 1633 | struct drm_connector *connector = radeon_get_connector_for_encoder(encoder); |
1634 | struct radeon_connector *radeon_connector = NULL; | 1634 | struct radeon_connector *radeon_connector = NULL; |
1635 | struct radeon_connector_atom_dig *radeon_dig_connector = NULL; | 1635 | struct radeon_connector_atom_dig *radeon_dig_connector = NULL; |
1636 | bool travis_quirk = false; | ||
1636 | 1637 | ||
1637 | if (connector) { | 1638 | if (connector) { |
1638 | radeon_connector = to_radeon_connector(connector); | 1639 | radeon_connector = to_radeon_connector(connector); |
1639 | radeon_dig_connector = radeon_connector->con_priv; | 1640 | radeon_dig_connector = radeon_connector->con_priv; |
1641 | if ((radeon_connector_encoder_get_dp_bridge_encoder_id(connector) == | ||
1642 | ENCODER_OBJECT_ID_TRAVIS) && | ||
1643 | (radeon_encoder->devices & (ATOM_DEVICE_LCD_SUPPORT)) && | ||
1644 | !ASIC_IS_DCE5(rdev)) | ||
1645 | travis_quirk = true; | ||
1640 | } | 1646 | } |
1641 | 1647 | ||
1642 | switch (mode) { | 1648 | switch (mode) { |
@@ -1657,17 +1663,13 @@ radeon_atom_encoder_dpms_dig(struct drm_encoder *encoder, int mode) | |||
1657 | atombios_external_encoder_setup(encoder, ext_encoder, | 1663 | atombios_external_encoder_setup(encoder, ext_encoder, |
1658 | EXTERNAL_ENCODER_ACTION_V3_ENCODER_SETUP); | 1664 | EXTERNAL_ENCODER_ACTION_V3_ENCODER_SETUP); |
1659 | } | 1665 | } |
1660 | atombios_dig_transmitter_setup(encoder, ATOM_TRANSMITTER_ACTION_ENABLE, 0, 0); | ||
1661 | } else if (ASIC_IS_DCE4(rdev)) { | 1666 | } else if (ASIC_IS_DCE4(rdev)) { |
1662 | /* setup and enable the encoder */ | 1667 | /* setup and enable the encoder */ |
1663 | atombios_dig_encoder_setup(encoder, ATOM_ENCODER_CMD_SETUP, 0); | 1668 | atombios_dig_encoder_setup(encoder, ATOM_ENCODER_CMD_SETUP, 0); |
1664 | /* enable the transmitter */ | ||
1665 | atombios_dig_transmitter_setup(encoder, ATOM_TRANSMITTER_ACTION_ENABLE, 0, 0); | ||
1666 | } else { | 1669 | } else { |
1667 | /* setup and enable the encoder and transmitter */ | 1670 | /* setup and enable the encoder and transmitter */ |
1668 | atombios_dig_encoder_setup(encoder, ATOM_ENABLE, 0); | 1671 | atombios_dig_encoder_setup(encoder, ATOM_ENABLE, 0); |
1669 | atombios_dig_transmitter_setup(encoder, ATOM_TRANSMITTER_ACTION_SETUP, 0, 0); | 1672 | atombios_dig_transmitter_setup(encoder, ATOM_TRANSMITTER_ACTION_SETUP, 0, 0); |
1670 | atombios_dig_transmitter_setup(encoder, ATOM_TRANSMITTER_ACTION_ENABLE, 0, 0); | ||
1671 | } | 1673 | } |
1672 | if (ENCODER_MODE_IS_DP(atombios_get_encoder_mode(encoder)) && connector) { | 1674 | if (ENCODER_MODE_IS_DP(atombios_get_encoder_mode(encoder)) && connector) { |
1673 | if (connector->connector_type == DRM_MODE_CONNECTOR_eDP) { | 1675 | if (connector->connector_type == DRM_MODE_CONNECTOR_eDP) { |
@@ -1675,68 +1677,56 @@ radeon_atom_encoder_dpms_dig(struct drm_encoder *encoder, int mode) | |||
1675 | ATOM_TRANSMITTER_ACTION_POWER_ON); | 1677 | ATOM_TRANSMITTER_ACTION_POWER_ON); |
1676 | radeon_dig_connector->edp_on = true; | 1678 | radeon_dig_connector->edp_on = true; |
1677 | } | 1679 | } |
1680 | } | ||
1681 | /* enable the transmitter */ | ||
1682 | atombios_dig_transmitter_setup(encoder, ATOM_TRANSMITTER_ACTION_ENABLE, 0, 0); | ||
1683 | if (ENCODER_MODE_IS_DP(atombios_get_encoder_mode(encoder)) && connector) { | ||
1684 | /* DP_SET_POWER_D0 is set in radeon_dp_link_train */ | ||
1678 | radeon_dp_link_train(encoder, connector); | 1685 | radeon_dp_link_train(encoder, connector); |
1679 | if (ASIC_IS_DCE4(rdev)) | 1686 | if (ASIC_IS_DCE4(rdev)) |
1680 | atombios_dig_encoder_setup(encoder, ATOM_ENCODER_CMD_DP_VIDEO_ON, 0); | 1687 | atombios_dig_encoder_setup(encoder, ATOM_ENCODER_CMD_DP_VIDEO_ON, 0); |
1681 | } | 1688 | } |
1682 | if (radeon_encoder->devices & (ATOM_DEVICE_LCD_SUPPORT)) | 1689 | if (radeon_encoder->devices & (ATOM_DEVICE_LCD_SUPPORT)) |
1683 | atombios_dig_transmitter_setup(encoder, ATOM_TRANSMITTER_ACTION_LCD_BLON, 0, 0); | 1690 | atombios_dig_transmitter_setup(encoder, |
1691 | ATOM_TRANSMITTER_ACTION_LCD_BLON, 0, 0); | ||
1692 | if (ext_encoder) | ||
1693 | atombios_external_encoder_setup(encoder, ext_encoder, ATOM_ENABLE); | ||
1684 | break; | 1694 | break; |
1685 | case DRM_MODE_DPMS_STANDBY: | 1695 | case DRM_MODE_DPMS_STANDBY: |
1686 | case DRM_MODE_DPMS_SUSPEND: | 1696 | case DRM_MODE_DPMS_SUSPEND: |
1687 | case DRM_MODE_DPMS_OFF: | 1697 | case DRM_MODE_DPMS_OFF: |
1688 | if (ASIC_IS_DCE4(rdev)) { | 1698 | if (ASIC_IS_DCE4(rdev)) { |
1699 | if (ENCODER_MODE_IS_DP(atombios_get_encoder_mode(encoder)) && connector) | ||
1700 | atombios_dig_encoder_setup(encoder, ATOM_ENCODER_CMD_DP_VIDEO_OFF, 0); | ||
1701 | } | ||
1702 | if (ext_encoder) | ||
1703 | atombios_external_encoder_setup(encoder, ext_encoder, ATOM_DISABLE); | ||
1704 | if (radeon_encoder->devices & (ATOM_DEVICE_LCD_SUPPORT)) | ||
1705 | atombios_dig_transmitter_setup(encoder, | ||
1706 | ATOM_TRANSMITTER_ACTION_LCD_BLOFF, 0, 0); | ||
1707 | |||
1708 | if (ENCODER_MODE_IS_DP(atombios_get_encoder_mode(encoder)) && | ||
1709 | connector && !travis_quirk) | ||
1710 | radeon_dp_set_rx_power_state(connector, DP_SET_POWER_D3); | ||
1711 | if (ASIC_IS_DCE4(rdev)) { | ||
1689 | /* disable the transmitter */ | 1712 | /* disable the transmitter */ |
1690 | atombios_dig_transmitter_setup(encoder, ATOM_TRANSMITTER_ACTION_DISABLE, 0, 0); | 1713 | atombios_dig_transmitter_setup(encoder, |
1714 | ATOM_TRANSMITTER_ACTION_DISABLE, 0, 0); | ||
1691 | } else { | 1715 | } else { |
1692 | /* disable the encoder and transmitter */ | 1716 | /* disable the encoder and transmitter */ |
1693 | atombios_dig_transmitter_setup(encoder, ATOM_TRANSMITTER_ACTION_DISABLE, 0, 0); | 1717 | atombios_dig_transmitter_setup(encoder, |
1718 | ATOM_TRANSMITTER_ACTION_DISABLE, 0, 0); | ||
1694 | atombios_dig_encoder_setup(encoder, ATOM_DISABLE, 0); | 1719 | atombios_dig_encoder_setup(encoder, ATOM_DISABLE, 0); |
1695 | } | 1720 | } |
1696 | if (ENCODER_MODE_IS_DP(atombios_get_encoder_mode(encoder)) && connector) { | 1721 | if (ENCODER_MODE_IS_DP(atombios_get_encoder_mode(encoder)) && connector) { |
1697 | if (ASIC_IS_DCE4(rdev)) | 1722 | if (travis_quirk) |
1698 | atombios_dig_encoder_setup(encoder, ATOM_ENCODER_CMD_DP_VIDEO_OFF, 0); | 1723 | radeon_dp_set_rx_power_state(connector, DP_SET_POWER_D3); |
1699 | if (connector->connector_type == DRM_MODE_CONNECTOR_eDP) { | 1724 | if (connector->connector_type == DRM_MODE_CONNECTOR_eDP) { |
1700 | atombios_set_edp_panel_power(connector, | 1725 | atombios_set_edp_panel_power(connector, |
1701 | ATOM_TRANSMITTER_ACTION_POWER_OFF); | 1726 | ATOM_TRANSMITTER_ACTION_POWER_OFF); |
1702 | radeon_dig_connector->edp_on = false; | 1727 | radeon_dig_connector->edp_on = false; |
1703 | } | 1728 | } |
1704 | } | 1729 | } |
1705 | if (radeon_encoder->devices & (ATOM_DEVICE_LCD_SUPPORT)) | ||
1706 | atombios_dig_transmitter_setup(encoder, ATOM_TRANSMITTER_ACTION_LCD_BLOFF, 0, 0); | ||
1707 | break; | ||
1708 | } | ||
1709 | } | ||
1710 | |||
1711 | static void | ||
1712 | radeon_atom_encoder_dpms_ext(struct drm_encoder *encoder, | ||
1713 | struct drm_encoder *ext_encoder, | ||
1714 | int mode) | ||
1715 | { | ||
1716 | struct drm_device *dev = encoder->dev; | ||
1717 | struct radeon_device *rdev = dev->dev_private; | ||
1718 | |||
1719 | switch (mode) { | ||
1720 | case DRM_MODE_DPMS_ON: | ||
1721 | default: | ||
1722 | if (ASIC_IS_DCE41(rdev) || ASIC_IS_DCE61(rdev)) { | ||
1723 | atombios_external_encoder_setup(encoder, ext_encoder, | ||
1724 | EXTERNAL_ENCODER_ACTION_V3_ENABLE_OUTPUT); | ||
1725 | atombios_external_encoder_setup(encoder, ext_encoder, | ||
1726 | EXTERNAL_ENCODER_ACTION_V3_ENCODER_BLANKING_OFF); | ||
1727 | } else | ||
1728 | atombios_external_encoder_setup(encoder, ext_encoder, ATOM_ENABLE); | ||
1729 | break; | ||
1730 | case DRM_MODE_DPMS_STANDBY: | ||
1731 | case DRM_MODE_DPMS_SUSPEND: | ||
1732 | case DRM_MODE_DPMS_OFF: | ||
1733 | if (ASIC_IS_DCE41(rdev) || ASIC_IS_DCE61(rdev)) { | ||
1734 | atombios_external_encoder_setup(encoder, ext_encoder, | ||
1735 | EXTERNAL_ENCODER_ACTION_V3_ENCODER_BLANKING); | ||
1736 | atombios_external_encoder_setup(encoder, ext_encoder, | ||
1737 | EXTERNAL_ENCODER_ACTION_V3_DISABLE_OUTPUT); | ||
1738 | } else | ||
1739 | atombios_external_encoder_setup(encoder, ext_encoder, ATOM_DISABLE); | ||
1740 | break; | 1730 | break; |
1741 | } | 1731 | } |
1742 | } | 1732 | } |
@@ -1747,7 +1737,6 @@ radeon_atom_encoder_dpms(struct drm_encoder *encoder, int mode) | |||
1747 | struct drm_device *dev = encoder->dev; | 1737 | struct drm_device *dev = encoder->dev; |
1748 | struct radeon_device *rdev = dev->dev_private; | 1738 | struct radeon_device *rdev = dev->dev_private; |
1749 | struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder); | 1739 | struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder); |
1750 | struct drm_encoder *ext_encoder = radeon_get_external_encoder(encoder); | ||
1751 | 1740 | ||
1752 | DRM_DEBUG_KMS("encoder dpms %d to mode %d, devices %08x, active_devices %08x\n", | 1741 | DRM_DEBUG_KMS("encoder dpms %d to mode %d, devices %08x, active_devices %08x\n", |
1753 | radeon_encoder->encoder_id, mode, radeon_encoder->devices, | 1742 | radeon_encoder->encoder_id, mode, radeon_encoder->devices, |
@@ -1807,9 +1796,6 @@ radeon_atom_encoder_dpms(struct drm_encoder *encoder, int mode) | |||
1807 | return; | 1796 | return; |
1808 | } | 1797 | } |
1809 | 1798 | ||
1810 | if (ext_encoder) | ||
1811 | radeon_atom_encoder_dpms_ext(encoder, ext_encoder, mode); | ||
1812 | |||
1813 | radeon_atombios_encoder_dpms_scratch_regs(encoder, (mode == DRM_MODE_DPMS_ON) ? true : false); | 1799 | radeon_atombios_encoder_dpms_scratch_regs(encoder, (mode == DRM_MODE_DPMS_ON) ? true : false); |
1814 | 1800 | ||
1815 | } | 1801 | } |
diff --git a/drivers/gpu/drm/radeon/cik.c b/drivers/gpu/drm/radeon/cik.c index 0ae991d3289a..62fefbbaf263 100644 --- a/drivers/gpu/drm/radeon/cik.c +++ b/drivers/gpu/drm/radeon/cik.c | |||
@@ -2029,6 +2029,7 @@ static void cik_tiling_mode_table_init(struct radeon_device *rdev) | |||
2029 | break; | 2029 | break; |
2030 | case 5: | 2030 | case 5: |
2031 | gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) | | 2031 | gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) | |
2032 | PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) | | ||
2032 | MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING)); | 2033 | MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING)); |
2033 | break; | 2034 | break; |
2034 | case 6: | 2035 | case 6: |
@@ -2049,6 +2050,7 @@ static void cik_tiling_mode_table_init(struct radeon_device *rdev) | |||
2049 | break; | 2050 | break; |
2050 | case 9: | 2051 | case 9: |
2051 | gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) | | 2052 | gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) | |
2053 | PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) | | ||
2052 | MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING)); | 2054 | MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING)); |
2053 | break; | 2055 | break; |
2054 | case 10: | 2056 | case 10: |
@@ -2071,6 +2073,7 @@ static void cik_tiling_mode_table_init(struct radeon_device *rdev) | |||
2071 | break; | 2073 | break; |
2072 | case 13: | 2074 | case 13: |
2073 | gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) | | 2075 | gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) | |
2076 | PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) | | ||
2074 | MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING)); | 2077 | MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING)); |
2075 | break; | 2078 | break; |
2076 | case 14: | 2079 | case 14: |
@@ -2093,6 +2096,7 @@ static void cik_tiling_mode_table_init(struct radeon_device *rdev) | |||
2093 | break; | 2096 | break; |
2094 | case 27: | 2097 | case 27: |
2095 | gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) | | 2098 | gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) | |
2099 | PIPE_CONFIG(ADDR_SURF_P16_32x32_16x16) | | ||
2096 | MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING)); | 2100 | MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING)); |
2097 | break; | 2101 | break; |
2098 | case 28: | 2102 | case 28: |
@@ -2247,6 +2251,7 @@ static void cik_tiling_mode_table_init(struct radeon_device *rdev) | |||
2247 | break; | 2251 | break; |
2248 | case 5: | 2252 | case 5: |
2249 | gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) | | 2253 | gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) | |
2254 | PIPE_CONFIG(ADDR_SURF_P8_32x32_16x16) | | ||
2250 | MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING)); | 2255 | MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING)); |
2251 | break; | 2256 | break; |
2252 | case 6: | 2257 | case 6: |
@@ -2267,6 +2272,7 @@ static void cik_tiling_mode_table_init(struct radeon_device *rdev) | |||
2267 | break; | 2272 | break; |
2268 | case 9: | 2273 | case 9: |
2269 | gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) | | 2274 | gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) | |
2275 | PIPE_CONFIG(ADDR_SURF_P8_32x32_16x16) | | ||
2270 | MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING)); | 2276 | MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING)); |
2271 | break; | 2277 | break; |
2272 | case 10: | 2278 | case 10: |
@@ -2289,6 +2295,7 @@ static void cik_tiling_mode_table_init(struct radeon_device *rdev) | |||
2289 | break; | 2295 | break; |
2290 | case 13: | 2296 | case 13: |
2291 | gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) | | 2297 | gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) | |
2298 | PIPE_CONFIG(ADDR_SURF_P8_32x32_16x16) | | ||
2292 | MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING)); | 2299 | MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING)); |
2293 | break; | 2300 | break; |
2294 | case 14: | 2301 | case 14: |
@@ -2311,6 +2318,7 @@ static void cik_tiling_mode_table_init(struct radeon_device *rdev) | |||
2311 | break; | 2318 | break; |
2312 | case 27: | 2319 | case 27: |
2313 | gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) | | 2320 | gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) | |
2321 | PIPE_CONFIG(ADDR_SURF_P8_32x32_16x16) | | ||
2314 | MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING)); | 2322 | MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING)); |
2315 | break; | 2323 | break; |
2316 | case 28: | 2324 | case 28: |
@@ -2467,6 +2475,7 @@ static void cik_tiling_mode_table_init(struct radeon_device *rdev) | |||
2467 | break; | 2475 | break; |
2468 | case 5: | 2476 | case 5: |
2469 | gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) | | 2477 | gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) | |
2478 | PIPE_CONFIG(ADDR_SURF_P4_16x16) | | ||
2470 | MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING)); | 2479 | MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING)); |
2471 | break; | 2480 | break; |
2472 | case 6: | 2481 | case 6: |
@@ -2487,6 +2496,7 @@ static void cik_tiling_mode_table_init(struct radeon_device *rdev) | |||
2487 | break; | 2496 | break; |
2488 | case 9: | 2497 | case 9: |
2489 | gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) | | 2498 | gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) | |
2499 | PIPE_CONFIG(ADDR_SURF_P4_16x16) | | ||
2490 | MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING)); | 2500 | MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING)); |
2491 | break; | 2501 | break; |
2492 | case 10: | 2502 | case 10: |
@@ -2509,6 +2519,7 @@ static void cik_tiling_mode_table_init(struct radeon_device *rdev) | |||
2509 | break; | 2519 | break; |
2510 | case 13: | 2520 | case 13: |
2511 | gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) | | 2521 | gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) | |
2522 | PIPE_CONFIG(ADDR_SURF_P4_16x16) | | ||
2512 | MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING)); | 2523 | MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING)); |
2513 | break; | 2524 | break; |
2514 | case 14: | 2525 | case 14: |
@@ -2531,6 +2542,7 @@ static void cik_tiling_mode_table_init(struct radeon_device *rdev) | |||
2531 | break; | 2542 | break; |
2532 | case 27: | 2543 | case 27: |
2533 | gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) | | 2544 | gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) | |
2545 | PIPE_CONFIG(ADDR_SURF_P4_16x16) | | ||
2534 | MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING)); | 2546 | MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING)); |
2535 | break; | 2547 | break; |
2536 | case 28: | 2548 | case 28: |
@@ -2593,6 +2605,7 @@ static void cik_tiling_mode_table_init(struct radeon_device *rdev) | |||
2593 | break; | 2605 | break; |
2594 | case 5: | 2606 | case 5: |
2595 | gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) | | 2607 | gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) | |
2608 | PIPE_CONFIG(ADDR_SURF_P4_8x16) | | ||
2596 | MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING)); | 2609 | MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING)); |
2597 | break; | 2610 | break; |
2598 | case 6: | 2611 | case 6: |
@@ -2613,6 +2626,7 @@ static void cik_tiling_mode_table_init(struct radeon_device *rdev) | |||
2613 | break; | 2626 | break; |
2614 | case 9: | 2627 | case 9: |
2615 | gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) | | 2628 | gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) | |
2629 | PIPE_CONFIG(ADDR_SURF_P4_8x16) | | ||
2616 | MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING)); | 2630 | MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING)); |
2617 | break; | 2631 | break; |
2618 | case 10: | 2632 | case 10: |
@@ -2635,6 +2649,7 @@ static void cik_tiling_mode_table_init(struct radeon_device *rdev) | |||
2635 | break; | 2649 | break; |
2636 | case 13: | 2650 | case 13: |
2637 | gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) | | 2651 | gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) | |
2652 | PIPE_CONFIG(ADDR_SURF_P4_8x16) | | ||
2638 | MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING)); | 2653 | MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING)); |
2639 | break; | 2654 | break; |
2640 | case 14: | 2655 | case 14: |
@@ -2657,6 +2672,7 @@ static void cik_tiling_mode_table_init(struct radeon_device *rdev) | |||
2657 | break; | 2672 | break; |
2658 | case 27: | 2673 | case 27: |
2659 | gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) | | 2674 | gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) | |
2675 | PIPE_CONFIG(ADDR_SURF_P4_8x16) | | ||
2660 | MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING)); | 2676 | MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING)); |
2661 | break; | 2677 | break; |
2662 | case 28: | 2678 | case 28: |
@@ -2813,6 +2829,7 @@ static void cik_tiling_mode_table_init(struct radeon_device *rdev) | |||
2813 | break; | 2829 | break; |
2814 | case 5: | 2830 | case 5: |
2815 | gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) | | 2831 | gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) | |
2832 | PIPE_CONFIG(ADDR_SURF_P2) | | ||
2816 | MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING)); | 2833 | MICRO_TILE_MODE_NEW(ADDR_SURF_DEPTH_MICRO_TILING)); |
2817 | break; | 2834 | break; |
2818 | case 6: | 2835 | case 6: |
@@ -2828,11 +2845,13 @@ static void cik_tiling_mode_table_init(struct radeon_device *rdev) | |||
2828 | TILE_SPLIT(split_equal_to_row_size)); | 2845 | TILE_SPLIT(split_equal_to_row_size)); |
2829 | break; | 2846 | break; |
2830 | case 8: | 2847 | case 8: |
2831 | gb_tile_moden = ARRAY_MODE(ARRAY_LINEAR_ALIGNED); | 2848 | gb_tile_moden = ARRAY_MODE(ARRAY_LINEAR_ALIGNED) | |
2849 | PIPE_CONFIG(ADDR_SURF_P2); | ||
2832 | break; | 2850 | break; |
2833 | case 9: | 2851 | case 9: |
2834 | gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) | | 2852 | gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) | |
2835 | MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING)); | 2853 | MICRO_TILE_MODE_NEW(ADDR_SURF_DISPLAY_MICRO_TILING) | |
2854 | PIPE_CONFIG(ADDR_SURF_P2)); | ||
2836 | break; | 2855 | break; |
2837 | case 10: | 2856 | case 10: |
2838 | gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) | | 2857 | gb_tile_moden = (ARRAY_MODE(ARRAY_2D_TILED_THIN1) | |
@@ -2854,6 +2873,7 @@ static void cik_tiling_mode_table_init(struct radeon_device *rdev) | |||
2854 | break; | 2873 | break; |
2855 | case 13: | 2874 | case 13: |
2856 | gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) | | 2875 | gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) | |
2876 | PIPE_CONFIG(ADDR_SURF_P2) | | ||
2857 | MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING)); | 2877 | MICRO_TILE_MODE_NEW(ADDR_SURF_THIN_MICRO_TILING)); |
2858 | break; | 2878 | break; |
2859 | case 14: | 2879 | case 14: |
@@ -2876,7 +2896,8 @@ static void cik_tiling_mode_table_init(struct radeon_device *rdev) | |||
2876 | break; | 2896 | break; |
2877 | case 27: | 2897 | case 27: |
2878 | gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) | | 2898 | gb_tile_moden = (ARRAY_MODE(ARRAY_1D_TILED_THIN1) | |
2879 | MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING)); | 2899 | MICRO_TILE_MODE_NEW(ADDR_SURF_ROTATED_MICRO_TILING) | |
2900 | PIPE_CONFIG(ADDR_SURF_P2)); | ||
2880 | break; | 2901 | break; |
2881 | case 28: | 2902 | case 28: |
2882 | gb_tile_moden = (ARRAY_MODE(ARRAY_PRT_2D_TILED_THIN1) | | 2903 | gb_tile_moden = (ARRAY_MODE(ARRAY_PRT_2D_TILED_THIN1) | |
diff --git a/drivers/gpu/drm/radeon/radeon_connectors.c b/drivers/gpu/drm/radeon/radeon_connectors.c index 82d4f865546e..ec958e86fd8b 100644 --- a/drivers/gpu/drm/radeon/radeon_connectors.c +++ b/drivers/gpu/drm/radeon/radeon_connectors.c | |||
@@ -1595,6 +1595,7 @@ radeon_add_atom_connector(struct drm_device *dev, | |||
1595 | uint32_t subpixel_order = SubPixelNone; | 1595 | uint32_t subpixel_order = SubPixelNone; |
1596 | bool shared_ddc = false; | 1596 | bool shared_ddc = false; |
1597 | bool is_dp_bridge = false; | 1597 | bool is_dp_bridge = false; |
1598 | bool has_aux = false; | ||
1598 | 1599 | ||
1599 | if (connector_type == DRM_MODE_CONNECTOR_Unknown) | 1600 | if (connector_type == DRM_MODE_CONNECTOR_Unknown) |
1600 | return; | 1601 | return; |
@@ -1672,7 +1673,9 @@ radeon_add_atom_connector(struct drm_device *dev, | |||
1672 | radeon_dig_connector->dp_i2c_bus = radeon_i2c_create_dp(dev, i2c_bus, "eDP-auxch"); | 1673 | radeon_dig_connector->dp_i2c_bus = radeon_i2c_create_dp(dev, i2c_bus, "eDP-auxch"); |
1673 | else | 1674 | else |
1674 | radeon_dig_connector->dp_i2c_bus = radeon_i2c_create_dp(dev, i2c_bus, "DP-auxch"); | 1675 | radeon_dig_connector->dp_i2c_bus = radeon_i2c_create_dp(dev, i2c_bus, "DP-auxch"); |
1675 | if (!radeon_dig_connector->dp_i2c_bus) | 1676 | if (radeon_dig_connector->dp_i2c_bus) |
1677 | has_aux = true; | ||
1678 | else | ||
1676 | DRM_ERROR("DP: Failed to assign dp ddc bus! Check dmesg for i2c errors.\n"); | 1679 | DRM_ERROR("DP: Failed to assign dp ddc bus! Check dmesg for i2c errors.\n"); |
1677 | radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus); | 1680 | radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus); |
1678 | if (!radeon_connector->ddc_bus) | 1681 | if (!radeon_connector->ddc_bus) |
@@ -1895,7 +1898,9 @@ radeon_add_atom_connector(struct drm_device *dev, | |||
1895 | if (!radeon_dig_connector->dp_i2c_bus) | 1898 | if (!radeon_dig_connector->dp_i2c_bus) |
1896 | DRM_ERROR("DP: Failed to assign dp ddc bus! Check dmesg for i2c errors.\n"); | 1899 | DRM_ERROR("DP: Failed to assign dp ddc bus! Check dmesg for i2c errors.\n"); |
1897 | radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus); | 1900 | radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus); |
1898 | if (!radeon_connector->ddc_bus) | 1901 | if (radeon_connector->ddc_bus) |
1902 | has_aux = true; | ||
1903 | else | ||
1899 | DRM_ERROR("DP: Failed to assign ddc bus! Check dmesg for i2c errors.\n"); | 1904 | DRM_ERROR("DP: Failed to assign ddc bus! Check dmesg for i2c errors.\n"); |
1900 | } | 1905 | } |
1901 | subpixel_order = SubPixelHorizontalRGB; | 1906 | subpixel_order = SubPixelHorizontalRGB; |
@@ -1939,7 +1944,9 @@ radeon_add_atom_connector(struct drm_device *dev, | |||
1939 | if (i2c_bus->valid) { | 1944 | if (i2c_bus->valid) { |
1940 | /* add DP i2c bus */ | 1945 | /* add DP i2c bus */ |
1941 | radeon_dig_connector->dp_i2c_bus = radeon_i2c_create_dp(dev, i2c_bus, "eDP-auxch"); | 1946 | radeon_dig_connector->dp_i2c_bus = radeon_i2c_create_dp(dev, i2c_bus, "eDP-auxch"); |
1942 | if (!radeon_dig_connector->dp_i2c_bus) | 1947 | if (radeon_dig_connector->dp_i2c_bus) |
1948 | has_aux = true; | ||
1949 | else | ||
1943 | DRM_ERROR("DP: Failed to assign dp ddc bus! Check dmesg for i2c errors.\n"); | 1950 | DRM_ERROR("DP: Failed to assign dp ddc bus! Check dmesg for i2c errors.\n"); |
1944 | radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus); | 1951 | radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus); |
1945 | if (!radeon_connector->ddc_bus) | 1952 | if (!radeon_connector->ddc_bus) |
@@ -2000,6 +2007,10 @@ radeon_add_atom_connector(struct drm_device *dev, | |||
2000 | 2007 | ||
2001 | connector->display_info.subpixel_order = subpixel_order; | 2008 | connector->display_info.subpixel_order = subpixel_order; |
2002 | drm_sysfs_connector_add(connector); | 2009 | drm_sysfs_connector_add(connector); |
2010 | |||
2011 | if (has_aux) | ||
2012 | radeon_dp_aux_init(radeon_connector); | ||
2013 | |||
2003 | return; | 2014 | return; |
2004 | 2015 | ||
2005 | failed: | 2016 | failed: |
diff --git a/drivers/gpu/drm/radeon/radeon_drv.c b/drivers/gpu/drm/radeon/radeon_drv.c index 4392b7c95ee6..e8b0284e34bb 100644 --- a/drivers/gpu/drm/radeon/radeon_drv.c +++ b/drivers/gpu/drm/radeon/radeon_drv.c | |||
@@ -79,7 +79,8 @@ | |||
79 | * 2.35.0 - Add CIK macrotile mode array query | 79 | * 2.35.0 - Add CIK macrotile mode array query |
80 | * 2.36.0 - Fix CIK DCE tiling setup | 80 | * 2.36.0 - Fix CIK DCE tiling setup |
81 | * 2.37.0 - allow GS ring setup on r6xx/r7xx | 81 | * 2.37.0 - allow GS ring setup on r6xx/r7xx |
82 | * 2.38.0 - RADEON_GEM_OP (GET_INITIAL_DOMAIN, SET_INITIAL_DOMAIN) | 82 | * 2.38.0 - RADEON_GEM_OP (GET_INITIAL_DOMAIN, SET_INITIAL_DOMAIN), |
83 | * CIK: 1D and linear tiling modes contain valid PIPE_CONFIG | ||
83 | */ | 84 | */ |
84 | #define KMS_DRIVER_MAJOR 2 | 85 | #define KMS_DRIVER_MAJOR 2 |
85 | #define KMS_DRIVER_MINOR 38 | 86 | #define KMS_DRIVER_MINOR 38 |
diff --git a/drivers/gpu/drm/radeon/radeon_mode.h b/drivers/gpu/drm/radeon/radeon_mode.h index 402dbe32c234..832d9fa1a4c4 100644 --- a/drivers/gpu/drm/radeon/radeon_mode.h +++ b/drivers/gpu/drm/radeon/radeon_mode.h | |||
@@ -192,6 +192,7 @@ struct radeon_i2c_chan { | |||
192 | struct i2c_algo_dp_aux_data dp; | 192 | struct i2c_algo_dp_aux_data dp; |
193 | } algo; | 193 | } algo; |
194 | struct radeon_i2c_bus_rec rec; | 194 | struct radeon_i2c_bus_rec rec; |
195 | struct drm_dp_aux aux; | ||
195 | }; | 196 | }; |
196 | 197 | ||
197 | /* mostly for macs, but really any system without connector tables */ | 198 | /* mostly for macs, but really any system without connector tables */ |
@@ -690,6 +691,9 @@ extern u8 radeon_dp_getsinktype(struct radeon_connector *radeon_connector); | |||
690 | extern bool radeon_dp_getdpcd(struct radeon_connector *radeon_connector); | 691 | extern bool radeon_dp_getdpcd(struct radeon_connector *radeon_connector); |
691 | extern int radeon_dp_get_panel_mode(struct drm_encoder *encoder, | 692 | extern int radeon_dp_get_panel_mode(struct drm_encoder *encoder, |
692 | struct drm_connector *connector); | 693 | struct drm_connector *connector); |
694 | extern void radeon_dp_set_rx_power_state(struct drm_connector *connector, | ||
695 | u8 power_state); | ||
696 | extern void radeon_dp_aux_init(struct radeon_connector *radeon_connector); | ||
693 | extern void atombios_dig_encoder_setup(struct drm_encoder *encoder, int action, int panel_mode); | 697 | extern void atombios_dig_encoder_setup(struct drm_encoder *encoder, int action, int panel_mode); |
694 | extern void radeon_atom_encoder_init(struct radeon_device *rdev); | 698 | extern void radeon_atom_encoder_init(struct radeon_device *rdev); |
695 | extern void radeon_atom_disp_eng_pll_init(struct radeon_device *rdev); | 699 | extern void radeon_atom_disp_eng_pll_init(struct radeon_device *rdev); |