Accelerated X driver testing


147 posts   Page 1 of 6   1, 2, 3, 4, 5, 6
by teh_orph » Fri Jan 04, 2013 5:33 pm
Overview/rant
Eight months of hard programming, 20000+ lines of code (many thousands of them for a piece of hardware which has no public documentation) and a dozen corrupted SD cards later...I've learnt what I had guessed in the first place: the traditional X desktop environment is heavily dependent on CPU power and even the fastest and most openest GPU in the world can help so much! The performance of the existing application->X infrastructure is dominated by overhead, not the time spent drawing pixels. Incredibly, even PC X drivers lean heavily on CPU power.

Much time has been spent profiling the drawing habits of common applications. A large proportion of draw calls are for sub 15x15 pixel operations, many are for 1x1 operations and a small proportion try and manipulate tens of thousands of pixels. Synchronisation points (where the application and X server must pause until the driver is done) appear after every handful of operations. As such the system has been constructed around this behaviour.

With workloads this small being very common, operation start-up latency is of paramount importance: Dom uncovered an issue where an overhead of just 6 microseconds per draw call was causing a noticeably slowdown in a number of applications. This is the single biggest reason why an "all OpenGL/VG/ES" X driver is not appropriate and why most OSes (think Android, iOS, Windows Vista etc) have chosen to write new display systems from scratch with GPUs in mind.

I've done a write-up for the design of the driver I've made if you're interested.
http://elinux.org/RPi_Xorg_rpi_Driver#Design
To summarise, as much pixel-pushing work is removed from the CPU as possible via DMA for fills and blits, and the VPU handles ~50 different types of common blend function. The CPU handles cases where it would be more efficient to not leave the CPU plus another ~250 blend functions. The 3D hardware is not used, therefore: neither is OpenGL ES/VG/whatever.

That said, the places where the pixel-pushing work has been moved to is much faster. This enables 32-bit colour mode and high-resolution screens (I use 1920x1200x32 with my Pi). Composition operations are ~12x faster on the VPU than on the CPU.

FINALLY, you must consider that many many X windows applications now do the majority of their rendering from the client side...a place the driver cannot reach. This will be as slow as before. Other people are tackling this project.

Finally #2: Raspbian already includes some code I have written which improves the performance of copies and fills. So when you're testing this driver consider its performance versus Raspberry Pi day one!


TL; DR
http://en.wikipedia.org/wiki/Amdahl's_law

What I need
I need help testing what I have written so far, before making more changes. I need to discover:
- display corruption
- memory card corruption (oh yeah)
- crashes
- unexpected slowdowns
- common usage patterns
- applications which are poorly coded
Bug fixes will then be made, and the driver will be tuned around individual application 'issues' and operations that I had not considered (important) before.

I am not interested in performance analysing what I have written: the build supplied here is full of validation code to ensure any bugs do not take down your system or corrupt your SD card. Draw calls are also logged in order to generate internal statistics. Both these things cost valuable CPU time.

People testing this should be happy twiddling config files, reimaging their SD card, using bleeding-edge firmware and kernels and such. I wouldn't recommend this for day-to-day nor in a place where you can tolerate any failure.

I would strongly recommend running this in a debugger, via SSH from another machine, so that you can see the debugger output at all time. With the 'VerboseReporting' option this will dump lots of info to the debugger TTY allowing you to help me tune the driver based on its workload.

What to do
Read this from beginning to end, and slowly follow each of the steps.
http://elinux.org/RPi_Xorg_rpi_Driver#Memory_layout
http://elinux.org/RPi_Xorg_rpi_Driver#I ... the_driver
http://elinux.org/RPi_Xorg_rpi_Driver#C ... the_driver
When things go wrong, read this:
http://elinux.org/RPi_Xorg_rpi_Driver#Troubleshooting

Yes, it's just currently for Raspbian hard float, and no I haven't yet written compilation instructions.

Whatever happens, please report back to this thread! I would like to ensure the instructions are as good as possible, so that people can do it all without my assistance.

Misc
If you're interested in directly programming the GPU (it's entertaining) then I'd recommend starting here where these guys have done a stellar job. Anyone wanting to write an OpenCL run-time should start here.

If you're interested in writing for the Linux kernel I'd recommend reading this. Some of it is out of date, but still very helpful. I read it cover-to-cover!

If reverse engineering or information derived through reverse engineering is not permitted in your country, please make sure to disable the VpuOffload option. The ARM side does not make use of RE.

Thanks
I've had lots of help on this task so far, and my thanks go to them. The people who have tested stuff (Liam, Charlie, Josh, Alex, there are more...) other people for technical assistance (Siarhei, Michel, the DMA controller guy at Broadcom) VPU help (Herman, Tiernan-your disassembler!) misc (Eben). Finally a big thanks to Dom for all the endless emails.

/beer
User avatar
Posts: 345
Joined: Mon Jan 30, 2012 2:09 pm
Location: London
by yaggi » Fri Jan 04, 2013 6:39 pm
Amazing work! Thanks for the endless effort you've put in to get this running. I may be located in Canada but I will be sending you that beer. ;)
Posts: 23
Joined: Wed Dec 12, 2012 3:47 pm
by aaa801 » Fri Jan 04, 2013 9:41 pm
good work
Posts: 427
Joined: Mon Jun 04, 2012 9:06 pm
Location: Berkshire
by SSilver2k2 » Fri Jan 04, 2013 10:48 pm
I will test my emulators and PiMAME with it. Thanks so much!
My blog of various geeky things - http://blog.sheasilverman.com
DeskCade.com - Mini Raspberry Pi Arcade Cabinet
PiMAME - http://pimame.org
Posts: 177
Joined: Wed Jun 06, 2012 1:51 am
Location: United States
by juppiter89 » Fri Jan 04, 2013 11:00 pm
Sorry double post :lol:
Last edited by juppiter89 on Fri Jan 04, 2013 11:08 pm, edited 1 time in total.
Posts: 68
Joined: Fri Jan 04, 2013 10:50 pm
by juppiter89 » Fri Jan 04, 2013 11:08 pm
Hi Simon, thank you very much for your great work :)
I followed your instructions until I stopped at "Running it" section: i can get after the "Checking that it works...", but it does hang up with a "FBDEV_RPI(0): FBIOBLANK: Operation not permitted" error. What can i do? Thank you again and sorry for my English :roll:

Full run command log:
Code: Select all
Starting program: /usr/bin/Xorg -verbose -keeptty
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/arm-linux-gnueabihf/libthread_db.so.1".
_XSERVTransSocketOpenCOTSServer: Unable to open socket for inet6
_XSERVTransOpen: transport open failed for inet6/raspberrypi:0
_XSERVTransMakeAllCOTSServerListeners: failed to open listener for inet6

X.Org X Server 1.12.3.902 (1.12.4 RC 2)
Release Date: 2012-08-19
X Protocol Version 11, Revision 0
Build Operating System: Linux 3.2.27+ armv6l Debian
Current Operating System: Linux raspberrypi 3.6.11+ #348 PREEMPT Tue Jan 1 16:33:22 GMT 2013 armv6l
Kernel command line: dma.dmachans=0x7f35 bcm2708_fb.fbwidth=1360 bcm2708_fb.fbheight=768 bcm2708.boardrev=0xf bcm2708.serial=0x22fc8e8a smsc95xx.macaddr=B8:27:EB:FC:8E:8A bcm2708_fb.fbdepth=32 sdhci-bcm2708.emmc_clock_freq=100000000 vc-cma-mem=0/0x14c00000@0xa000000 mem=0x9000000@0x0 mem=0x14c00000@0xa000000 vc_mem.mem_base=0x1ec00000 vc_mem.mem_size=0x20000000  dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait discard data=writeback dwc_otg.speed=1
Build Date: 30 September 2012  11:33:39AM
xorg-server 2:1.12.3.902-1 (Julien Cristau <jcristau@debian.org>)
Current version of pixman: 0.26.0
   Before reporting problems, check http://wiki.x.org
   to make sure that you have the latest version.
Markers: (--) probed, (**) from config file, (==) default setting,
   (++) from command line, (!!) notice, (II) informational,
   (WW) warning, (EE) error, (NI) not implemented, (??) unknown.
(==) Log file: "/var/log/Xorg.0.log", Time: Sat Jan  5 00:02:56 2013
(==) Using system config directory "/usr/share/X11/xorg.conf.d"
(==) No Layout section.  Using the first Screen section.
(==) No screen section available. Using defaults.
(**) |-->Screen "Default Screen Section" (0)
(**) |   |-->Monitor "<default monitor>"
(==) No device specified for screen "Default Screen Section".
   Using the first device section listed.
(**) |   |-->Device "Card0"
(==) No monitor specified for screen "Default Screen Section".
   Using a default monitor configuration.
(==) Automatically adding devices
(==) Automatically enabling devices
(WW) The directory "/usr/share/fonts/X11/cyrillic" does not exist.
   Entry deleted from font path.
(WW) The directory "/var/lib/defoma/x-ttcidfont-conf.d/dirs/TrueType" does not exist.
   Entry deleted from font path.
(==) FontPath set to:
   /usr/share/fonts/X11/misc,
   /usr/share/fonts/X11/100dpi/:unscaled,
   /usr/share/fonts/X11/75dpi/:unscaled,
   /usr/share/fonts/X11/Type1,
   /usr/share/fonts/X11/100dpi,
   /usr/share/fonts/X11/75dpi,
   built-ins
(==) ModulePath set to "/usr/lib/xorg/modules"
(II) The server relies on udev to provide the list of input devices.
   If no devices become available, reconfigure udev or disable AutoAddDevices.
(II) Loading /usr/lib/xorg/modules/extensions/libextmod.so
(II) Module extmod: vendor="X.Org Foundation"
   compiled for 1.12.3.902, module version = 1.0.0
(II) Loading /usr/lib/xorg/modules/extensions/libdbe.so
(II) Module dbe: vendor="X.Org Foundation"
   compiled for 1.12.3.902, module version = 1.0.0
(II) Loading /usr/lib/xorg/modules/extensions/libglx.so
(II) Module glx: vendor="X.Org Foundation"
   compiled for 1.12.3.902, module version = 1.0.0
(==) AIGLX enabled
(II) Loading /usr/lib/xorg/modules/extensions/librecord.so
(II) Module record: vendor="X.Org Foundation"
   compiled for 1.12.3.902, module version = 1.13.0
(II) Loading /usr/lib/xorg/modules/extensions/libdri.so
(II) Module dri: vendor="X.Org Foundation"
   compiled for 1.12.3.902, module version = 1.0.0
(II) Loading /usr/lib/xorg/modules/extensions/libdri2.so
(II) Module dri2: vendor="X.Org Foundation"
   compiled for 1.12.3.902, module version = 1.2.0
(II) Loading /usr/lib/xorg/modules/drivers/fbdev_drv.so
(II) Module fbdev: vendor="X.Org Foundation"
   compiled for 1.12.3.902, module version = 0.4.2
(II) FBDEV_RPI: driver for framebuffer: fbdev
(--) using VT number 7

(WW) Falling back to old probe method for fbdev
(II) Loading /usr/lib/xorg/modules/libfbdevhw.so
(II) Module fbdevhw: vendor="X.Org Foundation"
   compiled for 1.12.3.902, module version = 0.0.2
(II) FBDEV_RPI(0): using default device
(WW) VGA arbiter: cannot open kernel arbiter, no multi-card support
(II) FBDEV_RPI(0): Raspberry Pi Xorg driver build date Jan  3 2013 build time 22:54:08
(II) FBDEV_RPI(0): Creating default Display subsection in Screen section
   "Default Screen Section" for depth/fbbpp 24/32
(==) FBDEV_RPI(0): Depth 24, (==) framebuffer bpp 32
(==) FBDEV_RPI(0): RGB weight 888
(==) FBDEV_RPI(0): Default visual is TrueColor
(==) FBDEV_RPI(0): Using gamma correction (1.0, 1.0, 1.0)
(II) FBDEV_RPI(0): hardware: BCM2708 FB (video memory: 4080kB)
(II) Loading /usr/lib/xorg/modules/libfb.so
(II) Module fb: vendor="X.Org Foundation"
   compiled for 1.12.3.902, module version = 1.0.0
(II) FBDEV_RPI(0): kernel interface initialised
(**) FBDEV_RPI(0): Using EXA acceleration
(II) Loading /usr/lib/xorg/modules/libexa.so
(II) Module exa: vendor="X.Org Foundation"
   compiled for 1.12.3.902, module version = 2.5.0
