u32 xres, right, hslen, left, xtotal;
        u32 yres, lower, vslen, upper, ytotal;
        u32 vxres, xoffset, vyres, yoffset;
-       u32 bpp, base, dacspeed24, mem;
+       u32 bpp, base, dacspeed24, mem, freq;
        u8 r7;
        int i;
 
        par->atc[VGA_ATC_OVERSCAN] = 0;
 
        /* Calculate VCLK that most closely matches the requested dot clock */
-       i740_calc_vclk((((u32)1e9) / var->pixclock) * (u32)(1e3), par);
+       freq = (((u32)1e9) / var->pixclock) * (u32)(1e3);
+       if (freq < I740_RFREQ_FIX) {
+               fb_dbg(info, "invalid pixclock\n");
+               freq = I740_RFREQ_FIX;
+       }
+       i740_calc_vclk(freq, par);
 
        /* Since we program the clocks ourselves, always use VCLK2. */
        par->misc |= 0x0C;