Print this page
NEX-17006 backport mpt_sas tri-mode parts support change
9044 Need support for mpt_sas tri-mode parts
9045 Clean up mpt_sas compiler warnings
9046 mptsas_handle_topo_change can return without its locks held
9047 workaround SAS3408 firmware issue
Reviewed by: Jerry Jelinek <jerry.jelinek@joyent.com>
Reviewed by: Hans Rosenfeld <hans.rosenfeld@joyent.com>
Reviewed by: Albert Lee <trisk@forkgnu.org>
Reviewed by: Yuri Pankov <yuripv@yuripv.net>
Approved by: Richard Lowe <richlowe@richlowe.net>
NEX-16174 scsi error messages should go to system log only
Reviewed by: Dan Fields <dan.fields@nexenta.com>
Reviewed by: Roman Strashkin <roman.strashkin@nexenta.com>
NEX-9450 NMI panic with SAS9305-16e HBA installed and JBOD connected
Reviewed by: Sanjay Nadkarni <sanjay.nadkarni@nexenta.com>
Reviewed by: Saso Kiselkov <saso.kiselkov@nexenta.com>
NEX-2103 12G mpt_sas needs additional minor enhancements
NEX-1889 mpt_sas should support 12G HBAs
*** 20,29 ****
--- 20,30 ----
*/
/*
* Copyright 2009 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
+ * Copyright 2017 Nexenta Systems, Inc. All rights reserved.
* Copyright (c) 2014, Tegile Systems Inc. All rights reserved.
* Copyright (c) 2017, Joyent, Inc.
*/
/*
*** 135,144 ****
--- 136,175 ----
case MPI25_MFGPAGE_DEVID_SAS3108_1:
case MPI25_MFGPAGE_DEVID_SAS3108_2:
case MPI25_MFGPAGE_DEVID_SAS3108_5:
case MPI25_MFGPAGE_DEVID_SAS3108_6:
return ("SAS3108");
+ case MPI26_MFGPAGE_DEVID_SAS3216:
+ case MPI26_MFGPAGE_DEVID_SAS3316_1:
+ case MPI26_MFGPAGE_DEVID_SAS3316_2:
+ case MPI26_MFGPAGE_DEVID_SAS3316_3:
+ case MPI26_MFGPAGE_DEVID_SAS3316_4:
+ return ("SAS3216");
+ case MPI26_MFGPAGE_DEVID_SAS3224:
+ case MPI26_MFGPAGE_DEVID_SAS3324_1:
+ case MPI26_MFGPAGE_DEVID_SAS3324_2:
+ case MPI26_MFGPAGE_DEVID_SAS3324_3:
+ case MPI26_MFGPAGE_DEVID_SAS3324_4:
+ return ("SAS3224");
+ case MPI26_MFGPAGE_DEVID_SAS3408:
+ return ("SAS3408");
+ case MPI26_MFGPAGE_DEVID_SAS3416:
+ return ("SAS3416");
+ case MPI26_MFGPAGE_DEVID_SAS3508:
+ case MPI26_MFGPAGE_DEVID_SAS3508_1:
+ return ("SAS3508");
+ case MPI26_MFGPAGE_DEVID_SAS3516:
+ case MPI26_MFGPAGE_DEVID_SAS3516_1:
+ return ("SAS3516");
+ case MPI26_MFGPAGE_DEVID_SAS3616:
+ return ("SAS3616");
+ case MPI26_MFGPAGE_DEVID_SAS3708:
+ return ("SAS3708");
+ case MPI26_MFGPAGE_DEVID_SAS3716:
+ return ("SAS3716");
+ case MPI26_MFGPAGE_DEVID_SAS4008:
+ return ("SAS4008");
default:
return ("?");
}
}
*** 217,227 ****
*/
if (mptsas_get_handshake_msg(mpt, memp, numbytes, accessp)) {
return (DDI_FAILURE);
}
! if (iocstatus = ddi_get16(accessp, &factsreply->IOCStatus)) {
mptsas_log(mpt, CE_WARN, "mptsas_ioc_do_get_facts_reply: "
"IOCStatus=0x%x, IOCLogInfo=0x%x", iocstatus,
ddi_get32(accessp, &factsreply->IOCLogInfo));
return (DDI_FAILURE);
}
--- 248,258 ----
*/
if (mptsas_get_handshake_msg(mpt, memp, numbytes, accessp)) {
return (DDI_FAILURE);
}
! if ((iocstatus = ddi_get16(accessp, &factsreply->IOCStatus)) != 0) {
mptsas_log(mpt, CE_WARN, "mptsas_ioc_do_get_facts_reply: "
"IOCStatus=0x%x, IOCLogInfo=0x%x", iocstatus,
ddi_get32(accessp, &factsreply->IOCLogInfo));
return (DDI_FAILURE);
}
*** 236,246 ****
(void) sprintf(buf, "%u.%u.%u.%u",
ddi_get8(accessp, &factsreply->FWVersion.Struct.Major),
ddi_get8(accessp, &factsreply->FWVersion.Struct.Minor),
ddi_get8(accessp, &factsreply->FWVersion.Struct.Unit),
ddi_get8(accessp, &factsreply->FWVersion.Struct.Dev));
! mptsas_log(mpt, CE_NOTE, "?MPT Firmware version v%s (%s)\n",
buf, mptsas_devid_type_string(mpt));
(void) ddi_prop_update_string(DDI_DEV_T_NONE, mpt->m_dip,
"firmware-version", buf);
/*
--- 267,277 ----
(void) sprintf(buf, "%u.%u.%u.%u",
ddi_get8(accessp, &factsreply->FWVersion.Struct.Major),
ddi_get8(accessp, &factsreply->FWVersion.Struct.Minor),
ddi_get8(accessp, &factsreply->FWVersion.Struct.Unit),
ddi_get8(accessp, &factsreply->FWVersion.Struct.Dev));
! mptsas_log(mpt, CE_NOTE, "MPT Firmware version v%s (%s)",
buf, mptsas_devid_type_string(mpt));
(void) ddi_prop_update_string(DDI_DEV_T_NONE, mpt->m_dip,
"firmware-version", buf);
/*
*** 306,321 ****
/*
* Set flag to check for SAS3 support.
*/
msgversion = ddi_get16(accessp, &factsreply->MsgVersion);
if (msgversion >= MPI2_VERSION_02_05) {
! mptsas_log(mpt, CE_NOTE, "?mpt_sas%d SAS 3 Supported\n",
! mpt->m_instance);
mpt->m_MPI25 = TRUE;
} else {
! mptsas_log(mpt, CE_NOTE, "?mpt_sas%d MPI Version 0x%x\n",
! mpt->m_instance, msgversion);
}
/*
* Calculate max frames per request based on DMA S/G length.
*/
--- 337,351 ----
/*
* Set flag to check for SAS3 support.
*/
msgversion = ddi_get16(accessp, &factsreply->MsgVersion);
if (msgversion >= MPI2_VERSION_02_05) {
! mptsas_log(mpt, CE_NOTE, "SAS 3 supported Version (0x%x)",
! msgversion);
mpt->m_MPI25 = TRUE;
} else {
! mptsas_log(mpt, CE_NOTE, "MPI Version 0x%x", msgversion);
}
/*
* Calculate max frames per request based on DMA S/G length.
*/
*** 430,440 ****
*/
if (mptsas_get_handshake_msg(mpt, memp, numbytes, accessp)) {
return (DDI_FAILURE);
}
! if (iocstatus = ddi_get16(accessp, &factsreply->IOCStatus)) {
mptsas_log(mpt, CE_WARN, "mptsas_ioc_do_get_port_facts_reply: "
"IOCStatus=0x%x, IOCLogInfo=0x%x", iocstatus,
ddi_get32(accessp, &factsreply->IOCLogInfo));
return (DDI_FAILURE);
}
--- 460,470 ----
*/
if (mptsas_get_handshake_msg(mpt, memp, numbytes, accessp)) {
return (DDI_FAILURE);
}
! if ((iocstatus = ddi_get16(accessp, &factsreply->IOCStatus)) != 0) {
mptsas_log(mpt, CE_WARN, "mptsas_ioc_do_get_port_facts_reply: "
"IOCStatus=0x%x, IOCLogInfo=0x%x", iocstatus,
ddi_get32(accessp, &factsreply->IOCLogInfo));
return (DDI_FAILURE);
}
*** 510,520 ****
*/
if (mptsas_get_handshake_msg(mpt, memp, numbytes, accessp)) {
return (DDI_FAILURE);
}
! if (iocstatus = ddi_get16(accessp, &portreply->IOCStatus)) {
mptsas_log(mpt, CE_WARN, "mptsas_ioc_do_enable_port_reply: "
"IOCStatus=0x%x, IOCLogInfo=0x%x", iocstatus,
ddi_get32(accessp, &portreply->IOCLogInfo));
return (DDI_FAILURE);
}
--- 540,550 ----
*/
if (mptsas_get_handshake_msg(mpt, memp, numbytes, accessp)) {
return (DDI_FAILURE);
}
! if ((iocstatus = ddi_get16(accessp, &portreply->IOCStatus)) != 0) {
mptsas_log(mpt, CE_WARN, "mptsas_ioc_do_enable_port_reply: "
"IOCStatus=0x%x, IOCLogInfo=0x%x", iocstatus,
ddi_get32(accessp, &portreply->IOCLogInfo));
return (DDI_FAILURE);
}
*** 592,602 ****
*/
if (mptsas_get_handshake_msg(mpt, memp, numbytes, accessp)) {
return (DDI_FAILURE);
}
! if (iocstatus = ddi_get16(accessp, &eventsreply->IOCStatus)) {
mptsas_log(mpt, CE_WARN,
"mptsas_ioc_do_enable_event_notification_reply: "
"IOCStatus=0x%x, IOCLogInfo=0x%x", iocstatus,
ddi_get32(accessp, &eventsreply->IOCLogInfo));
return (DDI_FAILURE);
--- 622,632 ----
*/
if (mptsas_get_handshake_msg(mpt, memp, numbytes, accessp)) {
return (DDI_FAILURE);
}
! if ((iocstatus = ddi_get16(accessp, &eventsreply->IOCStatus)) != 0) {
mptsas_log(mpt, CE_WARN,
"mptsas_ioc_do_enable_event_notification_reply: "
"IOCStatus=0x%x, IOCLogInfo=0x%x", iocstatus,
ddi_get32(accessp, &eventsreply->IOCLogInfo));
return (DDI_FAILURE);
*** 719,739 ****
*/
if (mptsas_get_handshake_msg(mpt, memp, numbytes, accessp)) {
return (DDI_FAILURE);
}
! if (iocstatus = ddi_get16(accessp, &initreply->IOCStatus)) {
mptsas_log(mpt, CE_WARN, "mptsas_do_ioc_init_reply: "
"IOCStatus=0x%x, IOCLogInfo=0x%x", iocstatus,
ddi_get32(accessp, &initreply->IOCLogInfo));
return (DDI_FAILURE);
}
if ((ddi_get32(mpt->m_datap, &mpt->m_reg->Doorbell)) &
MPI2_IOC_STATE_OPERATIONAL) {
! mptsas_log(mpt, CE_NOTE,
! "?mpt%d: IOC Operational.\n", mpt->m_instance);
} else {
return (DDI_FAILURE);
}
return (DDI_SUCCESS);
--- 749,768 ----
*/
if (mptsas_get_handshake_msg(mpt, memp, numbytes, accessp)) {
return (DDI_FAILURE);
}
! if ((iocstatus = ddi_get16(accessp, &initreply->IOCStatus)) != 0) {
mptsas_log(mpt, CE_WARN, "mptsas_do_ioc_init_reply: "
"IOCStatus=0x%x, IOCLogInfo=0x%x", iocstatus,
ddi_get32(accessp, &initreply->IOCLogInfo));
return (DDI_FAILURE);
}
if ((ddi_get32(mpt->m_datap, &mpt->m_reg->Doorbell)) &
MPI2_IOC_STATE_OPERATIONAL) {
! mptsas_log(mpt, CE_NOTE, "IOC Operational");
} else {
return (DDI_FAILURE);
}
return (DDI_SUCCESS);