From owner-svn-src-all@FreeBSD.ORG Thu Apr 11 22:46:39 2013 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by hub.freebsd.org (Postfix) with ESMTP id E6AADDB0; Thu, 11 Apr 2013 22:46:39 +0000 (UTC) (envelope-from np@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) by mx1.freebsd.org (Postfix) with ESMTP id D93D02F; Thu, 11 Apr 2013 22:46:39 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.6/8.14.6) with ESMTP id r3BMkdlq045587; Thu, 11 Apr 2013 22:46:39 GMT (envelope-from np@svn.freebsd.org) Received: (from np@localhost) by svn.freebsd.org (8.14.6/8.14.5/Submit) id r3BMkdtK045586; Thu, 11 Apr 2013 22:46:39 GMT (envelope-from np@svn.freebsd.org) Message-Id: <201304112246.r3BMkdtK045586@svn.freebsd.org> From: Navdeep Parhar Date: Thu, 11 Apr 2013 22:46:39 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r249391 - head/sys/dev/cxgbe 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.14 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: Thu, 11 Apr 2013 22:46:40 -0000 Author: np Date: Thu Apr 11 22:46:39 2013 New Revision: 249391 URL: http://svnweb.freebsd.org/changeset/base/249391 Log: Auto-reduce the holdoff timers that are greater than the maximum value allowed by the hardware. MFC after: 3 days Modified: head/sys/dev/cxgbe/t4_sge.c Modified: head/sys/dev/cxgbe/t4_sge.c ============================================================================== --- head/sys/dev/cxgbe/t4_sge.c Thu Apr 11 22:18:20 2013 (r249390) +++ head/sys/dev/cxgbe/t4_sge.c Thu Apr 11 22:46:39 2013 (r249391) @@ -280,12 +280,16 @@ t4_init_sge_cpl_handlers(struct adapter t4_register_fw_msg_handler(sc, FW6_TYPE_CMD_RPL, t4_handle_fw_rpl); } +/* + * adap->params.vpd.cclk must be set up before this is called. + */ void t4_tweak_chip_settings(struct adapter *sc) { int i; uint32_t v, m; int intr_timer[SGE_NTIMERS] = {1, 5, 10, 50, 100, 200}; + int timer_max = M_TIMERVALUE0 * 1000 / sc->params.vpd.cclk; int intr_pktcount[SGE_NCOUNTERS] = {1, 8, 16, 32}; /* 63 max */ uint16_t indsz = min(RX_COPY_THRESHOLD - 1, M_INDICATESIZE); @@ -318,7 +322,24 @@ t4_tweak_chip_settings(struct adapter *s V_THRESHOLD_2(intr_pktcount[2]) | V_THRESHOLD_3(intr_pktcount[3]); t4_write_reg(sc, A_SGE_INGRESS_RX_THRESHOLD, v); - /* adap->params.vpd.cclk must be set up before this */ + KASSERT(intr_timer[0] <= timer_max, + ("%s: not a single usable timer (%d, %d)", __func__, intr_timer[0], + timer_max)); + for (i = 1; i < nitems(intr_timer); i++) { + KASSERT(intr_timer[i] >= intr_timer[i - 1], + ("%s: timers not listed in increasing order (%d)", + __func__, i)); + + while (intr_timer[i] > timer_max) { + if (i == nitems(intr_timer) - 1) { + intr_timer[i] = timer_max; + break; + } + intr_timer[i] += intr_timer[i - 1]; + intr_timer[i] /= 2; + } + } + v = V_TIMERVALUE0(us_to_core_ticks(sc, intr_timer[0])) | V_TIMERVALUE1(us_to_core_ticks(sc, intr_timer[1])); t4_write_reg(sc, A_SGE_TIMER_VALUE_0_AND_1, v);