[PATCH] drm/radeon: Fix eDP for single-display iMac10,1 (v2)
Alex Deucher
alexdeucher at gmail.com
Fri Jul 7 14:37:21 UTC 2017
On Thu, Jul 6, 2017 at 10:57 PM, Mario Kleiner
<mario.kleiner.de at gmail.com> wrote:
> The late 2009, 27 inch Apple iMac10,1 has an
> internal eDP display and an external Mini-
> Displayport output, driven by a DCE-3.2, RV730
> Radeon Mobility HD-4670.
>
> The machine worked fine in a dual-display setup
> with eDP panel + externally connected HDMI
> or DVI-D digital display sink, connected via
> MiniDP to DVI or HDMI adapter.
>
> However, booting the machine single-display with
> only eDP panel results in a completely black
> display - even backlight powering off, as soon as
> the radeon modesetting driver loads.
>
> This patch fixes the single dispay eDP case by
> assigning encoders based on dig->linkb, similar
> to DCE-4+. While this should not be generally
> necessary (Alex: "...atom on normal boards
> should be able to handle any mapping."), Apple
> seems to use some special routing here.
>
> One remaining problem not solved by this patch
> is that an external Minidisplayport->DP sink
> does still not work on iMac10,1, whereas external
> DVI and HDMI sinks continue to work.
>
> The problem affects at least all tested kernels
> since Linux 3.13 - didn't test earlier kernels, so
> backporting to stable probably makes sense.
>
> v2: With the original patch from 2016, Alex was worried it
> will break other DCE3.2 systems. Use dmi_match() to
> apply this special encoder assignment only for the
> Apple iMac 10,1 from late 2009.
>
> Signed-off-by: Mario Kleiner <mario.kleiner.de at gmail.com>
> Cc: Alex Deucher <alexander.deucher at amd.com>
> Cc: Michel Dänzer <michel.daenzer at amd.com>
> Cc: <stable at vger.kernel.org>
Applied. thanks!
Alex
> ---
> drivers/gpu/drm/radeon/atombios_encoders.c | 13 +++++++++++--
> 1 file changed, 11 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/gpu/drm/radeon/atombios_encoders.c b/drivers/gpu/drm/radeon/atombios_encoders.c
> index fa4f8f0..e67ed38 100644
> --- a/drivers/gpu/drm/radeon/atombios_encoders.c
> +++ b/drivers/gpu/drm/radeon/atombios_encoders.c
> @@ -31,6 +31,7 @@
> #include "radeon_asic.h"
> #include "atom.h"
> #include <linux/backlight.h>
> +#include <linux/dmi.h>
>
> extern int atom_debug;
>
> @@ -2184,9 +2185,17 @@ int radeon_atom_pick_dig_encoder(struct drm_encoder *encoder, int fe_idx)
> goto assigned;
> }
>
> - /* on DCE32 and encoder can driver any block so just crtc id */
> + /*
> + * On DCE32 any encoder can drive any block so usually just use crtc id,
> + * but Apple thinks different at least on iMac10,1, so there use linkb,
> + * otherwise the internal eDP panel will stay dark.
> + */
> if (ASIC_IS_DCE32(rdev)) {
> - enc_idx = radeon_crtc->crtc_id;
> + if (dmi_match(DMI_PRODUCT_NAME, "iMac10,1"))
> + enc_idx = (dig->linkb) ? 1 : 0;
> + else
> + enc_idx = radeon_crtc->crtc_id;
> +
> goto assigned;
> }
>
> --
> 2.7.4
>
> _______________________________________________
> amd-gfx mailing list
> amd-gfx at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/amd-gfx
More information about the dri-devel
mailing list