2008-01-27 18:46:19

by Andrew Paprocki

[permalink] [raw]
Subject: lxfb is not changing modes, no errors/information printing out

Using 2.6.24, I can't get my Geode LX (LX800 CPU) to boot in anything
other than the default 80x25 console even though lxfb appears to be
loading normally. This device doesn't work with the VESA fb either
when I request "vga=0x31a". All the other boards I have display a
1280x1024 console on my monitor. Are my kernel parameters wrong in
some way? I tried "video=lxfb:<mode>" with and without "vga=0x31a".
The driver is compiled into the kernel -- I am not using modules.

Also, a side note.. blanking on this display doesn't seem to work
properly. When the screen would normally blank after a timeout, a thin
~20px width vertical black strip appears on the left-hand side of the
screen, but the rest of the display area remains showing whatever
contents were on the screen when the blank was triggered. Hitting a
key goes back to displaying the current fb contents like you would
expect.

Thanks,
-Andrew

Relevant dmesg info:

Kernel command line: video=lxfb:1280x1024-60 vga=0x31a root=/dev/hda1
Console: colour dummy device 80x25
console [tty0] enabled
lxfb 0000:00:01.1: 8192 KB of video memory at 0xee000000
Console: switching to colour frame buffer device 80x30
fb0: Geode LX frame buffer device

# lspci -vvnnxxxx -s 00:01.1
00:01.1 VGA compatible controller [0300]: Advanced Micro Devices [AMD]
Geode LX Video [1022:2081] (prog-if 00 [VGA])
Subsystem: Advanced Micro Devices [AMD] Geode LX Video [1022:2081]
Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop-
ParErr- Stepping- SERR- FastB2B-
Status: Cap- 66MHz+ UDF- FastB2B- ParErr- DEVSEL=medium
>TAbort- <TAbort- <MAbort- >SERR- <PERR-
Latency: 0, Cache Line Size: 32 bytes
Interrupt: pin A routed to IRQ 11
Region 0: Memory at ee000000 (32-bit, non-prefetchable) [size=16M]
Region 1: Memory at efff4000 (32-bit, non-prefetchable) [size=16K]
Region 2: Memory at efff0000 (32-bit, non-prefetchable) [size=16K]
Region 3: Memory at effec000 (32-bit, non-prefetchable) [size=16K]
Region 4: Memory at effe8000 (32-bit, non-prefetchable) [size=16K]
00: 22 10 81 20 07 00 20 02 00 00 00 03 08 00 00 00
10: 00 00 00 ee 00 40 ff ef 00 00 ff ef 00 c0 fe ef
20: 00 80 fe ef 00 00 00 00 00 00 00 00 22 10 81 20
30: 00 00 00 00 00 00 00 00 00 00 00 00 07 01 00 00
40: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
50: d0 03 00 00 c0 03 00 00 00 00 0a 00 00 00 00 00
60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
70: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

# grep CONFIG_FB.*=y .config
CONFIG_FB=y
CONFIG_FB_CFB_FILLRECT=y
CONFIG_FB_CFB_COPYAREA=y
CONFIG_FB_CFB_IMAGEBLIT=y
CONFIG_FB_DEFERRED_IO=y
CONFIG_FB_MODE_HELPERS=y
CONFIG_FB_TILEBLITTING=y
CONFIG_FB_GEODE=y
CONFIG_FB_GEODE_LX=y

# cat /sys/class/graphics/fb0/name
Geode LX
# cat /sys/class/graphics/fb0/modes
U:640x480p-63
# cat /sys/class/graphics/fb0/state
0
# cat /sys/class/graphics/fb0/virtual_size
640,480
# cat /sys/class/graphics/fb0/stride
1280


2008-01-27 19:26:28

by Jordan Crouse

[permalink] [raw]
Subject: Re: lxfb is not changing modes, no errors/information printing out

On 27/01/08 13:45 -0500, Andrew Paprocki wrote:
> Using 2.6.24, I can't get my Geode LX (LX800 CPU) to boot in anything
> other than the default 80x25 console even though lxfb appears to be
> loading normally. This device doesn't work with the VESA fb either
> when I request "vga=0x31a". All the other boards I have display a
> 1280x1024 console on my monitor. Are my kernel parameters wrong in
> some way? I tried "video=lxfb:<mode>" with and without "vga=0x31a".
> The driver is compiled into the kernel -- I am not using modules.

Can you change the mode after you have booted with 'fbset'?