(**) FBDEV_RPI(0): Using 20971520 bytes (20.00 MB) of memory as offscreen
(**) FBDEV_RPI(0): Attempting to open VCIO mailbox
(**) FBDEV_RPI(0): Attempting to load VPU code
(**) FBDEV_RPI(0): Loaded VPU binary /usr/share/X11/vpu_offload_asm.bin at offset 0
(II) FBDEV_RPI(0): Symbol table dump
(II) FBDEV_RPI(0):   0:     c TRUE  Identify
(II) FBDEV_RPI(0):   1:    14 TRUE  GetVersion
(II) FBDEV_RPI(0):   2:    20 FALSE vpu_over_a8r8g8b8_x8b8g8r8_invalid_nonvarying
(II) FBDEV_RPI(0):   3:   2a0 FALSE vpu_over_a8r8g8b8_x8b8g8r8_invalid_normal
(II) FBDEV_RPI(0):   4:   440 TRUE  vpu_over_a8r8g8b8_x8b8g8r8_invalid
(II) FBDEV_RPI(0):   5:   500 FALSE vpu_over_a8r8g8b8_x8b8g8r8_a8_valid_nonvarying
(II) FBDEV_RPI(0):   6:   790 FALSE vpu_over_a8r8g8b8_x8b8g8r8_a8_valid_normal
(II) FBDEV_RPI(0):   7:   a24 TRUE  vpu_over_a8r8g8b8_x8b8g8r8_a8_valid
(II) FBDEV_RPI(0):   8:   b00 FALSE vpu_over_a8r8g8b8_a8r8g8b8_invalid_nonvarying
(II) FBDEV_RPI(0):   9:   d94 FALSE vpu_over_a8r8g8b8_a8r8g8b8_invalid_normal
(II) FBDEV_RPI(0):  10:   f64 TRUE  vpu_over_a8r8g8b8_a8r8g8b8_invalid
(II) FBDEV_RPI(0):  11:  1020 FALSE vpu_over_a8r8g8b8_a8r8g8b8_a8_valid_nonvarying
(II) FBDEV_RPI(0):  12:  12c4 FALSE vpu_over_a8r8g8b8_a8r8g8b8_a8_valid_normal
(II) FBDEV_RPI(0):  13:  1588 TRUE  vpu_over_a8r8g8b8_a8r8g8b8_a8_valid
(II) FBDEV_RPI(0):  14:  1660 FALSE vpu_over_x8r8g8b8_x8r8g8b8_invalid_nonvarying
(II) FBDEV_RPI(0):  15:  18c8 FALSE vpu_over_x8r8g8b8_x8r8g8b8_invalid_normal
(II) FBDEV_RPI(0):  16:  1a70 TRUE  vpu_over_x8r8g8b8_x8r8g8b8_invalid
(II) FBDEV_RPI(0):  17:  1b20 FALSE vpu_over_x8r8g8b8_x8r8g8b8_a8_valid_nonvarying
(II) FBDEV_RPI(0):  18:  1d98 FALSE vpu_over_x8r8g8b8_x8r8g8b8_a8_valid_normal
(II) FBDEV_RPI(0):  19:  2034 TRUE  vpu_over_x8r8g8b8_x8r8g8b8_a8_valid
(II) FBDEV_RPI(0):  20:  2100 FALSE vpu_over_x8r8g8b8_x8r8g8b8_a8b8g8r8_valid_nonvarying
(II) FBDEV_RPI(0):  21:  2378 FALSE vpu_over_x8r8g8b8_x8r8g8b8_a8b8g8r8_valid_normal
(II) FBDEV_RPI(0):  22:  2614 TRUE  vpu_over_x8r8g8b8_x8r8g8b8_a8b8g8r8_valid
(II) FBDEV_RPI(0):  23:  2700 FALSE vpu_over_x8b8g8r8_x8b8g8r8_invalid_nonvarying
(II) FBDEV_RPI(0):  24:  2968 FALSE vpu_over_x8b8g8r8_x8b8g8r8_invalid_normal
(II) FBDEV_RPI(0):  25:  2b10 TRUE  vpu_over_x8b8g8r8_x8b8g8r8_invalid
(II) FBDEV_RPI(0):  26:  2bc0 FALSE vpu_over_x8b8g8r8_x8b8g8r8_a8_valid_nonvarying
(II) FBDEV_RPI(0):  27:  2e38 FALSE vpu_over_x8b8g8r8_x8b8g8r8_a8_valid_normal
(II) FBDEV_RPI(0):  28:  30d4 TRUE  vpu_over_x8b8g8r8_x8b8g8r8_a8_valid
(II) FBDEV_RPI(0):  29:  31a0 FALSE vpu_over_x8b8g8r8_x8b8g8r8_a8r8g8b8_valid_nonvarying
(II) FBDEV_RPI(0):  30:  3418 FALSE vpu_over_x8b8g8r8_x8b8g8r8_a8r8g8b8_valid_normal
(II) FBDEV_RPI(0):  31:  36b4 TRUE  vpu_over_x8b8g8r8_x8b8g8r8_a8r8g8b8_valid
(II) FBDEV_RPI(0):  32:  37a0 FALSE vpu_add_a8r8g8b8_x8b8g8r8_invalid_nonvarying
(II) FBDEV_RPI(0):  33:  397c FALSE vpu_add_a8r8g8b8_x8b8g8r8_invalid_normal
(II) FBDEV_RPI(0):  34:  3a78 TRUE  vpu_add_a8r8g8b8_x8b8g8r8_invalid
(II) FBDEV_RPI(0):  35:  3b40 FALSE vpu_add_a8r8g8b8_x8b8g8r8_a8_valid_nonvarying
(II) FBDEV_RPI(0):  36:  3d30 FALSE vpu_add_a8r8g8b8_x8b8g8r8_a8_valid_normal
(II) FBDEV_RPI(0):  37:  3f24 TRUE  vpu_add_a8r8g8b8_x8b8g8r8_a8_valid
(II) FBDEV_RPI(0):  38:  4000 FALSE vpu_add_a8r8g8b8_a8r8g8b8_invalid_nonvarying
(II) FBDEV_RPI(0):  39:  41c0 FALSE vpu_add_a8r8g8b8_a8r8g8b8_invalid_normal
(II) FBDEV_RPI(0):  40:  42bc TRUE  vpu_add_a8r8g8b8_a8r8g8b8_invalid
(II) FBDEV_RPI(0):  41:  4380 FALSE vpu_add_a8r8g8b8_a8r8g8b8_a8_valid_nonvarying
(II) FBDEV_RPI(0):  42:  4550 FALSE vpu_add_a8r8g8b8_a8r8g8b8_a8_valid_normal
(II) FBDEV_RPI(0):  43:  4744 TRUE  vpu_add_a8r8g8b8_a8r8g8b8_a8_valid
(II) FBDEV_RPI(0):  44:  4820 FALSE vpu_add_x8r8g8b8_x8r8g8b8_invalid_nonvarying
(II) FBDEV_RPI(0):  45:  49e4 FALSE vpu_add_x8r8g8b8_x8r8g8b8_invalid_normal
(II) FBDEV_RPI(0):  46:  4aec TRUE  vpu_add_x8r8g8b8_x8r8g8b8_invalid
(II) FBDEV_RPI(0):  47:  4ba0 FALSE vpu_add_x8r8g8b8_x8r8g8b8_a8_valid_nonvarying
(II) FBDEV_RPI(0):  48:  4d78 FALSE vpu_add_x8r8g8b8_x8r8g8b8_a8_valid_normal
(II) FBDEV_RPI(0):  49:  4f74 TRUE  vpu_add_x8r8g8b8_x8r8g8b8_a8_valid
(II) FBDEV_RPI(0):  50:  5040 FALSE vpu_add_x8r8g8b8_x8r8g8b8_a8b8g8r8_valid_nonvarying
(II) FBDEV_RPI(0):  51:  5218 FALSE vpu_add_x8r8g8b8_x8r8g8b8_a8b8g8r8_valid_normal
(II) FBDEV_RPI(0):  52:  5414 TRUE  vpu_add_x8r8g8b8_x8r8g8b8_a8b8g8r8_valid
(II) FBDEV_RPI(0):  53:  5500 FALSE vpu_add_x8b8g8r8_x8b8g8r8_invalid_nonvarying
(II) FBDEV_RPI(0):  54:  56c4 FALSE vpu_add_x8b8g8r8_x8b8g8r8_invalid_normal
(II) FBDEV_RPI(0):  55:  57cc TRUE  vpu_add_x8b8g8r8_x8b8g8r8_invalid
(II) FBDEV_RPI(0):  56:  5880 FALSE vpu_add_x8b8g8r8_x8b8g8r8_a8_valid_nonvarying
(II) FBDEV_RPI(0):  57:  5a58 FALSE vpu_add_x8b8g8r8_x8b8g8r8_a8_valid_normal
(II) FBDEV_RPI(0):  58:  5c54 TRUE  vpu_add_x8b8g8r8_x8b8g8r8_a8_valid
(II) FBDEV_RPI(0):  59:  5d20 FALSE vpu_add_x8b8g8r8_x8b8g8r8_a8r8g8b8_valid_nonvarying
(II) FBDEV_RPI(0):  60:  5ef8 FALSE vpu_add_x8b8g8r8_x8b8g8r8_a8r8g8b8_valid_normal
(II) FBDEV_RPI(0):  61:  60f4 TRUE  vpu_add_x8b8g8r8_x8b8g8r8_a8r8g8b8_valid
(II) FBDEV_RPI(0):  62:  61e0 FALSE vpu_add_a8r8g8b8_a8_a8_valid_nonvarying
(II) FBDEV_RPI(0):  63:  6300 FALSE vpu_add_a8r8g8b8_a8_a8_valid_normal
(II) FBDEV_RPI(0):  64:  6440 TRUE  vpu_add_a8r8g8b8_a8_a8_valid
(II) FBDEV_RPI(0):  65:  6500 FALSE vpu_add_a8r8g8b8_a8_invalid_nonvarying
(II) FBDEV_RPI(0):  66:  660c FALSE vpu_add_a8r8g8b8_a8_invalid_normal
(II) FBDEV_RPI(0):  67:  66ec TRUE  vpu_add_a8r8g8b8_a8_invalid
(II) FBDEV_RPI(0):  68:  67a0 TRUE  VpuComposite
(II) FBDEV_RPI(0): End symbol table dump
(**) FBDEV_RPI(0): 30510 bytes of GPU-visible memory needed for VPU code
(**) FBDEV_RPI(0): Virtually contiguous physically contiguous memory via /dev/dmaer_4k and VideoCore interface selected
(**) FBDEV_RPI(0): Either from static memory allocation or CMA
(II) FBDEV_RPI(0): VPU code uploaded to bus address 4b841000
(II) FBDEV_RPI(0): NOTE: if it hangs at the next line, ctrl-z, sync and reboot your Raspberry Pi
(II) FBDEV_RPI(0): Checking that it works...
(II) FBDEV_RPI(0): Identified correctly
(II) FBDEV_RPI(0): Using version 1.2 of binary
(II) FBDEV_RPI(0): checking modes against framebuffer device...
(II) FBDEV_RPI(0): checking modes against monitor...
(--) FBDEV_RPI(0): Virtual size is 1360x768 (pitch 1360)
(**) FBDEV_RPI(0):  Built-in mode "current"
(==) FBDEV_RPI(0): DPI set to (96, 96)
(==) Depth 24 pixmap format is 32 bpp
(EE) FBDEV_RPI(0): FBIOBLANK: Operation not permitted
(**) FBDEV_RPI(0): max AXI burst suggested: 10
(**) FBDEV_RPI(0): Experimental self-managed memory
(II) EXA(0): Driver allocated offscreen pixmaps
(II) EXA(0): Driver registered support for the following operations:
(II)         Solid
(II)         Copy
(II)         Composite (RENDER acceleration)
(II)         UploadToScreen
(II)         DownloadFromScreen
(==) FBDEV_RPI(0): Backing store disabled
(==) FBDEV_RPI(0): DPMS enabled
(==) RandR enabled
(II) SELinux: Disabled on system
(II) AIGLX: Screen 0 is not DRI2 capable
(II) AIGLX: Screen 0 is not DRI capable
(II) AIGLX: Loaded and initialized swrast
(II) GLX: Initialized DRISWRAST GL provider for screen 0
(EE) FBDEV_RPI(0): FBIOBLANK: Operation not permitted
Posts: 68
Joined: Fri Jan 04, 2013 10:50 pm
by yaggi » Fri Jan 04, 2013 11:12 pm
This is where I got stuck before as well before.
You should be logged into the RPi with SSH and running the last 'running it' commands (Not locally on your Pi).
Then open up another SSH and run the command startlxde and you should get your X windows.

