<br><br><div class="gmail_quote">2013/6/21 David Herrmann <span dir="ltr"><<a href="mailto:dh.herrmann@gmail.com" target="_blank">dh.herrmann@gmail.com</a>></span><br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Hi Marc<br>
<div><div class="h5"><br>
On Fri, Jun 21, 2013 at 2:17 PM, Marc Chalain <<a href="mailto:marc.chalain@gmail.com">marc.chalain@gmail.com</a>> wrote:<br>
><br>
><br>
> 2013/6/21 David Herrmann <<a href="mailto:dh.herrmann@gmail.com">dh.herrmann@gmail.com</a>><br>
>><br>
>> Hi<br>
>><br>
>> On Fri, Jun 21, 2013 at 12:05 PM, Marc Chalain <<a href="mailto:marc.chalain@gmail.com">marc.chalain@gmail.com</a>><br>
>> wrote:<br>
>> ><br>
>> ><br>
>> > 2013/6/21 David Herrmann <<a href="mailto:dh.herrmann@gmail.com">dh.herrmann@gmail.com</a>><br>
>> >><br>
>> >> Hi<br>
>> >><br>
>> >> On Fri, Jun 21, 2013 at 11:43 AM, Marc Chalain <<a href="mailto:marc.chalain@gmail.com">marc.chalain@gmail.com</a>><br>
>> >> wrote:<br>
>> >> ><br>
>> >> > 2013/6/21 David Herrmann <<a href="mailto:dh.herrmann@gmail.com">dh.herrmann@gmail.com</a>><br>
>> >> >><br>
>> >> >> Hi<br>
>> >> >><br>
>> >> >> On Fri, Jun 21, 2013 at 10:49 AM, mchalain [<a href="mailto:marc.chalain@gmail.com">marc.chalain@gmail.com</a>]<br>
>> >> >> <<a href="mailto:marc.chalain@gmail.com">marc.chalain@gmail.com</a>> wrote:<br>
>> >> >> > From: mchalain <<a href="mailto:marc.chalain@gmail.com">marc.chalain@gmail.com</a>><br>
>> >> >> ><br>
>> >> >> >  it initializes varinfo.yoffset. varinfo.yoffset has to<br>
>> >> >> >  point on the beginning of the video memory.<br>
>> >> >> >  The card uses this value to push on the screen a part of<br>
>> >> >> >  the video memory when this one is larger than the screen.<br>
>> >> >> ><br>
>> >> >> > ---<br>
>> >> >> >  weston/src/compositor-fbdev.c |    6 ++++++<br>
>> >> >> >  1 file changed, 6 insertions(+)<br>
>> >> >> ><br>
>> >> >> > diff --git a/weston/src/compositor-fbdev.c<br>
>> >> >> > b/weston/src/compositor-fbdev.c<br>
>> >> >> > index adfb67a..d2aee9b 100644<br>
>> >> >> > --- a/weston/src/compositor-fbdev.c<br>
>> >> >> > +++ b/weston/src/compositor-fbdev.c<br>
>> >> >> > @@ -368,6 +368,11 @@ fbdev_query_screen_info(struct fbdev_output<br>
>> >> >> > *output, int fd,<br>
>> >> >> >                 return -1;<br>
>> >> >> >         }<br>
>> >> >> ><br>
>> >> >> > +       if (varinfo.yoffset != 0) {<br>
>> >> >> > +               varinfo.yoffset = 0;<br>
>> >> >> > +               if (ioctl(fd, FBIOPAN_DISPLAY, &varinfo) < 0)<br>
>> >> >> > +                       return -1;<br>
>> >> >> > +       }<br>
>> >> >><br>
>> >> >> Why do you need this? It's unnecessary. We call FBIOPUT_VSCREENINFO<br>
>> >> >> after fbdev_query_screen_info(), anyway. Furthermore, not all<br>
>> >> >> drivers<br>
>> >> >> support panning even though the yoffset may be non-zero (you need<br>
>> >> >> FBIOPUT_VSCREENINFO then).<br>
>> >> >><br>
>> >> >> I think you can just drop this here but keep the yoffset=0 below.<br>
>> >> >><br>
>> >> ><br>
>> >> > where do you use  FBIOPUT_VSCREENINFO ? I only find inside<br>
>> >> > fbdev_set_screen_info but this function is called only when the<br>
>> >> > output<br>
>> >> > is<br>
>> >> > reenable not at the startup.<br>
>> >><br>
>> >> My bad!<br>
>> >> But still, you now call FBIOPAN_DISPLAY on _every_<br>
>> >> fbdev_query_screen_info() while it is only needed during initial setup<br>
>> >> as VT_ENTER calls fbdev_set_screen_info(), anyway. So instead, I'd<br>
>> >> recommend to just call fbdev_set_screen_info() during initial setup as<br>
>> >> well.<br>
>> >><br>
>> ><br>
>> > No I call  FBIOPAN_DISPLAY only at startup after yoffset is set to 0<br>
>><br>
>> You call it everytime yoffset isn't 0. So if you VT_LEAVE, another<br>
>> application changes the yoffset for whatever reason and we VT_ENTER,<br>
>> you will end up calling FBIOPAN_DISPLAY again followed by<br>
>> fbdev_set_screen_info() if the screen-info changed.<br>
>><br>
>> Don't expect applications on other VTs to behave as expected. They may<br>
>> do anything! They may even use some acceleration which we in weston<br>
>> aren't aware of.<br>
>><br>
> If another application set yoffset, with VT_ENTER we pass inside<br>
> fbdev_set_screen_info<br>
> and yoffset is set to 0.<br>
> After fbdev_set_screen_info is buggy and this patch is not a bugfix...<br>
> the bug is you set varinfo.bits_per_pixel with a value that could be<br>
> different of 32 and<br>
> after you set the colors as A8R8G8B8 ...<br>
> I don't want to use it, because I can't check all cases of this function, my<br>
> card is too simple...<br>
<br>
</div></div>Sorry, I cannot follow. It's the following scenario that I think can<br>
be handled better:<br>
<br>
WESTON-START<br>
=> fbdev initialization<br>
=> FBIOPAN_DISPLAY<br>
VT_LEAVE<br>
(some other app changes the fbdev state and offsets)<br>
VT_ENTER<br>
=> fbdev_output_reenable()<br>
=> fbdev_frame_buffer_open()<br>
  => fbdev_query_screen_info()<br>
    => FBIOPAN_DISPLAY<br>
