From owner-svn-src-all@freebsd.org Wed Jul 15 00:35:52 2015 Return-Path: Delivered-To: svn-src-all@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 82A0C99C3D3; Wed, 15 Jul 2015 00:35:52 +0000 (UTC) (envelope-from pkelsey@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 4F0AA1DC8; Wed, 15 Jul 2015 00:35:52 +0000 (UTC) (envelope-from pkelsey@FreeBSD.org) Received: from svnmir.geo.freebsd.org ([127.0.1.70]) by repo.freebsd.org (8.14.9/8.14.9) with ESMTP id t6F0Zqr0038301; Wed, 15 Jul 2015 00:35:52 GMT (envelope-from pkelsey@FreeBSD.org) Received: (from pkelsey@localhost) by svnmir.geo.freebsd.org (8.14.9/8.14.9/Submit) id t6F0ZpkB038298; Wed, 15 Jul 2015 00:35:51 GMT (envelope-from pkelsey@FreeBSD.org) Message-Id: <201507150035.t6F0ZpkB038298@svnmir.geo.freebsd.org> X-Authentication-Warning: svnmir.geo.freebsd.org: pkelsey set sender to pkelsey@FreeBSD.org using -f From: Patrick Kelsey Date: Wed, 15 Jul 2015 00:35:51 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r285590 - head/sys/dev/ixgbe X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 15 Jul 2015 00:35:52 -0000 Author: pkelsey Date: Wed Jul 15 00:35:50 2015 New Revision: 285590 URL: https://svnweb.freebsd.org/changeset/base/285590 Log: Fix igxbe SRIOV VF (if_ixv) initialization bugs. The MAC address for an if_ixv instance can now set at creation time, and the receive ring tail pointer is correctly initialized (previously, things still worked because the receive ring tail pointer was being fixed up as a side effect of other activity). Differential Revision: https://reviews.freebsd.org/D2922 Reviewed by: erj, gnn Approved by: jmallett (mentor) Sponsored by: Norse Corp, Inc. Modified: head/sys/dev/ixgbe/if_ix.c head/sys/dev/ixgbe/if_ixv.c head/sys/dev/ixgbe/ixgbe_vf.c Modified: head/sys/dev/ixgbe/if_ix.c ============================================================================== --- head/sys/dev/ixgbe/if_ix.c Tue Jul 14 23:49:29 2015 (r285589) +++ head/sys/dev/ixgbe/if_ix.c Wed Jul 15 00:35:50 2015 (r285590) @@ -5273,10 +5273,10 @@ ixgbe_vf_api_negotiate(struct adapter *a uint32_t *msg) { - switch (msg[0]) { + switch (msg[1]) { case IXGBE_API_VER_1_0: case IXGBE_API_VER_1_1: - vf->api_ver = msg[0]; + vf->api_ver = msg[1]; ixgbe_send_vf_ack(adapter, vf, msg[0]); break; default: Modified: head/sys/dev/ixgbe/if_ixv.c ============================================================================== --- head/sys/dev/ixgbe/if_ixv.c Tue Jul 14 23:49:29 2015 (r285589) +++ head/sys/dev/ixgbe/if_ixv.c Wed Jul 15 00:35:50 2015 (r285590) @@ -1665,10 +1665,6 @@ ixv_initialize_receive_units(struct adap reg |= IXGBE_SRRCTL_DESCTYPE_ADV_ONEBUF; IXGBE_WRITE_REG(hw, IXGBE_VFSRRCTL(i), reg); - /* Set the Tail Pointer */ - IXGBE_WRITE_REG(hw, IXGBE_VFRDT(rxr->me), - adapter->num_rx_desc - 1); - /* Set the processing limit */ rxr->process_limit = ixv_rx_process_limit; @@ -1687,6 +1683,10 @@ ixv_initialize_receive_units(struct adap msec_delay(1); } wmb(); + + /* Set the Tail Pointer */ + IXGBE_WRITE_REG(hw, IXGBE_VFRDT(rxr->me), + adapter->num_rx_desc - 1); } rxcsum = IXGBE_READ_REG(hw, IXGBE_RXCSUM); Modified: head/sys/dev/ixgbe/ixgbe_vf.c ============================================================================== --- head/sys/dev/ixgbe/ixgbe_vf.c Tue Jul 14 23:49:29 2015 (r285589) +++ head/sys/dev/ixgbe/ixgbe_vf.c Wed Jul 15 00:35:50 2015 (r285590) @@ -225,6 +225,8 @@ s32 ixgbe_reset_hw_vf(struct ixgbe_hw *h if (ret_val) return ret_val; + msgbuf[0] &= ~IXGBE_VT_MSGTYPE_CTS; + if (msgbuf[0] != (IXGBE_VF_RESET | IXGBE_VT_MSGTYPE_ACK) && msgbuf[0] != (IXGBE_VF_RESET | IXGBE_VT_MSGTYPE_NACK)) return IXGBE_ERR_INVALID_MAC_ADDR;