[OLPC-devel] Re: AMD Geode GX framebuffer: support OLPC

Marcelo Tosatti mtosatti at redhat.com
Mon Aug 14 17:40:57 EDT 2006


(switching to olpc-devel)

On Mon, Aug 14, 2006 at 01:14:04PM -0600, Jordan Crouse wrote:
> On 14/08/06 14:49 -0400, David Zeuthen wrote:
> > >  since VGA probing must be disabled in OLPC's kernel.
> > > Unfortunately, as far as I could gather, there exists no native
> > > framebuffer driver for the emulated Cirrus CLGD 5446 PCI VGA device.
> > 
> > How about disabling vga probing only if we know we are on the OLPC
> > hardware? Surely this must be fixable...
> 
> VGA probing happens pretty darn early in the boot process, so we would
> probably have to communicate the existence of the OLPC hardware from the
> BIOS through one of the usual methods.
> 
> The reasoning behind the patch was that we were purposely ignoring VGA 
> all together and I wanted to eliminate the possibility that random bits would
> be returned to the probing function which may or may not cause the code to
> do stupid things.  Far better, I reasoned, to just ignore the VGA stuff 
> all together (plus it saved us a bit of space).
> 
> We could probably avoid this patch all together if the kernel gurus agree
> that nothing bad would happen if we left it in, or if we did the extra work
> to return sane values in LinuxBIOS. 

Ronald,

The aim is to kill the CONFIG_VGA_NOPROBE option which was added by
Jordan for safety reasons (see comments above).

For that to happen, it must be certain that LinuxBIOS returns
sane values for the following Linux VGA detection routines, at
arch/i386/kernel/video.S:


# This is the main entry point called by setup.S
# %ds *must* be pointing to the bootsector
video:  pushw   %ds             # We use different segments
        pushw   %ds             # FS contains original DS
        popw    %fs
        pushw   %cs             # DS is equal to CS
        popw    %ds
        pushw   %cs             # ES is equal to CS
        popw    %es
        xorw    %ax, %ax
        movw    %ax, %gs        # GS is zero
        cld
        call    basic_detect    # Basic adapter type testing (EGA/VGA/MDA/CGA)
#ifdef CONFIG_VIDEO_SELECT
        movw    %fs:(0x01fa), %ax               # User selected video mode
        cmpw    $ASK_VGA, %ax                   # Bring up the menu
        jz      vid2

        call    mode_set                        # Set the mode
        jc      vid1

        leaw    badmdt, %si                     # Invalid mode ID
        call    prtstr
vid2:   call    mode_menu
vid1:
#ifdef CONFIG_VIDEO_RETAIN
        call    restore_screen                  # Restore screen contents
#endif /* CONFIG_VIDEO_RETAIN */
        call    store_edid
#endif /* CONFIG_VIDEO_SELECT */
        call    mode_params                     # Store mode parameters
        popw    %ds                             # Restore original DS
        ret

More especifically "basic_detect" and "mode_params".

Thoughts/comments?



More information about the Devel mailing list