<div dir="ltr">Thanks Daniel, very useful information.<br><br>This sounds like it will be a big help in getting the board configuration correct, and I'll let you know how it works out.  If I have further queries I'll copy in support as well.<br>
<br>Regards,<br><br>David P.<br><br></div><div class="gmail_extra"><br><br><div class="gmail_quote">On 24 October 2013 13:52, Daniel Hellstrom <span dir="ltr"><<a href="mailto:daniel@gaisler.com" target="_blank">daniel@gaisler.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hello David,<br>
<br>
Please send your LEON specific questions to <a href="mailto:support@gaisler.com" target="_blank">support@gaisler.com</a>. I have set support in CC.<br>
<br>
Please see my comments embedded below.<div class="im"><br>
<br>
<br>
On 10/23/2013 04:13 PM, David Paterson wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Hi all,<br>
<br>
I'm working on a driver for a PCI card (our own design of network device) and have run into a bit of a problem in accessing the device registers via the BAR's.<br>
<br>
We're currently developing for a LEON4 system, using the Gaisler GR-LEON4-ITX board, and now have most of the driver structure in place (based on a working Linux version).  Accessing the configuration registers, e.g. via pci_read_config_dword etc. works fine, but accessing other registers via memory mapping at the addresses in the card's BAR registers isn't working at all.<br>

</blockquote>
<br></div>
Please make sure that the byteTwisting option to the GRPCI driver is enabled on the ITX board. Note that the GRPCI driver assumes that the byte twisting bit is initialized as after a reset. In the latest RCC-1.2.12 distribution there is an example of enabling byte twisting in config_leon3_drvmgr.c by adding the "#define LITTLE_ENDIAN_PCI_SYSTEM" before config.c from the example you are compiling located in /opt/rtems-4.10/src/samples.<div class="im">
<br>
<br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
The addresses assigned, either by the BIOS or possibly RTEMS start-up, don't appear to be correct, and in fact it looks like there's a conflict with the LEON4 GRPCI address space - both our card and the GRPCI controller are operating in the 0x80000000 range.<br>

</blockquote>
<br></div>
There is no BIOS in LEON, unless you have added you own bootloader with PCI support. RTEMS is normally responsible to auto-probe and aut-configure the PCI bus over PCI configuration space.<div class="im"><br>
<br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
If we assign BAR addresses manually (e.g. 0xa0000000) we can read and write registers successfully, but at the moment we're just using arbitrary addresses which we hope don't conflict with anything else.  For a working driver we'll have to cope with multiple cards in a system, and also other, unknown, devices being present, so we need to find a way to set up "correct" addresses, which are unique to each card.<br>

</blockquote>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
Is there a way to get the BAR addresses automatically assigned and written to the card, or, if not, a way to query the system as to which addresses should be used?  I've been searching the code base and looking through the documentation, but can't see any references to this sort of thing.<br>

</blockquote>
<br></div>
It is possible to use the RCC PCI layer in three modes: Auto-configuration, Read-configuration (when you have a BIOS) or Static-configuration where the user provide a custom configuration (a static configuration description of a running system can be generated from pci command in RTEMS). Default is auto-configuration.<br>

<br>
Please try the rtems-pci.c or rtems-shell.c examples in RCC and add the "#define LITTLE_ENDIAN_PCI_SYSTEM" before including config.c. You can issue 'pci ls' from the RTEMS command shell to view the auto-configured PCI bus settings.<br>

<br>
Normally the LEON documentation is located in the RCC manual or the drivers manual, however the PCI library documentation has been added to the RTEMS C User manual found in /opt/rtems-4.10/doc/rtems/c_<u></u>user.pdf.<br>

<br>
Best Regards,<br>
Daniel Hellstrom<br>
Aeroflex Gaisler<br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
Regards,<br>
<br>
David P.<br>
<br>
<br>
<br>
______________________________<u></u>_________________<br>
rtems-users mailing list<br>
<a href="mailto:rtems-users@rtems.org" target="_blank">rtems-users@rtems.org</a><br>
<a href="http://www.rtems.org/mailman/listinfo/rtems-users" target="_blank">http://www.rtems.org/mailman/<u></u>listinfo/rtems-users</a><br>
</blockquote>
<br>
</blockquote></div><br></div>