From: James S. <jsi...@in...> - 2006-11-13 16:03:32
|
Acked-by: James Simmons <jsi...@in...> On Wed, 1 Nov 2006, ak...@os... wrote: > From: Wink Saville <wi...@sa...> > > The following patch resolves the divide by zero error I encountered on my system: > > http://marc.10east.com/?l=linux-fbdev-devel&m=116058257024413&w=2 > > I accomplished this by merging what I thought was appropriate from: > > http://webcvs.freedesktop.org/xorg/driver/xf86-video-nv/src/ > > > > Signed-off-by: Andrew Morton <ak...@os...> > --- > > drivers/video/nvidia/nv_hw.c | 12 +++++++++--- > drivers/video/nvidia/nv_setup.c | 18 +++++++++++++++++- > drivers/video/nvidia/nv_type.h | 1 + > drivers/video/nvidia/nvidia.c | 24 ++++++++++++------------ > 4 files changed, 39 insertions(+), 16 deletions(-) > > diff -puN drivers/video/nvidia/nv_hw.c~patch-for-nvidia-divide-by-zero-error-for-7600 drivers/video/nvidia/nv_hw.c > --- a/drivers/video/nvidia/nv_hw.c~patch-for-nvidia-divide-by-zero-error-for-7600 > +++ a/drivers/video/nvidia/nv_hw.c > @@ -145,12 +145,18 @@ static void nvGetClocks(struct nvidia_pa > > if (par->Architecture >= NV_ARCH_40) { > pll = NV_RD32(par->PMC, 0x4020); > - P = (pll >> 16) & 0x03; > + P = (pll >> 16) & 0x07; > pll = NV_RD32(par->PMC, 0x4024); > M = pll & 0xFF; > N = (pll >> 8) & 0xFF; > - MB = (pll >> 16) & 0xFF; > - NB = (pll >> 24) & 0xFF; > + if(((par->Chipset & 0xfff0) == 0x0290) || > + ((par->Chipset & 0xfff0) == 0x0390)) { > + MB = 1; > + NB = 1; > + } else { > + MB = (pll >> 16) & 0xFF; > + NB = (pll >> 24) & 0xFF; > + } > *MClk = ((N * NB * par->CrystalFreqKHz) / (M * MB)) >> P; > > pll = NV_RD32(par->PMC, 0x4000); > diff -puN drivers/video/nvidia/nv_setup.c~patch-for-nvidia-divide-by-zero-error-for-7600 drivers/video/nvidia/nv_setup.c > --- a/drivers/video/nvidia/nv_setup.c~patch-for-nvidia-divide-by-zero-error-for-7600 > +++ a/drivers/video/nvidia/nv_setup.c > @@ -359,6 +359,7 @@ int NVCommonSetup(struct fb_info *info) > case 0x0186: > case 0x0187: > case 0x018D: > + case 0x0228: > case 0x0286: > case 0x028C: > case 0x0316: > @@ -382,6 +383,10 @@ int NVCommonSetup(struct fb_info *info) > case 0x034C: > case 0x0160: > case 0x0166: > + case 0x0169: > + case 0x016B: > + case 0x016C: > + case 0x016D: > case 0x00C8: > case 0x00CC: > case 0x0144: > @@ -639,12 +644,23 @@ int NVCommonSetup(struct fb_info *info) > par->fpHeight = NV_RD32(par->PRAMDAC, 0x0800) + 1; > par->fpSyncs = NV_RD32(par->PRAMDAC, 0x0848) & 0x30000033; > > - printk("Panel size is %i x %i\n", par->fpWidth, par->fpHeight); > + printk("nvidiafb: Panel size is %i x %i\n", par->fpWidth, par->fpHeight); > } > > if (monA) > info->monspecs = *monA; > > + if (!par->FlatPanel || !par->twoHeads) > + par->FPDither = 0; > + > + par->LVDS = 0; > + if (par->FlatPanel && par->twoHeads) { > + NV_WR32(par->PRAMDAC0, 0x08B0, 0x00010004); > + if (par->PRAMDAC0[0x08b4] & 1) > + par->LVDS = 1; > + printk("nvidiafb: Panel is %s\n", par->LVDS ? "LVDS" : "TMDS"); > + } > + > kfree(edidA); > kfree(edidB); > done: > diff -puN drivers/video/nvidia/nv_type.h~patch-for-nvidia-divide-by-zero-error-for-7600 drivers/video/nvidia/nv_type.h > --- a/drivers/video/nvidia/nv_type.h~patch-for-nvidia-divide-by-zero-error-for-7600 > +++ a/drivers/video/nvidia/nv_type.h > @@ -129,6 +129,7 @@ struct nvidia_par { > int fpHeight; > int PanelTweak; > int paneltweak; > + int LVDS; > int pm_state; > u32 crtcSync_read; > u32 fpSyncs; > diff -puN drivers/video/nvidia/nvidia.c~patch-for-nvidia-divide-by-zero-error-for-7600 drivers/video/nvidia/nvidia.c > --- a/drivers/video/nvidia/nvidia.c~patch-for-nvidia-divide-by-zero-error-for-7600 > +++ a/drivers/video/nvidia/nvidia.c > @@ -1160,20 +1160,20 @@ static u32 __devinit nvidia_get_arch(str > case 0x0340: /* GeForceFX 5700 */ > arch = NV_ARCH_30; > break; > - case 0x0040: > - case 0x00C0: > - case 0x0120: > + case 0x0040: /* GeForce 6800 */ > + case 0x00C0: /* GeForce 6800 */ > + case 0x0120: /* GeForce 6800 */ > case 0x0130: > - case 0x0140: > - case 0x0160: > - case 0x01D0: > - case 0x0090: > - case 0x0210: > - case 0x0220: > + case 0x0140: /* GeForce 6600 */ > + case 0x0160: /* GeForce 6200 */ > + case 0x01D0: /* GeForce 7200, 7300, 7400 */ > + case 0x0090: /* GeForce 7800 */ > + case 0x0210: /* GeForce 6800 */ > + case 0x0220: /* GeForce 6200 */ > case 0x0230: > - case 0x0240: > - case 0x0290: > - case 0x0390: > + case 0x0240: /* GeForce 6100 */ > + case 0x0290: /* GeForce 7900 */ > + case 0x0390: /* GeForce 7600 */ > arch = NV_ARCH_40; > break; > case 0x0020: /* TNT, TNT2 */ > _ > > ------------------------------------------------------------------------- > Using Tomcat but need to do more? Need to support web services, security? > Get stuff done quickly with pre-integrated technology to make your job easier > Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo > http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642 > _______________________________________________ > Linux-fbdev-devel mailing list > Lin...@li... > https://lists.sourceforge.net/lists/listinfo/linux-fbdev-devel > |