From owner-freebsd-bugs@FreeBSD.ORG Wed Feb 23 16:10:08 2011 Return-Path: Delivered-To: freebsd-bugs@hub.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 2C6CB106566C for ; Wed, 23 Feb 2011 16:10:08 +0000 (UTC) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (freefall.freebsd.org [IPv6:2001:4f8:fff6::28]) by mx1.freebsd.org (Postfix) with ESMTP id DF0E98FC1B for ; Wed, 23 Feb 2011 16:10:07 +0000 (UTC) Received: from freefall.freebsd.org (localhost [127.0.0.1]) by freefall.freebsd.org (8.14.4/8.14.4) with ESMTP id p1NGA73e055073 for ; Wed, 23 Feb 2011 16:10:07 GMT (envelope-from gnats@freefall.freebsd.org) Received: (from gnats@localhost) by freefall.freebsd.org (8.14.4/8.14.4/Submit) id p1NGA7NX055072; Wed, 23 Feb 2011 16:10:07 GMT (envelope-from gnats) Resent-Date: Wed, 23 Feb 2011 16:10:07 GMT Resent-Message-Id: <201102231610.p1NGA7NX055072@freefall.freebsd.org> Resent-From: FreeBSD-gnats-submit@FreeBSD.org (GNATS Filer) Resent-To: freebsd-bugs@FreeBSD.org Resent-Reply-To: FreeBSD-gnats-submit@FreeBSD.org, Andrew Boyer Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 9A7331065673 for ; Wed, 23 Feb 2011 16:07:40 +0000 (UTC) (envelope-from nobody@FreeBSD.org) Received: from red.freebsd.org (red.freebsd.org [IPv6:2001:4f8:fff6::22]) by mx1.freebsd.org (Postfix) with ESMTP id 6F0398FC1B for ; Wed, 23 Feb 2011 16:07:40 +0000 (UTC) Received: from red.freebsd.org (localhost [127.0.0.1]) by red.freebsd.org (8.14.4/8.14.4) with ESMTP id p1NG7esk009673 for ; Wed, 23 Feb 2011 16:07:40 GMT (envelope-from nobody@red.freebsd.org) Received: (from nobody@localhost) by red.freebsd.org (8.14.4/8.14.4/Submit) id p1NG7eKT009672; Wed, 23 Feb 2011 16:07:40 GMT (envelope-from nobody) Message-Id: <201102231607.p1NG7eKT009672@red.freebsd.org> Date: Wed, 23 Feb 2011 16:07:40 GMT From: Andrew Boyer To: freebsd-gnats-submit@FreeBSD.org X-Send-Pr-Version: www-3.1 Cc: Subject: kern/154978: [patch] [mfi] Support MFI cards with boot option ROM disabled X-BeenThere: freebsd-bugs@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Bug reports List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 23 Feb 2011 16:10:08 -0000 >Number: 154978 >Category: kern >Synopsis: [patch] [mfi] Support MFI cards with boot option ROM disabled >Confidential: no >Severity: serious >Priority: medium >Responsible: freebsd-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: sw-bug >Submitter-Id: current-users >Arrival-Date: Wed Feb 23 16:10:07 UTC 2011 >Closed-Date: >Last-Modified: >Originator: Andrew Boyer >Release: -current >Organization: Avere Systems >Environment: amd64 >Description: I noticed that the mfi driver fails to load if the card's option ROM is disabled in the BIOS. (If you're not booting from it, it reduces the boot time a lot.) The LSI supported driver includes support for this mode of operation but the driver in the FreeBSD tree doesn't. The change is very simple. See the attached patch. Would someone please test it / clean it up / commit it? It's been tested to work with the MegaRAID SAS 9261-8i. >How-To-Repeat: 1) Disable the SAS option ROM in the BIOS 2) Boot the system >Fix: Patch attached with submission follows: Index: sys/dev/mfi/mfireg.h =================================================================== --- sys/dev/mfi/mfireg.h (revision 218580) +++ sys/dev/mfi/mfireg.h (working copy) @@ -112,6 +112,7 @@ #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 @@ #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 { Index: sys/dev/mfi/mfi.c =================================================================== --- sys/dev/mfi/mfi.c (revision 218580) +++ sys/dev/mfi/mfi.c (working copy) @@ -260,8 +260,12 @@ 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 @@ 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); } >Release-Note: >Audit-Trail: >Unformatted: