# QLogic QLA2XXX Fibre Channel Support

## msmith2

Hi,

I'm try to get the qla2xxx driver working in 2.6.16-gentoo-r7:

Linux escabot 2.6.16-gentoo-r7 #1 SMP PREEMPT Wed May 17 14:40:00 EDT 2006 i686 Intel(R) Xeon(TM) CPU 2.80GHz GenuineIntel GNU/Linux

I guess I'm a little confused. I see in the kernel menuconfig that using firmware-loader modules is deprecated. So, I'm using the default (maybe its the new) method: 

"By default, firmware for the ISP parts will be loaded via the Firmware Loader interface."

This is where I am lost. Both of my QLA2340s are not working. I get a message saying the firmware image is unavailable. In the help page for the qla2xxx driver, it talks about downloading these blobs from QLogic's FTP site. I noticed there was an ebuild (sys-block/qla-fc-firmware) for this firmware. I installed it, but I'm not sure how to get the cards to use it? Do I have to write it to the cards somehow? Maybe I'm going about this the wrong way?

The ebuild copies files to /lib/firmware, but the kernel can't read some files from the filesystem before its even mounted, can it? I have kernel modules disabled in my config.

I'd appreciated it if anyone can give me some info.

This is fresh install I just did today (2006.0).

Thanks in advance,

Marc

----------

## augury

On my qla2200, I think it is, I don't have the card load the firmware from the kernel.  I loaded it from a floppy disk and set up the bios and that was it.  I had problems with this fibre channel and raid in the kernel.  I think it was gcc >3.3 or something.  I never solved this and ran the old kernel.  My fibre channel may have died today.  We just moved and I think it may be broken.

----------

## tcook

Firmware is hotloaded with the driver on boot, there is no firmware stored internally on the card.  My suggestion would be to load it as a module rather than part of the kernel if you are having issues.

----------

## jpe

I'm interested in how this was resolved, as I am facing the same problem.  I have the same thought -- that I should probably build the qla2xxx driver as a module and it will load the firmware during module initialization.  However my system is very remote and I would like to hear if building the qla2xxx driver as a module did actually get the controllers working.  In my case my root partition is local, so I won't need an initrd like the original poster here will, but I do need to know if this qla2xxx driver requires being built as a module.

-John

----------

## Januszzz

Well,

I'm having the same problem; I cannot load firmware installed by the sys-block/qla-fc-firmware-20060312-r1 ebuild.

Although I can use a firmware from flash and it works, I would prefer use the newest firmware. I have qla2xxx compiled as a module; I find instructions in kernel as unclear, where am I supposed to put firmware so the kernel module finds it??

```

qla2xxx 0000:03:03.0: Found an ISP2422, irq 20, iobase 0xffffc20000010000

qla2xxx 0000:03:03.0: Configuring PCI space...

qla2xxx 0000:03:03.0: Configure NVRAM parameters...

qla2xxx 0000:03:03.0: Verifying loaded RISC code...

qla2xxx 0000:03:03.0: Firmware image unavailable.

qla2xxx 0000:03:03.0: Firmware images can be retrieved from: ftp://ftp.qlogic.com/outgoing/linux/firmware/.

qla2xxx 0000:03:03.0: Attempting to load (potentially outdated) firmware from flash.

```

Regards,

Janusz

----------

## ldeviator

anyone get anywhere on this?

I have a Sunblade 1000 (sparc64) system which has a boot device on the QLogic ISP2200 .... so kernels past something like 2.6.16-gentoo-r6 can't boot.

I figured out how to build the thing qla2xxx driver as a module, got it installed on a initramfs image, got that in to silo, and then got the drivers on the RAM image too, but I when I modprobe the qla2xxx module in there I get the same error... that it can't find the Firmware images.... something like:

qla2xxx 0000:06:02.0: Firmware image unavailable.

qla2xxx 0000:06:02.0: Failed to initialize adapter 

Firmware images can be retrieved from: ftp://ftp.qlogic.com/outgoing/linux/firmware/

I have all those in /lib/firmware on the real disc.... but I'm positive there's no way the kernel can see those until the thing is loaded... so it has to be in the RAM disk.... soo I've put them on there and tried them in these directories

/

/lib/firmware

/lib/firmware/2.6.19-gentoo-r1 (which comes from uname -a)

... all no luck.

