@@ -29,25 +29,20 @@ static int bnxt_fw_reporter_diagnose(struct devlink_health_reporter *reporter,
29
29
val = bnxt_fw_health_readl (bp , BNXT_FW_HEALTH_REG );
30
30
health_status = val & 0xffff ;
31
31
32
- if (health_status == BNXT_FW_STATUS_HEALTHY ) {
33
- rc = devlink_fmsg_string_pair_put (fmsg , "FW status" ,
34
- "Healthy;" );
35
- if (rc )
36
- return rc ;
37
- } else if (health_status < BNXT_FW_STATUS_HEALTHY ) {
38
- rc = devlink_fmsg_string_pair_put (fmsg , "FW status" ,
39
- "Not yet completed initialization;" );
32
+ if (health_status < BNXT_FW_STATUS_HEALTHY ) {
33
+ rc = devlink_fmsg_string_pair_put (fmsg , "Description" ,
34
+ "Not yet completed initialization" );
40
35
if (rc )
41
36
return rc ;
42
37
} else if (health_status > BNXT_FW_STATUS_HEALTHY ) {
43
- rc = devlink_fmsg_string_pair_put (fmsg , "FW status " ,
44
- "Encountered fatal error and cannot recover; " );
38
+ rc = devlink_fmsg_string_pair_put (fmsg , "Description " ,
39
+ "Encountered fatal error and cannot recover" );
45
40
if (rc )
46
41
return rc ;
47
42
}
48
43
49
44
if (val >> 16 ) {
50
- rc = devlink_fmsg_u32_pair_put (fmsg , "Error" , val >> 16 );
45
+ rc = devlink_fmsg_u32_pair_put (fmsg , "Error code " , val >> 16 );
51
46
if (rc )
52
47
return rc ;
53
48
}
@@ -215,25 +210,68 @@ enum bnxt_dl_param_id {
215
210
216
211
static const struct bnxt_dl_nvm_param nvm_params [] = {
217
212
{DEVLINK_PARAM_GENERIC_ID_ENABLE_SRIOV , NVM_OFF_ENABLE_SRIOV ,
218
- BNXT_NVM_SHARED_CFG , 1 },
213
+ BNXT_NVM_SHARED_CFG , 1 , 1 },
219
214
{DEVLINK_PARAM_GENERIC_ID_IGNORE_ARI , NVM_OFF_IGNORE_ARI ,
220
- BNXT_NVM_SHARED_CFG , 1 },
215
+ BNXT_NVM_SHARED_CFG , 1 , 1 },
221
216
{DEVLINK_PARAM_GENERIC_ID_MSIX_VEC_PER_PF_MAX ,
222
- NVM_OFF_MSIX_VEC_PER_PF_MAX , BNXT_NVM_SHARED_CFG , 10 },
217
+ NVM_OFF_MSIX_VEC_PER_PF_MAX , BNXT_NVM_SHARED_CFG , 10 , 4 },
223
218
{DEVLINK_PARAM_GENERIC_ID_MSIX_VEC_PER_PF_MIN ,
224
- NVM_OFF_MSIX_VEC_PER_PF_MIN , BNXT_NVM_SHARED_CFG , 7 },
219
+ NVM_OFF_MSIX_VEC_PER_PF_MIN , BNXT_NVM_SHARED_CFG , 7 , 4 },
225
220
{BNXT_DEVLINK_PARAM_ID_GRE_VER_CHECK , NVM_OFF_DIS_GRE_VER_CHECK ,
226
- BNXT_NVM_SHARED_CFG , 1 },
221
+ BNXT_NVM_SHARED_CFG , 1 , 1 },
227
222
};
228
223
224
+ union bnxt_nvm_data {
225
+ u8 val8 ;
226
+ __le32 val32 ;
227
+ };
228
+
229
+ static void bnxt_copy_to_nvm_data (union bnxt_nvm_data * dst ,
230
+ union devlink_param_value * src ,
231
+ int nvm_num_bits , int dl_num_bytes )
232
+ {
233
+ u32 val32 = 0 ;
234
+
235
+ if (nvm_num_bits == 1 ) {
236
+ dst -> val8 = src -> vbool ;
237
+ return ;
238
+ }
239
+ if (dl_num_bytes == 4 )
240
+ val32 = src -> vu32 ;
241
+ else if (dl_num_bytes == 2 )
242
+ val32 = (u32 )src -> vu16 ;
243
+ else if (dl_num_bytes == 1 )
244
+ val32 = (u32 )src -> vu8 ;
245
+ dst -> val32 = cpu_to_le32 (val32 );
246
+ }
247
+
248
+ static void bnxt_copy_from_nvm_data (union devlink_param_value * dst ,
249
+ union bnxt_nvm_data * src ,
250
+ int nvm_num_bits , int dl_num_bytes )
251
+ {
252
+ u32 val32 ;
253
+
254
+ if (nvm_num_bits == 1 ) {
255
+ dst -> vbool = src -> val8 ;
256
+ return ;
257
+ }
258
+ val32 = le32_to_cpu (src -> val32 );
259
+ if (dl_num_bytes == 4 )
260
+ dst -> vu32 = val32 ;
261
+ else if (dl_num_bytes == 2 )
262
+ dst -> vu16 = (u16 )val32 ;
263
+ else if (dl_num_bytes == 1 )
264
+ dst -> vu8 = (u8 )val32 ;
265
+ }
266
+
229
267
static int bnxt_hwrm_nvm_req (struct bnxt * bp , u32 param_id , void * msg ,
230
268
int msg_len , union devlink_param_value * val )
231
269
{
232
270
struct hwrm_nvm_get_variable_input * req = msg ;
233
- void * data_addr = NULL , * buf = NULL ;
234
271
struct bnxt_dl_nvm_param nvm_param ;
235
- int bytesize , idx = 0 , rc , i ;
272
+ union bnxt_nvm_data * data ;
236
273
dma_addr_t data_dma_addr ;
274
+ int idx = 0 , rc , i ;
237
275
238
276
/* Get/Set NVM CFG parameter is supported only on PFs */
239
277
if (BNXT_VF (bp ))
@@ -254,47 +292,31 @@ static int bnxt_hwrm_nvm_req(struct bnxt *bp, u32 param_id, void *msg,
254
292
else if (nvm_param .dir_type == BNXT_NVM_FUNC_CFG )
255
293
idx = bp -> pf .fw_fid - BNXT_FIRST_PF_FID ;
256
294
257
- bytesize = roundup (nvm_param .num_bits , BITS_PER_BYTE ) / BITS_PER_BYTE ;
258
- switch (bytesize ) {
259
- case 1 :
260
- if (nvm_param .num_bits == 1 )
261
- buf = & val -> vbool ;
262
- else
263
- buf = & val -> vu8 ;
264
- break ;
265
- case 2 :
266
- buf = & val -> vu16 ;
267
- break ;
268
- case 4 :
269
- buf = & val -> vu32 ;
270
- break ;
271
- default :
272
- return - EFAULT ;
273
- }
274
-
275
- data_addr = dma_alloc_coherent (& bp -> pdev -> dev , bytesize ,
276
- & data_dma_addr , GFP_KERNEL );
277
- if (!data_addr )
295
+ data = dma_alloc_coherent (& bp -> pdev -> dev , sizeof (* data ),
296
+ & data_dma_addr , GFP_KERNEL );
297
+ if (!data )
278
298
return - ENOMEM ;
279
299
280
300
req -> dest_data_addr = cpu_to_le64 (data_dma_addr );
281
- req -> data_len = cpu_to_le16 (nvm_param .num_bits );
301
+ req -> data_len = cpu_to_le16 (nvm_param .nvm_num_bits );
282
302
req -> option_num = cpu_to_le16 (nvm_param .offset );
283
303
req -> index_0 = cpu_to_le16 (idx );
284
304
if (idx )
285
305
req -> dimensions = cpu_to_le16 (1 );
286
306
287
307
if (req -> req_type == cpu_to_le16 (HWRM_NVM_SET_VARIABLE )) {
288
- memcpy (data_addr , buf , bytesize );
308
+ bnxt_copy_to_nvm_data (data , val , nvm_param .nvm_num_bits ,
309
+ nvm_param .dl_num_bytes );
289
310
rc = hwrm_send_message (bp , msg , msg_len , HWRM_CMD_TIMEOUT );
290
311
} else {
291
312
rc = hwrm_send_message_silent (bp , msg , msg_len ,
292
313
HWRM_CMD_TIMEOUT );
314
+ if (!rc )
315
+ bnxt_copy_from_nvm_data (val , data ,
316
+ nvm_param .nvm_num_bits ,
317
+ nvm_param .dl_num_bytes );
293
318
}
294
- if (!rc && req -> req_type == cpu_to_le16 (HWRM_NVM_GET_VARIABLE ))
295
- memcpy (buf , data_addr , bytesize );
296
-
297
- dma_free_coherent (& bp -> pdev -> dev , bytesize , data_addr , data_dma_addr );
319
+ dma_free_coherent (& bp -> pdev -> dev , sizeof (* data ), data , data_dma_addr );
298
320
if (rc == - EACCES )
299
321
netdev_err (bp -> dev , "PF does not have admin privileges to modify NVM config\n" );
300
322
return rc ;
0 commit comments