Asus G50Vt quirks with Linux
Over the months I've owned this laptop, I've run into quite a few
little quirks, and have been slowly knocking them out one by one.
Tonight I managed to get the last of 'em quashed, and I thoght I'd write everything up in case anyone else finds this stuff useful.
Among the quirks: (and note these are current as of 2.6.32)
Buggy IOMMU. If you enable virtualization in the BIOS, the
kernel spews out boatloads of iommu warnings/errors due to some kind of
glitch. It's presumably a kernel bug, but until it's fixed, you gotta
add 'intel_iommu=off' to the kernel command line.
Keyboard lagging This was particularly annoying, but adding
'i8042.noloop i8042.nopnp' to the kernel command line made quite a
difference. It ain't perfect, but it's at least no longer infuriating.
It's worth noting that the laggy keyboard also afflicts operation under
Vista too -- only I can't do anything about that!
ExpressCard slot not working post-suspend. Due to a kernel
bug, the PCIExpress hotplug driver wasn't working unless the '
pciehp.pciehp_force=1' option is added to the kernel command line. Now
I can hotplug ExpressCards left and right, yay.
Post-suspend, the ethernet interface not coming up with GigE
speeds. Apparently the network chipset somehow decides to stop
advertising 1000Mbps support to the switch, so it's not autonegotiated
properly. The workaround is pretty simple: As root, run:
'ethtool -s eth0 speed 1000M'
and the hardware
re-enables 1000M operation and negotiates with the switch properly.
Headphone jack not working. When something's
plugged into the headphone jack, the speakers are muted -- and so is the
headphone jack. if you sorta plug it in loosely, you hear both the
speakers and the headphone simultaneously. Something's screwy with the
HDA Codec routings! This was a particularly annoying fix to solve, and
has been broken since the 2.6.28 kernel. There's been a patch rotting
in ALSA's bugtracker for more than a year now.
Tonight I got sick of the headphone jack screwiness, and started
poking around and discovered the 'hda analyzer' tool; and when poking
around with the various routing lines referenced by the patch, I
suddenly start hearing output from the headphones. Plugging and
unplugging them JustWorks(tm). Apparently the default routing for the
headphone jack is incorrect. A bit more digging led me to the hda-verb
tool, which can then be invoked with:
hda-verb /dev/snd/hwC0D0 0x21 SET_CONNECT_SEL 0x0d
And voila, everything JustWorks(tm). Yay!
I added a rule to the pm-utils scripts that kicks both ethtool and
hda-verb to fix things up after a suspend, and I'm as happy as a clam
now.
When combined with the 'asusg50oled' app that does something
useful with the little OLED display above the keyboard, this laptop is
actually more functional in Linux than it is under Vista -- It won't
come out of a suspend properly there -- and I can even directly control
the LEDs around the touchpad. oooo.
Other joy I encountered included a slightly buggy ExpressCard
CompactFlash adapter. Modern CF cards, basically being full PATA
implementations, can operate at UDMA speeds -- current high-end cards
can sustain 90MB/s throughput, well in excess of the ~25-ish
that the best USB-based readers can accomplish. I picked up a 'SIIG
ExpressCard/54 R/W' adapter, which promises to let me run all-out. So,
once I got the hotplug problem fixed up, I slapped in my UDMA-capable CF
card.. and.. barely managed 20MB/s, actually worsethan my USB reader.
Further investigation showed that the kernel PATA later was saying
that the '80-wire detection' was failing, forcing the card to revert to
at most UDMA-33 speeds. Apparently the CF adapter wasn't reporting the
proper cable status -- CF cards by definition are 40-pin, but the cables
are nonexistent so they can operate at full UDMA/133 speeds if they
support it. Unfortutaely, SIIG used the same PCI subvendor/model ID as
the reference design for the PATA chipset... so there was no way to hack
in a kernel quirk to work around this buggy hardware. But not all was
lost!
There was a way to force this to be overridden, but only on a
per-adapter basis -- and since the ExpressCard is removable, each time a
hotplug event happens it's assigned a new adapterid. I was able to work
around this by forcing the kernel to default to a "short 40-pin cable"
mode, and explicitly setting the hard drive and DVD drive to full sata
operation -- adding 'libata.force=short40c,1:sata,2:sata' to my kerel
command line. And my "300X" CF cards sustain 40MB/s. Whee!
So what's my cmdline after all of this?
"ro root=/dev/sda7 rhgb pciehp.pciehp_force=1 intel_iommu=off SYSFONT=ter-u16b LANG=en_US.UTF-8 KEYTABLE=us libata.force=short40c,1:sata,2:sata i8042.noloop i8042.nopnp"
Yeah, it's a mouthful..
Syndicated 2010-04-17 04:33:17 (Updated 2010-11-09 18:09:47) from Solomon Peachy