• Skip to site navigation
  • Skip to content
  • Skip to sidebar
  • Skip to footer
  • Go to archive page
Shadowmaster’s Lair
A light in the darkness, where everything is possible...
  • Home
  • Projects
  • About
  • Contact
  • Blog [ frontpage ]
« Previous | Index | Next »

ATI mayhem, Part III

Thursday, November 26, 2009

So, I have a HP laptop; a Pavilion dv5-1132la, to be specific. It's pretty, it has some fancy multimedia buttons, a fingerprint reader, an annoying and huge illuminated logo on the lid, yet another of those fantastic touchpads that break near the end of the warranty period, a fan (a.k.a. hair magnet) that's impossible to clean without disassembling the whole machine, an utterly useless fingerprint reader, some Lightscribe thingy which I don't use, and yet another on-board graphics adapter from ATI that has very, very poor support in the Linux world. I couldn't choose otherwise — it was a Christmas present and I was really, really desperate.

Since Wesnoth uses 2D rendering (with plain SDL primitives) for everything, I do not need accelerated 3D rendering for software development. However, people in RL have asked me why I don't have fancy desktop effects (gaa, Compiz) or play 3D games like other Windows and Linux users do. And even worse, a handful of Wesnoth developers and artists started a side project that uses OpenGL for 2D rendering!

My former ATI-based laptop, the Acer Aspire 5050, had a 3D-capable adapter that somehow didn't work with Vista at all (despite the computer shipped with it!), but worked well with the free radeon X.org module and the DRI-based 3D rendering code from the Mesa project for most purposes. This HP laptop brings to me an inversion of the dilemma: ATI's drivers work very, very well with Vista, and although radeon and radeonhd have DRI support already (thanks to the drm/radeon modules in Linux kernel 2.6.29 and later), there seems to be no hope of reliable 3D support from Mesa so far.

ATI provides a proprietary driver for current X.org and Linux kernels, fglrx, but the last time I tried it I only managed to crash the Linux kernel and the BIOS (on reboot) whenever I switched consoles or restarted X.

Still, without accelerated 3D rendering, it seems like a waste to always allocate 256 MB of system RAM and never put them to good use for anything.

Open-source radeonhd and drm/radeon

Until now I'd been using radeonhd, which Ivanovic, the Wesnoth project manager, recommended to me back when I was trying to use the laptop with Debian Lenny last January. Since then I've always used the latest revision from the upstream git repository. Combined with the drm/radeon kernel module from Linux 2.6.30 and 2.6.31 it provides a stable (ahem) and rather fast environment with XRender acceleration, using EXA; thus I can use some of KDE 4's eye candy. However, the odd still happens from time to time and what seems to be a race condition locks up the system when resuming from hibernation:

[drm] wait idle failed status : 0xA0003030 0x00000003
[drm] wait idle failed status : 0xA0003030 0x00000003
[drm] wait idle failed status : 0xA0003030 0x00000003
[drm] wait idle failed status : 0xA0003030 0x00000003
...

This is not specific to my current flavored kernel (now with TuxOnIce!) and I've stumbled upon this with vanilla kernels ever since drm/radeon supported this chipset (RS780M/RS780MN) in mainline stable releases, using uswsusp for hibernation.

radeonhd also has an unusual habit of shaking the screen vertically for a few millisecs whenever I start SDL-based applications or XVideo clients (think VLC or Kaffeine).

Trying the open-source radeon and drm/radeon

Espreon pointed out to me on IRC that radeon displayed better performance on his computer than radeonhd. Trying it, this seems to hold true for a few XRender effects and KDE 4, but it's otherwise the same as radeonhd, minus the flickering, and with an additional bug — it occasionally fails to reset the console when giving control back to fbcon, the kernel's graphics mode console driver, resulting in black screens. Due to this, I disabled graphics mode and reverted to good old text consoles for testing radeon.

