Redhat Linux 9 and AS2.1 MegaRAID driver Version 2.10.1 Contents 1.0 Supported RAID controllers 1.1 Compatible Firmware Versions 2.0 Install Instructions 2.1 Downloading and Creating the Driver Diskette 2.2 Installing the Driver for the PERC/CERC 2.2.1 Installing the Driver during OS Installation 2.2.2 Updating the Driver using RPM after OS is Installed 2.2.3 Building the Driver using DKMS for other kernels 2.2.4 Uninstalling the Driver 3.0 Fixes and Enhancements 4.0 Important Information 5.0 Additional Information 6.0 Release History ============================== 1.0 Supported RAID controllers ============================== This driver supports the following controllers: PERC 4/Di, 4/DC, 4/SC PERC 3/QC, 3/DC, 3/DCL, 3/SC CERC ATA100/4CH 1.1 Compatible Firmware Versions ================================ This device driver is compatible with the following firmware versions: Controller Minimum firmware level Description ---------- ---------------------- ----------- PERC 3/QC 1.92 PERC 3 Quad Channel PERC 3/DC 1.92 PERC 3 Dual Channel PERC 3/DCL 1.92 PERC 3 Dual Channel Lite PERC 3/SC 1.92 PERC 3 Single Channel PERC 4/Di 4.04 PERC 4 Integrated on PE 1750 PERC 4/Di 2.37 PERC 4 Integrated on PE 2600 PERC 4/SC 3.28 PERC 4 Single Channel PERC 4/DC 3.28 PERC 4 Dual Channel CERC ATA100/4CH 6.62 CERC Quad Channel IDE ======================== 2.0 Install Instructions ======================== 2.1 Downloading and Creating the Driver Diskette ================================================= You will need a formatted 3 1/2 inch floppy diskette for the following procedure. 1. On a Linux system: Download the file xxxx.tar.gz to a temporary directory on your working system. Extract the file to the floppy disk as follows: Type the following commands under a Linux command shell: mount /dev/fd0 /mnt/floppy tar xvzf (full path to the archive) -C /mnt/floppy (Eg: /temp/xxxx.tar.gz) umount /mnt/floppy NOTE: Winzip does not extract the driver files correctly under Microsoft Windows. 2. On a Windows system: You will need a formatted 3 1/2 inch floppy diskette for the following procedure. Download the xxxx.exe file to a temporary directory on your Windows system. 1) Double click on the file to run the executable. 2) Click on the Continue button. This diskette contains the same files as the .tar.gz file above. 2.2 Installing the Driver for the PERC/CERC =========================================== This PERC/CERC driver package contains compiled binary drivers for the following kernels: Fresh Install using driver diskette ----------------------------------- Redhat Linux AS 2.1 - 2.4.9-e.3 (uP, smp and enterprise) Redhat Linux 9 - 2.4.20-6 (uP, smp and bigmem) - 2.4.20-8 (uP, smp and bigmem) Upgrade using RPM ----------------- Redhat Linux AS 2.1 - 2.4.9-e.3 (uP, smp and enterprise) Redhat Linux 9 - 2.4.20-9 (uP, smp and bigmem) - 2.4.20-16.9 (uP, smp and bigmem) NOTE: The kernel versions mentioned above are Dell supported kernels. For all other kernels, the driver can be automatically compiled and installed. This operation is done only for the currently running kernel and requires the kernel-source and gcc packages to be installed on the system. There are two ways of installing the device driver on Redhat Linux. One is using a driver disk during OS installation and the second is using a driver RPM to update the driver after OS is installed. The steps for both of these methods are provided below. All the files needed for both methods are included in the diskette created above. For more detailed installation instructions of Red Hat, please refer to the OS installation guide at http://www.dell.com/linux. 2.2.1 Installing the Driver during OS Installation ================================================== The following files are needed to install the device driver during a fresh installation. a. modinfo b. modules.cgz c. modules.dep d. pcitable e. rhdd-6.1 These five files are contained in the driver diskette created above. Instructions for Redhat Linux 9 ------------------------------- 1. Boot normally from the Redhat installation CD-Rom. 2. Type 'expert noprobe dd' on the boot prompt. 3. At the "Do you have a driver disk" screen, select Yes. 4. At the "Driver Disk Source" screen, select fd0 (for floppy) 5. At the "Insert Driver Disk" screen, insert the driver disk created above and select OK to continue. 6. At the "Error - No devices of the appropriate type were found..." screen, select "Manually choose". 7. Scroll down and select the "MegaRAID2" driver. 8. Select any additional devices in your system manually. 9. Complete the installation as directed by the install. Instructions for Redhat Enterprise Linux AS 2.1 ----------------------------------------------- 1. Boot normally from the Redhat installation CD-Rom. 2. Type 'expert noprobe dd' on the boot prompt. 3. At the "Do you have a driver disk" screen, select 'Yes'. 4. At the "Insert your driver disk" screen, insert the driver disk created above and select 'OK' to continue. 5. Select the appropriate choices on the next three prompts. 6. At the "I don't have any special device..." select 'Add Device'. 7. At the "What kind of devices would you like to add", select 'SCSI'. 8. Scroll down and select the "MegaRAID2" driver, and select 'OK'. 9. Select any additional devices in your system manually by selecting 'Add Device' or select 'Done' to proceed. 10. Complete the installation as directed by the install. 2.2.2 Updating the Driver using RPM after OS is Installed ========================================================= Type the following commands under a Linux command shell: mount /dev/fd0 /mnt/floppy cd /mnt/floppy source install.sh Reboot the system for the changes to take effect. NOTE: The megaraid2 module in only installed for the kernel currently running. 2.2.3 Building the Driver using DKMS for other kernels ====================================================== NOTE: If a binary errata kernel RPM is installed after installing the megaraid2 driver RPM, error messages may be seen when building the INITRD image. This is because the megaraid2 module is not installed for this kernel and is being referenced in the /etc/modules.conf file. To build the megaraid2 driver for any kernel, the following prerequisite packages need to be installed: - The megaraid2 RPM included in this package - Kernel source for the kernel in question - Kernel building tools such as gcc To build and install the megaraid2 driver for a kernel, type the following commands under a Linux shell: # dkms build -m megaraid2 -v 2.10.1 -k # dkms install -m megaraid2 -v 2.10.1 -k where is the kernel version. E.g. 2.4.20-9 OR 2.4.9-e.24enterprise Refer to the DKMS man page for more information. # man dkms 2.2.4 Uninstalling the Driver ============================= If this driver has been installed using the RPM as described in section 2.2.2, it can be uninstalled by the following command: rpm -e megaraid2 Reboot the system for the changes to take effect. ========================== 3.0 Fixes and Enhancements ========================== 1. Fixed a bug where PCI-Express based controllers would not be able to use more than 4GB main memory with 2.10.0 driver. 2. Remove redundant PCI-handle allocation. 3. Added support for SATA PCI-Express controller. =================== 4.0 Important Notes =================== - A warning message is encountered when a logical disk is configured without a partition. After Linux OS installation or any action that causes system devices to be scanned, you will see the following warning message right after the login screen: "megaraid: invalid partition on this disk on channel 0" This message will disappear once a partition is created on all logical drives or if the logical drive without a partition is deleted. - A warning message is seen if errata kernel RPMs are installed after installing the megaraid2 driver. The following message is printed: "No module megaraid2 found for kernel x.y.z-p" This message is seen because the /etc/modules.conf file specifies that the megaraid2 driver is to be added to the initial RAM disk (initrd), but the driver is not yet built and installed for the kernel by DKMS. To boot from this kernel, the megaraid2 driver should be built and installed for the kernel as described in section 2.2.3 and then adding the line: initrd /initrd-x.y.z-p.img to /etc/grub.conf in the stanza for the kernel version installed. ========================== 5.0 Additional information ========================== dkms-1.00-1.noarch.rpm - Dynamic Kernel Module Support utility (DKMS) install.sh - Installation script. license.txt, GPL - License information megaraid2-2.10.1-2dkms.noarch.rpm - Megaraid2 binary and source RPM with DKMS support. readme.txt - This document README.dkms - Documentation for DKMS =================== 6.0 Release History =================== ### Version 2.10.0 i. Added vendor ids and device ids for PCI-Express controllers, PERC4e/Si, PERC4e/Di, PERC4e/DC, PERC4e/SC ii. Backport some minor changes from 2.6 kernel version of the driver. ### Version 2.00.9a Fri Oct 3 18:04:29 EDT 2003 - Atul Mukker i. Minor changes which are brough in when sync'ing with kernel 2.9-test6. ii. Use sizeof(mbox_t) in synchronous routines instead of hard-coded value of 16 bytes. iii. De-couple adapter->host->pci_dev. Replace with adapter->pdev ### Version 2.00.9 Thu Sep 4 17:49:42 EDT 2003 - Atul Mukker i. For extended passthru commands, 64-bit scatter-gather list and 64-bit mailbox address must only be used if the controller supports extended CDBs and 64-bit addressing and the kernel is configured to support memory beyond 4GB. With 2.00.8 and previous drivers, if the controllers supports extended CDBs but the kernel does not support high memory - the driver prepares a 32-bit sg list but the mailbox address is chosen to be 64-bit. This causes FW to incorrectly read 32-bit (8 bytes) sg list as 64-bit (12 bytes) sglist. This would cause IO from non-disk devices to fail ### Version 2.00.8 Wed Aug 27 16:40:05 EDT 2003 - Atul Mukker i. Make sure the value of number of statuses, completed command id array, and the mailbox status fields are updated in host memory before we read and interpret them. For this to happen - mailbox numstatus and command id array's first element are invalidated. The ISR busy waits till valid values are obtained in these two fields. Now since the status field is between these two fields it is assumed that status values is sane when write to numstatus and completed id array is complete ii. while returning from the ioctl handler for the SCSI passthru commands a direct access was made to the user address. Now the user structure is copied in before the required field is accessed. iii. Remove redundant volatile casts from pending command counter pend_cmds. ### Version 2.00.7 Fri Aug 1 11:01:11 EDT 2003 - Atul Mukker i. Adapter lock re-definition so that patch for kernels w/o per host lock is less intrusive - Jens Axboe ii. While in abort and reset handling, check for non-empty pending list is invalid. The intent is to wait for pending commands in FW to complete, not the pending commands with the driver - Atul Mukker ### Version 2.00.6 Wed Jul 30 11:35:31 EDT 2003 - Sreenivas Bagalkote i. Declare the function prototypes used for "/proc" within the compiler directives #ifdef CONFIG_PROC_FS. Similary, move global/local variable declarations and code fragments related to /proc within the directives. - Mark Haverkamp ii. Initialize host->lock with adapter->lock. iii. Wait for mailbox status to become valid - Haruo Tomita iv. Right structure is passed to FW for 4-span read configuration command. - Sreenivas Bagalkote ### Version 2.00.5 Thu Apr 24 14:06:55 EDT 2003 - Atul Mukker i. Do not use repeated allocations for "pci_dev" for internal allocations. Allocate the handle at load time and set the DMA mask for allocations below 4GB. ii. Remove superfluous definitions, mid-layer /proc entry and synchronous commands iii. Logical drive numbers were incremented in passthru structure after random-deletion operation! Also, the logical drive deletion command is issued in polled mode because of the racy nature of interrupt based operation. iv. Add support for Intel's subsystem vendor id ### Version 2.00.4 Thu Apr 17 15:58:58 EDT 2003 i. Do not put the completed SCSI commands in a list. Complete them to mid-layer as soon as we have completed them and reclaimed our associated resources ii. Break ISR functionality in two portions. The lower half serves as interrupt acknowledgment sequence for the firmware. This half can also be called from other places in the driver, e.g., the abort and reset handlers. iii. New abort and reset handling. In these situations, driver allows more time for the firmware to complete outstanding requests instead of failing handlers right-away. ### Version 2.00.3 Wed Jan 29 09:13:44 EST 200 - Atul Mukker i. Change the handshake in ISR while acknowledging interrupts. Write the valid interrupt pattern 0x10001234 as soon as it is read from the outdoor register. In existing driver and on certain platform, invalid command ids were being returned. Also, do not wait on status be become 0xFF, since FW can return this status in certain circumstances. Initialize the numstatus field of mailbox to 0xFF so that we can wait on this wait in next interrupt. Firmware does not change its value unless there are some status to be posted ii. Specify the logical drive number while issuing the RESERVATION_STATUS iii. Reduce the default mailbox busy wait time from 300us to 10us. This is done to avoid a possible deadlock in FW because of longer bust waits. iv. The max outstanding commands are reduced to 126 because that's the safest value on all FW. v. Number of sectors per IO are reduced to 128 (64kb), because FW needs resources in special circumstances like check consistency, rebuilds etc. vi. max_commands is no longer a module parameter because of iv. ### Version: 2.00.2 i. Intermediate release with kernel specific code ### Version: 2.00.1i Wed Dec 4 14:34:51 EST 2002 - Atul Mukker i. Making the older IO based controllers to work with this driver ### Version 2.00.1 Fri Nov 15 10:59:44 EST 2002 - Atul Mukker i. Release host lock before issuing internal command to reset reservations in megaraid_reset() and reacquire after internal command is completed.