Device address space
Alex Forencich edited this page Feb 2, 2021
·
2 revisions
The Corundum address space is designed to be flexible to adjust to FPGA application requirements. The driver is loosely coupled to the FPGA design: the address space configuration is exposed to the driver through a number of informational registers, permitting the driver to automatically determine the layout without any board or design specific magic numbers or manual changes to the driver code.
The driver prints out many of the address space parameters during probe, for example:
mqnic 0000:01:00.0: mqnic PCI probe
mqnic 0000:01:00.0: enabling device (0000 -> 0002)
mqnic 0000:01:00.0: FW ID: 0x00000000
mqnic 0000:01:00.0: FW version: 0.1
mqnic 0000:01:00.0: Board ID: 0x10ee9118
mqnic 0000:01:00.0: Board version: 0.1
mqnic 0000:01:00.0: PHC count: 1
mqnic 0000:01:00.0: PHC offset: 0x00000200
mqnic 0000:01:00.0: IF count: 2
mqnic 0000:01:00.0: IF stride: 0x00800000
mqnic 0000:01:00.0: IF CSR offset: 0x00040000
mqnic 0000:01:00.0: Resetting Alveo CMS
mqnic 0000:01:00.0: Read 2 MACs from Alveo BMC
mqnic 0000:01:00.0: registered PHC (index 6)
mqnic 0000:01:00.0: Creating interface 0
mqnic 0000:01:00.0: IF ID: 0x00000000
mqnic 0000:01:00.0: IF features: 0x00000701
mqnic 0000:01:00.0: Event queue count: 32
mqnic 0000:01:00.0: Event queue offset: 0x00080000
mqnic 0000:01:00.0: TX queue count: 8192
mqnic 0000:01:00.0: TX queue offset: 0x00100000
mqnic 0000:01:00.0: TX completion queue count: 8192
mqnic 0000:01:00.0: TX completion queue offset: 0x00200000
mqnic 0000:01:00.0: RX queue count: 256
mqnic 0000:01:00.0: RX queue offset: 0x00300000
mqnic 0000:01:00.0: RX completion queue count: 256
mqnic 0000:01:00.0: RX completion queue offset: 0x00380000
mqnic 0000:01:00.0: Port count: 1
mqnic 0000:01:00.0: Port offset: 0x00400000
mqnic 0000:01:00.0: Port stride: 0x00100000
mqnic 0000:01:00.0: Max desc block size: 8
mqnic 0000:01:00.0: Port ID: 0x00000000
mqnic 0000:01:00.0: Port features: 0x00000701
mqnic 0000:01:00.0: Port MTU: 16384
mqnic 0000:01:00.0: Scheduler count: 1
mqnic 0000:01:00.0: Scheduler offset: 0x00080000
mqnic 0000:01:00.0: Scheduler stride: 0x00080000
mqnic 0000:01:00.0: Scheduler type: 0x00000000
mqnic 0000:01:00.0: Creating interface 1
mqnic 0000:01:00.0: IF ID: 0x00000000
mqnic 0000:01:00.0: IF features: 0x00000701
mqnic 0000:01:00.0: Event queue count: 32
mqnic 0000:01:00.0: Event queue offset: 0x00080000
mqnic 0000:01:00.0: TX queue count: 8192
mqnic 0000:01:00.0: TX queue offset: 0x00100000
mqnic 0000:01:00.0: TX completion queue count: 8192
mqnic 0000:01:00.0: TX completion queue offset: 0x00200000
mqnic 0000:01:00.0: RX queue count: 256
mqnic 0000:01:00.0: RX queue offset: 0x00300000
mqnic 0000:01:00.0: RX completion queue count: 256
mqnic 0000:01:00.0: RX completion queue offset: 0x00380000
mqnic 0000:01:00.0: Port count: 1
mqnic 0000:01:00.0: Port offset: 0x00400000
mqnic 0000:01:00.0: Port stride: 0x00100000
mqnic 0000:01:00.0: Max desc block size: 8
mqnic 0000:01:00.0: mqnic_start_port on port 0
mqnic 0000:01:00.0: Port ID: 0x00000000
mqnic 0000:01:00.0: Port features: 0x00000701
mqnic 0000:01:00.0: Port MTU: 16384
mqnic 0000:01:00.0: Scheduler count: 1
mqnic 0000:01:00.0: Scheduler offset: 0x00080000
mqnic 0000:01:00.0: Scheduler stride: 0x00080000
mqnic 0000:01:00.0: Scheduler type: 0x00000000
mqnic 0000:01:00.0: mqnic_start_port on port 1
These parameters describe the following layout:
00000000 - 0003FFFF NIC CSRs
00000020 IF_COUNT = 2
00000024 IF_STRIDE = 0x0080000
0000002C IF_CSR_OFFSET = 0x00040000
00040000 - 007FFFFF Interface 0
00040000 - 0007FFFF Interface CSRs
00040014 EVENT_QUEUE_OFFSET = 0x00080000
00040024 TX_QUEUE_OFFSET = 0x00100000
0004002C TX_CPL_QUEUE_OFFSET = 0x00200000
00040034 RX_QUEUE_OFFSET = 0x00300000
0004003C RX_CPL_QUEUE_OFFSET = 0x00380000
00040040 PORT_COUNT = 1
00040044 PORT_OFFSET = 0x00400000
00040048 PORT_STRIDE = 0x00100000
00080000 - 000FFFFF Event queues
00100000 - 001FFFFF TX queues
00200000 - 002FFFFF TX completion queues
00300000 - 0037FFFF RX queues
00380000 - 003FFFFF RX completion queues
00400000 - 004FFFFF Port 0
00400000 - 0047FFFF Port 0 CSRs
00400010 SCHED_COUNT = 1
00400014 SCHED_OFFSET = 0x00080000
00400018 SCHED_STRIDE = 0x00080000
00480000 - 004FFFFF Port 0 scheduler 0
00500000 - 005FFFFF Port 1 (unused)
00600000 - 006FFFFF Port 2 (unused)
00700000 - 007FFFFF Port 3 (unused)
00800000 - 0083FFFF NIC CSRs (alias)
00840000 - 0084FFFF Interface 1
00840000 - 0087FFFF Interface CSRs
00840014 EVENT_QUEUE_OFFSET = 0x00080000
00840024 TX_QUEUE_OFFSET = 0x00100000
0084002C TX_CPL_QUEUE_OFFSET = 0x00200000
00840034 RX_QUEUE_OFFSET = 0x00300000
0084003C RX_CPL_QUEUE_OFFSET = 0x00380000
00840040 PORT_COUNT = 1
00840044 PORT_OFFSET = 0x00400000
00840048 PORT_STRIDE = 0x00100000
00880000 - 008FFFFF Event queues
00900000 - 009FFFFF TX queues
00A00000 - 00AFFFFF TX completion queues
00B00000 - 00B7FFFF RX queues
00B80000 - 00BFFFFF RX completion queues
00C00000 - 00CFFFFF Port 0
00C00000 - 00C7FFFF Port 0 CSRs
00C00010 SCHED_COUNT = 1
00C00014 SCHED_OFFSET = 0x00080000
00C00018 SCHED_STRIDE = 0x00080000
00C80000 - 00CFFFFF Port 0 scheduler 0
00D00000 - 00DFFFFF Port 1 (unused)
00E00000 - 00EFFFFF Port 2 (unused)
00F00000 - 00FFFFFF Port 3 (unused)