aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/net/stmmac/stmmac.h1
-rw-r--r--drivers/net/stmmac/stmmac_main.c1
-rw-r--r--drivers/net/stmmac/stmmac_mdio.c5
-rw-r--r--include/linux/stmmac.h1
4 files changed, 6 insertions, 2 deletions
diff --git a/drivers/net/stmmac/stmmac.h b/drivers/net/stmmac/stmmac.h
index d0ddab0d21c2..12d1cb00c0d7 100644
--- a/drivers/net/stmmac/stmmac.h
+++ b/drivers/net/stmmac/stmmac.h
@@ -78,6 +78,7 @@ struct stmmac_priv {
78 unsigned int flow_ctrl; 78 unsigned int flow_ctrl;
79 unsigned int pause; 79 unsigned int pause;
80 struct mii_bus *mii; 80 struct mii_bus *mii;
81 int mii_clk_csr;
81 82
82 u32 msg_enable; 83 u32 msg_enable;
83 spinlock_t lock; 84 spinlock_t lock;
diff --git a/drivers/net/stmmac/stmmac_main.c b/drivers/net/stmmac/stmmac_main.c
index 03c160c6d75c..a169b1441d50 100644
--- a/drivers/net/stmmac/stmmac_main.c
+++ b/drivers/net/stmmac/stmmac_main.c
@@ -1704,6 +1704,7 @@ static int stmmac_dvr_probe(struct platform_device *pdev)
1704 plat_dat = pdev->dev.platform_data; 1704 plat_dat = pdev->dev.platform_data;
1705 priv->bus_id = plat_dat->bus_id; 1705 priv->bus_id = plat_dat->bus_id;
1706 priv->pbl = plat_dat->pbl; /* TLI */ 1706 priv->pbl = plat_dat->pbl; /* TLI */
1707 priv->mii_clk_csr = plat_dat->clk_csr;
1707 priv->is_gmac = plat_dat->has_gmac; /* GMAC is on board */ 1708 priv->is_gmac = plat_dat->has_gmac; /* GMAC is on board */
1708 priv->enh_desc = plat_dat->enh_desc; 1709 priv->enh_desc = plat_dat->enh_desc;
1709 priv->ioaddr = addr; 1710 priv->ioaddr = addr;
diff --git a/drivers/net/stmmac/stmmac_mdio.c b/drivers/net/stmmac/stmmac_mdio.c
index 03dea1401571..d7441616357d 100644
--- a/drivers/net/stmmac/stmmac_mdio.c
+++ b/drivers/net/stmmac/stmmac_mdio.c
@@ -53,7 +53,7 @@ static int stmmac_mdio_read(struct mii_bus *bus, int phyaddr, int phyreg)
53 int data; 53 int data;
54 u16 regValue = (((phyaddr << 11) & (0x0000F800)) | 54 u16 regValue = (((phyaddr << 11) & (0x0000F800)) |
55 ((phyreg << 6) & (0x000007C0))); 55 ((phyreg << 6) & (0x000007C0)));
56 regValue |= MII_BUSY; /* in case of GMAC */ 56 regValue |= MII_BUSY | ((priv->mii_clk_csr & 7) << 2);
57 57
58 do {} while (((readl(priv->ioaddr + mii_address)) & MII_BUSY) == 1); 58 do {} while (((readl(priv->ioaddr + mii_address)) & MII_BUSY) == 1);
59 writel(regValue, priv->ioaddr + mii_address); 59 writel(regValue, priv->ioaddr + mii_address);
@@ -85,7 +85,8 @@ static int stmmac_mdio_write(struct mii_bus *bus, int phyaddr, int phyreg,
85 (((phyaddr << 11) & (0x0000F800)) | ((phyreg << 6) & (0x000007C0))) 85 (((phyaddr << 11) & (0x0000F800)) | ((phyreg << 6) & (0x000007C0)))
86 | MII_WRITE; 86 | MII_WRITE;
87 87
88 value |= MII_BUSY; 88 value |= MII_BUSY | ((priv->mii_clk_csr & 7) << 2);
89
89 90
90 /* Wait until any existing MII operation is complete */ 91 /* Wait until any existing MII operation is complete */
91 do {} while (((readl(priv->ioaddr + mii_address)) & MII_BUSY) == 1); 92 do {} while (((readl(priv->ioaddr + mii_address)) & MII_BUSY) == 1);
diff --git a/include/linux/stmmac.h b/include/linux/stmmac.h
index a4adf0de6ed6..c87c88ccffc0 100644
--- a/include/linux/stmmac.h
+++ b/include/linux/stmmac.h
@@ -32,6 +32,7 @@
32struct plat_stmmacenet_data { 32struct plat_stmmacenet_data {
33 int bus_id; 33 int bus_id;
34 int pbl; 34 int pbl;
35 int clk_csr;
35 int has_gmac; 36 int has_gmac;
36 int enh_desc; 37 int enh_desc;
37 void (*fix_mac_speed)(void *priv, unsigned int speed); 38 void (*fix_mac_speed)(void *priv, unsigned int speed);