Skip to content

Commit edc6158

Browse files
Alex Elderkuba-moo
authored andcommitted
net: ipa: define fields for event-ring related registers
Define field IDs for the EV_CH_E_CNTXT_0 and EV_CH_E_CNTXT_8 GSI registers, and populate the register definition files accordingly. Use the reg_*() functions to access field values for those regiters, and get rid of the previous field definition constants. The remaining EV_CH_E_CNTXT_* registers are written with full 32-bit values (and have no fields). Signed-off-by: Alex Elder <[email protected]> Signed-off-by: Jakub Kicinski <[email protected]>
1 parent 330ce9d commit edc6158

File tree

7 files changed

+122
-40
lines changed

7 files changed

+122
-40
lines changed

drivers/net/ipa/gsi.c

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -163,9 +163,6 @@ static void gsi_validate_build(void)
163163
* ensure the elements themselves meet the requirement.
164164
*/
165165
BUILD_BUG_ON(!is_power_of_2(GSI_RING_ELEMENT_SIZE));
166-
167-
/* The event ring element size must fit in this field */
168-
BUILD_BUG_ON(GSI_RING_ELEMENT_SIZE > field_max(EV_ELEMENT_SIZE_FMASK));
169166
}
170167

171168
/* Return the channel id associated with a given channel */
@@ -418,7 +415,7 @@ gsi_evt_ring_state(struct gsi *gsi, u32 evt_ring_id)
418415

419416
val = ioread32(gsi->virt + reg_n_offset(reg, evt_ring_id));
420417

421-
return u32_get_bits(val, EV_CHSTATE_FMASK);
418+
return reg_decode(reg, EV_CHSTATE, val);
422419
}
423420

424421
/* Issue an event ring command and wait for it to complete */
@@ -739,9 +736,10 @@ static void gsi_evt_ring_program(struct gsi *gsi, u32 evt_ring_id)
739736

740737
reg = gsi_reg(gsi, EV_CH_E_CNTXT_0);
741738
/* We program all event rings as GPI type/protocol */
742-
val = u32_encode_bits(GSI_CHANNEL_TYPE_GPI, EV_CHTYPE_FMASK);
743-
val |= EV_INTYPE_FMASK;
744-
val |= u32_encode_bits(GSI_RING_ELEMENT_SIZE, EV_ELEMENT_SIZE_FMASK);
739+
val = reg_encode(reg, EV_CHTYPE, GSI_CHANNEL_TYPE_GPI);
740+
/* EV_EE field is 0 (GSI_EE_AP) */
741+
val |= reg_bit(reg, EV_INTYPE);
742+
val |= reg_encode(reg, EV_ELEMENT_SIZE, GSI_RING_ELEMENT_SIZE);
745743
iowrite32(val, gsi->virt + reg_n_offset(reg, evt_ring_id));
746744

747745
reg = gsi_reg(gsi, EV_CH_E_CNTXT_1);
@@ -763,11 +761,12 @@ static void gsi_evt_ring_program(struct gsi *gsi, u32 evt_ring_id)
763761

764762
/* Enable interrupt moderation by setting the moderation delay */
765763
reg = gsi_reg(gsi, EV_CH_E_CNTXT_8);
766-
val = u32_encode_bits(GSI_EVT_RING_INT_MODT, MODT_FMASK);
767-
val |= u32_encode_bits(1, MODC_FMASK); /* comes from channel */
764+
val = reg_encode(reg, EV_MODT, GSI_EVT_RING_INT_MODT);
765+
val = reg_encode(reg, EV_MODC, 1); /* comes from channel */
766+
/* EV_MOD_CNT is 0 (no counter-based interrupt coalescing) */
768767
iowrite32(val, gsi->virt + reg_n_offset(reg, evt_ring_id));
769768

770-
/* No MSI write data, and MSI address high and low address is 0 */
769+
/* No MSI write data, and MSI high and low address is 0 */
771770
reg = gsi_reg(gsi, EV_CH_E_CNTXT_9);
772771
iowrite32(0, gsi->virt + reg_n_offset(reg, evt_ring_id));
773772

