svn commit: r245881 - in head/sys/mips/nlm: dev/net hal

Jayachandran C. jchandra at FreeBSD.org
Thu Jan 24 15:14:24 UTC 2013


Author: jchandra
Date: Thu Jan 24 15:14:22 2013
New Revision: 245881
URL: http://svnweb.freebsd.org/changeset/base/245881

Log:
  Broadcom XLP network driver update for XLP 8xx B1 rev
  
  Update MDIO reset code to support Broadcom XLP B1 revisions.
  Update nlm_xlpge_ioctl, nlm_xlpge_port_enable need not be
  called after nlm_xlpge_init.
  
  Obtained from:	Venkatesh J V <venkatesh.vivekanandan at broadcom.com>

Modified:
  head/sys/mips/nlm/dev/net/mdio.c
  head/sys/mips/nlm/dev/net/sgmii.c
  head/sys/mips/nlm/dev/net/xlpge.c
  head/sys/mips/nlm/hal/mdio.h

Modified: head/sys/mips/nlm/dev/net/mdio.c
==============================================================================
--- head/sys/mips/nlm/dev/net/mdio.c	Thu Jan 24 14:42:58 2013	(r245880)
+++ head/sys/mips/nlm/dev/net/mdio.c	Thu Jan 24 15:14:22 2013	(r245881)
@@ -149,7 +149,8 @@ nlm_int_gmac_mdio_reset(uint64_t nae_bas
 	uint32_t val;
 
 	val = (7 << INT_MDIO_CTRL_XDIV_POS) | 
-	    (1 << INT_MDIO_CTRL_MCDIV_POS);
+	    (1 << INT_MDIO_CTRL_MCDIV_POS) |
+	    (INT_MDIO_CTRL_SMP);
 
 	nlm_write_nae_reg(nae_base,
 	    NAE_REG(block, intf_type, (INT_MDIO_CTRL + bus * 4)), 
@@ -302,10 +303,13 @@ nlm_gmac_mdio_reset(uint64_t nae_base, i
 {
 	uint32_t ctrlval;
 
+	ctrlval = nlm_read_nae_reg(nae_base,
+	    NAE_REG(block, intf_type, (EXT_G0_MDIO_CTRL+bus*4)));
+
 	if (nlm_is_xlp8xx_ax() || nlm_is_xlp8xx_b0() || nlm_is_xlp3xx_ax())
-	    	ctrlval = EXT_G_MDIO_DIV;
+		ctrlval |= EXT_G_MDIO_DIV;
 	else
-		ctrlval = EXT_G_MDIO_DIV_WITH_HW_DIV64;
+		ctrlval |= EXT_G_MDIO_DIV_WITH_HW_DIV64;
 
 	nlm_write_nae_reg(nae_base,
 	    NAE_REG(block, intf_type, (EXT_G0_MDIO_CTRL + bus * 4)), 
@@ -314,3 +318,16 @@ nlm_gmac_mdio_reset(uint64_t nae_base, i
 	    NAE_REG(block, intf_type, (EXT_G0_MDIO_CTRL + bus * 4)), ctrlval);
 	return (0);
 }
+
+/*
+ * nlm_mdio_reset_all : reset all internal and external MDIO
+ */
+void
+nlm_mdio_reset_all(uint64_t nae_base)
+{
+	/* reset internal MDIO */
+	nlm_int_gmac_mdio_reset(nae_base, 0, BLOCK_7, LANE_CFG);
+	/* reset external MDIO */
+	nlm_gmac_mdio_reset(nae_base, 0, BLOCK_7, LANE_CFG);
+	nlm_gmac_mdio_reset(nae_base, 1, BLOCK_7, LANE_CFG);
+}

Modified: head/sys/mips/nlm/dev/net/sgmii.c
==============================================================================
--- head/sys/mips/nlm/dev/net/sgmii.c	Thu Jan 24 14:42:58 2013	(r245880)
+++ head/sys/mips/nlm/dev/net/sgmii.c	Thu Jan 24 15:14:22 2013	(r245881)
@@ -69,13 +69,6 @@ nlm_configure_sgmii_interface(uint64_t n
 void
 nlm_sgmii_pcs_init(uint64_t nae_base, uint32_t cplx_mask)
 {
-	/* reset internal MDIO */
-	nlm_int_gmac_mdio_reset(nae_base, 0, BLOCK_7, LANE_CFG);
-
-	/* reset external MDIO */
-	nlm_gmac_mdio_reset(nae_base, 0, BLOCK_7, LANE_CFG);
-	nlm_gmac_mdio_reset(nae_base, 1, BLOCK_7, LANE_CFG);
-
 	xlp_nae_config_lane_gmac(nae_base, cplx_mask);
 }
 

Modified: head/sys/mips/nlm/dev/net/xlpge.c
==============================================================================
--- head/sys/mips/nlm/dev/net/xlpge.c	Thu Jan 24 14:42:58 2013	(r245880)
+++ head/sys/mips/nlm/dev/net/xlpge.c	Thu Jan 24 15:14:22 2013	(r245881)
@@ -444,6 +444,8 @@ nlm_xlpnae_init(int node, struct nlm_xlp
 	val = nlm_set_device_frequency(node, DFS_DEVICE_NAE, sc->freq);
 	printf("Setup NAE frequency to %dMHz\n", val);
 
+	nlm_mdio_reset_all(nae_base);
+
 	printf("Initialze SGMII PCS for blocks 0x%x\n", sc->sgmiimask);
 	nlm_sgmii_pcs_init(nae_base, sc->sgmiimask);
 
@@ -797,8 +799,9 @@ nlm_xlpge_ioctl(struct ifnet *ifp, u_lon
 		if (ifp->if_flags & IFF_UP) {
 			if ((ifp->if_drv_flags & IFF_DRV_RUNNING) == 0)
 				nlm_xlpge_init(sc);
-		    	nlm_xlpge_mac_set_rx_mode(sc);
-			nlm_xlpge_port_enable(sc);
+			else
+				nlm_xlpge_port_enable(sc);
+			nlm_xlpge_mac_set_rx_mode(sc);
 			sc->link = NLM_LINK_UP;
 		} else {
 			if (ifp->if_drv_flags & IFF_DRV_RUNNING)
@@ -1288,6 +1291,7 @@ nlm_xlpge_attach(device_t dev)
 	nlm_xlpge_ifinit(sc);
 	ifp_ports[port].xlpge_sc = sc;
 	nlm_xlpge_mii_init(dev, sc);
+
 	nlm_xlpge_setup_stats_sysctl(dev, sc);
 
 	return (0);
@@ -1385,7 +1389,7 @@ nlm_xlpge_mii_statchg(device_t dev)
 		    sc->block, sc->port, speed, duplexity);
 
 		nlm_nae_setup_mac(sc->base_addr, sc->block, sc->port, 0, 1, 1,
-			sc->speed, sc->duplexity);
+		    sc->speed, sc->duplexity);
 	}
 }
 

Modified: head/sys/mips/nlm/hal/mdio.h
==============================================================================
--- head/sys/mips/nlm/hal/mdio.h	Thu Jan 24 14:42:58 2013	(r245880)
+++ head/sys/mips/nlm/hal/mdio.h	Thu Jan 24 15:14:22 2013	(r245881)
@@ -100,6 +100,7 @@ int nlm_int_gmac_mdio_reset(uint64_t, in
 int nlm_gmac_mdio_read(uint64_t, int, int, int, int, int);
 int nlm_gmac_mdio_write(uint64_t, int, int, int, int, int, uint16_t);
 int nlm_gmac_mdio_reset(uint64_t, int, int, int);
+void nlm_mdio_reset_all(uint64_t);
 
 #endif /* !(LOCORE) && !(__ASSEMBLY__) */
 #endif


More information about the svn-src-head mailing list