I think that should do it, however if its not the same issue then I got nothing. ;)
Posts: 23
Joined: Wed Dec 12, 2012 3:47 pm
by rymate1234 » Fri Jan 04, 2013 11:15 pm
juppiter89 wrote:Hi Simon, thank you very much for your great work :)
I followed your instructions until I stopped at "Running it" section: i can get after the "Checking that it works...", but it does hang up with a "FBDEV_RPI(0): FBIOBLANK: Operation not permitted" error. What can i do? Thank you again and sorry for my English :roll:

Full run command log:
Code: Select all
Starting program: /usr/bin/Xorg -verbose -keeptty
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/arm-linux-gnueabihf/libthread_db.so.1".
_XSERVTransSocketOpenCOTSServer: Unable to open socket for inet6
_XSERVTransOpen: transport open failed for inet6/raspberrypi:0
_XSERVTransMakeAllCOTSServerListeners: failed to open listener for inet6

X.Org X Server 1.12.3.902 (1.12.4 RC 2)
Release Date: 2012-08-19
X Protocol Version 11, Revision 0
Build Operating System: Linux 3.2.27+ armv6l Debian
Current Operating System: Linux raspberrypi 3.6.11+ #348 PREEMPT Tue Jan 1 16:33:22 GMT 2013 armv6l
Kernel command line: dma.dmachans=0x7f35 bcm2708_fb.fbwidth=1360 bcm2708_fb.fbheight=768 bcm2708.boardrev=0xf bcm2708.serial=0x22fc8e8a smsc95xx.macaddr=B8:27:EB:FC:8E:8A bcm2708_fb.fbdepth=32 sdhci-bcm2708.emmc_clock_freq=100000000 vc-cma-mem=0/0x14c00000@0xa000000 mem=0x9000000@0x0 mem=0x14c00000@0xa000000 vc_mem.mem_base=0x1ec00000 vc_mem.mem_size=0x20000000  dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait discard data=writeback dwc_otg.speed=1
Build Date: 30 September 2012  11:33:39AM
xorg-server 2:1.12.3.902-1 (Julien Cristau <jcristau@debian.org>)
Current version of pixman: 0.26.0
   Before reporting problems, check http://wiki.x.org
   to make sure that you have the latest version.
Markers: (--) probed, (**) from config file, (==) default setting,
   (++) from command line, (!!) notice, (II) informational,
   (WW) warning, (EE) error, (NI) not implemented, (??) unknown.
(==) Log file: "/var/log/Xorg.0.log", Time: Sat Jan  5 00:02:56 2013
(==) Using system config directory "/usr/share/X11/xorg.conf.d"
(==) No Layout section.  Using the first Screen section.
(==) No screen section available. Using defaults.
(**) |-->Screen "Default Screen Section" (0)
(**) |   |-->Monitor "<default monitor>"
(==) No device specified for screen "Default Screen Section".
   Using the first device section listed.
(**) |   |-->Device "Card0"
(==) No monitor specified for screen "Default Screen Section".
   Using a default monitor configuration.
(==) Automatically adding devices
(==) Automatically enabling devices
(WW) The directory "/usr/share/fonts/X11/cyrillic" does not exist.
   Entry deleted from font path.
(WW) The directory "/var/lib/defoma/x-ttcidfont-conf.d/dirs/TrueType" does not exist.
   Entry deleted from font path.
(==) FontPath set to:
   /usr/share/fonts/X11/misc,
   /usr/share/fonts/X11/100dpi/:unscaled,
   /usr/share/fonts/X11/75dpi/:unscaled,
   /usr/share/fonts/X11/Type1,
   /usr/share/fonts/X11/100dpi,
   /usr/share/fonts/X11/75dpi,
   built-ins
(==) ModulePath set to "/usr/lib/xorg/modules"
(II) The server relies on udev to provide the list of input devices.
   If no devices become available, reconfigure udev or disable AutoAddDevices.
(II) Loading /usr/lib/xorg/modules/extensions/libextmod.so
(II) Module extmod: vendor="X.Org Foundation"
   compiled for 1.12.3.902, module version = 1.0.0
(II) Loading /usr/lib/xorg/modules/extensions/libdbe.so
(II) Module dbe: vendor="X.Org Foundation"
   compiled for 1.12.3.902, module version = 1.0.0
(II) Loading /usr/lib/xorg/modules/extensions/libglx.so
(II) Module glx: vendor="X.Org Foundation"
   compiled for 1.12.3.902, module version = 1.0.0
(==) AIGLX enabled
(II) Loading /usr/lib/xorg/modules/extensions/librecord.so
(II) Module record: vendor="X.Org Foundation"
   compiled for 1.12.3.902, module version = 1.13.0
(II) Loading /usr/lib/xorg/modules/extensions/libdri.so
(II) Module dri: vendor="X.Org Foundation"
   compiled for 1.12.3.902, module version = 1.0.0
(II) Loading /usr/lib/xorg/modules/extensions/libdri2.so
(II) Module dri2: vendor="X.Org Foundation"
   compiled for 1.12.3.902, module version = 1.2.0
(II) Loading /usr/lib/xorg/modules/drivers/fbdev_drv.so
(II) Module fbdev: vendor="X.Org Foundation"
   compiled for 1.12.3.902, module version = 0.4.2
(II) FBDEV_RPI: driver for framebuffer: fbdev
(--) using VT number 7

(WW) Falling back to old probe method for fbdev
(II) Loading /usr/lib/xorg/modules/libfbdevhw.so
(II) Module fbdevhw: vendor="X.Org Foundation"
   compiled for 1.12.3.902, module version = 0.0.2
(II) FBDEV_RPI(0): using default device
(WW) VGA arbiter: cannot open kernel arbiter, no multi-card support
(II) FBDEV_RPI(0): Raspberry Pi Xorg driver build date Jan  3 2013 build time 22:54:08
(II) FBDEV_RPI(0): Creating default Display subsection in Screen section
   "Default Screen Section" for depth/fbbpp 24/32
(==) FBDEV_RPI(0): Depth 24, (==) framebuffer bpp 32
(==) FBDEV_RPI(0): RGB weight 888
(==) FBDEV_RPI(0): Default visual is TrueColor
(==) FBDEV_RPI(0): Using gamma correction (1.0, 1.0, 1.0)
(II) FBDEV_RPI(0): hardware: BCM2708 FB (video memory: 4080kB)
(II) Loading /usr/lib/xorg/modules/libfb.so
(II) Module fb: vendor="X.Org Foundation"
   compiled for 1.12.3.902, module version = 1.0.0
(II) FBDEV_RPI(0): kernel interface initialised
(**) FBDEV_RPI(0): Using EXA acceleration
(II) Loading /usr/lib/xorg/modules/libexa.so
(II) Module exa: vendor="X.Org Foundation"
   compiled for 1.12.3.902, module version = 2.5.0
