From owner-freebsd-stable@FreeBSD.ORG Wed Oct 31 03:37:02 2007 Return-Path: Delivered-To: freebsd-stable@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 64C6316A4A0 for ; Wed, 31 Oct 2007 03:37:02 +0000 (UTC) (envelope-from pyunyh@gmail.com) Received: from wa-out-1112.google.com (wa-out-1112.google.com [209.85.146.180]) by mx1.freebsd.org (Postfix) with ESMTP id 2E88F13C4BC for ; Wed, 31 Oct 2007 03:37:02 +0000 (UTC) (envelope-from pyunyh@gmail.com) Received: by wa-out-1112.google.com with SMTP id k17so14724waf for ; Tue, 30 Oct 2007 20:36:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=beta; h=domainkey-signature:received:received:received:received:date:from:to:cc:subject:message-id:reply-to:references:mime-version:content-type:content-disposition:in-reply-to:user-agent; bh=zHtqHhGk3ebLU06z9+zjhh7y5BGUHT8xfUd+Fo0C4R0=; b=B7R7X6IQGb3mfcpEFJVLyigFlUwfwcV4sFX7AM1AnrcnTQR36vPxnTnBGZH8RLQsLVpavMeD4WxoXgRpkGoTJrotAj9DSNUg4mofhdFbJK4Z/j7mU7XFzdTTTSNIWsMgAqtI/KIjKxXBq/oxCjH8PuuB/3H0pw/Ga/IpuROH2N8= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=beta; h=received:date:from:to:cc:subject:message-id:reply-to:references:mime-version:content-type:content-disposition:in-reply-to:user-agent; b=YtHxkNItS4BX/uoC9j7xoLBbHnNfbJzRU89Je+zZZ1C58sYV0GQLapqzx0Tf2GLwMe7zTGgvV/WjPXGELCuKdoUi/TaVFIvF17vKfrNHWBK8LW142wHF7a70c+rLtS5oP2MkkNphrjNB3wztlXQfDsjoVsHh826c6C1ETSoaEeY= Received: by 10.115.107.1 with SMTP id j1mr9000311wam.1193801807465; Tue, 30 Oct 2007 20:36:47 -0700 (PDT) Received: from michelle.cdnetworks.co.kr ( [211.53.35.84]) by mx.google.com with ESMTPS id v37sm82552wah.2007.10.30.20.36.43 (version=TLSv1/SSLv3 cipher=OTHER); Tue, 30 Oct 2007 20:36:46 -0700 (PDT) Received: from michelle.cdnetworks.co.kr (localhost.cdnetworks.co.kr [127.0.0.1]) by michelle.cdnetworks.co.kr (8.13.5/8.13.5) with ESMTP id l9V3ad2d043257 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Wed, 31 Oct 2007 12:36:39 +0900 (KST) (envelope-from pyunyh@gmail.com) Received: (from yongari@localhost) by michelle.cdnetworks.co.kr (8.13.5/8.13.5/Submit) id l9V3acQO043256; Wed, 31 Oct 2007 12:36:38 +0900 (KST) (envelope-from pyunyh@gmail.com) Date: Wed, 31 Oct 2007 12:36:38 +0900 From: Pyun YongHyeon To: Oleg Lomaka Message-ID: <20071031033638.GC42371@cdnetworks.co.kr> References: <20071024084934.GF11234@cdnetworks.co.kr> <471F52DC.4080305@gmail.com> <20071025020637.GA16092@cdnetworks.co.kr> <47203EC3.4010203@gmail.com> <20071025083032.GE16092@cdnetworks.co.kr> <20071027030921.GC25452@cdnetworks.co.kr> <4726EE79.6050401@lomaka.org.ua> <20071030085831.GG38663@cdnetworks.co.kr> <47273920.8090003@gmail.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="EVF5PPMfhYS0aIcm" Content-Disposition: inline In-Reply-To: <47273920.8090003@gmail.com> User-Agent: Mutt/1.4.2.1i Cc: freebsd-stable@freebsd.org Subject: Re: any hope for nfe/msk? X-BeenThere: freebsd-stable@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list Reply-To: pyunyh@gmail.com List-Id: Production branch of FreeBSD source code List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 31 Oct 2007 03:37:02 -0000 --EVF5PPMfhYS0aIcm Content-Type: text/plain; charset=us-ascii Content-Disposition: inline On Tue, Oct 30, 2007 at 04:01:04PM +0200, Oleg Lomaka wrote: [...] > I had RxFIFO overrun again :( > from dmest: > msk0: Rx FIFO overrun! [...] Please try attached patch again. Sorry for the trouble. After applying the patch show me verbosed dmesg output related with msk(4)/PHY driver. Thanks for testing. -- Regards, Pyun YongHyeon --EVF5PPMfhYS0aIcm Content-Type: text/plain; charset=us-ascii Content-Disposition: attachment; filename="msk.queue.patch2" Index: if_msk.c =================================================================== RCS file: /home/ncvs/src/sys/dev/msk/if_msk.c,v retrieving revision 1.18 diff -u -r1.18 if_msk.c --- if_msk.c 20 Jul 2007 00:25:20 -0000 1.18 +++ if_msk.c 31 Oct 2007 03:31:48 -0000 @@ -368,6 +368,8 @@ struct msk_if_softc *sc_if; sc_if = device_get_softc(dev); + if (phy != PHY_ADDR_MARV) + return (0); return (msk_phy_readreg(sc_if, phy, reg)); } @@ -406,6 +408,8 @@ struct msk_if_softc *sc_if; sc_if = device_get_softc(dev); + if (phy != PHY_ADDR_MARV) + return (0); return (msk_phy_writereg(sc_if, phy, reg, val)); } @@ -516,17 +520,14 @@ CSR_WRITE_4(sc, MR_ADDR(sc_if->msk_port, GMAC_CTRL), gmac); /* Enable PHY interrupt for FIFO underrun/overflow. */ - if (sc->msk_marvell_phy) - msk_phy_writereg(sc_if, PHY_ADDR_MARV, - PHY_MARV_INT_MASK, PHY_M_IS_FIFO_ERROR); + msk_phy_writereg(sc_if, PHY_ADDR_MARV, PHY_MARV_INT_MASK, + PHY_M_IS_FIFO_ERROR); } else { /* * Link state changed to down. * Disable PHY interrupts. */ - if (sc->msk_marvell_phy) - msk_phy_writereg(sc_if, PHY_ADDR_MARV, - PHY_MARV_INT_MASK, 0); + msk_phy_writereg(sc_if, PHY_ADDR_MARV, PHY_MARV_INT_MASK, 0); /* Disable Rx/Tx MAC. */ gmac = GMAC_READ_2(sc, sc_if->msk_port, GM_GP_CTRL); gmac &= ~(GM_GPCR_RX_ENA | GM_GPCR_TX_ENA); @@ -1018,64 +1019,38 @@ static int mskc_setup_rambuffer(struct msk_softc *sc) { - int totqsize, minqsize; - int avail, next; + int next; int i; uint8_t val; /* Get adapter SRAM size. */ val = CSR_READ_1(sc, B2_E_0); sc->msk_ramsize = (val == 0) ? 128 : val * 4; - if (sc->msk_hw_id == CHIP_ID_YUKON_FE) - sc->msk_ramsize = 4 * 4; if (bootverbose) device_printf(sc->msk_dev, "RAM buffer size : %dKB\n", sc->msk_ramsize); - - totqsize = sc->msk_ramsize * sc->msk_num_port; - minqsize = MSK_MIN_RXQ_SIZE + MSK_MIN_TXQ_SIZE; - if (minqsize > sc->msk_ramsize) - minqsize = sc->msk_ramsize; - - if (minqsize * sc->msk_num_port > totqsize) { - device_printf(sc->msk_dev, - "not enough RAM buffer memory : %d/%dKB\n", - minqsize * sc->msk_num_port, totqsize); - return (ENOSPC); - } - - avail = totqsize; - if (sc->msk_num_port > 1) { - /* - * Divide up the memory evenly so that everyone gets a - * fair share for dual port adapters. - */ - avail = sc->msk_ramsize; - } - - /* Take away the minimum memory for active queues. */ - avail -= minqsize; - /* Rx queue gets the minimum + 80% of the rest. */ - sc->msk_rxqsize = - (avail * MSK_RAM_QUOTA_RX) / 100 + MSK_MIN_RXQ_SIZE; - avail -= (sc->msk_rxqsize - MSK_MIN_RXQ_SIZE); - sc->msk_txqsize = avail + MSK_MIN_TXQ_SIZE; - + /* + * Give receiver 2/3 of memory and round down to the multiple + * of 1024. Tx/Rx RAM buffer size of Yukon II shoud be multiple + * of 1024. + */ + sc->msk_rxqsize = rounddown((sc->msk_ramsize * 1024 * 2) / 3, 1024); + sc->msk_txqsize = (sc->msk_ramsize * 1024) - sc->msk_rxqsize; for (i = 0, next = 0; i < sc->msk_num_port; i++) { sc->msk_rxqstart[i] = next; - sc->msk_rxqend[i] = next + (sc->msk_rxqsize * 1024) - 1; + sc->msk_rxqend[i] = next + sc->msk_rxqsize - 1; next = sc->msk_rxqend[i] + 1; sc->msk_txqstart[i] = next; - sc->msk_txqend[i] = next + (sc->msk_txqsize * 1024) - 1; + sc->msk_txqend[i] = next + sc->msk_txqsize - 1; next = sc->msk_txqend[i] + 1; if (bootverbose) { device_printf(sc->msk_dev, "Port %d : Rx Queue %dKB(0x%08x:0x%08x)\n", i, - sc->msk_rxqsize, sc->msk_rxqstart[i], + sc->msk_rxqsize / 1024, sc->msk_rxqstart[i], sc->msk_rxqend[i]); device_printf(sc->msk_dev, "Port %d : Tx Queue %dKB(0x%08x:0x%08x)\n", i, - sc->msk_txqsize, sc->msk_txqstart[i], + sc->msk_txqsize / 1024, sc->msk_txqstart[i], sc->msk_txqend[i]); } } @@ -1517,10 +1492,6 @@ error = ENXIO; goto fail; } - /* Check whether PHY Id is MARVELL. */ - if (msk_phy_readreg(sc_if, PHY_ADDR_MARV, PHY_MARV_ID0) - == PHY_MARV_ID0_VAL) - sc->msk_marvell_phy = 1; fail: if (error != 0) { @@ -3226,15 +3197,12 @@ { uint16_t status; - if (sc_if->msk_softc->msk_marvell_phy) { - msk_phy_readreg(sc_if, PHY_ADDR_MARV, PHY_MARV_INT_STAT); - status = msk_phy_readreg(sc_if, PHY_ADDR_MARV, - PHY_MARV_INT_STAT); - /* Handle FIFO Underrun/Overflow? */ - if ((status & PHY_M_IS_FIFO_ERROR)) - device_printf(sc_if->msk_if_dev, - "PHY FIFO underrun/overflow.\n"); - } + msk_phy_readreg(sc_if, PHY_ADDR_MARV, PHY_MARV_INT_STAT); + status = msk_phy_readreg(sc_if, PHY_ADDR_MARV, PHY_MARV_INT_STAT); + /* Handle FIFO Underrun/Overflow? */ + if ((status & PHY_M_IS_FIFO_ERROR)) + device_printf(sc_if->msk_if_dev, + "PHY FIFO underrun/overflow.\n"); } static void @@ -4035,8 +4003,7 @@ /* Disable all GMAC interrupt. */ CSR_WRITE_1(sc, MR_ADDR(sc_if->msk_port, GMAC_IRQ_MSK), 0); /* Disable PHY interrupt. */ - if (sc->msk_marvell_phy) - msk_phy_writereg(sc_if, PHY_ADDR_MARV, PHY_MARV_INT_MASK, 0); + msk_phy_writereg(sc_if, PHY_ADDR_MARV, PHY_MARV_INT_MASK, 0); /* Disable the RAM Interface Arbiter. */ CSR_WRITE_1(sc, MR_ADDR(sc_if->msk_port, TXA_CTRL), TXA_DIS_ARB); Index: if_mskreg.h =================================================================== RCS file: /home/ncvs/src/sys/dev/msk/if_mskreg.h,v retrieving revision 1.6 diff -u -r1.6 if_mskreg.h --- if_mskreg.h 12 Jun 2007 10:50:32 -0000 1.6 +++ if_mskreg.h 31 Oct 2007 03:31:49 -0000 @@ -2333,7 +2333,6 @@ int msk_suspended; int msk_hw_feature; int msk_clock; - int msk_marvell_phy; int msk_msi; struct msk_if_softc *msk_if[2]; device_t msk_devs[2]; @@ -2370,8 +2369,6 @@ device_t msk_if_dev; int32_t msk_port; /* port # on controller */ int msk_framesize; - int msk_phytype; - int msk_phyaddr; int msk_link; struct callout msk_tick_ch; int msk_watchdog_timer; --EVF5PPMfhYS0aIcm--