@@ -190,10 +190,8 @@ qed_dcbx_dp_protocol(struct qed_hwfn *p_hwfn, struct qed_dcbx_results *p_data)
190
190
191
191
static void
192
192
qed_dcbx_set_params (struct qed_dcbx_results * p_data ,
193
- struct qed_hw_info * p_info ,
194
- bool enable ,
195
- u8 prio ,
196
- u8 tc ,
193
+ struct qed_hwfn * p_hwfn , struct qed_ptt * p_ptt ,
194
+ bool enable , u8 prio , u8 tc ,
197
195
enum dcbx_protocol_type type ,
198
196
enum qed_pci_personality personality )
199
197
{
@@ -206,19 +204,30 @@ qed_dcbx_set_params(struct qed_dcbx_results *p_data,
206
204
else
207
205
p_data -> arr [type ].update = DONT_UPDATE_DCB_DSCP ;
208
206
207
+ /* Do not add vlan tag 0 when DCB is enabled and port in UFP/OV mode */
208
+ if ((test_bit (QED_MF_8021Q_TAGGING , & p_hwfn -> cdev -> mf_bits ) ||
209
+ test_bit (QED_MF_8021AD_TAGGING , & p_hwfn -> cdev -> mf_bits )))
210
+ p_data -> arr [type ].dont_add_vlan0 = true;
211
+
209
212
/* QM reconf data */
210
- if (p_info -> personality == personality )
211
- qed_hw_info_set_offload_tc (p_info , tc );
213
+ if (p_hwfn -> hw_info .personality == personality )
214
+ qed_hw_info_set_offload_tc (& p_hwfn -> hw_info , tc );
215
+
216
+ /* Configure dcbx vlan priority in doorbell block for roce EDPM */
217
+ if (test_bit (QED_MF_UFP_SPECIFIC , & p_hwfn -> cdev -> mf_bits ) &&
218
+ type == DCBX_PROTOCOL_ROCE ) {
219
+ qed_wr (p_hwfn , p_ptt , DORQ_REG_TAG1_OVRD_MODE , 1 );
220
+ qed_wr (p_hwfn , p_ptt , DORQ_REG_PF_PCP_BB_K2 , prio << 1 );
221
+ }
212
222
}
213
223
214
224
/* Update app protocol data and hw_info fields with the TLV info */
215
225
static void
216
226
qed_dcbx_update_app_info (struct qed_dcbx_results * p_data ,
217
- struct qed_hwfn * p_hwfn ,
218
- bool enable ,
219
- u8 prio , u8 tc , enum dcbx_protocol_type type )
227
+ struct qed_hwfn * p_hwfn , struct qed_ptt * p_ptt ,
228
+ bool enable , u8 prio , u8 tc ,
229
+ enum dcbx_protocol_type type )
220
230
{
221
- struct qed_hw_info * p_info = & p_hwfn -> hw_info ;
222
231
enum qed_pci_personality personality ;
223
232
enum dcbx_protocol_type id ;
224
233
int i ;
@@ -231,7 +240,7 @@ qed_dcbx_update_app_info(struct qed_dcbx_results *p_data,
231
240
232
241
personality = qed_dcbx_app_update [i ].personality ;
233
242
234
- qed_dcbx_set_params (p_data , p_info , enable ,
243
+ qed_dcbx_set_params (p_data , p_hwfn , p_ptt , enable ,
235
244
prio , tc , type , personality );
236
245
}
237
246
}
@@ -265,7 +274,7 @@ qed_dcbx_get_app_protocol_type(struct qed_hwfn *p_hwfn,
265
274
* reconfiguring QM. Get protocol specific data for PF update ramrod command.
266
275
*/
267
276
static int
268
- qed_dcbx_process_tlv (struct qed_hwfn * p_hwfn ,
277
+ qed_dcbx_process_tlv (struct qed_hwfn * p_hwfn , struct qed_ptt * p_ptt ,
269
278
struct qed_dcbx_results * p_data ,
270
279
struct dcbx_app_priority_entry * p_tbl ,
271
280
u32 pri_tc_tbl , int count , u8 dcbx_version )
@@ -309,7 +318,7 @@ qed_dcbx_process_tlv(struct qed_hwfn *p_hwfn,
309
318
enable = true;
310
319
}
311
320
312
- qed_dcbx_update_app_info (p_data , p_hwfn , enable ,
321
+ qed_dcbx_update_app_info (p_data , p_hwfn , p_ptt , enable ,
313
322
priority , tc , type );
314
323
}
315
324
}
@@ -331,7 +340,7 @@ qed_dcbx_process_tlv(struct qed_hwfn *p_hwfn,
331
340
continue ;
332
341
333
342
enable = (type == DCBX_PROTOCOL_ETH ) ? false : !!dcbx_version ;
334
- qed_dcbx_update_app_info (p_data , p_hwfn , enable ,
343
+ qed_dcbx_update_app_info (p_data , p_hwfn , p_ptt , enable ,
335
344
priority , tc , type );
336
345
}
337
346
@@ -341,7 +350,8 @@ qed_dcbx_process_tlv(struct qed_hwfn *p_hwfn,
341
350
/* Parse app TLV's to update TC information in hw_info structure for
342
351
* reconfiguring QM. Get protocol specific data for PF update ramrod command.
343
352
*/
344
- static int qed_dcbx_process_mib_info (struct qed_hwfn * p_hwfn )
353
+ static int
354
+ qed_dcbx_process_mib_info (struct qed_hwfn * p_hwfn , struct qed_ptt * p_ptt )
345
355
{
346
356
struct dcbx_app_priority_feature * p_app ;
347
357
struct dcbx_app_priority_entry * p_tbl ;
@@ -365,7 +375,7 @@ static int qed_dcbx_process_mib_info(struct qed_hwfn *p_hwfn)
365
375
p_info = & p_hwfn -> hw_info ;
366
376
num_entries = QED_MFW_GET_FIELD (p_app -> flags , DCBX_APP_NUM_ENTRIES );
367
377
368
- rc = qed_dcbx_process_tlv (p_hwfn , & data , p_tbl , pri_tc_tbl ,
378
+ rc = qed_dcbx_process_tlv (p_hwfn , p_ptt , & data , p_tbl , pri_tc_tbl ,
369
379
num_entries , dcbx_version );
370
380
if (rc )
371
381
return rc ;
@@ -891,7 +901,7 @@ qed_dcbx_mib_update_event(struct qed_hwfn *p_hwfn,
891
901
return rc ;
892
902
893
903
if (type == QED_DCBX_OPERATIONAL_MIB ) {
894
- rc = qed_dcbx_process_mib_info (p_hwfn );
904
+ rc = qed_dcbx_process_mib_info (p_hwfn , p_ptt );
895
905
if (!rc ) {
896
906
/* reconfigure tcs of QM queues according
897
907
* to negotiation results
@@ -954,6 +964,7 @@ static void qed_dcbx_update_protocol_data(struct protocol_dcb_data *p_data,
954
964
p_data -> dcb_enable_flag = p_src -> arr [type ].enable ;
955
965
p_data -> dcb_priority = p_src -> arr [type ].priority ;
956
966
p_data -> dcb_tc = p_src -> arr [type ].tc ;
967
+ p_data -> dcb_dont_add_vlan0 = p_src -> arr [type ].dont_add_vlan0 ;
957
968
}
958
969
959
970
/* Set pf update ramrod command params */
0 commit comments