From owner-freebsd-current@FreeBSD.ORG Mon Mar 4 06:29:51 2013 Return-Path: Delivered-To: current@freebsd.org Received: from mx1.freebsd.org (mx1.FreeBSD.org [8.8.178.115]) by hub.freebsd.org (Postfix) with ESMTP id C9850664; Mon, 4 Mar 2013 06:29:51 +0000 (UTC) (envelope-from pyunyh@gmail.com) Received: from mail-pb0-f48.google.com (mail-pb0-f48.google.com [209.85.160.48]) by mx1.freebsd.org (Postfix) with ESMTP id 996E0E56; Mon, 4 Mar 2013 06:29:51 +0000 (UTC) Received: by mail-pb0-f48.google.com with SMTP id wy12so2884749pbc.35 for ; Sun, 03 Mar 2013 22:29:51 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=x-received:from:date:to:cc:subject:message-id:reply-to:references :mime-version:content-type:content-disposition:in-reply-to :user-agent; bh=YAaGHxbZQlb5azYLVh5pW2UoIbzQSEFgGIwTqu0L7tk=; b=pzJWa1snOk+7Xw+IPFLM3EnV5bYQIRa0d68fYXjGAnkBa9djwRqrz4ya0JBPPV2rE8 8Uw2b2T30q/Fwlu6YK1zaYop8H5yLrfNO8BUCYGxYbmTNm7HWSeKR3BNr4s8VtyHy643 BXsKoyOb0p4SngO5TsiXFJJMoAt0FB0ZbpTynLezrJxoHaCngk4UvGYVZYw7cxlU2H7q xZUbqoZXQZt2ySnNmujx/NiUPiXij1fm4dMdfyGSG3bTOjppewszEb+uqFBvWWf8dJrC NGH5Jb+Zxozvvyu1kFqOClBpsA7bsfmhu/+UzALBSzUo/zPnROS2PPP2tIttkp7kBFdX l61w== X-Received: by 10.66.162.232 with SMTP id yd8mr31221874pab.100.1362378591074; Sun, 03 Mar 2013 22:29:51 -0800 (PST) Received: from pyunyh@gmail.com (lpe4.p59-icn.cdngp.net. [114.111.62.249]) by mx.google.com with ESMTPS id b9sm21221046pba.6.2013.03.03.22.29.47 (version=TLSv1 cipher=RC4-SHA bits=128/128); Sun, 03 Mar 2013 22:29:50 -0800 (PST) Received: by pyunyh@gmail.com (sSMTP sendmail emulation); Mon, 04 Mar 2013 15:29:44 +0900 From: YongHyeon PYUN Date: Mon, 4 Mar 2013 15:29:44 +0900 To: Alexey Dokuchaev Subject: Re: ale(4) cannot negotiate as GigE Message-ID: <20130304062944.GB1445@michelle.cdnetworks.com> References: <20130222015607.GC66767@FreeBSD.org> <20130225082344.GC1426@michelle.cdnetworks.com> <20130303095330.GA57026@FreeBSD.org> <20130303120010.GA84560@FreeBSD.org> <20130304005044.GA4589@michelle.cdnetworks.com> <20130304015344.GA62059@FreeBSD.org> <20130304021059.GC4589@michelle.cdnetworks.com> <20130304024631.GA78040@FreeBSD.org> <20130304052328.GA1445@michelle.cdnetworks.com> <20130304055948.GA76042@FreeBSD.org> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="U+BazGySraz5kW0T" Content-Disposition: inline In-Reply-To: <20130304055948.GA76042@FreeBSD.org> User-Agent: Mutt/1.4.2.3i Cc: current@freebsd.org X-BeenThere: freebsd-current@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list Reply-To: pyunyh@gmail.com List-Id: Discussions about the use of FreeBSD-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 04 Mar 2013 06:29:51 -0000 --U+BazGySraz5kW0T Content-Type: text/plain; charset=us-ascii Content-Disposition: inline On Mon, Mar 04, 2013 at 05:59:48AM +0000, Alexey Dokuchaev wrote: > On Mon, Mar 04, 2013 at 02:23:28PM +0900, YongHyeon PYUN wrote: > > Ok, here is final diff which combines two things you've tested. > > So revert any changes before applying it. > > Let me know how it goes on your box. > > Hmm, apparently something went wrong, as I'm back to 100baseTX after make > kernel and reboot... Hmm, updated diff again. > > ./danfe --U+BazGySraz5kW0T Content-Type: text/plain; charset=us-ascii Content-Disposition: attachment; filename="ale.pr.diff4" Index: sys/dev/ale/if_ale.c =================================================================== --- sys/dev/ale/if_ale.c (revision 247382) +++ sys/dev/ale/if_ale.c (working copy) @@ -406,11 +406,13 @@ ale_phy_reset(struct ale_softc *sc) CSR_WRITE_2(sc, ALE_GPHY_CTRL, GPHY_CTRL_HIB_EN | GPHY_CTRL_HIB_PULSE | GPHY_CTRL_SEL_ANA_RESET | GPHY_CTRL_PHY_PLL_ON); - DELAY(1000); + CSR_READ_2(sc, ALE_GPHY_CTRL); + DELAY(2000); CSR_WRITE_2(sc, ALE_GPHY_CTRL, GPHY_CTRL_EXT_RESET | GPHY_CTRL_HIB_EN | GPHY_CTRL_HIB_PULSE | GPHY_CTRL_SEL_ANA_RESET | GPHY_CTRL_PHY_PLL_ON); - DELAY(1000); + CSR_READ_2(sc, ALE_GPHY_CTRL); + DELAY(2000); #define ATPHY_DBG_ADDR 0x1D #define ATPHY_DBG_DATA 0x1E @@ -635,7 +637,7 @@ ale_attach(device_t dev) /* Set up MII bus. */ error = mii_attach(dev, &sc->ale_miibus, ifp, ale_mediachange, ale_mediastatus, BMSR_DEFCAPMASK, sc->ale_phyaddr, MII_OFFSET_ANY, - MIIF_DOPAUSE); + MIIF_DOPAUSE | MIIF_MACPRIV0); if (error != 0) { device_printf(dev, "attaching PHYs failed\n"); goto fail; @@ -1515,6 +1517,7 @@ ale_setwol(struct ale_softc *sc) GPHY_CTRL_HIB_PULSE | GPHY_CTRL_PHY_PLL_ON | GPHY_CTRL_SEL_ANA_RESET | GPHY_CTRL_PHY_IDDQ | GPHY_CTRL_PCLK_SEL_DIS | GPHY_CTRL_PWDOWN_HW); + CSR_READ_2(sc, ALE_GPHY_CTRL); return; } @@ -1547,6 +1550,7 @@ ale_setwol(struct ale_softc *sc) GPHY_CTRL_HIB_PULSE | GPHY_CTRL_SEL_ANA_RESET | GPHY_CTRL_PHY_IDDQ | GPHY_CTRL_PCLK_SEL_DIS | GPHY_CTRL_PWDOWN_HW); + CSR_READ_2(sc, ALE_GPHY_CTRL); } /* Request PME. */ pmstat = pci_read_config(sc->ale_dev, pmc + PCIR_POWER_STATUS, 2); Index: sys/dev/mii/atphy.c =================================================================== --- sys/dev/mii/atphy.c (revision 247382) +++ sys/dev/mii/atphy.c (working copy) @@ -100,8 +100,14 @@ atphy_probe(device_t dev) static int atphy_attach(device_t dev) { + struct mii_attach_args *ma; + u_int flags; - mii_phy_dev_attach(dev, MIIF_NOMANPAUSE, &atphy_funcs, 1); + ma = device_get_ivars(dev); + flags = MIIF_NOMANPAUSE; + if ((miibus_get_flags(dev) & MIIF_MACPRIV0) != 0) + flags |= MIIF_PHYPRIV0; + mii_phy_dev_attach(dev, flags, &atphy_funcs, 1); return (0); } @@ -287,9 +293,11 @@ atphy_reset(struct mii_softc *sc) uint32_t reg; int i; - /* Take PHY out of power down mode. */ - PHY_WRITE(sc, 29, 0x29); - PHY_WRITE(sc, 30, 0); + if ((sc->mii_flags & MIIF_PHYPRIV0) != 0) { + /* Take PHY out of power down mode. */ + PHY_WRITE(sc, 29, 0x29); + PHY_WRITE(sc, 30, 0); + } reg = PHY_READ(sc, ATPHY_SCR); /* Enable automatic crossover. */ --U+BazGySraz5kW0T--