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*);