Intel® Solid-State Drive 910 Series Device Drivers for Linux* This document describes how to install the Intel SSD 910 Series device drivers in the Linux operating system environment. Driver version: 13.0.0 This file is divided into the following sections: – Overview – Installing the Intel SSD 910 Series Device Driver – Driver Build Instructions – Loading the Drivers as Modules – Boot Setup Commands – Available Arguments – Troubleshooting Overview The Intel SSD 910 Series mpt2sas drivers are provided in binary and source form. The binaries are suitably formatted for use as installation diskettes or post-install binary upgrades. The source may be added to an existing kernel for custom kernel builds. NOTE: mpt2sas.ko is for Red Hat (RHEL5), and SuSE (SLES11). Installing the Intel SSD 910 Series Device Driver There are three methods for installing the Intel SSD 910 Series Device Driver: - Installing from Disk - Installing from RPM - Installing from Source Installing from Disk The Intel910_Linux.zip folder includes 1.44MB images that are suitably formatted to use as driver update disks for those installations where there is no bundled driver or when it's necessary to complete the install with the latest driver for: Red Hat RHEL5 (x86_64) SuSE SLES11 (x86_64) Below are some examples for creating a driver update disk. In the example, the driver version is (13.00.00.00-1). Extract the packaging from Linux system: # tar -zxvf mpt2sas-release.tar.gz # cd disks-1 for RHEL5 Update 6, architecture = x86_64 # gunzip mpt2sas-13.00.00.00-1-rhel5.6.x86_64.dd.gz # dd if=mpt2sas-13.00.00.00-1-rhel5.6.x86_64.dd of=/dev/fd0 for SLES11, architecture = x86_64 # gunzip mpt2sas-13.00.00.00-1-sles11.x86_64.dd.gz # dd if=mpt2sas-13.00.00.00-1-sles11.x86_64.dd of=/dev/fd0 The driver disk image can be transferred to a floppy disk with the rawrite* tool from DOS, or the dd utility in Linux. (The rawrite tool can be downloaded from: http://www.tux.org/pub/dos/rawrite) Installing From RPM RPMs should be used to upgrade the driver post-install. The RPMs contain binaries for the install kernel and the released updates from Red Hat and service packs from SuSE at the time the RPM was created. The packaging provides three forms of RPMs: - Generic - DKMS (Dynamic Kernel Module Support) - SuSE KMP Source RPMs are provided for the SuSE KMP and Generic RPMs. This allows one to generate binary RPM themselves for errata kernels that are released in between the normal release cycle. The driver update disks should be used for architectures not supported by RPM. Below is an example of installing the generic RPMs: In this example the driver version is (13.00.00.00-1). Extract the packaging from Linux system: # tar -zxvf mpt2sas-release.tar.gz # cd rpms-1 for RHEL5 (any Update), architecture = x86_64 # rpm -ivh mpt2sas-13.00.00.00-1-rhel5.x86_64.rpm for SLES11 (any Update), architecture = x86_64 # rpm -ivh mpt2sas-13.00.00.00-1-sles11.x86_64.rpm you will need to reboot for the driver to be loaded with newer version # reboot Below is an example installing the DKMS RPMs: In this example the driver version is (13.00.00.00-1). Extract the packaging from Linux system: # tar -zxvf mpt2sas-release.tar.gz # cd dkms-1 # tar -zxvf mpt2sas-13.00.00.00-1.dkms.tar.gz # install DKMS framework # rpm -ivh dkms-2.0.21.1-1.noarch.rpm # install DKMS rpm # rpm -ivh mpt2sas-13.00.00.00-1dkms.noarch.rpm you will need to reboot for the driver to be loaded with newer version # reboot NOTE: The DKMS packaging is providing only for RHEL5(x86_64), and SLES11(x86_64) pre-compiled binaries. Below is an example of un-installing the RPM: # rpm -qa | grep mpt2sas look for the string having mpt2sas, and copy # rpm -e mpt2sas-13.00.00.00-1-rhel5 # reboot Here is an example building the Generic Binary RPM from the source RPM. In this example the driver version is (13.00.00.00-1). Here is the procedure: Extract the packaging from Linux system: # tar -zxvf mpt2sas-release.tar.gz # cd srpms-1 # rpm -ivh mpt2sas-13.00.00.00-1.src.rpm for Red Hat # cd /usr/src/redhat/SPECS for SuSE # cd /usr/src/packages/SPECS build the binary # rpmbuild -bb mpt2sas.spec binary rpm located in this folder: # cd ../RPMS/`uname -m` Installing From Source It is recommended that you save the original source: # tar zcvf mpt2sas.orig.tar.gz /usr/src/linux/drivers/scsi/mpt2sas Continue with the instructions in the next section, "Adding or Upgrading the Intel SSD 910 Series Driver Source to the Linux Kernel." Adding or Upgrading the Intel SSD 910 Series Driver Source to the Linux Kernel In the generic RPMs, the driver source will be placed in your installations RPM SOURCES directory; for SuSE (/usr/src/packages/SOURCES), and for Red Hat (/usr/src/redhat/SOURCES). It is also in the top folder of the packaging. In this example the driver version is (13.00.00.00-1). Extract the packaging from Linux system: # tar -zxvf mpt2sas-release.tar.gz # tar -zxvf mpt2sas-13.00.00.00.tar.gz copy driver source code to kernel tree # mkdir -p /usr/src/linux/drivers/scsi/mpt2sas # cp -fRv drivers/scsi/mpt2sas/* /usr/src/linux/drivers/scsi/mpt2sas Driver Build Instructions The following examples show how to configure and build the Intel SSD 910 Series driver(s) as kernel modules. In this example the driver version is (13.00.00.00-1). Extract the packaging from Linux system: # tar -zxvf mpt2sas-release.tar.gz # tar -zxvf mpt2sas-13.00.00.00.tar.gz # cd mpt2sas # ./compile # ./load Alternatively, use the following procedure to build the driver in kernel tree: 1. From the /usr/src/linux directory, ensure a clean kernel source tree by executing the following command: # make mrproper 2. From the /usr/src/linux directory, run the normal kernel configuration routine: # make oldconfig or: # make config or: # make menuconfig or: # make xconfig 3. Below are the directions for finding the entry in menuconfig ncurses display: Device Drivers ---> SCSI device support ---> SCSI low-level drivers ---> LSI MPT Fusion SAS 2.0 Device Driver (128) LSI MPT Fusion Max number of SG Entries (16 - 128) (NEW) [*] LSI MPT Fusion logging facility On the sub menu, select the "LSI MPT Fusion SAS 2.0 Device Driver" line, and then enter "m" to configure for building this support as a module. (Alternatively, you can enter "y" to have this support built into the kernel.) NOTES: - CONFIG_SCSI_MPT2SAS_MAX_SGE: This option allows you to specify the maximum number of scatter-gather entries per I/O. The driver default is 128, which matches MAX_HW_SEGMENTS. However, it may decreased down to 16. Decreasing this parameter will reduce memory requirements on a per controller instance. - CONFIG_SCSI_MPT2SAS_LOGGING: This turns on a logging facility. 4. Save the kernel configuration changes. Follow any post configuration instructions, and perform all tasks on your platform to rebuild the kernel. This typically includes: # make dep and: # make bzImage # varies on non-Intel platforms 5. Rebuild the kernel modules: # make modules 6. Optionally, do everything needed on your platform to install a newly built kernel. (possibly temporarily, for sanity testing) Be careful with this step, and be sure you know what you're doing! It is easy to wipe out a good/stable kernel from this point forward in the procedure! 7. (Re)Install newly compiled kernel modules: # make modules_install The output from the last step should look something like this: Installing modules under /lib/modules/2.6.30/block Installing modules under /lib/modules/2.6.30/net Installing modules under /lib/modules/2.6.30/ipv4 Installing modules under /lib/modules/2.6.30/scsi Installing modules under /lib/modules/2.6.30/fs Installing modules under /lib/modules/2.6.30/fs Installing modules under /lib/modules/2.6.30/cdrom Installing modules under /lib/modules/2.6.30/video Installing modules under /lib/modules/2.6.30/net Installing modules under /lib/modules/2.6.30/misc 1. Update your /boot sector with the new System.map and bzImage, re-create your ramdisk image (refer to your vendor literature), and update your boot manager--i.e., lilo.conf, grub.conf. If you are using lilo, you must run lilo -v prior to reboot. 2. Shut down the system: Example: # shutdown -r now and then reboot with the newly built Linux kernel. Loading the Drivers As Modules Use the following command to load the driver binary: Example: load the Fusion-MPT mpt2sas driver. # insmod mpt2sas.ko mpt2sas version 02.255.01.06 loaded scsi4 : Fusion MPT SAS Host ACPI: PCI Interrupt 0000:0b:00.0[A] -> GSI 16 (level, low) -> IRQ 177 PCI: Setting latency timer of device 0000:0b:00.0 to 64 mpt2sas0: 64 BIT PCI BUS DMA ADDRESSING SUPPORTED, total mem (6092056 kB) mpt2sas0: PCI-MSI-X enabled: IRQ 122 mpt2sas0: iomem(0xfc47c000), mapped(0xffffc20000058000), size(16384) mpt2sas0: ioport(0xdc00), size(256) mpt2sas0: Allocated physical memory: size(1028 kB) mpt2sas0: Current Controller Queue Depth(435), Max Controller Queue Depth(942) mpt2sas0: Scatter Gather Elements per IO(128) mpt2sas0: LSI*SAS2108: FWVersion(02.250.00.00), ChipRevision(0x03), BiosVersion(00.00.00.00) mpt2sas0: Protocol=(Initiator,Target), Capabilities=(TLR,EEDP,Snapshot Buffer, Diag Trace Buffer, Task Set Full,NCQ) mpt2sas0: sending port enable !! mpt2sas0: port enable: SUCCESS mpt2sas0: host_add: handle(0x0001), sas_addr(0x500605b0006b9310), phys(8) Boot Setup Commands 1. Syntax Setup commands can be passed to the SCSI host driver mpt2sas as a string variable using 'insmod'. The command line options can be found by typing the modinfo command. Example: # modinfo mpt2sas.ko filename: mpt2sas.ko version: 02.255.01.06 license: GPL description: LSI* MPT Fusion SAS 2.0 Device Driver author: LSI* Corporation srcversion: 9D219379A3A703101318619 alias: pci:v00001000d00000065sv*sd*bc*sc*i* alias: pci:v00001000d00000064sv*sd*bc*sc*i* alias: pci:v00001000d00000077sv*sd*bc*sc*i* alias: pci:v00001000d00000076sv*sd*bc*sc*i* alias: pci:v00001000d00000074sv*sd*bc*sc*i* alias: pci:v00001000d00000072sv*sd*bc*sc*i* alias: pci:v00001000d00000070sv*sd*bc*sc*i* depends: scsi_mod,scsi_transport_sas vermagic: 2.6.16.60-0.21-debug SMP gcc-4.1 parm: logging_level: bits for enabling additional logging info (default=0) parm: command_retry_count: Device discovery TUR command retry count: (default=144) (int) parm: max_lun: max lun, default=16895 (int) parm: max_queue_depth: max controller queue depth (int) parm: max_sgl_entries: max sg entries (int) parm: msix_disable: disable msix routed interrupts (default=0) (int) 2. Available Arguments 2.1 The following command enables additional info sent to the Linux system log which can be used for troubleshooting problems. The default is to pass the logging level in hex format. Each bit is bitwise setting. Please refer to in mpt2sas_debug.h where the logging levels are defined. Example: this enables firmware events and reply with additional info #insmod mpt2sas.ko logging_level=0x218 Example: this enables handshake and initialization logging #insmod mpt2sas.ko logging_level=0x420 Example: this enables application using IOCTLS logging #insmod mpt2sas.ko logging_level=0x8000 Example: this enables manufacture configuration logging #insmod mpt2sas.ko logging_level=0x800 Example: this enables host reset and task management logging #insmod mpt2sas.ko logging_level=0x2100 Example: this enables task set full logging #insmod mpt2sas.ko logging_level=0x80000 NOTE: Many of the driver debug prints are using KERN_DEBUG and KERN_INFO logging level. Red Hat and SuSE tend to set the default logging level set to a higher level, perhaps KERN_WARNING. When set to KERN_WARNING you will be missing most the debug info. To turn on the additional logs, you will need to see the set klogd to KERN_DEBUG. In both SuSE and Red Hat offer configuration of klogd from the file /etc/sysconfig/syslog. Please refer to the klogd manual page for more info. 2.2 The following command allows configuration of the command_retry_count. This tunable is for configuring the retry count for discovering devices. This is to handle some devices which report BUSY status for long duration of time. Example: this sets the retry count to 300 #insmod mpt2sas.ko command_retry_count=300 2.3 The following command allows configuration max number of luns. The default is 511 luns. Please note that the scsi-mid layer global parameter is max_report_luns default is 511. You will need to modify max_report_luns parameter if you plan to use more than 511 luns in mpt2sas. Example: this sets the max lun to 100 #insmod mpt2sas.ko max_lun=100 2.4 The following command allows configuration the controller queue depth. The default is 600. The maximum upper limit is set by controller firmware in facts->RequestCredit. Example: this sets the max queue depth to 3000 #insmod mpt2sas.ko max_queue_depth=3000 2.5 The following command allows configuration the controller maximum scatter gather entries. This is maximum number of scatter-gather entries per I/O. The driver default is 128, which matches MAX_HW_SEGMENTS. However, it may decreased down to 16. Decreasing this parameter will reduce memory requirements on a per controller instance. Example: this sets the scatter gather limit to 32 #insmod mpt2sas.ko max_sgl_entries=32 Troubleshooting 1. Sense translation is built into the Linux kernel; providing SCSI-3 opcode string lookup and a LARGE sorted table of 463 unique SCSI-3 Additional Sense Code & Qualifier (ASC/ASCQ) strings, translated directly from a text file from the SCSI T10.org's ftp site: ftp://ftp.t10.org/t10/drafts/spc2/asc-num.txt Example enabling sense decoding #sysctl -w dev.scsi.logging_level=0x1000 2. Additional debug logging for device discovery can be enabled in the Linux kernel: Example: #sysctl -w dev.scsi.logging_level=0x1C0 3. Additional scripts in the sub folder scripts are provided with the driver source code, they can be useful in obtaining detailed info pertaining to your configuration. Extract the packaging from Linux system: # tar -zxvf mpt2sas-release.tar.gz # tar -zxvf mpt2sas-13.00.00.00.tar.gz # cd mpt2sas/scripts The hba_properties provide configuration info pertaining the host controller; the controller firmware, bios, and driver versions. Example: # ./hba_properties host4: ioc0: fw=02.250.00.00 bios=00.00.00.00 driver=02.255.01.06 mpi=200.0b LSI*SAS2108: board_name=Eval Board assembly= tracer= nvdata_persistent=00h nvdata_default=00h io_delay=08 device_delay=144 logging_level=00000000h fw_queue_depth=942 sas_address=0x500605b0006b9310 Additional controller configuration info: # ./shost_attributes host4 board_assembly: board_name:Eval Board board_tracer: cmd_per_lun:7 device_delay:144 fw_queue_depth:942 host_busy:0 host_sas_address:0x500605b0006b9310 io_delay:08 logging_level:00000000h proc_name:mpt2sas scan:cat: scan: Permission denied sg_tablesize:128 state:running uevent:cat: uevent: Permission denied unchecked_isa_dma:0 unique_id:0 version_bios:00.00.00.00 version_fw:02.250.00.00 version_mpi:200.0b version_nvdata_default:00h version_nvdata_persistent:00h version_product:LSI*SAS2108 Expander configuration info # ./expander_attribute expander-4:0 component_id:547 component_revision_id:2 component_vendor_id:LSI* level:1 product_id:Bobcat product_rev:B0 uevent:cat: uevent: Permission denied vendor_id:LSI* CORP expander-4:1 component_id:547 component_revision_id:4 component_vendor_id:LSI* level:1 product_id:Bobcat product_rev:0200 uevent:cat: uevent: Permission denied vendor_id:LSI* CORP expander-4:2 component_id:531 component_revision_id:0 component_vendor_id:LSI* level:1 product_id:DE5300-SAS product_rev:0216 uevent:cat: uevent: Permission denied vendor_id:LSI* Device configuration info # ./sdev_attributes 4:0:20:0 delete: device_blocked:0 iocounterbits:32 iodone_cnt:0x26 ioerr_cnt:0x0 iorequest_cnt:0x26 model:ST973402SS queue_depth:254 queue_type:simple rescan: retries:5 rev:MS00 sas_address:0x5000c5000f21798e sas_device_handle:0x0020 scsi_level:6 state:running iocounterbits:32 iodone_cnt:0x26 ioerr_cnt:0x0 iorequest_cnt:0x26 model:ST973402SS queue_depth:254 queue_type:simple rescan: retries:5 rev:MS00 sas_address:0x5000c5000f21783e sas_device_handle:0x0022 scsi_level:6 state:running timeout:60 type:0 uevent: vendor:SEAGATE ********************************************************************************************************** INFORMATION IN THIS DOCUMENT IS PROVIDED IN CONNECTION WITH INTEL PRODUCTS. NO LICENSE, EXPRESS OR IMPLIED, BY ESTOPPEL OR OTHERWISE, TO ANY INTELLECTUAL PROPERTY RIGHTS IS GRANTED BY THIS DOCUMENT. EXCEPT AS PROVIDED IN INTEL'S TERMS AND CONDITIONS OF SALE FOR SUCH PRODUCTS, INTEL ASSUMES NO LIABILITY WHATSOEVER AND INTEL DISCLAIMS ANY EXPRESS OR IMPLIED WARRANTY, RELATING TO SALE AND/OR USE OF INTEL PRODUCTS INCLUDING LIABILITY OR WARRANTIES RELATING TO FITNESS FOR A PARTICULAR PURPOSE, MERCHANTABILITY, OR INFRINGEMENT OF ANY PATENT, COPYRIGHT OR OTHER INTELLECTUAL PROPERTY RIGHT. A "Mission Critical Application" is any application in which failure of the Intel Product could result, directly or indirectly, in personal injury or death. SHOULD YOU PURCHASE OR USE INTEL'S PRODUCTS FOR ANY SUCH MISSION CRITICAL APPLICATION, YOU SHALL INDEMNIFY AND HOLD INTEL AND ITS SUBSIDIARIES, SUBCONTRACTORS AND AFFILIATES, AND THE DIRECTORS, OFFICERS, AND EMPLOYEES OF EACH, HARMLESS AGAINST ALL CLAIMS COSTS, DAMAGES, AND EXPENSES AND REASONABLE ATTORNEYS' FEES ARISING OUT OF, DIRECTLY OR INDIRECTLY, ANY CLAIM OF PRODUCT LIABILITY, PERSONAL INJURY, OR DEATH ARISING IN ANY WAY OUT OF SUCH MISSION CRITICAL APPLICATION, WHETHER OR NOT INTEL OR ITS SUBCONTRACTOR WAS NEGLIGENT IN THE DESIGN, MANUFACTURE, OR WARNING OF THE INTEL PRODUCT OR ANY OF ITS PARTS. Intel may make changes to specifications and product descriptions at any time, without notice. Designers must not rely on the absence or characteristics of any features or instructions marked "reserved" or "undefined". Intel reserves these for future definition and shall have no responsibility whatsoever for conflicts or incompatibilities arising from future changes to them. The information here is subject to change without notice. Do not finalize a design with this information. The products described in this document may contain design defects or errors known as errata which may cause the product to deviate from published specifications. Current characterized errata are available on request. Contact your local Intel sales office or your distributor to obtain the latest specifications and before placing your product order. Copies of documents which have an order number and are referenced in this document, or other Intel literature, may be obtained by calling 1-800-548-4725, or go to: http://www.intel.com/design/literature.htm Intel does not control or audit the design or implementation of third party benchmark data or Web sites referenced in this document. Intel encourages all of its customers to visit the referenced Web sites or others where similar performance benchmark data are reported and confirm whether the referenced benchmark data are accurate and reflect performance of systems available for purchase. Intel and the Intel logo are trademarks of Intel Corporation in the U.S. and/or other countries. *Other names and brands may be claimed as the property of others. Copyright © 2012 Intel Corporation. All rights reserved Portions © 2009 LSI Corporation Fusion-MPT is a trademark of LSI* Corporation. Linux is a registered trademark of Linus Torvalds. Red Hat is a registered trademark of Red Hat Software, Inc. SuSE is a registered trademark of Novell, Inc **********************************************************************************************************