sooo... anyone have the qla2xxx driver loading and startup and booting to that disk?  What needs to happen?  Am I just stuck at 2.6.16-gentoo-r6 forever?  :Smile: 

----------

## yohnson

Build as module and trouble shoot from there using the said Firmware package.  This matches the drivers as Qlogic...

What I don't get is the drive not showing any disks.  In fact

# modprobe qla2xxx

Ends up producing the following output at the bottom of this post.  I have worked on this all weekend but have not come up with a solution as it seems as if the driver can't see the disks.  I have created 2 virtual disks in windows 2000 (dual boot) and they seem to be created properly.

The Dell 660F reacts and creates virtual disks while using the MMC on windows, although I can not see them as a formattable disk either.. Confused on regarding this hardware, I have done everything I can think of.  

I have disk groups, virtual disks and the array seems to function properly with no errors.  Mounting the disks has been very troublesome.  

Not wanting to use Windows I only made the virtual disks, which pass verification, in W2K and want to use them in linux

Jan 14 15:22:41 bigguy QLogic Fibre Channel HBA Driver

Jan 14 15:22:41 bigguy qla2xxx 0000:01:04.0: Found an ISP2200, irq 25, iobase 0xe0814000

Jan 14 15:22:41 bigguy qla2xxx 0000:01:04.0: Configuring PCI space...

Jan 14 15:22:41 bigguy qla2xxx 0000:01:04.0: Configure NVRAM parameters...

Jan 14 15:22:41 bigguy qla2xxx 0000:01:04.0: Verifying loaded RISC code...

Jan 14 15:22:55 bigguy qla2xxx 0000:01:04.0: Allocated (252 KB) for firmware dump...

Jan 14 15:22:55 bigguy qla2xxx 0000:01:04.0: Waiting for LIP to complete...

Jan 14 15:23:15 bigguy qla2xxx 0000:01:04.0: Cable is unplugged...

Jan 14 15:23:15 bigguy scsi6 : qla2xxx

Jan 14 15:23:15 bigguy qla2xxx 0000:01:04.0:

Jan 14 15:23:15 bigguy QLogic Fibre Channel HBA Driver: 8.01.07-k1

Jan 14 15:23:15 bigguy QLogic QLA22xx -

Jan 14 15:23:15 bigguy ISP2200: PCI (66 MHz) @ 0000:01:04.0 hdma-, host#=6, fw=2.02.08 TP

Jan 14 15:23:15 bigguy qla2xxx 0000:02:06.0: Found an ISP2200, irq 29, iobase 0xe082c000

Jan 14 15:23:15 bigguy qla2xxx 0000:02:06.0: Configuring PCI space...

Jan 14 15:23:15 bigguy qla2xxx 0000:02:06.0: Configure NVRAM parameters...

Jan 14 15:23:15 bigguy qla2xxx 0000:02:06.0: Verifying loaded RISC code...

Jan 14 15:23:15 bigguy scsi(7): **** Load RISC code ****

Jan 14 15:23:28 bigguy scsi(7): Verifying Checksum of loaded RISC code.

Jan 14 15:23:28 bigguy scsi(7): Checksum OK, start firmware.

Jan 14 15:23:28 bigguy qla2xxx 0000:02:06.0: Allocated (252 KB) for firmware dump...

Jan 14 15:23:28 bigguy scsi(7): Issue init firmware.

Jan 14 15:23:29 bigguy scsi(7): Asynchronous LIP RESET (f8f7).

Jan 14 15:23:29 bigguy qla2xxx 0000:02:06.0: LIP reset occured (f8f7).

Jan 14 15:23:29 bigguy qla2xxx 0000:02:06.0: Waiting for LIP to complete...

Jan 14 15:23:29 bigguy scsi(7): LIP occured (f8f7).

Jan 14 15:23:29 bigguy qla2xxx 0000:02:06.0: LIP occured (f8f7).

Jan 14 15:23:29 bigguy scsi(7): Asynchronous LOOP UP (1 Gbps).

Jan 14 15:23:29 bigguy qla2xxx 0000:02:06.0: LOOP UP detected (1 Gbps).

Jan 14 15:23:29 bigguy scsi(7): Asynchronous PORT UPDATE.

Jan 14 15:23:29 bigguy scsi(7): Port database changed b88f 0000 0000.

Jan 14 15:23:29 bigguy scsi(7): F/W Ready - OK

Jan 14 15:23:29 bigguy scsi(7): fw_state=3 curr time=14b9a.

