From owner-freebsd-bugs@FreeBSD.ORG Mon Nov 12 19:20:00 2012 Return-Path: Delivered-To: freebsd-bugs@smarthost.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id C40405AE for ; Mon, 12 Nov 2012 19:20:00 +0000 (UTC) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (freefall.freebsd.org [IPv6:2001:1900:2254:206c::16:87]) by mx1.freebsd.org (Postfix) with ESMTP id 976EF8FC18 for ; Mon, 12 Nov 2012 19:20:00 +0000 (UTC) Received: from freefall.freebsd.org (localhost [127.0.0.1]) by freefall.freebsd.org (8.14.5/8.14.5) with ESMTP id qACJK0Qm028734 for ; Mon, 12 Nov 2012 19:20:00 GMT (envelope-from gnats@freefall.freebsd.org) Received: (from gnats@localhost) by freefall.freebsd.org (8.14.5/8.14.5/Submit) id qACJK0rv028733; Mon, 12 Nov 2012 19:20:00 GMT (envelope-from gnats) Resent-Date: Mon, 12 Nov 2012 19:20:00 GMT Resent-Message-Id: <201211121920.qACJK0rv028733@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, Garrett Cooper Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 5331659C for ; Mon, 12 Nov 2012 19:19:37 +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 1F8698FC13 for ; Mon, 12 Nov 2012 19:19:37 +0000 (UTC) Received: from red.freebsd.org (localhost [127.0.0.1]) by red.freebsd.org (8.14.5/8.14.5) with ESMTP id qACJJaxU006784 for ; Mon, 12 Nov 2012 19:19:36 GMT (envelope-from nobody@red.freebsd.org) Received: (from nobody@localhost) by red.freebsd.org (8.14.5/8.14.5/Submit) id qACJJa9t006783; Mon, 12 Nov 2012 19:19:36 GMT (envelope-from nobody) Message-Id: <201211121919.qACJJa9t006783@red.freebsd.org> Date: Mon, 12 Nov 2012 19:19:36 GMT From: Garrett Cooper To: freebsd-gnats-submit@FreeBSD.org X-Send-Pr-Version: www-3.1 Subject: kern/173584: [PATCH] [cxgbe] Add hw.cxgbe.force_firmware_install tunable to force firmware "updates" at module load X-BeenThere: freebsd-bugs@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: Bug reports List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 12 Nov 2012 19:20:00 -0000 >Number: 173584 >Category: kern >Synopsis: [PATCH] [cxgbe] Add hw.cxgbe.force_firmware_install tunable to force firmware "updates" at module load >Confidential: no >Severity: non-critical >Priority: low >Responsible: freebsd-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: sw-bug >Submitter-Id: current-users >Arrival-Date: Mon Nov 12 19:20:00 UTC 2012 >Closed-Date: >Last-Modified: >Originator: Garrett Cooper >Release: 9.1-STABLE >Organization: EMC Isilon >Environment: FreeBSD wf158.west.isilon.com 9.1-PRERELEASE FreeBSD 9.1-PRERELEASE #2: Tue Nov 6 14:00:42 PST 2012 root@wf158.west.isilon.com:/usr/obj/usr/src/sys/GENERIC amd64 >Description: The attached patch adds a tunable which forces a firmware update in order to ensure that when the driver is loaded, if it's running a newer version of firmware it can be downgraded to an older version. Example: # kenv hw.cxgbe.force_firmware_install=1 # kldload if_cxgbe # sysctl dev.t4nex.0.firmware_version dev.t4nex.0.firmware_version: 1.6.2.0 The firmware version provided on the card was newer before (1.7.x IIRC). >How-To-Repeat: >Fix: Patch attached with submission follows: Index: sys/dev/cxgbe/t4_main.c =================================================================== --- sys/dev/cxgbe/t4_main.c (revision 242655) +++ sys/dev/cxgbe/t4_main.c (working copy) @@ -234,6 +234,9 @@ static int t4_fcoecaps_allowed = 0; TUNABLE_INT("hw.cxgbe.fcoecaps_allowed", &t4_fcoecaps_allowed); +static int t4_force_firmware_install = 0; +TUNABLE_INT("hw.cxgbe.force_firmware_install", &t4_force_firmware_install); + struct intrs_and_queues { int intr_type; /* INTx, MSI, or MSI-X */ int nirq; /* Number of vectors */ @@ -1576,9 +1579,10 @@ /* * Always upgrade, even for minor/micro/build mismatches. * Downgrade only for a major version mismatch or if - * force_firmware_install was specified. + * t4_force_firmware_install was specified. */ - if (fw != NULL && (rc < 0 || v > sc->params.fw_vers)) { + if (fw != NULL && + (t4_force_firmware_install || rc < 0 || v > sc->params.fw_vers)) { device_printf(sc->dev, "installing firmware %d.%d.%d.%d on card.\n", G_FW_HDR_FW_VER_MAJOR(v), G_FW_HDR_FW_VER_MINOR(v), >Release-Note: >Audit-Trail: >Unformatted: