Skip to content

Commit 5b6cd69

Browse files
Alex Elderkuba-moo
authored andcommitted
net: ipa: update IPA registers for IPA v4.5
Update "ipa_reg.h" so that register definitions support IPA hardware version 4.5, in addition to versions 3.5.1 through v4.2. Most of the register definitions are the same, but in some cases fields are added, changed, or eliminated. Updates for a few IPA v4.5 registers are more complex, and adding those definition will be deferred to separate patches. This patch only updates the register offset and field definitions, and adds informational comments. The only code change avoids accessing the backward compatibility register for IPA version 4.5 in ipa_hardware_config(). Other IPA v4.5-specific code changes will come later. Signed-off-by: Alex Elder <[email protected]> Signed-off-by: Jakub Kicinski <[email protected]>
1 parent 9f84819 commit 5b6cd69

File tree

3 files changed

+44
-8
lines changed

3 files changed

+44
-8
lines changed

drivers/net/ipa/ipa_main.c

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -310,14 +310,17 @@ static void ipa_hardware_dcd_deconfig(struct ipa *ipa)
310310
*/
311311
static void ipa_hardware_config(struct ipa *ipa)
312312
{
313+
enum ipa_version version = ipa->version;
313314
u32 granularity;
314315
u32 val;
315316

316-
/* Fill in backward-compatibility register, based on version */
317-
val = ipa_reg_bcr_val(ipa->version);
318-
iowrite32(val, ipa->reg_virt + IPA_REG_BCR_OFFSET);
317+
/* IPA v4.5 has no backward compatibility register */
318+
if (version < IPA_VERSION_4_5) {
319+
val = ipa_reg_bcr_val(version);
320+
iowrite32(val, ipa->reg_virt + IPA_REG_BCR_OFFSET);
321+
}
319322

320-
if (ipa->version != IPA_VERSION_3_5_1) {
323+
if (version != IPA_VERSION_3_5_1) {
321324
/* Enable open global clocks (hardware workaround) */
322325
val = GLOBAL_FMASK;
323326
val |= GLOBAL_2X_CLK_FMASK;
@@ -340,8 +343,8 @@ static void ipa_hardware_config(struct ipa *ipa)
340343
iowrite32(val, ipa->reg_virt + IPA_REG_COUNTER_CFG_OFFSET);
341344

342345
/* IPA v4.2 does not support hashed tables, so disable them */
343-
if (ipa->version == IPA_VERSION_4_2) {
344-
u32 offset = ipa_reg_filt_rout_hash_en_offset(ipa->version);
346+
if (version == IPA_VERSION_4_2) {
347+
u32 offset = ipa_reg_filt_rout_hash_en_offset(version);
345348

346349
iowrite32(0, ipa->reg_virt + offset);
347350
}

drivers/net/ipa/ipa_reg.h

Lines changed: 34 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -65,12 +65,13 @@ struct ipa;
6565
* of valid bits for the register.
6666
*/
6767

68-
/* The next field is not supported for IPA v4.1 */
6968
#define IPA_REG_COMP_CFG_OFFSET 0x0000003c
69+
/* The next field is not supported for IPA v4.1 */
7070
#define ENABLE_FMASK GENMASK(0, 0)
7171
#define GSI_SNOC_BYPASS_DIS_FMASK GENMASK(1, 1)
7272
#define GEN_QMB_0_SNOC_BYPASS_DIS_FMASK GENMASK(2, 2)
7373
#define GEN_QMB_1_SNOC_BYPASS_DIS_FMASK GENMASK(3, 3)
74+
/* The next field is not present for IPA v4.5 */
7475
#define IPA_DCMP_FAST_CLK_EN_FMASK GENMASK(4, 4)
7576
/* The remaining fields are not present for IPA v3.5.1 */
7677
#define IPA_QMB_SELECT_CONS_EN_FMASK GENMASK(5, 5)
@@ -86,6 +87,8 @@ struct ipa;
8687
#define GSI_MULTI_AXI_MASTERS_DIS_FMASK GENMASK(15, 15)
8788
#define IPA_QMB_SELECT_GLOBAL_EN_FMASK GENMASK(16, 16)
8889
#define IPA_ATOMIC_FETCHER_ARB_LOCK_DIS_FMASK GENMASK(20, 17)
90+
/* The next field is present for IPA v4.5 */
91+
#define IPA_FULL_FLUSH_WAIT_RSC_CLOSE_EN_FMASK GENMASK(21, 21)
8992

9093
#define IPA_REG_CLKON_CFG_OFFSET 0x00000044
9194
#define RX_FMASK GENMASK(0, 0)
@@ -105,6 +108,7 @@ struct ipa;
105108
#define ACK_MNGR_FMASK GENMASK(14, 14)
106109
#define D_DCPH_FMASK GENMASK(15, 15)
107110
#define H_DCPH_FMASK GENMASK(16, 16)
111+
/* The next field is not present for IPA v4.5 */
108112
#define DCMP_FMASK GENMASK(17, 17)
109113
#define NTF_TX_CMDQS_FMASK GENMASK(18, 18)
110114
#define TX_0_FMASK GENMASK(19, 19)
@@ -119,6 +123,8 @@ struct ipa;
119123
#define GSI_IF_FMASK GENMASK(27, 27)
120124
#define GLOBAL_FMASK GENMASK(28, 28)
121125
#define GLOBAL_2X_CLK_FMASK GENMASK(29, 29)
126+
/* The next field is present for IPA v4.5 */
127+
#define DPL_FIFO_FMASK GENMASK(30, 30)
122128

123129
#define IPA_REG_ROUTE_OFFSET 0x00000048
124130
#define ROUTE_DIS_FMASK GENMASK(0, 0)
@@ -174,6 +180,7 @@ static inline u32 ipa_reg_state_aggr_active_offset(enum ipa_version version)
174180
return 0x000000b4;
175181
}
176182

183+
/* The next register is not present for IPA v4.5 */
177184
#define IPA_REG_BCR_OFFSET 0x000001d0
178185
/* The next two fields are not present for IPA v4.2 */
179186
#define BCR_CMDQ_L_LACK_ONE_ENTRY_FMASK GENMASK(0, 0)
@@ -205,6 +212,8 @@ static inline u32 ipa_reg_bcr_val(enum ipa_version version)
205212
BCR_HOLB_DROP_L2_IRQ_FMASK |
206213
BCR_DUAL_TX_FMASK;
207214

215+
/* assert(version != IPA_VERSION_4_5); */
216+
208217
return 0x00000000;
209218
}
210219

@@ -241,6 +250,8 @@ static inline u32 ipa_aggr_granularity_val(u32 usec)
241250
#define DMAW_MAX_BEATS_256_DIS_FMASK GENMASK(11, 11)
242251
#define PA_MASK_EN_FMASK GENMASK(12, 12)
243252
#define PREFETCH_ALMOST_EMPTY_SIZE_TX1_FMASK GENMASK(16, 13)
253+
/* The next field is present for IPA v4.5 */
254+
#define DUAL_TX_ENABLE_FMASK GENMASK(17, 17)
244255
/* The next two fields are present for IPA v4.2 only */
245256
#define SSPND_PA_NO_START_STATE_FMASK GENMASK(18, 18)
246257
#define SSPND_PA_NO_BQ_STATE_FMASK GENMASK(19, 19)
@@ -253,7 +264,7 @@ static inline u32 ipa_aggr_granularity_val(u32 usec)
253264

254265
static inline u32 ipa_reg_idle_indication_cfg_offset(enum ipa_version version)
255266
{
256-
if (version == IPA_VERSION_4_2)
267+
if (version >= IPA_VERSION_4_2)
257268
return 0x00000240;
258269

259270
return 0x00000220;
@@ -303,12 +314,14 @@ static inline u32 ipa_resource_group_dst_count(enum ipa_version version)
303314
(0x00000400 + 0x0020 * (rt))
304315
#define IPA_REG_SRC_RSRC_GRP_23_RSRC_TYPE_N_OFFSET(rt) \
305316
(0x00000404 + 0x0020 * (rt))
317+
/* The next register is only present for IPA v4.5 */
306318
#define IPA_REG_SRC_RSRC_GRP_45_RSRC_TYPE_N_OFFSET(rt) \
307319
(0x00000408 + 0x0020 * (rt))
308320
#define IPA_REG_DST_RSRC_GRP_01_RSRC_TYPE_N_OFFSET(rt) \
309321
(0x00000500 + 0x0020 * (rt))
310322
#define IPA_REG_DST_RSRC_GRP_23_RSRC_TYPE_N_OFFSET(rt) \
311323
(0x00000504 + 0x0020 * (rt))
324+
/* The next register is only present for IPA v4.5 */
312325
#define IPA_REG_DST_RSRC_GRP_45_RSRC_TYPE_N_OFFSET(rt) \
313326
(0x00000508 + 0x0020 * (rt))
314327
/* The next four fields are used for all resource group registers */
@@ -348,7 +361,11 @@ enum ipa_cs_offload_en {
348361
#define HDR_OFST_PKT_SIZE_FMASK GENMASK(25, 20)
349362
#define HDR_A5_MUX_FMASK GENMASK(26, 26)
350363
#define HDR_LEN_INC_DEAGG_HDR_FMASK GENMASK(27, 27)
364+
/* The next field is not present for IPA v4.5 */
351365
#define HDR_METADATA_REG_VALID_FMASK GENMASK(28, 28)
366+
/* The next two fields are present for IPA v4.5 */
367+
#define HDR_LEN_MSB_FMASK GENMASK(29, 28)
368+
#define HDR_OFST_METADATA_MSB_FMASK GENMASK(31, 30)
352369

353370
#define IPA_REG_ENDP_INIT_HDR_EXT_N_OFFSET(ep) \
354371
(0x00000814 + 0x0070 * (ep))
@@ -358,6 +375,10 @@ enum ipa_cs_offload_en {
358375
#define HDR_PAYLOAD_LEN_INC_PADDING_FMASK GENMASK(3, 3)
359376
#define HDR_TOTAL_LEN_OR_PAD_OFFSET_FMASK GENMASK(9, 4)
360377
#define HDR_PAD_TO_ALIGNMENT_FMASK GENMASK(13, 10)
378+
/* The next three fields are present for IPA v4.5 */
379+
#define HDR_TOTAL_LEN_OR_PAD_OFFSET_MSB_FMASK GENMASK(17, 16)
380+
#define HDR_OFST_PKT_SIZE_MSB_FMASK GENMASK(19, 18)
381+
#define HDR_ADDITIONAL_CONST_LEN_MSB_FMASK GENMASK(21, 20)
361382

362383
/* Valid only for RX (IPA producer) endpoints */
363384
#define IPA_REG_ENDP_INIT_HDR_METADATA_MASK_N_OFFSET(rxep) \
@@ -367,10 +388,13 @@ enum ipa_cs_offload_en {
367388
#define IPA_REG_ENDP_INIT_MODE_N_OFFSET(txep) \
368389
(0x00000820 + 0x0070 * (txep))
369390
#define MODE_FMASK GENMASK(2, 0)
391+
/* The next field is present for IPA v4.5 */
392+
#define DCPH_ENABLE_FMASK GENMASK(3, 3)
370393
#define DEST_PIPE_INDEX_FMASK GENMASK(8, 4)
371394
#define BYTE_THRESHOLD_FMASK GENMASK(27, 12)
372395
#define PIPE_REPLICATION_EN_FMASK GENMASK(28, 28)
373396
#define PAD_EN_FMASK GENMASK(29, 29)
397+
/* The next register is not present for IPA v4.5 */
374398
#define HDR_FTCH_DISABLE_FMASK GENMASK(30, 30)
375399

376400
/** enum ipa_mode - mode field in ENDP_INIT_MODE_N */
@@ -421,6 +445,9 @@ enum ipa_aggr_type {
421445
/* The next two fields are present for IPA v4.2 only */
422446
#define BASE_VALUE_FMASK GENMASK(4, 0)
423447
#define SCALE_FMASK GENMASK(12, 8)
448+
/* The next two fields are present for IPA v4.5 */
449+
#define TIME_LIMIT_FMASK GENMASK(4, 0)
450+
#define GRAN_SEL_FMASK GENMASK(8, 8)
424451

425452
/* Valid only for TX (IPA consumer) endpoints */
426453
#define IPA_REG_ENDP_INIT_DEAGGR_N_OFFSET(txep) \
@@ -440,6 +467,8 @@ static inline u32 rsrc_grp_encoded(enum ipa_version version, u32 rsrc_grp)
440467
switch (version) {
441468
case IPA_VERSION_4_2:
442469
return u32_encode_bits(rsrc_grp, GENMASK(0, 0));
470+
case IPA_VERSION_4_5:
471+
return u32_encode_bits(rsrc_grp, GENMASK(2, 0));
443472
default:
444473
return u32_encode_bits(rsrc_grp, GENMASK(1, 0));
445474
}
@@ -476,6 +505,7 @@ enum ipa_seq_type {
476505
(0x00000840 + 0x0070 * (ep))
477506
#define STATUS_EN_FMASK GENMASK(0, 0)
478507
#define STATUS_ENDP_FMASK GENMASK(5, 1)
508+
/* The next field is not present for IPA v4.5 */
479509
#define STATUS_LOCATION_FMASK GENMASK(8, 8)
480510
/* The next field is not present for IPA v3.5.1 */
481511
#define STATUS_PKT_SUPPRESS_FMASK GENMASK(9, 9)
@@ -550,6 +580,8 @@ enum ipa_irq_id {
550580
IPA_IRQ_GSI_EE = 0x17,
551581
IPA_IRQ_GSI_IPA_IF_TLV_RCVD = 0x18,
552582
IPA_IRQ_GSI_UC = 0x19,
583+
/* The next bit is present for IPA v4.5 */
584+
IPA_IRQ_TLV_LEN_MIN_DSM = 0x1a,
553585
IPA_IRQ_COUNT, /* Last; not an id */
554586
};
555587

drivers/net/ipa/ipa_version.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ enum ipa_version {
1818
IPA_VERSION_4_0, /* GSI version 2.0 */
1919
IPA_VERSION_4_1, /* GSI version 2.1 */
2020
IPA_VERSION_4_2, /* GSI version 2.2 */
21+
IPA_VERSION_4_5, /* GSI version 2.5 */
2122
};
2223

2324
#endif /* _IPA_VERSION_H_ */

0 commit comments

Comments
 (0)