@@ -1202,6 +1202,11 @@ _base_sas_ioc_info(struct MPT3SAS_ADAPTER *ioc, MPI2DefaultReply_t *mpi_reply,
12021202 ioc -> sge_size ;
12031203 func_str = "nvme_encapsulated" ;
12041204 break ;
1205+ case MPI2_FUNCTION_MCTP_PASSTHROUGH :
1206+ frame_sz = sizeof (Mpi26MctpPassthroughRequest_t ) +
1207+ ioc -> sge_size ;
1208+ func_str = "mctp_passthru" ;
1209+ break ;
12051210 default :
12061211 frame_sz = 32 ;
12071212 func_str = "unknown" ;
@@ -4874,6 +4879,12 @@ _base_display_ioc_capabilities(struct MPT3SAS_ADAPTER *ioc)
48744879 i ++ ;
48754880 }
48764881
4882+ if (ioc -> facts .IOCCapabilities &
4883+ MPI26_IOCFACTS_CAPABILITY_MCTP_PASSTHRU ) {
4884+ pr_cont ("%sMCTP Passthru" , i ? "," : "" );
4885+ i ++ ;
4886+ }
4887+
48774888 iounit_pg1_flags = le32_to_cpu (ioc -> iounit_pg1 .Flags );
48784889 if (!(iounit_pg1_flags & MPI2_IOUNITPAGE1_NATIVE_COMMAND_Q_DISABLE )) {
48794890 pr_cont ("%sNCQ" , i ? "," : "" );
@@ -5627,10 +5638,9 @@ _base_static_config_pages(struct MPT3SAS_ADAPTER *ioc)
56275638 if (rc )
56285639 return rc ;
56295640 if (!ioc -> is_gen35_ioc && ioc -> manu_pg11 .EEDPTagMode == 0 ) {
5630- pr_err ("%s: overriding NVDATA EEDPTagMode setting\n" ,
5641+ pr_err ("%s: overriding NVDATA EEDPTagMode setting from 0 to 1 \n" ,
56315642 ioc -> name );
5632- ioc -> manu_pg11 .EEDPTagMode &= ~0x3 ;
5633- ioc -> manu_pg11 .EEDPTagMode |= 0x1 ;
5643+ ioc -> manu_pg11 .EEDPTagMode = 0x1 ;
56345644 mpt3sas_config_set_manufacturing_pg11 (ioc , & mpi_reply ,
56355645 & ioc -> manu_pg11 );
56365646 }
@@ -7041,11 +7051,12 @@ _base_handshake_req_reply_wait(struct MPT3SAS_ADAPTER *ioc, int request_bytes,
70417051 int i ;
70427052 u8 failed ;
70437053 __le32 * mfp ;
7054+ int ret_val ;
70447055
70457056 /* make sure doorbell is not in use */
70467057 if ((ioc -> base_readl_ext_retry (& ioc -> chip -> Doorbell ) & MPI2_DOORBELL_USED )) {
70477058 ioc_err (ioc , "doorbell is in use (line=%d)\n" , __LINE__ );
7048- return - EFAULT ;
7059+ goto doorbell_diag_reset ;
70497060 }
70507061
70517062 /* clear pending doorbell interrupts from previous state changes */
@@ -7135,6 +7146,10 @@ _base_handshake_req_reply_wait(struct MPT3SAS_ADAPTER *ioc, int request_bytes,
71357146 le32_to_cpu (mfp [i ]));
71367147 }
71377148 return 0 ;
7149+
7150+ doorbell_diag_reset :
7151+ ret_val = _base_diag_reset (ioc );
7152+ return ret_val ;
71387153}
71397154
71407155/**
@@ -8014,7 +8029,7 @@ _base_diag_reset(struct MPT3SAS_ADAPTER *ioc)
80148029
80158030 mutex_lock (& ioc -> hostdiag_unlock_mutex );
80168031 if (mpt3sas_base_unlock_and_get_host_diagnostic (ioc , & host_diagnostic ))
8017- goto out ;
8032+ goto unlock ;
80188033
80198034 hcb_size = ioc -> base_readl (& ioc -> chip -> HCBSize );
80208035 drsprintk (ioc , ioc_info (ioc , "diag reset: issued\n" ));
@@ -8034,7 +8049,7 @@ _base_diag_reset(struct MPT3SAS_ADAPTER *ioc)
80348049 ioc_info (ioc ,
80358050 "Invalid host diagnostic register value\n" );
80368051 _base_dump_reg_set (ioc );
8037- goto out ;
8052+ goto unlock ;
80388053 }
80398054 if (!(host_diagnostic & MPI2_DIAG_RESET_ADAPTER ))
80408055 break ;
@@ -8070,17 +8085,19 @@ _base_diag_reset(struct MPT3SAS_ADAPTER *ioc)
80708085 ioc_err (ioc , "%s: failed going to ready state (ioc_state=0x%x)\n" ,
80718086 __func__ , ioc_state );
80728087 _base_dump_reg_set (ioc );
8073- goto out ;
8088+ goto fail ;
80748089 }
80758090
80768091 pci_cfg_access_unlock (ioc -> pdev );
80778092 ioc_info (ioc , "diag reset: SUCCESS\n" );
80788093 return 0 ;
80798094
8080- out :
8095+ unlock :
8096+ mutex_unlock (& ioc -> hostdiag_unlock_mutex );
8097+
8098+ fail :
80818099 pci_cfg_access_unlock (ioc -> pdev );
80828100 ioc_err (ioc , "diag reset: FAILED\n" );
8083- mutex_unlock (& ioc -> hostdiag_unlock_mutex );
80848101 return - EFAULT ;
80858102}
80868103
0 commit comments