Messages in this thread Patches in this message | | | Date | Thu, 22 Jan 2009 20:22:48 +0200 | Subject | [PATCH] atyfb: fix distorted image on PowerMacs | From | Risto Suominen <> |
| |
Since the complete re-write in 2.6.10, some PowerMacs (At least PowerMac 5500 and PowerMac G3 Beige rev A) with ATI Mach64 chip have suffered from unstable columns in their framebuffer image. This seems to depend on a value (4) read from PLL_EXT_CNTL register, which leads to incorrect DSP config parameters to be written to the chip. This patch uses a value calculated by aty_init_pll_ct instead, as a starting point.
Signed-off-by: Risto Suominen <Risto.Suominen@gmail.com> --- The testing is done on kernel version 2.6.18.
--- a/drivers/video/aty/mach64_ct.c.org 2006-09-20 06:42:06.000000000 +0300 +++ b/drivers/video/aty/mach64_ct.c 2009-01-22 14:28:13.000000000 +0200 @@ -7,6 +7,7 @@ #include <linux/delay.h> #include <asm/io.h> #include <video/mach64.h> +#include <asm/machdep.h> #include "atyfb.h"
#undef DEBUG @@ -536,6 +537,14 @@ static int __init aty_init_pll_ct(const pll->ct.xclk_post_div_real = postdividers[xpost_div]; pll->ct.mclk_fb_div = q * pll->ct.xclk_post_div_real / 8;
+#ifdef CONFIG_PPC + if (machine_is(powermac)) { + /* Override PLL_EXT_CNTL & 0x07. */ + pll->ct.xclk_post_div = xpost_div; + pll->ct.xclk_ref_div = 1; + } +#endif + #ifdef DEBUG pllmclk = (1000000 * pll->ct.mclk_fb_mult * pll->ct.mclk_fb_div) / (par->ref_clk_per * pll->ct.pll_ref_div);Since the complete re-write in 2.6.10, some PowerMacs (At least PowerMac 5500 and PowerMac G3 Beige rev A) with ATI Mach64 chip have suffered from unstable columns in their framebuffer image. This seems to depend on a value (4) read from PLL_EXT_CNTL register, which leads to incorrect DSP config parameters to be written to the chip. This patch uses a value calculated by aty_init_pll_ct instead, as a starting point.
Signed-off-by: Risto Suominen <Risto.Suominen@gmail.com> --- The testing is done on kernel version 2.6.18.
--- a/drivers/video/aty/mach64_ct.c.org 2006-09-20 06:42:06.000000000 +0300 +++ b/drivers/video/aty/mach64_ct.c 2009-01-22 14:28:13.000000000 +0200 @@ -7,6 +7,7 @@ #include <linux/delay.h> #include <asm/io.h> #include <video/mach64.h> +#include <asm/machdep.h> #include "atyfb.h" #undef DEBUG @@ -536,6 +537,14 @@ static int __init aty_init_pll_ct(const pll->ct.xclk_post_div_real = postdividers[xpost_div]; pll->ct.mclk_fb_div = q * pll->ct.xclk_post_div_real / 8; +#ifdef CONFIG_PPC + if (machine_is(powermac)) { + /* Override PLL_EXT_CNTL & 0x07. */ + pll->ct.xclk_post_div = xpost_div; + pll->ct.xclk_ref_div = 1; + } +#endif + #ifdef DEBUG pllmclk = (1000000 * pll->ct.mclk_fb_mult * pll->ct.mclk_fb_div) / (par->ref_clk_per * pll->ct.pll_ref_div); | |