Hi everyone!
 
I've run into what seems to be a contradiction with reference to the "relocatability" of a BAR's
mem/io space.
 
In the following example the spec. of the device says that BARs 0x10, 0x14 and 0x30 are
relocatable.
 
assigned-addresses       81001810 00000000 00000300 00000000 00000100
                         82001814 00000000 00100000 00000000 00002000
                         82001830 00000000 00180000 00000000 00080000
reg                      00001800 00000000 00000000 00000000 00000000
                         01001810 00000000 00000000 00000000 00000100
                         02001814 00000000 00000000 00000000 00002000
                         02001830 00000000 00000000 00000000 00080000
So when I create and assign values to the reg property, I set the "n" bit to 0. Example BAR 0x10: 01001810
As defined in the OpenFirmware IEEE-1275 PCI Bus Binding 2.1, the "n" bit indicates (non)relocatability of
the corresponding BAR's mem/io address space.
 
The assigned-addresses property, however, is created by the system OpenFirmware (Sun SPARC Blade 1500
in this example). And as you can see the "n" bit in the phy-hi values is set for all the BARs (0x10, 0x14, 0x30),
indicating that the corresponding BAR's space is non-relocatable. Example BAR 0x10: 81001810
 
I know, I'm being lazy! I can look for the piece of code in Sun's OBP source.
 
But I'm trying to understand the rule for setting this "n" bit as far as the PCI spec. is concerned.
I could not find anything indicating the attribute of relocatibility in the PCI spec. (including the PCI Architecture
2.1 book from Mindshare.)
 
The only place I was able to make any sense of relocatability was the type bit field in the BAR[2:1]:
 
For BAR[0] = 0, this BAR is associated with a memory address space:
Type field BAR[2:1] =
00 (locate anywhere in lower 4GB)
01 (locate below 1MB (reserved in PCI 2.2 spec))
10 (locate anywhere over 4GB (implies that register is 64-bits wide))
11 (reserved)
 
For BAR[0] = 1, this BAR is associated with a IO address space.
There is no type field in this case.
 
All this leads me to conclude:
- all memory-address-space BARs are relocatable;
- all io-address-space BARs are non-relocatable.
 
Is this conclusion correct?
 

_____________

Äsif Haswaréy

QLogic Corporation

FCode Driver Development

Phone: 949.389.7607

  Fax: 949.389.6308

asif.haswarey@qlogic.com