@@ -459,12 +459,11 @@ static void qed_mcp_print_cpu_info(struct qed_hwfn *p_hwfn,
459459static int
460460_qed_mcp_cmd_and_union (struct qed_hwfn * p_hwfn ,
461461 struct qed_ptt * p_ptt ,
462- struct qed_mcp_mb_params * p_mb_params ,
463- u32 max_retries , u32 usecs )
462+ struct qed_mcp_mb_params * p_mb_params )
464463{
465- u32 cnt = 0 , msecs = DIV_ROUND_UP (usecs , 1000 );
466464 struct qed_mcp_cmd_elem * p_cmd_elem ;
467465 u16 seq_num ;
466+ u32 cnt = 0 ;
468467 int rc = 0 ;
469468
470469 /* Wait until the mailbox is non-occupied */
@@ -488,12 +487,13 @@ _qed_mcp_cmd_and_union(struct qed_hwfn *p_hwfn,
488487 spin_unlock_bh (& p_hwfn -> mcp_info -> cmd_lock );
489488
490489 if (QED_MB_FLAGS_IS_SET (p_mb_params , CAN_SLEEP ))
491- msleep (msecs );
490+ usleep_range (QED_MCP_RESP_ITER_US ,
491+ QED_MCP_RESP_ITER_US * 2 );
492492 else
493- udelay (usecs );
494- } while (++ cnt < max_retries );
493+ udelay (QED_MCP_RESP_ITER_US );
494+ } while (++ cnt < QED_DRV_MB_MAX_RETRIES );
495495
496- if (cnt >= max_retries ) {
496+ if (cnt >= QED_DRV_MB_MAX_RETRIES ) {
497497 DP_NOTICE (p_hwfn ,
498498 "The MFW mailbox is occupied by an uncompleted command. Failed to send command 0x%08x [param 0x%08x].\n" ,
499499 p_mb_params -> cmd , p_mb_params -> param );
@@ -520,9 +520,10 @@ _qed_mcp_cmd_and_union(struct qed_hwfn *p_hwfn,
520520 */
521521
522522 if (QED_MB_FLAGS_IS_SET (p_mb_params , CAN_SLEEP ))
523- msleep (msecs );
523+ usleep_range (QED_MCP_RESP_ITER_US ,
524+ QED_MCP_RESP_ITER_US * 2 );
524525 else
525- udelay (usecs );
526+ udelay (QED_MCP_RESP_ITER_US );
526527
527528 spin_lock_bh (& p_hwfn -> mcp_info -> cmd_lock );
528529
@@ -536,9 +537,9 @@ _qed_mcp_cmd_and_union(struct qed_hwfn *p_hwfn,
536537 goto err ;
537538
538539 spin_unlock_bh (& p_hwfn -> mcp_info -> cmd_lock );
539- } while (++ cnt < max_retries );
540+ } while (++ cnt < QED_DRV_MB_MAX_RETRIES );
540541
541- if (cnt >= max_retries ) {
542+ if (cnt >= QED_DRV_MB_MAX_RETRIES ) {
542543 DP_NOTICE (p_hwfn ,
543544 "The MFW failed to respond to command 0x%08x [param 0x%08x].\n" ,
544545 p_mb_params -> cmd , p_mb_params -> param );
@@ -564,7 +565,8 @@ _qed_mcp_cmd_and_union(struct qed_hwfn *p_hwfn,
564565 "MFW mailbox: response 0x%08x param 0x%08x [after %d.%03d ms]\n" ,
565566 p_mb_params -> mcp_resp ,
566567 p_mb_params -> mcp_param ,
567- (cnt * usecs ) / 1000 , (cnt * usecs ) % 1000 );
568+ (cnt * QED_MCP_RESP_ITER_US ) / 1000 ,
569+ (cnt * QED_MCP_RESP_ITER_US ) % 1000 );
568570
569571 /* Clear the sequence number from the MFW response */
570572 p_mb_params -> mcp_resp &= FW_MSG_CODE_MASK ;
@@ -581,8 +583,6 @@ static int qed_mcp_cmd_and_union(struct qed_hwfn *p_hwfn,
581583 struct qed_mcp_mb_params * p_mb_params )
582584{
583585 size_t union_data_size = sizeof (union drv_union_data );
584- u32 max_retries = QED_DRV_MB_MAX_RETRIES ;
585- u32 usecs = QED_MCP_RESP_ITER_US ;
586586
587587 /* MCP not initialized */
588588 if (!qed_mcp_is_init (p_hwfn )) {
@@ -606,13 +606,7 @@ static int qed_mcp_cmd_and_union(struct qed_hwfn *p_hwfn,
606606 return - EINVAL ;
607607 }
608608
609- if (QED_MB_FLAGS_IS_SET (p_mb_params , CAN_SLEEP )) {
610- max_retries = DIV_ROUND_UP (max_retries , 1000 );
611- usecs *= 1000 ;
612- }
613-
614- return _qed_mcp_cmd_and_union (p_hwfn , p_ptt , p_mb_params , max_retries ,
615- usecs );
609+ return _qed_mcp_cmd_and_union (p_hwfn , p_ptt , p_mb_params );
616610}
617611
618612static int _qed_mcp_cmd (struct qed_hwfn * p_hwfn ,
@@ -3085,20 +3079,13 @@ int qed_mcp_nvm_read(struct qed_dev *cdev, u32 addr, u8 *p_buf, u32 len)
30853079 DRV_MB_PARAM_NVM_LEN_OFFSET ),
30863080 & resp , & resp_param ,
30873081 & read_len ,
3088- (u32 * )(p_buf + offset ), false );
3082+ (u32 * )(p_buf + offset ), true );
30893083
30903084 if (rc || (resp != FW_MSG_CODE_NVM_OK )) {
30913085 DP_NOTICE (cdev , "MCP command rc = %d\n" , rc );
30923086 break ;
30933087 }
30943088
3095- /* This can be a lengthy process, and it's possible scheduler
3096- * isn't preemptible. Sleep a bit to prevent CPU hogging.
3097- */
3098- if (bytes_left % 0x1000 <
3099- (bytes_left - read_len ) % 0x1000 )
3100- usleep_range (1000 , 2000 );
3101-
31023089 offset += read_len ;
31033090 bytes_left -= read_len ;
31043091 }
0 commit comments