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 <[email protected]> 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
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
_______________________________________________
[email protected] mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-stable
To unsubscribe, send any mail to "[email protected]"