Texas Instruments cardbus bridge issue (PCI ID 104c:8031)
M. Warner Losh
imp at bsdimp.com
Fri Oct 28 08:48:48 PDT 2005
I think that your problem is due to the way that FreeBSD numbers, or
doesn't number PCI busses. You have the right symptom set: 16-bit
cards work great, 32-bit cards not at all.
cbb_pcic_socket_disable
# I insert and remove the D-Link G650 Cardbus card a couple of times:
Status is 0x30000920
cbb0: card inserted: event=0x00000000, state=30000920
cbb0: cbb_power: 3V
cbb0: cbb_power: 0V
pcib2: <MPTable PCI-PCI bridge> at device 20.4 on pci0
pcib2: secondary bus 5
pcib2: subordinate bus 5
pcib2: I/O decode 0xa000-0xafff
pcib2: memory decode 0xd0200000-0xd02fffff
pcib2: prefetched decode 0xfff00000-0xfffff
pcib2: Subtractively decoded bridge.
pci5: <PCI bus> on pcib2
cbb0: <PCI-CardBus Bridge> at device 9.0 on pci5
Notice that the subordinate bus number == 5. There's no way to get
the config cycles to the cardbus bus. FreeBSD needs to renumber the
'5' there to some larger value The cbb bridge says:
0x10: 0xd0208000 0x020000a0 0x20070605 0xfffff000
which says that the CardBus will be pci bus 6 and it can have 1 child
pci bus 7.
Try using pciconf to change pcib2's subordinate bus register to 7:
pciconf -wb pci0:20:4 0x1a 7
This is, at best, a workaround until I can get the bus numbering code
working. My laptops don't have this problem. Maybe I need to buy a
new laptop. Maybe one with Express Card :-)
Warner
More information about the freebsd-mobile
mailing list