Visible to Intel only — GUID: aan1506275190752
Ixiasoft
Visible to Intel only — GUID: aan1506275190752
Ixiasoft
1.3.5. MMIO Accesses to I/O Memory
The CCI-P defines MMIO read and write requests for accessing the AFU register file. MMIO requests are routed from the CPU to the AFU over a single PCIe channel.
MMIO Reads
The AFU receives an MMIO read request over pck_cp2af_sRx.c0. The CCI-P asserts mmioRdValid and drives the MMIO read request on hdr. The c0_ReqMmioHdr structure provides a convenient mapping from a flat bit-vector to MMIO request fields – {address, length, tid}.
The AFU drives an MMIO read response over pck_af2cp_sTx.c2. The AFU asserts mmioRdValid and drives the response header and data on hdr and data, respectively. The AFU is expected to return the request tid with the corresponding response it used to associate the response with request.
- Data lengths supported are 4 bytes and 8 bytes
- Response length must match the request length. For example, it is illegal to return two 4-byte responses to an 8-byte MMIO read request
- Maximum number of outstanding MMIO read requests is limited to 64
- MMIO reads to undefined AFU registers should still return a response
MMIO Writes
The AFU receives an MMIO write request over pck_cp2af_sRx.c0. The CCI-P asserts mmioWrValid and drives the MMIO write request header and data on hdr and data, respectively. The c0_ReqMmioHdr structure provides a convenient mapping from a flat bit-vector to MMIO request fields – {address, length, tid}. The MMIO write request is posted and no response is expected from the AFU.
The data lengths supported are 4 bytes, 8 bytes, and 64 bytes.
Implementation Note for all MMIO Accesses
- It is mandatory for the AFU to support 8-byte accesses in order to implement the DFH.
- Support for 4-byte MMIO accesses is optional. The AFU developer can coordinate with the software application developer to avoid 4-byte accesses.
- The AFU can accept MMIO requests as they arrive, consecutively, without any delays.
- Unaligned MMIO accesses results in an error. The software application developer must ensure that the MMIO address is aligned to the request length. For example: 8-byte MMIO request byte address should be a multiple of 8, which means byte address[2:0] should be 0.