svn commit: r225622 - stable/8/sys/dev/mfi

John Baldwin jhb at FreeBSD.org
Fri Sep 16 17:47:13 UTC 2011


Author: jhb
Date: Fri Sep 16 17:47:12 2011
New Revision: 225622
URL: http://svn.freebsd.org/changeset/base/225622

Log:
  MFC 224041:
  Support controllers whose option ROM is disabled in the BIOS by kicking
  the firmware so that it boots.

Modified:
  stable/8/sys/dev/mfi/mfi.c
  stable/8/sys/dev/mfi/mfireg.h
Directory Properties:
  stable/8/sys/   (props changed)
  stable/8/sys/amd64/include/xen/   (props changed)
  stable/8/sys/cddl/contrib/opensolaris/   (props changed)
  stable/8/sys/contrib/dev/acpica/   (props changed)
  stable/8/sys/contrib/pf/   (props changed)

Modified: stable/8/sys/dev/mfi/mfi.c
==============================================================================
--- stable/8/sys/dev/mfi/mfi.c	Fri Sep 16 17:44:33 2011	(r225621)
+++ stable/8/sys/dev/mfi/mfi.c	Fri Sep 16 17:47:12 2011	(r225622)
@@ -260,8 +260,12 @@ mfi_transition_firmware(struct mfi_softc
 		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
 				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);
 		}

Modified: stable/8/sys/dev/mfi/mfireg.h
==============================================================================
--- stable/8/sys/dev/mfi/mfireg.h	Fri Sep 16 17:44:33 2011	(r225621)
+++ stable/8/sys/dev/mfi/mfireg.h	Fri Sep 16 17:47:12 2011	(r225622)
@@ -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 {


More information about the svn-src-all mailing list