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