(**) FBDEV_RPI(0): Using 20971520 bytes (20.00 MB) of memory as offscreen
(**) FBDEV_RPI(0): Attempting to open VCIO mailbox
(**) FBDEV_RPI(0): Attempting to load VPU code
(**) FBDEV_RPI(0): Loaded VPU binary /usr/share/X11/vpu_offload_asm.bin at offset 0
(II) FBDEV_RPI(0): Symbol table dump
(II) FBDEV_RPI(0):   0:     c TRUE  Identify
(II) FBDEV_RPI(0):   1:    14 TRUE  GetVersion
(II) FBDEV_RPI(0):   2:    20 FALSE vpu_over_a8r8g8b8_x8b8g8r8_invalid_nonvarying
(II) FBDEV_RPI(0):   3:   2a0 FALSE vpu_over_a8r8g8b8_x8b8g8r8_invalid_normal
(II) FBDEV_RPI(0):   4:   440 TRUE  vpu_over_a8r8g8b8_x8b8g8r8_invalid
(II) FBDEV_RPI(0):   5:   500 FALSE vpu_over_a8r8g8b8_x8b8g8r8_a8_valid_nonvarying
(II) FBDEV_RPI(0):   6:   790 FALSE vpu_over_a8r8g8b8_x8b8g8r8_a8_valid_normal
(II) FBDEV_RPI(0):   7:   a24 TRUE  vpu_over_a8r8g8b8_x8b8g8r8_a8_valid
(II) FBDEV_RPI(0):   8:   b00 FALSE vpu_over_a8r8g8b8_a8r8g8b8_invalid_nonvarying
(II) FBDEV_RPI(0):   9:   d94 FALSE vpu_over_a8r8g8b8_a8r8g8b8_invalid_normal
(II) FBDEV_RPI(0):  10:   f64 TRUE  vpu_over_a8r8g8b8_a8r8g8b8_invalid
(II) FBDEV_RPI(0):  11:  1020 FALSE vpu_over_a8r8g8b8_a8r8g8b8_a8_valid_nonvarying
(II) FBDEV_RPI(0):  12:  12c4 FALSE vpu_over_a8r8g8b8_a8r8g8b8_a8_valid_normal
(II) FBDEV_RPI(0):  13:  1588 TRUE  vpu_over_a8r8g8b8_a8r8g8b8_a8_valid
(II) FBDEV_RPI(0):  14:  1660 FALSE vpu_over_x8r8g8b8_x8r8g8b8_invalid_nonvarying
(II) FBDEV_RPI(0):  15:  18c8 FALSE vpu_over_x8r8g8b8_x8r8g8b8_invalid_normal
(II) FBDEV_RPI(0):  16:  1a70 TRUE  vpu_over_x8r8g8b8_x8r8g8b8_invalid
(II) FBDEV_RPI(0):  17:  1b20 FALSE vpu_over_x8r8g8b8_x8r8g8b8_a8_valid_nonvarying
(II) FBDEV_RPI(0):  18:  1d98 FALSE vpu_over_x8r8g8b8_x8r8g8b8_a8_valid_normal
(II) FBDEV_RPI(0):  19:  2034 TRUE  vpu_over_x8r8g8b8_x8r8g8b8_a8_valid
(II) FBDEV_RPI(0):  20:  2100 FALSE vpu_over_x8r8g8b8_x8r8g8b8_a8b8g8r8_valid_nonvarying
(II) FBDEV_RPI(0):  21:  2378 FALSE vpu_over_x8r8g8b8_x8r8g8b8_a8b8g8r8_valid_normal
(II) FBDEV_RPI(0):  22:  2614 TRUE  vpu_over_x8r8g8b8_x8r8g8b8_a8b8g8r8_valid
(II) FBDEV_RPI(0):  23:  2700 FALSE vpu_over_x8b8g8r8_x8b8g8r8_invalid_nonvarying
(II) FBDEV_RPI(0):  24:  2968 FALSE vpu_over_x8b8g8r8_x8b8g8r8_invalid_normal
(II) FBDEV_RPI(0):  25:  2b10 TRUE  vpu_over_x8b8g8r8_x8b8g8r8_invalid
(II) FBDEV_RPI(0):  26:  2bc0 FALSE vpu_over_x8b8g8r8_x8b8g8r8_a8_valid_nonvarying
(II) FBDEV_RPI(0):  27:  2e38 FALSE vpu_over_x8b8g8r8_x8b8g8r8_a8_valid_normal
(II) FBDEV_RPI(0):  28:  30d4 TRUE  vpu_over_x8b8g8r8_x8b8g8r8_a8_valid
(II) FBDEV_RPI(0):  29:  31a0 FALSE vpu_over_x8b8g8r8_x8b8g8r8_a8r8g8b8_valid_nonvarying
(II) FBDEV_RPI(0):  30:  3418 FALSE vpu_over_x8b8g8r8_x8b8g8r8_a8r8g8b8_valid_normal
(II) FBDEV_RPI(0):  31:  36b4 TRUE  vpu_over_x8b8g8r8_x8b8g8r8_a8r8g8b8_valid
(II) FBDEV_RPI(0):  32:  37a0 FALSE vpu_add_a8r8g8b8_x8b8g8r8_invalid_nonvarying
(II) FBDEV_RPI(0):  33:  397c FALSE vpu_add_a8r8g8b8_x8b8g8r8_invalid_normal
(II) FBDEV_RPI(0):  34:  3a78 TRUE  vpu_add_a8r8g8b8_x8b8g8r8_invalid
(II) FBDEV_RPI(0):  35:  3b40 FALSE vpu_add_a8r8g8b8_x8b8g8r8_a8_valid_nonvarying
(II) FBDEV_RPI(0):  36:  3d30 FALSE vpu_add_a8r8g8b8_x8b8g8r8_a8_valid_normal
(II) FBDEV_RPI(0):  37:  3f24 TRUE  vpu_add_a8r8g8b8_x8b8g8r8_a8_valid
(II) FBDEV_RPI(0):  38:  4000 FALSE vpu_add_a8r8g8b8_a8r8g8b8_invalid_nonvarying
(II) FBDEV_RPI(0):  39:  41c0 FALSE vpu_add_a8r8g8b8_a8r8g8b8_invalid_normal
(II) FBDEV_RPI(0):  40:  42bc TRUE  vpu_add_a8r8g8b8_a8r8g8b8_invalid
(II) FBDEV_RPI(0):  41:  4380 FALSE vpu_add_a8r8g8b8_a8r8g8b8_a8_valid_nonvarying
(II) FBDEV_RPI(0):  42:  4550 FALSE vpu_add_a8r8g8b8_a8r8g8b8_a8_valid_normal
(II) FBDEV_RPI(0):  43:  4744 TRUE  vpu_add_a8r8g8b8_a8r8g8b8_a8_valid
(II) FBDEV_RPI(0):  44:  4820 FALSE vpu_add_x8r8g8b8_x8r8g8b8_invalid_nonvarying
(II) FBDEV_RPI(0):  45:  49e4 FALSE vpu_add_x8r8g8b8_x8r8g8b8_invalid_normal
(II) FBDEV_RPI(0):  46:  4aec TRUE  vpu_add_x8r8g8b8_x8r8g8b8_invalid
(II) FBDEV_RPI(0):  47:  4ba0 FALSE vpu_add_x8r8g8b8_x8r8g8b8_a8_valid_nonvarying
(II) FBDEV_RPI(0):  48:  4d78 FALSE vpu_add_x8r8g8b8_x8r8g8b8_a8_valid_normal
(II) FBDEV_RPI(0):  49:  4f74 TRUE  vpu_add_x8r8g8b8_x8r8g8b8_a8_valid
(II) FBDEV_RPI(0):  50:  5040 FALSE vpu_add_x8r8g8b8_x8r8g8b8_a8b8g8r8_valid_nonvarying
(II) FBDEV_RPI(0):  51:  5218 FALSE vpu_add_x8r8g8b8_x8r8g8b8_a8b8g8r8_valid_normal
(II) FBDEV_RPI(0):  52:  5414 TRUE  vpu_add_x8r8g8b8_x8r8g8b8_a8b8g8r8_valid
(II) FBDEV_RPI(0):  53:  5500 FALSE vpu_add_x8b8g8r8_x8b8g8r8_invalid_nonvarying
(II) FBDEV_RPI(0):  54:  56c4 FALSE vpu_add_x8b8g8r8_x8b8g8r8_invalid_normal
(II) FBDEV_RPI(0):  55:  57cc TRUE  vpu_add_x8b8g8r8_x8b8g8r8_invalid
(II) FBDEV_RPI(0):  56:  5880 FALSE vpu_add_x8b8g8r8_x8b8g8r8_a8_valid_nonvarying
(II) FBDEV_RPI(0):  57:  5a58 FALSE vpu_add_x8b8g8r8_x8b8g8r8_a8_valid_normal
(II) FBDEV_RPI(0):  58:  5c54 TRUE  vpu_add_x8b8g8r8_x8b8g8r8_a8_valid
(II) FBDEV_RPI(0):  59:  5d20 FALSE vpu_add_x8b8g8r8_x8b8g8r8_a8r8g8b8_valid_nonvarying
(II) FBDEV_RPI(0):  60:  5ef8 FALSE vpu_add_x8b8g8r8_x8b8g8r8_a8r8g8b8_valid_normal
(II) FBDEV_RPI(0):  61:  60f4 TRUE  vpu_add_x8b8g8r8_x8b8g8r8_a8r8g8b8_valid
(II) FBDEV_RPI(0):  62:  61e0 FALSE vpu_add_a8r8g8b8_a8_a8_valid_nonvarying
(II) FBDEV_RPI(0):  63:  6300 FALSE vpu_add_a8r8g8b8_a8_a8_valid_normal
(II) FBDEV_RPI(0):  64:  6440 TRUE  vpu_add_a8r8g8b8_a8_a8_valid
(II) FBDEV_RPI(0):  65:  6500 FALSE vpu_add_a8r8g8b8_a8_invalid_nonvarying
(II) FBDEV_RPI(0):  66:  660c FALSE vpu_add_a8r8g8b8_a8_invalid_normal
(II) FBDEV_RPI(0):  67:  66ec TRUE  vpu_add_a8r8g8b8_a8_invalid
(II) FBDEV_RPI(0):  68:  67a0 TRUE  VpuComposite
(II) FBDEV_RPI(0): End symbol table dump
(**) FBDEV_RPI(0): 30510 bytes of GPU-visible memory needed for VPU code
(**) FBDEV_RPI(0): Virtually contiguous physically contiguous memory via /dev/dmaer_4k and VideoCore interface selected
(**) FBDEV_RPI(0): Either from static memory allocation or CMA
(II) FBDEV_RPI(0): VPU code uploaded to bus address 4b841000
(II) FBDEV_RPI(0): NOTE: if it hangs at the next line, ctrl-z, sync and reboot your Raspberry Pi
(II) FBDEV_RPI(0): Checking that it works...
(II) FBDEV_RPI(0): Identified correctly
(II) FBDEV_RPI(0): Using version 1.2 of binary
(II) FBDEV_RPI(0): checking modes against framebuffer device...
(II) FBDEV_RPI(0): checking modes against monitor...
(--) FBDEV_RPI(0): Virtual size is 1360x768 (pitch 1360)
(**) FBDEV_RPI(0):  Built-in mode "current"
(==) FBDEV_RPI(0): DPI set to (96, 96)
(==) Depth 24 pixmap format is 32 bpp
(EE) FBDEV_RPI(0): FBIOBLANK: Operation not permitted
(**) FBDEV_RPI(0): max AXI burst suggested: 10
(**) FBDEV_RPI(0): Experimental self-managed memory
(II) EXA(0): Driver allocated offscreen pixmaps
(II) EXA(0): Driver registered support for the following operations:
(II)         Solid
(II)         Copy
(II)         Composite (RENDER acceleration)
(II)         UploadToScreen
(II)         DownloadFromScreen
(==) FBDEV_RPI(0): Backing store disabled
(==) FBDEV_RPI(0): DPMS enabled
(==) RandR enabled
(II) SELinux: Disabled on system
(II) AIGLX: Screen 0 is not DRI2 capable
(II) AIGLX: Screen 0 is not DRI capable
(II) AIGLX: Loaded and initialized swrast
(II) GLX: Initialized DRISWRAST GL provider for screen 0
(EE) FBDEV_RPI(0): FBIOBLANK: Operation not permitted


I got that by launching it via the debug method. I think it might be because executing Xorg doesn't actually start a desktop. If you want to actually use the driver, just startx as you normally would. Not sure how to get debug info from that though yet.

yaggi wrote:This is where I got stuck before as well before.
You should be logged into the RPi with SSH and running the last 'running it' commands (Not locally on your Pi).
Then open up another SSH and run the command startlxde and you should get your X windows.

I think that should do it, however if its not the same issue then I got nothing. ;)


I didn't try that. :o
Posts: 22
Joined: Wed Oct 03, 2012 8:22 pm
by yaggi » Fri Jan 04, 2013 11:17 pm
rymate1234 wrote:
juppiter89 wrote:Hi Simon, thank you very much for your great work :)
I followed your instructions until I stopped at "Running it" section: i can get after the "Checking that it works...", but it does hang up with a "FBDEV_RPI(0): FBIOBLANK: Operation not permitted" error. What can i do? Thank you again and sorry for my English :roll:

Full run command log:
Code: Select all
Starting program: /usr/bin/Xorg -verbose -keeptty
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/arm-linux-gnueabihf/libthread_db.so.1".
_XSERVTransSocketOpenCOTSServer: Unable to open socket for inet6
_XSERVTransOpen: transport open failed for inet6/raspberrypi:0
_XSERVTransMakeAllCOTSServerListeners: failed to open listener for inet6

X.Org X Server 1.12.3.902 (1.12.4 RC 2)
Release Date: 2012-08-19
X Protocol Version 11, Revision 0
Build Operating System: Linux 3.2.27+ armv6l Debian
Current Operating System: Linux raspberrypi 3.6.11+ #348 PREEMPT Tue Jan 1 16:33:22 GMT 2013 armv6l
Kernel command line: dma.dmachans=0x7f35 bcm2708_fb.fbwidth=1360 bcm2708_fb.fbheight=768 bcm2708.boardrev=0xf bcm2708.serial=0x22fc8e8a smsc95xx.macaddr=B8:27:EB:FC:8E:8A bcm2708_fb.fbdepth=32 sdhci-bcm2708.emmc_clock_freq=100000000 vc-cma-mem=0/0x14c00000@0xa000000 mem=0x9000000@0x0 mem=0x14c00000@0xa000000 vc_mem.mem_base=0x1ec00000 vc_mem.mem_size=0x20000000  dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait discard data=writeback dwc_otg.speed=1
Build Date: 30 September 2012  11:33:39AM
xorg-server 2:1.12.3.902-1 (Julien Cristau <jcristau@debian.org>)
Current version of pixman: 0.26.0
   Before reporting problems, check http://wiki.x.org
   to make sure that you have the latest version.
Markers: (--) probed, (**) from config file, (==) default setting,
   (++) from command line, (!!) notice, (II) informational,
   (WW) warning, (EE) error, (NI) not implemented, (??) unknown.
(==) Log file: "/var/log/Xorg.0.log", Time: Sat Jan  5 00:02:56 2013
(==) Using system config directory "/usr/share/X11/xorg.conf.d"
(==) No Layout section.  Using the first Screen section.
(==) No screen section available. Using defaults.
(**) |-->Screen "Default Screen Section" (0)
(**) |   |-->Monitor "<default monitor>"
(==) No device specified for screen "Default Screen Section".
   Using the first device section listed.
(**) |   |-->Device "Card0"
(==) No monitor specified for screen "Default Screen Section".
   Using a default monitor configuration.
(==) Automatically adding devices
(==) Automatically enabling devices
(WW) The directory "/usr/share/fonts/X11/cyrillic" does not exist.
   Entry deleted from font path.
(WW) The directory "/var/lib/defoma/x-ttcidfont-conf.d/dirs/TrueType" does not exist.
   Entry deleted from font path.
(==) FontPath set to:
   /usr/share/fonts/X11/misc,
   /usr/share/fonts/X11/100dpi/:unscaled,
   /usr/share/fonts/X11/75dpi/:unscaled,
   /usr/share/fonts/X11/Type1,
   /usr/share/fonts/X11/100dpi,
   /usr/share/fonts/X11/75dpi,
   built-ins
(==) ModulePath set to "/usr/lib/xorg/modules"
(II) The server relies on udev to provide the list of input devices.
   If no devices become available, reconfigure udev or disable AutoAddDevices.
(II) Loading /usr/lib/xorg/modules/extensions/libextmod.so
(II) Module extmod: vendor="X.Org Foundation"
   compiled for 1.12.3.902, module version = 1.0.0
(II) Loading /usr/lib/xorg/modules/extensions/libdbe.so
(II) Module dbe: vendor="X.Org Foundation"
   compiled for 1.12.3.902, module version = 1.0.0
(II) Loading /usr/lib/xorg/modules/extensions/libglx.so
(II) Module glx: vendor="X.Org Foundation"
   compiled for 1.12.3.902, module version = 1.0.0
(==) AIGLX enabled
(II) Loading /usr/lib/xorg/modules/extensions/librecord.so
(II) Module record: vendor="X.Org Foundation"
   compiled for 1.12.3.902, module version = 1.13.0
(II) Loading /usr/lib/xorg/modules/extensions/libdri.so
(II) Module dri: vendor="X.Org Foundation"
   compiled for 1.12.3.902, module version = 1.0.0
(II) Loading /usr/lib/xorg/modules/extensions/libdri2.so
(II) Module dri2: vendor="X.Org Foundation"
   compiled for 1.12.3.902, module version = 1.2.0
