Address translations for AXI address is done based on BDF table
programming (0x2420 to 0x2434). These BDF table entries can be programmed through
the AXI4-Lite Slave CSR interface,
There are 8 windows provided similar to 8 BARs on PCIe bus. Each entry in BDF table
programming represents one window. If a user needs 2 windows then 2 entrees needs to
be programmed and so on.
There are some restrictions in programming BDF table.
- All PCIe slave bridge data transfers must be quiesced before programming the BDF table.
- There are six registers for each BDF table entry. All six registers must be programmed to make a valid entry. Even if some registers have 0s, you need to program 0s in those registers.
- All the six registers need to be programmed in an order for an
entry to be valid. Order is listed below.
BDF table entree start address = 0x2420 + (0x20 * i), where i = table entree number.
Specifying protection levels for different windows within a BAR is
facilitated by AXI4
prot field via Trustzones. Any
access from PMC will have
a*prot=0 and hence
will get full access.
For the BDF space the protection domain ID itself is stored in the
BDF table. When a request comes in with
a*rpot=0, it will be allowed full access. Requests with
a*prot=1 will only be allowed to access BDF entries
that have lower protection level.
The following table describes this behavior:
|Access Type||BDF Table Value (prot[2:0])||Value in a*prot[2:0] (AXI Interface)||Action|
|Secure access||3'hXXX||3'hX0X (bit 1=0)||Allow|
|Non-secure access to secure entry||3'hX0X||3'hX1X (bit 1=1)||Do not allow|
|Non-secure access to less secure entry||3'hX1X||3'hX1X (bit 1=1)||Allow if bits  and  match between a*prot and BDF entry|