hc
2025-02-14 bbb9540dc49f70f6b703d1c8d1b85fa5f602d86e
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_ */