|
16 | 16 |
|
17 | 17 | #define FBNIC_CLOCK_FREQ (600 * (1000 * 1000))
|
18 | 18 |
|
| 19 | +/* Rx Buffer Descriptor Format |
| 20 | + * |
| 21 | + * The layout of this can vary depending on the page size of the system. |
| 22 | + * |
| 23 | + * If the page size is 4K then the layout will simply consist of ID for |
| 24 | + * the 16 most significant bits, and the lower 46 are essentially the page |
| 25 | + * address with the lowest 12 bits being reserved 0 due to the fact that |
| 26 | + * a page will be aligned. |
| 27 | + * |
| 28 | + * If the page size is larger than 4K then the lower n bits of the ID and |
| 29 | + * page address will be reserved for the fragment ID. This fragment will |
| 30 | + * be 4K in size and will be used to index both the DMA address and the ID |
| 31 | + * by the same amount. |
| 32 | + */ |
| 33 | +#define FBNIC_BD_DESC_ADDR_MASK DESC_GENMASK(45, 12) |
| 34 | +#define FBNIC_BD_DESC_ID_MASK DESC_GENMASK(63, 48) |
| 35 | +#define FBNIC_BD_FRAG_SIZE \ |
| 36 | + (FBNIC_BD_DESC_ADDR_MASK & ~(FBNIC_BD_DESC_ADDR_MASK - 1)) |
| 37 | +#define FBNIC_BD_FRAG_COUNT \ |
| 38 | + (PAGE_SIZE / FBNIC_BD_FRAG_SIZE) |
| 39 | +#define FBNIC_BD_FRAG_ADDR_MASK \ |
| 40 | + (FBNIC_BD_DESC_ADDR_MASK & \ |
| 41 | + ~(FBNIC_BD_DESC_ADDR_MASK * FBNIC_BD_FRAG_COUNT)) |
| 42 | +#define FBNIC_BD_FRAG_ID_MASK \ |
| 43 | + (FBNIC_BD_DESC_ID_MASK & \ |
| 44 | + ~(FBNIC_BD_DESC_ID_MASK * FBNIC_BD_FRAG_COUNT)) |
| 45 | +#define FBNIC_BD_PAGE_ADDR_MASK \ |
| 46 | + (FBNIC_BD_DESC_ADDR_MASK & ~FBNIC_BD_FRAG_ADDR_MASK) |
| 47 | +#define FBNIC_BD_PAGE_ID_MASK \ |
| 48 | + (FBNIC_BD_DESC_ID_MASK & ~FBNIC_BD_FRAG_ID_MASK) |
| 49 | + |
19 | 50 | /* Register Definitions
|
20 | 51 | *
|
21 | 52 | * The registers are laid as indexes into an le32 array. As such the actual
|
@@ -124,14 +155,14 @@ enum {
|
124 | 155 |
|
125 | 156 | /* Global QM Rx registers */
|
126 | 157 | #define FBNIC_CSR_START_QM_RX 0x00c00 /* CSR section delimiter */
|
127 |
| -#define FBNIC_QM_RCQ_IDLE(n) (0x00c00 + (n)) /* 0x03000 + 0x4*n */ |
| 158 | +#define FBNIC_QM_RCQ_IDLE(n) (0x00c00 + (n)) /* 0x03000 + 4*n */ |
128 | 159 | #define FBNIC_QM_RCQ_IDLE_CNT 4
|
129 | 160 | #define FBNIC_QM_RCQ_CTL0 0x00c0c /* 0x03030 */
|
130 | 161 | #define FBNIC_QM_RCQ_CTL0_COAL_WAIT CSR_GENMASK(15, 0)
|
131 | 162 | #define FBNIC_QM_RCQ_CTL0_TICK_CYCLES CSR_GENMASK(26, 16)
|
132 |
| -#define FBNIC_QM_HPQ_IDLE(n) (0x00c0f + (n)) /* 0x0303c + 0x4*n */ |
| 163 | +#define FBNIC_QM_HPQ_IDLE(n) (0x00c0f + (n)) /* 0x0303c + 4*n */ |
133 | 164 | #define FBNIC_QM_HPQ_IDLE_CNT 4
|
134 |
| -#define FBNIC_QM_PPQ_IDLE(n) (0x00c13 + (n)) /* 0x0304c + 0x4*n */ |
| 165 | +#define FBNIC_QM_PPQ_IDLE(n) (0x00c13 + (n)) /* 0x0304c + 4*n */ |
135 | 166 | #define FBNIC_QM_PPQ_IDLE_CNT 4
|
136 | 167 | #define FBNIC_QM_RNI_RBP_CTL 0x00c2d /* 0x030b4 */
|
137 | 168 | #define FBNIC_QM_RNI_RBP_CTL_MRRS CSR_GENMASK(1, 0)
|
@@ -451,12 +482,78 @@ enum {
|
451 | 482 | #define FBNIC_QUEUE_TIM_COUNTS_CNT0_MASK CSR_GENMASK(14, 0)
|
452 | 483 |
|
453 | 484 | /* Rx Completion Queue Registers */
|
| 485 | +#define FBNIC_QUEUE_RCQ_CTL 0x200 /* 0x800 */ |
| 486 | +#define FBNIC_QUEUE_RCQ_CTL_RESET CSR_BIT(0) |
| 487 | +#define FBNIC_QUEUE_RCQ_CTL_ENABLE CSR_BIT(1) |
| 488 | + |
454 | 489 | #define FBNIC_QUEUE_RCQ_HEAD 0x201 /* 0x804 */
|
455 | 490 |
|
| 491 | +#define FBNIC_QUEUE_RCQ_SIZE 0x204 /* 0x810 */ |
| 492 | +#define FBNIC_QUEUE_RCQ_SIZE_MASK CSR_GENMASK(3, 0) |
| 493 | + |
| 494 | +#define FBNIC_QUEUE_RCQ_BAL 0x220 /* 0x880 */ |
| 495 | +#define FBNIC_QUEUE_RCQ_BAH 0x221 /* 0x884 */ |
| 496 | + |
456 | 497 | /* Rx Buffer Descriptor Queue Registers */
|
| 498 | +#define FBNIC_QUEUE_BDQ_CTL 0x240 /* 0x900 */ |
| 499 | +#define FBNIC_QUEUE_BDQ_CTL_RESET CSR_BIT(0) |
| 500 | +#define FBNIC_QUEUE_BDQ_CTL_ENABLE CSR_BIT(1) |
| 501 | +#define FBNIC_QUEUE_BDQ_CTL_PPQ_ENABLE CSR_BIT(30) |
| 502 | + |
457 | 503 | #define FBNIC_QUEUE_BDQ_HPQ_TAIL 0x241 /* 0x904 */
|
458 | 504 | #define FBNIC_QUEUE_BDQ_PPQ_TAIL 0x242 /* 0x908 */
|
459 | 505 |
|
| 506 | +#define FBNIC_QUEUE_BDQ_HPQ_SIZE 0x247 /* 0x91c */ |
| 507 | +#define FBNIC_QUEUE_BDQ_PPQ_SIZE 0x248 /* 0x920 */ |
| 508 | +#define FBNIC_QUEUE_BDQ_SIZE_MASK CSR_GENMASK(3, 0) |
| 509 | + |
| 510 | +#define FBNIC_QUEUE_BDQ_HPQ_BAL 0x260 /* 0x980 */ |
| 511 | +#define FBNIC_QUEUE_BDQ_HPQ_BAH 0x261 /* 0x984 */ |
| 512 | +#define FBNIC_QUEUE_BDQ_PPQ_BAL 0x262 /* 0x988 */ |
| 513 | +#define FBNIC_QUEUE_BDQ_PPQ_BAH 0x263 /* 0x98c */ |
| 514 | + |
| 515 | +/* Rx DMA Engine Configuration */ |
| 516 | +#define FBNIC_QUEUE_RDE_CTL0 0x2a0 /* 0xa80 */ |
| 517 | +#define FBNIC_QUEUE_RDE_CTL0_EN_HDR_SPLIT CSR_BIT(31) |
| 518 | +#define FBNIC_QUEUE_RDE_CTL0_DROP_MODE_MASK CSR_GENMASK(30, 29) |
| 519 | +enum { |
| 520 | + FBNIC_QUEUE_RDE_CTL0_DROP_IMMEDIATE = 0, |
| 521 | + FBNIC_QUEUE_RDE_CTL0_DROP_WAIT = 1, |
| 522 | + FBNIC_QUEUE_RDE_CTL0_DROP_NEVER = 2, |
| 523 | +}; |
| 524 | + |
| 525 | +#define FBNIC_QUEUE_RDE_CTL0_MIN_HROOM_MASK CSR_GENMASK(28, 20) |
| 526 | +#define FBNIC_QUEUE_RDE_CTL0_MIN_TROOM_MASK CSR_GENMASK(19, 11) |
| 527 | + |
| 528 | +#define FBNIC_QUEUE_RDE_CTL1 0x2a1 /* 0xa84 */ |
| 529 | +#define FBNIC_QUEUE_RDE_CTL1_MAX_HDR_MASK CSR_GENMASK(24, 12) |
| 530 | +#define FBNIC_QUEUE_RDE_CTL1_PAYLD_OFF_MASK CSR_GENMASK(11, 9) |
| 531 | +#define FBNIC_QUEUE_RDE_CTL1_PAYLD_PG_CL_MASK CSR_GENMASK(8, 6) |
| 532 | +#define FBNIC_QUEUE_RDE_CTL1_PADLEN_MASK CSR_GENMASK(5, 2) |
| 533 | +#define FBNIC_QUEUE_RDE_CTL1_PAYLD_PACK_MASK CSR_GENMASK(1, 0) |
| 534 | +enum { |
| 535 | + FBNIC_QUEUE_RDE_CTL1_PAYLD_PACK_NONE = 0, |
| 536 | + FBNIC_QUEUE_RDE_CTL1_PAYLD_PACK_ALL = 1, |
| 537 | + FBNIC_QUEUE_RDE_CTL1_PAYLD_PACK_RSS = 2, |
| 538 | +}; |
| 539 | + |
| 540 | +/* Rx Interrupt Manager Registers */ |
| 541 | +#define FBNIC_QUEUE_RIM_CTL 0x2c0 /* 0xb00 */ |
| 542 | +#define FBNIC_QUEUE_RIM_CTL_MSIX_MASK CSR_GENMASK(7, 0) |
| 543 | + |
| 544 | +#define FBNIC_QUEUE_RIM_THRESHOLD 0x2c1 /* 0xb04 */ |
| 545 | +#define FBNIC_QUEUE_RIM_THRESHOLD_RCD_MASK CSR_GENMASK(14, 0) |
| 546 | + |
| 547 | +#define FBNIC_QUEUE_RIM_CLEAR 0x2c2 /* 0xb08 */ |
| 548 | +#define FBNIC_QUEUE_RIM_CLEAR_MASK CSR_BIT(0) |
| 549 | +#define FBNIC_QUEUE_RIM_SET 0x2c3 /* 0xb0c */ |
| 550 | +#define FBNIC_QUEUE_RIM_SET_MASK CSR_BIT(0) |
| 551 | +#define FBNIC_QUEUE_RIM_MASK 0x2c4 /* 0xb10 */ |
| 552 | +#define FBNIC_QUEUE_RIM_MASK_MASK CSR_BIT(0) |
| 553 | + |
| 554 | +#define FBNIC_QUEUE_RIM_COAL_STATUS 0x2c5 /* 0xb14 */ |
| 555 | +#define FBNIC_QUEUE_RIM_RCD_COUNT_MASK CSR_GENMASK(30, 16) |
| 556 | +#define FBNIC_QUEUE_RIM_TIMER_MASK CSR_GENMASK(13, 0) |
460 | 557 | #define FBNIC_MAX_QUEUES 128
|
461 | 558 | #define FBNIC_CSR_END_QUEUE (0x40000 + 0x400 * FBNIC_MAX_QUEUES - 1)
|
462 | 559 |
|
|
0 commit comments