Skip to content

Commit b00e190

Browse files
Alex Elderdavem330
authored andcommitted
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>
1 parent b134b10 commit b00e190

File tree

3 files changed

+26
-17
lines changed

3 files changed

+26
-17
lines changed

drivers/net/ipa/ipa_main.c

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,7 @@
7474
#define IPA_PAS_ID 15
7575

7676
/* Shift of 19.2 MHz timestamp to achieve lower resolution timestamps */
77+
/* IPA v5.5+ does not specify Qtime timestamp config for DPL */
7778
#define DPL_TIMESTAMP_SHIFT 14 /* ~1.172 kHz, ~853 usec per tick */
7879
#define TAG_TIMESTAMP_SHIFT 14
7980
#define NAT_TIMESTAMP_SHIFT 24 /* ~1.144 Hz, ~874 msec per tick */
@@ -376,9 +377,11 @@ static void ipa_qtime_config(struct ipa *ipa)
376377
iowrite32(0, ipa->reg_virt + reg_offset(reg));
377378

378379
reg = ipa_reg(ipa, QTIME_TIMESTAMP_CFG);
379-
/* Set DPL time stamp resolution to use Qtime (instead of 1 msec) */
380-
val = reg_encode(reg, DPL_TIMESTAMP_LSB, DPL_TIMESTAMP_SHIFT);
381-
val |= reg_bit(reg, DPL_TIMESTAMP_SEL);
380+
if (ipa->version < IPA_VERSION_5_5) {
381+
/* Set DPL time stamp resolution to use Qtime (not 1 msec) */
382+
val = reg_encode(reg, DPL_TIMESTAMP_LSB, DPL_TIMESTAMP_SHIFT);
383+
val |= reg_bit(reg, DPL_TIMESTAMP_SEL);
384+
}
382385
/* Configure tag and NAT Qtime timestamp resolution as well */
383386
val = reg_encode(reg, TAG_TIMESTAMP_LSB, TAG_TIMESTAMP_SHIFT);
384387
val = reg_encode(reg, NAT_TIMESTAMP_LSB, NAT_TIMESTAMP_SHIFT);

drivers/net/ipa/ipa_mem.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -165,7 +165,7 @@ static bool ipa_mem_id_valid(struct ipa *ipa, enum ipa_mem_id mem_id)
165165

166166
case IPA_MEM_AP_V4_FILTER:
167167
case IPA_MEM_AP_V6_FILTER:
168-
if (version != IPA_VERSION_5_0)
168+
if (version < IPA_VERSION_5_0)
169169
return false;
170170
break;
171171

drivers/net/ipa/ipa_reg.h

Lines changed: 19 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -277,8 +277,8 @@ enum ipa_reg_idle_indication_cfg_field_id {
277277

278278
/* QTIME_TIMESTAMP_CFG register */
279279
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+ */
282282
TAG_TIMESTAMP_LSB,
283283
NAT_TIMESTAMP_LSB,
284284
};
@@ -329,6 +329,7 @@ enum ipa_reg_endp_init_cfg_field_id {
329329
CS_OFFLOAD_EN,
330330
CS_METADATA_HDR_OFFSET,
331331
CS_GEN_QMB_MASTER_SEL,
332+
PIPE_REPLICATE_EN, /* IPA v5.5+ */
332333
};
333334

