diff options
author | jhb <jhb@FreeBSD.org> | 2011-07-14 20:20:33 +0000 |
---|---|---|
committer | jhb <jhb@FreeBSD.org> | 2011-07-14 20:20:33 +0000 |
commit | aadbd5321a07ba56dde92245c908feb3e6e2cb94 (patch) | |
tree | 63b79ee58afc8bcb6f63b098fd721cb3d545e62c /sys/dev/mfi | |
parent | 62f93757154f009fca563627465af50197681dd9 (diff) | |
download | FreeBSD-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/mfi')
-rw-r--r-- | sys/dev/mfi/mfi.c | 8 | ||||
-rw-r--r-- | sys/dev/mfi/mfireg.h | 2 |
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 { |