PCI drivers - BAR addresses

Daniel Hellstrom daniel at gaisler.com
Mon Oct 28 12:17:43 UTC 2013

Ok, thanks for letting me know.

You can have a look at the changelog, I think the introduced changes in the drvmgr API names, the changelog describe a way to update some of the changes:
     sed -e 's/rtems_drvmgr_dev_info/drvmgr_dev/g' \
         -e 's/rtems_drvmgr_bus_info/drvmgr_bus/g' \
         -e 's/rtems_drvmgr_drv_info/drvmgr_drv/g' \
         -e 's/rtems_drvmgr_/drvmgr_/g' -i FILE
The configuration (for example drvmgr_leon3_config.c) has changed too to avoid unnecessary malloc() calls during initialization.


On 10/28/2013 12:38 PM, David Paterson wrote:
> Hi Daniel,
> On 25 October 2013 20:26, Daniel Hellstrom <daniel at gaisler.com <mailto:daniel at gaisler.com>> wrote:
>     Hi,
>     David Paterson <dnpaterson at gmail.com <mailto:dnpaterson at gmail.com>> wrote:
>     >Hi Daniel,
>     >
>     >After a bit of experimenting with the new version of RTEMS, I have a
>     >couple
>     >of follow-up questions I hope you can help with.
>     >
>     >I started with the "rtems-pci" sample, and added in the "#define
>     >LITTLE_ENDIAN_PCI_SYSTEM" as you suggested, but that didn't have the
>     >expected result.
>     >
>     >Without this addition, I see the reported BAR registers for our card as
>     >:-
>     >
>     >MEMIO[0]:  80040800-800409ff [PCIADR 80040800]
>     > IO32[1]:  fff20000-fff200ff [PCIADR fff20000]
>     >MEMIO[2]:  80000000-8003ffff [PCIADR 80000000]
>     >MEMIO[3]:  80040000-800407ff [PCIADR 80040000]
>     >
>     >However, with the little-endian define, I get :-
>     >
>     > IO32[0]:  fff2000c-fff2000f [PCIADR fff2000c]
>     > IO32[1]:  fff20008-fff2000b [PCIADR fff20008]
>     > IO16[2]:  fff20004-fff20007 [PCIADR fff20004]
>     > IO32[3]:  fff20000-fff20003 [PCIADR fff20000]
>     >
>     >which looks very odd, and not really sensible BAR addresses at all.
>     Yes it does.
>     Thats sound strange, since on the leon4-itx board you should enable bytetwisting. Note that if you have run a previous image before without resetting the board or used GRMON to turn off
>     bytetwisting before the RTEMS app you may end up in a funny situation
>     . As I mentioned before the GRPCI driver have no ability to turn on bytetwisting just to turn off..
> D'oh!!  I should have thought to try that.  A quick test this morning with a clean restart now gives me BAR addresses :-
>    MEMIO[0]:  80040800-800409ff [PCIADR 80040800]
>     IO32[1]:  fff20000-fff200ff [PCIADR fff20000]
>    MEMIO[2]:  80000000-8003ffff [PCIADR 80000000]
>    MEMIO[3]:  80040000-800407ff [PCIADR 80040000]
> which is the same as before without byte-twisting, but now reading from these gives me access to the device registers :-)  Thanks for the help on this.
> >As a final query, I'm also looking for a way to determine the RTEMS
> >version
> >at build time, e.g. as a defined constant, something like the Linux
> >"KERNEL_VERSION_CODE".  I noticed the latest RTEMS I downloaded
> >(1.2.12)
> >had changed a number of functions in the API, and in order to support
> >users
> >on different version we'll likely have to use a similar approach to out
> >Linux driver, using "#if RTEMS_VERSION > ????" sections to ensure the
> >correct API functions are called.  BTW, printing the version using
> >rtems- gives
> >"rtems-" which looks a bit wrong, since I'm
> >using 4.10.
>     Thats wrong, I will have a look at it. Have you built the kernel yourself or used the precompiled? Rcc 1.2.12 is rtems-4.10.2.
>     What API has changed? Which version did you run before?
> I'm using the pre-compiled 1.2.12 version (we're hoping not to have to rebuild the kernel).  I've just noticed the copy'n'paste error in my previous message - the function I'm calling to print the 
> version is "rtems_get_version_string()", and it's this that seems to be giving an odd result.  However, for compile-time selection I can use the "RTEMS_VERSION" define you mentioned in your other 
> message.
> I haven't looked in detail at the changes to the API yet, but will work through them today.  We've previously been using version, and the first change I noticed when rebuilding the driver 
> was that the function "rtems_drvmgr_init()" is now called "drvmgr_init()". There probably aren't too many differences, and hopefully they'll just be minor ones, so we should be able to get a driver 
> working with the latest build quite soon.
> Thanks for the help with this,
> David

More information about the users mailing list