Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 28 Dec 2009 14:21:40 -0800
From:      Pyun YongHyeon <pyunyh@gmail.com>
To:        Olivier Cochard-Labb? <olivier@cochard.me>
Cc:        stable@freebsd.org
Subject:   Re: FreeBSD 8.0: can't PXE Boot using nvidia nForce4 network card
Message-ID:  <20091228222140.GC1166@michelle.cdnetworks.com>
In-Reply-To: <3131aa530912281330t34032ad5he5fe7720b4d2744a@mail.gmail.com>
References:  <3131aa530912230507q5abd0a9eh1f22ac858518268f@mail.gmail.com> <20091224193320.GD8146@michelle.cdnetworks.com> <3131aa530912281330t34032ad5he5fe7720b4d2744a@mail.gmail.com>

next in thread | previous in thread | raw e-mail | index | archive | help

--nFreZHaLTZJo0R7j
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline

On Mon, Dec 28, 2009 at 10:30:25PM +0100, Olivier Cochard-Labb? wrote:
> On Thu, Dec 24, 2009 at 8:33 PM, Pyun YongHyeon <pyunyh@gmail.com> wrote:
> 
> >> nfe0: MII without any phy!
> > ?^^^^^^^^^^^^^^^^^^^^^^^^^^
> > Maybe this is the reason why you can't use NFS.
> > If your BIOS has an option that disables management feature
> > of ethernet controller try toggle the feature.
> >
> 
> Hi,
> 
> I've disabled the "POST Check LAN Cable" in the BIOS: But still the
> same "MII without any phy!" message.
> 

Ok, it seems Linux forcedeth driver seems to poke NFE_STATUS
register before accessing PHY. I'm not sure whether this code could
be related with the issue but would you try attached patch?

> Regards,
> 
> Olivier

--nFreZHaLTZJo0R7j
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment; filename="nfe.CK804.diff"

Index: sys/dev/nfe/if_nfe.c
===================================================================
--- sys/dev/nfe/if_nfe.c	(revision 201135)
+++ sys/dev/nfe/if_nfe.c	(working copy)
@@ -340,6 +340,7 @@
 	struct nfe_softc *sc;
 	struct ifnet *ifp;
 	bus_addr_t dma_addr_max;
+	uint32_t phystat, phyrestore;
 	int error = 0, i, msic, reg, rid;
 
 	sc = device_get_softc(dev);
@@ -349,6 +350,7 @@
 	    MTX_DEF);
 	callout_init_mtx(&sc->nfe_stat_ch, &sc->nfe_mtx, 0);
 	TASK_INIT(&sc->nfe_link_task, 0, nfe_link_task, sc);
+	phyrestore = 0;
 
 	pci_enable_busmaster(dev);
 
@@ -599,6 +601,13 @@
 	ifp->if_capabilities |= IFCAP_POLLING;
 #endif
 
+	phystat = NFE_READ(sc, NFE_STATUS) & NFE_STATUS_RUNNING;
+	if ((phystat & NFE_STATUS_RUNNING) != 0) {
+		phystat &= ~NFE_STATUS_RUNNING;
+		NFE_WRITE(sc, NFE_STATUS, phystat);
+		phyrestore = 1;
+	}
+
 	/* Do MII setup */
 	if (mii_phy_probe(dev, &sc->nfe_miibus, nfe_ifmedia_upd,
 	    nfe_ifmedia_sts)) {
@@ -636,8 +645,11 @@
 	}
 
 fail:
-	if (error)
+	if (error) {
+		if (phyrestore != 0)
+			NFE_WRITE(sc, NFE_STATUS, phystat | NFE_STATUS_RUNNING);
 		nfe_detach(dev);
+	}
 
 	return (error);
 }
@@ -2744,7 +2756,8 @@
 	NFE_WRITE(sc, NFE_SETUP_R6, NFE_R6_MAGIC);
 
 	/* update MAC knowledge of PHY; generates a NFE_IRQ_LINK interrupt */
-	NFE_WRITE(sc, NFE_STATUS, sc->mii_phyaddr << 24 | NFE_STATUS_MAGIC);
+	NFE_WRITE(sc, NFE_STATUS, sc->mii_phyaddr << NFE_STATUS_PHYSHIFT |
+	    NFE_STATUS_PHYVALID | NFE_STATUS_RUNNING);
 
 	NFE_WRITE(sc, NFE_SETUP_R4, NFE_R4_MAGIC);
 	NFE_WRITE(sc, NFE_WOL_CTL, NFE_WOL_MAGIC);
Index: sys/dev/nfe/if_nfereg.h
===================================================================
--- sys/dev/nfe/if_nfereg.h	(revision 201135)
+++ sys/dev/nfe/if_nfereg.h	(working copy)
@@ -137,7 +137,11 @@
 #define	NFE_PHY_BUSY		0x08000
 #define	NFE_PHYADD_SHIFT	5
 
-#define	NFE_STATUS_MAGIC	0x140000
+#define	NFE_STATUS_START	0x00000002
+#define	NFE_STATUS_LINKUP	0x00000004
+#define	NFE_STATUS_PHYVALID	0x00040000
+#define	NFE_STATUS_RUNNING	0x00100000
+#define	NFE_STATUS_PHYSHIFT	24
 
 #define	NFE_R1_MAGIC_1000	0x14050f
 #define	NFE_R1_MAGIC_10_100	0x16070f

--nFreZHaLTZJo0R7j--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20091228222140.GC1166>