> Date: Sun, 14 Sep 2014 23:57:09 +0200 > From: Thierry Deval <[email protected]> > > Hi, > > When I put a CF to PCCard adapter (not CardBus) in my laptop to work on a CF > boot image, I was surprised by this kernel message : > > ** wdc2 at pcmcia0 function 0 "SanDisk, SDP, 5/3 0.6": can't handle card info > > And the card was not working at all, as weren't any other PCCard I tried > afterwards. > > After digging and enabling as much debugging as I could, I found that the > cardbus bridge (TI PCI7xx1 CardBus) couldn't allocate any IO or mem range > for the cards. > > Digging deeper to understand how the allocation should work, I noticed > a comment in dev/pci/ppb.c talking about handling substractive (or is it > really 'subtractive' as in the comment ? ) decode scheme for more than the > Intel 82801 PCI bridge. > So, as a test, I included the ATI SB400 PCI bridge (behind which the TI > PCI7xx1 CardBus bridge was lying) to the substractive decode treatment. > I was rewarded by a working CF card. > > ** ppb2 at pci0 dev 20 function 4 "ATI SB400 PCI" rev 0x00 > ** pci3 at ppb2 bus 6 > ** cbb0 at pci3 dev 9 function 0 "TI PCI7XX1 CardBus" rev 0x00: apic 1 int 23 > ** cardslot0 at cbb0 slot 0 flags 0 > ** cardbus0 at cardslot0: bus 7 device 0 cacheline 0x8, lattimer 0x20 > ** pcmcia0 at cardslot0 > ** wdc2 at pcmcia0 function 0 "SanDisk, SDP, 5/3 0.6" port 0xa000/16 > ** wd1 at wdc2 channel 0 drive 0: <SanDisk SDCFB-64> > ** wd1: 1-sector PIO, LBA, 61MB, 125440 sectors > ** wd1(wdc2:0:0): using BIOS timings > ** wd1 detached > ** wdc2 detached > > I don't know if anybody else have seen the same problem but I would be glad > to have a confirmation of the fix. > > Here's the diff: > > Index: ppb.c > =================================================================== > RCS file: /cvs/src/sys/dev/pci/ppb.c,v > retrieving revision 1.58 > diff -u -p -u -p -r1.58 ppb.c > --- ppb.c 12 Jul 2014 18:48:52 -0000 1.58 > +++ ppb.c 14 Sep 2014 17:00:40 -0000 > @@ -286,9 +286,11 @@ ppbattach(struct device *parent, struct > * XXX We probably should handle subtractive decode bridges > * in general. > */ > - if (PCI_VENDOR(pa->pa_id) == PCI_VENDOR_INTEL && > + if ((PCI_VENDOR(pa->pa_id) == PCI_VENDOR_INTEL && > (PCI_PRODUCT(pa->pa_id) == PCI_PRODUCT_INTEL_82801BA_HPB || > - PCI_PRODUCT(pa->pa_id) == PCI_PRODUCT_INTEL_82801BAM_HPB)) { > + PCI_PRODUCT(pa->pa_id) == PCI_PRODUCT_INTEL_82801BAM_HPB)) || > + (PCI_VENDOR(pa->pa_id) == PCI_VENDOR_ATI && > + PCI_PRODUCT(pa->pa_id) == PCI_PRODUCT_ATI_SB400_PCI)){ > if (sc->sc_ioex == NULL) > sc->sc_ioex = pa->pa_ioex; > if (sc->sc_memex == NULL) > > I hope this could go in, at least as a first step. > I plan on looking further about what this substractive decode means, and > if there could be a generic way of enabling it where supported...
Can you send pcidump -vxxx output for that machine?
