@@ -341,11 +341,6 @@ void qed_resc_setup(struct qed_dev *cdev)
341
341
}
342
342
}
343
343
344
- #define FINAL_CLEANUP_CMD_OFFSET (0)
345
- #define FINAL_CLEANUP_CMD (0x1)
346
- #define FINAL_CLEANUP_VALID_OFFSET (6)
347
- #define FINAL_CLEANUP_VFPF_ID_SHIFT (7)
348
- #define FINAL_CLEANUP_COMP (0x2)
349
344
#define FINAL_CLEANUP_POLL_CNT (100)
350
345
#define FINAL_CLEANUP_POLL_TIME (10)
351
346
int qed_final_cleanup (struct qed_hwfn * p_hwfn ,
@@ -355,12 +350,14 @@ int qed_final_cleanup(struct qed_hwfn *p_hwfn,
355
350
u32 command = 0 , addr , count = FINAL_CLEANUP_POLL_CNT ;
356
351
int rc = - EBUSY ;
357
352
358
- addr = GTT_BAR0_MAP_REG_USDM_RAM + USTORM_FLR_FINAL_ACK_OFFSET ;
353
+ addr = GTT_BAR0_MAP_REG_USDM_RAM +
354
+ USTORM_FLR_FINAL_ACK_OFFSET (p_hwfn -> rel_pf_id );
359
355
360
- command |= FINAL_CLEANUP_CMD << FINAL_CLEANUP_CMD_OFFSET ;
361
- command |= 1 << FINAL_CLEANUP_VALID_OFFSET ;
362
- command |= id << FINAL_CLEANUP_VFPF_ID_SHIFT ;
363
- command |= FINAL_CLEANUP_COMP << SDM_OP_GEN_COMP_TYPE_SHIFT ;
356
+ command |= X_FINAL_CLEANUP_AGG_INT <<
357
+ SDM_AGG_INT_COMP_PARAMS_AGG_INT_INDEX_SHIFT ;
358
+ command |= 1 << SDM_AGG_INT_COMP_PARAMS_AGG_VECTOR_ENABLE_SHIFT ;
359
+ command |= id << SDM_AGG_INT_COMP_PARAMS_AGG_VECTOR_BIT_SHIFT ;
360
+ command |= SDM_COMP_TYPE_AGG_INT << SDM_OP_GEN_COMP_TYPE_SHIFT ;
364
361
365
362
/* Make sure notification is not set before initiating final cleanup */
366
363
if (REG_RD (p_hwfn , addr )) {
@@ -415,18 +412,16 @@ static void qed_calc_hw_mode(struct qed_hwfn *p_hwfn)
415
412
}
416
413
417
414
switch (p_hwfn -> cdev -> mf_mode ) {
418
- case SF :
419
- hw_mode |= 1 << MODE_SF ;
415
+ case QED_MF_DEFAULT :
416
+ case QED_MF_NPAR :
417
+ hw_mode |= 1 << MODE_MF_SI ;
420
418
break ;
421
- case MF_OVLAN :
419
+ case QED_MF_OVLAN :
422
420
hw_mode |= 1 << MODE_MF_SD ;
423
421
break ;
424
- case MF_NPAR :
425
- hw_mode |= 1 << MODE_MF_SI ;
426
- break ;
427
422
default :
428
- DP_NOTICE (p_hwfn , "Unsupported MF mode, init as SF \n" );
429
- hw_mode |= 1 << MODE_SF ;
423
+ DP_NOTICE (p_hwfn , "Unsupported MF mode, init as DEFAULT \n" );
424
+ hw_mode |= 1 << MODE_MF_SI ;
430
425
}
431
426
432
427
hw_mode |= 1 << MODE_ASIC ;
@@ -1018,8 +1013,7 @@ static void qed_hw_get_resc(struct qed_hwfn *p_hwfn)
1018
1013
u32 * resc_num = p_hwfn -> hw_info .resc_num ;
1019
1014
int num_funcs , i ;
1020
1015
1021
- num_funcs = IS_MF (p_hwfn ) ? MAX_NUM_PFS_BB
1022
- : p_hwfn -> cdev -> num_ports_in_engines ;
1016
+ num_funcs = MAX_NUM_PFS_BB ;
1023
1017
1024
1018
resc_num [QED_SB ] = min_t (u32 ,
1025
1019
(MAX_SB_PER_PATH_BB / num_funcs ),
@@ -1071,7 +1065,7 @@ static int qed_hw_get_nvm_info(struct qed_hwfn *p_hwfn,
1071
1065
struct qed_ptt * p_ptt )
1072
1066
{
1073
1067
u32 nvm_cfg1_offset , mf_mode , addr , generic_cont0 , core_cfg ;
1074
- u32 port_cfg_addr , link_temp , val , nvm_cfg_addr ;
1068
+ u32 port_cfg_addr , link_temp , nvm_cfg_addr , device_capabilities ;
1075
1069
struct qed_mcp_link_params * link ;
1076
1070
1077
1071
/* Read global nvm_cfg address */
@@ -1134,21 +1128,6 @@ static int qed_hw_get_nvm_info(struct qed_hwfn *p_hwfn,
1134
1128
break ;
1135
1129
}
1136
1130
1137
- addr = MCP_REG_SCRATCH + nvm_cfg1_offset +
1138
- offsetof(struct nvm_cfg1 , func [MCP_PF_ID (p_hwfn )]) +
1139
- offsetof(struct nvm_cfg1_func , device_id );
1140
- val = qed_rd (p_hwfn , p_ptt , addr );
1141
-
1142
- if (IS_MF (p_hwfn )) {
1143
- p_hwfn -> hw_info .device_id =
1144
- (val & NVM_CFG1_FUNC_MF_VENDOR_DEVICE_ID_MASK ) >>
1145
- NVM_CFG1_FUNC_MF_VENDOR_DEVICE_ID_OFFSET ;
1146
- } else {
1147
- p_hwfn -> hw_info .device_id =
1148
- (val & NVM_CFG1_FUNC_VENDOR_DEVICE_ID_MASK ) >>
1149
- NVM_CFG1_FUNC_VENDOR_DEVICE_ID_OFFSET ;
1150
- }
1151
-
1152
1131
/* Read default link configuration */
1153
1132
link = & p_hwfn -> mcp_info -> link_input ;
1154
1133
port_cfg_addr = MCP_REG_SCRATCH + nvm_cfg1_offset +
@@ -1220,18 +1199,28 @@ static int qed_hw_get_nvm_info(struct qed_hwfn *p_hwfn,
1220
1199
1221
1200
switch (mf_mode ) {
1222
1201
case NVM_CFG1_GLOB_MF_MODE_MF_ALLOWED :
1223
- p_hwfn -> cdev -> mf_mode = MF_OVLAN ;
1202
+ p_hwfn -> cdev -> mf_mode = QED_MF_OVLAN ;
1224
1203
break ;
1225
1204
case NVM_CFG1_GLOB_MF_MODE_NPAR1_0 :
1226
- p_hwfn -> cdev -> mf_mode = MF_NPAR ;
1205
+ p_hwfn -> cdev -> mf_mode = QED_MF_NPAR ;
1227
1206
break ;
1228
- case NVM_CFG1_GLOB_MF_MODE_FORCED_SF :
1229
- p_hwfn -> cdev -> mf_mode = SF ;
1207
+ case NVM_CFG1_GLOB_MF_MODE_DEFAULT :
1208
+ p_hwfn -> cdev -> mf_mode = QED_MF_DEFAULT ;
1230
1209
break ;
1231
1210
}
1232
1211
DP_INFO (p_hwfn , "Multi function mode is %08x\n" ,
1233
1212
p_hwfn -> cdev -> mf_mode );
1234
1213
1214
+ /* Read Multi-function information from shmem */
1215
+ addr = MCP_REG_SCRATCH + nvm_cfg1_offset +
1216
+ offsetof(struct nvm_cfg1 , glob ) +
1217
+ offsetof(struct nvm_cfg1_glob , device_capabilities );
1218
+
1219
+ device_capabilities = qed_rd (p_hwfn , p_ptt , addr );
1220
+ if (device_capabilities & NVM_CFG1_GLOB_DEVICE_CAPABILITIES_ETHERNET )
1221
+ __set_bit (QED_DEV_CAP_ETH ,
1222
+ & p_hwfn -> hw_info .device_capabilities );
1223
+
1235
1224
return qed_mcp_fill_shmem_func_info (p_hwfn , p_ptt );
1236
1225
}
1237
1226
@@ -1293,29 +1282,36 @@ qed_get_hw_info(struct qed_hwfn *p_hwfn,
1293
1282
1294
1283
static void qed_get_dev_info (struct qed_dev * cdev )
1295
1284
{
1285
+ struct qed_hwfn * p_hwfn = QED_LEADING_HWFN (cdev );
1296
1286
u32 tmp ;
1297
1287
1298
- cdev -> chip_num = (u16 )qed_rd (cdev -> hwfns , cdev -> hwfns [0 ].p_main_ptt ,
1288
+ /* Read Vendor Id / Device Id */
1289
+ pci_read_config_word (cdev -> pdev , PCI_VENDOR_ID ,
1290
+ & cdev -> vendor_id );
1291
+ pci_read_config_word (cdev -> pdev , PCI_DEVICE_ID ,
1292
+ & cdev -> device_id );
1293
+ cdev -> chip_num = (u16 )qed_rd (p_hwfn , p_hwfn -> p_main_ptt ,
1299
1294
MISCS_REG_CHIP_NUM );
1300
- cdev -> chip_rev = (u16 )qed_rd (cdev -> hwfns , cdev -> hwfns [ 0 ]. p_main_ptt ,
1295
+ cdev -> chip_rev = (u16 )qed_rd (p_hwfn , p_hwfn -> p_main_ptt ,
1301
1296
MISCS_REG_CHIP_REV );
1302
1297
MASK_FIELD (CHIP_REV , cdev -> chip_rev );
1303
1298
1299
+ cdev -> type = QED_DEV_TYPE_BB ;
1304
1300
/* Learn number of HW-functions */
1305
- tmp = qed_rd (cdev -> hwfns , cdev -> hwfns [ 0 ]. p_main_ptt ,
1301
+ tmp = qed_rd (p_hwfn , p_hwfn -> p_main_ptt ,
1306
1302
MISCS_REG_CMT_ENABLED_FOR_PAIR );
1307
1303
1308
- if (tmp & (1 << cdev -> hwfns [ 0 ]. rel_pf_id )) {
1304
+ if (tmp & (1 << p_hwfn -> rel_pf_id )) {
1309
1305
DP_NOTICE (cdev -> hwfns , "device in CMT mode\n" );
1310
1306
cdev -> num_hwfns = 2 ;
1311
1307
} else {
1312
1308
cdev -> num_hwfns = 1 ;
1313
1309
}
1314
1310
1315
- cdev -> chip_bond_id = qed_rd (cdev -> hwfns , cdev -> hwfns [ 0 ]. p_main_ptt ,
1311
+ cdev -> chip_bond_id = qed_rd (p_hwfn , p_hwfn -> p_main_ptt ,
1316
1312
MISCS_REG_CHIP_TEST_REG ) >> 4 ;
1317
1313
MASK_FIELD (CHIP_BOND_ID , cdev -> chip_bond_id );
1318
- cdev -> chip_metal = (u16 )qed_rd (cdev -> hwfns , cdev -> hwfns [ 0 ]. p_main_ptt ,
1314
+ cdev -> chip_metal = (u16 )qed_rd (p_hwfn , p_hwfn -> p_main_ptt ,
1319
1315
MISCS_REG_CHIP_METAL );
1320
1316
MASK_FIELD (CHIP_METAL , cdev -> chip_metal );
1321
1317
0 commit comments