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,10 +20,11 @@
*/
/*
* 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,10 +136,40 @@
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,11 +248,11 @@
*/
if (mptsas_get_handshake_msg(mpt, memp, numbytes, accessp)) {
return (DDI_FAILURE);
}
- if (iocstatus = ddi_get16(accessp, &factsreply->IOCStatus)) {
+ 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,11 +267,11 @@
(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",
+ 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,16 +337,15 @@
/*
* 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);
+ mptsas_log(mpt, CE_NOTE, "SAS 3 supported Version (0x%x)",
+ msgversion);
mpt->m_MPI25 = TRUE;
} else {
- mptsas_log(mpt, CE_NOTE, "?mpt_sas%d MPI Version 0x%x\n",
- mpt->m_instance, msgversion);
+ mptsas_log(mpt, CE_NOTE, "MPI Version 0x%x", msgversion);
}
/*
* Calculate max frames per request based on DMA S/G length.
*/
@@ -430,11 +460,11 @@
*/
if (mptsas_get_handshake_msg(mpt, memp, numbytes, accessp)) {
return (DDI_FAILURE);
}
- if (iocstatus = ddi_get16(accessp, &factsreply->IOCStatus)) {
+ 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,11 +540,11 @@
*/
if (mptsas_get_handshake_msg(mpt, memp, numbytes, accessp)) {
return (DDI_FAILURE);
}
- if (iocstatus = ddi_get16(accessp, &portreply->IOCStatus)) {
+ 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,11 +622,11 @@
*/
if (mptsas_get_handshake_msg(mpt, memp, numbytes, accessp)) {
return (DDI_FAILURE);
}
- if (iocstatus = ddi_get16(accessp, &eventsreply->IOCStatus)) {
+ 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,21 +749,20 @@
*/
if (mptsas_get_handshake_msg(mpt, memp, numbytes, accessp)) {
return (DDI_FAILURE);
}
- if (iocstatus = ddi_get16(accessp, &initreply->IOCStatus)) {
+ 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,
- "?mpt%d: IOC Operational.\n", mpt->m_instance);
+ mptsas_log(mpt, CE_NOTE, "IOC Operational");
} else {
return (DDI_FAILURE);
}
return (DDI_SUCCESS);