there's already three different types of chips in this family of
authordlg <dlg@openbsd.org>
Mon, 5 Jan 2015 23:18:36 +0000 (23:18 +0000)
committerdlg <dlg@openbsd.org>
Mon, 5 Jan 2015 23:18:36 +0000 (23:18 +0000)
commitb21486fbd2e3e92faf641998eea5017785273ed8
tree5dd5cd0001847e4807d16c889cc405f1a612b282
parent30030996ead37cfee5b2516b01bfef7da7de6975
there's already three different types of chips in this family of
controllers. the flags used in sgls on the first gen (thunderbolt)
are different to the ones used on the second and third gens (fury
and invader).

this creates an mfii_iop struct to store differences between these
chips, and uses them to set the flags on the sgls we generate for
the chip.

this solves lockups caused by stuck io on the following chips:

mfii0 at pci1 dev 0 function 0 "Symbios Logic MegaRAID SAS3108" rev 0x02: msi
mfii0: "PERC H730 Mini", firmware 25.2.1.0037, 1024MB cache

and

mfii0 at pci1 dev 0 function 0 "Symbios Logic MegaRAID SAS3008" rev 0x02: msi
mfii0: "PERC H330 Mini", firmware 25.2.1.0037

ive also tested this diff on:

mfii0 at pci10 dev 0 function 0 "Symbios Logic MegaRAID SAS2208" rev 0x05: msi
mfii0: "PERC H810 Adapter", firmware 21.2.0-0007, 1024MB cache

and

mfii0 at pci1 dev 0 function 0 "Symbios Logic MegaRAID SAS2208" rev 0x05: msi
mfii0: "PERC H710 Mini", firmware 21.3.0-0009, 512MB cache

Hrvoje Popovski reported the bug and verified the fix on his hardware.
sys/dev/pci/mfii.c