Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

net: ipa: prepare for IPA v5.5

For IPA v5.5+, the QTIME_TIMESTAMP_CFG register no longer defines
two fields in the DPL timestamp. Make the code referencing those
fields in ipa_qtime_config() conditional based on IPA version.

IPA v5.0+ supports the IPA_MEM_AP_V4_FILTER and IPA_MEM_AP_V6_FILTER
memory regions. Update ipa_mem_id_valid() to reflect that.

IPA v5.5 no longer supports a few register fields, adds some others,
and removes support for a few IPA interrupt types. Update
"ipa_reg.h" to include information about IPA v5.5.

Signed-off-by: Alex Elder <elder@linaro.org>
Signed-off-by: David S. Miller <davem@davemloft.net>

authored by

Alex Elder and committed by
David S. Miller
b00e190c b134b10c

+26 -17
+6 -3
drivers/net/ipa/ipa_main.c
··· 74 74 #define IPA_PAS_ID 15 75 75 76 76 /* Shift of 19.2 MHz timestamp to achieve lower resolution timestamps */ 77 + /* IPA v5.5+ does not specify Qtime timestamp config for DPL */ 77 78 #define DPL_TIMESTAMP_SHIFT 14 /* ~1.172 kHz, ~853 usec per tick */ 78 79 #define TAG_TIMESTAMP_SHIFT 14 79 80 #define NAT_TIMESTAMP_SHIFT 24 /* ~1.144 Hz, ~874 msec per tick */ ··· 377 376 iowrite32(0, ipa->reg_virt + reg_offset(reg)); 378 377 379 378 reg = ipa_reg(ipa, QTIME_TIMESTAMP_CFG); 380 - /* Set DPL time stamp resolution to use Qtime (instead of 1 msec) */ 381 - val = reg_encode(reg, DPL_TIMESTAMP_LSB, DPL_TIMESTAMP_SHIFT); 382 - val |= reg_bit(reg, DPL_TIMESTAMP_SEL); 379 + if (ipa->version < IPA_VERSION_5_5) { 380 + /* Set DPL time stamp resolution to use Qtime (not 1 msec) */ 381 + val = reg_encode(reg, DPL_TIMESTAMP_LSB, DPL_TIMESTAMP_SHIFT); 382 + val |= reg_bit(reg, DPL_TIMESTAMP_SEL); 383 + } 383 384 /* Configure tag and NAT Qtime timestamp resolution as well */ 384 385 val = reg_encode(reg, TAG_TIMESTAMP_LSB, TAG_TIMESTAMP_SHIFT); 385 386 val = reg_encode(reg, NAT_TIMESTAMP_LSB, NAT_TIMESTAMP_SHIFT);
+1 -1
drivers/net/ipa/ipa_mem.c
··· 165 165 166 166 case IPA_MEM_AP_V4_FILTER: 167 167 case IPA_MEM_AP_V6_FILTER: 168 - if (version != IPA_VERSION_5_0) 168 + if (version < IPA_VERSION_5_0) 169 169 return false; 170 170 break; 171 171
+19 -13
drivers/net/ipa/ipa_reg.h
··· 277 277 278 278 /* QTIME_TIMESTAMP_CFG register */ 279 279 enum ipa_reg_qtime_timestamp_cfg_field_id { 280 - DPL_TIMESTAMP_LSB, 281 - DPL_TIMESTAMP_SEL, 280 + DPL_TIMESTAMP_LSB, /* Not IPA v5.5+ */ 281 + DPL_TIMESTAMP_SEL, /* Not IPA v5.5+ */ 282 282 TAG_TIMESTAMP_LSB, 283 283 NAT_TIMESTAMP_LSB, 284 284 }; ··· 329 329 CS_OFFLOAD_EN, 330 330 CS_METADATA_HDR_OFFSET, 331 331 CS_GEN_QMB_MASTER_SEL, 332 + PIPE_REPLICATE_EN, /* IPA v5.5+ */ 332 333 }; 333 334 334 335 /** enum ipa_cs_offload_en - ENDP_INIT_CFG register CS_OFFLOAD_EN field value */ ··· 388 387 DCPH_ENABLE, /* IPA v4.5+ */ 389 388 DEST_PIPE_INDEX, 390 389 BYTE_THRESHOLD, 391 - PIPE_REPLICATION_EN, 390 + PIPE_REPLICATION_EN, /* Not IPA v5.5+ */ 392 391 PAD_EN, 393 392 HDR_FTCH_DISABLE, /* IPA v4.5+ */ 394 393 DRBIP_ACL_ENABLE, /* IPA v4.9+ */ ··· 413 412 FORCE_CLOSE, 414 413 HARD_BYTE_LIMIT_EN, 415 414 AGGR_GRAN_SEL, 415 + AGGR_COAL_L2, /* IPA v5.5+ */ 416 416 }; 417 417 418 418 /** enum ipa_aggr_en - ENDP_INIT_AGGR register AGGR_EN field value */ ··· 587 585 * @IPA_IRQ_DRBIP_PKT_EXCEED_MAX_SIZE_EN: (Not currently used) 588 586 * @IPA_IRQ_DRBIP_DATA_SCTR_CFG_ERROR_EN: (Not currently used) 589 587 * @IPA_IRQ_DRBIP_IMM_CMD_NO_FLSH_HZRD_EN: (Not currently used) 588 + * @IPA_IRQ_ERROR_NON_FATAL: (Not currently used) 589 + * @IPA_IRQ_ERROR_FATAL: (Not currently used) 590 590 */ 591 591 enum ipa_irq_id { 592 - IPA_IRQ_BAD_SNOC_ACCESS = 0x0, 592 + IPA_IRQ_BAD_SNOC_ACCESS = 0x0, /* Not IPA v5.5+ */ 593 593 IPA_IRQ_EOT_COAL = 0x1, /* Not IPA v3.5+ */ 594 594 IPA_IRQ_UC_0 = 0x2, 595 595 IPA_IRQ_UC_1 = 0x3, ··· 600 596 IPA_IRQ_UC_IN_Q_NOT_EMPTY = 0x6, 601 597 IPA_IRQ_UC_RX_CMD_Q_NOT_FULL = 0x7, 602 598 IPA_IRQ_PROC_UC_ACK_Q_NOT_EMPTY = 0x8, 603 - IPA_IRQ_RX_ERR = 0x9, 604 - IPA_IRQ_DEAGGR_ERR = 0xa, 605 - IPA_IRQ_TX_ERR = 0xb, 606 - IPA_IRQ_STEP_MODE = 0xc, 607 - IPA_IRQ_PROC_ERR = 0xd, 599 + IPA_IRQ_RX_ERR = 0x9, /* Not IPA v5.5+ */ 600 + IPA_IRQ_DEAGGR_ERR = 0xa, /* Not IPA v5.5+ */ 601 + IPA_IRQ_TX_ERR = 0xb, /* Not IPA v5.5+ */ 602 + IPA_IRQ_STEP_MODE = 0xc, /* Not IPA v5.5+ */ 603 + IPA_IRQ_PROC_ERR = 0xd, /* Not IPA v5.5+ */ 608 604 IPA_IRQ_TX_SUSPEND = 0xe, 609 605 IPA_IRQ_TX_HOLB_DROP = 0xf, 610 606 IPA_IRQ_BAM_GSI_IDLE = 0x10, ··· 617 613 IPA_IRQ_GSI_EE = 0x17, 618 614 IPA_IRQ_GSI_IPA_IF_TLV_RCVD = 0x18, 619 615 IPA_IRQ_GSI_UC = 0x19, 620 - IPA_IRQ_TLV_LEN_MIN_DSM = 0x1a, /* IPA v4.5+ */ 621 - IPA_IRQ_DRBIP_PKT_EXCEED_MAX_SIZE_EN = 0x1b, /* IPA v4.9+ */ 622 - IPA_IRQ_DRBIP_DATA_SCTR_CFG_ERROR_EN = 0x1c, /* IPA v4.9+ */ 623 - IPA_IRQ_DRBIP_IMM_CMD_NO_FLSH_HZRD_EN = 0x1d, /* IPA v4.9+ */ 616 + IPA_IRQ_TLV_LEN_MIN_DSM = 0x1a, /* IPA v4.5-v5.2 */ 617 + IPA_IRQ_DRBIP_PKT_EXCEED_MAX_SIZE_EN = 0x1b, /* IPA v4.9-v5.2 */ 618 + IPA_IRQ_DRBIP_DATA_SCTR_CFG_ERROR_EN = 0x1c, /* IPA v4.9-v5.2 */ 619 + IPA_IRQ_DRBIP_IMM_CMD_NO_FLSH_HZRD_EN = 0x1d, /* IPA v4.9-v5.2 */ 620 + IPA_IRQ_ERROR_NON_FATAL = 0x1e, /* IPA v5.5+ */ 621 + IPA_IRQ_ERROR_FATAL = 0x1f, /* IPA v5.5+ */ 624 622 IPA_IRQ_COUNT, /* Last; not an id */ 625 623 }; 626 624