(II) Loading /usr/lib/xorg/modules/drivers/fbdev_drv.so
(II) Module fbdev: vendor="X.Org Foundation"
   compiled for 1.12.3.902, module version = 0.4.2
(II) FBDEV_RPI: driver for framebuffer: fbdev
(--) using VT number 7

(WW) Falling back to old probe method for fbdev
(II) Loading /usr/lib/xorg/modules/libfbdevhw.so
(II) Module fbdevhw: vendor="X.Org Foundation"
   compiled for 1.12.3.902, module version = 0.0.2
(II) FBDEV_RPI(0): using default device
(WW) VGA arbiter: cannot open kernel arbiter, no multi-card support
(II) FBDEV_RPI(0): Raspberry Pi Xorg driver build date Jan  3 2013 build time 22:54:08
(II) FBDEV_RPI(0): Creating default Display subsection in Screen section
   "Default Screen Section" for depth/fbbpp 24/32
(==) FBDEV_RPI(0): Depth 24, (==) framebuffer bpp 32
(==) FBDEV_RPI(0): RGB weight 888
(==) FBDEV_RPI(0): Default visual is TrueColor
(==) FBDEV_RPI(0): Using gamma correction (1.0, 1.0, 1.0)
(II) FBDEV_RPI(0): hardware: BCM2708 FB (video memory: 4080kB)
(II) Loading /usr/lib/xorg/modules/libfb.so
(II) Module fb: vendor="X.Org Foundation"
   compiled for 1.12.3.902, module version = 1.0.0
(II) FBDEV_RPI(0): kernel interface initialised
(**) FBDEV_RPI(0): Using EXA acceleration
(II) Loading /usr/lib/xorg/modules/libexa.so
(II) Module exa: vendor="X.Org Foundation"
   compiled for 1.12.3.902, module version = 2.5.0
(**) FBDEV_RPI(0): Using 20971520 bytes (20.00 MB) of memory as offscreen
(**) FBDEV_RPI(0): Attempting to open VCIO mailbox
(**) FBDEV_RPI(0): Attempting to load VPU code
(**) FBDEV_RPI(0): Loaded VPU binary /usr/share/X11/vpu_offload_asm.bin at offset 0
(II) FBDEV_RPI(0): Symbol table dump
(II) FBDEV_RPI(0):   0:     c TRUE  Identify
(II) FBDEV_RPI(0):   1:    14 TRUE  GetVersion
(II) FBDEV_RPI(0):   2:    20 FALSE vpu_over_a8r8g8b8_x8b8g8r8_invalid_nonvarying
(II) FBDEV_RPI(0):   3:   2a0 FALSE vpu_over_a8r8g8b8_x8b8g8r8_invalid_normal
(II) FBDEV_RPI(0):   4:   440 TRUE  vpu_over_a8r8g8b8_x8b8g8r8_invalid
(II) FBDEV_RPI(0):   5:   500 FALSE vpu_over_a8r8g8b8_x8b8g8r8_a8_valid_nonvarying
(II) FBDEV_RPI(0):   6:   790 FALSE vpu_over_a8r8g8b8_x8b8g8r8_a8_valid_normal
(II) FBDEV_RPI(0):   7:   a24 TRUE  vpu_over_a8r8g8b8_x8b8g8r8_a8_valid
(II) FBDEV_RPI(0):   8:   b00 FALSE vpu_over_a8r8g8b8_a8r8g8b8_invalid_nonvarying
(II) FBDEV_RPI(0):   9:   d94 FALSE vpu_over_a8r8g8b8_a8r8g8b8_invalid_normal
(II) FBDEV_RPI(0):  10:   f64 TRUE  vpu_over_a8r8g8b8_a8r8g8b8_invalid
(II) FBDEV_RPI(0):  11:  1020 FALSE vpu_over_a8r8g8b8_a8r8g8b8_a8_valid_nonvarying
(II) FBDEV_RPI(0):  12:  12c4 FALSE vpu_over_a8r8g8b8_a8r8g8b8_a8_valid_normal
(II) FBDEV_RPI(0):  13:  1588 TRUE  vpu_over_a8r8g8b8_a8r8g8b8_a8_valid
(II) FBDEV_RPI(0):  14:  1660 FALSE vpu_over_x8r8g8b8_x8r8g8b8_invalid_nonvarying
(II) FBDEV_RPI(0):  15:  18c8 FALSE vpu_over_x8r8g8b8_x8r8g8b8_invalid_normal
(II) FBDEV_RPI(0):  16:  1a70 TRUE  vpu_over_x8r8g8b8_x8r8g8b8_invalid
(II) FBDEV_RPI(0):  17:  1b20 FALSE vpu_over_x8r8g8b8_x8r8g8b8_a8_valid_nonvarying
(II) FBDEV_RPI(0):  18:  1d98 FALSE vpu_over_x8r8g8b8_x8r8g8b8_a8_valid_normal
(II) FBDEV_RPI(0):  19:  2034 TRUE  vpu_over_x8r8g8b8_x8r8g8b8_a8_valid
(II) FBDEV_RPI(0):  20:  2100 FALSE vpu_over_x8r8g8b8_x8r8g8b8_a8b8g8r8_valid_nonvarying
(II) FBDEV_RPI(0):  21:  2378 FALSE vpu_over_x8r8g8b8_x8r8g8b8_a8b8g8r8_valid_normal
(II) FBDEV_RPI(0):  22:  2614 TRUE  vpu_over_x8r8g8b8_x8r8g8b8_a8b8g8r8_valid
(II) FBDEV_RPI(0):  23:  2700 FALSE vpu_over_x8b8g8r8_x8b8g8r8_invalid_nonvarying
(II) FBDEV_RPI(0):  24:  2968 FALSE vpu_over_x8b8g8r8_x8b8g8r8_invalid_normal
(II) FBDEV_RPI(0):  25:  2b10 TRUE  vpu_over_x8b8g8r8_x8b8g8r8_invalid
(II) FBDEV_RPI(0):  26:  2bc0 FALSE vpu_over_x8b8g8r8_x8b8g8r8_a8_valid_nonvarying
(II) FBDEV_RPI(0):  27:  2e38 FALSE vpu_over_x8b8g8r8_x8b8g8r8_a8_valid_normal
(II) FBDEV_RPI(0):  28:  30d4 TRUE  vpu_over_x8b8g8r8_x8b8g8r8_a8_valid
(II) FBDEV_RPI(0):  29:  31a0 FALSE vpu_over_x8b8g8r8_x8b8g8r8_a8r8g8b8_valid_nonvarying
(II) FBDEV_RPI(0):  30:  3418 FALSE vpu_over_x8b8g8r8_x8b8g8r8_a8r8g8b8_valid_normal
(II) FBDEV_RPI(0):  31:  36b4 TRUE  vpu_over_x8b8g8r8_x8b8g8r8_a8r8g8b8_valid
(II) FBDEV_RPI(0):  32:  37a0 FALSE vpu_add_a8r8g8b8_x8b8g8r8_invalid_nonvarying
(II) FBDEV_RPI(0):  33:  397c FALSE vpu_add_a8r8g8b8_x8b8g8r8_invalid_normal
(II) FBDEV_RPI(0):  34:  3a78 TRUE  vpu_add_a8r8g8b8_x8b8g8r8_invalid
(II) FBDEV_RPI(0):  35:  3b40 FALSE vpu_add_a8r8g8b8_x8b8g8r8_a8_valid_nonvarying
(II) FBDEV_RPI(0):  36:  3d30 FALSE vpu_add_a8r8g8b8_x8b8g8r8_a8_valid_normal
(II) FBDEV_RPI(0):  37:  3f24 TRUE  vpu_add_a8r8g8b8_x8b8g8r8_a8_valid
(II) FBDEV_RPI(0):  38:  4000 FALSE vpu_add_a8r8g8b8_a8r8g8b8_invalid_nonvarying
(II) FBDEV_RPI(0):  39:  41c0 FALSE vpu_add_a8r8g8b8_a8r8g8b8_invalid_normal
(II) FBDEV_RPI(0):  40:  42bc TRUE  vpu_add_a8r8g8b8_a8r8g8b8_invalid
(II) FBDEV_RPI(0):  41:  4380 FALSE vpu_add_a8r8g8b8_a8r8g8b8_a8_valid_nonvarying
(II) FBDEV_RPI(0):  42:  4550 FALSE vpu_add_a8r8g8b8_a8r8g8b8_a8_valid_normal
(II) FBDEV_RPI(0):  43:  4744 TRUE  vpu_add_a8r8g8b8_a8r8g8b8_a8_valid
(II) FBDEV_RPI(0):  44:  4820 FALSE vpu_add_x8r8g8b8_x8r8g8b8_invalid_nonvarying
(II) FBDEV_RPI(0):  45:  49e4 FALSE vpu_add_x8r8g8b8_x8r8g8b8_invalid_normal
(II) FBDEV_RPI(0):  46:  4aec TRUE  vpu_add_x8r8g8b8_x8r8g8b8_invalid
(II) FBDEV_RPI(0):  47:  4ba0 FALSE vpu_add_x8r8g8b8_x8r8g8b8_a8_valid_nonvarying
(II) FBDEV_RPI(0):  48:  4d78 FALSE vpu_add_x8r8g8b8_x8r8g8b8_a8_valid_normal
(II) FBDEV_RPI(0):  49:  4f74 TRUE  vpu_add_x8r8g8b8_x8r8g8b8_a8_valid
(II) FBDEV_RPI(0):  50:  5040 FALSE vpu_add_x8r8g8b8_x8r8g8b8_a8b8g8r8_valid_nonvarying
(II) FBDEV_RPI(0):  51:  5218 FALSE vpu_add_x8r8g8b8_x8r8g8b8_a8b8g8r8_valid_normal
(II) FBDEV_RPI(0):  52:  5414 TRUE  vpu_add_x8r8g8b8_x8r8g8b8_a8b8g8r8_valid
(II) FBDEV_RPI(0):  53:  5500 FALSE vpu_add_x8b8g8r8_x8b8g8r8_invalid_nonvarying
(II) FBDEV_RPI(0):  54:  56c4 FALSE vpu_add_x8b8g8r8_x8b8g8r8_invalid_normal
(II) FBDEV_RPI(0):  55:  57cc TRUE  vpu_add_x8b8g8r8_x8b8g8r8_invalid
(II) FBDEV_RPI(0):  56:  5880 FALSE vpu_add_x8b8g8r8_x8b8g8r8_a8_valid_nonvarying
(II) FBDEV_RPI(0):  57:  5a58 FALSE vpu_add_x8b8g8r8_x8b8g8r8_a8_valid_normal
(II) FBDEV_RPI(0):  58:  5c54 TRUE  vpu_add_x8b8g8r8_x8b8g8r8_a8_valid
(II) FBDEV_RPI(0):  59:  5d20 FALSE vpu_add_x8b8g8r8_x8b8g8r8_a8r8g8b8_valid_nonvarying
(II) FBDEV_RPI(0):  60:  5ef8 FALSE vpu_add_x8b8g8r8_x8b8g8r8_a8r8g8b8_valid_normal
(II) FBDEV_RPI(0):  61:  60f4 TRUE  vpu_add_x8b8g8r8_x8b8g8r8_a8r8g8b8_valid
(II) FBDEV_RPI(0):  62:  61e0 FALSE vpu_add_a8r8g8b8_a8_a8_valid_nonvarying
(II) FBDEV_RPI(0):  63:  6300 FALSE vpu_add_a8r8g8b8_a8_a8_valid_normal
(II) FBDEV_RPI(0):  64:  6440 TRUE  vpu_add_a8r8g8b8_a8_a8_valid
(II) FBDEV_RPI(0):  65:  6500 FALSE vpu_add_a8r8g8b8_a8_invalid_nonvarying
(II) FBDEV_RPI(0):  66:  660c FALSE vpu_add_a8r8g8b8_a8_invalid_normal
(II) FBDEV_RPI(0):  67:  66ec TRUE  vpu_add_a8r8g8b8_a8_invalid
(II) FBDEV_RPI(0):  68:  67a0 TRUE  VpuComposite
(II) FBDEV_RPI(0): End symbol table dump
(**) FBDEV_RPI(0): 30510 bytes of GPU-visible memory needed for VPU code
(**) FBDEV_RPI(0): Virtually contiguous physically contiguous memory via /dev/dmaer_4k and VideoCore interface selected
(**) FBDEV_RPI(0): Either from static memory allocation or CMA
(II) FBDEV_RPI(0): VPU code uploaded to bus address 4b841000
(II) FBDEV_RPI(0): NOTE: if it hangs at the next line, ctrl-z, sync and reboot your Raspberry Pi
(II) FBDEV_RPI(0): Checking that it works...
(II) FBDEV_RPI(0): Identified correctly
(II) FBDEV_RPI(0): Using version 1.2 of binary
(II) FBDEV_RPI(0): checking modes against framebuffer device...
(II) FBDEV_RPI(0): checking modes against monitor...
(--) FBDEV_RPI(0): Virtual size is 1360x768 (pitch 1360)
(**) FBDEV_RPI(0):  Built-in mode "current"
(==) FBDEV_RPI(0): DPI set to (96, 96)
(==) Depth 24 pixmap format is 32 bpp
(EE) FBDEV_RPI(0): FBIOBLANK: Operation not permitted
(**) FBDEV_RPI(0): max AXI burst suggested: 10
(**) FBDEV_RPI(0): Experimental self-managed memory
(II) EXA(0): Driver allocated offscreen pixmaps
(II) EXA(0): Driver registered support for the following operations:
(II)         Solid
(II)         Copy
(II)         Composite (RENDER acceleration)
(II)         UploadToScreen
(II)         DownloadFromScreen
(==) FBDEV_RPI(0): Backing store disabled
(==) FBDEV_RPI(0): DPMS enabled
(==) RandR enabled
(II) SELinux: Disabled on system
(II) AIGLX: Screen 0 is not DRI2 capable
(II) AIGLX: Screen 0 is not DRI capable
(II) AIGLX: Loaded and initialized swrast
(II) GLX: Initialized DRISWRAST GL provider for screen 0
(EE) FBDEV_RPI(0): FBIOBLANK: Operation not permitted