Jan 14 15:23:29 bigguy qla2xxx 0000:02:06.0: Topology - (Loop), Host Loop address 0x0

Jan 14 15:23:29 bigguy scsi(7): Configure loop -- dpc flags =0x4080040

Jan 14 15:23:29 bigguy qla2x00_mailbox_command(7): **** FAILED. mbx0=4006, mbx1=7e, mbx2=b6d2, cmd=6a ****

Jan 14 15:23:29 bigguy qla2x00_get_port_name(7): failed=102.

Jan 14 15:23:29 bigguy scsi(7): MBC_GET_PORT_NAME Failed, No FL Port

Jan 14 15:23:29 bigguy scsi(7): LOOP READY

Jan 14 15:23:29 bigguy DEBUG: detect hba 7 at address = de41c2c4

Jan 14 15:23:29 bigguy scsi7 : qla2xxx

Jan 14 15:23:29 bigguy qla2xxx 0000:02:06.0:

Jan 14 15:23:29 bigguy QLogic Fibre Channel HBA Driver: 8.01.07-k1

Jan 14 15:23:29 bigguy QLogic QLA22xx -

Jan 14 15:23:29 bigguy ISP2200: PCI (66 MHz) @ 0000:02:06.0 hdma-, host#=7, fw=2.02.08 TP

Jan 14 15:23:29 bigguy scsi(7): [R|Z]IO update completion.

Jan 14 15:23:29 bigguy scsi(7): [R|Z]IO update completion.

Jan 14 15:23:29 bigguy scsi(7): [R|Z]IO update completion.

Jan 14 15:23:29 bigguy scsi(7): [R|Z]IO update completion.

Jan 14 15:23:29 bigguy Vendor: DELL      Model: PV660F   PSEUDO   Rev: 5751

Jan 14 15:23:29 bigguy Type:   Direct-Access                      ANSI SCSI revision: 02

Jan 14 15:23:29 bigguy sdc: Unit Not Ready, sense:

Jan 14 15:23:29 bigguy : Current: sense key=0x5

Jan 14 15:23:29 bigguy ASC=0x25 ASCQ=0x0

Jan 14 15:23:29 bigguy sdc : READ CAPACITY failed.

Jan 14 15:23:29 bigguy sdc : status=1, message=00, host=0, driver=08

Jan 14 15:23:29 bigguy sd: Current: sense key=0x5

Jan 14 15:23:29 bigguy ASC=0x25 ASCQ=0x0

Jan 14 15:23:29 bigguy sdc: test WP failed, assume Write Enabled

Jan 14 15:23:29 bigguy sdc: asking for cache data failed

Jan 14 15:23:29 bigguy sdc: assuming drive cache: write through

Jan 14 15:23:29 bigguy sdc: Unit Not Ready, sense:

Jan 14 15:23:29 bigguy : Current: sense key=0x5

Jan 14 15:23:29 bigguy ASC=0x25 ASCQ=0x0

Jan 14 15:23:29 bigguy sdc : READ CAPACITY failed.

Jan 14 15:23:29 bigguy sdc : status=1, message=00, host=0, driver=08

Jan 14 15:23:29 bigguy sd: Current: sense key=0x5

Jan 14 15:23:29 bigguy ASC=0x25 ASCQ=0x0

Jan 14 15:23:29 bigguy sdc: test WP failed, assume Write Enabled

Jan 14 15:23:29 bigguy sdc: asking for cache data failed

Jan 14 15:23:29 bigguy sdc: assuming drive cache: write through

Jan 14 15:23:29 bigguy sdc:end_request: I/O error, dev sdc, sector 0

Jan 14 15:23:29 bigguy printk: 32 messages suppressed.

Jan 14 15:23:29 bigguy Buffer I/O error on device sdc, logical block 0

Jan 14 15:23:29 bigguy end_request: I/O error, dev sdc, sector 0

Jan 14 15:23:29 bigguy Buffer I/O error on device sdc, logical block 0

Jan 14 15:23:29 bigguy unable to read partition table

Jan 14 15:23:29 bigguy sd 7:0:0:0: Attached scsi disk sdc

Jan 14 15:23:29 bigguy sd 7:0:0:0: Attached scsi generic sg3 type 0

Jan 14 15:23:29 bigguy scsi(7): [R|Z]IO update completion.

Jan 14 15:23:29 bigguy scsi(7): [R|Z]IO update completion.