> Also, a side note.. blanking on this display doesn't seem to work
> properly. When the screen would normally blank after a timeout, a thin
> ~20px width vertical black strip appears on the left-hand side of the
> screen, but the rest of the display area remains showing whatever
> contents were on the screen when the blank was triggered. Hitting a
> key goes back to displaying the current fb contents like you would
> expect.

Thanks for reporting that - thats a known bug, I'll send a patch to fix it.

Jordan

--
Jordan Crouse
Systems Software Development Engineer
Advanced Micro Devices, Inc.

2008-01-27 19:55:27

by Andrew Paprocki

[permalink] [raw]
Subject: Re: lxfb is not changing modes, no errors/information printing out

On Jan 27, 2008 2:28 PM, Jordan Crouse <[email protected]> wrote:
> On 27/01/08 13:45 -0500, Andrew Paprocki wrote:
> > Using 2.6.24, I can't get my Geode LX (LX800 CPU) to boot in anything
> > other than the default 80x25 console even though lxfb appears to be
> > loading normally. This device doesn't work with the VESA fb either
> > when I request "vga=0x31a". All the other boards I have display a
> > 1280x1024 console on my monitor. Are my kernel parameters wrong in
> > some way? I tried "video=lxfb:<mode>" with and without "vga=0x31a".
> > The driver is compiled into the kernel -- I am not using modules.
>
> Can you change the mode after you have booted with 'fbset'?

Two answers to this I just found out..

This is a system I installed BusyBox 1.8.0 on, and running 'fbset
1280x1024-75' does nothing. I copied over the real fbset binary from
my Debian install and when I ran it the same way, it worked perfectly.
So, yes, it appears that it is possible to change it after the fact,
but for some reason BusyBox can't do it. The only problem then appears
to be setting the fb mode from the boot line.

BusyBox 1.8.0 binary:

# fbset 1280x1024-75

mode "1280x1024-75"
# D: 134.880 MHz, H: 79.905 kHz, V: 74.958 Hz
geometry 1280 1024 1280 3264 8
timings 7414 232 64 38 1 112 3
accel true
rgba 8/0,8/0,8/0,0/0
endmode
(nothing happens)

Debian binary:

# /tmp/fbset -v 1280x1024-60
Linux Frame Buffer Device Configuration Version 2.1 (23/06/1999)
(C) Copyright 1995-1999 by Geert Uytterhoeven

Opening frame buffer device `/dev/fb0'
Reading mode database from file `/etc/fb.modes'
Using video mode `1280x1024-60'
Setting video mode to `/dev/fb0'
(works)

Thanks,
-Andrew

2008-01-27 20:48:56

by Jordan Crouse

[permalink] [raw]
Subject: Re: lxfb is not changing modes, no errors/information printing out

On 27/01/08 14:55 -0500, Andrew Paprocki wrote:
> On Jan 27, 2008 2:28 PM, Jordan Crouse <[email protected]> wrote:
> > On 27/01/08 13:45 -0500, Andrew Paprocki wrote:
> > > Using 2.6.24, I can't get my Geode LX (LX800 CPU) to boot in anything
> > > other than the default 80x25 console even though lxfb appears to be
> > > loading normally. This device doesn't work with the VESA fb either
> > > when I request "vga=0x31a". All the other boards I have display a
> > > 1280x1024 console on my monitor. Are my kernel parameters wrong in
> > > some way? I tried "video=lxfb:<mode>" with and without "vga=0x31a".
> > > The driver is compiled into the kernel -- I am not using modules.
> >
> > Can you change the mode after you have booted with 'fbset'?
>
> Two answers to this I just found out..
>
> This is a system I installed BusyBox 1.8.0 on, and running 'fbset
> 1280x1024-75' does nothing. I copied over the real fbset binary from
> my Debian install and when I ran it the same way, it worked perfectly.
> So, yes, it appears that it is possible to change it after the fact,
> but for some reason BusyBox can't do it. The only problem then appears
> to be setting the fb mode from the boot line.

The busybox binary does have differences - I think that the -n parameter
is required to set the mode 'right now'. But I'm glad that the
mode change works (thats the tough part). Probably something changed
in the way we handle the setup and/or the mode database, thats easy enough
to instrument and fix. I'll check this out tomorrow, and do a patch for
the blanking bug too.

Jordan

--
Jordan Crouse
Systems Software Development Engineer
Advanced Micro Devices, Inc.