I got that by launching it via the debug method. I think it might be because executing Xorg doesn't actually start a desktop. If you want to actually use the driver, just startx as you normally would. Not sure how to get debug info from that though yet.

yaggi wrote:This is where I got stuck before as well before.
You should be logged into the RPi with SSH and running the last 'running it' commands (Not locally on your Pi).
Then open up another SSH and run the command startlxde and you should get your X windows.

I think that should do it, however if its not the same issue then I got nothing. ;)


I didn't try that. :o


I am pretty sure you're right.
Running this doesn't launch the desktop, so all he needs to do is run startlxde or startx and it should work just fine at that point.
Posts: 23
Joined: Wed Dec 12, 2012 3:47 pm
by rymate1234 » Fri Jan 04, 2013 11:20 pm
yaggi wrote:
rymate1234 wrote:
juppiter89 wrote:Hi Simon, thank you very much for your great work :)
I followed your instructions until I stopped at "Running it" section: i can get after the "Checking that it works...", but it does hang up with a "FBDEV_RPI(0): FBIOBLANK: Operation not permitted" error. What can i do? Thank you again and sorry for my English :roll:

Full run command log:
Code: Select all
Starting program: /usr/bin/Xorg -verbose -keeptty
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/arm-linux-gnueabihf/libthread_db.so.1".
_XSERVTransSocketOpenCOTSServer: Unable to open socket for inet6
_XSERVTransOpen: transport open failed for inet6/raspberrypi:0
_XSERVTransMakeAllCOTSServerListeners: failed to open listener for inet6

X.Org X Server 1.12.3.902 (1.12.4 RC 2)
Release Date: 2012-08-19
X Protocol Version 11, Revision 0
Build Operating System: Linux 3.2.27+ armv6l Debian
Current Operating System: Linux raspberrypi 3.6.11+ #348 PREEMPT Tue Jan 1 16:33:22 GMT 2013 armv6l
Kernel command line: dma.dmachans=0x7f35 bcm2708_fb.fbwidth=1360 bcm2708_fb.fbheight=768 bcm2708.boardrev=0xf bcm2708.serial=0x22fc8e8a smsc95xx.macaddr=B8:27:EB:FC:8E:8A bcm2708_fb.fbdepth=32 sdhci-bcm2708.emmc_clock_freq=100000000 vc-cma-mem=0/0x14c00000@0xa000000 mem=0x9000000@0x0 mem=0x14c00000@0xa000000 vc_mem.mem_base=0x1ec00000 vc_mem.mem_size=0x20000000  dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait discard data=writeback dwc_otg.speed=1
Build Date: 30 September 2012  11:33:39AM
xorg-server 2:1.12.3.902-1 (Julien Cristau <jcristau@debian.org>)
Current version of pixman: 0.26.0
   Before reporting problems, check http://wiki.x.org
   to make sure that you have the latest version.
Markers: (--) probed, (**) from config file, (==) default setting,
   (++) from command line, (!!) notice, (II) informational,
   (WW) warning, (EE) error, (NI) not implemented, (??) unknown.
(==) Log file: "/var/log/Xorg.0.log", Time: Sat Jan  5 00:02:56 2013
(==) Using system config directory "/usr/share/X11/xorg.conf.d"
(==) No Layout section.  Using the first Screen section.
(==) No screen section available. Using defaults.
(**) |-->Screen "Default Screen Section" (0)
(**) |   |-->Monitor "<default monitor>"
(==) No device specified for screen "Default Screen Section".
   Using the first device section listed.
(**) |   |-->Device "Card0"
(==) No monitor specified for screen "Default Screen Section".
   Using a default monitor configuration.
(==) Automatically adding devices
(==) Automatically enabling devices
(WW) The directory "/usr/share/fonts/X11/cyrillic" does not exist.
   Entry deleted from font path.
(WW) The directory "/var/lib/defoma/x-ttcidfont-conf.d/dirs/TrueType" does not exist.
   Entry deleted from font path.
(==) FontPath set to:
   /usr/share/fonts/X11/misc,
   /usr/share/fonts/X11/100dpi/:unscaled,
   /usr/share/fonts/X11/75dpi/:unscaled,
   /usr/share/fonts/X11/Type1,
   /usr/share/fonts/X11/100dpi,
   /usr/share/fonts/X11/75dpi,
   built-ins
(==) ModulePath set to "/usr/lib/xorg/modules"
(II) The server relies on udev to provide the list of input devices.
   If no devices become available, reconfigure udev or disable AutoAddDevices.
(II) Loading /usr/lib/xorg/modules/extensions/libextmod.so
(II) Module extmod: vendor="X.Org Foundation"
   compiled for 1.12.3.902, module version = 1.0.0
(II) Loading /usr/lib/xorg/modules/extensions/libdbe.so
(II) Module dbe: vendor="X.Org Foundation"
   compiled for 1.12.3.902, module version = 1.0.0
(II) Loading /usr/lib/xorg/modules/extensions/libglx.so
(II) Module glx: vendor="X.Org Foundation"
   compiled for 1.12.3.902, module version = 1.0.0
(==) AIGLX enabled
(II) Loading /usr/lib/xorg/modules/extensions/librecord.so
(II) Module record: vendor="X.Org Foundation"
   compiled for 1.12.3.902, module version = 1.13.0
(II) Loading /usr/lib/xorg/modules/extensions/libdri.so
(II) Module dri: vendor="X.Org Foundation"
   compiled for 1.12.3.902, module version = 1.0.0
(II) Loading /usr/lib/xorg/modules/extensions/libdri2.so
(II) Module dri2: vendor="X.Org Foundation"
   compiled for 1.12.3.902, module version = 1.2.0
(II) Loading /usr/lib/xorg/modules/drivers/fbdev_drv.so
(II) Module fbdev: vendor="X.Org Foundation"
   compiled for 1.12.3.902, module version = 0.4.2
(II) FBDEV_RPI: driver for framebuffer: fbdev
(--) using VT number 7

(WW) Falling back to old probe method for fbdev
(II) Loading /usr/lib/xorg/modules/libfbdevhw.so
(II) Module fbdevhw: vendor="X.Org Foundation"
   compiled for 1.12.3.902, module version = 0.0.2
(II) FBDEV_RPI(0): using default device
(WW) VGA arbiter: cannot open kernel arbiter, no multi-card support
(II) FBDEV_RPI(0): Raspberry Pi Xorg driver build date Jan  3 2013 build time 22:54:08
(II) FBDEV_RPI(0): Creating default Display subsection in Screen section
   "Default Screen Section" for depth/fbbpp 24/32
(==) FBDEV_RPI(0): Depth 24, (==) framebuffer bpp 32
(==) FBDEV_RPI(0): RGB weight 888
(==) FBDEV_RPI(0): Default visual is TrueColor
(==) FBDEV_RPI(0): Using gamma correction (1.0, 1.0, 1.0)
(II) FBDEV_RPI(0): hardware: BCM2708 FB (video memory: 4080kB)
(II) Loading /usr/lib/xorg/modules/libfb.so
(II) Module fb: vendor="X.Org Foundation"
   compiled for 1.12.3.902, module version = 1.0.0
(II) FBDEV_RPI(0): kernel interface initialised
(**) FBDEV_RPI(0): Using EXA acceleration
(II) Loading /usr/lib/xorg/modules/libexa.so
(II) Module exa: vendor="X.Org Foundation"
   compiled for 1.12.3.902, module version = 2.5.0