drivers/net/ipa/gsi_reg.h

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -146,18 +146,21 @@ enum gsi_prefetch_mode {
146146
};
147147

148148
/* EV_CH_E_CNTXT_0 register */
149-
/* enum gsi_channel_type defines EV_CHTYPE field values in EV_CH_E_CNTXT_0 */
150-
#define EV_CHTYPE_FMASK GENMASK(3, 0)
151-
#define EV_EE_FMASK GENMASK(7, 4)
152-
#define EV_EVCHID_FMASK GENMASK(15, 8)
153-
#define EV_INTYPE_FMASK GENMASK(16, 16)
154-
#define EV_CHSTATE_FMASK GENMASK(23, 20)
155-
#define EV_ELEMENT_SIZE_FMASK GENMASK(31, 24)
149+
enum gsi_reg_ch_c_ev_ch_e_cntxt_0_field_id {
150+
EV_CHTYPE, /* enum gsi_channel_type */
151+
EV_EE, /* enum gsi_ee_id; always GSI_EE_AP for us */
152+
EV_EVCHID,
153+
EV_INTYPE,
154+
EV_CHSTATE,
155+
EV_ELEMENT_SIZE,
156+
};
156157

157158
/* EV_CH_E_CNTXT_8 register */
158-
#define MODT_FMASK GENMASK(15, 0)
159-
#define MODC_FMASK GENMASK(23, 16)
160-
#define MOD_CNT_FMASK GENMASK(31, 24)
159+
enum gsi_reg_ch_c_ev_ch_e_cntxt_8_field_id {
160+
EV_MODT,
161+
EV_MODC,
162+
EV_MOD_CNT,
163+
};
161164

162165
/* GSI_STATUS register */
163166
#define ENABLED_FMASK GENMASK(0, 0)

