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.

# 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 :-)


More information about the freebsd-mobile mailing list