From mboxrd@z Thu Jan 1 00:00:00 1970
From: bugzilla-daemon@freedesktop.org
Subject: [Bug 73530] Asus U38N: Black screen with Radeon driver in Linux
Date: Wed, 22 Oct 2014 21:14:20 +0000
Message-ID:
Alex Deucher
(In reply to Christian A=C3=9Ffalg from comment #63)
> I think / guess that I am having the same issues=
. I've got the same laptop,
> running Arch Linux. Mostly, I've been using the proprietary catalyst d=
river,
> since I never got the free driver working. The proprietary is working =
fine.
>=20
> What is the issue here? You've been playing with timings for the physi=
cal
> link to the internal panel? Is it so frickly? What would you need to f=
ix the
> issue? How can I help?
In reply to Christian A=C3=9Ffalg from comment #63)
> I think / guess that I am having the same issues=
. I've got the same laptop,
> running Arch Linux. Mostly, I've been using the proprietary catalyst d=
river,
> since I never got the free driver working. The proprietary is working =
fine.
>=20
> What is the issue here? You've been playing with timings for the physi=
cal
> link to the internal panel? Is it so frickly? What would you need to f=
ix the
> issue? How can I help?
I suggested that it might be a timing issue, and as per comment 54. However,
link training is successful so that monitor accepts the parameters that the
driver proposed, it just sometimes chooses not to light up. I would suggest
trying to tweak the link training timing as per comment 54, try disabling ss as
per comment 6, and finally, try =
making some slight changes to the modeset
sequence as per the attached patch. The patch adds a delay before enabling=
the
video stream and additionally calls the enable video stream code again in c=
ase
the monitor didn't quite get the signal the first time. E.g.,
diff --git a/drivers/gpu/drm/radeon/atombios_encoders.c
b/drivers/gpu/drm/radeon/atombios_encoders.c
index a7f2ddf..256ed7d 100644
--- a/drivers/gpu/drm/radeon/atombios_encoders.c
+++ b/drivers/gpu/drm/radeon/atombios_encoders.c
@@ -1687,8 +1687,12 @@ radeon_atom_encoder_dpms_dig(struct =
drm_encoder
*encoder, int mode)
if (ENCODER_MODE_IS_DP(atombios_get_encoder_mode(encoder)) =
&&
connector) {
/* DP_SET_POWER_D0 is set in radeon_dp_link_train */
radeon_dp_link_train(encoder, connector);
- if (ASIC_IS_DCE4(rdev))
+ if (ASIC_IS_DCE4(rdev)) {
+ udelay(50);
atombios_dig_encoder_setup(encoder,
ATOM_ENCODER_CMD_DP_VIDEO_ON, 0);
+ udelay(50);
+ atombios_dig_encoder_setup(encoder,
ATOM_ENCODER_CMD_DP_VIDEO_ON, 0);
+ }
}
if (radeon_encoder->devices & (ATOM_DEVICE_LCD_SUPPO=
RT))
atombios_dig_transmitter_setup(encoder,
Or move the backlight enable before the link training:
diff --git a/drivers/gpu/drm/radeon/atombios_encoders.c
b/drivers/gpu/drm/radeon/atombios_encoders.c
index a7f2ddf..3bfbfa4 100644
--- a/drivers/gpu/drm/radeon/atombios_encoders.c
+++ b/drivers/gpu/drm/radeon/atombios_encoders.c
@@ -1682,6 +1682,9 @@ radeon_atom_encoder_dpms_dig(struct d=
rm_encoder *encoder,
int mode)
radeon_dig_connector->edp_on =3D true;
}
}
+ if (radeon_encoder->devices & (ATOM_DEVICE_LCD_SUPPO=
RT))
+ atombios_dig_transmitter_setup(encoder,
+=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20
ATOM_TRANSMITTER_ACTION_LCD_BLON, 0, 0);
/* enable the transmitter */
atombios_dig_transmitter_setup(encoder,
ATOM_TRANSMITTER_ACTION_ENABLE, 0, 0);
if (ENCODER_MODE_IS_DP(atombios_get_encoder_mode(encoder)) =
&&
connector) {
@@ -1690,9 +1693,6 @@ radeon_atom_encoder_dpms_dig(struct d=
rm_encoder *encoder,
int mode)
if (ASIC_IS_DCE4(rdev))
atombios_dig_encoder_setup(encoder,
ATOM_ENCODER_CMD_DP_VIDEO_ON, 0);
}
- if (radeon_encoder->devices & (ATOM_DEVICE_LCD_SUPPO=
RT))
- atombios_dig_transmitter_setup(encoder,
-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20
ATOM_TRANSMITTER_ACTION_LCD_BLON, 0, 0);
if (ext_encoder)
atombios_external_encoder_setup(encoder, ext_encode=
r,
ATOM_ENABLE);
break;
Or drop the backlight control altogether to see if that helps:
diff --git a/drivers/gpu/drm/radeon/atombios_encoders.c
b/drivers/gpu/drm/radeon/atombios_encoders.c
index a7f2ddf..9713078 100644
--- a/drivers/gpu/drm/radeon/atombios_encoders.c
+++ b/drivers/gpu/drm/radeon/atombios_encoders.c
@@ -1690,9 +1690,6 @@ radeon_atom_encoder_dpms_dig(struct d=
rm_encoder *encoder,
int mode)
if (ASIC_IS_DCE4(rdev))
atombios_dig_encoder_setup(encoder,
ATOM_ENCODER_CMD_DP_VIDEO_ON, 0);
}
- if (radeon_encoder->devices & (ATOM_DEVICE_LCD_SUPPO=
RT))
- atombios_dig_transmitter_setup(encoder,
-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20
ATOM_TRANSMITTER_ACTION_LCD_BLON, 0, 0);
if (ext_encoder)
atombios_external_encoder_setup(encoder, ext_encode=
r,
ATOM_ENABLE);
break;
@@ -1705,10 +1702,6 @@ radeon_atom_encoder_dpms_dig(struct =
drm_encoder
*encoder, int mode)
}
if (ext_encoder)
atombios_external_encoder_setup(encoder, ext_encode=
r,
ATOM_DISABLE);
- if (radeon_encoder->devices & (ATOM_DEVICE_LCD_SUPPO=
RT))
- atombios_dig_transmitter_setup(encoder,
-=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20
ATOM_TRANSMITTER_ACTION_LCD_BLOFF, 0, 0);
-
if (ENCODER_MODE_IS_DP(atombios_get_encoder_mode(encoder)) =
&&
connector && !travis_quirk)
radeon_dp_set_rx_power_state(connector,
DP_SET_POWER_D3);