Jan 14 15:23:29 bigguy scsi(7): [R|Z]IO update completion.

Jan 14 15:23:29 bigguy scsi(7): [R|Z]IO update completion.

Jan 14 15:23:29 bigguy Vendor: DELL      Model: PV660F   PSEUDO   Rev: 5751

Jan 14 15:23:29 bigguy Type:   Direct-Access                      ANSI SCSI revision: 02

Jan 14 15:23:29 bigguy scsi 7:0:0:1: Attached scsi generic sg4 type 0

Jan 14 15:23:29 bigguy scsi(7): [R|Z]IO update completion.

Jan 14 15:23:29 bigguy scsi(7): [R|Z]IO update completion.

Jan 14 15:23:29 bigguy scsi(7): [R|Z]IO update completion.

Jan 14 15:23:29 bigguy scsi(7): [R|Z]IO update completion.

Jan 14 15:23:29 bigguy Vendor: DELL      Model: PV660F   PSEUDO   Rev: 5751

Jan 14 15:23:29 bigguy Type:   Direct-Access                      ANSI SCSI revision: 02

Jan 14 15:23:29 bigguy scsi 7:0:0:2: Attached scsi generic sg5 type 0

Jan 14 15:23:29 bigguy scsi(7): [R|Z]IO update completion.

Jan 14 15:23:29 bigguy scsi(7): [R|Z]IO update completion.

Jan 14 15:23:29 bigguy scsi(7): [R|Z]IO update completion.

Jan 14 15:23:29 bigguy scsi(7): [R|Z]IO update completion.

Jan 14 15:23:29 bigguy Vendor: DELL      Model: PV660F   PSEUDO   Rev: 5751

Jan 14 15:23:29 bigguy Type:   Direct-Access                      ANSI SCSI revision: 02

Jan 14 15:23:29 bigguy scsi 7:0:0:3: Attached scsi generic sg6 type 0

Jan 14 15:23:29 bigguy scsi(7): [R|Z]IO update completion.

Jan 14 15:23:29 bigguy scsi(7): [R|Z]IO update completion.

Jan 14 15:23:29 bigguy scsi(7): [R|Z]IO update completion.

Jan 14 15:23:29 bigguy scsi(7): [R|Z]IO update completion.

Jan 14 15:23:29 bigguy Vendor: DELL      Model: PV660F   PSEUDO   Rev: 5751

Jan 14 15:23:29 bigguy Type:   Direct-Access                      ANSI SCSI revision: 02

Jan 14 15:23:29 bigguy scsi 7:0:0:4: Attached scsi generic sg7 type 0

Jan 14 15:23:29 bigguy scsi(7): [R|Z]IO update completion.

Jan 14 15:23:29 bigguy scsi(7): [R|Z]IO update completion.

Jan 14 15:23:29 bigguy scsi(7): [R|Z]IO update completion.

Jan 14 15:23:29 bigguy scsi(7): [R|Z]IO update completion.

Jan 14 15:23:29 bigguy Vendor: DELL      Model: PV660F   PSEUDO   Rev: 5751

Jan 14 15:23:29 bigguy Type:   Direct-Access                      ANSI SCSI revision: 02

Jan 14 15:23:29 bigguy scsi 7:0:0:5: Attached scsi generic sg8 type 0

Jan 14 15:23:29 bigguy scsi(7): [R|Z]IO update completion.

Jan 14 15:23:29 bigguy scsi(7): [R|Z]IO update completion.

Jan 14 15:23:29 bigguy scsi(7): [R|Z]IO update completion.

Jan 14 15:23:29 bigguy scsi(7): [R|Z]IO update completion.

Jan 14 15:23:29 bigguy Vendor: DELL      Model: PV660F   PSEUDO   Rev: 5751

Jan 14 15:23:29 bigguy Type:   Direct-Access                      ANSI SCSI revision: 02

Jan 14 15:23:29 bigguy scsi 7:0:0:6: Attached scsi generic sg9 type 0

Jan 14 15:23:29 bigguy scsi(7): [R|Z]IO update completion.

Jan 14 15:23:29 bigguy scsi(7): [R|Z]IO update completion.

Jan 14 15:23:29 bigguy scsi(7): [R|Z]IO update completion.

Jan 14 15:23:29 bigguy scsi(7): [R|Z]IO update completion.

Jan 14 15:23:29 bigguy Vendor: DELL      Model: PV660F   PSEUDO   Rev: 5751