This driver has an annoying misfeature. By default it will try to enforce subpixel rendering on laptop screens and make my fonts look slightly hideously ugly when antialiased, despite this is explicitly defined in my ~/.fonts.conf for fontconfig-based applications. The solution turns out to be manually editing the X.org configuration in /etc/X11/xorg.conf and adding an option to disable subpixel rendering at the server side:

Section "Device"
  BoardName    "ATI Radeon HD 3200 (RS780M/RS780MN)"
  BusID        "1:5:0"
  Driver "radeon"
  Identifier   "Device[0]"
  VendorName   "ATI"
  # radeon-specific options follow
  Option "SubPixelOrder" "NONE"
EndSection

Otherwise I could see the colorful antialiasing on the screens ruining the rendering of Tahoma, 7 pt., or Consolas, 10 pt.

I have yet to try this one for enough time to check if it also causes the occasional race condition on drm/radeon that locks up the system with radeonhd.

Trying ATI fglrx

RUN AWAY!

Actually, I abandoned any attempts at using fglrx with Debian Lenny when I noticed that the kernel module wouldn't compile with newer kernels — and I didn't trust ATI enough to go and fetch a newer version of the driver from upstream.

However, now that I'm using Squeeze I thought that I may as well check it out again, since the distribution uses Linux 2.6.30 already... Of course I could compile it. Now the question is, has this thing improved at all since the last time I tried it?

Virtual terminal switching works now, at least with text-mode consoles. Unsurprisingly, the old bug in which restarting X via something like invoke-rc.d kdm restart from a text console may cause the fglrx kernel module to do something silly and lock the kernel up/crash the video BIOS the next time I switch to the X console (#7) is still there.

Despite these issues, the driver is mostly stable with this chipset now and does mostly everything radeon and radeonhd can, and 3D acceleration works well enough to enable OpenGL compositing with KDE 4 and play with the Desktop cube effect. :) Certain KWin effects such as Box switch and Taskbar thumbnails won't work in OpenGL mode with trilinear filtering. It could be a KWin bug rather than fglrx's fault, though.

Minimizing XVideo clients such as VLC media player seems to cause occasional glitches as well, e.g. video surface disappearing until playback is restarted.

Additionally, trying to use SuperTux 0.1.3 in OpenGL mode crashed the whole thing and went as far as to make the kernel write corrupted data into /var/log/kern.log before I rebooted it with a magic SysRq sequence. That's a bad sign, you know.

