summaryrefslogtreecommitdiffstats
path: root/sys/mips/nlm/dev/net/mdio.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/mips/nlm/dev/net/mdio.c')
-rw-r--r--sys/mips/nlm/dev/net/mdio.c23
1 files changed, 20 insertions, 3 deletions
diff --git a/sys/mips/nlm/dev/net/mdio.c b/sys/mips/nlm/dev/net/mdio.c
index ed2abe4..0845339 100644
--- a/sys/mips/nlm/dev/net/mdio.c
+++ b/sys/mips/nlm/dev/net/mdio.c
@@ -149,7 +149,8 @@ nlm_int_gmac_mdio_reset(uint64_t nae_base, int bus, int block,
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, int bus, int block,
{
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, int bus, int block,
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);
+}
OpenPOWER on IntegriCloud