On Sun, Feb 13, 2011 at 12:28 AM, Justin Mattock <justinmatt...@gmail.com> wrote: > > On Feb 11, 2011, at 5:15 PM, Alex Deucher wrote: > >> On Fri, Feb 11, 2011 at 10:57 AM, Justin Mattock >> <justinmatt...@gmail.com> wrote: >>> >>>> >>>> Better yet, can you try the attached patch on top of 2.6.38-rc4 or >>>> newer? >>>> >>>> Alex >>>> >>> >>> o.k. applied that patch... unfortunately Im seeing the flickering screen >>> and >>> the crud shows up.. >>> initially during boot everything looked fine, its when I suspended the >>> machine, upon wake-up >>> the flickering occurred. >>> kernel version is the current: 2.6.38-rc4-00107-gaa502b4 >> >> Can you try this patch? Try uncommenting the following lines to see >> if either of those flags work any better. Try them individually and >> together if possible and report back which, if any, helps. >> >> /*pll->flags |= RADEON_PLL_PREFER_MINM_OVER_MAXP;*/ >> >> /*if (ASIC_IS_AVIVO(rdev)) >> pll->flags |= RADEON_PLL_USE_FRAC_FB_DIV;*/ >> >> Thanks! >> >> Alex >> >>> >>> Justin P. Mattock >>> >> <0001-drm-radeon-kms-hopefully-fix-pll-issues-for-real-v2.patch> > > > alright.. again out of my office trying to make a living!! > Anyways I applied the two earlier patches, and added the previous post's > patch as well > (everything runs o.k. s2r etc...) > I can try for the above and see if I can pinpoint the piece of code that is > causing this(hopefully)
The attached patch is what I'm proposing to go upstream. Please test and let me know if it works ok for you. Alex > > Justin P. Mattock >
From 32f519d32ca9ca0f84e81953c8d9ddefdb7771d3 Mon Sep 17 00:00:00 2001 From: Alex Deucher <alexdeuc...@gmail.com> Date: Sun, 13 Feb 2011 18:38:23 -0500 Subject: [PATCH] drm/radeon/kms: hopefully fix pll issues for real (v3) The problematic boards have a recommended reference divider to be used when spread spectrum is enabled on the laptop panel. Enable the use of the recommended reference divider along with the new pll algo. v2: testing options v3: When using the fixed reference divider with LVDS, prefer min m to max p and use fractional feedback dividers. Signed-off-by: Alex Deucher <alexdeuc...@gmail.com> Cc: sta...@kernel.org --- drivers/gpu/drm/radeon/atombios_crtc.c | 22 ++++++++-------------- 1 files changed, 8 insertions(+), 14 deletions(-) diff --git a/drivers/gpu/drm/radeon/atombios_crtc.c b/drivers/gpu/drm/radeon/atombios_crtc.c index 1bf6122..3127a28 100644 --- a/drivers/gpu/drm/radeon/atombios_crtc.c +++ b/drivers/gpu/drm/radeon/atombios_crtc.c @@ -538,7 +538,6 @@ static u32 atombios_adjust_pll(struct drm_crtc *crtc, pll->flags |= RADEON_PLL_PREFER_HIGH_FB_DIV; else pll->flags |= RADEON_PLL_PREFER_LOW_REF_DIV; - } list_for_each_entry(encoder, &dev->mode_config.encoder_list, head) { @@ -555,29 +554,28 @@ static u32 atombios_adjust_pll(struct drm_crtc *crtc, dp_clock = dig_connector->dp_clock; } } -/* this might work properly with the new pll algo */ -#if 0 /* doesn't work properly on some laptops */ + /* use recommended ref_div for ss */ if (radeon_encoder->devices & (ATOM_DEVICE_LCD_SUPPORT)) { + pll->flags |= RADEON_PLL_PREFER_MINM_OVER_MAXP; if (ss_enabled) { if (ss->refdiv) { pll->flags |= RADEON_PLL_USE_REF_DIV; pll->reference_div = ss->refdiv; + if (ASIC_IS_AVIVO(rdev)) + pll->flags |= RADEON_PLL_USE_FRAC_FB_DIV; } } } -#endif + if (ASIC_IS_AVIVO(rdev)) { /* DVO wants 2x pixel clock if the DVO chip is in 12 bit mode */ if (radeon_encoder->encoder_id == ENCODER_OBJECT_ID_INTERNAL_KLDSCP_DVO1) adjusted_clock = mode->clock * 2; if (radeon_encoder->active_device & (ATOM_DEVICE_TV_SUPPORT)) pll->flags |= RADEON_PLL_PREFER_CLOSEST_LOWER; - /* rv515 needs more testing with this option */ - if (rdev->family != CHIP_RV515) { - if (radeon_encoder->devices & (ATOM_DEVICE_LCD_SUPPORT)) - pll->flags |= RADEON_PLL_IS_LCD; - } + if (radeon_encoder->devices & (ATOM_DEVICE_LCD_SUPPORT)) + pll->flags |= RADEON_PLL_IS_LCD; } else { if (encoder->encoder_type != DRM_MODE_ENCODER_DAC) pll->flags |= RADEON_PLL_NO_ODD_POST_DIV; @@ -957,11 +955,7 @@ static void atombios_crtc_set_pll(struct drm_crtc *crtc, struct drm_display_mode /* adjust pixel clock as needed */ adjusted_clock = atombios_adjust_pll(crtc, mode, pll, ss_enabled, &ss); - /* rv515 seems happier with the old algo */ - if (rdev->family == CHIP_RV515) - radeon_compute_pll_legacy(pll, adjusted_clock, &pll_clock, &fb_div, &frac_fb_div, - &ref_div, &post_div); - else if (ASIC_IS_AVIVO(rdev)) + if (ASIC_IS_AVIVO(rdev)) radeon_compute_pll_avivo(pll, adjusted_clock, &pll_clock, &fb_div, &frac_fb_div, &ref_div, &post_div); else -- 1.7.1.1
_______________________________________________ dri-devel mailing list dri-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/dri-devel