=> fbdev_set_screen_info()<br>
  => FBIOPUT_VSCREENINFO<br>
<br>
So after a VT_ENTER, we call FBIOPAN_DISPLAY even though we reset the<br>
screeninfo later (because it changed). So why not modify<br>
"compare_screen_info" to return 1 if the offsets are not 0? This<br>
avoids any additional call to FBIOPAN_DISPLAY.<br>
<br>
As you noticed before, this would require fbdev_output_create to call<br>
fbdev_set_screen_info() as we do not reset the offsets during fbdev<br>
output setup.<br>
<div class="im"><br>
>> >> > It seems strange that FBIOPAN_DISPLAY is not supported by some<br>
>> >> > devices.<br>
>> >> > I<br>
>> >> > used this one to not set all the varinfo on the device and to be<br>
>> >> > faster.<br>
>> >><br>
>> >> See ./drivers/video/fbmem.c fb_pan_display(). Trivial fbdev drivers<br>
>> >> might not support it, but user-space can still set the offset via<br>
>> >> FBIOPUT_VSCREENINFO. If you want, you can call FBIOPAN_DISPLAY and if<br>
>> >> it fails, you use FBIOPUT_VSCREENINFO.<br>
>> >><br>
>> > I read the yoffset hasn't to be null in  FB_VMODE_YWRAP . But yoffset is<br>
>> > only used for panning.<br>
>> > It's useless to set it if it doesn't use (fbmem.c uses yoffset only for<br>
>> > panning in your example too)<br>
>><br>
>> A driver may not support FBIOPAN_DISPLAY but still support panning via<br>
>> FBIOPUT_VSCREENINFO. If any framebuffer parameter change requires a<br>
>> full modeset, there is no reason to support FBIOPAN_DISPLAY. But<br>
>> panning may still be supported via yoffset and FBIOPUT_VSCREENINFO.<br>
>><br>
> You tell that kernel bug must be corrected by kernel developers in the<br>
> thread about SYN_DROPPED<br>
> and now you tell me that we have to check that the driver should not be<br>
> completed ???<br>
<br>
</div>It's not a kernel bug. Every driver is free to implement<br>
FBIOPAN_DISPLAY. But a driver is also free to not implement it but<br>
still support panning via a full modeset-cicle (FBIOPUT_VSCREENINFO).<br>
<br>
Also note that fbdev drivers (due to their inherently broken design)<br>
tend to allow all kinds of driver-dependent acceleration ioctls which<br>
may cause _any_ kind of state-change in the driver that may be<br>
reflected through weird screen-states. Hence, it's always good to<br>
perform a full modeset on initialization and VT_ENTER.<br>
<br></blockquote><div>I agree with you, but the current fb_set_screeninfo is broken. It runs fine only for few card, and set the registers with constant value without check the result after is not a good idea.<br>Normally we should do<br>
  STARTUP<br>   get fixinfo<br>   get varinfo<br>   set varinfo with configuration<br>   get varinfo to retrieve the values used<br>   store varinfo some where<br>  VT_LEAVE<br>some body change varinfo<br>  VT_ENTER<br>   restore varinfo<br>
I just want to give you a bugfix about yoffset, that I did to continue my job.<br> <br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Cheers<br>
<span class="HOEnZb"><font color="#888888">David<br>
</font></span><div class="HOEnZb"><div class="h5"><br>
> I don't understand the need to add useless code. I will change<br>
> FBIOPAN_DISPLAY by<br>
> FBIOPUT_VSCREENINFO but it's only to make you happy.<br>
><br>
>><br>
>> Cheers<br>
>> David<br>
><br>
><br>
</div></div></blockquote></div><br>