drm/radeon: validate PPLL in crtc fixup
authorAlex Deucher <alexander.deucher@amd.com>
Fri, 14 Sep 2012 16:30:51 +0000 (12:30 -0400)
committerAlex Deucher <alexander.deucher@amd.com>
Thu, 27 Sep 2012 14:22:40 +0000 (10:22 -0400)
This allows us to bail if we can't support the requested
setup from a PPLL perspective.  Prevents broken setups
from being attempted.

Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/radeon/atombios_crtc.c

index 8e32c5891be10f757fc18d2ba326c82bc3b2d4a4..96184d02c8d924969527c307d137a55664c6f96c 100644 (file)
@@ -1810,6 +1810,13 @@ static bool atombios_crtc_mode_fixup(struct drm_crtc *crtc,
                return false;
        if (!atombios_crtc_prepare_pll(crtc, adjusted_mode))
                return false;
+       /* pick pll */
+       radeon_crtc->pll_id = radeon_atom_pick_pll(crtc);
+       /* if we can't get a PPLL for a non-DP encoder, fail */
+       if ((radeon_crtc->pll_id == ATOM_PPLL_INVALID) &&
+           !ENCODER_MODE_IS_DP(atombios_get_encoder_mode(radeon_crtc->encoder)))
+               return false;
+
        return true;
 }
 
@@ -1820,8 +1827,6 @@ static void atombios_crtc_prepare(struct drm_crtc *crtc)
        struct radeon_device *rdev = dev->dev_private;
 
        radeon_crtc->in_mode_set = true;
-       /* pick pll */
-       radeon_crtc->pll_id = radeon_atom_pick_pll(crtc);
 
        /* disable crtc pair power gating before programming */
        if (ASIC_IS_DCE6(rdev))