snd-nm256: hard lockup on every second module load after powerup
From: Christian Trefzer
Date: Sun Mar 26 2006 - 00:42:51 EST
Hi folks,
I have this really old Dell Latitude CPiA here containing the dreaded
neomagic combined audio/video chipset, and observe some hard lockup
sometimes, which is not supposed to be anything special wrt. other
people with similar laptops having the same trouble. The only regularity
I noticed was that after completely removing power to the machine, the
sound driver can be loaded without locking the thing hard. Any further
attempt, eg. rmmod and insmod or reboot with alsasound startup script,
will result in a dead machine. Every time. Cut the power, and next time
it will survive - exactly once.
Now this chip is a NM2200 / 256AV, and I already did some reading in the
alsa driver source code, but adding printk()s all over the place just
showed that it does not lock up during init_chip() or poking at the
registers during ac97_reset(), but shortly after the latter, approx.
half a second or so - it might still be a consequence thereof.
My basic idea is, with the device being entirely undocumented (to hell
with all hardware vendors who don't even release specs after the devices
are not even sold anymore, by the way), that the code is missing a
proper device reset, and trying to re-init some parts just kill the
machine. Cutting the power really is not that nice as a workaround. I'd
love to try something along the lines of saving the device's state as a
whole, and before reloading the module, restore that state again. The
difference between before and after should somehow give a clue about the
proper reset procedure - or so I hope.
Unfortunately I failed with my previous attempts to modify the driver
appropriately. Now that it's basically back to formula, I wanted to ask
whether there is a possibility to read and write back whole parts of
memory directly from/to the device, or if I should rather store each and
every register somewhere I can later restore it from, one by one. I'd
even prefer userspace, and am currently experimenting with pcidump.
Any hints would be greatly appreciated! Thanks a bunch,
Chris
Attachment:
pgp00000.pgp
Description: PGP signature