(**) FBDEV_RPI(0): Using 20971520 bytes (20.00 MB) of memory as offscreen
(**) FBDEV_RPI(0): Attempting to open VCIO mailbox
(**) FBDEV_RPI(0): Attempting to load VPU code
(**) FBDEV_RPI(0): Loaded VPU binary /usr/share/X11/vpu_offload_asm.bin at offset 0
(II) FBDEV_RPI(0): Symbol table dump
(II) FBDEV_RPI(0):   0:     c TRUE  Identify
(II) FBDEV_RPI(0):   1:    14 TRUE  GetVersion
(II) FBDEV_RPI(0):   2:    20 FALSE vpu_over_a8r8g8b8_x8b8g8r8_invalid_nonvarying
(II) FBDEV_RPI(0):   3:   2a0 FALSE vpu_over_a8r8g8b8_x8b8g8r8_invalid_normal
(II) FBDEV_RPI(0):   4:   440 TRUE  vpu_over_a8r8g8b8_x8b8g8r8_invalid
(II) FBDEV_RPI(0):   5:   500 FALSE vpu_over_a8r8g8b8_x8b8g8r8_a8_valid_nonvarying
(II) FBDEV_RPI(0):   6:   790 FALSE vpu_over_a8r8g8b8_x8b8g8r8_a8_valid_normal
(II) FBDEV_RPI(0):   7:   a24 TRUE  vpu_over_a8r8g8b8_x8b8g8r8_a8_valid
(II) FBDEV_RPI(0):   8:   b00 FALSE vpu_over_a8r8g8b8_a8r8g8b8_invalid_nonvarying
(II) FBDEV_RPI(0):   9:   d94 FALSE vpu_over_a8r8g8b8_a8r8g8b8_invalid_normal
(II) FBDEV_RPI(0):  10:   f64 TRUE  vpu_over_a8r8g8b8_a8r8g8b8_invalid
(II) FBDEV_RPI(0):  11:  1020 FALSE vpu_over_a8r8g8b8_a8r8g8b8_a8_valid_nonvarying
(II) FBDEV_RPI(0):  12:  12c4 FALSE vpu_over_a8r8g8b8_a8r8g8b8_a8_valid_normal
(II) FBDEV_RPI(0):  13:  1588 TRUE  vpu_over_a8r8g8b8_a8r8g8b8_a8_valid
(II) FBDEV_RPI(0):  14:  1660 FALSE vpu_over_x8r8g8b8_x8r8g8b8_invalid_nonvarying
(II) FBDEV_RPI(0):  15:  18c8 FALSE vpu_over_x8r8g8b8_x8r8g8b8_invalid_normal
(II) FBDEV_RPI(0):  16:  1a70 TRUE  vpu_over_x8r8g8b8_x8r8g8b8_invalid
(II) FBDEV_RPI(0):  17:  1b20 FALSE vpu_over_x8r8g8b8_x8r8g8b8_a8_valid_nonvarying
(II) FBDEV_RPI(0):  18:  1d98 FALSE vpu_over_x8r8g8b8_x8r8g8b8_a8_valid_normal
(II) FBDEV_RPI(0):  19:  2034 TRUE  vpu_over_x8r8g8b8_x8r8g8b8_a8_valid
(II) FBDEV_RPI(0):  20:  2100 FALSE vpu_over_x8r8g8b8_x8r8g8b8_a8b8g8r8_valid_nonvarying
(II) FBDEV_RPI(0):  21:  2378 FALSE vpu_over_x8r8g8b8_x8r8g8b8_a8b8g8r8_valid_normal
(II) FBDEV_RPI(0):  22:  2614 TRUE  vpu_over_x8r8g8b8_x8r8g8b8_a8b8g8r8_valid
(II) FBDEV_RPI(0):  23:  2700 FALSE vpu_over_x8b8g8r8_x8b8g8r8_invalid_nonvarying
(II) FBDEV_RPI(0):  24:  2968 FALSE vpu_over_x8b8g8r8_x8b8g8r8_invalid_normal
(II) FBDEV_RPI(0):  25:  2b10 TRUE  vpu_over_x8b8g8r8_x8b8g8r8_invalid
(II) FBDEV_RPI(0):  26:  2bc0 FALSE vpu_over_x8b8g8r8_x8b8g8r8_a8_valid_nonvarying
(II) FBDEV_RPI(0):  27:  2e38 FALSE vpu_over_x8b8g8r8_x8b8g8r8_a8_valid_normal
(II) FBDEV_RPI(0):  28:  30d4 TRUE  vpu_over_x8b8g8r8_x8b8g8r8_a8_valid
(II) FBDEV_RPI(0):  29:  31a0 FALSE vpu_over_x8b8g8r8_x8b8g8r8_a8r8g8b8_valid_nonvarying
(II) FBDEV_RPI(0):  30:  3418 FALSE vpu_over_x8b8g8r8_x8b8g8r8_a8r8g8b8_valid_normal
(II) FBDEV_RPI(0):  31:  36b4 TRUE  vpu_over_x8b8g8r8_x8b8g8r8_a8r8g8b8_valid
(II) FBDEV_RPI(0):  32:  37a0 FALSE vpu_add_a8r8g8b8_x8b8g8r8_invalid_nonvarying
(II) FBDEV_RPI(0):  33:  397c FALSE vpu_add_a8r8g8b8_x8b8g8r8_invalid_normal
(II) FBDEV_RPI(0):  34:  3a78 TRUE  vpu_add_a8r8g8b8_x8b8g8r8_invalid
(II) FBDEV_RPI(0):  35:  3b40 FALSE vpu_add_a8r8g8b8_x8b8g8r8_a8_valid_nonvarying
(II) FBDEV_RPI(0):  36:  3d30 FALSE vpu_add_a8r8g8b8_x8b8g8r8_a8_valid_normal
(II) FBDEV_RPI(0):  37:  3f24 TRUE  vpu_add_a8r8g8b8_x8b8g8r8_a8_valid
(II) FBDEV_RPI(0):  38:  4000 FALSE vpu_add_a8r8g8b8_a8r8g8b8_invalid_nonvarying
(II) FBDEV_RPI(0):  39:  41c0 FALSE vpu_add_a8r8g8b8_a8r8g8b8_invalid_normal
(II) FBDEV_RPI(0):  40:  42bc TRUE  vpu_add_a8r8g8b8_a8r8g8b8_invalid
(II) FBDEV_RPI(0):  41:  4380 FALSE vpu_add_a8r8g8b8_a8r8g8b8_a8_valid_nonvarying
(II) FBDEV_RPI(0):  42:  4550 FALSE vpu_add_a8r8g8b8_a8r8g8b8_a8_valid_normal
(II) FBDEV_RPI(0):  43:  4744 TRUE  vpu_add_a8r8g8b8_a8r8g8b8_a8_valid
(II) FBDEV_RPI(0):  44:  4820 FALSE vpu_add_x8r8g8b8_x8r8g8b8_invalid_nonvarying
(II) FBDEV_RPI(0):  45:  49e4 FALSE vpu_add_x8r8g8b8_x8r8g8b8_invalid_normal
(II) FBDEV_RPI(0):  46:  4aec TRUE  vpu_add_x8r8g8b8_x8r8g8b8_invalid
(II) FBDEV_RPI(0):  47:  4ba0 FALSE vpu_add_x8r8g8b8_x8r8g8b8_a8_valid_nonvarying
(II) FBDEV_RPI(0):  48:  4d78 FALSE vpu_add_x8r8g8b8_x8r8g8b8_a8_valid_normal
(II) FBDEV_RPI(0):  49:  4f74 TRUE  vpu_add_x8r8g8b8_x8r8g8b8_a8_valid
(II) FBDEV_RPI(0):  50:  5040 FALSE vpu_add_x8r8g8b8_x8r8g8b8_a8b8g8r8_valid_nonvarying
(II) FBDEV_RPI(0):  51:  5218 FALSE vpu_add_x8r8g8b8_x8r8g8b8_a8b8g8r8_valid_normal
(II) FBDEV_RPI(0):  52:  5414 TRUE  vpu_add_x8r8g8b8_x8r8g8b8_a8b8g8r8_valid
(II) FBDEV_RPI(0):  53:  5500 FALSE vpu_add_x8b8g8r8_x8b8g8r8_invalid_nonvarying
(II) FBDEV_RPI(0):  54:  56c4 FALSE vpu_add_x8b8g8r8_x8b8g8r8_invalid_normal
(II) FBDEV_RPI(0):  55:  57cc TRUE  vpu_add_x8b8g8r8_x8b8g8r8_invalid
(II) FBDEV_RPI(0):  56:  5880 FALSE vpu_add_x8b8g8r8_x8b8g8r8_a8_valid_nonvarying
(II) FBDEV_RPI(0):  57:  5a58 FALSE vpu_add_x8b8g8r8_x8b8g8r8_a8_valid_normal
(II) FBDEV_RPI(0):  58:  5c54 TRUE  vpu_add_x8b8g8r8_x8b8g8r8_a8_valid
(II) FBDEV_RPI(0):  59:  5d20 FALSE vpu_add_x8b8g8r8_x8b8g8r8_a8r8g8b8_valid_nonvarying
(II) FBDEV_RPI(0):  60:  5ef8 FALSE vpu_add_x8b8g8r8_x8b8g8r8_a8r8g8b8_valid_normal
(II) FBDEV_RPI(0):  61:  60f4 TRUE  vpu_add_x8b8g8r8_x8b8g8r8_a8r8g8b8_valid
(II) FBDEV_RPI(0):  62:  61e0 FALSE vpu_add_a8r8g8b8_a8_a8_valid_nonvarying
(II) FBDEV_RPI(0):  63:  6300 FALSE vpu_add_a8r8g8b8_a8_a8_valid_normal
(II) FBDEV_RPI(0):  64:  6440 TRUE  vpu_add_a8r8g8b8_a8_a8_valid
(II) FBDEV_RPI(0):  65:  6500 FALSE vpu_add_a8r8g8b8_a8_invalid_nonvarying
(II) FBDEV_RPI(0):  66:  660c FALSE vpu_add_a8r8g8b8_a8_invalid_normal
(II) FBDEV_RPI(0):  67:  66ec TRUE  vpu_add_a8r8g8b8_a8_invalid
(II) FBDEV_RPI(0):  68:  67a0 TRUE  VpuComposite
(II) FBDEV_RPI(0): End symbol table dump
(**) FBDEV_RPI(0): 30510 bytes of GPU-visible memory needed for VPU code
(**) FBDEV_RPI(0): Virtually contiguous physically contiguous memory via /dev/dmaer_4k and VideoCore interface selected
(**) FBDEV_RPI(0): Either from static memory allocation or CMA
(II) FBDEV_RPI(0): VPU code uploaded to bus address 4b841000
(II) FBDEV_RPI(0): NOTE: if it hangs at the next line, ctrl-z, sync and reboot your Raspberry Pi
(II) FBDEV_RPI(0): Checking that it works...
(II) FBDEV_RPI(0): Identified correctly
(II) FBDEV_RPI(0): Using version 1.2 of binary
(II) FBDEV_RPI(0): checking modes against framebuffer device...
(II) FBDEV_RPI(0): checking modes against monitor...
(--) FBDEV_RPI(0): Virtual size is 1360x768 (pitch 1360)
(**) FBDEV_RPI(0):  Built-in mode "current"
(==) FBDEV_RPI(0): DPI set to (96, 96)
(==) Depth 24 pixmap format is 32 bpp
(EE) FBDEV_RPI(0): FBIOBLANK: Operation not permitted
(**) FBDEV_RPI(0): max AXI burst suggested: 10
(**) FBDEV_RPI(0): Experimental self-managed memory
(II) EXA(0): Driver allocated offscreen pixmaps
(II) EXA(0): Driver registered support for the following operations:
(II)         Solid
(II)         Copy
(II)         Composite (RENDER acceleration)
(II)         UploadToScreen
(II)         DownloadFromScreen
(==) FBDEV_RPI(0): Backing store disabled
(==) FBDEV_RPI(0): DPMS enabled
(==) RandR enabled
(II) SELinux: Disabled on system
(II) AIGLX: Screen 0 is not DRI2 capable
(II) AIGLX: Screen 0 is not DRI capable
(II) AIGLX: Loaded and initialized swrast
(II) GLX: Initialized DRISWRAST GL provider for screen 0
(EE) FBDEV_RPI(0): FBIOBLANK: Operation not permitted


I got that by launching it via the debug method. I think it might be because executing Xorg doesn't actually start a desktop. If you want to actually use the driver, just startx as you normally would. Not sure how to get debug info from that though yet.

yaggi wrote:This is where I got stuck before as well before.
You should be logged into the RPi with SSH and running the last 'running it' commands (Not locally on your Pi).
Then open up another SSH and run the command startlxde and you should get your X windows.

I think that should do it, however if its not the same issue then I got nothing. ;)


I didn't try that. :o


I am pretty sure you're right.
Running this doesn't launch the desktop, so all he needs to do is run startlxde or startx and it should work just fine at that point.


Typing startx will startup another xorg session. You don't really want that :P
Posts: 22
Joined: Wed Oct 03, 2012 8:22 pm
by juppiter89 » Fri Jan 04, 2013 11:23 pm
Thank you for the answer yaggi but I tried and I just got a black screen :(
After startlxde, in the SSH session with run command i get "Program received signal SIGUSR1, User defined signal 1. 0xb6ce6d80 in select () from /lib/arm-linux-gnueabihf/libc.so.6"
Posts: 68
Joined: Fri Jan 04, 2013 10:50 pm
by teh_orph » Fri Jan 04, 2013 11:26 pm
Yep yaggi's right here - running Xorg (either via the debugger or just calling Xorg directly) simply starts the display server. You actually then need to run some programs which use the display!

In one terminal I run Xorg

in another terminal I run:
startlxde

There are lots of options.
eg
one terminal: Xorg
another one:
export DISPLAY=:0
(followed by)
startxfce4

one terminal: Xorg
another one:
export DISPLAY=:0
(followed by)
metacity & xterm&

one terminal: Xorg
another one:
export DISPLAY=:0
(followed by)
wmaker

Perhaps stating the obvious but don't run more than one copy of Xorg at once!

Xorg is simply the display harness that hosts graphical applications. The logs posted here all have happy messages :)

(EE) FBDEV_RPI(0): FBIOBLANK: Operation not permitted

This is fine too, and nothing to worry about.

SIGUSR1 also ought to be fine. If this happens at the debugger prompt type 'continue' (no quotes) and hit enter. Alternatively, when typing
Code: Select all
handle SIGPIPE nostop

also type,
Code: Select all
handle SIGUSR1 nostop
User avatar
Posts: 345
Joined: Mon Jan 30, 2012 2:09 pm
Location: London
by juppiter89 » Fri Jan 04, 2013 11:32 pm
Ah yeah, it was my fault :lol:

I got it working by starting xorg in one SSH session, and running startxfce4 in another session, so if you use Lxde i think the command is startlxde :)
Now I'll test performance ;)

EDIT : Ok I tried again, in one SSH session i ran "sudo Xorg", in another "startxfce4" but it say again that a X Server is already active :cry:

Code: Select all
/usr/bin/startxfce4: Starting X server


Fatal server error:
Server is already active for display 0
   If this server is no longer running, remove /tmp/.X0-lock
   and start again.


Please consult the The X.Org Foundation support
    at http://wiki.x.org
 for help.

pi@raspberrypi ~ $ XIO:  fatal IO error 11 (Resource temporarily unavailable) on X server ":0"
      after 7 requests (7 known processed) with 0 events remaining.
Posts: 68
Joined: Fri Jan 04, 2013 10:50 pm
by teh_orph » Sat Jan 05, 2013 10:35 am
I can reproduce your error. Ah, running startxfce starts another X server, fails and then tries to run the desktop which fails as it doesn't know where the X server that is already running is. You need to export the DISPLAY variable on the console! (sadly all these display session scripts are all different from each other and unrelated to the driver)

