summaryrefslogtreecommitdiffstats
path: root/sys/dev
diff options
context:
space:
mode:
authorjhb <jhb@FreeBSD.org>2011-07-14 20:20:33 +0000
committerjhb <jhb@FreeBSD.org>2011-07-14 20:20:33 +0000
commitaadbd5321a07ba56dde92245c908feb3e6e2cb94 (patch)
tree63b79ee58afc8bcb6f63b098fd721cb3d545e62c /sys/dev
parent62f93757154f009fca563627465af50197681dd9 (diff)
downloadFreeBSD-src-aadbd5321a07ba56dde92245c908feb3e6e2cb94.zip
FreeBSD-src-aadbd5321a07ba56dde92245c908feb3e6e2cb94.tar.gz
Support controllers whose option ROM is disabled in the BIOS by kicking
the firmware so that it boots. PR: kern/154978 Submitted by: Andrew Boyer aboyer of averesystems com Obtained from: LSI MFC after: 1 week
Diffstat (limited to 'sys/dev')
-rw-r--r--sys/dev/mfi/mfi.c8
-rw-r--r--sys/dev/mfi/mfireg.h2
2 files changed, 8 insertions, 2 deletions
diff --git a/sys/dev/mfi/mfi.c b/sys/dev/mfi/mfi.c
index 78dc92b..f9bfffe 100644
--- a/sys/dev/mfi/mfi.c
+++ b/sys/dev/mfi/mfi.c
@@ -260,8 +260,12 @@ mfi_transition_firmware(struct mfi_softc *sc)
case MFI_FWSTATE_FLUSH_CACHE:
max_wait = 20;
break;
+ case MFI_FWSTATE_BOOT_MESSAGE_PENDING:
+ MFI_WRITE4(sc, MFI_IDB, MFI_FWINIT_HOTPLUG);
+ max_wait = 10;
+ break;
default:
- device_printf(sc->mfi_dev,"Unknown firmware state %d\n",
+ device_printf(sc->mfi_dev,"Unknown firmware state %#x\n",
fw_state);
return (ENXIO);
}
@@ -273,7 +277,7 @@ mfi_transition_firmware(struct mfi_softc *sc)
break;
}
if (fw_state == cur_state) {
- device_printf(sc->mfi_dev, "firmware stuck in state "
+ device_printf(sc->mfi_dev, "Firmware stuck in state "
"%#x\n", fw_state);
return (ENXIO);
}
diff --git a/sys/dev/mfi/mfireg.h b/sys/dev/mfi/mfireg.h
index efee827..f005c37 100644
--- a/sys/dev/mfi/mfireg.h
+++ b/sys/dev/mfi/mfireg.h
@@ -112,6 +112,7 @@ __FBSDID("$FreeBSD$");
#define MFI_FWSTATE_WAIT_HANDSHAKE 0x60000000
#define MFI_FWSTATE_FW_INIT_2 0x70000000
#define MFI_FWSTATE_DEVICE_SCAN 0x80000000
+#define MFI_FWSTATE_BOOT_MESSAGE_PENDING 0x90000000
#define MFI_FWSTATE_FLUSH_CACHE 0xa0000000
#define MFI_FWSTATE_READY 0xb0000000
#define MFI_FWSTATE_OPERATIONAL 0xc0000000
@@ -127,6 +128,7 @@ __FBSDID("$FreeBSD$");
#define MFI_FWINIT_READY 0x00000002 /* Move from operational to ready */
#define MFI_FWINIT_MFIMODE 0x00000004 /* unknown */
#define MFI_FWINIT_CLEAR_HANDSHAKE 0x00000008 /* Respond to WAIT_HANDSHAKE */
+#define MFI_FWINIT_HOTPLUG 0x00000010
/* MFI Commands */
typedef enum {
OpenPOWER on IntegriCloud