drivers/net/ipa/reg/gsi_reg-v3.1.c

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -71,8 +71,18 @@ REG_STRIDE(CH_C_SCRATCH_2, ch_c_scratch_2,
7171
REG_STRIDE(CH_C_SCRATCH_3, ch_c_scratch_3,
7272
0x0001c06c + 0x4000 * GSI_EE_AP, 0x80);
7373

74-
REG_STRIDE(EV_CH_E_CNTXT_0, ev_ch_e_cntxt_0,
75-
0x0001d000 + 0x4000 * GSI_EE_AP, 0x80);
74+
static const u32 reg_ev_ch_e_cntxt_0_fmask[] = {
75+
[EV_CHTYPE] = GENMASK(3, 0),
76+
[EV_EE] = GENMASK(7, 4),
77+
[EV_EVCHID] = GENMASK(15, 8),
78+
[EV_INTYPE] = BIT(16),
79+
/* Bits 17-19 reserved */
80+
[EV_CHSTATE] = GENMASK(23, 20),
81+
[EV_ELEMENT_SIZE] = GENMASK(31, 24),
82+
};
83+
84+
REG_STRIDE_FIELDS(EV_CH_E_CNTXT_0, ev_ch_e_cntxt_0,
85+
0x0001d000 + 0x4000 * GSI_EE_AP, 0x80);
7686

7787
REG_STRIDE(EV_CH_E_CNTXT_1, ev_ch_e_cntxt_1,
7888
0x0001d004 + 0x4000 * GSI_EE_AP, 0x80);
@@ -86,8 +96,14 @@ REG_STRIDE(EV_CH_E_CNTXT_3, ev_ch_e_cntxt_3,
8696
REG_STRIDE(EV_CH_E_CNTXT_4, ev_ch_e_cntxt_4,
8797
0x0001d010 + 0x4000 * GSI_EE_AP, 0x80);
8898

89-
REG_STRIDE(EV_CH_E_CNTXT_8, ev_ch_e_cntxt_8,
90-
0x0001d020 + 0x4000 * GSI_EE_AP, 0x80);
99+
static const u32 reg_ev_ch_e_cntxt_8_fmask[] = {
100+
[EV_MODT] = GENMASK(15, 0),
101+
[EV_MODC] = GENMASK(23, 16),
102+
[EV_MOD_CNT] = GENMASK(31, 24),
103+
};
104+
105+
REG_STRIDE_FIELDS(EV_CH_E_CNTXT_8, ev_ch_e_cntxt_8,
106+
0x0001d020 + 0x4000 * GSI_EE_AP, 0x80);
91107

92108
REG_STRIDE(EV_CH_E_CNTXT_9, ev_ch_e_cntxt_9,
93109
0x0001d024 + 0x4000 * GSI_EE_AP, 0x80);

drivers/net/ipa/reg/gsi_reg-v3.5.1.c

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -71,8 +71,18 @@ REG_STRIDE(CH_C_SCRATCH_2, ch_c_scratch_2,
7171
REG_STRIDE(CH_C_SCRATCH_3, ch_c_scratch_3,
7272
0x0001c06c + 0x4000 * GSI_EE_AP, 0x80);
7373

74-
REG_STRIDE(EV_CH_E_CNTXT_0, ev_ch_e_cntxt_0,
75-
0x0001d000 + 0x4000 * GSI_EE_AP, 0x80);
74+
static const u32 reg_ev_ch_e_cntxt_0_fmask[] = {
75+
[EV_CHTYPE] = GENMASK(3, 0),
76+
[EV_EE] = GENMASK(7, 4),
77+
[EV_EVCHID] = GENMASK(15, 8),
78+
[EV_INTYPE] = BIT(16),
79+
/* Bits 17-19 reserved */
80+
[EV_CHSTATE] = GENMASK(23, 20),
81+
[EV_ELEMENT_SIZE] = GENMASK(31, 24),
82+
};
83+
84+
REG_STRIDE_FIELDS(EV_CH_E_CNTXT_0, ev_ch_e_cntxt_0,
85+
0x0001d000 + 0x4000 * GSI_EE_AP, 0x80);
7686

7787
REG_STRIDE(EV_CH_E_CNTXT_1, ev_ch_e_cntxt_1,
7888
0x0001d004 + 0x4000 * GSI_EE_AP, 0x80);
@@ -86,8 +96,14 @@ REG_STRIDE(EV_CH_E_CNTXT_3, ev_ch_e_cntxt_3,
8696
REG_STRIDE(EV_CH_E_CNTXT_4, ev_ch_e_cntxt_4,
8797
0x0001d010 + 0x4000 * GSI_EE_AP, 0x80);
8898

89-
REG_STRIDE(EV_CH_E_CNTXT_8, ev_ch_e_cntxt_8,
90-
0x0001d020 + 0x4000 * GSI_EE_AP, 0x80);
99+
static const u32 reg_ev_ch_e_cntxt_8_fmask[] = {
100+
[EV_MODT] = GENMASK(15, 0),
101+
[EV_MODC] = GENMASK(23, 16),
102+
[EV_MOD_CNT] = GENMASK(31, 24),
103+
};
104+
105+
REG_STRIDE_FIELDS(EV_CH_E_CNTXT_8, ev_ch_e_cntxt_8,
106+
0x0001d020 + 0x4000 * GSI_EE_AP, 0x80);
91107

92108
REG_STRIDE(EV_CH_E_CNTXT_9, ev_ch_e_cntxt_9,
93109
0x0001d024 + 0x4000 * GSI_EE_AP, 0x80);

drivers/net/ipa/reg/gsi_reg-v4.0.c

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -72,8 +72,18 @@ REG_STRIDE(CH_C_SCRATCH_2, ch_c_scratch_2,
7272
REG_STRIDE(CH_C_SCRATCH_3, ch_c_scratch_3,
7373
0x0001c06c + 0x4000 * GSI_EE_AP, 0x80);
7474

75-
REG_STRIDE(EV_CH_E_CNTXT_0, ev_ch_e_cntxt_0,
76-
0x0001d000 + 0x4000 * GSI_EE_AP, 0x80);
75+
static const u32 reg_ev_ch_e_cntxt_0_fmask[] = {
76+
[EV_CHTYPE] = GENMASK(3, 0),
77+
[EV_EE] = GENMASK(7, 4),
78+
[EV_EVCHID] = GENMASK(15, 8),
79+
[EV_INTYPE] = BIT(16),
80+
/* Bits 17-19 reserved */
81+
[EV_CHSTATE] = GENMASK(23, 20),
82+
[EV_ELEMENT_SIZE] = GENMASK(31, 24),
83+
};
84+
85+
REG_STRIDE_FIELDS(EV_CH_E_CNTXT_0, ev_ch_e_cntxt_0,
86+
0x0001d000 + 0x4000 * GSI_EE_AP, 0x80);
7787

7888
REG_STRIDE(EV_CH_E_CNTXT_1, ev_ch_e_cntxt_1,
7989
0x0001d004 + 0x4000 * GSI_EE_AP, 0x80);
@@ -87,8 +97,14 @@ REG_STRIDE(EV_CH_E_CNTXT_3, ev_ch_e_cntxt_3,
8797
REG_STRIDE(EV_CH_E_CNTXT_4, ev_ch_e_cntxt_4,
8898
0x0001d010 + 0x4000 * GSI_EE_AP, 0x80);
8999

90-
REG_STRIDE(EV_CH_E_CNTXT_8, ev_ch_e_cntxt_8,
91-
0x0001d020 + 0x4000 * GSI_EE_AP, 0x80);
100+
static const u32 reg_ev_ch_e_cntxt_8_fmask[] = {
101+
[EV_MODT] = GENMASK(15, 0),
102+
[EV_MODC] = GENMASK(23, 16),
103+
[EV_MOD_CNT] = GENMASK(31, 24),
104+
};
105+
106+
REG_STRIDE_FIELDS(EV_CH_E_CNTXT_8, ev_ch_e_cntxt_8,
107+
0x0001d020 + 0x4000 * GSI_EE_AP, 0x80);
92108

93109
REG_STRIDE(EV_CH_E_CNTXT_9, ev_ch_e_cntxt_9,
94110
0x0001d024 + 0x4000 * GSI_EE_AP, 0x80);

drivers/net/ipa/reg/gsi_reg-v4.5.c

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -74,8 +74,18 @@ REG_STRIDE(CH_C_SCRATCH_2, ch_c_scratch_2,
7474
REG_STRIDE(CH_C_SCRATCH_3, ch_c_scratch_3,
7575
0x0001c06c + 0x4000 * GSI_EE_AP, 0x80);
7676

77-
REG_STRIDE(EV_CH_E_CNTXT_0, ev_ch_e_cntxt_0,
78-
0x0001d000 + 0x4000 * GSI_EE_AP, 0x80);
77+
static const u32 reg_ev_ch_e_cntxt_0_fmask[] = {
78+
[EV_CHTYPE] = GENMASK(3, 0),
79+
[EV_EE] = GENMASK(7, 4),
80+
[EV_EVCHID] = GENMASK(15, 8),
81+
[EV_INTYPE] = BIT(16),
82+
/* Bits 17-19 reserved */
83+
[EV_CHSTATE] = GENMASK(23, 20),
84+
[EV_ELEMENT_SIZE] = GENMASK(31, 24),
85+
};
86+
87+
REG_STRIDE_FIELDS(EV_CH_E_CNTXT_0, ev_ch_e_cntxt_0,
88+
0x0001d000 + 0x4000 * GSI_EE_AP, 0x80);
7989

8090
REG_STRIDE(EV_CH_E_CNTXT_1, ev_ch_e_cntxt_1,
8191
0x0001d004 + 0x4000 * GSI_EE_AP, 0x80);
@@ -89,8 +99,14 @@ REG_STRIDE(EV_CH_E_CNTXT_3, ev_ch_e_cntxt_3,
8999
REG_STRIDE(EV_CH_E_CNTXT_4, ev_ch_e_cntxt_4,
90100
0x0001d010 + 0x4000 * GSI_EE_AP, 0x80);
91101

92-
REG_STRIDE(EV_CH_E_CNTXT_8, ev_ch_e_cntxt_8,
93-
0x0001d020 + 0x4000 * GSI_EE_AP, 0x80);
102+
static const u32 reg_ev_ch_e_cntxt_8_fmask[] = {
103+
[EV_MODT] = GENMASK(15, 0),
104+
[EV_MODC] = GENMASK(23, 16),
105+
[EV_MOD_CNT] = GENMASK(31, 24),
106+
};
107+
108+
REG_STRIDE_FIELDS(EV_CH_E_CNTXT_8, ev_ch_e_cntxt_8,
109+
0x0001d020 + 0x4000 * GSI_EE_AP, 0x80);
94110

95111
REG_STRIDE(EV_CH_E_CNTXT_9, ev_ch_e_cntxt_9,
96112
0x0001d024 + 0x4000 * GSI_EE_AP, 0x80);

drivers/net/ipa/reg/gsi_reg-v4.9.c

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -75,8 +75,18 @@ REG_STRIDE(CH_C_SCRATCH_2, ch_c_scratch_2,
7575
REG_STRIDE(CH_C_SCRATCH_3, ch_c_scratch_3,
7676
0x0001c06c + 0x4000 * GSI_EE_AP, 0x80);
7777

78-
REG_STRIDE(EV_CH_E_CNTXT_0, ev_ch_e_cntxt_0,
79-
0x0001d000 + 0x4000 * GSI_EE_AP, 0x80);
78+
static const u32 reg_ev_ch_e_cntxt_0_fmask[] = {
79+
[EV_CHTYPE] = GENMASK(3, 0),
80+
[EV_EE] = GENMASK(7, 4),
81+
[EV_EVCHID] = GENMASK(15, 8),
82+
[EV_INTYPE] = BIT(16),
83+
/* Bits 17-19 reserved */
84+
[EV_CHSTATE] = GENMASK(23, 20),
85+
[EV_ELEMENT_SIZE] = GENMASK(31, 24),
86+
};
87+
88+
REG_STRIDE_FIELDS(EV_CH_E_CNTXT_0, ev_ch_e_cntxt_0,
89+
0x0001d000 + 0x4000 * GSI_EE_AP, 0x80);
8090

8191
REG_STRIDE(EV_CH_E_CNTXT_1, ev_ch_e_cntxt_1,
8292
0x0001d004 + 0x4000 * GSI_EE_AP, 0x80);
@@ -90,8 +100,14 @@ REG_STRIDE(EV_CH_E_CNTXT_3, ev_ch_e_cntxt_3,
90100
REG_STRIDE(EV_CH_E_CNTXT_4, ev_ch_e_cntxt_4,
91101
0x0001d010 + 0x4000 * GSI_EE_AP, 0x80);
92102

93-
REG_STRIDE(EV_CH_E_CNTXT_8, ev_ch_e_cntxt_8,
94-
0x0001d020 + 0x4000 * GSI_EE_AP, 0x80);
103+
static const u32 reg_ev_ch_e_cntxt_8_fmask[] = {
104+
[EV_MODT] = GENMASK(15, 0),
105+
[EV_MODC] = GENMASK(23, 16),
106+
[EV_MOD_CNT] = GENMASK(31, 24),
107+
};
108+
109+
REG_STRIDE_FIELDS(EV_CH_E_CNTXT_8, ev_ch_e_cntxt_8,
110+
0x0001d020 + 0x4000 * GSI_EE_AP, 0x80);
95111

96112
REG_STRIDE(EV_CH_E_CNTXT_9, ev_ch_e_cntxt_9,
97113
0x0001d024 + 0x4000 * GSI_EE_AP, 0x80);

0 commit comments

Comments
 (0)