Now for a completely different issue. I trust the free drivers in their judgment that my screen dimensions are 331x207 millimeters and the resolution is 98 DPI (although I couldn't find the exact specs from HP either). ATI's driver claims that my screen is 332x212 millimeters and that it has a resolution of 98x96 DPI! Even if that was right, it should provide me a way to override this — it does not. Instead, I convinced the font rendering engine to ignore the server's specs and use 98x98 DPI for fonts:

echo 'Xft.dpi : 98' >> ~/.Xdefaults

But after a while I figured I could just override the screen autodetection altogether instead and write my own Monitor section in the xorg.conf with the dimensions reported by the open-source drivers:

Section "Monitor"
  Identifier "Monitor[0]"
  VendorName "fixme"
  ModelName  "fixme"
  DisplaySize 331 207
EndSection

Section "Screen"
  DefaultDepth 24
  Device       "Device[0]"
  Identifier   "Screen[0]"
  Monitor      "Monitor[0]"
EndSection

All this mess to make Tahoma 7 pt. look pretty and readable enough.

This thing interacts rather weirdly with TuxOnIce. While hibernating and resuming works fine at the end, TuxOnIce often has to try twice to create the hibernation image. Since TuxOnIce needs to switch to a text console before proceeding to prepare the hibernation image, I suspect it could be related to a silent issue taking place whenever I switch from the X terminal to a text console during normal operation:

Assertion failed in ../../../../../../../../drivers/2d/lnx/fgl/drm/kernel/hal_rs780.c at line: 53
Assertion failed in ../../../../../../../../drivers/2d/lnx/fgl/drm/kernel/hal_rs780.c at line: 53
Assertion failed in ../../../../../../../../drivers/2d/lnx/fgl/drm/kernel/hal_rs780.c at line: 53
Assertion failed in ../../../../../../../../drivers/2d/lnx/fgl/drm/kernel/hal_rs780.c at line: 53
Assertion failed in ../../../../../../../../drivers/2d/lnx/fgl/drm/kernel/hal_rs780.c at line: 53
Assertion failed in ../../../../../../../../drivers/2d/lnx/fgl/drm/kernel/hal_rs780.c at line: 53
Assertion failed in ../../../../../../../../drivers/2d/lnx/fgl/drm/kernel/hal_rs780.c at line: 53
Assertion failed in ../../../../../../../../drivers/2d/lnx/fgl/drm/kernel/hal_rs780.c at line: 53
Assertion failed in ../../../../../../../../drivers/2d/lnx/fgl/drm/kernel/hal_rs780.c at line: 53
Assertion failed in ../../../../../../../../drivers/2d/lnx/fgl/drm/kernel/hal_rs780.c at line: 53
Assertion failed in ../../../../../../../../drivers/2d/lnx/fgl/drm/kernel/hal_rs780.c at line: 53
Assertion failed in ../../../../../../../../drivers/2d/lnx/fgl/drm/kernel/hal_rs780.c at line: 53
[fglrx:fireglAsyncioIntEnableMsgHandler] *ERROR* IRQMGR returned error 1 when trying to enable interrupt source ff000034

Returning to the X console doesn't cause additional messages; it's just leaving X that causes problems. While nothing crashes immediately in either case, I suspect that it'd not be a good idea to try and re-enable graphic mode consoles and then run X with fglrx.

Nonetheless I'm back using radeon + drm/radeon for now because I hear a faint buzzing while using fglrx for some reason — it can't be a good sign.

Linux 2.6.24 - 2.6.31 and Debian GNU/Linux

And what about the rest of this ATI-based system?

Linux 2.6.24, which is the kernel used by an old Debian Testing DVD I used to perform the initial installation of Lenny back in December 2008, had a network driver that OOPSed a lot when probing the wired LAN interface of this laptop — fortunately I could finish the installation and upgrade to the current packages of Testing at the time, including Linux kernel 2.6.26.

Shortly after Debian Lenny became the new Stable distribution I settled with the Linux kernel 2.6.28, which worked pretty fine for most things except one: drm/radeon didn't support my graphics controller, which meant no EXA or XRender acceleration for radeonhd :(

I was reluctant to switch to Linux 2.6.29 for a long while because it accentuated a bug in which, on random boots, the touchpad and keyboard become unusable until the next reboot; this also affected 2.6.28 but only if I pressed a key very early during the boot process. I never ran 2.6.29 for daily use on the laptop and I ended up trying an early RC of 2.6.30 instead... oops.

Eventually I just settled with the released 2.6.30 kernel and later with 2.6.31 — neither is immune to the aforementioned input layer bug, and they accentuate another bug that I could reproduce on 2.6.28 only once: at random times, after resuming from hibernation, the touchpad becomes unusable and just the caps/num/scroll lock keys do too, in such a way that pressing them locks up the entire system for a second or two; after the first two or three lock-ups in such a scenario, the kernel complains, only once:

ACPI: EC: non-query interrupt received, switching to interrupt mode

Additionally, so far all kernels that have run on this laptop are affected by a bug that gets the input layer stuck with the last key event for a second or two at random (notice a pattern?).

atkbd.c: Spurious NAK on isa0060/serio0. Some program might be trying access hardware directly.

It also happens that the native hibernation and suspend-to-RAM mechanisms fail to bring the keyboard, touchpad and screen back to life. I've not been able to use suspend-to-RAM here with any of these kernels and suspend-to-disk/hibernation works only if using uswsusp from Debian Lenny or TuxOnIce on Debian Squeeze.

Naturally, I have not found a solution for these problems yet.

There's one problem I could solve myself with some help from Google, though; the ACPI DSDT of this system has a rule that doesn't allow any operating system but Windows Vista to access the thermal zone status. Notable because the DSDT has other rules to allow Windows XP, 2003 and GNU/Linux to work fine with it, so whitelisting just Vista for temperature readings does not make sense to me.

I ended up patching the DSDT and instructing Linux to override it at boot time — yet another reason for using custom flavored kernels. It's really important to be able to see the system's estimated temperature when it often goes around 94°C when working with the damned thing in summer.

What's next?

I'm really fed up with these ATI-based laptops as I always have some kind of problem with the few drivers that support ATI graphics controllers. The next time I can buy a laptop I will choose one that a) is not manufactured by HP; and b) doesn't use a single piece of hardware from ATI. The problem is, what graphic adapters are well supported for Linux, and what laptop manufacturers use durable, reliable components and provide good technical support in Chile? :/

(And yes, I know I've linked too much to this, but can you believe it? Shared libraries turning into character and block device nodes and FIFOs? I'm not making this up.)

Posted in Hardware, Software at 19:44 UTC | No comments »
Trackbacks
Trackback specific URI for this entry
No Trackbacks
Comments
Display comments as (Linear | Threaded)
No comments
Add Comment
Standard emoticons like :-) and ;-) are converted to images.
 
 
 