334335
/** enum ipa_cs_offload_en - ENDP_INIT_CFG register CS_OFFLOAD_EN field value */
@@ -387,7 +388,7 @@ enum ipa_reg_endp_init_mode_field_id {
387388
DCPH_ENABLE, /* IPA v4.5+ */
388389
DEST_PIPE_INDEX,
389390
BYTE_THRESHOLD,
390-
PIPE_REPLICATION_EN,
391+
PIPE_REPLICATION_EN, /* Not IPA v5.5+ */
391392
PAD_EN,
392393
HDR_FTCH_DISABLE, /* IPA v4.5+ */
393394
DRBIP_ACL_ENABLE, /* IPA v4.9+ */
@@ -412,6 +413,7 @@ enum ipa_reg_endp_init_aggr_field_id {
412413
FORCE_CLOSE,
413414
HARD_BYTE_LIMIT_EN,
414415
AGGR_GRAN_SEL,
416+
AGGR_COAL_L2, /* IPA v5.5+ */
415417
};
416418

417419
/** enum ipa_aggr_en - ENDP_INIT_AGGR register AGGR_EN field value */
@@ -585,9 +587,11 @@ enum ipa_reg_endp_cache_cfg_field_id {
585587
* @IPA_IRQ_DRBIP_PKT_EXCEED_MAX_SIZE_EN: (Not currently used)
586588
* @IPA_IRQ_DRBIP_DATA_SCTR_CFG_ERROR_EN: (Not currently used)
587589
* @IPA_IRQ_DRBIP_IMM_CMD_NO_FLSH_HZRD_EN: (Not currently used)
590+
* @IPA_IRQ_ERROR_NON_FATAL: (Not currently used)
591+
* @IPA_IRQ_ERROR_FATAL: (Not currently used)
588592
*/
589593
enum ipa_irq_id {
590-
IPA_IRQ_BAD_SNOC_ACCESS = 0x0,
594+
IPA_IRQ_BAD_SNOC_ACCESS = 0x0, /* Not IPA v5.5+ */
591595
IPA_IRQ_EOT_COAL = 0x1, /* Not IPA v3.5+ */
592596
IPA_IRQ_UC_0 = 0x2,
593597
IPA_IRQ_UC_1 = 0x3,
@@ -596,11 +600,11 @@ enum ipa_irq_id {
596600
IPA_IRQ_UC_IN_Q_NOT_EMPTY = 0x6,
597601
IPA_IRQ_UC_RX_CMD_Q_NOT_FULL = 0x7,
598602
IPA_IRQ_PROC_UC_ACK_Q_NOT_EMPTY = 0x8,
599-
IPA_IRQ_RX_ERR = 0x9,
600-
IPA_IRQ_DEAGGR_ERR = 0xa,
601-
IPA_IRQ_TX_ERR = 0xb,
602-
IPA_IRQ_STEP_MODE = 0xc,
603-
IPA_IRQ_PROC_ERR = 0xd,
603+
IPA_IRQ_RX_ERR = 0x9, /* Not IPA v5.5+ */
604+
IPA_IRQ_DEAGGR_ERR = 0xa, /* Not IPA v5.5+ */
605+
IPA_IRQ_TX_ERR = 0xb, /* Not IPA v5.5+ */
606+
IPA_IRQ_STEP_MODE = 0xc, /* Not IPA v5.5+ */
607+
IPA_IRQ_PROC_ERR = 0xd, /* Not IPA v5.5+ */
604608
IPA_IRQ_TX_SUSPEND = 0xe,
605609
IPA_IRQ_TX_HOLB_DROP = 0xf,
606610
IPA_IRQ_BAM_GSI_IDLE = 0x10,
@@ -613,10 +617,12 @@ enum ipa_irq_id {
613617
IPA_IRQ_GSI_EE = 0x17,
614618
IPA_IRQ_GSI_IPA_IF_TLV_RCVD = 0x18,
615619
IPA_IRQ_GSI_UC = 0x19,
616-
IPA_IRQ_TLV_LEN_MIN_DSM = 0x1a, /* IPA v4.5+ */
617-
IPA_IRQ_DRBIP_PKT_EXCEED_MAX_SIZE_EN = 0x1b, /* IPA v4.9+ */
618-
IPA_IRQ_DRBIP_DATA_SCTR_CFG_ERROR_EN = 0x1c, /* IPA v4.9+ */
619-
IPA_IRQ_DRBIP_IMM_CMD_NO_FLSH_HZRD_EN = 0x1d, /* IPA v4.9+ */
620+
IPA_IRQ_TLV_LEN_MIN_DSM = 0x1a, /* IPA v4.5-v5.2 */
621+
IPA_IRQ_DRBIP_PKT_EXCEED_MAX_SIZE_EN = 0x1b, /* IPA v4.9-v5.2 */
622+
IPA_IRQ_DRBIP_DATA_SCTR_CFG_ERROR_EN = 0x1c, /* IPA v4.9-v5.2 */
623+
IPA_IRQ_DRBIP_IMM_CMD_NO_FLSH_HZRD_EN = 0x1d, /* IPA v4.9-v5.2 */
624+
IPA_IRQ_ERROR_NON_FATAL = 0x1e, /* IPA v5.5+ */
625+
IPA_IRQ_ERROR_FATAL = 0x1f, /* IPA v5.5+ */
620626
IPA_IRQ_COUNT, /* Last; not an id */
621627
};
622628

0 commit comments

Comments
 (0)