Merlin U630 now partially working on HP1448 laptop (PCIxx21) - need
alex at tinwood.homelinux.org
Tue May 2 07:36:15 EDT 2006
If you've been following this:
- HP1448EA laptop
- 2.6.16-ck3 + subordinate renumber patch from Bernhard Kaindl
- Novatel U630 Merlin G3 wireless card
- problem: wouldn't find and initialise the serial port.
Well, I finally got it working, but it is a bad hack.
The problem was that:
1. in serial_config() [in serial_cs.c] the ports get allocated to
0x2f8 and 0x3f8 (it has two serial ports) on IRQ3 (shared) as per
the CIS information on the card.
2. However, the serial probing code couldn't find the 16550A uarts.
I spent a while tracing things through, looking at the differences
between how Windows and Linux sets the card up and looking at a
different HP laptop.
I finally got it working by dumping the CIS off the card and forcing
the two ports to 0x178 and 0x170. And present the serial probing code
found the 16550A uarts and I now have a working card.
Interestingly Windows ALWAYS allocates the card at 0x178 and 0x170 for
the two serial ports even though the card suggests 0x2f8 and 0x3f8 for
them. Linux picks what the CIS says, Windows ignores it and goes to
the very last entry in the CIS which I believe means 'pick a range
offset 0xbb, tuple 0x1b, link 0x0e
27 98 23 50 ff ff 48 c1 05 43 4f 4d 78 00
io 0x0000-0x0007 [lines=3] [8bit]
irq mask 0xffff [pulse]
7 bytes in subtuples
Why do I have to hack the CIS to get it to work on this laptop and not
others? I figured it must be something to do with how the PCI7411
(that's my chipset) PCI-to-Cardbus bridge is being setup. I have
mapped the differences between Windows and Linux:
There were no differences on the 82801BAM-M (ICH6) that comes with the
laptop that pciscan.exe could see (in Windows) or dumping the PCI
space in Linux.
As a curious note, when the card starts working with 0x178 and you
then reconfigure it to work at 0x2f8 it carries on working! i.e. once
the port has been found it can then be found in other places.
Anybody have any idea what is going on? It seems like it might be a
problem in the yenta_socket.c code interacting with the pci7411 on my
laptop but I can't figure it out. I don't want to leave it in this
hacked up state...
Thanks for any help.
More information about the linux-pcmcia