Jan 14 15:23:29 bigguy Type:   Direct-Access                      ANSI SCSI revision: 02

Jan 14 15:23:29 bigguy scsi 7:0:0:7: Attached scsi generic sg10 type 0

Jan 14 15:23:29 bigguy scsi.agent[7893]: disk at /devices/pci0000:02/0000:02:06.0/host7/rport-7:0-0/target7:0:0/7:0:0:1

Jan 14 15:23:29 bigguy scsi.agent[7926]: disk at /devices/pci0000:02/0000:02:06.0/host7/rport-7:0-0/target7:0:0/7:0:0:0

Jan 14 15:23:29 bigguy scsi.agent[7939]: disk at /devices/pci0000:02/0000:02:06.0/host7/rport-7:0-0/target7:0:0/7:0:0:2

Jan 14 15:23:29 bigguy scsi.agent[7910]: disk at /devices/pci0000:02/0000:02:06.0/host7/rport-7:0-0/target7:0:0/7:0:0:5

Jan 14 15:23:29 bigguy scsi.agent[7905]: disk at /devices/pci0000:02/0000:02:06.0/host7/rport-7:0-0/target7:0:0/7:0:0:4

Jan 14 15:23:29 bigguy scsi.agent[7908]: disk at /devices/pci0000:02/0000:02:06.0/host7/rport-7:0-0/target7:0:0/7:0:0:6

Jan 14 15:23:29 bigguy end_request: I/O error, dev sdc, sector 2097024

Jan 14 15:23:29 bigguy Buffer I/O error on device sdc, logical block 262128

Jan 14 15:23:29 bigguy end_request: I/O error, dev sdc, sector 2097024

Jan 14 15:23:29 bigguy Buffer I/O error on device sdc, logical block 262128

Jan 14 15:23:29 bigguy end_request: I/O error, dev sdc, sector 2097144

Jan 14 15:23:29 bigguy Buffer I/O error on device sdc, logical block 262143

Jan 14 15:23:29 bigguy end_request: I/O error, dev sdc, sector 2097144

Jan 14 15:23:29 bigguy Buffer I/O error on device sdc, logical block 262143

Jan 14 15:23:29 bigguy end_request: I/O error, dev sdc, sector 2097144

Jan 14 15:23:29 bigguy Buffer I/O error on device sdc, logical block 262143

Jan 14 15:23:29 bigguy end_request: I/O error, dev sdc, sector 2097144

Jan 14 15:23:29 bigguy Buffer I/O error on device sdc, logical block 262143

Jan 14 15:23:29 bigguy end_request: I/O error, dev sdc, sector 2097144

Jan 14 15:23:29 bigguy Buffer I/O error on device sdc, logical block 262143

Jan 14 15:23:29 bigguy end_request: I/O error, dev sdc, sector 2097144

Jan 14 15:23:29 bigguy Buffer I/O error on device sdc, logical block 262143

Jan 14 15:23:29 bigguy end_request: I/O error, dev sdc, sector 2097088

Jan 14 15:23:29 bigguy end_request: I/O error, dev sdc, sector 2097136

Jan 14 15:23:29 bigguy end_request: I/O error, dev sdc, sector 2097144

Jan 14 15:23:29 bigguy end_request: I/O error, dev sdc, sector 2097144

Jan 14 15:23:29 bigguy end_request: I/O error, dev sdc, sector 0

Jan 14 15:23:29 bigguy end_request: I/O error, dev sdc, sector 0

Jan 14 15:23:29 bigguy end_request: I/O error, dev sdc, sector 0

Jan 14 15:23:29 bigguy end_request: I/O error, dev sdc, sector 0

Jan 14 15:23:29 bigguy end_request: I/O error, dev sdc, sector 0

Jan 14 15:23:29 bigguy end_request: I/O error, dev sdc, sector 0

Jan 14 15:23:29 bigguy scsi.agent[7946]: disk at /devices/pci0000:02/0000:02:06.0/host7/rport-7:0-0/target7:0:0/7:0:0:3

Jan 14 15:23:29 bigguy end_request: I/O error, dev sdc, sector 0

Jan 14 15:23:29 bigguy end_request: I/O error, dev sdc, sector 0

Jan 14 15:23:29 bigguy end_request: I/O error, dev sdc, sector 0

Jan 14 15:23:29 bigguy end_request: I/O error, dev sdc, sector 0

