Re: X won't start with VisEG and 2.6.22.19

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



> The driver sets a video mode and then checks if the syscall modified the 
> parameters with the function fbdev_modes_equal():
> 
> --snip--
> /* static*/ Bool
> fbdev_modes_equal(struct fb_var_screeninfo *set, struct 
> fb_var_screeninfo *req)
> {
>          return (set->xres_virtual >= req->xres_virtual &&
>                  set->yres_virtual >= req->yres_virtual &&
>                  set->bits_per_pixel == req->bits_per_pixel &&
>                  set->red.length == req->red.length &&
>                  set->green.length == req->green.length &&
>                  set->blue.length == req->blue.length &&
>                  set->xres == req->xres && set->yres == req->yres &&
>                  set->pixclock == req->pixclock &&
>                  set->right_margin == req->right_margin &&
>                  set->hsync_len == req->hsync_len &&
>                  set->left_margin == req->left_margin &&
>                  set->lower_margin == req->lower_margin &&
>                  set->vsync_len == req->vsync_len &&
>                  set->upper_margin == req->upper_margin &&
>                  set->sync == req->sync && set->vmode == req->vmode);

The is the kernel's implementation:

int fb_mode_is_equal(const struct fb_videomode *mode1,
                     const struct fb_videomode *mode2)
{
     return (mode1->xres         == mode2->xres &&
     mode1->yres         == mode2->yres &&
     mode1->pixclock     == mode2->pixclock &&
     mode1->hsync_len    == mode2->hsync_len &&
     mode1->vsync_len    == mode2->vsync_len &&
     mode1->left_margin  == mode2->left_margin &&
     mode1->right_margin == mode2->right_margin &&
     mode1->upper_margin == mode2->upper_margin &&
     mode1->lower_margin == mode2->lower_margin &&
     mode1->sync         == mode2->sync &&
     mode1->vmode        == mode2->vmode);
}

> Tracing with gdb gives the following:
> 
> Breakpoint 1, fbdev_modes_equal (set=0xfb5ed568, req=0xfb5ed4c8)
>      at ../../../../hw/xfree86/fbdevhw/fbdevhw.c:256
> 256     }
> (gdb) p *set
> $1 = {xres = 1024, yres = 768, xres_virtual = 1024, yres_virtual = 768, 
> xoffset = 0, yoffset = 0,
>    bits_per_pixel = 8, grayscale = 0, red = {offset = 0, length = 8, 
> msb_right = 0}, green = {offset = 0,
>      length = 8, msb_right = 0}, blue = {offset = 0, length = 8, 
> msb_right = 0}, transp = {offset = 0,
>      length = 0, msb_right = 0}, nonstd = 0, activate = 0, height = 0, 
> width = 0, accel_flags = 0,
>    pixclock = 0, left_margin = 0, right_margin = 0, upper_margin = 0, 
> lower_margin = 0, hsync_len = 0,
>    vsync_len = 0, sync = 0, vmode = 0, reserved = {0, 0, 0, 0, 0, 0}}
> 
> (gdb) p *req
> $2 = {xres = 1024, yres = 768, xres_virtual = 1024, yres_virtual = 768, 
> xoffset = 0, yoffset = 0,
>    bits_per_pixel = 8, grayscale = 0, red = {offset = 0, length = 8, 
> msb_right = 0}, green = {offset = 0,
>      length = 8, msb_right = 0}, blue = {offset = 0, length = 8, 
> msb_right = 0}, transp = {offset = 0,
>      length = 0, msb_right = 0}, nonstd = 0, activate = 0, height = 0, 
> width = 0, accel_flags = 0,
>    pixclock = 22271, left_margin = 56, right_margin = 8, upper_margin = 
> 41, lower_margin = 0,
>    hsync_len = 176, vsync_len = 8, sync = 3, vmode = 1, reserved = {0, 
> 0, 0, 0, 0, 0}}
> 
> (gdb) bt
> #0  fbdev_modes_equal (set=0xfb5ed568, req=0xfb5ed4c8) at 
> ../../../../hw/xfree86/fbdevhw/fbdevhw.c:256
> #1  0x40bcfb64 in fbdevHWSetMode (pScrn=0x2142a0, mode=<value optimized 
> out>, check=1)
>      at ../../../../hw/xfree86/fbdevhw/fbdevhw.c:528
> #2  0x40bd07e8 in fbdevHWSetVideoModes (pScrn=0x2142a0) at 
> ../../../../hw/xfree86/fbdevhw/fbdevhw.c:568
> #3  0x40cf5bec in ?? () from /usr/lib/xorg/modules/drivers//fbdev_drv.so
> #4  0x00074e88 in InitOutput ()
> #5  0x00039d04 in main ()
> 
> As you can see, the main video parameters are OK, while the 
> monitor/modeline values (pixclock, left_margin, right_margin, 
> upper_margin, lower_margin, hsync_len, vsync_len, sync and vmode)
> were changed to zero.

> Any ideas?

Given that the kernel considers the above as part of the video mode,
I believe that this is a kernel bug.

Dave
-- 
J. David Anglin                                  dave.anglin@xxxxxxxxxxxxxx
National Research Council of Canada              (613) 990-0752 (FAX: 952-6602)
--
To unsubscribe from this list: send the line "unsubscribe linux-parisc" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux SoC]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux