Module Name:    src
Committed By:   martin
Date:           Tue Sep  9 10:04:19 UTC 2014

Modified Files:
        src/sys/dev/ic: dwc_gmac.c dwc_gmac_reg.h dwc_gmac_var.h

Log Message:
Make the MII clock variable and passed in from the frontend.


To generate a diff of this commit:
cvs rdiff -u -r1.2 -r1.3 src/sys/dev/ic/dwc_gmac.c
cvs rdiff -u -r1.1 -r1.2 src/sys/dev/ic/dwc_gmac_reg.h \
    src/sys/dev/ic/dwc_gmac_var.h

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/dev/ic/dwc_gmac.c
diff -u src/sys/dev/ic/dwc_gmac.c:1.2 src/sys/dev/ic/dwc_gmac.c:1.3
--- src/sys/dev/ic/dwc_gmac.c:1.2	Tue Sep  9 07:18:35 2014
+++ src/sys/dev/ic/dwc_gmac.c	Tue Sep  9 10:04:19 2014
@@ -39,7 +39,7 @@
 
 #include <sys/cdefs.h>
 
-__KERNEL_RCSID(1, "$NetBSD: dwc_gmac.c,v 1.2 2014/09/09 07:18:35 martin Exp $");
+__KERNEL_RCSID(1, "$NetBSD: dwc_gmac.c,v 1.3 2014/09/09 10:04:19 martin Exp $");
 
 #include "opt_inet.h"
 
@@ -92,7 +92,7 @@ static int dwc_gmac_ioctl(struct ifnet *
 #define RX_DESC_OFFSET(N)	((N)*sizeof(struct dwc_gmac_dev_dmadesc))
 
 void
-dwc_gmac_attach(struct dwc_gmac_softc *sc, uint8_t *ep)
+dwc_gmac_attach(struct dwc_gmac_softc *sc, uint8_t *ep, uint32_t mii_clk)
 {
 	uint8_t enaddr[ETHER_ADDR_LEN];
 	uint32_t maclo, machi;
@@ -100,6 +100,7 @@ dwc_gmac_attach(struct dwc_gmac_softc *s
 	struct ifnet * const ifp = &sc->sc_ec.ec_if;
 
 	mutex_init(&sc->sc_mdio_lock, MUTEX_DEFAULT, IPL_NET);
+	sc->sc_mii_clk = mii_clk & 7;
 
 	/*
 	 * If the frontend did not pass in a pre-configured ethernet mac
@@ -241,13 +242,14 @@ dwc_gmac_miibus_read_reg(device_t self, 
 		| ((reg << GMAC_MII_REG_SHIFT) & GMAC_MII_REG_MASK);
 
 	mutex_enter(&sc->sc_mdio_lock);
-	bus_space_write_4(sc->sc_bst, sc->sc_bsh, AWIN_GMAC_MAC_MIIADDR, miiaddr
-	    | GMAC_MII_CLK_150_250M | GMAC_MII_BUSY);
+	bus_space_write_4(sc->sc_bst, sc->sc_bsh, AWIN_GMAC_MAC_MIIADDR,
+	    miiaddr | GMAC_MII_BUSY | (sc->sc_mii_clk << 2));
 
 	for (cnt = 0; cnt < 1000; cnt++) {
-		if (!(bus_space_read_4(sc->sc_bst, sc->sc_bsh, AWIN_GMAC_MAC_MIIADDR)
-		    & GMAC_MII_BUSY)) {
-			rv = bus_space_read_4(sc->sc_bst, sc->sc_bsh, AWIN_GMAC_MAC_MIIDATA);
+		if (!(bus_space_read_4(sc->sc_bst, sc->sc_bsh,
+		    AWIN_GMAC_MAC_MIIADDR) & GMAC_MII_BUSY)) {
+			rv = bus_space_read_4(sc->sc_bst, sc->sc_bsh,
+			    AWIN_GMAC_MAC_MIIDATA);
 			break;
 		}
 		delay(10);
@@ -267,15 +269,16 @@ dwc_gmac_miibus_write_reg(device_t self,
 
 	miiaddr = ((phy << GMAC_MII_PHY_SHIFT) & GMAC_MII_PHY_MASK)
 		| ((reg << GMAC_MII_REG_SHIFT) & GMAC_MII_REG_MASK)
-		| GMAC_MII_BUSY | GMAC_MII_WRITE;
+		| GMAC_MII_BUSY | GMAC_MII_WRITE | (sc->sc_mii_clk << 2);
 
 	mutex_enter(&sc->sc_mdio_lock);
 	bus_space_write_4(sc->sc_bst, sc->sc_bsh, AWIN_GMAC_MAC_MIIDATA, val);
-	bus_space_write_4(sc->sc_bst, sc->sc_bsh, AWIN_GMAC_MAC_MIIADDR, miiaddr);
+	bus_space_write_4(sc->sc_bst, sc->sc_bsh, AWIN_GMAC_MAC_MIIADDR,
+	    miiaddr);
 
 	for (cnt = 0; cnt < 1000; cnt++) {
-		if (!(bus_space_read_4(sc->sc_bst, sc->sc_bsh, AWIN_GMAC_MAC_MIIADDR)
-		    & GMAC_MII_BUSY))
+		if (!(bus_space_read_4(sc->sc_bst, sc->sc_bsh,
+		    AWIN_GMAC_MAC_MIIADDR) & GMAC_MII_BUSY))
 			break;
 		delay(10);
 	}

Index: src/sys/dev/ic/dwc_gmac_reg.h
diff -u src/sys/dev/ic/dwc_gmac_reg.h:1.1 src/sys/dev/ic/dwc_gmac_reg.h:1.2
--- src/sys/dev/ic/dwc_gmac_reg.h:1.1	Mon Sep  8 14:24:32 2014
+++ src/sys/dev/ic/dwc_gmac_reg.h	Tue Sep  9 10:04:19 2014
@@ -62,7 +62,6 @@
 
 #define	GMAC_MII_BUSY			1
 #define	GMAC_MII_WRITE			2
-#define	GMAC_MII_CLK_150_250M		0x10
 
 #define	GMAC_BUSMODE_RESET		1
 
Index: src/sys/dev/ic/dwc_gmac_var.h
diff -u src/sys/dev/ic/dwc_gmac_var.h:1.1 src/sys/dev/ic/dwc_gmac_var.h:1.2
--- src/sys/dev/ic/dwc_gmac_var.h:1.1	Mon Sep  8 14:24:32 2014
+++ src/sys/dev/ic/dwc_gmac_var.h	Tue Sep  9 10:04:19 2014
@@ -84,7 +84,8 @@ struct dwc_gmac_softc {
 	bus_dma_segment_t sc_dma_ring_seg;	/* and TX ring */
 	struct dwc_gmac_rx_ring sc_rxq;
 	struct dwc_gmac_tx_ring sc_txq;
+	uint16_t sc_mii_clk;
 };
 
-void dwc_gmac_attach(struct dwc_gmac_softc*, uint8_t*);
+void dwc_gmac_attach(struct dwc_gmac_softc*, uint8_t*, uint32_t);
 int dwc_gmac_intr(struct dwc_gmac_softc*);

Reply via email to