hc
2023-12-11 d2ccde1c8e90d38cee87a1b0309ad2827f3fd30d
kernel/drivers/gpu/drm/amd/amdgpu/atombios_dp.c
....@@ -24,7 +24,7 @@
2424 * Alex Deucher
2525 * Jerome Glisse
2626 */
27
-#include <drm/drmP.h>
27
+
2828 #include <drm/amdgpu_drm.h>
2929 #include "amdgpu.h"
3030
....@@ -60,7 +60,7 @@
6060 u8 delay, u8 *ack)
6161 {
6262 struct drm_device *dev = chan->dev;
63
- struct amdgpu_device *adev = dev->dev_private;
63
+ struct amdgpu_device *adev = drm_to_adev(dev);
6464 union aux_channel_transaction args;
6565 int index = GetIndexIntoMasterTable(COMMAND, ProcessAuxChannelTransaction);
6666 unsigned char *base;
....@@ -186,16 +186,10 @@
186186
187187 void amdgpu_atombios_dp_aux_init(struct amdgpu_connector *amdgpu_connector)
188188 {
189
- int ret;
190
-
191189 amdgpu_connector->ddc_bus->rec.hpd = amdgpu_connector->hpd.hpd;
192
- amdgpu_connector->ddc_bus->aux.dev = amdgpu_connector->base.kdev;
193190 amdgpu_connector->ddc_bus->aux.transfer = amdgpu_atombios_dp_aux_transfer;
194
- ret = drm_dp_aux_register(&amdgpu_connector->ddc_bus->aux);
195
- if (!ret)
196
- amdgpu_connector->ddc_bus->has_aux = true;
197
-
198
- WARN(ret, "drm_dp_aux_register_i2c_bus() failed with error %d\n", ret);
191
+ drm_dp_aux_init(&amdgpu_connector->ddc_bus->aux);
192
+ amdgpu_connector->ddc_bus->has_aux = true;
199193 }
200194
201195 /***** general DP utility functions *****/
....@@ -311,7 +305,7 @@
311305 u8 amdgpu_atombios_dp_get_sinktype(struct amdgpu_connector *amdgpu_connector)
312306 {
313307 struct drm_device *dev = amdgpu_connector->base.dev;
314
- struct amdgpu_device *adev = dev->dev_private;
308
+ struct amdgpu_device *adev = drm_to_adev(dev);
315309
316310 return amdgpu_atombios_dp_encoder_service(adev, ATOM_DP_ACTION_GET_SINK_TYPE, 0,
317311 amdgpu_connector->ddc_bus->rec.i2c_id, 0);
....@@ -334,6 +328,22 @@
334328 buf[0], buf[1], buf[2]);
335329 }
336330
331
+static void amdgpu_atombios_dp_ds_ports(struct amdgpu_connector *amdgpu_connector)
332
+{
333
+ struct amdgpu_connector_atom_dig *dig_connector = amdgpu_connector->con_priv;
334
+ int ret;
335
+
336
+ if (dig_connector->dpcd[DP_DPCD_REV] > 0x10) {
337
+ ret = drm_dp_dpcd_read(&amdgpu_connector->ddc_bus->aux,
338
+ DP_DOWNSTREAM_PORT_0,
339
+ dig_connector->downstream_ports,
340
+ DP_MAX_DOWNSTREAM_PORTS);
341
+ if (ret)
342
+ memset(dig_connector->downstream_ports, 0,
343
+ DP_MAX_DOWNSTREAM_PORTS);
344
+ }
345
+}
346
+
337347 int amdgpu_atombios_dp_get_dpcd(struct amdgpu_connector *amdgpu_connector)
338348 {
339349 struct amdgpu_connector_atom_dig *dig_connector = amdgpu_connector->con_priv;
....@@ -349,7 +359,7 @@
349359 dig_connector->dpcd);
350360
351361 amdgpu_atombios_dp_probe_oui(amdgpu_connector);
352
-
362
+ amdgpu_atombios_dp_ds_ports(amdgpu_connector);
353363 return 0;
354364 }
355365
....@@ -361,15 +371,12 @@
361371 struct drm_connector *connector)
362372 {
363373 struct amdgpu_connector *amdgpu_connector = to_amdgpu_connector(connector);
364
- struct amdgpu_connector_atom_dig *dig_connector;
365374 int panel_mode = DP_PANEL_MODE_EXTERNAL_DP_MODE;
366375 u16 dp_bridge = amdgpu_connector_encoder_get_dp_bridge_encoder_id(connector);
367376 u8 tmp;
368377
369378 if (!amdgpu_connector->con_priv)
370379 return panel_mode;
371
-
372
- dig_connector = amdgpu_connector->con_priv;
373380
374381 if (dp_bridge != ENCODER_OBJECT_ID_NONE) {
375382 /* DP bridge chips */
....@@ -711,9 +718,8 @@
711718 struct drm_connector *connector)
712719 {
713720 struct drm_device *dev = encoder->dev;
714
- struct amdgpu_device *adev = dev->dev_private;
721
+ struct amdgpu_device *adev = drm_to_adev(dev);
715722 struct amdgpu_encoder *amdgpu_encoder = to_amdgpu_encoder(encoder);
716
- struct amdgpu_encoder_atom_dig *dig;
717723 struct amdgpu_connector *amdgpu_connector;
718724 struct amdgpu_connector_atom_dig *dig_connector;
719725 struct amdgpu_atombios_dp_link_train_info dp_info;
....@@ -721,7 +727,6 @@
721727
722728 if (!amdgpu_encoder->enc_priv)
723729 return;
724
- dig = amdgpu_encoder->enc_priv;
725730
726731 amdgpu_connector = to_amdgpu_connector(connector);
727732 if (!amdgpu_connector->con_priv)