Jan 14 15:23:29 bigguy end_request: I/O error, dev sdc, sector 0

Jan 14 15:23:29 bigguy end_request: I/O error, dev sdc, sector 0

Jan 14 15:23:29 bigguy end_request: I/O error, dev sdc, sector 0

Jan 14 15:23:29 bigguy end_request: I/O error, dev sdc, sector 0

Jan 14 15:23:29 bigguy end_request: I/O error, dev sdc, sector 0

Jan 14 15:23:29 bigguy end_request: I/O error, dev sdc, sector 0

Jan 14 15:23:29 bigguy end_request: I/O error, dev sdc, sector 0

Jan 14 15:23:29 bigguy end_request: I/O error, dev sdc, sector 0

Jan 14 15:23:29 bigguy end_request: I/O error, dev sdc, sector 0

Jan 14 15:23:29 bigguy end_request: I/O error, dev sdc, sector 0

Jan 14 15:23:29 bigguy end_request: I/O error, dev sdc, sector 0

Jan 14 15:23:29 bigguy end_request: I/O error, dev sdc, sector 0

Jan 14 15:23:29 bigguy end_request: I/O error, dev sdc, sector 0

Jan 14 15:23:29 bigguy end_request: I/O error, dev sdc, sector 0

Jan 14 15:23:29 bigguy end_request: I/O error, dev sdc, sector 0

Jan 14 15:23:29 bigguy end_request: I/O error, dev sdc, sector 0

Jan 14 15:23:29 bigguy end_request: I/O error, dev sdc, sector 0

Jan 14 15:23:29 bigguy end_request: I/O error, dev sdc, sector 0

Jan 14 15:23:29 bigguy scsi.agent[7918]: disk at /devices/pci0000:02/0000:02:06.0/host7/rport-7:0-0/target7:0:0/7:0:0:7

----------

## zeek

 *yohnson wrote:*   

> What I don't get is the drive not showing any disks.  In fact
> 
> # modprobe qla2xxx

 

That is the common module containing the shared code.  There should be a specific module to modprobe.

```
modprobe qla2300
```

I wrote a small script to reload the driver when I was debugging my SAN setup:

# cat bin/san_restart.sh

```
#!/bin/bash

modprobe -r qla2300

modprobe -r qla2xxx

modprobe qla2300

```

I can just type fdisk -l and see my partitions.

----------

## yohnson

After zeeks rely I tried an old Kernel-2.16.5 and modprobed the QLA2200  and the result is yes the drive array, which happens to be a Dell 660F, gets recognized and Disk group members are seen as /dev/sdx but the virtual disks configured on the array using windows 2000 are not.

So the module QLA2200 &QLA2xxx do work for the individual disks . Maybe it's a dell thing... or there is no support in Linux for seeing the virtual disks...I must be missing something

Does anyone know  the answer to this???  

I used W2k with Dell ArrayManger 3.1, the latest build, to create Disk groups and Virtual Disks

----------

## msmith2

Hi,

I'm coming back to this problem. =)

In the newer kernels, using the old driver isn't an option any more.

I only get one module (qla2xxx.ko) when 'CONFIG_SCSI_QLA_FC=m' is set in config. Using kernel 2.6.19-gentoo-r5. Does everyone else only get one module?