So,

in terminal #1: run Xorg as before (sudo gdb Xorg, set args -verbose -keeptty, handle SIGPIPE nostop, run)
in terminal #2: export DISPLAY=:0
(then)
startxfce4

Here's what I get when doing this. It no longer tries to make another X server as it detects the original one you created.

Code: Select all
pi@raspberrypi ~ $ export DISPLAY=:0
pi@raspberrypi ~ $ startxfce4
/usr/bin/startxfce4: X server already running on display :0
Agent pid 2337
xfdesktop[2355]: starting up

(xfce4-settings-helper:2374): xfce4-settings-helper-WARNING **: Failed to get the _NET_NUMBER_OF_DESKTOPS property.

I now see the xfce desktop on my display.

EDIT: to a mod reading this could you please add to my post a few above that the export DISPLAY=:0 thing is necessary when you want to run startxfce4? Like the wmaker example. I can't edit that post. Thanks
User avatar
Posts: 345
Joined: Mon Jan 30, 2012 2:09 pm
Location: London
by juppiter89 » Sat Jan 05, 2013 11:31 am
Well thanks again for the answer Simon :)

I tried that but when i ran startxfce4 i got stuck at "/usr/bin/startxfce4: X server already running on display :0"
Instead, if I run first Xorg normally, with just sudo Xorg in first terminal, and then export DISPLAY=:0, startxfce4 in second terminal it works.
Is there any difference between running "sudo gdb Xorg, set args -verbose -keeptty, handle SIGPIPE nostop, run" and just running "sudo Xorg"?
Posts: 68
Joined: Fri Jan 04, 2013 10:50 pm
by teh_orph » Sat Jan 05, 2013 11:36 am
juppiter89 wrote:Well thanks again for the answer Simon :)

I tried that but when i ran startxfce4 i got stuck at "/usr/bin/startxfce4: X server already running on display :0"
Instead, if I run first Xorg normally, with just sudo Xorg in first terminal, and then export DISPLAY=:0, startxfce4 in second terminal it works.
Is there any difference between running "sudo gdb Xorg, set args -verbose -keeptty, handle SIGPIPE nostop, run" and just running "sudo Xorg"?

Only that you get to see more debug info if it fails. Also if it crashes you can make a core file that you can send to me.
User avatar
Posts: 345
Joined: Mon Jan 30, 2012 2:09 pm
Location: London
by juppiter89 » Sat Jan 05, 2013 1:09 pm
Ok, if I can just run it with sudo Xorg, I can now test the driver itself.

I noticed though that when I drag windows, scrolling and so on, the cpu load is still near 100%. Is it normal?
Posts: 68
Joined: Fri Jan 04, 2013 10:50 pm
by diereinegier » Sat Jan 05, 2013 2:05 pm
Just yesterday a HDMI-DVI adapter and additional SD cards and for the first time I used my raspi directly. Formerly I was just using it "remotely" via SSH and XDMCP. I surely will dedicate a SD card to this test.

To the question which application usage patterns to observe:
1) Scratch, python and the graphics lib provided to the children should be an important target. Despite the fact that Scratch is a terrible performance hog in itelf...
2) Chromium and Iceweasel used on twitter, facebook, Xing, etc. maybe the two applications that have the most impact on the new user experience.
3) For me: scrolling in a syntax highlighting emacs ;-)

I want to add something to the rant part. Most programmers assume that their program runs at the same machine as their display and do not care about roundtrips and sync points any more. And frameworks do not care either. Have you ever tried to dsable all the silly effects like mouse over in Qt menus to make it work decently over the network? When it comes to font rendering it get's even worse.

Maybe the approach to have Wayne replace X11 and having an X11 server running on top of that is a far better idea than it sounds? We will see what arrives first: Wayne itself or the idiom of saying "they tried inwayne"...
Download my repositories at https://github.com/GeorgBisseling
User avatar
Posts: 145
Joined: Sun Dec 30, 2012 5:45 pm
Location: Bonn, Germany
by teh_orph » Sat Jan 05, 2013 2:16 pm
juppiter89 wrote:Ok, if I can just run it with sudo Xorg, I can now test the driver itself.

I noticed though that when I drag windows, scrolling and so on, the cpu load is still near 100%. Is it normal?


Yep - however the CPU time spent in X is not necessarily 'busy', it's in the kernel just waiting for a co-processor to finish working. Also the faster it services requests the faster the applications sends new ones ;) Hence smoother scrolling. Remember also that applications often do their own rendering "client-side" on scrolling eg computing what to draw before sending it to the driver. This is definitely not free!

Something I forgot to mention is that the desktop should now be generally more interactive when CPU time is contended for by other applications. Even when the X server is pre-empted by another application graphical progress is still made at the same rate assuming the CPU is not the piece of hardware doing the actual drawing. The DMA and VPU will stay working in the background.

That said the X server will still need CPU time in order to service these requests and generate data for this external hardware. If the X server never gets any CPU time then things will lurch.
User avatar
Posts: 345
Joined: Mon Jan 30, 2012 2:09 pm
Location: London
by teh_orph » Sat Jan 05, 2013 2:30 pm
diereinegier wrote:Just yesterday a HDMI-DVI adapter and additional SD cards and for the first time I used my raspi directly. Formerly I was just using it "remotely" via SSH and XDMCP. I surely will dedicate a SD card to this test.
Cool, thanks for your help.

To the question which application usage patterns to observe:
1) Scratch, python and the graphics lib provided to the children should be an important target. Despite the fact that Scratch is a terrible performance hog in itelf...

Scratch as you say has its own troubles. This uses a high amount of CPU power all to itself. Completely removing X from the equation doesn't do a great deal to improve performance! Someone else has been working on this.
Python's default editor IDLE we've been looking at too (Charlie if you're reading this feel free to add something!). It sends dreadful graphical loads to the driver. eg think thousands of individual 1x1 pixel operations when you scroll. The amount of time required to draw that one pixel is tiny by comparison to the overhead required to get to the draw call!
2) Chromium and Iceweasel used on twitter, facebook, Xing, etc. maybe the two applications that have the most impact on the new user experience.
I've added a lot of support for the commands that come from Iceweasel, but I need more... Chromium sends stuff that I can't accelerate easily...but I think with small changes to its source it could automatically use the Iceweasel optimisations.
That said both browsers run poorly on my 256 MB rpi (swap file etc) and Chromium uses a lot of CPU power all to itself looking at a blank tab. Err....! Most of my profiling was done with Netsurf and Midori.
3) For me: scrolling in a syntax highlighting emacs ;-)
I've never used emacs before but if you give me an example of how you use it (eg in a terminal? a special X program? etc) I can work with that.

So in summary: with a bit of a gentle massage I believe we can make applications better fit our machine, rather than the other way round. However we've encountered resistance from these third party developers who say "sorry, in 18 months your CPU will be likely 2x as fast - this is not worthwhile for us". Which is fair on their part.

I want to add something to the rant part. Most programmers assume that their program runs at the same machine as their display and do not care about roundtrips and sync points any more. And frameworks do not care either. Have you ever tried to dsable all the silly effects like mouse over in Qt menus to make it work decently over the network? When it comes to font rendering it get's even worse.
I'd completely forgotten about network. As I said in the OP we were seeing large slowdowns with a 6 us overhead (per DMA CB). The same thing must be hideous over a network!
User avatar
Posts: 345
Joined: Mon Jan 30, 2012 2:09 pm
Location: London
by juppiter89 » Sat Jan 05, 2013 2:41 pm
teh_orph wrote:
juppiter89 wrote:Ok, if I can just run it with sudo Xorg, I can now test the driver itself.

I noticed though that when I drag windows, scrolling and so on, the cpu load is still near 100%. Is it normal?


Yep - however the CPU time spent in X is not necessarily 'busy', it's in the kernel just waiting for a co-processor to finish working. Also the faster it services requests the faster the applications sends new ones ;) Hence smoother scrolling. Remember also that applications often do their own rendering "client-side" on scrolling eg computing what to draw before sending it to the driver. This is definitely not free!

Something I forgot to mention is that the desktop should now be generally more interactive when CPU time is contended for by other applications. Even when the X server is pre-empted by another application graphical progress is still made at the same rate assuming the CPU is not the piece of hardware doing the actual drawing. The DMA and VPU will stay working in the background.

That said the X server will still need CPU time in order to service these requests and generate data for this external hardware. If the X server never gets any CPU time then things will lurch.


Yeah, I ran top and I saw that maximum Xorg cpu load during dragging was 50-60% and the remaning load was the application itself (thunar in my case). So is it working as expected, true?

I'll continue testing :)
Posts: 68
Joined: Fri Jan 04, 2013 10:50 pm
by teh_orph » Sat Jan 05, 2013 2:58 pm
juppiter89 wrote:Yeah, I ran top and I saw that maximum Xorg cpu load during dragging was 50-60% and the remaning load was the application itself (thunar in my case). So is it working as expected, true?

I'll continue testing :)

Sounds right. We saw Gearny (the text editor) taking 60% CPU time to itself simply when you were typing in an empty text file! Guhhhhh
If you do see Xorg take all of the CPU time, in top look at the row at the top saying idle/user/kernel/wait etc. If the CPU is simply waiting on the VPU or DMA hardware to complete then the user number will be small and the wait (or kernel?) number will be high. You will also notice that if you use the dynamic overclocking thing then in that situation the CPU will not clock up as it is not 'busy'. This is fine.

If you want more info on what's going on, in the config file (/usr/share/X11/xorg.conf.d/01-fbdev-rpi.conf) change VerboseReporting to true and watch Xorg's tty output (not the application's nor what's on the TV/monitor/display). You'll see a textual breakdown of what the driver is doing, how much memory is in use, what hardware is doing what etc. This text display does take a decent bit of CPU however so only turn it on if you're interested.
User avatar
Posts: 345
Joined: Mon Jan 30, 2012 2:09 pm
Location: London
by juppiter89 » Sat Jan 05, 2013 3:21 pm
In my case the wait value during high Xorg cpu load is always 0 or almost 0. :?

Edit : i was looking at "va value" which is waiting time for IO. The kernel time is the "sy" value, which during high Xorg cpu load reaches max 15-20%.
Posts: 68
Joined: Fri Jan 04, 2013 10:50 pm
by teh_orph » Sat Jan 05, 2013 4:55 pm
I future I hope to make it so that access to the VPU has a much lower latency, allowing me to send nearly all work to it (further taking the burden off the CPU). When that happens I'll also be able to properly sleep the CPU thread rather than busy waiting like you currently see.
I can't do that today though as it would block other applications which communicate with the VPU, eg OpenGL, VG, the CPU frequency controller etc.
User avatar
Posts: 345
Joined: Mon Jan 30, 2012 2:09 pm
Location: London
by bleep42 » Sat Jan 05, 2013 10:45 pm
Hi Simon,
Thank you for all your very hard work and perseverance. :-)
I have installed your new drivers and started them running and testing them using the default settings.
To give you as much info as possible, I am using a big screen 1920x1200 over HDMI, my Pi is 512M, it's not currently overclocked at all and is a standard raspbian install with nothing added or removed. I have allocated 'gpu_mem=64'.
Using Midori, I am getting screen corruption on the Raspberry Pi banner across the top of the forum pages, it happens as I use the scroll wheel to scroll up or down, not continuously, mainly it's ok but say 1 in 3 clicks of the scroll wheel it'll corrupt, picture here.
https://picasaweb.google.com/knmoore/Pi#5830087262657895266
I did get a message
Code: Select all
Obt-Message: Xinerama extension is not present on the server
Openbox-Message: Unable to find a valid menu file "/usr/share/lxde/openbox/menu.xml

when I ran 'startlxde' and I am getting in gdb
Code: Select all
(WW) FBDEV_RPI(0): composite would have overread in X by 1108 pixels
--repeated 10 times--
(WW) FBDEV_RPI(0): composite would have overread in X by 1108 pixels

I don't get the same corruption using Chromium.
As an aside, do I need to do the procedure under "Kernel module install and set-up" after every reboot, or only once. What is the recommended way of exiting cleanly to shutdown?
If you would like any other info please let me know.
Regards and thanks again, Kevin.
Last edited by bleep42 on Sat Jan 05, 2013 11:01 pm, edited 1 time in total.
User avatar
Posts: 54
Joined: Wed Mar 07, 2012 12:43 pm
Location: Sussex