1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
|
/* SPDX-License-Identifier: (GPL-2.0 OR MIT) */
/*
* Driver for Microsemi VSC85xx PHYs
*
* Copyright (c) 2020 Microsemi Corporation
*/
#ifndef _MSCC_PHY_MACSEC_H_
#define _MSCC_PHY_MACSEC_H_
#include <net/macsec.h>
#define MSCC_MS_MAX_FLOWS 16
#define CONTROL_TYPE_EGRESS 0x6
#define CONTROL_TYPE_INGRESS 0xf
#define CONTROL_IV0 BIT(5)
#define CONTROL_IV1 BIT(6)
#define CONTROL_IV2 BIT(7)
#define CONTROL_UPDATE_SEQ BIT(13)
#define CONTROL_IV_IN_SEQ BIT(14)
#define CONTROL_ENCRYPT_AUTH BIT(15)
#define CONTROL_KEY_IN_CTX BIT(16)
#define CONTROL_CRYPTO_ALG(x) ((x) << 17)
#define CTRYPTO_ALG_AES_CTR_128 0x5
#define CTRYPTO_ALG_AES_CTR_192 0x6
#define CTRYPTO_ALG_AES_CTR_256 0x7
#define CONTROL_DIGEST_TYPE(x) ((x) << 21)
#define CONTROL_AUTH_ALG(x) ((x) << 23)
#define AUTH_ALG_AES_GHAS 0x4
#define CONTROL_AN(x) ((x) << 26)
#define CONTROL_SEQ_TYPE(x) ((x) << 28)
#define CONTROL_SEQ_MASK BIT(30)
#define CONTROL_CONTEXT_ID BIT(31)
enum mscc_macsec_destination_ports {
MSCC_MS_PORT_COMMON = 0,
MSCC_MS_PORT_RSVD = 1,
MSCC_MS_PORT_CONTROLLED = 2,
MSCC_MS_PORT_UNCONTROLLED = 3,
};
enum mscc_macsec_drop_actions {
MSCC_MS_ACTION_BYPASS_CRC = 0,
MSCC_MS_ACTION_BYPASS_BAD = 1,
MSCC_MS_ACTION_DROP = 2,
MSCC_MS_ACTION_BYPASS = 3,
};
enum mscc_macsec_flow_types {
MSCC_MS_FLOW_BYPASS = 0,
MSCC_MS_FLOW_DROP = 1,
MSCC_MS_FLOW_INGRESS = 2,
MSCC_MS_FLOW_EGRESS = 3,
};
enum mscc_macsec_validate_levels {
MSCC_MS_VALIDATE_DISABLED = 0,
MSCC_MS_VALIDATE_CHECK = 1,
MSCC_MS_VALIDATE_STRICT = 2,
};
enum macsec_bank {
FC_BUFFER = 0x04,
HOST_MAC = 0x05,
LINE_MAC = 0x06,
PROC_0 = 0x0e,
PROC_2 = 0x0f,
MACSEC_INGR = 0x38,
MACSEC_EGR = 0x3c,
};
struct macsec_flow {
struct list_head list;
enum mscc_macsec_destination_ports port;
enum macsec_bank bank;
u32 index;
int assoc_num;
bool has_transformation;
/* Highest takes precedence [0..15] */
u8 priority;
u8 key[MACSEC_MAX_KEY_LEN];
union {
struct macsec_rx_sa *rx_sa;
struct macsec_tx_sa *tx_sa;
};
/* Matching */
struct {
u8 sci:1;
u8 tagged:1;
u8 untagged:1;
u8 etype:1;
} match;
u16 etype;
/* Action */
struct {
u8 bypass:1;
u8 drop:1;
} action;
};
#define MSCC_EXT_PAGE_MACSEC_17 17
#define MSCC_EXT_PAGE_MACSEC_18 18
#define MSCC_EXT_PAGE_MACSEC_19 19
#define MSCC_PHY_MACSEC_19_REG_ADDR(x) (x)
#define MSCC_PHY_MACSEC_19_TARGET(x) ((x) << 12)
#define MSCC_PHY_MACSEC_19_READ BIT(14)
#define MSCC_PHY_MACSEC_19_CMD BIT(15)
#define MSCC_EXT_PAGE_MACSEC_20 20
#define MSCC_PHY_MACSEC_20_TARGET(x) (x)
#define MSCC_MS_XFORM_REC(x, y) (((x) << 5) + (y))
#define MSCC_MS_ENA_CFG 0x800
#define MSCC_MS_FC_CFG 0x804
#define MSCC_MS_SAM_MAC_SA_MATCH_LO(x) (0x1000 + ((x) << 4))
#define MSCC_MS_SAM_MAC_SA_MATCH_HI(x) (0x1001 + ((x) << 4))
#define MSCC_MS_SAM_MISC_MATCH(x) (0x1004 + ((x) << 4))
#define MSCC_MS_SAM_MATCH_SCI_LO(x) (0x1005 + ((x) << 4))
#define MSCC_MS_SAM_MATCH_SCI_HI(x) (0x1006 + ((x) << 4))
#define MSCC_MS_SAM_MASK(x) (0x1007 + ((x) << 4))
#define MSCC_MS_SAM_ENTRY_SET1 0x1808
#define MSCC_MS_SAM_ENTRY_CLEAR1 0x180c
#define MSCC_MS_SAM_FLOW_CTRL(x) (0x1c00 + (x))
#define MSCC_MS_SAM_CP_TAG 0x1e40
#define MSCC_MS_SAM_NM_FLOW_NCP 0x1e51
#define MSCC_MS_SAM_NM_FLOW_CP 0x1e52
#define MSCC_MS_MISC_CONTROL 0x1e5f
#define MSCC_MS_COUNT_CONTROL 0x3204
#define MSCC_MS_PARAMS2_IG_CC_CONTROL 0x3a10
#define MSCC_MS_PARAMS2_IG_CP_TAG 0x3a14
#define MSCC_MS_VLAN_MTU_CHECK(x) (0x3c40 + (x))
#define MSCC_MS_NON_VLAN_MTU_CHECK 0x3c48
#define MSCC_MS_PP_CTRL 0x3c4b
#define MSCC_MS_STATUS_CONTEXT_CTRL 0x3d02
#define MSCC_MS_INTR_CTRL_STATUS 0x3d04
#define MSCC_MS_BLOCK_CTX_UPDATE 0x3d0c
#define MSCC_MS_AIC_CTRL 0x3e02
/* MACSEC_ENA_CFG */
#define MSCC_MS_ENA_CFG_CLK_ENA BIT(0)
#define MSCC_MS_ENA_CFG_SW_RST BIT(1)
#define MSCC_MS_ENA_CFG_MACSEC_BYPASS_ENA BIT(8)
#define MSCC_MS_ENA_CFG_MACSEC_ENA BIT(9)
#define MSCC_MS_ENA_CFG_MACSEC_SPEED_MODE(x) ((x) << 10)
#define MSCC_MS_ENA_CFG_MACSEC_SPEED_MODE_M GENMASK(12, 10)
/* MACSEC_FC_CFG */
#define MSCC_MS_FC_CFG_FCBUF_ENA BIT(0)
#define MSCC_MS_FC_CFG_USE_PKT_EXPANSION_INDICATION BIT(1)
#define MSCC_MS_FC_CFG_LOW_THRESH(x) ((x) << 4)
#define MSCC_MS_FC_CFG_LOW_THRESH_M GENMASK(7, 4)
#define MSCC_MS_FC_CFG_HIGH_THRESH(x) ((x) << 8)
#define MSCC_MS_FC_CFG_HIGH_THRESH_M GENMASK(11, 8)
#define MSCC_MS_FC_CFG_LOW_BYTES_VAL(x) ((x) << 12)
#define MSCC_MS_FC_CFG_LOW_BYTES_VAL_M GENMASK(14, 12)
#define MSCC_MS_FC_CFG_HIGH_BYTES_VAL(x) ((x) << 16)
#define MSCC_MS_FC_CFG_HIGH_BYTES_VAL_M GENMASK(18, 16)
/* MSCC_MS_SAM_MAC_SA_MATCH_HI */
#define MSCC_MS_SAM_MAC_SA_MATCH_HI_ETYPE(x) ((x) << 16)
#define MSCC_MS_SAM_MAC_SA_MATCH_HI_ETYPE_M GENMASK(31, 16)
/* MACSEC_SAM_MISC_MATCH */
#define MSCC_MS_SAM_MISC_MATCH_VLAN_VALID BIT(0)
#define MSCC_MS_SAM_MISC_MATCH_QINQ_FOUND BIT(1)
#define MSCC_MS_SAM_MISC_MATCH_STAG_VALID BIT(2)
#define MSCC_MS_SAM_MISC_MATCH_QTAG_VALID BIT(3)
#define MSCC_MS_SAM_MISC_MATCH_VLAN_UP(x) ((x) << 4)
#define MSCC_MS_SAM_MISC_MATCH_VLAN_UP_M GENMASK(6, 4)
#define MSCC_MS_SAM_MISC_MATCH_CONTROL_PACKET BIT(7)
#define MSCC_MS_SAM_MISC_MATCH_UNTAGGED BIT(8)
#define MSCC_MS_SAM_MISC_MATCH_TAGGED BIT(9)
#define MSCC_MS_SAM_MISC_MATCH_BAD_TAG BIT(10)
#define MSCC_MS_SAM_MISC_MATCH_KAY_TAG BIT(11)
#define MSCC_MS_SAM_MISC_MATCH_SOURCE_PORT(x) ((x) << 12)
#define MSCC_MS_SAM_MISC_MATCH_SOURCE_PORT_M GENMASK(13, 12)
#define MSCC_MS_SAM_MISC_MATCH_PRIORITY(x) ((x) << 16)
#define MSCC_MS_SAM_MISC_MATCH_PRIORITY_M GENMASK(19, 16)
#define MSCC_MS_SAM_MISC_MATCH_AN(x) ((x) << 24)
#define MSCC_MS_SAM_MISC_MATCH_TCI(x) ((x) << 26)
/* MACSEC_SAM_MASK */
#define MSCC_MS_SAM_MASK_MAC_SA_MASK(x) (x)
#define MSCC_MS_SAM_MASK_MAC_SA_MASK_M GENMASK(5, 0)
#define MSCC_MS_SAM_MASK_MAC_DA_MASK(x) ((x) << 6)
#define MSCC_MS_SAM_MASK_MAC_DA_MASK_M GENMASK(11, 6)
#define MSCC_MS_SAM_MASK_MAC_ETYPE_MASK BIT(12)
#define MSCC_MS_SAM_MASK_VLAN_VLD_MASK BIT(13)
#define MSCC_MS_SAM_MASK_QINQ_FOUND_MASK BIT(14)
#define MSCC_MS_SAM_MASK_STAG_VLD_MASK BIT(15)
#define MSCC_MS_SAM_MASK_QTAG_VLD_MASK BIT(16)
#define MSCC_MS_SAM_MASK_VLAN_UP_MASK BIT(17)
#define MSCC_MS_SAM_MASK_VLAN_ID_MASK BIT(18)
#define MSCC_MS_SAM_MASK_SOURCE_PORT_MASK BIT(19)
#define MSCC_MS_SAM_MASK_CTL_PACKET_MASK BIT(20)
#define MSCC_MS_SAM_MASK_VLAN_UP_INNER_MASK BIT(21)
#define MSCC_MS_SAM_MASK_VLAN_ID_INNER_MASK BIT(22)
#define MSCC_MS_SAM_MASK_SCI_MASK BIT(23)
#define MSCC_MS_SAM_MASK_AN_MASK(x) ((x) << 24)
#define MSCC_MS_SAM_MASK_TCI_MASK(x) ((x) << 26)
/* MACSEC_SAM_FLOW_CTRL_EGR */
#define MSCC_MS_SAM_FLOW_CTRL_FLOW_TYPE(x) (x)
#define MSCC_MS_SAM_FLOW_CTRL_FLOW_TYPE_M GENMASK(1, 0)
#define MSCC_MS_SAM_FLOW_CTRL_DEST_PORT(x) ((x) << 2)
#define MSCC_MS_SAM_FLOW_CTRL_DEST_PORT_M GENMASK(3, 2)
#define MSCC_MS_SAM_FLOW_CTRL_RESV_4 BIT(4)
#define MSCC_MS_SAM_FLOW_CTRL_FLOW_CRYPT_AUTH BIT(5)
#define MSCC_MS_SAM_FLOW_CTRL_DROP_ACTION(x) ((x) << 6)
#define MSCC_MS_SAM_FLOW_CTRL_DROP_ACTION_M GENMASK(7, 6)
#define MSCC_MS_SAM_FLOW_CTRL_RESV_15_TO_8(x) ((x) << 8)
#define MSCC_MS_SAM_FLOW_CTRL_RESV_15_TO_8_M GENMASK(15, 8)
#define MSCC_MS_SAM_FLOW_CTRL_PROTECT_FRAME BIT(16)
#define MSCC_MS_SAM_FLOW_CTRL_REPLAY_PROTECT BIT(16)
#define MSCC_MS_SAM_FLOW_CTRL_SA_IN_USE BIT(17)
#define MSCC_MS_SAM_FLOW_CTRL_INCLUDE_SCI BIT(18)
#define MSCC_MS_SAM_FLOW_CTRL_USE_ES BIT(19)
#define MSCC_MS_SAM_FLOW_CTRL_USE_SCB BIT(20)
#define MSCC_MS_SAM_FLOW_CTRL_VALIDATE_FRAMES(x) ((x) << 19)
#define MSCC_MS_SAM_FLOW_CTRL_TAG_BYPASS_SIZE(x) ((x) << 21)
#define MSCC_MS_SAM_FLOW_CTRL_TAG_BYPASS_SIZE_M GENMASK(22, 21)
#define MSCC_MS_SAM_FLOW_CTRL_RESV_23 BIT(23)
#define MSCC_MS_SAM_FLOW_CTRL_CONFIDENTIALITY_OFFSET(x) ((x) << 24)
#define MSCC_MS_SAM_FLOW_CTRL_CONFIDENTIALITY_OFFSET_M GENMASK(30, 24)
#define MSCC_MS_SAM_FLOW_CTRL_CONF_PROTECT BIT(31)
/* MACSEC_SAM_CP_TAG */
#define MSCC_MS_SAM_CP_TAG_MAP_TBL(x) (x)
#define MSCC_MS_SAM_CP_TAG_MAP_TBL_M GENMASK(23, 0)
#define MSCC_MS_SAM_CP_TAG_DEF_UP(x) ((x) << 24)
#define MSCC_MS_SAM_CP_TAG_DEF_UP_M GENMASK(26, 24)
#define MSCC_MS_SAM_CP_TAG_STAG_UP_EN BIT(27)
#define MSCC_MS_SAM_CP_TAG_QTAG_UP_EN BIT(28)
#define MSCC_MS_SAM_CP_TAG_PARSE_QINQ BIT(29)
#define MSCC_MS_SAM_CP_TAG_PARSE_STAG BIT(30)
#define MSCC_MS_SAM_CP_TAG_PARSE_QTAG BIT(31)
/* MACSEC_SAM_NM_FLOW_NCP */
#define MSCC_MS_SAM_NM_FLOW_NCP_UNTAGGED_FLOW_TYPE(x) (x)
#define MSCC_MS_SAM_NM_FLOW_NCP_UNTAGGED_DEST_PORT(x) ((x) << 2)
#define MSCC_MS_SAM_NM_FLOW_NCP_UNTAGGED_DROP_ACTION(x) ((x) << 6)
#define MSCC_MS_SAM_NM_FLOW_NCP_TAGGED_FLOW_TYPE(x) ((x) << 8)
#define MSCC_MS_SAM_NM_FLOW_NCP_TAGGED_DEST_PORT(x) ((x) << 10)
#define MSCC_MS_SAM_NM_FLOW_NCP_TAGGED_DROP_ACTION(x) ((x) << 14)
#define MSCC_MS_SAM_NM_FLOW_NCP_BADTAG_FLOW_TYPE(x) ((x) << 16)
#define MSCC_MS_SAM_NM_FLOW_NCP_BADTAG_DEST_PORT(x) ((x) << 18)
#define MSCC_MS_SAM_NM_FLOW_NCP_BADTAG_DROP_ACTION(x) ((x) << 22)
#define MSCC_MS_SAM_NM_FLOW_NCP_KAY_FLOW_TYPE(x) ((x) << 24)
#define MSCC_MS_SAM_NM_FLOW_NCP_KAY_DEST_PORT(x) ((x) << 26)
#define MSCC_MS_SAM_NM_FLOW_NCP_KAY_DROP_ACTION(x) ((x) << 30)
/* MACSEC_SAM_NM_FLOW_CP */
#define MSCC_MS_SAM_NM_FLOW_CP_UNTAGGED_FLOW_TYPE(x) (x)
#define MSCC_MS_SAM_NM_FLOW_CP_UNTAGGED_DEST_PORT(x) ((x) << 2)
#define MSCC_MS_SAM_NM_FLOW_CP_UNTAGGED_DROP_ACTION(x) ((x) << 6)
#define MSCC_MS_SAM_NM_FLOW_CP_TAGGED_FLOW_TYPE(x) ((x) << 8)
#define MSCC_MS_SAM_NM_FLOW_CP_TAGGED_DEST_PORT(x) ((x) << 10)
#define MSCC_MS_SAM_NM_FLOW_CP_TAGGED_DROP_ACTION(x) ((x) << 14)
#define MSCC_MS_SAM_NM_FLOW_CP_BADTAG_FLOW_TYPE(x) ((x) << 16)
#define MSCC_MS_SAM_NM_FLOW_CP_BADTAG_DEST_PORT(x) ((x) << 18)
#define MSCC_MS_SAM_NM_FLOW_CP_BADTAG_DROP_ACTION(x) ((x) << 22)
#define MSCC_MS_SAM_NM_FLOW_CP_KAY_FLOW_TYPE(x) ((x) << 24)
#define MSCC_MS_SAM_NM_FLOW_CP_KAY_DEST_PORT(x) ((x) << 26)
#define MSCC_MS_SAM_NM_FLOW_CP_KAY_DROP_ACTION(x) ((x) << 30)
/* MACSEC_MISC_CONTROL */
#define MSCC_MS_MISC_CONTROL_MC_LATENCY_FIX(x) (x)
#define MSCC_MS_MISC_CONTROL_MC_LATENCY_FIX_M GENMASK(5, 0)
#define MSCC_MS_MISC_CONTROL_STATIC_BYPASS BIT(8)
#define MSCC_MS_MISC_CONTROL_NM_MACSEC_EN BIT(9)
#define MSCC_MS_MISC_CONTROL_VALIDATE_FRAMES(x) ((x) << 10)
#define MSCC_MS_MISC_CONTROL_VALIDATE_FRAMES_M GENMASK(11, 10)
#define MSCC_MS_MISC_CONTROL_XFORM_REC_SIZE(x) ((x) << 24)
#define MSCC_MS_MISC_CONTROL_XFORM_REC_SIZE_M GENMASK(25, 24)
/* MACSEC_COUNT_CONTROL */
#define MSCC_MS_COUNT_CONTROL_RESET_ALL BIT(0)
#define MSCC_MS_COUNT_CONTROL_DEBUG_ACCESS BIT(1)
#define MSCC_MS_COUNT_CONTROL_SATURATE_CNTRS BIT(2)
#define MSCC_MS_COUNT_CONTROL_AUTO_CNTR_RESET BIT(3)
/* MACSEC_PARAMS2_IG_CC_CONTROL */
#define MSCC_MS_PARAMS2_IG_CC_CONTROL_NON_MATCH_CTRL_ACT BIT(14)
#define MSCC_MS_PARAMS2_IG_CC_CONTROL_NON_MATCH_ACT BIT(15)
/* MACSEC_PARAMS2_IG_CP_TAG */
#define MSCC_MS_PARAMS2_IG_CP_TAG_MAP_TBL(x) (x)
#define MSCC_MS_PARAMS2_IG_CP_TAG_MAP_TBL_M GENMASK(23, 0)
#define MSCC_MS_PARAMS2_IG_CP_TAG_DEF_UP(x) ((x) << 24)
#define MSCC_MS_PARAMS2_IG_CP_TAG_DEF_UP_M GENMASK(26, 24)
#define MSCC_MS_PARAMS2_IG_CP_TAG_STAG_UP_EN BIT(27)
#define MSCC_MS_PARAMS2_IG_CP_TAG_QTAG_UP_EN BIT(28)
#define MSCC_MS_PARAMS2_IG_CP_TAG_PARSE_QINQ BIT(29)
#define MSCC_MS_PARAMS2_IG_CP_TAG_PARSE_STAG BIT(30)
#define MSCC_MS_PARAMS2_IG_CP_TAG_PARSE_QTAG BIT(31)
/* MACSEC_VLAN_MTU_CHECK */
#define MSCC_MS_VLAN_MTU_CHECK_MTU_COMPARE(x) (x)
#define MSCC_MS_VLAN_MTU_CHECK_MTU_COMPARE_M GENMASK(14, 0)
#define MSCC_MS_VLAN_MTU_CHECK_MTU_COMP_DROP BIT(15)
/* MACSEC_NON_VLAN_MTU_CHECK */
#define MSCC_MS_NON_VLAN_MTU_CHECK_NV_MTU_COMPARE(x) (x)
#define MSCC_MS_NON_VLAN_MTU_CHECK_NV_MTU_COMPARE_M GENMASK(14, 0)
#define MSCC_MS_NON_VLAN_MTU_CHECK_NV_MTU_COMP_DROP BIT(15)
/* MACSEC_PP_CTRL */
#define MSCC_MS_PP_CTRL_MACSEC_OCTET_INCR_MODE BIT(0)
/* MACSEC_INTR_CTRL_STATUS */
#define MSCC_MS_INTR_CTRL_STATUS_INTR_CLR_STATUS(x) (x)
#define MSCC_MS_INTR_CTRL_STATUS_INTR_CLR_STATUS_M GENMASK(15, 0)
#define MSCC_MS_INTR_CTRL_STATUS_INTR_ENABLE(x) ((x) << 16)
#define MSCC_MS_INTR_CTRL_STATUS_INTR_ENABLE_M GENMASK(31, 16)
#define MACSEC_INTR_CTRL_STATUS_ROLLOVER BIT(5)
#endif /* _MSCC_PHY_MACSEC_H_ */
|