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);