Current-Users archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: CardBus testers needed



On Thu, Mar 11, 2010 at 09:52:22AM +0100, Markus W Kilbinger wrote:
> >>>>> "David" == David Young <dyoung%pobox.com@localhost> writes:
> 
>     David> Please send 'pcictl pci0 dump -d 20 -f 4'.
>     >> 
>     >> Attached:
> 
>     David> Thanks. Send pcictl output for the CardBus bridge again,
>     David> too, and the host bridge.
> 
> According to my dmesg output (excerpt):
> 
>   pci0 at mainbus0 bus 0: configuration mode 1

That is a host-PCI bridge.  It bridges the host chipset (CPU, memory
controller, et cetera) to a PCI bus.

>   ppb2 at pci0 dev 20 function 4: ATI Technologies SB600 PCI to PCI Bridge 
> (rev. 0x00)

And that is a PCI-PCI bridge.  It bridges a PCI bus to a PCI bus.

>   pci3 at ppb2 bus 3
>   pci3: i/o space, memory space enabled
>   cbb0 at pci3 dev 5 function 0: ENE Technology CB1410 CardBus Controller 
> (rev. 0x01)

Finally, we have the PCI-CardBus bridge.

There are I/O- and memory-space windows on each PCI-* bridge.  They tell
which addresses are on the secondary side of the bridge.  (The secondary
side is the side that is farther from the chipset.  The primary side
is nearer to the chipset.)  When a bridge sees a transaction address
on its primary side that is in the applicable window, it forwards the
transaction to its secondary side.

I'm concerned that your CardBus bridge's memory-mapped registers are at
[0xcffe0000, 0xcfffffff],

      Base address register at 0x10 (CardBus socket/ExCA registers)
        type: 32-bit nonprefetchable memory                                     
        base: 0xcffe0000, not sized                                             

but the PCI bridge passes only memory addresses [0xfe300000, 0xfebfffff]
to its secondary side:

      Memory region:
        base register:  0xfe30                                                  
        limit register: 0xfeb0                                                  

The PCI bridge's window, [0xfe300000, 0xfebfffff], should enclose the
CardBus bridge's registers, [0xcffe0000, 0xcfffffff], but the regions do
not even overlap!

I believe that this is just the kind of misconfiguration that
PCI_ADDR_FIXUP was meant to fix.

It seems that accesses to [0xcffe0000, 0xcfffffff] could not possibly go
to the CardBus bridge.  It is possible that those accesses go to RAM.

Dave

-- 
David Young             OJC Technologies
dyoung%ojctech.com@localhost      Urbana, IL * (217) 278-3933


Home | Main Index | Thread Index | Old Index