When I do a 'modprobe qla2xxx' I still get the message stating it can't find the firmware image. I also have the 'qla-fc-firmware' package installed and I verified the binary blobs are in /lib/firmware. All of the generic firmware file names are links (ql2300_fw.bin in my case), so I tried coping the version'd file to that file name for the hell of it (thinking maybe it didn't like the links)... no luck!

Now that zeek mentioned about the qlaxxxx specific drivers for different models (qla2300 for me), I'm wondering if thats the problem. I would still ulimately like to boot from SAN, and I understand that you can add /lib/firmware to initramfs to make this work, but I would at least like to get this QLogic card working as a module first. =)

I've noticed with other QLogic cards (qla24xx I think) that they load the firmware image from flash? I wonder if its possible to somehow write the firmware image into flash?

I also tried getting QLogic's proprietary driver working, but it didn't happen. I had to change some things to get it to compile, but after I got it to successfully compile and tried inserting it into the kernel, there were lots of missing symbols. It looked like most had been removed from the current kernel, but it would probably work fine on an older 2.6 kernel. The nice thing abou there driver is it includes its own MPIO (failover) stuff in the HBA driver itself. As far as I know, the kernel driver doesn't. I'm going to have to use some other MPIO driver (probably Sun's RDAC driver or multipath-tools).

P.S. -- We now have a Sun StorageTek 6140 array and I like it so much better (so far) than that EMC POS! =)

--Marc

----------

## msmith2

Partially solved...

You have to emerge 'hotplug' for the firmware to be loaded.

So, here is what I got so far:

When installing Gentoo:

- qla2xxx does not load firmware when using 2006.1 install CD

- you must download appropriate blob from QLogic (for me it is ql2300_fw.bin)

- put the blob in /lib/firmware

- rmmod qla2xxx && modprobe qla2xxx

- the module may load fine in older versions of the installer

To load module in working Gentoo system:

- I configured qla2xxx as a module

- you must emerge hotplug and qla-fc-firmware

- the module should then load fine

Now I would like work on booting from SAN. I would also like to get some MPIO going. I've read that I'll have to put the firmware file into initramfs (and obviously compile qla2xxx into the kernel) -- I'll mess with that tomorrow.

--Marc

----------

## gnork

Small correction:

* emerge coldplug, as the hotplug script(s) are replaced by coldplug and "rc-update add coldplug boot"

* put the firmware image into /lib/firmware (coldplug expects the images there)

* modprobe qla2xxx

Enjoy.

I'd like to know how to SAN boot from these things.  Multipath IO is done via device-mapper and multipath-tools. Haven't used it yet, but I will report back any results.

----------

## msmith2

Success!

I ended up using QLogic's driver. Its nice -- MPIO built right into the driver and the firmware is included at compile time. Using 2.6.19 kernel gave me a few unresolved symbols with v8.01.06-1 driver, so I used 2.6.15. I noticed they released a newer driver (.07 I think) so I'll have to try that with a newer kernel.

You'll have to enable the BIOS option in QLogic's configuration interface and select which LUN you'd like to boot (don't forget to set the QLogic card to first boot priority in your system BIOS). I cheated a little; I installed Gentoo on an existing system and then dd'd it over to the LUN I am booting.

I made an initrd image with the 2 QLogic driver modules (qla2xxx.ko and qla2300.ko for me). These 2 lines in /linuxrc (in the initrd image) were trouble for me:

mkrootdev /dev/root

echo 0x0100 > /proc/sys/kernel/real-root-dev

It didn't like the options I passed with GRUB, so I ended up just doing something like this in grub.conf:

title Gentoo Linux 2.6.15-r1 w/ initrd

root (hd0,0)

kernel /boot/kernel-2.6.15-gentoo-r1

initrd /boot/initrd-2.6.15-gentoo-r1.gz

It pulls the root device from the rdev value in the kernel. When I tried booting off the SAN with a different root disk (my local disk was cciss/c0d0p3 before) I would get that infamous "mount: error 6 mounting ext3" problem from initrd. Even when I tried overriding the root device with 'root=/dev/sda3' in my grub.conf, it would give me the same problem. So booted off local disk, mounted /boot, and changed the root device in the kernel with rdev. Whats even stranger is, even if I left the root= in grub.conf after changing it, I got the same error. So I just took out the root= and all is good.

This made me think about something else in my adventures with initrd, instead of using initramfs to load external firmware, you could just use initrd. Using the qla2xxx driver that comes with the kernel, compile it is a module. Then do a mkinitrd to create the new initrd image. Then:

# gunzip /boot/initrd-2.6.15-gentoo-r1.gz

# mount -o /boot/initrd-2.6.15-gentoo-r1 /mnt

You could *probably* then do a 'mkdir /mnt/lib/firmware' and then copy your *.fw file into /mnt/lib/firmware and I bet it will find the firmware when it loads the module from initrd. I tried a few other ways (the only ones I found) to use firmware with initramfs and I couldn't get any of them to work.

I'm thinking about making a Gentoo HOWTO wiki page for booting from SAN with QLogic HBA.

--Marc

----------

## msmith2

I have completed the HOWTO: http://gentoo-wiki.com/HOWTO_Boot_From_SAN

Using QLogic's driver works fine; I still didn't get the Linux kernel driver (the one that comes with it) to work with the external firmware at boot. I think I have a descent start for that part, but it still doesn't find the firmware. If you get this working please update the HOWTO Boot From SAN wiki page (its Option B).

--Marc

----------