« September '10 »
Mo Tu We Th Fr Sa Su
    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30      
  • Recent posts
  • Archives
Twitter
  • @Grickit Ajax? http://is.gd/f3j4A1 hour ago
  • It's a sad thing that fontconfig's existence isn't helping me with keeping consistent font rendering rules here.21 hours ago
  • Apparently, the connectivity issues with my website have been solved...1 day ago
  • To #Wesnoth users who are looking at the Mainline Campaign Feedback forum right now: no, you aren't hallucinating.1 day ago
  • Connections to my website are still not working correctly here, even from the university's network. I guess some routing problem...1 day ago
  • My website, and nearlyfreespeech.net's blog, are still taking forever to load here. I guess I'll have my 1:30 minutes of sleep.1 day ago

Follow me

Categories
  • Frogatto
  • Hardware
  • Miscellaneous
  • Personal
  • Site updates
  • Software
  • Web browsers
  • Web design
  • phpBB
  • Wesnoth
  • Wesnoth-UMC-Dev
  • freenode
All categories
Syndication
  • XML RSS 1.0 feed
  • XML RSS 2.0 feed
  • ATOM/XML ATOM 1.0 feed
  • XML RSS 2.0 comments
Projects
  • Frogatto levels
  • Wesnoth add-ons
  • Wesnoth Team Colorizer
  • Wesnoth-UMC-Dev Registry Model
  • Shikadibot 0314
  • Miscellaneous
    • Irssi scripts
    • phpBB 3.0.x hacks
Links
  • Frogatto & Friends
  • Battle for Wesnoth
  • Wesnoth-UMC-Dev
  • Grickit’s blog
  • Turuk’s blog
  • The Monochrome
Frogatto & Friends
Serendipity PHP Weblog
Valid XHTML 1.0 Transitional
Copyright © 2006-2010 by Ignacio R. Morelle. All rights reserved. Powered by Poison Ivy/Dorset3 r5 and Serendipity.
Hosting by rewound.net and NearlyFreeSpeech.NET.
The opinions expressed herein do not represent those of any of the projects and organizations the author might be affiliated with, unless otherwise stated. The author is not responsible for the content hosted by external websites linked from this site. All software, documentation or instructions of any fashion are provided as is, and under its own license terms. Use/read/eat/drink at your own risk.