MCP750 PCI

Till Straumann strauman at SLAC.Stanford.EDU
Wed Jan 22 04:34:56 UTC 2003


gregory.menke at gsfc.nasa.gov wrote:
> Till Straumann writes:
>  > Hi Gregory.
>  > 
>  > 
>  > Although I don't know if your 'strange results' (what exactly are you 
>  > observing??) 
> 
> 
> On Linux, I can dump the card's PCI and 1553 tranceiver registers and
> get a reasonable "idle state".  I know the card is working because
> theres a 16 bit timer register that I can see ticking by printing it
> several times.
> 
> When I print the same registers under RTEMS, I don't get the idle
> state values- nothing even close.  The PCI chipset registers come back
> as 0xffffffff, as if the addresses was out of range whereas under
> Linux, they come back as 0x0.  The tranceiver registers come back as
> all 0 except for the weird ones, some of which yield the same
> "uninitialized" value that they give under Linux.  The timer tick
> register is not incrementing either.
> 
> My test code only does ld_le16 for the tranceiver and ld_le32 for the
> pci chipset. 

Could you attach your test code, please? And the values you read from
PCI config space (for command/status and base registers)?

> 
> Maybe I can ask more intelligent questions;
> 
> Are there any magic enable operations that are done with the mcp750
> onboard peripherals (in this case the dec21140) that I'm missing?
> 

I can't think of any.

> Linux implements ioremap to get address ranges mapped thu the vm
> subsystem, are there BAT or mapping configuration changes needed to
> talk to other pci hardware under RTEMS?

AFAIK, no. (Unless you need more than 0x08000000 bytes - startup.c
lets the BAT map only that many.)

> 
> Could there be extra incantations needed to get transactions out onto
> the backplane?  I've looked thru the bsp fairly closely but haven't
> found anything.
> 

I can perfectly talk to a PMC-network adapter plugged into my MVME23xx
under RTEMS. I scan config space for the vendor/device signature

   BSP_pciFindDevice(BLAH_VENDOR_ID, BLAH_DEVICE_ID, instance,
                     &bus, &dev, &fun);

and read the base address from config space:

   pci_read_config_dword(bus,dev,fun,PCI_BASE_ADDRESS_1,&base_addr);

Then I can see the device at (base_address + PCI_MEM_BASE). No special 
magic needed.
BTW: what snapshot are you using?

-- Till.

PS: one more thing: you might want to define DEBUG and PCI_DEBUG
in 'shared/bootloader/pci.c' to let the bootloader dump the original
and modified PCI configurations. Attach a console dump to your next
posting, please (along with the test code).

> Thanks,
> 
> Greg
> 
> 




More information about the users mailing list